Kawaii Lab

プログラミングとかサービス開発とか

BigQueryを完全に理解する

BigQuery とは

SQLインターフェースが使用できるデータウェアハウスです。
GUI,クライアントライブラリからのAPIなどからアクセスすることができますが、アクセス制御をかけることもできます。
サードパーティを使用したデータの読み込みや視覚化ができます。

プロジェクト

GCPのトップレベルのコンテナです。
名前と一意のIDが振られており、ユーザ情報やBigQueryのデータが格納されます。

データセット

BigQuery内のトップレベルコンテナです。
テーブルとビューはこちらに属しています。

データの保存

圧縮、暗号化、複製、チューニング、スケーリングなどの運用をします。
以下の構成で Capacitor型 のデータが保存されます。

データの操作

データに対して次の操作が行えます

  • テーブルのコピー
  • SQL DML を使用した取得クエリ
  • SQL DML を使用した更新、削除クエリ
  • エクスポート

アクセス制御

アクセス制御にはIAMを利用しています。
役割と権限を組み合わせることで、様々なアクセス制御ができます。

スロット

クエリ毎の演算能力の単位です。
スロットを拡張することで、複雑なクエリのパフォーマンスや、並列処理の速度が上昇します。

Dive into Deep BigQuery

即座に実行されるクエリです。

bq query --destination_table mydataset.mytable --use_legacy_sql=false 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC'
  • バッチクエリ

キューに格納されリソースが使用可能になり次第、実行されるクエリです

bq query --batch --destination_table mydataset.mytable --use_legacy_sql=false 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC'
  • テーブルの作成

RDBMSとは違いテーブルには存命期間があります。

bq mk -t --expiration 3600 --description "This is my table" --label organization:development mydataset.mytable qtr:STRING,sales:FLOAT,year:STRING
  • テーブルの更新
bq update --description "Description of mytable" mydataset.mytable
  • テーブルの削除
bq rm -t myotherproject:mydataset.mytable
  • テーブルの存在確認
bq ls [DATASET] 
  • jsonファイルからデータの追加
bq --location=US load --autodetect --noreplace --source_format=NEWLINE_DELIMITED_JSON mydataset.mytable ./mydata.json ./myschema.json
  • ビューの作成

ビューとは仮想テーブルです。
実体を持たないので、ビュー対して取得クエリを実行した場合も、ビュー作成時のクエリも同時に発行されています。

bq mk --use_legacy_sql=false --expiration 3600 --description "This is my view" --label organization:development --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' mydataset.myview