BigQueryの2021年アップデートを(だいたい)全部振り返るまとめ

Yuta Hono
google-cloud-jp
Published in
29 min readDec 17, 2021

本記事はBigQueryアドベントカレンダーの11日目です(でした)

みなさんこんにちは。年末ですね。年末やることといえば、振り返り、総集編ですね。今年もだいたい全部の BigQuery 関連アップデートを振り返りたいと思います。

以下、カテゴリに分けてアップデート紹介します。

  1. UI 関連
  2. SQL / データ型関連
  3. ML 関連
  4. 管理関連と課金関連
  5. マルチクラウド関連
  6. 性能最適化関連
  7. セキュリティ関連
  8. データレイク・ストリーミング関連
  9. 移行・データ転送 関連
  10. 地理分析関連
  11. プライベートプレビュー、近日リリース 編
  12. まとめ

1. UI 関連

UI 関連で最も大きかったのは SQL Workspace (マルチタブ エディタ) の登場でしょう。

最も大きな変更としてマルチタブになり、またそれを左右に分割することができるようになりました。

左右分割したペインの中で、タブを複数開いておくことができるように

SQL エディタそのものも進化して、関数やテーブル、カラムなどに対してオートコンプリートがいい感じに効くようになっています。

“rev” とタイプするとテーブルに含まれるrevenue_jpyや、その他関数が補完されている

また、マルチタブがプレビュー当初にできなかったことも多くできるようになってきています。細かい個人的なお気に入りを以下にまとめます。

クエリ作成時に新しいタブを開くか、分割タブを開くのか指定できるようになった
カラム名をクリックするとクエリの中で選択される機能が復活

また、 Cloud Console から CSV でダウンロードとした際のサイズ制限が 16,000 行から 10 MB になるなどの地味な改善も入っています。まだまださまざまな機能を追加、改善していっているので、画面右上、フィードバックボタンよりフィードバックを送信してもらえると改善が進むかと思います!

2. SQL / データ型関連

マルチステートメント トランザクション が利用可能に。

これまで BigQuery の DML はスナップショットアイソレーションで一つの DML は ACID であるものの、複数の DML をまとめることは出来ませんでしたが、マルチステートメントトランザクション が利用できるようになりました。BEGIN , COMMIT , ROLLBACK を使って複数のステートメントにまたがるトランザクションを制御可能なり、複雑なデータマートの更新のタイミングを制御したりする場面でもより使いやすくなりました。

セッションが利用可能に

マルチ ステートメント トランザクションと合わせて、セッションが利用できるようになりました。これまで Scripting 内部で使えた変数を使いまわしや、一時テーブルの使い回しをセッション内部で使えるようになったことで、よりインタラクティブ分析が楽に利用できるようになりました。

セッションモード:オン になっていると、セッション内部で設定した変数を使いまわせる

便利な関数の拡充

さまざまな関数が追加されましたが、特に個人的に便利だと思ったのをハイライトします。

  • PIVOT UNPIVOT 演算のサポート:ついにピボットが利用可能に!
  • QUALIFY 句 : 分析関数の値を利用して結果をフィルタできる
QUALIFY 句の利用イメージ
  • CONTAINS_SUBSTR 関数 : カラムやテーブルを対象に文字列検索してくれる。比較時にユニコード正規化、大文字変換(case-insensitive)してから検索してくれるので、URL、ログなどの検索が便利。
  • TABLESAMPLE 句 : テーブル名の後に付けることでテーブルのデータを 10% 等サンプリングしてくれる。しかも料金やスキャン範囲はサンプリングされたレコードだけなので、データの中身をばばっと試したい時にお得。

JSON で扱える幅も非常に広がりました。

