在会话中运行查询
本文档介绍如何在 BigQuery 会话中运行查询。它面向已经大致了解会话、已经创建会话并且知道要使用的会话的 ID 的用户。
在完成以下步骤之前,请确保您拥有创建会话所需的权限。
在会话中运行查询
创建会话后,您可以向会话添加查询并运行该查询。您可以通过以下几种方式执行此操作:
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
点击包含该会话的编辑器标签页。
将查询添加到会话,然后点击运行。
测试您的会话
在 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 替换为您自己的 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"
}
}
}