更改表可让您演变架构(例如添加列)并更新表元数据属性。
修改由 Lakehouse 运行时目录进行管理,并通过开源 Iceberg REST 目录 API 规范(CommitTable/UpdateIcebergTable 的 POST /v1/{prefix}/namespaces/{namespace}/tables/{table})提交。
准备工作
请参阅表概览,了解 不同类型的表以及使用这些表的影响。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
-
启用 BigLake API。
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。
所需的角色
如需获取更改表所需的权限,请让管理员在您的项目和存储桶中向您授予以下 IAM 角色:
-
在 凭证自动售卖模式 下更改表:项目的 BigLake Editor (
roles/biglake.editor) 角色 -
在非凭证自动售卖模式下更改表:
- 项目的 BigLake Editor (
roles/biglake.editor) 角色 - Cloud Storage 存储桶的 Storage Object User (
roles/storage.objectUser) 角色
- 项目的 BigLake Editor (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
更改表
向表中添加列:
控制台
在 Google Cloud 控制台中,前往 Lakehouse。
选择现有目录,或者在没有目录的情况下创建一个目录。
在命名空间详细信息 表中,选择一个表并展开菜单选项。
点击修改 。
在对话框中更新表值。
点击保存 。
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 表的名称。
后续步骤
- 了解如何删除表。