セッションでクエリを実行する

このドキュメントでは、BigQuery セッションでクエリを実行する方法について説明します。このドキュメントは、セッションに関する一般的な知識があり、セッションを作成して、使用するセッションの ID を把握しているユーザーを対象としています。

以下の手順を行う前に、セッションの作成に必要な権限があることを確認してください。

セッションでクエリを実行する

セッションを作成したら、セッションにクエリを追加して実行できます。いくつかの方法があります。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. セッションを含むエディタのタブをクリックします。

  3. クエリをセッションに追加し、[実行] をクリックします。

セッションをテストする

Google Cloud コンソールで、作成したセッションを含むエディタタブを開き、次の SQL ステートメントを実行します。

CREATE TEMP TABLE Temperature(degrees INT64)  AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;

タブのコンテンツを削除またはコメントアウトして、次の SQL ステートメントを実行します。

SELECT * FROM Temperature;

次のような結果が返されたことを確認します。

+---------+
| degrees |
+---------+
|      55 |
|      14 |
|       3 |
|       0 |
|      30 |
+---------+

bq

Cloud Shell を開き、次の bq query コマンドを入力します。

bq query \
--nouse_legacy_sql \
--session_id=SESSION_ID \
'SQL_STATEMENT'

ここで

  • SESSION_ID: 使用するセッションの ID に置き換えます。
  • SQL_STATEMENT: セッションで実行する SQL ステートメント。

セッションをテストする

作成したセッションに、Temperature という一時テーブルを作成します。セッション ID は実際の ID に置き換えます。

bq query \
  --nouse_legacy_sql \
  --session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ \
  'CREATE TEMP TABLE Temperature(degrees INT64)  AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;'

Temperature テーブル内の値のリストを取得します。セッション ID は実際の ID に置き換えます。

bq query \
  --nouse_legacy_sql \
  --session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ \
  'SELECT * FROM Temperature;'

次のような結果が返されたことを確認します。

+-------+
| total |
+-------+
|    30 |
|     0 |
|     3 |
|    14 |
|    55 |
+-------+

In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

セッションを .bigqueryrc に追加すると、時間を節約できます

Cloud Shell で多数のクエリを実行する場合は、.bigqueryrc[query] にセッション ID を追加します。これにより、セッション ID をコピーして各コマンドに貼り付ける必要がなくなります。

.bigqueryrc でのセッション ID は次のようになります。

[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ

セッション ID を .bigqueryrc に追加したら、次のコマンドを使用できます。

bq query \
  --nouse_legacy_sql \
  'SELECT * FROM Temperature;'

別のセッションを使用する場合や、セッションを終了する場合は、.bigqueryrc を更新する必要があります。

API

定義済みのジョブリソースを使用して、jobs.insert メソッドまたは jobs.query メソッドを呼び出します。

jobs.insert

次のパラメータを使用して、jobs.insert メソッドを呼び出します。

{
  "jobReference": {
    "projectId": "PROJECT_ID",
    "jobId": "JOB_ID"
  },
  "configuration": {
    "query": {
      "query": "SQL_STATEMENT",
      "connectionProperties": [{
        "key": "session_id",
        "value": "SESSION_ID"
      }]
    }
  }
}

ここで

  • PROJECT_ID: セッションを作成するプロジェクト。
  • JOB_ID: セッションを作成するジョブ。
  • SQL_STATEMENT: セッションの最初の SQL ステートメント。
  • SESSION_ID: セッションの ID

セッションをテストする

次のリクエスト本文を入力して、作成したセッションTemperature という一時テーブルを作成します。プロジェクト ID、ジョブ ID、セッション ID は実際の ID に置き換えます。

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "configuration": {
    "query": {
      "query": "CREATE TEMP TABLE Temperature(degrees INT64) AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;",
      "connectionProperties": [{
        "key": "session_id",
        "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
      }]
    }
  }
}

セッション内の Temperature テーブルの値のリストを取得するには、次のリクエスト本文を入力します。プロジェクト ID、ジョブ ID、セッション ID は実際の ID に置き換えます。

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "configuration": {
    "query": {
      "query": "SELECT * FROM Temperature;",
      "connectionProperties": [{
        "key": "session_id",
        "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
      }]
    }
  }
}

両方のリクエストのレスポンス本文が次のようになっていることを確認します。

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "statistics": {
    "sessionInfo": {
      "sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
    }
  }
}

jobs.query

次のパラメータを使用して、jobs.query メソッドを呼び出します。

{
  "query": "SQL_STATEMENT",
  "connectionProperties": [{
    "key": "session_id",
    "value": "SESSION_ID"
  }]
}

ここで

  • SQL_STATEMENT: セッションの最初の SQL ステートメント。
  • SESSION_ID: セッションの ID

セッションをテストする

次のリクエスト本文を入力して、作成したセッションTemperature という一時テーブルを作成します。プロジェクト ID、ジョブ ID、セッション ID は実際の ID に置き換えます。

{
  "query": "CREATE TEMP TABLE Temperature(degrees INT64) AS SELECT * FROM UNNEST([30,0,3,14,55]) AS a;",
  "connectionProperties": [{
    "key": "session_id",
    "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
  }]
}

セッション内の Temperature テーブルの値のリストを取得するには、次のリクエスト本文を入力します。プロジェクト ID、ジョブ ID、セッション ID は実際の ID に置き換えます。

{
  "query": "SELECT * FROM Temperature;",
  "connectionProperties": [{
    "key": "session_id",
    "value": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
  }]
}

両方のリクエストのレスポンス本文が次のようになっていることを確認します。

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "job_123"
  },
  "statistics": {
    "sessionInfo": {
      "sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
    }
  }
}

次のステップ