BigQueryのINFORMATION_SCHEMA.JOBS ビューに現れた「query_dialect」とは?

Hirona Seno

2025.9.3

はじめに

こんにちは。

夏が始まったと思ったらもう暦上では9月。夏の終わりです。時間の流れは早いですね。

こんな感じでいつの間にか秋が来て冬が来て年末になっていたり…不思議です。

今回ですが、BigQueryに「いつの間にやってきた」とある話をしていきたいと思います。

業務でBigQueryを利用している場合、コストやパフォーマンスの調査でINFORMATION_SCHEMAを見ることが多いかなと思います。

そんなある日、INFORMATION_SCHEMA.JOBS ビューにquery_dialectというカラムが追加されていました。

初めてみた側からすると「これは一体何なんだ」と思うこともあるので、今回はこちらについて簡単に解説をしていきます。

query_dialectとは

2025年5月頃にINFORMATION_SCHEMA.JOBS ビューに新しく追加されたカラムで、過去に実行されたクエリジョブがレガシーSQLもしくはStandardSQLかを判別することができます。

INFORMATION_SCHEMA.JOBS ビュー | Google Cloud

query_dialect に表示される値は次の4種類とnullが存在します。

  • GOOGLE_SQL: StandardSQL(GoogleSQL)で実行されたジョブ
  • LEGACY_SQL: レガシーSQLで実行されたジョブ
  • DEFAULT_GOOGLE_SQL: デフォルト設定により、StandardSQL(GoogleSQL)として実行されたジョブ(SQLの種類を明示的に指定をしていなかった場合)
  • DEFAULT_LEGACY_SQL: デフォルト設定により、レガシーSQLとして実行されたジョブ(SQLの種類を明示的に指定をしていなかった場合)

null表記について

null表記に関して、Google公式ドキュメントでは記載がありません。

しかし、以下の場合に「null」が表示されることがあります。

1. job_typeがQUERY以外の場合

query_dialect はQUERYジョブに対して結果となる値を表示するため、LOADやCOPYといったジョブに対しては null を表示することがあります。

2. 調査対象クエリの期間が古い場合

query_dialect が最近追加されたカラムであるため、古い期間のクエリジョブについてはQUERYジョブであっても null が表示される可能性があります。

実行が長期間開いていたり、不定期に実行されるクエリに関してはquery_dialect のみでは調査しきれない可能性があるため、手動で確認が必要になります。

クエリ実行例

例として次のようなクエリで確認をすることができます。

SELECT 
  job_type,
  query_dialect,
  COUNT(*) as query_count
FROM `<project_name>.<region>.INFORMATION_SCHEMA.JOBS`
-- 必要に応じて期間指定等で絞り込み等
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY job_type,query_dialect;

結果例

job_typequery_dialectquery_count
QUERYGOOGLE_SQL510
QUERYLEGACY_SQL400
LOADnull300

なぜ、query_dialectが追加されたのか?

query_dialectについて、どのようなものなのか簡単に解説しましたが「どうしてこのカラムが追加されたのか?」と思った方もいると思います。

これは2025年8月から実施されたBigQueryの仕様変更に伴って追加されたものでした。

BigQuery Release Note |Google Cloud

【原文】

Starting August 1, 2025, GoogleSQL will become the default dialect for queries run from the command line interface (CLI) or API. To use LegacySQL, you will need to explicitly specify it in your requests or set the configuration setting default_sql_dialect_option to ‘default_legacy_sql’ at the project or organization level.

【日本語訳】

2025年8月1日より、コマンドラインインターフェース(CLI)またはAPIから実行されるクエリのデフォルトのSQLはGoogleSQLになります。 LegacySQLを使用するには、リクエストで明示的に指定するか、プロジェクトレベルまたは組織レベルでdefault_sql_dialect_option構成設定 を「default_legacy_sql」に設定する必要があります。

2025年7月まで次の機能においてBigQueryを利用する際、デフォルトで実行されるのはLegacySQLでした。

それが、2025年8月からStandardSQLがデフォルトになるように変更されました。

  • BQコマンドラインインタフェース(CLI)
  • BQAPIを利用したクエリ

そのため、8月以降もLegacySQLを利用する場合は、クエリもしくは組織プロジェクトレベルでLegacySQLを明示的に利用する設定をする必要が出てきました。

query_dialect は、LegacySQLを実行していたクエリを調査するために追加されたものになります。

補足: LegacySQL(レガシーSQL)とは

BigQueryで最初期から利用されていた古いSQL構文のスタイルです。

2011年のBigQueryのリリース以降、2016年にStandardSQL(GoogleSQL)が登場するまで利用されていました。

現在はStandardSQLが主に利用されており、Googleもこちらの利用を推奨しています。

LegacySQLの構文、関数、演算子| Google Cloud

レガシーSQLとStandardSQLの違い

次の表は代表的なものについて比較したものになります。

比較項目レガシーSQLStandardSQL
標準準拠Google独自の構文ANSI SQL(標準SQL)に準拠
サブクエリ/WITH句不可もしくは制限
JOIN制限あり柔軟に利用できる
予約キーワード/無効な識別子のエスケープ角括弧([])バッククォート(`)
ARRAYとSTRUCT型のサポート不可(REPEATED,RECORD型で対応)
現行利用について非推奨(利用の際は明示的に指定が必要)推奨(デフォルトで利用される)

このように見ると、同じサービス内で利用されていたSQLではありつつも、違う点が多いことがわかります。

まとめ

BigQueryのINFORMATION_SCHEMA.JOBS ビューに新しく追加されたquery_dialect カラムについて解説しました。

このカラムの持つ情報は所謂「ささる人にはささる」ものですが、長い間BigQueryを利用していたユーザーにとっては「どこでLegacySQLを使っていたか思い出せない」という事もあるので、そのような調査をするには便利なものとなります。

BigQueryは今後もさらなる機能の追加や仕様の変更もあると思うので、自分達が今利用しているクエリや設定をしっかり把握・調査し、仕様変更への対応をスムーズにできるようにしていきたいです。

参考資料

INFORMATION_SCHEMA.JOBS ビュー | Google Cloud

プロジェクトあたりのレガシーSQLクエリジョブの数 | Google Cloud

LegacySQLの構文、関数、演算子| Google Cloud

BigQuery Release Notes | Google Cloud

ブログ一覧へ戻る

お気軽にお問い合わせください

SREの設計・技術支援から、
SRE運用内で使用する
ツールの導入など、
SRE全般についてご支援しています。

資料請求・お問い合わせ