Tei5’s Blog

Tei5 の メモ書き

trdsql CSVに対してSQLを

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 ]

----------