システム変数のリファレンス

BigQuery は、マルチステートメント クエリまたはセッション内で次のシステム変数をサポートしています。ユーザー定義の手続き型言語変数と同様に、システム変数を使用して、クエリの実行時に情報を設定または取得できます。

名前 種類 読み取りと書き込みまたは読み取り専用 説明
@@current_job_id STRING 読み取りのみ 現在実行中のジョブのジョブ ID。複数ステートメント クエリのコンテキストでは、複数ステートメント クエリ全体ではなく、現在のステートメントを処理するジョブが返されます。
@@dataset_id STRING 読み取りと書き込み 現在のプロジェクト内にあるデフォルト データセットの ID。この ID は、クエリでプロジェクトにデータセットが指定されていない場合に使用されます。SET ステートメントを使用して、現在のプロジェクト内の別のデータセット ID に @@dataset_id を割り当てることができます。システム変数の @@dataset_project_id@@dataset_id を組み合わせて設定して使用できます。
@@dataset_project_id STRING 読み取りと書き込み クエリで使用されるデータセットにプロジェクトが指定されていない場合に使用されるデフォルト プロジェクトの ID。@@dataset_project_id が設定されていない場合、または NULL に設定されている場合、クエリを実行するプロジェクト(@@project_id)が使用されます。SET ステートメントを使用すると、@@dataset_project_id を別のプロジェクト ID に割り当てることができます。システム変数の @@dataset_project_id@@dataset_id は、一緒に設定して使用できます。
@@last_job_id STRING 読み取りのみ 現在の複数ステートメント クエリで実行される最新のジョブのジョブ ID。現在のジョブは含まれません。複数ステートメント クエリに CALL ステートメントが含まれている場合、このジョブは別のプロシージャで作成された可能性があります。
@@location STRING 読み取りと書き込み プレビュー)クエリを実行するロケーション。@@location は、有効なロケーションを含む文字列リテラルにのみ設定できます。SET @@location ステートメントは、クエリの最初のステートメントにする必要があります。@@location クエリの別のロケーション設定が一致しない場合、エラーが発生します。短いクエリモードを使用すると、@@location を設定するクエリのレイテンシを改善できます。この機能に関するフィードバックやサポートをご希望の場合は、こちらのフォームをご利用ください。
@@project_id STRING 読み取りのみ 現在のクエリを実行するために使用されるプロジェクトの ID。プロシージャのコンテキストでは、@@project_id はプロシージャを所有するプロジェクトではなく、複数ステートメント クエリを実行するプロジェクトを指します。
@@query_label STRING 読み取りと書き込み 現在のマルチステートメント クエリまたはセッションのクエリジョブに関連付けるクエリラベル。クエリ内で設定した場合、スクリプトまたはセッションの後続のすべてのクエリジョブには、このラベルが付けられます。 クエリで設定されていない場合、このシステム変数の値は NULL です。このシステム変数を設定する方法の例については、セッションのジョブをラベルに関連付けるをご覧ください。
@@row_count INT64 読み取りのみ 複数ステートメントのクエリで使用され、前のステートメントが DML の場合は、その DML ステートメントの結果として変更、挿入、または削除された行数を指定します。前のステートメントが MERGE ステートメントの場合、@@row_count は挿入、削除された合計行数を表します。複数ステートメント クエリ内に存在しない場合、この値は NULL です。
@@script.bytes_billed INT64 読み取りのみ 現在実行中のマルチステートメント クエリジョブでこれまでに課金された合計バイト数。ジョブ内にない場合、この値は NULL です。
@@script.bytes_processed INT64 読み取りのみ 現在実行中のマルチステートメント クエリジョブでこれまでに処理された合計バイト数。ジョブ内にない場合、この値は NULL です。
@@script.creation_time TIMESTAMP 読み取りのみ 現在実行中のマルチステートメント クエリジョブの作成時刻。 ジョブ内にない場合、この値は NULL です。
@@script.job_id STRING 読み取りのみ 現在実行中のマルチステートメント クエリジョブのジョブ ID。ジョブ内にない場合、この値は NULL です。
@@script.num_child_jobs INT64 読み取りのみ 現在完了している子ジョブの数。ジョブ内にない場合、この値は NULL です。
@@script.slot_ms INT64 読み取りのみ スクリプトがそれまでに使用したスロットのミリ秒数。ジョブ内にない場合、この値は NULL です。
@@session_id INT64 読み取りのみ 現在のクエリが関連付けられているセッションの ID。
@@time_zone STRING 読み取りと書き込み タイムゾーンが引数として指定されていない場合に、タイムゾーンに依存する SQL 関数で使用するデフォルトのタイムゾーン。@@time_zone は、SET ステートメントを使用して任意の有効なタイムゾーン名に変更できます。各スクリプトの先頭で、@@time_zone は「UTC」で始まります。

下位互換性のため、OPTIONS 句または FOR SYSTEM TIME AS OF 句で使用される式はデフォルトで America/Los_Angeles タイムゾーンになり、他のすべての日時式はデフォルトで UTC タイムゾーンになります。複数ステートメント クエリで @@time_zone がすでに設定されている場合、選択されたタイムゾーンが OPTIONS 句と FOR SYSTEM TIME AS OF 句を含めてすべての日時式に適用されます。

マルチステートメント クエリの実行中は、上記のシステム変数に加えて、EXCEPTION システム変数を使用できます。EXCEPTION システム変数の詳細については、手続き型言語ステートメント BEGIN...EXCEPTION をご覧ください。

システム変数は作成しませんが、一部の変数は以下のようにデフォルト値をオーバーライドできます。

SET @@dataset_project_id = 'MyProject';

次のクエリは、デフォルトのタイムゾーンを返します。

SELECT @@time_zone AS default_time_zone;
+-------------------+
| default_time_zone |
+-------------------+
| UTC               |
+-------------------+

システム変数は DDL クエリと DML クエリで使用できます。 たとえば、テーブルの作成時と更新時にシステム変数 @@time_zone を使用する方法は次のとおりです。

BEGIN
  CREATE TEMP TABLE MyTempTable
  AS SELECT @@time_zone AS default_time_zone;
END;
CREATE OR REPLACE TABLE MyDataset.MyTable(default_time_zone STRING)
  OPTIONS (description = @@time_zone);
UPDATE MyDataset.MyTable
SET default_time_zone = @@time_zone
WHERE TRUE;

DDL および DML クエリでシステム変数を使用できない場合があります。たとえば、システム変数をプロジェクト名、データセット、テーブル名として使用することはできません。次のクエリで、テーブルパスに @@dataset_id システム変数を設定すると、エラーが発生します。

BEGIN
  CREATE TEMP TABLE @@dataset_id.MyTempTable (id STRING);
END;

マルチステートメント クエリでシステム変数を使用する方法の例については、変数を設定するをご覧ください。

セッションでシステム変数を使用する方法の例については、セッションの例をご覧ください。