【AWS】Amazon Redshift ~ SHOW TABLE コマンド ~

■ はじめに

小ネタ。

調査で、AWS Redshift について触ることが多くて
既存のテーブルのDDL(CREATE TABLE文)が欲しいとの依頼があったので
調べてみた

目次

【1】SHOW TABLE コマンド
【2】構文
【3】実行例
【4】SHOW TABLE コマンドで CREAT TABLE文をファイル出力するシェル
 0)実装方針
 1)サンプル
 2)補足:psqlオプション (-t, -A)

【1】SHOW TABLE コマンド

* 対象テーブルのCREATE TABLE文を出力してくれる

SHOW TABLE
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_TABLE.html
SHOW EXTERNAL TABLE
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_EXTERNAL_TABLE.html
SHOW VIEW
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_VIEW.html

【2】構文

SHOW TABLE <target_table>;

【3】実行例

-- SHOW TABLE <target_table>;
SHOW TABLE category;

出力結果

CREATE TABLE public.category ( 
catid smallint NOT NULL distkey, 
catgroup character varying(10) ENCODE lzo, 
catname character varying(10) ENCODE lzo, 
catdesc character varying(50) ENCODE lzo 
) DISTSTYLE KEY SORTKEY ( catid );

【4】SHOW TABLE コマンドで CREAT TABLE文をファイル出力するシェル

* いちいち、手動でやるの大変なので、シェルを作る。

0)実装方針

[1] 以下の関連記事で行った「SVV_TABLE_INFO」内の
 「schema(スキーマ名)」「table(テーブル名)」を
 シェルで取得する

Amazon Redshift ~ システムビュー ~
https://dk521123.hatenablog.com/entry/2023/03/06/184928

 => なお、SQL結果を受け取りには、以下の関連記事を参照のこと。

シェルでSQL結果を受け取る
https://dk521123.hatenablog.com/entry/2021/08/16/231459

[2] シェルで[1]の結果を受けたら、ループさせ、
  今回の「SHOW TABLE コマンド」を叩くだけ

1)サンプル

export_tables.sh

#!/bin/bash

OUTPUT_DIR_NAME="_out"

# To modify your db params
SERVER_NAME="localhost"
PORT_NUMBER="5432"
DB_NAME="sample_db"
USER_NAME="postgres"
export PGPASSWORD="your_password"

echo "START - ${SERVER_NAME}:${PORT_NUMBER}"

# To clear
rm -rf ${OUTPUT_DIR_NAME}
mkdir ${OUTPUT_DIR_NAME}

psql \
  -h ${SERVER_NAME}  \
  -p ${PORT_NUMBER} \
  -d  ${DB_NAME} \
  -U  ${USER_NAME} \
  --no-align \
  -t \
  --field-separator '|' \
  -q \
  -c "SELECT schema AS schema_name, \"table\" AS table_name FROM SVV_TABLE_INFO;" \
| while IFS='|' read schema_name table_name; do

  echo "***************** ${schema_name}.${table_name} *****************"
  mkdir -p "./${OUTPUT_DIR_NAME}/${schema_name}"

  -- Put options(-t: --tuples-only, -A: --no-align) for output
  psql  \
  -h ${SERVER_NAME}  \
  -p ${PORT_NUMBER} \
  -d  ${DB_NAME} \
  -U  ${USER_NAME} \
  -t -A \
  -c "SHOW TABLE ${schema_name}.${table_name};" > "./${OUTPUT_DIR_NAME}/${schema_name}/${table_name}.sql"
done

# To zip...
# rm -f create_tables.zip
# zip -r create_tables.zip ./${OUTPUT_DIR_NAME}
# rm -rf ./${OUTPUT_DIR_NAME}

echo "DONE"

2)補足:psqlオプション (-t, -A)

* 出力するファイルに余計なもの(ヘッダー部とか)が付くので
 psqlオプション (-t, -A)を付けて、除外した

-t: --tuples-only

* 桁揃えなしのテーブル出力モード

https://db.just4fun.biz/?PostgreSQL/psql%E3%81%AB%E3%82%88%E3%82%8B%E5%87%BA%E5%8A%9B%E3%82%92%E3%82%BF%E3%83%97%E3%83%AB%E3%81%AE%E3%81%BF%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

-A: --no-align

* 行のみを表示

参考文献

https://dev.classmethod.jp/articles/amazon-redshift-show-table-and-view/

関連記事

Amazon Redshift ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/22/002139
Amazon Redshift ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/08/31/171754
Amazon Redshift ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/04/07/124519
Amazon Redshift ~ システムビュー ~
https://dk521123.hatenablog.com/entry/2023/03/06/184928
シェルでSQL結果を受け取る
https://dk521123.hatenablog.com/entry/2021/08/16/231459
psqlでパスワードを省略する
https://dk521123.hatenablog.com/entry/2020/03/06/000000