trdsql v0.10.0
trdsql v0.10.0をリリースしました。
リリースのページから各バイナリがダウンロードできます。
NULLの扱い変更
今回はNULLの扱いを変更しました。
JSONにはnullがありましたが、CSV等のテキストフォーマットには無いため、
すべて空文字として扱っていましたが、JSONのnullをSQLのNULLとして扱うようにしました。
JSONの文字列とみなせる箇所がnullの場合は、それほど問題ではありませんでしたが、
配列("[]")のようなJSONが入る箇所がnullの場合に空文字("")にしてしまうと、
SQLのJSON関数に渡しづらい問題があったためSQLのNULLにするようにしました。
これによりJSONの集計問題が解きやすくなっていると思います。
Introducing zqで示されている問題にSQLで解くときにスッキリ書けるようになっています。
上記の"A Practical Example"は、以下のSQLで解けます。
Unicodeの正規化はPostgreSQLエンジンを使用する場合はnormalize()関数があるため、間に入れれば可能です。SQLite3エンジンを使用する場合は、
別のコマンドで正規化してからパイプで使用する必要があります。
NULLオプション追加
また、-inullと-onullオプションを追加しました。-inullはSQLのNULLに変換する文字列を指定し、
-onullはSQLのNULLを指定された文字列に変換します。
CSV等のフォーマットでは、主に空文字("")をNULLにするときに使用します。
また、出力するときに -onull "\N"にしておくとPostgreSQLのCOPY文に適したフォーマットにできます。
JSONで-inull ""はnullに加えて空文字をNULLに変換することもできます。-onull ""にするとnullを止めて空文字("")で出力されます。