使用会话

本文档介绍了如何创建、使用、终止和列出会话

在完成以下步骤之前,请确保您拥有必要的权限

创建会话

如果您想要捕获一组 SQL 活动,请创建 BigQuery 会话。创建会话后,您可以在会话中运行交互式查询,直到会话终止为止。会话中的所有查询都在创建会话的位置运行(处理)。

控制台

在 Trusted Cloud 控制台中,每个会话都会分配给一个编辑器标签页。

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 点击 编写新查询。系统随即会打开一个新的编辑器标签页。

  3. 点击更多 >> 查询设置。此时将显示查询设置面板。

  4. 会话管理部分中,点击使用会话模式以启用会话模式。

  5. 其他设置 > 数据位置中,选择位置。创建会话后,会话中的所有查询都仅限于此位置,且该位置无法更改。

  6. 点击保存

  7. 在编辑器标签页中编写查询并运行它。系统会在运行这第一个查询后创建新会话。

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"
    }
  }
}

在会话中运行查询

创建会话后,您可以在该会话中运行查询:

控制台

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 点击包含该会话的编辑器标签页。

  3. 将查询添加到会话,然后点击运行

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 控制台中创建的,您也可以在控制台中终止会话。

控制台

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 找到包含会话的编辑器标签页,然后关闭该标签页。会话终止。

SQL

执行以下操作以终止会话:

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    CALL BQ.ABORT_SESSION();

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

按 ID 终止会话

您可以使用会话 ID 终止会话。您无需进入会话即可以这种方式终止会话。

获取会话 ID,然后运行以下语句:

CALL BQ.ABORT_SESSION(SESSION_ID);

SESSION_ID 替换为要终止的会话的 ID。

获取活跃会话的 ID

在某些情况下,您需要引用会话才能继续在该会话中操作。例如,如果您使用的是 Cloud Shell,则每次为该会话运行命令时,都必须包含会话 ID。

控制台

您无需提供会话 ID 即可在 Trusted Cloud 控制台中的会话内运行新查询。您可以继续在包含该会话的编辑器标签页中执行操作。但是,如果要通过 Cloud Shell 或 API 调用引用会话,则需要知道您在控制台中创建的会话的 ID。

在完成以下步骤之前,请确保已在活跃会话中运行至少一个查询。

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 点击包含该会话的编辑器标签页。

  3. 查询结果中,点击作业信息

  4. 作业信息列表中,搜索会话 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,请按以下步骤操作:

控制台

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 选择作业历史记录的类型:

    • 如需显示近期作业的信息,请点击个人历史记录
    • 如需显示项目中近期作业的信息,请点击项目历史记录
  3. 会话 ID 列中,您可以查看作业的会话 ID。

    作业历史记录中的会话 ID

SQL

如需获取最近三个会话(包括活跃会话和已终止会话)的列表,请在编辑器标签页中运行以下查询:

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    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;

    替换以下内容:

    • VIEWINFORMATION_SCHEMA 视图:

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

结果类似于以下内容:

+-------------------------------------------------------------------------+
| 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 查询。

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 展开作业历史记录部分。

  3. 选择要查看的作业历史记录类型:

    • 如需显示您的近期作业的信息,请点击个人记录
    • 如需显示项目中近期作业的信息,请点击项目历史记录
  4. 点击 过滤条件,然后选择会话 ID

  5. 会话 ID 字段中,搜索会话 ID:

    Session ID: CgwKCmZhbGl1LXRlc3QQARokMDAzYjI0OWQtZ
    

SQL

如需查看特定会话的历史数据,请先获取会话 ID,然后执行以下步骤:

  1. 在 Trusted Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    SELECT
      *
    FROM
      region-us.INFORMATION_SCHEMA.VIEW
    WHERE
      session_info.session_id = 'SESSION_ID';

    替换以下内容:

    • VIEW:要使用的 INFORMATION_SCHEMA 视图

      选择以下视图之一:

    • SESSION_ID:要检索其历史数据的会话的 ID

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

示例

以下命令返回会话 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;  |
+---------------------+------------------------------------------------------------------------------------------+

后续步骤