はじめに
この記事では、テーブルのSELECT COUNT(*)での件数確認やDROP TABLE文、TRUNCATE TABLE文を一括で自動生成する方法についてご紹介します。手順の概要
以下のような処理をvsqlのコマンドラインから実行します。 ・vsqlのオプション「-c」を使ってコマンドラインからSQLを実行
・システムテーブルの「tables」から、スキーマ名とテーブル名を抽出
・SELECT COUNT(*) / DROP TABLE / TRUNCATE TABLEなどの文字列を連結
・ヘッダやフッタなどの余計な文字列をsedやawkなどのOSコマンドを組み合わせて削除
・システムテーブルの「tables」から、スキーマ名とテーブル名を抽出
・SELECT COUNT(*) / DROP TABLE / TRUNCATE TABLEなどの文字列を連結
・ヘッダやフッタなどの余計な文字列をsedやawkなどのOSコマンドを組み合わせて削除
一括件数確認のSQL文
SELECT COUNT(*)文を一括で自動生成するSELECT文は以下のとおりです。
1 2 3 4 5 6 7 8 9 |
$ vsql -w vdb -c "select 'select count(*) as '||table_name||' from '||table_schema||'.'||table_name||';' from tables;" |grep -Ev "column|table_|-|rows"| sed -e '$d' <出力例> select count(*) as customer from ssbm.customer; select count(*) as lineorder from ssbm.lineorder; select count(*) as part from ssbm.part; select count(*) as supplier from ssbm.supplier; select count(*) as date1 from ssbm.date1; |
一括テーブル削除のSQL文
DROP TABLE文を一括で自動生成するSELECT文は以下のとおりです。
1 2 3 4 5 6 7 8 9 |
$ vsql -w vdb -c "select 'drop table '||table_schema||'.'||table_name||' cascade;' from tables;" |grep -Ev "column|table_|-|rows"| sed -e '$d' <出力例> drop table ssbm.customer cascade; drop table ssbm.lineorder cascade; drop table ssbm.part cascade; drop table ssbm.supplier cascade; drop table ssbm.date1 cascade; |
一括データ削除のSQL文
TRUNCATE TABLE文を一括で自動生成するSELECT文は以下のとおりです。
1 2 3 4 5 6 7 8 9 |
$ vsql -w vdb -c "select 'truncate table '||table_schema||'.'||table_name||';' from tables;" |grep -Ev "column|table_|-|rows"| sed -e '$d' <出力例> truncate table ssbm.customer; truncate table ssbm.lineorder; truncate table ssbm.part; truncate table ssbm.supplier; truncate table ssbm.date1; |
まとめ
今回はSELECT COUNT(*)、DROP TABLE、TRUNCATE TABLEの例をご紹介しました。シンプルなSQL文の例でしたが、実行結果を任意のファイル名で保存して何かしらのジョブに組み込むなどすれば、様々なメンテナンスの効率化も可能になります。是非本記事を参考にご活用ください。参考記事
Verticaで既存環境のテーブルのDDLとデータを一括で抽出する方法http://vertica-tech.ashisuto.co.jp/export-all-data/
SELECT結果をCSV出力する方法
http://vertica-tech.ashisuto.co.jp/csv-output/