BigQuery での SQL の概要
このドキュメントでは、BigQuery でサポートされているステートメントと SQL 言語の概要について説明します。
GoogleSQL は ANSI 準拠の構造化クエリ言語(SQL)であり、サポートされている次のタイプのステートメントが含まれています。
- クエリ ステートメント(Data Query Language(DQL)ステートメントとも呼ばれます)は、BigQuery でデータを分析する主要な方法です。1 つ以上のテーブルや式をスキャンして、計算結果の行を返します。クエリ ステートメントには、パイプ構文を含めることができます。
- プロシージャル言語ステートメントは、GoogleSQL のプロシージャルの拡張であり、1 回のリクエストで複数の SQL ステートメントを実行できます。プロシージャル ステートメントでは変数と制御フロー ステートメントを使用できますが、副作用が生じる可能性があります。
- データ定義言語(DDL)ステートメントを使用すると、次のようなオブジェクトを作成および変更できます。 - データセット
- テーブル(スキーマと列の型を含む)
- テーブル クローンおよびスナップショット
- ビュー
- 関数
- インデックス
- 容量コミットメント、予約、割り当て
- 行レベルのアクセス ポリシー
 
- データ操作言語(DML)ステートメントを使用すると、BigQuery テーブルのデータを更新、挿入、削除できます。 
- データ制御言語(DCL)ステートメントを使用すると、アクセスや容量などの BigQuery システム リソースを制御できます。 
- トランザクション制御言語(TCL)ステートメントを使用すると、データ変更のトランザクションを管理できます。 
- 読み込みステートメントとエクスポート ステートメントを使用すると、BigQuery との間でやり取りされるデータを管理できます。 
BigQuery SQL 言語
BigQuery は GoogleSQL 言語をサポートしていますが、レガシー SQL 言語も使用できます。BigQuery を初めて使用する場合は、最も幅広い機能をサポートしている GoogleSQL を使用することをおすすめします。たとえば、DDL ステートメントや DML ステートメントなどの機能は、GoogleSQL を使用する場合にのみサポートされます。下位互換性を持たせるため、レガシー SQL が維持されています。レガシー SQL を使用している場合は、移行することをおすすめします。
デフォルト言語からの変更
デフォルトのクエリ言語は、データのクエリに使用するインターフェースによって決まります。別の言語に切り替えるには:
コンソール
Google Cloud コンソールのデフォルトの言語は GoogleSQL です。言語をレガシー SQL に変更するには、次の操作を行います。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで、[展開] > [クエリ設定] ボタンをクリックします。 
- [詳細オプション] セクションの [SQL 言語] で、[レガシー]、[保存] の順にクリックします。これで、このクエリに対してレガシー SQL オプションが設定されます。[add_box SQL クエリ] をクリックして新しいクエリを作成する場合は、レガシー SQL オプションを再度選択する必要があります。 
SQL
デフォルトの SQL 言語は GoogleSQL です。クエリの中に接頭辞の #standardSQL または #legacySQL を含めることで、SQL 言語の種類を設定できます。これらのクエリ接頭辞では大文字と小文字が区別されません。クエリの前につける必要があり、クエリとは改行文字で区切る必要があります。次の例では、言語をレガシー SQL に設定し、出生率データセットにクエリを実行します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - #legacySQL SELECT weight_pounds, state, year, gestation_weeks FROM [bigquery-public-data:samples.natality] ORDER BY weight_pounds DESC LIMIT 10; 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
bq コマンドライン ツールのデフォルトのクエリ言語は、レガシー SQL です。GoogleSQL 言語に切り替えるには、--use_legacy_sql=false フラグまたは --nouse_legacy_sql フラグをコマンドライン ステートメントに追加します。
GoogleSQL 言語に切り替える
クエリジョブで GoogleSQL 構文を使用するには、use_legacy_sql パラメータを false に設定します。
  bq query \
  --use_legacy_sql=false \
  'SELECT
    word
  FROM
    `bigquery-public-data.samples.shakespeare`'
GoogleSQL をデフォルトの言語として設定する
コマンドライン ツールの構成ファイル .bigqueryrc を編集することで、GoogleSQL をコマンドライン ツールと対話型シェルのデフォルトの言語に設定できます。
.bigqueryrc の詳細については、コマンド固有フラグのデフォルト値の設定をご覧ください。
.bigqueryrc で --use_legacy_sql=false を設定するには:
- テキスト エディタで .bigqueryrcを開きます。デフォルトの場合、.bigqueryrcはユーザー ディレクトリにあります(例:$HOME/.bigqueryrc)。
- このファイルに次のテキストを追加します。この例では、GoogleSQL が、クエリと(ビューを作成するときに使用される) - mkコマンドのデフォルト構文として設定されます。- queryコマンドフラグまたは- mkコマンドフラグに対してすでにデフォルト値を構成している場合、- [query]または- [mk]をもう一度追加し直す必要はありません。- [query] --use_legacy_sql=false [mk] --use_legacy_sql=false
- ファイルを保存して閉じます。 
- 対話型シェルを使用している場合は、変更を適用するために、対話型シェルを終了して再起動する必要があります。 
使用可能なコマンドライン フラグについては、bq コマンドライン ツール リファレンスをご覧ください。
C#
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある C# の設定手順を完了してください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
C# ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、UseLegacySql パラメータを true に設定します。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、クエリ構成内の UseLegacySQL プロパティを true に設定します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、useLegacySql パラメータを true に設定します。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、useLegacySql パラメータを true に設定します。
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある PHP の設定手順を完了してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、useLegacySql パラメータを true に設定します。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、use_legacy_sql パラメータを True に設定します。
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Ruby の設定手順を完了してください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby クライアント ライブラリではデフォルトで GoogleSQL が使用されます。レガシー SQL 言語に切り替える
クエリジョブでレガシー SQL 構文を使用するには、クエリでオプション legacy_sql: true を渡します。
次のステップ
- BigQuery で SQL クエリを実行する方法について詳しくは、インタラクティブ クエリとバッチクエリのジョブの実行をご覧ください。
- クエリの最適化に関する一般的な情報については、クエリ パフォーマンスの最適化の概要をご覧ください。
- BigQuery でデータのクエリに使用される GoogleSQL 構文については、クエリ構文をご覧ください。
- クエリでパイプ構文を使用する方法については、パイプ構文をご覧ください。