41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

Rainbow CSV使ってみた

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入れてないって場合はココでも参照して、MicrosoftVSのダウンロードサイトから落っことしてきてインストールすればすぐ済む。(難しいことは何もない)

Rainbow CSV

Rainbow CSVココひらいてInstallボタン押せばOK

触ってみる

まずはネタファイルを手に入れる

試しに国土交通省・位置参照情報のファイルを落としてきて、見てみよう。

好きな都道府県ので良いと思うけど、俺は東京で。

ちなみに、ファイルがSHIFT-JISなのでそこは注意(VSCode文字コードがutf8とかだと文字化けする)。

ファイルを開いてみる

  1. 適当なところに任意のCSVファイルを置いて、VS Codeを開いて、ファイル(F)>ファイルを開く またはフォルダを開くを選択
  2. フォルダを開くの場合は、対象のファイルを選択すれば下記の画面のような感じのものが見えるはず f:id:next4us-ti:20181201223923p:plain

まあ、ここまではふーん、って感じ。

そのSQLライクな奴ってどこよ?

f:id:next4us-ti:20181201223950p:plain

画面下のほうにある 「RBQL」 って書いてるコレをクリックすると、

f:id:next4us-ti:20181201224026p:plain

あー、出たでた。

SQL(っぽいものを書いてみよう)

SELECT文

構文

f:id:next4us-ti:20181201224516p:plain 公式のREADMEより

  • FROM句が無い(そりゃそうか)
  • INSERTやDELETEとかは無いけど、UPDATEはできるんだ。(SELECTやUPDATEできるならDELETEはできても良さそうだけど)
  • GROUP BYとかDISTINCTもできるんだ?
  • JOIN?

f:id:next4us-ti:20181201224247p:plain 同上より

へー、別のファイルと結合できるんや?

本当にSQLっぽい。

DISTINCT 試してみる

f:id:next4us-ti:20181201224250p:plain f:id:next4us-ti:20181201224256p:plain ほうほう、ちゃんとDISTINCTしてる。

グループごとのカウント(+LIMIT)もやってみるか

f:id:next4us-ti:20181201224301p:plain f:id:next4us-ti:20181201224307p:plain できるねー。面白い。

ORDER BYも試す

f:id:next4us-ti:20181201224332p:plain f:id:next4us-ti:20181201224410p:plain ちゃんとソートされてるね f:id:next4us-ti:20181201224417p:plain f:id:next4us-ti:20181201224429p:plain 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です。

f:id:next4us-ti:20181201224438p:plain

おお、ファイル間の結合できた。

UPDATE

見えている1行目の東京都をTokyoに更新してみる。 f:id:next4us-ti:20181201224443p:plain f:id:next4us-ti:20181201224452p:plain 更新されてる。

地味にイイ点

  • UPDATEやSELECTした結果等、よく見ると別ファイルにしてるんだよね。本体へのダメージを考える必要なし。
  • (INSERTやDELETEはSELECTした結果で別途作れるから代替できるってことでいらね、ってなったんだろうな)

注意点

  • 逆に、別ファイルが作られるので、UPDATEとか調子に乗って大量に発行するとゴミができ続けるので注意
  • where句でandが使えない
  • 2バイト文字での条件指定やUPDATE時のSETでうまくいかない…。 (文字コードの問題かそれともそもそも2バイト文字駄目なのかは不明)
  • =は==で書かないといけません。UPDATEとかのSET句のやつは=一個で。
  • COUNT()等の関数は大文字で!(count()みたいな小文字だとエラーになる)
  • 相対パスWindowsの場合だからか動かない。絶対パスだと動く。Linuxだと相対パスでも動くんかな?
  • JOINは複数の条件には対応してないみたい。
  • 恐らく処理速度は実行しているクライアントのメモリやディスク、CPUの性能によりそう
  • RBQL画面、2個開くと最初に開いたやつがバグる f:id:next4us-ti:20181201224501p:plain 実行してみたけど、動かないな・・・。 f:id:next4us-ti:20181201224508p:plain

所感

うーん、どうだろう。ちょっと使うにはいいけど、ゴリゴリ使うにはかゆいところに手が届かない感じがまだするな。

特にANDが使えないところと、2バイト文字が使えなさそうなところが。

個人的には直接INSERT・DELETEできないとこ(ファイルが無駄に増えるのを抑える方法が無い)もかな。

もしかしたらWindows上で試したからかもしれないので、Linux上で試した人がいたら教えてください。

と色々言ったが、二つのファイルを結合できて、SQLで異なるDBから出力したファイルのデータを更にJOINできるのは便利だな。

DBに負荷かけたくないという場合には別の暇してるマシンでやっときゃいい訳だし。(GBとかTBのファイル操作は無理だけどw)

その他

vim用のpluginもあるらしい。

github.com

今度使ってみるか。

RBQL自体は、Python ないし JavaScript で単体でもCLIで実行可能なことも教えてもらった

Python (PyPI)

pypi.org

JS (npm)

www.npmjs.com

類似のものとしてCSV 的なものにクエリ流せる q もある

q - Text as Data github.com

参考

marketplace.visualstudio.com

kakakakakku.hatenablog.com

Windows で Visual Studio Code のインストール