CSVやTSVに対してSQLでデータ処理をしたい場合がある。
色々ツールがあるようだけど、個人的に具合が良いなと思うのが、trdsql。
・入出力形式が多い。CSV, TSV, JSONなど。標準入力も使える。
・SQLのエンジンを色々使える。ディフォルトは SQLiteで、mysql、postgres も可。
・複数CSVの JOINも可能。
・Windows版バイナリもある。
コツが必要な所が合ったので、メモ。
■ trdsql 追加メモ
・文字コードが UTF-8(? みたいなので)、nkf32 にパイプする。
・ファイルパスは そのままの記述でよさげ。ドライブ名も、¥マークも。
trdsql -icsv -od "\t" "SELECT * FROM D:\TEMP\集計.CSV NA ORDER BY NA.c1" | nkf32
・ファイルパスにスペースやハイフンが含まれるときは、ファイルパスを「\"」で囲む。( \ は¥マークね)
trdsql -icsv -od "\t" "SELECT * FROM \"D:\TEMP\集計 コピー.CSV\" NA ORDER BY NA.c1" | nkf32
・UWSCの場合、「 "SELECT ~~~ FROM \<#DBL>" + CSV_PATH + "\<#DBL> " 」 みたいに指定する。
・コマンドプロンプトだと、「`」で区切って表示されるが、実行指定時は、それではダメみたい。
・テーブル名は、基本的にフルパスで指定したほうが問題が無さそう。
ファイル名がない場合、勝手にカレントから読むっぽい。それが、トラブルの原因になりそう。
・標準入力は 「-」 で指定できる
type sample.csv | trdsql -ih -oat "SELECT name FROM -"
・CSV読むときは、-icsv をつけて、<テーブル名>.c1 みたいに参照できる。c1 は1番目のカラム。
・CSVにヘッダがある場合、 -icsv -ih みたいにオプションつければ、<テーブル名>.DATE みたいにカラム名で参照できる。逆にカラム名に c1 とかは使えなくなる。
■以下 ヘルプの日本語訳
----------
trdsql - CSV、LTSV、JSON、TBLNに対してSQLクエリを実行する。
使用方法:
trdsql [OPTIONS] [SQL(SELECT...]]
オプション:
-A string ファイルを解析し、SQLのみを提案します。
-a string ファイルを解析して SQL を提案します。
-config string 設定ファイルの場所を指定します。
-db string 設定のデータベース名を指定します。
-dblist 設定のdb名を指定します。
-debug string デバッグを表示します。
-driver string データベースドライバを指定します。[ mysql | postgres | sqlite3 ]
-dsn string データベースドライバ固有のデータソース名です。
-help 使用方法の情報を表示します。
-q string 指定したファイルからクエリを読み込みます。
-version バージョン情報を表示します。
入力オプション:
-icsv 入力用のCSV形式です。
-id string 入力するフィールドの区切り文字です。(デフォルトは",")
-ig 拡張子からフォーマットを推測します。(デフォルトは "true ")
-ih 1行目はカラム名として解釈されます(CSVのみ)。
-ijson 入力にはJSON形式を使用します。
-iltsv 入力にはLTSV形式を使用します。
-ir int カラム判定のために読み込んだ行数を指定します。(デフォルトは1)
-is int ヘッダ行をスキップします。(デフォルトは0)
-itbln TBLN 形式で入力します。
出力オプション:
-oaq すべてのフィールドを引用符で囲んで出力します。
-oat 出力にはASCIIテーブルフォーマットを使用します。
-ocrlf 出力にはCRLFを使用します。各出力行を'\n'の代わりに'\r\n'で終了させます。
-ocsv 出力はCSV形式です。
-od string 出力するフィールドの区切り文字です。(デフォルトは",")
-oh ヘッダとして出力カラム名を指定します。
-ojson 出力にJSONフォーマットを使用します。
-ojsonl JSON Linesフォーマットで出力します。
-oltsv LTSV形式で出力します。
-omd マークダウン形式で出力します。
-onowrap 長い行を折り返さない(at/mdのみ)
-oq string 出力用クオート文字 (デフォルトは"\"")
-oraw Raw形式で出力します。
-otbln TBLN フォーマットで出力します。
-out string 出力ファイル名を指定します。
-out-without-guess 推測せずに出力します(-outを使用した場合)。
-ovf 出力用の縦書きフォーマットです。
-oz string 出力ファイルの圧縮形式を指定します。 [ gz | bz2 | zstd | lz4 | xz ]
www.DeepL.com/Translator(無料版)で翻訳しました。
----------
使用サンプル
trdsql "select c4,c6,c7,c8 from in1.txt where c3='0'" >in2q.txt
trdsql "SELECT u.*,h.c2 FROM in2t.txt as u LEFT JOIN keitai.csv as h ON(u.c4=h.c1)" > in3q.txt
----------
trdsql - Execute SQL queries on CSV, LTSV, JSON and TBLN.
Usage:
trdsql [OPTIONS] [SQL(SELECT...)]
Options:
-A string analyze the file but only suggest SQL.
-a string analyze the file and suggest SQL.
-config string configuration file location.
-db string specify db name of the setting.
-dblist display db information.
-debug debug print.
-driver string database driver. [ mysql | postgres | sqlite3 ]
-dsn string database driver specific data source name.
-help display usage information.
-q string read query from the specified file.
-version display version information.
Input options:
-icsv CSV format for input.
-id string field delimiter for input. (default ",")
-ig guess format from extension. (default "true")
-ih the first line is interpreted as column names(CSV only).
-ijson JSON format for input.
-iltsv LTSV format for input.
-ir int number of row preread for column determination. (default 1)
-is int skip header row. (default 0)
-itbln TBLN format for input.
Output options:
-oaq enclose all fields in quotes for output.
-oat ASCII Table format for output.
-ocrlf use CRLF for output. End each output line with '\r\n' instead of '\n'.
-ocsv CSV format for output.
-od string field delimiter for output. (default ",")
-oh output column name as header.
-ojson JSON format for output.
-ojsonl JSON Lines format for output.
-oltsv LTSV format for output.
-omd Markdown format for output.
-onowrap do not wrap long lines(at/md only).
-oq string quote character for output. (default "\"")
-oraw Raw format for output.
-otbln TBLN format for output.
-out string output file name.
-out-without-guess output without guessing (when using -out).
-ovf Vertical format for output.
-oz string output compression format. [ gz | bz2 | zstd | lz4 | xz ]
----------