bash で sqlite3 をいじるためのメモ

シェル芸で sqlite3 を叩く知見がわりと溜まったのでメモついでにまとめておきます。

```bash
$ sqlite3 --version
3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt1
```

## まず適当な tsv を作る

```bash:bash
$ { seq -f '列%g' 3; seq -f 'ほげ%g' 99; } | paste - - - | tee sample.tsv
列1     列2     列3
ほげ1   ほげ2   ほげ3
ほげ4   ほげ5   ほげ6
ほげ7   ほげ8   ほげ9
ほげ10  ほげ11  ほげ12
ほげ13  ほげ14  ほげ15
ほげ16  ほげ17  ほげ18
ほげ19  ほげ20  ほげ21
ほげ22  ほげ23  ほげ24
ほげ25  ほげ26  ほげ27
ほげ28  ほげ29  ほげ30
ほげ31  ほげ32  ほげ33
ほげ34  ほげ35  ほげ36
ほげ37  ほげ38  ほげ39
ほげ40  ほげ41  ほげ42
ほげ43  ほげ44  ほげ45
ほげ46  ほげ47  ほげ48
ほげ49  ほげ50  ほげ51
ほげ52  ほげ53  ほげ54
ほげ55  ほげ56  ほげ57
ほげ58  ほげ59  ほげ60
ほげ61  ほげ62  ほげ63
ほげ64  ほげ65  ほげ66
ほげ67  ほげ68  ほげ69
ほげ70  ほげ71  ほげ72
ほげ73  ほげ74  ほげ75
ほげ76  ほげ77  ほげ78
ほげ79  ほげ80  ほげ81
ほげ82  ほげ83  ほげ84
ほげ85  ほげ86  ほげ87
ほげ88  ほげ89  ほげ90
ほげ91  ほげ92  ほげ93
ほげ94  ほげ95  ほげ96
ほげ97  ほげ98  ほげ99
```

## 投入する


```bash:bash
$ export TABLE_NAME=sample
```

```bash:bash
$ cat sample.tsv | sqlite3 -separator $'\t' -header -cmd  ".import /dev/stdin ${TABLE_NAME}" a.db
```

### 確認

```bash:bash
$ sqlite3 a.db ".schema ${TABLE_NAME}"
CREATE TABLE sample(
  "列1" TEXT,
  "列2" TEXT,
  "列3" TEXT
);
```

```bash:bash
$ sqlite3 -header a.db "SELECT * FROM ${TABLE_NAME}"
列1|列2|列3
ほげ1|ほげ2|ほげ3
ほげ4|ほげ5|ほげ6
ほげ7|ほげ8|ほげ9
ほげ10|ほげ11|ほげ12
ほげ13|ほげ14|ほげ15
ほげ16|ほげ17|ほげ18
ほげ19|ほげ20|ほげ21
ほげ22|ほげ23|ほげ24
ほげ25|ほげ26|ほげ27
ほげ28|ほげ29|ほげ30
ほげ31|ほげ32|ほげ33
ほげ34|ほげ35|ほげ36
ほげ37|ほげ38|ほげ39
ほげ40|ほげ41|ほげ42
ほげ43|ほげ44|ほげ45
ほげ46|ほげ47|ほげ48
ほげ49|ほげ50|ほげ51
ほげ52|ほげ53|ほげ54
ほげ55|ほげ56|ほげ57
ほげ58|ほげ59|ほげ60
ほげ61|ほげ62|ほげ63
ほげ64|ほげ65|ほげ66
ほげ67|ほげ68|ほげ69
ほげ70|ほげ71|ほげ72
ほげ73|ほげ74|ほげ75
ほげ76|ほげ77|ほげ78
ほげ79|ほげ80|ほげ81
ほげ82|ほげ83|ほげ84
ほげ85|ほげ86|ほげ87
ほげ88|ほげ89|ほげ90
ほげ91|ほげ92|ほげ93
ほげ94|ほげ95|ほげ96
ほげ97|ほげ98|ほげ99
```

## json object で出力する

```sql:a.sql
SELECT
  'SELECT json_object('
    || group_concat(a||','||b, ',')
    || ') FROM sample'
FROM (
    SELECT
      "'"||name||"'" as a,
      '"'||name||'"' as b
    FROM PRAGMA_TABLE_INFO('sample')
  );
```

```bash
$ cat a.sql | sqlite3 a.db | sqlite3 a.db
{"列1":"ほげ1","列2":"ほげ2","列3":"ほげ3"}
{"列1":"ほげ4","列2":"ほげ5","列3":"ほげ6"}
{"列1":"ほげ7","列2":"ほげ8","列3":"ほげ9"}
{"列1":"ほげ10","列2":"ほげ11","列3":"ほげ12"}
{"列1":"ほげ13","列2":"ほげ14","列3":"ほげ15"}
{"列1":"ほげ16","列2":"ほげ17","列3":"ほげ18"}
{"列1":"ほげ19","列2":"ほげ20","列3":"ほげ21"}
{"列1":"ほげ22","列2":"ほげ23","列3":"ほげ24"}
{"列1":"ほげ25","列2":"ほげ26","列3":"ほげ27"}
{"列1":"ほげ28","列2":"ほげ29","列3":"ほげ30"}
{"列1":"ほげ31","列2":"ほげ32","列3":"ほげ33"}
{"列1":"ほげ34","列2":"ほげ35","列3":"ほげ36"}
{"列1":"ほげ37","列2":"ほげ38","列3":"ほげ39"}
{"列1":"ほげ40","列2":"ほげ41","列3":"ほげ42"}
{"列1":"ほげ43","列2":"ほげ44","列3":"ほげ45"}
{"列1":"ほげ46","列2":"ほげ47","列3":"ほげ48"}
{"列1":"ほげ49","列2":"ほげ50","列3":"ほげ51"}
{"列1":"ほげ52","列2":"ほげ53","列3":"ほげ54"}
{"列1":"ほげ55","列2":"ほげ56","列3":"ほげ57"}
{"列1":"ほげ58","列2":"ほげ59","列3":"ほげ60"}
{"列1":"ほげ61","列2":"ほげ62","列3":"ほげ63"}
{"列1":"ほげ64","列2":"ほげ65","列3":"ほげ66"}
{"列1":"ほげ67","列2":"ほげ68","列3":"ほげ69"}
{"列1":"ほげ70","列2":"ほげ71","列3":"ほげ72"}
{"列1":"ほげ73","列2":"ほげ74","列3":"ほげ75"}
{"列1":"ほげ76","列2":"ほげ77","列3":"ほげ78"}
{"列1":"ほげ79","列2":"ほげ80","列3":"ほげ81"}
{"列1":"ほげ82","列2":"ほげ83","列3":"ほげ84"}
{"列1":"ほげ85","列2":"ほげ86","列3":"ほげ87"}
{"列1":"ほげ88","列2":"ほげ89","列3":"ほげ90"}
{"列1":"ほげ91","列2":"ほげ92","列3":"ほげ93"}
{"列1":"ほげ94","列2":"ほげ95","列3":"ほげ96"}
{"列1":"ほげ97","列2":"ほげ98","列3":"ほげ99"}
```

各所の説明書こうかと思ったけど、力尽きた。
まぁいいか、シェル芸だし。気が向いたらそのうち書くかも。