管理聚簇表

本文档介绍了如何获取有关 BigQuery 中聚簇表的信息以及如何控制对聚簇表的访问权限。

详情请参阅以下内容:

准备工作

如需获取有关表的信息,您必须具有 bigquery.tables.get 权限。以下预定义的 IAM 角色包含 bigquery.tables.get 权限:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

此外,如果用户具有 bigquery.datasets.create 权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner 访问权限。借助 bigquery.dataOwner 访问权限,用户可以获取数据集内表的信息。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

控制对聚簇表的访问权限

如需配置对表和视图的访问权限,您可以在以下级层为实体授予 IAM 角色,这些级层按照允许的资源范围从大到小依次排列:

您还可以使用以下方法限制表中的数据访问权限:

对受 IAM 保护的任何资源的访问权限具有附加性。例如,如果某个实体没有项目等较高级层的访问权限,您可以在数据集级层向该实体授予访问权限,然后该实体便将有权访问该数据集中的表和视图。同样,如果实体没有较高级层或数据集级层的访问权限,您可以在表或视图级层向该实体授予访问权限。

Google Cloud资源层次结构中授予更高级层(例如项目、文件夹或组织级层)的 IAM 角色,使实体可访问一组广泛的资源。例如,在项目级为实体授予角色会为该实体提供整个项目中所有数据集的访问权限。

在数据集级层授予角色可指定允许实体对该特定数据集中的表和视图执行的操作,即使实体没有更高级层的访问权限也可执行这些操作。如需详细了解如何配置数据集级层的访问权限控制,请参阅控制对数据集的访问权限

在表或视图级层授予角色可指定允许实体对特定表和视图执行的操作,即使实体没有更高级层的访问权限也可执行这些操作。如需了解如何配置表级层的访问权限控制,请参阅控制对表和视图的访问权限

您还可以创建 IAM 自定义角色。如果创建自定义角色,则您授予的权限取决于您希望实体能够执行的具体操作。

您无法对受 IAM 保护的任何资源设置“拒绝”权限。

如需详细了解角色和权限,请参阅 IAM 文档中的了解角色以及 BigQuery IAM 角色和权限

获取有关聚簇表的信息

从下列选项中选择一项:

控制台

  1. 在 Google Cloud 控制台中,前往资源窗格。

  2. 点击数据集名称将其展开,然后点击要查看的表的名称。

  3. 点击详细信息

    系统会显示该表的详细信息,包括聚簇列。

    表详细信息。

SQL

对于聚簇表,您可以查询 INFORMATION_SCHEMA.COLUMNS 视图中的 CLUSTERING_ORDINAL_POSITION 列,查找表聚簇列中列的偏移量,索引编号从 1 开始:

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

    转到 BigQuery

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

    CREATE TABLE mydataset.data (column1 INT64, column2 INT64)
    CLUSTER BY column1, column2;
    SELECT
      column_name, clustering_ordinal_position
    FROM
      mydataset.INFORMATION_SCHEMA.COLUMNS;

  3. 点击 运行

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

column1 的聚簇序数位置为 1,column2 的聚簇序数位置为 2。通过 INFORMATION_SCHEMA 中的 TABLESTABLE_OPTIONSCOLUMNSCOLUMN_FIELD_PATH 视图,可查看更多表元数据。

bq

发出 bq show 命令可显示所有表信息。使用 --schema 标志可仅显示表的架构信息。--format 标志可用于控制输出。

如果您要获取非默认项目中的表信息,请按以下格式将相应项目 ID 添加到数据集:project_id:dataset

bq show \
    --schema \
    --format=prettyjson \
    PROJECT_ID:DATASET.TABLE

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • DATASET:数据集的名称
  • TABLE:表格的名称

示例:

输入以下命令可显示 mydataset 中有关 myclusteredtable 的所有信息。mydataset 属于默认项目。

bq show --format=prettyjson mydataset.myclusteredtable

输出应如下所示:

{
  "clustering": {
    "fields": [
      "customer_id"
    ]
  },
...
}

API

调用 bigquery.tables.get 方法并提供所有相关参数。

列出数据集中的聚簇表

列出聚簇表所需的权限以及步骤与列出标准表相同。如需了解详情,请参阅列出数据集中的表

修改聚簇规范

您可以更改或移除表的聚簇规范,或更改聚簇表中的聚簇列集。这种聚簇列集更新方法对于使用连续流式插入的表非常有用,因为使用其他方法无法轻松交换这些表。

请按照以下步骤将新的聚类规范应用于未分区表或分区表。

  1. 在 bq 工具中,更新表的聚簇规范以匹配新聚簇:

     bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE 

    请替换以下内容:

    • CLUSTER_COLUMN:要对其进行聚簇的列,例如 mycolumn
    • DATASET:包含表的数据集的名称,例如 mydataset
    • ORIGINAL_TABLE:原始表的名称,例如 mytable

    您还可以调用 tables.updatetables.patch API 方法来修改聚类规范

  2. 如需根据新的聚类规范对所有行进行聚类,请运行以下 UPDATE 语句:

    UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true

后续步骤