bqコマンドでデータセットを管理する

前回までのまとめ

前回、bqコマンドが使えるようセットアップを行いました。今回はbqコマンドを使ってデータセット・スキーマを作成していきたいと思います。

データセットとは

データセットとはなんでしょうか。こちらに書かれていました。RDBでいうデータベースのようなものと思っておけばよさそうです。

データセットの操作

データセットの作成

こちらにあるように、bq mkコマンドを利用します。

1
2
$ bq mk test
Dataset 'project_id:test' successfully created.

無事作成できました。Webコンソールでも確認できます。

データセットの削除

削除にはbq rmコマンドを利用します。

1
2
$ bq rm test
rm: remove dataset 'project_id:test'? (y/N) y

yを入力することで削除できます。確認しなくてもよい場合は-fオプションを指定します。

1
2
$ bq rm -f test
$

メッセージは特に表示されませんが削除されています。

テーブルが存在する場合は-rオプションを指定することで、テーブルごと削除できます。
テーブルを作成するため、スキーマを記載したJSONファイルを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat t1.json
[
{
"name": "id",
"type": "INT64",
"mode": "REQUIRED"
},
{
"name": "name",
"type": "STRING",
"mode": "REQUIRED"
}
]

JSONファイルからテーブルを作成してみます。

1
2
3
4
5
$ bq mk --table project_id:test.t1 ./t1.json
Table 'project_id:test.t1' successfully created.
$
$ bq show --schema test.t1
[{"name":"id","type":"INTEGER","mode":"REQUIRED"},{"name":"name","type":"STRING","mode":"REQUIRED"}]

無事作成できました。

では、テーブルが存在するデータセットを削除してみます。

1
2
3
$ bq rm test
rm: remove dataset 'project_id:test'? (y/N) y
BigQuery error in rm operation: Dataset project_id:test is still in use

テーブルがあると削除できないようです。-rオプションを指定してみます。

1
2
3
$ bq rm -r test
rm: remove dataset 'project_id:test'? (y/N) y
$

削除できました。本来であれば、テーブルを削除後、データセットを削除すべきです。テーブルの削除はテーブル名を指定して行います。

1
2
$ bq rm test.t1
rm: remove table 'project_id:test.t1'? (y/N) y

テーブルを削除すればデータセットも削除できます。

1
2
3
$ bq rm test
rm: remove dataset 'project_id:test'? (y/N) y
$

テーブルの操作

データセットのところで、テーブルについてもいくつか記載しました。ここでまとめます。

JSONファイルによるテーブルの作成

テーブルの作成を行うにはJSONファイルでスキーマを定義してbqコマンドで作成するのが一番楽そうです。

1
2
3
4
$ bq mk test
Dataset 'project_id:test' successfully created.
$ bq mk --table test.t1 t1.json
Table 'project_id:test.t1' successfully created.

スキーマの確認

bq showでスキーマなど確認できます。

1
2
3
4
5
6
7
$ bq show test.t1
Table project_id:test.t1

Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Clustered Fields Labels
----------------- ---------------------------- ------------ ------------- ------------ ------------------- ------------------ --------
28 Oct 21:49:31 |- id: integer (required) 0 0
|- name: string (required)

スキーマのみ確認したい場合は--schemaオプションを指定します。

1
2
$ bq show --schema test.t1
[{"name":"id","type":"INTEGER","mode":"REQUIRED"},{"name":"name","type":"STRING","mode":"REQUIRED"}]

既存のスキーマから新しいスキーマを作るときに参考にできそうですね。

まとめ

前回インストールしたbqコマンドでデータセット、テーブルの基本的さ操作を行なってみました。次はCloud Functionsに挑戦してみようと思います。