BigQueryは多種多様なビッグデータの格納やインポート処理、分析が可能なGoogleのデータウェアハウスサービスです。
本ページでは、Google Cloud Storage(GCS)のデータから外部テーブルを作成して、BigQueryで参照する方法を紹介します。
外部テーブルは、スキーマ等のメタデータはBigQueryに持っていますが、データの実体は外部のデータソースに存在しています。一度外部テーブルを作成してデータソースへのリンクを作成しておけば、テーブルの更新処理が不要になるという大きなメリットがあります。
その一方で、以下の制約があります。
- BigQueryの内部テーブルと比較すると、データの処理スピードが遅くなる可能性あり
- 読み取り専用のため、DMLなどの方法でテーブルの更新や削除などはできない
メリットと制約を理解した上で、実際にGCSのデータの外部テーブルを作成してみたいと思います。
今回は以下のように、GCSのバケットに日付毎にフォルダが複数存在し、各フォルダに同名のcsvファイルが含まれている場合を考えてみます。
まず「20220603」フォルダのファイルから外部テーブルを作成してみます。
BigQueryでSQLを作成して実行します。
SQLではデータセットとテーブル、スキーマ、条件をオプションで定義します。
今回は、指定したURIにあるcsv形式のファイルから先頭1行をスキップして読み込むように指定しています。
作成されました。
次はすべての日付フォルダの「sales.csv」からひとつの外部テーブルを作成してみます。
BigQueryで以下のようなSQLを作成して実行します。
URIにワイルドカードを利用すると、任意の文字列にマッチするファイルをすべて参照することができます。
作成されました。
URIでのアスタリスクの利用は1回限りです。複数回は利用できないようです。
(OK) uris = [‘gs://bucket/path/prefix-*’]
(NG) uris = [‘gs://bucket/path/prefix-*/*’]
作成された外部テーブルの内容を確認してみます。内部テーブルと同様にSQLでアクセスできます。
注文日毎に件数をカウントするSQLを実行します。
注文日ごとに10件ずつ存在していることが分かります。
実際にGCSの全日付フォルダのデータ(10件x3日分)を参照していることが確認できました。
外部テーブルは様々なオプションを設定して作成することができます。詳しくは公式ガイドに掲載されています。
このように一度外部テーブルを作成しておくと、後日GCSにファイルが追加された場合にもBigQueryでそれらのデータにアクセスすることができます。
例えば、GCSに2022/06/06分のフォルダを作成してファイルを置いてみます。
外部テーブルの注文日毎に件数をカウントするSQLをもう一度実行してみます。
すると6/6の件数が追加されていることが分かります。
このようにスキーマやパス設定が一致すれば自動的に追加データが参照され、定期的にテーブルを更新する必要がありません。
サービス部門のデータを決められた形式で定期的にGCSに送信してもらえれば、BigQueryで外部テーブル化して、手間をかけずに最新データで分析することができそうです。
本ページでは、Google Cloud Storage(GCS)にあるデータからBigQueryの外部テーブルを作成して、BigQueryから参照する方法を紹介しました。