DDL の機能拡充も多くあり、分析環境を整える際の操作が SQL フレンドリーになりました。従来できなかったテーブル名の変更や、API / GUI からの操作が必要だったものが SQL からできるようになりました。

  • CREATE SCHEMAALTER SCHEMADROP SCHEMA : データセットを作成、変更、削除(データセットは通常の DB でいうところのスキーマに相当)
  • ALTER TABLE RENAME TO : 従来 BigQuery ではテーブル名の変更をサポートしておらず 、 CREATE OR REPLACE TABLE AS SELECT(以下 CTAS)による新規テーブル作成でしたが、SQLから変更が可能に
  • ALTER TABLE DROP COLUMN : 従来 BigQuery ではカラムの削除ができず、 CTAS による削除でしたが、SQLからカラム削除可能に
  • ALTER COLUMN DROP NOT NULL : NOT NULL 制約をカラムから外せるように
  • ALTER COLUMN SET OPTION : 列の説明などがSQLから変更可能に
  • ALTER COLUMN SET DATA TYPE : 列のデータ型を制限の緩いデータ型に変更可能に。 NUMERIC から BIGNUMERIC などが可能
  • CREATE TABLE LIKE : データなしでメタデータとスキーマから新規テーブルを作成 — 別データ入れる時に便利
  • CREATE TABLE COPY : テーブル説明などのメタデータとデータまで含めてコピーし新規テーブルを作成 (CLIでいうところの bq cp)

テーブル関数のサポート

これまでSQL, Javascriptで定義、利用できた ユーザー定義関数 (UDF) に、テーブル関数が利用できるようになりました。これまでの UDF は値を返す関数でしたが、テーブル関数はテーブルを結果として返します。よく使うサブクエリをこの形で置いとくと便利ですね。

テーブル関数の利用イメージ

スクリプティング(Scripting)の機能拡充

SQL で利用できた以下のような機能が Scripting でも利用できるようになりました。

データ型の拡充や CAST の拡充

パラメーター化されたデータ型 (parameterized types)がサポートされました。パラメータ化により、列やスクリプト変数に STRING(10)のような制約を適用できます。

また、以下のようなデータ型がサポートされました。

それに伴い 対応する CAST も拡充されていますね

地味に、テーブルやカラム名の文字数が 128 文字から 300 文字に拡張されたりもしています。

The maximum length has been increased from 128 characters to 300 characters for the following BigQuery fields: table column names, column alias names, and user-defined function names.

3. ML 関連

SQL だけで機械学習ができる、 BigQuery ML および関連サービスのまとめです。

モデルの拡充

新しく、モデルを作成するための CREATE MODEL で使えるモデルに以下が追加されました。

さらに ARIMA_PLUS の時系列予測では、祝日を自動的に考慮してくれる HOLIDAY_REGION オプションが設定できるようになり、 HOLIDAY_REGION = 'JP' とすると日本の祝日を考慮してくれるようになりました。便利!

異常検知 (Anomaly Detection) が利用可能に

異常検知が ARIMA_PLUS (時系列), K-means , Autoencoder, PCA (Principal Component Analysis, 主成分分析) などで利用可能になりました。

使い方は非常に簡単で、 従来通り CREATE MODEL でモデルを指定して作成し、そこに対してML.DETECT_ANOMALIES 関数を用いることで以下のような結果が得られます。

+-------------------------+----------+------------+-------------+-------------+---------------------+
| ts_timestamp | ts_data | is_anomaly | lower_bound | upper_bound | anomaly_probability |
+-------------------------+----------+------------+-------------+-------------+---------------------+
| 2021-01-01 00:00:01 UTC | 125.3 | FALSE | 123.5 | 139.1 | 0.93 |
| 2021-01-02 00:00:01 UTC | 145.3 | TRUE | 128.5 | 143.1 | 0.96 |
+-------------------------+----------+------------+-------------+-------------+---------------------+

BigQuery Explainable AI

BigQuery で Explainable AI (説明可能な AI) の機能がリリースされ、 ML モデルの振る舞いを理解するのに役立つ機能が追加されました。それぞれのモデルに対応した評価方法を実行してくれる関数が用意されています。

番外編 : Vertex AI Workbench による Notebook 統合

機械学習の統合プラットフォーム、Vertex AI において、フルマネージド Notebook サービスである Vertex AI Workbenchがリリースされました。このNotebook では BigQuery が連携し、わざわざ BigQuery のクエリ UI を開かなくても、データセットやテーブル探索、クエリをNotebook 上から実行し、 DataFrame 化するコードを自動生成してくれます。内容は下記ツイートがわかりやすいかと思います。

Vertex AI Workbench のデモ

4. 管理関連と課金関連

スナップショットの対応(GA)

従来、BigQuery でのスナップショットとリストアには 7 日間の任意の地点のデータに戻せるタイムトラベルが自動で保存され、無料で利用することができました。このタイムトラベルに加え、任意の日数保存できるスナップショットCREATE SNAPSHOT TABLE やGUI等で利用できるようになりました。

