シェルからSQL実行する(csvq-01,MAC,zsh)
概要
SQLを実行して何か結果を出すということは、データベースソフトの機能を使用しなくても、SQL実行をサポートしたツールを使用しても可能である。
csvqはcsvファイルに対してSQLを使用した操作が行えるツールである。
MACなのでHomebrewで導入しておく。
-zsh % brew install csvq
Running `brew update --auto-update`...
==> Fetching csvq
==> Downloading https://ghcr.io/v2/homebrew/core/csvq/manifests/1.17.11
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/csvq/blobs/sha256:3acf6913cceb2
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Pouring csvq--1.17.11.ventura.bottle.tar.gz
🍺 /usr/local/Cellar/csvq/1.17.11: 6 files, 15.2MB
==> Running `brew cleanup csvq`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
どうもvalues()を使った記法は使用できないようであるが、FROM抜きやDUAL使用のSELECTは使用できる。
-zsh % csvq "select 5+4*3/2-1;"
+-------------------+
| 5 + 4 * 3 / 2 - 1 |
+-------------------+
| 10 |
+-------------------+
-zsh % csvq "select 5+4*3/2-1 from DUAL;"
+-------------------+
| 5 + 4 * 3 / 2 - 1 |
+-------------------+
| 10 |
+-------------------+
文末のセミコロンはなくても動作は変わらない。
-zsh % csvq "select 5+4*3/2-1"
+-------------------+
| 5 + 4 * 3 / 2 - 1 |
+-------------------+
| 10 |
+-------------------+
-zsh % csvq "select 5+4*3/2-1 from DUAL"
+-------------------+
| 5 + 4 * 3 / 2 - 1 |
+-------------------+
| 10 |
+-------------------+
計算するだけであれば、calcというサブコマンドも使用できる。ダミーでstdinに何か入れないといけないのが美しくないが。。。
-zsh % echo | csvq calc "5 + 4 * 3 / 2 - 1 "
10%
こんな使い方もできる。
-zsh % csvq "var @i0:=5;var @i1:=4;var @i2:=3;var @i3:=2;var @i4:=1;select @i0+@i1*@i2/@i3-@i4;"
+-----------------------------+
| @i0 + @i1 * @i2 / @i3 - @i4 |
+-----------------------------+
| 10 |
+-----------------------------+
これは便利なこともありそうである。
実行環境
-zsh % sw_vers
ProductName: macOS
ProductVersion: 13.2.1
BuildVersion: 22D68
-zsh % csvq -v
csvq version 1.17.11
参照
シェルからSQL実行する(sqlite3-01,MAC,zsh)
この記事が気に入ったらサポートをしてみませんか?