Big Queryについて
基本用語
プロジェクト(課金、トップレベルのコンテナ)
|
ジョブ(クエリ、インポート、エクスポート、コピー)
|
|
RESTコレクション
- Projects
BigQueryが有効になっている一覧を取れる(だけ)
Projects.list()
- Datasets
Datasetsはテーブルのコンテナ。
Datasetsコレクションは、
insert()
、get()
、list()
、update()
、patch()
、delete()
のRESTfulなメソッドが用意されています。
- Tables
Tablesコレクションには、テーブルに関するメタデータが含まれます。
また、テーブルのデータには、アクセスすることはできません。
Tablesもinsert()
、get()
、list()
、update()
、patch()
、delete()
のRESTfulなメソッドが用意されています。
- TableData
TableDataコレクションは、テーブルのデータにアクセスするためのものです。
TableDataは、list()
とinsertAll()
が用意されています。
insertAllは、複数の行をテーブルに挿入するためのRPCメソッドです。
- Jobs
Jobsコレクションは、データの追加やクエリなど、BigQueryの「操作」を行うためのものです。
insert()
、get()
、list()
、query()
、getQueryResults()
が用意されています。
分割テーブル
- 日別でパーティションを自動的にやってくれる。
- 日付を特定できるカラムが必要。
- 既存のテーブルを分割テーブルに変更はできない。
- パーティションの自動削除(有効期限)を指定できる。
既存のデータを移行したい場合は、下記のようなクエリで移行しかない?
bq query --destination_table <project id>:<dataset>.<new table> --time_partitioning_field created_at --use_legacy_sql=false 'SELECT * FROM `<project id>:<dataset>.<old table>`'
ハマりどころ
gcloud config set project <PROJECT_ID>
で、big queryを使いたいプロジェクトを指定しておかないと、baコマンドがdefaultのプロジェクトに実行される。