使用会话
本文档介绍了如何创建、使用、终止和列出会话。
在完成以下步骤之前,请确保您拥有必要的权限。
创建会话
如果您想要捕获一组 SQL 活动,请创建 BigQuery 会话。创建会话后,您可以在会话中运行交互式查询,直到会话终止为止。会话中的所有查询都在创建会话的位置运行(处理)。
控制台
在 Trusted Cloud 控制台中,每个会话都会分配给一个编辑器标签页。
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
点击
编写新查询。系统随即会打开一个新的编辑器标签页。点击更多 >> 查询设置。此时将显示查询设置面板。
在会话管理部分中,点击使用会话模式以启用会话模式。
在其他设置 > 数据位置中,选择位置。创建会话后,会话中的所有查询都仅限于此位置,且该位置无法更改。
点击保存。
在编辑器标签页中编写查询并运行它。系统会在运行这第一个查询后创建新会话。
bq
打开 Cloud Shell 并输入以下 bq query
命令:
bq query \ --nouse_legacy_sql \ --create_session [--location 'SESSION_LOCATION'] \ 'SQL_STATEMENT'
其中:
- SESSION_LOCATION:将会话绑定到物理位置。将会话中的所有查询限制为此位置。可选。
- SQL_STATEMENT:会话的第一个 SQL 语句。
您的会话 ID 会随查询结果一起返回。
API
使用以下参数调用 jobs.query
方法:
{ "query": "SQL_STATEMENT", "createSession": true, ["location": "SESSION_LOCATION"] }
其中:
- SQL_STATEMENT:会话的第一个 SQL 语句。
- SESSION_LOCATION:将会话绑定到物理位置。将会话中的所有查询限制为此位置。可选。
响应正文类似于以下内容:
{
"jobReference": {
"projectId": "myProject",
"jobId": "job_123"
},
"statistics": {
"sessionInfo": {
"sessionId": "CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ"
}
}
}
在会话中运行查询
创建会话后,您可以在该会话中运行查询:
控制台
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
点击包含该会话的编辑器标签页。
将查询添加到会话,然后点击运行。
bq
打开 Cloud Shell 并输入以下 bq query
命令:
bq query \ --nouse_legacy_sql \ --session_id=SESSION_ID \ 'SQL_STATEMENT'
其中:
- SESSION_ID:将此值替换为您要使用的会话的 ID。
- SQL_STATEMENT:要在会话中运行的 SQL 语句。
查询结果后会显示您的会话 ID。
如果您打算使用 Cloud Shell 运行大量查询,可以将会话 ID 添加到 .bigqueryrc
中的 [query]
,这样就无需将会话 ID 复制粘贴到每个命令中。
在 .bigqueryrc
中,会话 ID 如下所示:
[query]
--session_id=CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
将会话 ID 添加到 .bigqueryrc
后,您可以从 bq query
命令中省略 --session_id
标志。如果要使用其他会话或会话终止,则必须更新 .bigqueryrc
文件。
API
使用以下参数调用 jobs.query
方法:
{ "query": "SQL_STATEMENT", "connectionProperties": [{ "key": "session_id", "value": "SESSION_ID" }] }
其中:
- SQL_STATEMENT:会话的第一个 SQL 语句。
- SESSION_ID:会话的 ID。
终止会话
会话可以手动或自动终止。已终止的会话的历史记录在终止后可保留 20 天。
自动终止会话
会话会在 24 小时不活动或 7 天后自动终止,以最先满足上述条件的时间为准。
终止当前会话
您可以使用 SQL 语句终止当前会话;如果会话是在Trusted Cloud 控制台中创建的,您也可以在控制台中终止会话。
控制台
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
找到包含会话的编辑器标签页,然后关闭该标签页。会话终止。
SQL
执行以下操作以终止会话:
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
CALL BQ.ABORT_SESSION();
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
按 ID 终止会话
您可以使用会话 ID 终止会话。您无需进入会话即可以这种方式终止会话。
获取会话 ID,然后运行以下语句:
CALL BQ.ABORT_SESSION(SESSION_ID);
将 SESSION_ID 替换为要终止的会话的 ID。
获取活跃会话的 ID
在某些情况下,您需要引用会话才能继续在该会话中操作。例如,如果您使用的是 Cloud Shell,则每次为该会话运行命令时,都必须包含会话 ID。
控制台
您无需提供会话 ID 即可在 Trusted Cloud 控制台中的会话内运行新查询。您可以继续在包含该会话的编辑器标签页中执行操作。但是,如果要通过 Cloud Shell 或 API 调用引用会话,则需要知道您在控制台中创建的会话的 ID。
在完成以下步骤之前,请确保已在活跃会话中运行至少一个查询。
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
点击包含该会话的编辑器标签页。
在查询结果中,点击作业信息。
在作业信息列表中,搜索会话 ID:
Session ID: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
bq
如需在 Cloud Shell 中的会话内运行查询命令,您需要在命令中包含会话 ID。您可以在创建会话时或通过列出您的会话来获取会话 ID。
使用 Cloud Shell 创建会话时,返回的会话 ID 类似于以下内容:
In session: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
API
要使用 API 调用将 SQL 命令传入会话,您需要在 API 调用中包含会话 ID。您可以在创建会话时或通过列出您的会话来获取会话 ID。
使用 API 调用创建会话时,响应中的会话 ID 类似于以下内容:
sessionId: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
列出有效会话和无效会话
如需获取活跃会话和非活跃会话的会话 ID,请按以下步骤操作:
控制台
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
选择作业历史记录的类型:
- 如需显示近期作业的信息,请点击个人历史记录。
- 如需显示项目中近期作业的信息,请点击项目历史记录。
在会话 ID 列中,您可以查看作业的会话 ID。
SQL
如需获取最近三个会话(包括活跃会话和已终止会话)的列表,请在编辑器标签页中运行以下查询:
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT session_id, MAX(creation_time) AS last_modified_time FROM
region-us
.INFORMATION_SCHEMA.VIEW WHERE session_id IS NOT NULL AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 20 DAY) GROUP BY session_id ORDER BY last_modified_time DESC;替换以下内容:
VIEW
:INFORMATION_SCHEMA
视图:JOBS_BY_USER
:仅返回当前项目中的当前用户创建的作业SESSIONS_BY_USER
:仅返回当前项目中的当前用户创建的会话SESSIONS_BY_PROJECT
:返回当前项目中的所有会话
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
结果类似于以下内容:
+-------------------------------------------------------------------------+ | session_id | last_modified_time | +-------------------------------------------------------------------------+ | CgwKCmZhbGl1LXRlc3QQARokMGQ5YWWYzZmE0YjhkMDBm | 2021-06-01 23:04:26 | | CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZTczwZjA1NDc2 | 2021-05-30 22:43:02 | | CgwKCmZhbGl1LXRlc3QQY2MzLTg4ZDEtYzVhOWZiYmM5NzZk | 2021-04-07 22:31:21 | +-------------------------------------------------------------------------+
查看会话历史记录
会话会捕获时间范围内的 SQL 活动。这些信息存储在会话的历史记录中。通过会话历史记录,您可以跟踪您在会话中所做的更改。如果作业失败或成功,则会记录在会话历史记录中,以便您稍后返回并查看已执行的操作。
控制台
如需在 Trusted Cloud 控制台中查看会话的历史记录,您可以按会话 ID 过滤个人历史记录或项目历史记录,以查看特定会话中运行的所有 SQL 查询。
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
展开作业历史记录部分。
选择要查看的作业历史记录类型:
- 如需显示您的近期作业的信息,请点击个人记录。
- 如需显示项目中近期作业的信息,请点击项目历史记录。
点击
过滤条件,然后选择会话 ID。在会话 ID 字段中,搜索会话 ID:
Session ID: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
SQL
如需查看特定会话的历史数据,请先获取会话 ID,然后执行以下步骤:
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT * FROM region-us.INFORMATION_SCHEMA.VIEW WHERE session_info.session_id = 'SESSION_ID';
替换以下内容:
VIEW:要使用的
INFORMATION_SCHEMA
视图选择以下视图之一:
JOBS_BY_USER
:仅返回当前项目中的当前用户创建的作业SESSIONS_BY_USER
:仅返回当前项目中的当前用户创建的会话SESSIONS_BY_PROJECT
:返回当前项目中的所有会话
- SESSION_ID:要检索其历史数据的会话的 ID
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
示例
以下命令返回会话 ID 为 CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0
的会话的历史记录。您可以将此会话 ID 替换为您自己的 ID。
SELECT creation_time, query FROM region-us.INFORMATION_SCHEMA.JOBS_BY_USER WHERE session_info.session_id = 'CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 20 DAY);
结果类似于以下内容:
+---------------------+------------------------------------------------------------------------------------------+
| creation_time | query |
+---------------------+------------------------------------------------------------------------------------------+
| 2021-06-01 23:04:26 | SELECT * FROM Purchases; |
| 2021-06-01 23:02:51 | CREATE TEMP TABLE Purchases(total INT64) AS SELECT * FROM UNNEST([10,23,3,14,55]) AS a; |
+---------------------+------------------------------------------------------------------------------------------+
后续步骤
- 请参阅会话简介。
- 详细了解如何在会话中编写查询。