BigQueryの2021年アップデートを(だいたい)全部振り返るまとめ
本記事はBigQueryアドベントカレンダーの11日目です(でした)
みなさんこんにちは。年末ですね。年末やることといえば、振り返り、総集編ですね。今年もだいたい全部の BigQuery 関連アップデートを振り返りたいと思います。
以下、カテゴリに分けてアップデート紹介します。
- UI 関連
- SQL / データ型関連
- ML 関連
- 管理関連と課金関連
- マルチクラウド関連
- 性能最適化関連
- セキュリティ関連
- データレイク・ストリーミング関連
- 移行・データ転送 関連
- 地理分析関連
- プライベートプレビュー、近日リリース 編
- まとめ
1. UI 関連
UI 関連で最も大きかったのは SQL Workspace (マルチタブ エディタ) の登場でしょう。
最も大きな変更としてマルチタブになり、またそれを左右に分割することができるようになりました。
SQL エディタそのものも進化して、関数やテーブル、カラムなどに対してオートコンプリートがいい感じに効くようになっています。
また、マルチタブがプレビュー当初にできなかったことも多くできるようになってきています。細かい個人的なお気に入りを以下にまとめます。
また、 Cloud Console から CSV でダウンロードとした際のサイズ制限が 16,000 行から 10 MB になるなどの地味な改善も入っています。まだまださまざまな機能を追加、改善していっているので、画面右上、フィードバックボタンよりフィードバックを送信してもらえると改善が進むかと思います!
2. SQL / データ型関連
マルチステートメント トランザクション が利用可能に。
これまで BigQuery の DML はスナップショットアイソレーションで一つの DML は ACID であるものの、複数の DML をまとめることは出来ませんでしたが、マルチステートメントトランザクション が利用できるようになりました。BEGIN
, COMMIT
, ROLLBACK
を使って複数のステートメントにまたがるトランザクションを制御可能なり、複雑なデータマートの更新のタイミングを制御したりする場面でもより使いやすくなりました。
セッションが利用可能に
マルチ ステートメント トランザクションと合わせて、セッションが利用できるようになりました。これまで Scripting 内部で使えた変数を使いまわしや、一時テーブルの使い回しをセッション内部で使えるようになったことで、よりインタラクティブ分析が楽に利用できるようになりました。
便利な関数の拡充
さまざまな関数が追加されましたが、特に個人的に便利だと思ったのをハイライトします。
CONTAINS_SUBSTR
関数 : カラムやテーブルを対象に文字列検索してくれる。比較時にユニコード正規化、大文字変換(case-insensitive)してから検索してくれるので、URL、ログなどの検索が便利。TABLESAMPLE
句 : テーブル名の後に付けることでテーブルのデータを 10% 等サンプリングしてくれる。しかも料金やスキャン範囲はサンプリングされたレコードだけなので、データの中身をばばっと試したい時にお得。
JSON で扱える幅も非常に広がりました。
JSON_EXTRACT_STRING_ARRAY 、 JSON_QUERY_ARRAY
、JSON_VALUE_ARRAY
: JSON_QUERY_ARRAYは特に便利で、従来のJSON_QUERYの中でパースされたJSONの配列もBigQueryの配列としてパースして入れることが容易になりました。
DDL の機能拡充も多くあり、分析環境を整える際の操作が SQL フレンドリーになりました。従来できなかったテーブル名の変更や、API / GUI からの操作が必要だったものが SQL からできるようになりました。
CREATE SCHEMA
、ALTER SCHEMA
、DROP 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 でも利用できるようになりました。
- CASE , CASE search_expression , LABELS, REPEAT, FOR…IN:
データ型の拡充や 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 (時系列)
- Autoencoder
- PCA (Principal Component Analysis, 主成分分析)
- DNN_LINEAR_COMBINED_CLASSIFIER / DNN_LINEAR_COMBINED_REGRESSOR (Wide-and-Deep)
さらに 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 モデルの振る舞いを理解するのに役立つ機能が追加されました。それぞれのモデルに対応した評価方法を実行してくれる関数が用意されています。
ML.EXPLAIN_PREDICT
,ML.EXPLAIN_FORECAST
(ARIMA_PLUS の時系列用),ML.GLOBAL_EXPLAIN
,ML.FEATURE_IMPORTANCE
,ML.ADVANCED_WEIGHTS
番外編 : Vertex AI Workbench による Notebook 統合
機械学習の統合プラットフォーム、Vertex AI において、フルマネージド Notebook サービスである Vertex AI Workbenchがリリースされました。このNotebook では BigQuery が連携し、わざわざ BigQuery のクエリ UI を開かなくても、データセットやテーブル探索、クエリをNotebook 上から実行し、 DataFrame 化するコードを自動生成してくれます。内容は下記ツイートがわかりやすいかと思います。
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 Admin Resource Charts がリリースされました。スロットの消費量、ジョブの並列実行数、ジョブの実行時間、ジョブのエラーや処理サイズを組織全体で確認することができます。
BigQuery Slot Estimator
BigQuery の適切なスロット数を自動見積もりしてくれる BigQuery Slot Estimator も出てきました。
なお、よく聞かれるのですが、スロットが不足する場合、クエリ詰まるんですか?という話に関しては No です。絶対的に必要なスロットというのはなく、クエリが要求する本来のスロット数に対し、利用可能なスロットが不足していても、クエリの中でフェアスケジューリングして相対的に遅くなるだけなので、相対的に遅くなった中で問題がなければ問題なく、後続のクエリが詰まることもありません。
リソース関連を SQL で操作できる Data Control Language
BigQuery のワークロードマネジメント機能、定額プランをなす BigQuery Reservations の各種リソースが Data Control Language (DCL) から SQL で操作できるようになりました。
- CREATE CAPACITY : スロットの購入
- CREATE RESERVATION : スロットの予約(Reservation)の作成
- CREATE ASSIGNMENT : 予約のプロジェクトへのアサイン
- DROP CAPACITY : スロットの解約
- DROP RESERVATION : スロットの予約の削除
- DROP ASSIGNMENT :予約のプロジェクトアサインの削除
5. マルチクラウド関連
BigQuery Omni が GA となり、 AWS S3 に対して、AWS上に配置された BigQuery からのクエリが可能になりました。下図のような形で BigQuery が他のクラウド上で利用可能になっています。よく聞かれるのですが、ユーザーが Compute リソースをマネージする必要はないです。(Anthosを買う必要はない)
使い勝手は以下のような感じです。なお Azure はプレビューです。
6. 性能最適化関連
マテリアライズド ビュー 機能拡張
BigQuery のマテリアライズドビューはちょっと変わった仕組みで、事前計算されたテーブルではあるものの、ベースのデータが変更されてもマテビューがステールせず、差分データだけを読みに行く仕組みになっています。興味がある方はこちらの記事がわかりやすいと思います
2021 年は以下の制限が外れています
- JOIN が使えない ⇨ Inner Join が利用可能に
- 集約関数が必須 ⇨ 集約関数不要に
クラスタ化テーブル (Clustered Table) の拡充
BigQuery にはテーブルのスキャン範囲を限定するパーティションと共に、指定したカラムで近いデータを寄せることによりスキャン範囲を限定するクラスタ化テーブルがあります。2021年は以下のようなアップデートがありました :
- クラスタ化テーブルの変更 : 利用するカラムやカラムの順序を変更可能に
DATETIME
型をクラスタ化のカラムとして利用可能に
BI Engine SQL Interface が GA に
BigQuery には、インメモリ分析エンジンであるBigQuery BI Engine があります。
今までは、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 から GRANT
、 REVOKE
を通じてアクセス権限を設定できるようになりました。
行レベルアクセスが 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 フェデレーションのサポート
- Cloud Spanner フェデレーション : Google Cloud の水平スケールする RDBMS, Cloud Spanner に対して BigQuery からクエリを実行する機能がGA
その他:
- Parquet フォーマット での BigQuery エクスポートが GA
- Parquet ファイルの ENUM / LIST 型のロードがよりやりやすく(
ENUM
はSTRING
/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. 地理分析関連
- 改行区切りの GeoJSON のロードがサポート
多くの新しい地理関数のサポート
ST_STARTPOINT 、
ST_ENDPOINT
、ST_POINTN
、ST_GEOGFROM 、ST_BUFFER 、ST_BUFFERWITHTOLERANCE 、ST_BOUNDINGBOX 、ST_EXTENT、S2_COVERINGCELLIDS、S2_CELLIDFROMPOINT
また以下のような、地理情報データを取り込みやすくするツールも提供されました。
11. ロードマップ・プライベートプレビュー
ここまで実際に GA/パブリックプレビュー機能を振り返りましたが、2021年に発表されたものの、まだパブリックプレビューになっていない以下のような機能もあります。
テキストインデックスとネイティブ JSON
BigQuery はカラム志向のデータウェアハウスです。一般的に、カラム志向ということは基本的にSELECT に含まれるカラムを上から全部スキャンする(パーティションやクラスタ化がない限り)ということになるので、大きなデータを集計するケースに向いているということなります。
一方、ログ分析、特にその中でもオペレーション用途のログ検索などにおいては、大量のログの中から該当する IP 一行だけを抜き出すなどが求められることがあります。このようなユースケースに対し、発表されたのが保守不要のフルマネージドの テキストインデックス です。これにより、そのようなケースでも高速に検索が行えるようになることが発表されました。(2021年 12月現在、プライベートプレビュー)
また、同時にログ検索をさらに便利にする以下のような機能も発表されています
- ネイティブ JSON データ型 : 従来の nested / repeated カラムよりさらに高速で使い勝手のいいネイティブ JSON 型サポート
- Cloud Logging との統合 : ログデータを BigQuery にエクスポート設定しないでも BigQuery から集計が可能に
BigQuery 外部関数
従来の Javascript や SQL のネイティブ UDF に加え、 BigQuery から Cloud Functions の関数を呼び出し、外部 API との連携が可能になる外部関数が発表されています。 BigQuery にある自然言語データを解析したりできるほか、好きな言語で書くことができるように。近日リリース予定。
BigQuery Slots Autoscaling
Slot Autoscaling が BigQuery Reservations に対応。 BigQuery 定額制モデルを実現する BigQuery Reservations の欠点だった、スロットがバーストしないという部分を補うモデルで予算は最大を管理しつつ、自動スケールアウトできる。オンデマンドの使い勝手と予算の定額化という観点を両立できるように。近日追加予定とのこと。
テーブル クローン
先に紹介した テーブルスナップショットに加え、ミュータブルなオブジェクトとしてクローンを提供。変更可能なスナップショットで、新しいジョブの開発やテストに便利な機能が近日追加予定とのこと。
Spark on BigQuery
BigQuery から Serverless Spark が利用可能に。Spark ジョブを BigQuery で記載してそのままジョブを実行できるほか、データ自体は BigQuery のストレージから高速に読み出し・書き出しできる BigQuery Storage API を利用しているので、 BigQuery をデータレイクとして、使い慣れた Spark ジョブを利用できる。
12. まとめ
BigQuery に関するアップデートを2021年振り返りました!感想、コメントなど頂けたら嬉しいです。引きつづき BigQuery アドベントカレンダー 2021 をお楽しみください!では、良いお年を!