■ はじめに
小ネタ。 調査で、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
* 桁揃えなしのテーブル出力モード
-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