Rainbow CSVって?
CSVファイルやTSVファイルをさまざまな色で強調表示し、 SQLのようなクエリを実行することができる Visual Studio Codeの拡張機能です。
https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv
twitter上で見かけたんで、試してみようかと。
具体的には何ができるの?
Rainbow CSV: Main features
- Highlight columns in comma (.csv), tab (.tsv), semicolon and pipe - separated files in different colors.
カンマ(.csv)、タブ(.tsv)、セミコロンとパイプで区切ったファイルを色分けして強調表示します。 - Provide info about column on mouse hover.
マウスのホバー上の列に関する情報を提供します。 - Automatic consistency check for csv files (CSVLint).
csvファイルの自動一貫性チェック(CSVLint) - Multi-cursor column edit
複数カーソルの列の編集 - Run queries in SQL-like language
SQLのような言語でクエリを実行する - Lightweight and dependency-free
軽量かつ依存性がない
ふーむ、とりあえず入れて使ってみるか。
インストール
そもそもVS Code無い人
そもそもVisual Studio Code入れてないって場合はココでも参照して、MicrosoftのVSのダウンロードサイトから落っことしてきてインストールすればすぐ済む。(難しいことは何もない)
Rainbow CSV
Rainbow CSVはココひらいてInstallボタン押せばOK
触ってみる
まずはネタファイルを手に入れる
試しに国土交通省・位置参照情報のファイルを落としてきて、見てみよう。
好きな都道府県ので良いと思うけど、俺は東京で。
ちなみに、ファイルがSHIFT-JISなのでそこは注意(VSCodeの文字コードがutf8とかだと文字化けする)。
ファイルを開いてみる
- 適当なところに任意のCSVファイルを置いて、VS Codeを開いて、ファイル(F)>ファイルを開く またはフォルダを開くを選択
- フォルダを開くの場合は、対象のファイルを選択すれば下記の画面のような感じのものが見えるはず
まあ、ここまではふーん、って感じ。
そのSQLライクな奴ってどこよ?
画面下のほうにある 「RBQL」 って書いてるコレをクリックすると、
あー、出たでた。
SQL(っぽいものを書いてみよう)
SELECT文
構文
- FROM句が無い(そりゃそうか)
- INSERTやDELETEとかは無いけど、UPDATEはできるんだ。(SELECTやUPDATEできるならDELETEはできても良さそうだけど)
- GROUP BYとかDISTINCTもできるんだ?
- JOIN?
同上より
へー、別のファイルと結合できるんや?
本当にSQLっぽい。
DISTINCT 試してみる
ほうほう、ちゃんとDISTINCTしてる。
グループごとのカウント(+LIMIT)もやってみるか
できるねー。面白い。
ORDER BYも試す
ちゃんとソートされてるね DESCでのソートも利いてる。
JOIN
前述の国土交通省・位置参照情報のファイルには2種類×2種類あって、 - 都道府県単位 - 市区町村単位
と、その下の - 街区レベル - 大字・町丁目レベル
というのがある。
街区レベルと大字・町丁目レベルで表示項目が結構違うんだけど、都道府県名、市区町村名、大字・町丁目名あたりが共通なので使えそう。
http://w3land.mlit.go.jp/isj/data.html
select * inner join C:\Users\hogehoge\Downloads\住所一覧\13000-16.0a\13_2017.csv on a6 == b3 order by a2, a4, a6 limit 10
C:\Users\hogehoge\Downloads\住所一覧 ってのは今回ファイルを置いた場所。 使ってるマシンのOSはWindowsです。
おお、ファイル間の結合できた。
UPDATE
見えている1行目の東京都をTokyoに更新してみる。 更新されてる。
地味にイイ点
- UPDATEやSELECTした結果等、よく見ると別ファイルにしてるんだよね。本体へのダメージを考える必要なし。
- (INSERTやDELETEはSELECTした結果で別途作れるから代替できるってことでいらね、ってなったんだろうな)
注意点
- 逆に、別ファイルが作られるので、UPDATEとか調子に乗って大量に発行するとゴミができ続けるので注意
- where句でandが使えない
- 2バイト文字での条件指定やUPDATE時のSETでうまくいかない…。 (文字コードの問題かそれともそもそも2バイト文字駄目なのかは不明)
- =は==で書かないといけません。UPDATEとかのSET句のやつは=一個で。
- COUNT()等の関数は大文字で!(count()みたいな小文字だとエラーになる)
- 相対パスがWindowsの場合だからか動かない。絶対パスだと動く。Linuxだと相対パスでも動くんかな?
- JOINは複数の条件には対応してないみたい。
- 恐らく処理速度は実行しているクライアントのメモリやディスク、CPUの性能によりそう
- RBQL画面、2個開くと最初に開いたやつがバグる 実行してみたけど、動かないな・・・。
所感
うーん、どうだろう。ちょっと使うにはいいけど、ゴリゴリ使うにはかゆいところに手が届かない感じがまだするな。
特にANDが使えないところと、2バイト文字が使えなさそうなところが。
個人的には直接INSERT・DELETEできないとこ(ファイルが無駄に増えるのを抑える方法が無い)もかな。
もしかしたらWindows上で試したからかもしれないので、Linux上で試した人がいたら教えてください。
と色々言ったが、二つのファイルを結合できて、SQLで異なるDBから出力したファイルのデータを更にJOINできるのは便利だな。
DBに負荷かけたくないという場合には別の暇してるマシンでやっときゃいい訳だし。(GBとかTBのファイル操作は無理だけどw)
その他
vim用のpluginもあるらしい。
今度使ってみるか。
RBQL自体は、Python ないし JavaScript で単体でもCLIで実行可能なことも教えてもらった
Python (PyPI)
JS (npm)
類似のものとしてCSV 的なものにクエリ流せる q もある
q - Text as Data github.com