更改表

更改表可让您演变架构(例如添加列)并更新表元数据属性。

修改由 Lakehouse 运行时目录管理,并通过开源 Iceberg REST 目录 API 规范(POST /v1/{prefix}/namespaces/{namespace}/tables/{table},适用于 CommitTable/UpdateIcebergTable)提交。

支持的表格式

仅支持 Apache Iceberg V2 表;不支持 Iceberg V1 表。如果您有现有的 Iceberg V1 表,则必须先将其升级到 V2(例如,运行 ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); 或使用类似的引擎操作),然后才能使用 Lakehouse 运行时目录 更改或管理它们。

准备工作

请参阅表概览,了解 不同类型的表以及使用这些表的影响。

  1. 验证是否已为您的 Google Cloud 项目启用结算功能。

  2. 启用 BigLake API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    启用 API

所需的角色

如需获取更改表所需的权限,请让管理员在您的项目和存储桶中向您授予以下 IAM 角色:

  • 凭证分发模式 下更改表:项目的 BigLake Editor (roles/biglake.editor) 角色
  • 在非凭证分发模式下更改表:
    • 项目的 BigLake Editor (roles/biglake.editor) 角色
    • Cloud Storage 存储桶的 Storage Object User (roles/storage.objectUser) 角色

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。

更改表

向表中添加列:

控制台

  1. 在 Google Cloud 控制台中,前往 Lakehouse

    前往 Lakehouse

  2. 选择现有目录,或者在没有目录的情况下创建一个目录。

  3. 命名空间详细信息 表中,选择一个表并展开菜单选项。

  4. 点击修改

  5. 在对话框中更新表值。

  6. 点击保存

Spark

spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Trino

ALTER TABLE TABLE_NAME ADD COLUMN desc varchar;
DESCRIBE SCHEMA_NAME.TABLE_NAME;

REST

如需使用 REST API 将更改提交到 Iceberg 表,请向 UpdateIcebergTable (CommitTable) 端点发出 POST 请求 :

POST /iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME

请求正文必须包含有效的 Iceberg CommitTableRequest JSON 载荷,用于定义基本要求和要应用的一系列元数据更新。

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • CATALOG_ID:Lakehouse 运行时目录的 ID。
  • NAMESPACE_NAME:目录命名空间的名称。
  • TABLE_NAME:Iceberg 表的名称。

后续步骤