料金はベースとなるテーブルとの差分データ量だけなので、お得に使えます。また、下のツイートのように、わざわざテーブルとしてリストアしないでもスナップショットに直接クエリをすることが可能です。

INFORMATION_SCHEMA の拡充

BigQuery ではINFORMATION_SCHEMA ビューでさまざまなシステム情報をリアルタイムで確認することができます。

2021年には以下のような拡充がありました。

  • DDL の追加 : ROUTINES (スクリプト、ストアドプロシージャ)、SCHEMATA (データセット)、TABLES (テーブル)を構成するための DDL が取得可能に。同じようなものを再構成したい場合に便利。
  • DML 統計の追加 : Job リソースのDmlStats で DML の現在の状況が確認可能に。
  • テーブル パーティションビュー : PARTITIONS からテーブルのパーティション情報が取得可能に。パーティションごとにストレージ階層(Active, 約半額の LONG_TERM )を確認したりできます
  • 権限 : INFORMATION_SCHEMA.OBJECT_PRIVILEGES view から、BigQuery内のオブジェクト(データセット、テーブル、ルーチンなど)へのアクセス権を持つユーザー情報などを確認することができるようになりました

管理画面がより使いやすく (BigQuery Admin Resource Charts)

BigQuery の定額モデルを提供する BigQuery Reservations では、課金のモデルが スキャン量から占有するコンピュートリソース(Slot)になります。

BigQuery 課金体系とワークロード管理の進化— 引用 — Data Engineering Study #6「改めて学ぶ、BigQuery徹底入門」

これをより管理しやすくするための画面として、BigQuery Admin Resource Charts がリリースされました。スロットの消費量、ジョブの並列実行数、ジョブの実行時間、ジョブのエラーや処理サイズを組織全体で確認することができます。

BigQuery Slot Estimator

BigQuery の適切なスロット数を自動見積もりしてくれる BigQuery Slot Estimator も出てきました。

なお、よく聞かれるのですが、スロットが不足する場合、クエリ詰まるんですか?という話に関しては No です。絶対的に必要なスロットというのはなく、クエリが要求する本来のスロット数に対し、利用可能なスロットが不足していても、クエリの中でフェアスケジューリングして相対的に遅くなるだけなので、相対的に遅くなった中で問題がなければ問題なく、後続のクエリが詰まることもありません。

BigQuery フェアスケジューリングの仕組み。興味がある方は Data Engineering Study #6をご覧ください。

リソース関連を SQL で操作できる Data Control Language

BigQuery のワークロードマネジメント機能、定額プランをなす BigQuery Reservations の各種リソースが Data Control Language (DCL) から SQL で操作できるようになりました。

5. マルチクラウド関連

BigQuery Omni が GA となり、 AWS S3 に対して、AWS上に配置された BigQuery からのクエリが可能になりました。下図のような形で BigQuery が他のクラウド上で利用可能になっています。よく聞かれるのですが、ユーザーが Compute リソースをマネージする必要はないです。(Anthosを買う必要はない)

BigQuery Omni の 構成図 — BigQuery公式ドキュメントより引用

使い勝手は以下のような感じです。なお Azure はプレビューです。

BigQuery Omni の利用開始方法。AWS アカウントをコネクションとして設定し、 S3 のファイルをテーブルとして設定し利用可能に。

6. 性能最適化関連

マテリアライズド ビュー 機能拡張

BigQuery のマテリアライズドビューはちょっと変わった仕組みで、事前計算されたテーブルではあるものの、ベースのデータが変更されてもマテビューがステールせず、差分データだけを読みに行く仕組みになっています。興味がある方はこちらの記事がわかりやすいと思います

2021 年は以下の制限が外れています

クラスタ化テーブル (Clustered Table) の拡充

BigQuery にはテーブルのスキャン範囲を限定するパーティションと共に、指定したカラムで近いデータを寄せることによりスキャン範囲を限定するクラスタ化テーブルがあります。2021年は以下のようなアップデートがありました :

BI Engine SQL Interface が GA に

BigQuery には、インメモリ分析エンジンであるBigQuery BI Engine があります。

BigQuery BI Engine の仕組み ー 引用 : Google Cloud OnAir

