自称フルスタックエンジニアのぶろぐ。

pythonやreactや、gcpやawsなどなどについて書いていこうかと思います。

Big Query 入門

Big Queryについて

基本用語

  • プロジェクト
    課金をコントロールし、グローバルな名前空間のルート (BigQuery内のすべてのオブジェクトの名前は、プロジェクトに対する相対的な名前になる)
  • データセット
    共有可能なテーブルの倫理的な集合をさす言葉。 データセットはプロジェクトに所有される。
  • テーブル
    リレーショナルデータベースと同様に、データの行の集合のこと
  • スキーマ
    テーブル内に、スキーマ情報を持つ。

  • ジョブ
    BigQueryが行う非同期な操作は、ジョブによって実行される。

プロジェクト(課金、トップレベルのコンテナ)
データセット(組織、アクセス制御)
テーブル(スキーマを持つデータ)
ジョブ(クエリ、インポート、エクスポート、コピー)

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のプロジェクトに実行される。