OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

SELECT結果をCSV出力する方法

公開日:
更新日:
基本操作
#vsql
#データ抽出

はじめに

SELECT文の結果をCSVファイルに出力したい場合は、LinuxOSのプロンプトで「vsqlユーティリティ」と「OSコマンド」を組み合わせて実行します。本記事では、以下のOSコマンドを利用する方法をご紹介します。

   方法①:「awkコマンド」を使用
   方法②:「sedコマンド」を使用

「vsqlユーティリティ」と「OSコマンド」を使用する方法

方法①:「awkコマンド」を使用

以下の例では、【vsqlユーティリティからSQLを実行 -> 実行結果をawkコマンドで変更 -> CSV出力】の処理をしています。

【構文】

$ vsql -w パスワード -F '囲み文字+区切り文字+囲み文字' -P footer=off -AXtnqc "SELECT文" | awk '{print "行頭の囲み文字"$0"行末の囲み文字"}'  > CSVファイル名

【実行例】
vsqlコマンドの -F オプションで区切り文字を「,」に指定、awkコマンドで各データの先頭および末尾に「”」を付与しています。

$ vsql -w test -F '","' -P footer=off -AXtnqc "select * from test;" | awk '{print "\""$0"\""}'  > /home/dbadmin/test1.csv
$ cat /home/dbadmin/test1.csv
"1","SATO","100"
"2","MIKE","200"
"3","ALICE","300"

【補足】
区切り文字にタブを使用する場合は、-Fオプションに「-F $'”\t”‘」と指定します。以下は実行例です。

$ vsql -w test -F $'"\t"' -P footer=off -AXtnqc "select * from test;" | awk '{print "\""$0"\""}' > /home/dbadmin/test2.csv
$ cat /home/dbadmin/test2.csv
"1"     "SATO"  "100"
"2"     "MIKE"  "200"
"3"     "ALICE" "300""

※vsqlには出力ファイルの区切り文字を指定するオプション(-F)は用意されていますが、囲み文字を指定するオプションが用意されていません。そのため、vsqlの-Fオプションで「”,”」のように区切り文字の前後に囲み文字も付与し、且つ、sedコマンドやawkコマンドを用いてvsql出力行の行頭および行末に「”」を付与しています。

方法②:「sedコマンド」を使用

以下の例では、【vsqlユーティリティからSQLを実行 -> 実行結果をsedコマンドで変更 -> CSV出力】の処理をしています。

【構文】

$ vsql -w パスワード -F '区切り文字' -P footer=off -Aqc "SELECT文" | sed -e 's/[\"]/\\&/g' -e 's/区切り文字/囲み文字&囲み文字/g' -e 's/^\|$/行の先頭と末尾に追加する囲み文字/g' > CSVファイル名

【実行例】
vsqlコマンドの -F オプションで区切り文字を「,」に指定、sedコマンドで各データの先頭および末尾に「”」を付与しています。

$ vsql -w test -F ',' -P footer=off -Aqc "select * from test;" | sed -e 's/[\"]/\\&/g' -e 's/,/"&"/g' -e 's/^\|$/"/g' > /home/dbadmin/test3.csv
$ cat /home/dbadmin/test3.csv
"id","name","sal"
"1","SATO","100"
"2","MIKE","200"
"3","ALICE","300"

【補足】
区切り文字にタブを使用する場合は、-Fオプションに「-F $’\t’」と指定します。「$」は、ログインシェルがbashの場合に、バックスラッシュをエスケープするフォーマットです。以下は実行例です。

$ vsql -w test -F $'\t' -P footer=off -Aqc "SELECT * FROM test;" | sed 's/^/"/; s/$/"/; s/\t/"\t"/g'  > /home/dbadmin/test4.csv
$ cat /home/dbadmin/test3.csv
"id"    "name"  "sal"
"1"     "SATO"  "100"
"2"     "MIKE"  "200"
"3"     "ALICE" "300"

参考情報

Verticaで既存環境のテーブルのDDLとデータを一括で抽出する方法
SELECT結果をCSV出力する方法(その2)
Export to CSV File With Fields Enclosed by Quotes

検証バージョンについて

この記事の内容はVertica 24.4で確認しています。

更新履歴

2024/12/27 以下の内容を更新
       ・sedコマンドを使用する場合の内容を追加
       ・参考情報にメーカーのブログを追加
2015/04/23 本記事を公開