今までは、BI Engine は Google データポータル でのみ有効化することができましたが、これをさまざまな SQL から利用可能にしたのが BI Engine SQL Interface です。 12/14 に GA になりました。

BI といいつつ、実は有効にすると BigQuery UI のクエリや JDBC/ODBC などあらゆる SQL も対応できる場合は1秒以下で結果が返すようになります。有効化されてると、使えるクエリは自動的にBI Engineで実行され、特にエンジン指定不要なのがイケてるポイントですね。

番外編 : Tableau と BigQuery の接続の最適化方法

Tableau のサポートで BigQuery に接続する際のわかりやすいガイドが出ています。セキュアな環境を設定するための VPC Service Controls についても言及されており、 BI Engine でさらに便利に使えるようになりましたね。

7. セキュリティ関連

BigQuery の IAM が SQL で管理可能に

BigQuery はデータベース側で権限管理を行うより、 IAM と最初からインテグレーションされている仕組みになっています。従来、 IAM は API や GUI で操作してテーブルへのアクセスなどを設定していましたが、 BigQuery の SQL から GRANTREVOKEを通じてアクセス権限を設定できるようになりました。

行レベルアクセスが GA に

先行した列レベルアクセスに加え、行レベルアクセスが GA になり、より細かいテーブルの中のアクセス制御が可能になりました。

承認済みデータセット・テーブル

BigQury には、ビューの元データへのアクセスを提供しないでもビュー(論理ビュー)のデータを見れるようにする、承認済みビューがありました。ここに加え、以下のような機能が追加されました。

  • 承認済みデータセット : 複数のビューに対し、一度に承認を行うことができる。複数の承認済みビューを使っている場合の権限管理が楽に。
  • 承認済み関数がテーブル関数 をサポート

8. データレイク・ストリーミング・フェデレーション関連

Cloud Storage フェデレーションのクエリキャッシュ

BigQuery にはデータをマネージドストレージにロードしないでもクエリできるフェデレーション機能(外部データソース)があります。例えば Cloud Storage においた JSON や ORC, Parquet を Hadoop / Spark 環境と混合で、 Hive Partition を有効にしたままクエリすることができます。

このCloud Storage フェデレーション機能についにクエリ結果のキャッシュがサポートされ、より Hadoop / Spark ジョブと BigQuery による分析処理が混在している環境が使いやすくなりました。

BigQuery Storage API で Write API が GA

BigQuery には Storage API と呼ばれるクエリレイヤを介さずに高速に BigQuery のストレージにどのような処理エンジンからもアクセスできる API が備わっています。例えば BigQuery にデータは保存しつつ、処理エンジンとしては Spark で Serverless Spark を利用する際に高速に Storage API でデータの読み書きを行う、という具合です。

この Storage API の Write API が GA になりました。この Storage API は 従来の Streaming API の機能も兼ね備えており、また価格的にもお得になっています。

Cloud Spanner フェデレーションのサポート

その他:

  • Parquet フォーマット での BigQuery エクスポートが GA
  • Parquet ファイルの ENUM / LIST 型のロードがよりやりやすく( ENUMSTRING / BYTES に自動変換。 LIST の論理型のスキーマ推定をサポート)

9. 移行・データ転送 関連

番外編:Datastream による CDC レプリケーション (MySQL/Oracle -> BigQuery)

Datastream は さまざまな DB ソースに対して、CDC (変更データキャプチャ) を行い、BigQuery などに対してデータをニアリアルタイムで連携できるサービスです。

2021 年 12 月時点、 Oracle, MySQL からの BigQuery などへのレプリケーションがサポートされています。 BigQuery へのこれらの DB からのニアリアルタイム連携がより簡単になりました。

また、GA と同時に東京、大阪リージョンがサポートされました。

BigQuery Migration Service によるクエリ変換

BigQuery は今まで、 Data Transfer Service を通じて S3 や Redshift / Teradata からのデータ移行をサポートしてきましたが、新しくデータウェアハウスからのクエリ変換をサポートする BigQuery Migration Service がリリースされました。バッチジョブが大量にあるデータウェアハウスからの移行に利用できます。 2021 年 12 月時点、 Teradata に対応しています。

番外編 : Cloud Composer 2 / オートスケーリング

