はじめに
VerticaでSQLの結果をCSVファイルに出力する方法を記載します。
過去にも同様の記事がありますが、そこではbashプロンプト上でvsqlにSQLを渡し、
その結果を > (リダイレクト)でファイル出力する方法を記載しています。
お使いのアプリケーションによっては、SQLを直接渡す方が都合が良い場合があります。
今回は、SQLをvsqlプロンプトに渡す方法を記載します。
CSV出力に必要な指定
SQL結果をCSVファイルに出力するには以下の点をvsqlオプションまたはメタコマンドを使って指定します。
・出力データを整列させる
・行だけを表示する(カラム名などのヘッダ情報は表示しない)
・区切り文字を指定する(デフォルトは | (パイプ))
・出力先となるCSVファイルの保存先の指定
実行例
ここでは実行例として、2通りの方法をご紹介します。
1つは、データベースに接続する時にvsqlオプションを使って指定する方法です。
もう1つは、データベースに接続した後にメタコマンドを使って指定する方法です。
■vsqlコマンドでデータベースに接続する時に指定する方法(vsqlオプション)
$ vsql -w -A -t -F ',' -o /tmp/table.csv
dbadmin=> select , from ;
dbadmin=> \q■vsqlコマンドでデータベースに接続した後に指定する方法(vsqlメタコマンド)
dbadmin=> \a\t\f ',' \o '/tmp/table.csv'
dbadmin=> select , from ;
dbadmin=> \qvsqlコマンドのオプションとメタコマンドの意味は以下の表をご参照ください。
| データベース接続時のオプション | データベース接続後のオプション |
|---|---|---|
出力データを整列 | -A | \a |
行データだけを表示する | -t | \t |
区切り文字を指定 | -F | \f |
出力先となるCSVファイルの保存先の指定 | -o | \o |
補足
上記の方法の場合、データを囲む文字を指定するオプションがありません。
代替方法として、以下のように連結演算子を使って囲み文字を連結して出力させる方法があります。
以下の例では、囲み文字として ” (ダブルクォーテーション)を用いています。
dbadmin=> select '"' || || '"' ,'"' || || '"' from ; 留意点
データにNULLを含む場合、その行のすべてがNULL状態として出力されます。
これは仕様によるものです。
その場合は、対象のカラムに対してIFNULL関数を使って別の文字に変換するなどの工夫が必要です。
参考
SELECT結果をCSV出力する方法
https://www.ashisuto.co.jp/cm/analytics-database/csv-output.html
Verticaで既存環境のテーブルのDDLとデータを一括で抽出する方法
https://www.ashisuto.co.jp/cm/analytics-database/export-all-data.html
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。