2020 年の BigQuery リリースまとめ
こんにちは、データアナリティクス事業本部のみかみです。
本エントリは、クラスメソッド BigQuery Advent Calendar 2020 の 24 日目のエントリです。 いよいよ大詰め! 明日 25 日のアドベントカレンダー終了まで、弊社クラスメソッド データアナリティクス事業本部のメンバーで、Google BigQuery に関する記事を紡いでいこうと思います。
年の瀬も押し迫ってまいりましたがいかがお過ごしでしょうか? 弊社 クラスメソッドは本日から冬休みです(シガヤー獲りに行くぞ!w
BigQuery は今年も進化が止まりません! 2020 年にどんなリリースがあったのか、年末ゆっくりお酒の肴にでもご覧いただけるとうれしいです。
2020 年 BigQuery リリース一覧
BigQuery のリリースノートから、今年 2020 年のリリース項目をまとめました。 アルファ版、ベータ版、GA などのリリース段階の定義については、Product launch stages をご参照ください。
リリース日 | 内容 | 関連リンク |
---|---|---|
01/14 | BigQuery Reservations がロンドン(europe-west2)リージョンでサポート開始 | Reservations の概要 |
01/16 | Magnitude Simba JDBC、ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
01/22 | BigQuery Storage API が全リージョンでサポート開始 | データセットのロケーション |
01/24 | BigQuery がソウル(asia-northeast3)リージョンでサービス開始 | リージョンのロケーション |
02/11 | Magnitude Simba ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
02/13 | BigQuery サンドボックス機能が GA | BigQuery サンドボックスの使用 |
02/14 | ジョブ関連の INFORMATION_SCHEMA がベータ版リリース | INFORMATION_SCHEMA を使用したジョブ メタデータの取得 |
02/18 | 整数範囲パーティション分割テーブルのサポートが GA | 整数範囲パーティション分割テーブルの作成と使用 パーティション分割テーブルの概要 |
02/24 | BigQuery がソルトレイクシティ(us-west3)リージョンでサービス開始 | リージョンのロケーション |
02/26 | Flex Slots がベータ版でサポート開始 | Flex Slots: 短期間のコミットメント Reservations の概要 |
DML の実行数制限廃止 | BigQuery で DML が無制限で利用可能に | |
03/02 | BigQuery Storage API が GA | BigQuery Storage API overview |
ORC、Parquetフォーマットの GCS データへのクエリのサポートが GA | Cloud Storage データのクエリ | |
GCS ファイルの Hive パーティショニングレイアウトのサポートが GA | 外部パーティション分割データの読み込み 外部でパーティションに分割されたデータのクエリ |
|
監査ログでアクセス制限付きリソースへの読み取り成功時に発信者 ID とリソース名の表示をサポート | Caller identities and resource names 監査ログの呼び出し元 ID |
|
03/27 | 列レベルのアクセス制御がベータ版リリース | BigQuery の列レベルのセキュリティの概要 |
03/30 | BigQuery スクリプトとストアドプロシージャが GA | 標準 SQL のスクリプト CREATE PROCEDURE ステートメント |
03/31 | BigQuery Reservations 関連の INFORMATION_SCHEMA がアルファ版リリース | INFORMATION_SCHEMA を使用した予約メタデータの取得 |
04/02 | BigQuery Reservations が全リージョンでサポート開始 | Reservations の概要 |
04/08 | マテリアライズドビューがベータ版リリース | マテリアライズド ビューの概要 |
04/09 | スケジューリングクエリが bigquery.jobs.create 権限で設定可能に | 必要な権限 |
04/16 | BigQuery Reservations が GA | Reservations の概要 |
2020/04 末頃からデータセット関連の INFORMATION_SCHEMA でリージョンごとの情報取得をサポート予定 | INFORMATION_SCHEMA を使用したデータセットのメタデータの取得 | |
04/27 | BigQuery がラスベガス(us-west4)リージョンでサービス開始 | サポートされるリージョン |
04/30 | BigQuery Data Transfer Service が台湾(asia-east1)リージョンでサービス開始 | リージョンのロケーション |
05/01 | JSON_EXTRACT_ARRAY 関数のサポート開始 | JSON_EXTRACT_ARRAY |
ORDER BY 句で NULLS FIRST と NULLS LAST のサポートを開始 | ORDER BY 句 | |
05/08 | BigQuery Streaming が GA | ストリーミング挿入 |
05/12 | Magnitude Simba ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
05/13 | Magnitude Simba JDBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
05/20 | BigQuery 10周年! | データと歩んだ 10 年間を祝して: BigQuery 10 周年 |
Cloud SQL 連携クエリが GA | Cloud SQL 連携クエリ | |
時間単位の列パーティション分割テーブルのサポートがベータ版リリース | 時間単位の列パーティション分割テーブルの作成と使用 | |
動的 SQL が全リージョンでベータ版リリース | EXECUTE IMMEDIATE | |
Trial Slots が US と EU のマルチリージョンで利用可能に | Trial Slots(プロモーション) | |
05/21 | BigQuery Storage API がキャッシュテーブルの制限なし読み取りをサポート | BigQuery Storage API overview |
06/02 | bq コマンドによる Slot の購入が可能に | Reservations を使用したワークロード管理 bq mk --capacity_commitment |
GIS 関数 ST_Simplify のサポート開始 | ST_SIMPLIFY | |
標準 SQL のビュー定義でプロジェクト修飾子なしの参照が可能に | Method: tables.insert CREATE VIEW ステートメント |
|
標準 SQL のユーザー定義関数でテーブルとビューの参照が可能に | 標準 SQL ユーザー定義関数 | |
06/04 | テーブル ACL がベータ版リリース | テーブルへのアクセス制御の概要 |
06/08 | BigQuery がジャカルタ(asia-southeast2)リージョンでサービス開始 | サポートされるリージョン |
06/09 | パーティション化されていないテーブルのクラスタリングがサポート開始 | クラスタ化テーブルの概要 |
06/16 | ジョブの INFORMATION_SCHEMA が GA | INFORMATION_SCHEMA を使用したジョブ メタデータの取得 |
06/26 | INFORMATION_SCHEMA のリージョン修飾子がベータ版リリース | 構文 リージョン修飾子 |
8月中旬からリージョン修飾子なしのデータセット関連 INFORMATION_SCHEMA はデフォルトで米国のマルチリージョンの情報を返すようになる予定 | リージョン修飾子 | |
06/29 | Flex Slots が GA | コミットメント プラン |
BigQuery の SLA が月間 99.99 %以上に更新 | BigQuery Service Level Agreement (SLA) | |
07/06 | Magnitude Simba ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
07/13 | 標準 SQL で ASSERT がサポート開始 | 標準 SQL のデバッグ ステートメント |
07/16 | GIS 関数 ST_CONVEXHULL と ST_DUMP のサポート開始 | ST_CONVEXHULL ST_DUMP |
07/24 | BigQuery Data Transfer Service がモントリオール(northamerica-northeast1)、フランクフルト(europe-west3)、ムンバイ(asia-south1)、ソウル(asia-northeast3)リージョンでサービス開始 | リージョンのロケーション |
07/27 | INFORMATION_SCHEMA のストリーミングメタデータ参照がアルファ版リリース | INFORMATION_SCHEMA を使用したストリーミング メタデータの取得 |
07/31 | Magnitude Simba ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
08/06 | BigQuery がオレゴン(us-west1)、ベルギー(europe-west1)、オランダ(europe-west4)リージョンでサービス開始 | リージョンのロケーション |
08/11 | 定額料金が100スロットから利用可能に | 定額料金 |
08/13 | エクスポートデータ量のデフォルト上限が 1 日あたり 10TB から 50TB に変更 | エクスポート ジョブ |
08/18 | Reservations でプロジェクトにオンデマンド料金を割り当てることが可能に | プロジェクトを None に割り当てる |
08/18 | ON/USING が連続する場合の括弧が省略可能に | |
08/24 | スケジューリングクエリのサービスアカウント認証が GA | サービス アカウントの使用 |
08/25 | INFORMATION_SCHEMA でタイムスライスごとのジョブメタデータ参照が可能に | INFORMATION_SCHEMA を使用したタイムスライスごとのジョブのメタデータの取得 |
08/26 | BigQuery Reservations の INFORMATION_SCHEMA が GA | INFORMATION_SCHEMA を使用した予約メタデータの取得 |
08/31 | Magnitude Simba JDBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
09/11 | BQ.JOBS.CANCEL システムプロシージャを使用したジョブキャンセルをサポート | ジョブをキャンセルする |
09/17 | BigQuery Data Transfer Service がロサンゼルス(us-west2)、サンパウロ(southamerica-east1)、サウスカロライナ(us-east1)、香港(asia-east1)、大阪(asia-northeast2)リージョンでサービス開始 | リージョンのロケーション |
09/18 | 2020 年後半から全ての事前定義ロールで自身のジョブの情報取得やキャンセルが可能になる予定 | BigQuery の事前定義された IAM のロール |
09/21 | 時間単位の列パーティション分割テーブルで以下のサポートが GA
|
時間単位の列パーティション分割テーブルの作成と使用 |
10/01 | テーブルレベルのアクセス制御サポートが GA | テーブルへのアクセス制御の概要 |
10/06 | 認可済み UDF が GA | 認可済みの UDF |
Cloud Console の Data Catalog の検索とオートコンプリートがベータ版リリース | Cloud Console の概要 | |
10/14 | 動的 SQL が GA | EXECUTE IMMEDIATE |
標準 SQL でサポート関数が追加 | 標準 SQL の文字列関数 | |
サポートされる SQL 構文が追加 | データ定義言語ステートメントの使用 標準 SQL のその他のステートメント データ操作言語の構文 |
|
標準 SQL で日付算出演算子のサポートを開始 | 日付算術演算子 | |
データセット、テーブル、ビュー、 ルーチンに関する INFORMATION_SCHEMA が GA | BigQuery INFORMATION_SCHEMA の概要 | |
テーブル名の Unicode サポートを開始 | テーブルの命名 | |
クエリで重複するエイリアスの利用が可能に | 重複するエイリアス | |
10/19 | 監査ログでプロジェクト間アクセス時の発信者 ID とリソース名の表示条件を変更 | Caller identities and resource names |
10/22 | GIS 関数 ST_GEOGFROMGEOJSON と ST_GEOGFROMTEXT で make_valid パラメーターのサポートを開始。ST_GEOGFROMTEXT 関数で planar のサポートも開始(ベータ版) | ST_GEOGFROMGEOJSON ST_GEOGFROMTEXT |
Magnitude Simba ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ | |
10/26 | 標準 SQL で SUBSTRING 関数のサポートが GA | SUBSTRING |
11/17 | 列レベルのアクセス制御が GA | BigQuery の列レベルのセキュリティの概要 |
12/10 | Magnitude Simba JDBC、ODBC ドライバの新バージョンリリース | BigQuery の Magnitude Simba ドライバ |
12/21 | 標準 SQL で BigNumeric 型のサポートをプレビュー開始 | BIGNUMERIC |
すごい数ですね。。 次のセクションから、気になるリリースについてピックアップしてみます!
BigQuey の SLA
2020/06/29 これまで 99.9% だった BigQuery の SLA が、99.99% に更新されました!
- BigQuery Service Level Agreement (SLA) | BigQuery ドキュメント
- BigQuery、業界トップクラスとなる 99.99% の稼働時間の SLA を提供 | Google Cloud ブログ
今年 7月~9月に開催された「Google Cloud Next ’20: OnAir」でも発表されていましたが、これ、すごいことですよね@@!
99.9% から 99.99% に、という字面だけ見るとあまりピンときませんが、時間換算してみるとそのすごさが分かります! SLA が 99.9% の場合、1か月のダウンタイムが 43 分以内であることが保証されるわけです。 これでも十分すごいと思いますが、99.99% だと何分になるでしょうか? 1/10 になるわけなので、答えは 4.3 分です! 1か月にたった 4.3 分(258 秒)のダウンタイムしか発生しないということで、可用性がおそろしく上がりました!
他にも「Google Cloud Next ’20: OnAir」では、BigQuery のパフォーマンス向上についても言及されていました。 1 ペタバイトのデータデータセットに対して SQL を実行するのにかかる時間が、2016 年には約 6 分だったそうです。これは、1 ペタバイトのデータセットのデータ全体をスキャンしていたからだとか。 それが、2 年後の 2018 年には、同じ SQL でもスキャンデータ量が約 400 メガバイトになり、実行時間も約 2 分に短縮されたそうです。 さらに、現在 2020 年には、同じ SQL で スキャンデータ量も 2018 年と同じ 400 MB ですが、結果が返ってくるまでに必要な時間はなんと約 4 秒! チューニング不要でこの高パフォーマンス、さすが BigQuery さまですなーv
「Google Cloud Next ’20: OnAir」のセッション動画は Youtube でも公開されているので、是非ご覧ください。
また、弊社ブログ Developers.IO でもセッションレポートを公開しておりますので、是非合わせてご覧ください!
DML 制限解除
BigQuery ではこれまで UPDATE
や DELETE
などの DML を実行できる回数が、1 日あたり 1000 件までという制限がありました。
それが、今年 2020 年初旬に、無制限になりました!(キタ━━━━(゚∀゚)━━━━!!
個人やアドホックで使用する分にはこれまでの 1000 件でもそうそう上限には達しないかもしれませんが、システムで利用する場合、リカバリ作業などが発生する可能性も考慮すると、やはりこれまでの回数制限は不便ですよね。。 回数制限解除により、より使いやすくなったのではないかと思います!v
使える SQL 構文や標準関数の追加と INFORMATION_SCHEMA の GA
リリース当時はレガシー SQL しか利用できなかった BigQuery ですが、2016/06/02 に標準 SQL のサポートが開始され、同年 2016/09/29 には DML のサポートも発表されました。
その後も徐々に利用可能な SQL 構文や標準関数が追加され、今では他のデータベースとほぼ同等の使い心地で使えるようになった BigQuery ですが、 2020/10/14 にも、新しくサポートされる SQL 構文や標準関数が増え、各種メタデータを参照できる INFORMATION_SCHEMA も GA になりました。
新しくサポートされるようになった SQL 構文は以下です。
EXPORT DATA
でテーブルデータをエクスポートできるようになったこと、ALTER TABLE ADD COLUMN
で SQL からテーブルカラムの追加ができるようになったことなど、より使いやすく進化してます。
また、これまではテーブルの全データを削除する場合、新しく格納したいデータを全件洗替で INSERT
したり、DELETE FROM ...
構文で WHERE True
を指定する必要があったり、実現できないことはなくとも若干使いにくかった全件削除ですが、TRUNCATE TABLE
構文がサポートされるようになりました!
- BigQuery で実行できる SQL と実行できない SQL > ALTER TABLE | Developers.IO
- BigQuery で実行できる SQL と実行できない SQL > TRUNCATE | Developers.IO
新しく追加された標準関数は以下の通りです。
- ASCII
- CHR
- INITCAP
- INSTR
- LAST_DAY
- LEFT
- OCTET_LENGTH
- REGEXP_EXTRACT
- REGEXP_INSTR
- REGEXP_SUBSTR
- RIGHT
- SOUNDEX
- TRANSLATE
- UNICODE
REGEXP_XX
系の正規表現関数や LEFT
、RIGHT
関数が増えたことで、これまで以上に SQL によるデータ整形、分析作業が楽になるのではないかと思います。
また、LAST_DAY
関数と合わせて日付データの算術演算子サポートも開始され、日時データも SQL で扱いやすくなりました。
INFORMATION_SCHEMA では以下が GA になりました。
- TABLES
- TABLE_OPTIONS
- COLUMNS
- COLUMN_FIELD_PATHS
- VIEWS
- ROUTINES
- ROUTINE_OPTIONS
- PARAMETERS
- SCHEMATA
- SCHEMATA_OPTIONS
データセットやテーブルなどのメタデータを 参照することができる INFORMATION_SCHEMA システムビューですが、BigQuery では 2019/02/04 にベータ版リリースされました。
2020 年も続々と INFORMATION_SCHEMA に関するリリースが繰り返され、ほとんどの INFORMATION_SCHEMA が今年 GA になりました! ただし、ストリーミングメタデータ関連の INFORMATION_SCHEMA はまだ ベータ版とのことなのでご注意ください。 これで、INFORMATION_SCHEMA に対する SQL の実行にクエリ料金がかからなくなれば言うことなしですねー。。(期待してます!><v
- INFORMATION_SCHEMA を使用したビュー メタデータの取得 | BigQuery ドキュメント
- BigQuery INFORMATION_SCHEMA の概要 | BigQuery ドキュメント
- INFORMATION_SCHEMA を使用したストリーミング メタデータの取得 | BigQuery ドキュメント
笑顔になるユーザーが増える、うれしいリリースでしたv
BigQuery サポートリージョン
東京 (asia-northeast1) リージョンでは、2018/04/17 から BigQuery が使えるようになりました。
今年も以下のリージョンで、新しく BigQuery が使えるようになりました。
- 2020/01/24:ソウル(asia-northeast3)
- 2020/02/24:ソルトレイクシティ(us-west3)
- 2020/04/27:ラスベガス(us-west4)
- 2020/06/08:ジャカルタ(asia-southeast2)
- 2020/08/06:オレゴン(us-west1)、ベルギー(europe-west1)、オランダ(europe-west4)
今後もサポートリージョンはどんどん増えてくるのではないかと思います!
サンドボックス機能
2020/02/13 から、BigQuery でサンドボックスが利用できるようになりました。 サンドボックスとは、BigQuery を無料で試せる機能です!
支払い情報の登録なしに、ひと月当たりストレージ料金 10GB、クエリ料金 1TB まで無料で利用できます。 東京 (asia-northeast1) リージョンで換算すると、アクティブストレージ料金で $0.23、オンデマンドのクエリ料金で $6.00 に相当する無料枠で、この容量の範囲であれば、課金設定後の本格利用時でも毎月無料で利用できます。
BigQuery といえば「お高い」「事故ったら破産」なコストに対するマイナスイメージが強かった印象ですが、このサンドボックス機能で安心して使いはじめられるようになったのではないかと思います。
定額料金の改良と BigQuery Reservations
BigQuery のコストに関する悪いイメージを払拭するリリースとして、もう一つ、定額料金最小スロット数の引き下げと Flex Slots の追加という定額料金の改良がありました。
2020/08/11 に、これまで最小 1000 スロット単位でしか契約できなかった定額料金が、100 スロットから利用できるようになりました!
スロットとは、BigQuery の処理能力の単位で、仮想 CPU と同じようなものと考えれば分かりやすいかと思います。 BigQuery で SQL を実行すると、裏側では複数のスロットで並列分散処理されます。 複雑な SQL 実行や SQL の同時実行数が多くなると並列処理の数が増えるので、スロット数が多いほどパフォーマンスが良くなります。
定額料金では、この使えるスロット数=並列処理の数に料金を支払うことで、SQL の実行にかかるクエリ料金が定額で利用できます。 これまでスロット数の契約は 1 ヶ月単位でしたが、2020/06/29 に 60 秒単位でスロット数を契約できる Flex Slots が GA になりました!
また、定額料金で契約したスロットは、2020/04/16 に GA になった BigQuery Reservations で、プロジェクトごとに必要なスロット数を割り当てたり、特定のプロジェクトは定額料金ではなくオンデマンド料金を利用するように設定できるようになりました。
- BigQuery Reservations の効果的な活用 | Google Cloud ブログ
- Reservations の概要 | BigQuery ドキュメント
- プロジェクトを None に割り当てる | BigQuery ドキュメント
ミッションクリティカルなデータ処理量の多いプロジェクトには定額料金で多くのスロットを割り当てて、 アドホック分析やスモールスタートのプロジェクトにはスロットを少なめに割り当てる、またはオンデマンド料金を利用するといった柔軟な対応ができるようになりましたv
パーティショニングとクラスタリング
SQL 実行時にスキャン量を抑えることで、パフォーマンス、コストともに向上することができます。 テーブルにパーティショニングやクラスタリングを定義しておくと、実行する SQL によってはスキャン量を削減することができます。 また、BigQuery のストレージ料金は、通常のアクティブストレージに対して 90 日以上使用していない長期保存ストレージだと約 1/2 の料金で済み、長期保存ストレージはパーティション単位で適用されます。 パフォーマンスおよびコスト管理を考えた場合、テーブルのパーティショニングやクラスタリングは非常に重要です。
2020 年、パーティショニングテーブル関連では以下のリリースがありました。
- 2020/02/18:整数範囲パーティション分割テーブル GA
- 2020/05/20:時間単位の列パーティション分割テーブルのベータ版リリース
- 2020/06/09:パーティション化されていないテーブルのクラスタリングをサポート
- 2020/09/21:時間単位の列パーティション分割テーブルをサポート
BigQuery ではこれまで、データ取込日時による分割しかサポートされていませんでした。
データ取り込み時にシステム側で _PARTITIONTIME
というダミーカラムをテーブルに追加し、そのカラム値を元にテーブルデータをパーティショニングする方法です。
それが、パーティショニング単位にテーブルの整数カラムや日時カラムを指定できるようになったことにより、より要件に合ったテーブルパーティショニングを選択できるようになり、より便利になりました。
- パーティション分割テーブルの概要 | BigQuery ドキュメント
- 整数範囲パーティション分割テーブルの作成と使用 | BigQuery ドキュメント
- 時間単位の列パーティション分割テーブルの作成と使用 | BigQuery ドキュメント
- BigQuery のコストを削減するために。パーティショニングテーブルの使い方を調べてみた | Developers.IO
また、以前からパーティショニングと合わせてテーブルデータをさらに細かい粒度に分割し並べ替えるクラスタリングを利用することができましたが、2020/06/09 には、パーティション分割していないテーブルにもクラスタリングが指定できるようになりました。
パーティショニングは分割データ量が少ないとパフォーマンスが出なかったり、指定できるパーティション数に上限があるので、 パーティショニングなしでクラスタリングを利用できるようになったことにより、より柔軟なパフォーマンス&コスト管理ができるようになりました。
さらに 2020/03/02 から、GCS ファイルの Hive パーティション分割レイアウトがサポートされるようになりました。
Hive パーティションレイアウトで配置された GCS ファイルを外部パーティショニングテーブルとして定義しておけば、BigQuery テーブルのパーティショニング同様、必要なパーティションのデータのみスキャンすることができるので、パフォーマンスやコストが最適化できます。 また Hive パーティション分割は他の多くの DWH でもサポートされているので、他システムと連携する場合にはファイルを配置しなおすなどの手間が必要なくなり、より便利に使えるようになったのではないかと思います。
列レベルのアクセス制御とテーブル ACL
BigQuery では SQL の GRANT
構文によるデータへのアクセス制御設定ができません。
その代わり、プロジェクトやデータセット単位でアクセス制御を設定したり、データセットのアクセス制御を応用して承認済みビューを定義したりする必要がありましたが、2020/11/17 にテーブルカラム単位のアクセス制御が GA に、また 2020/06/04 にはベータ版ですがテーブル単位のアクセス制御も可能になりました!
- BigQuery の列レベルのセキュリティで、きめ細かなアクセス制御を | Google Cloud ブログ
- BigQuery がテーブルレベルのアクセス制御に対応 | Google Cloud ブログ
- BigQuery の列レベルのセキュリティの概要 | BigQuery ドキュメント
- テーブルへのアクセス制御の概要 | BigQuery ドキュメント
- Data Catalog のポリシータグで BigQuery カラムレベルのアクセス制御が可能になったので試してみた | Developers.IO
- BigQuery でテーブルレベルのアクセス制御(テーブル ACL )ができるようになったので挙動を確認してみた | Developers.IO
データ分析の対象データには、個人情報などのシビアなデータが含まれることもあり、データに対するアクセス制御は非常に重要です。 場合によっては個人情報など特定のカラムをマスキングるなどの運用を行うこともあると思いますが、BigQuery の列レベルのアクセス制御を設定しておけば、日々追加されるテーブルデータでもマスキング処理なしにアクセス制御が実現できます。 また、これまでサポートされていなかったテーブル単位のアクセス制御がサポートされたことにより、特に他の DWH から移行する場合などのセキュリティ設計が楽になったのではないかと思います。
BigQuery スクリプトとストアドプロシージャ
2020/03/30 BigQuery スクリプトとストアドプロシージャが GA になりました。
BigQuery スクリプトは 2019/10/03 にベータ版リリースされた機能で、1 回の実行で複数の SQL を実行することができ、
SQL ステートメント内で IF
による条件分岐や LOOP
や WHILE
によるループ処理も実行することができます。
また、BigQuery スクリプト同様 2019/10/03 にベータ版リリースされたストアドプロシージャも同時に GA になりました。
BigQuery スクリプトやストアドプロシージャ の GA により、SQL ステートメント実行時に選択できる処理の幅が広がり、他のデータベースから BigQuery へ移行するケースにも対応しやすくなったのではないかと思います。
マテリアライズドビュー
2020/04/08、ベータ版ではありますが、BigQuery でもとうとうマテリアライズドビューが利用できるようになりました!(8888
ドキュメントを読んでると、気になる文章が。。
メンテナンス不要: ベーステーブルが変更されると、バックグラウンドでマテリアライズド ビューが再計算されます。ベーステーブルのすべての増分データが自動的にマテリアライズド ビューに追加されます。ユーザー入力は不要です。
常に最新: マテリアライズド ビューは、常にベーステーブル(BigQuery ストリーミング テーブルを含む)の内容と一致します。ベーステーブルが更新、マージ、パーティションの切り捨て、パーティションの有効期限切れによって変更されると、マテリアライズド ビューの影響を受ける部分が無効化され、ベーステーブルの対応する部分が完全に再読み込みされます。
参照するたびにソーステーブルに SELECT
が実行される通常のビューと異なり、マテリアライズドビューはソーステーブルのデータを物理的に保持しておく、いわばテーブルのようなものです。
通常のビューのように毎回 SELECT
を実行する必要がないので参照時のパフォーマンスが良い代わりに、
物理データを保持してしまっているのでソーステーブルのデータが更新されたら手動でマテリアライズドビューに反映する必要がある(のが当然)、と思っていたのですが、
昨今のマテリアライズドビューではソースデータの更新も自動で反映してくれるのですね@@?!
本当に更新が自動で反映されるのか、実際に試してみます。
価格.com の泡盛のランキングページからいただいてきた、商品名と製造元、価格情報を元に、 任意の商品コードと販売個数、販売日時項目をランダムで追加して、泡盛売上データを作成しました。
※実際の売上とは一切関係ありません。
作成したデータを BigQuery の awamori
テーブルにロードしました。
テーブルデータはこんな感じです。
上記テーブルから、日本時間の何時何分にどの商品が何個売れたかを確認するためのマテリアライズドビューを作成してみます。
BigQuery 管理コンソールでクエリエディタに以下の SQL を入力して実行しました。
CREATE MATERIALIZED VIEW dataset_advent_calendar.v_awamori AS SELECT prod_name, COUNT(*) AS pos_count, FORMAT_TIMESTAMP("%Y-%m-%d %H:%M:%S", pos_timestamp, "Asia/Tokyo") AS pos_timestamp FROM dataset_advent_calendar.awamori GROUP BY pos_timestamp, prod_name
マテリアライズドビューが作成できました。管理コンソールから、ビューデータの抽出クエリも確認できます。
作成したマテリアライズドビューに SQL を実行してみます。
販売日時でグルーピングされた 4 行のデータが確認できました。
さらに、ソーステーブルにデータを追加したらビューにも反映されるかどうか確認してみます。 12/23 の売上データを 8 行、ソーステーブルに追加しました。
ビューにも反映されていれば、販売日時でグルーピングされた 5 行のデータがマテリアライズドビューにも追加されているはずです。
追加データがマテリアライズドビューにも自動で反映されることが確認できました!
なお、この自動更新は有効/無効を切り替えることができるそうです。 状況によって使い分けることができて便利ですね!
ただ、ベータ版ということもあり、現在の BigQuery のマテリアライズドビューには制限事項もあります。
もともと集計結果を保持する用途で使われることが多いので、集計を含まないクエリでマテリアルビューを作成することはできません。
ソーステーブルから特定のカラムを抽出するだけの単純なクエリでマテリアライズドビューを作成しようとしてもエラーになります。
また、現在のところ、マテリアライズドビューで JOIN
を使うことはできません。
JOIN
が必要な場合は、あらかじめ必要なテーブルを結合した中間テーブルを作成しておくなどの対応が必要です。
今後、テーブル結合のサポート開始に期待です!
まとめ(所感)
2020 年もうれしいリリース盛りだくさんな BigQuery でした!ヽ(´ー`)ノ
とはいえ、年末の AWS re:Invent 2020 では、AWS の DWH サービス Redshift に関する胸熱なリリースもたくさん発表されています!
2021 年も各社クラウド DWH の進化から目が離せません! ユーザーにとって選択の幅が広がる、ほんと良い時代になりましたね><v
明日 25 日、最終日の BigQuery Advent Calendar 2020 は Mr.Mo からお送り予定です。 また、本アドベントカレンダーシリーズはこちらにも掲載しておりますので、これまでのエントリ含め明日のエントリまでもう少しお付き合いいただけますと幸いです!
参考
- Release notes | BigQuery ドキュメント
- Product launch stages
- データセットのロケーション | BigQuery ドキュメント
- BigQuery Service Level Agreement (SLA) | BigQuery ドキュメント
- 料金 | BigQuery ドキュメント
- Reservations の概要 | BigQuery ドキュメント
- データ操作言語の構文 | BigQuery ドキュメント
- データ定義言語ステートメントの使用 | BigQuery ドキュメント
- 標準 SQL のスクリプト | BigQuery ドキュメント
- BigQuery INFORMATION_SCHEMA の概要 | BigQuery ドキュメント
- パーティション分割テーブルの概要 | BigQuery ドキュメント
- クラスタ化テーブルの概要 | BigQuery ドキュメント
- 外部パーティション分割データの読み込み | BigQuery ドキュメント
- 外部でパーティションに分割されたデータのクエリ | BigQuery ドキュメント
- BigQuery の列レベルのセキュリティの概要 | BigQuery ドキュメント
- テーブルへのアクセス制御の概要 | BigQuery ドキュメント
- マテリアライズド ビューの概要 | BigQuery ドキュメント
- BigQuery の実体化されたビューのベスト プラクティス | BigQuery ドキュメント
- BigQuery のスーパーパワーを引き出す 10 個の重要なヒント | Google Cloud ブログ
- BigQuery で DML が無制限で利用可能に | Google Cloud ブログ
- BigQuery、業界トップクラスとなる 99.99% の稼働時間の SLA を提供 | Google Cloud ブログ
- ユーザーを笑顔にする BigQuery の使いやすい SQL 新機能 | Google Cloud ブログ
- BigQuery におけるコスト最適化のベストプラクティス | Google Cloud ブログ