番外編として、 BigQuery と共によく利用されるオープンソースのオーケストレーションツール、 Airflow のマネージドサービス、 Cloud Composer が オートスケーリングをサポートした Cloud Composer 2 として GA になりました。(12/26日GA) 料金体系もより柔軟になり、より小さなワークロードでも使いやすくなったと思います。

10. 地理分析関連

多くの新しい地理関数のサポート

また以下のような、地理情報データを取り込みやすくするツールも提供されました。

11. ロードマップ・プライベートプレビュー

ここまで実際に GA/パブリックプレビュー機能を振り返りましたが、2021年に発表されたものの、まだパブリックプレビューになっていない以下のような機能もあります。

テキストインデックスとネイティブ JSON

BigQuery はカラム志向のデータウェアハウスです。一般的に、カラム志向ということは基本的にSELECT に含まれるカラムを上から全部スキャンする(パーティションやクラスタ化がない限り)ということになるので、大きなデータを集計するケースに向いているということなります。

一方、ログ分析、特にその中でもオペレーション用途のログ検索などにおいては、大量のログの中から該当する IP 一行だけを抜き出すなどが求められることがあります。このようなユースケースに対し、発表されたのが保守不要のフルマネージドの テキストインデックス です。これにより、そのようなケースでも高速に検索が行えるようになることが発表されました。(2021年 12月現在、プライベートプレビュー)

BigQuery ログ検索の概要 — 引用 : Google Cloud Next ’21 Japan Recap — Google Cloud で実現するデータ アナリティクス戦略 & BigQuery 最新情報

また、同時にログ検索をさらに便利にする以下のような機能も発表されています

  • ネイティブ JSON データ型 : 従来の nested / repeated カラムよりさらに高速で使い勝手のいいネイティブ JSON 型サポート
  • Cloud Logging との統合 : ログデータを BigQuery にエクスポート設定しないでも BigQuery から集計が可能に

BigQuery 外部関数

従来の Javascript や SQL のネイティブ UDF に加え、 BigQuery から Cloud Functions の関数を呼び出し、外部 API との連携が可能になる外部関数が発表されています。 BigQuery にある自然言語データを解析したりできるほか、好きな言語で書くことができるように。近日リリース予定。

BigQuery 外部関数の概要 — 引用 : Google Cloud Next ‘21 Japan Recap — Google Cloud で実現するデータ アナリティクス戦略 & BigQuery 最新情報

BigQuery Slots Autoscaling

Slot Autoscaling が BigQuery Reservations に対応。 BigQuery 定額制モデルを実現する BigQuery Reservations の欠点だった、スロットがバーストしないという部分を補うモデルで予算は最大を管理しつつ、自動スケールアウトできる。オンデマンドの使い勝手と予算の定額化という観点を両立できるように。近日追加予定とのこと。

BigQuery 外部関数の概要 — 引用 : Google Cloud Next ’21 Japan Recap — Google Cloud で実現するデータ アナリティクス戦略 & BigQuery 最新情報

テーブル クローン

先に紹介した テーブルスナップショットに加え、ミュータブルなオブジェクトとしてクローンを提供。変更可能なスナップショットで、新しいジョブの開発やテストに便利な機能が近日追加予定とのこと。

BigQuery 外部関数の概要 — 引用 : Google Cloud Next ’21 Japan Recap — Google Cloud で実現するデータ アナリティクス戦略 & BigQuery 最新情報

Spark on BigQuery

BigQuery から Serverless Spark が利用可能に。Spark ジョブを BigQuery で記載してそのままジョブを実行できるほか、データ自体は BigQuery のストレージから高速に読み出し・書き出しできる BigQuery Storage API を利用しているので、 BigQuery をデータレイクとして、使い慣れた Spark ジョブを利用できる。

BigQuery 外部関数の概要 — 引用 : Google Cloud Next ’21 Japan Recap — Google Cloud で実現するデータ アナリティクス戦略 & BigQuery 最新情報

12. まとめ

BigQuery に関するアップデートを2021年振り返りました!感想、コメントなど頂けたら嬉しいです。引きつづき BigQuery アドベントカレンダー 2021 をお楽しみください!では、良いお年を!

--

--

Yuta Hono
google-cloud-jp

Solutions Eng at @Google, @GoogleCloud. Opinions are my own, NOT the views of my employer. All posts here are my personal opinion.