😎

BigQuery でパーティションスキューに関するクエリパフォーマンスの分析情報を確認できるようになりました

2024/01/15に公開

はじめに

はじめに
こんにちは、クラウドエース データソリューション部に所属の齋藤です。
データソリューション部では、Google Cloud が提供しているデータ領域のプロダクトについて、新規リリースをキャッチアップするための調査報告会を毎週実施しています。
新規リリースの中でも、特に重要と考えるリリースを記事としてまとめ、本ページのように公開しています。

今回紹介するリリースは、「BigQuery のクエリパフォーマンス分析情報にパーティションスキューが追加された」ことについてです。
https://cloud.google.com/bigquery/docs/release-notes#November_14_2023

BigQuery の概要

BigQuery とは、大規模データを扱うことのできるサーバーレスでコスト効率の高いデータウェアハウスです。
また、SQL (Structured Query Language) で記述したクエリを実行して必要なデータを取り出すことができ、クエリパフォーマンスの分析情報も確認することができます。
https://cloud.google.com/bigquery?hl=ja

リリース内容

2023 年 11 月 14 日のリリースにより、BigQuery で、パーティションスキューに関するクエリパフォーマンスの分析情報を確認できるようになりました。
以前からクエリパフォーマンスの分析情報を利用すること自体は可能でしたが、今回のリリースでその分析情報にパーティションスキューが新たに追加されました。

クエリパフォーマンスの分析情報については弊社の別記事BigQueryのクエリ実行グラフを使って、クエリパフォーマンス向上のためのヒントを得るもあわせてご参照ください。

現在は、以下の分析情報が利用可能です。

  • スロット競合
  • シャッフル割り当てが不十分
  • データ入力スケールの変更
  • カーディナリティの高い結合
  • パーティションスキュー(新機能)


これらの分析情報を活用することでクエリパフォーマンスの向上に繋がる可能性があります。

分析情報は事前設定なしに、クエリ実行後の Google Cloud コンソールのジョブ情報から確認できます。
なお、パーティションスキューの分析情報が表示される機能はプレビュー段階です。

パーティションスキューとは?

パーティションスキューについて説明する前に、まずは「パーティション」と「スキュー」とは何かを説明します。

パーティション

パーティションは、大きなテーブルをより小さな領域に分割し、扱いやすい単位にすることを指します。
この分割により、各パーティションに対して並行してスキャンされるため、クエリパフォーマンスが良くなります。

スキュー

スキューとは、データの分布が均等でなく、あるテーブルのフィールドが特定の値に集中している状態を指します。
この場合、クエリパフォーマンスが悪くなる可能性があります。

例えば、日本で展開しているあるサービスのユーザー情報テーブルにおいて、氏名や住所(都道府県、市区町村、番地)といったフィールドがある場合を考えます。
このテーブルのレコードを都道府県フィールドごとで分けると、日本の総人口の約10%は東京都に集中しているため、東京都のレコードが他の道府県に比べて多くなります。このようなデータの偏りをスキューと言います。

パーティションスキュー

パーティションスキューは、一部のパーティションにデータが過剰に集中している状態です。
BigQuery ではクエリパフォーマンスを上げるために、クエリ実行時にデータを複数のパーティションに分割する仕組みがあります。
データが過剰に集中している状態でクエリを実行すると一部のパーティションが他よりも大きくなり、パーティションスキューが発生します。
これにより、クエリパフォーマンスが低下する可能性があります。
特に、JOIN 句を含むクエリを実行する際に発生する可能性が高いとされています。

パーティションスキューの対処方法については、偏りのあるデータをフィルタリングするをご参照ください。

なおここでのパーティションは、テーブルを論理的に分割してデータを保持する BigQuery の機能であるパーティション分割テーブルのパーティションとは異なることに注意してください。

分析情報の確認

人為的にパーティションスキューを発生させるのは難しいため、今回は例として「データ入力スケールの変更」が発生した場合の BigQuery におけるクエリパフォーマンスの確認方法を説明します。

  1. Google Cloud コンソールで、BigQuery を開きます。

  2. クエリを実行します。

  3. 画面下部に表示されるクエリ結果から「ジョブ情報」を選択します。

  4. 問題があった場合、「クエリ分析情報」が表示されます。

  5. 「クエリ分析情報」の詳細にカーソルを合わせると、問題に関する説明が表示されます。

以上が確認手順です。

どのステップで、その問題が発生しているのかを詳しく知りたい場合は、タブにある「実行グラフ」で確認することが出来ます。

まとめ

今回は、BigQuery のクエリにてパーティションスキューの問題が発生した場合、その分析情報を得られる機能を紹介しました。
この機能は、クエリパフォーマンスを最適化するためにヒントとなる分析情報を得ることが可能です。
これにより、クエリパフォーマンスに問題があることを早い段階で気付くことができ、適切な対応を行うことができます。

ただし、現状ではクエリパフォーマンスに問題があるという情報が表示されるだけあり、その問題に対する具体な解決策は示されません。
将来的には、「どのステップにどのような変更を加えると問題が発生しなくなるか」を提案する機能が追加されれば、より実用性の高い機能になるかなと思いました。

直近のリリース

https://zenn.dev/cloud_ace/articles/b6c15215eee81e
https://zenn.dev/cloud_ace/articles/d42a101d93346f
https://zenn.dev/cloud_ace/articles/c2b901796c97f0

Discussion