在工作階段中執行查詢

本文件說明如何在 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 執行大量查詢,可以將工作階段 ID 新增至 .bigqueryrc 中的 [query],這樣就不必將工作階段 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 改為您自己的值。

{
  "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 改為您自己的值。

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

請確認這兩個要求的回應主體類似下列內容:

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

後續步驟