通过更改表,您可以调整架构(例如添加列)并更新表元数据属性。
修改由 Lakehouse 运行时目录管理。
准备工作
-
启用 BigLake API。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。 - 使用 Apache Iceberg REST 目录端点设置 Lakehouse 运行时目录。
所需的角色
如需获得更改表所需的权限,请让管理员向您授予项目和存储桶的以下 IAM 角色:
-
在凭据自动售卖模式下更改表:BigLake Editor (
roles/biglake.editor) - 项目 -
在非凭证自动售卖模式下修改表:
- BigLake Editor (
roles/biglake.editor) - 项目 - Storage Object User (
roles/storage.objectUser) - Cloud Storage 存储桶
- BigLake Editor (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
表格功能和支持
在 Lakehouse 运行时目录中使用表时,了解不同的表类型及其选择启用功能会很有帮助。如需详细了解如何使用 Apache Iceberg 表,请参阅 Apache Iceberg 表概览。
支持的 Iceberg 表
仅支持 Apache Iceberg V2(正式版)和 V3(预览版)表。不支持 Iceberg V1 表。如需升级现有的 V1 表,请参阅将 Iceberg V1 表升级到 V2。
使用表格选项(预览版)
您可以通过配置特定的表属性,选择使用 BigQuery 托管功能,例如 BigQuery 数据操纵语言 (DML) 和自动表管理。这些功能的启用方式因表格的创建位置而异:
- 从 BigQuery 迁移:默认启用 BigQuery DML 和自动表管理。
- 从开源引擎:如需选择启用,您必须明确配置表属性。如需了解详情,请参阅配置表格选项。
如需了解详细说明,请参阅配置表格选项。
更改表
向表格添加列:
控制台
在 Google Cloud 控制台中,前往 Lakehouse。
选择现有目录,或者创建目录(如果您还没有目录)。
在命名空间详细信息表格中,选择一个表格,然后展开菜单选项。
点击修改。
更新对话框中的表格值。在属性部分,您可以添加或修改
gcp.biglake.bigquery-dml.enabled和gcp.biglake.table-management.enabled等属性,以启用或停用 BigQuery DML 或自动表管理。例如,您可以将这些值设置为
true,以启用这些功能。 如需了解详情,请参阅配置表格选项。点击保存。
Spark
spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
如需启用读/写互操作性和表管理,请使用 SET TBLPROPERTIES 子句设置属性:
SET TBLPROPERTIES (
'gcp.biglake.bigquery-dml.enabled' = true,
'gcp.biglake.table-management.enabled' = true
)
Trino
ALTER TABLE TABLE_NAME ADD COLUMN desc varchar;
DESCRIBE SCHEMA_NAME.TABLE_NAME;
如需启用读/写互操作性和表管理,您可以配置以下表属性:
'gcp.biglake.bigquery-dml.enabled' = true'gcp.biglake.table-management.enabled' = true
gcloud
如需使用 gcloud 更新表属性,请运行 gcloud biglake iceberg tables update 命令。
gcloud biglake iceberg tables update TABLE_NAME \ --project="PROJECT_ID" \ --catalog="CATALOG_ID" \ --namespace="NAMESPACE_NAME" \ --update-properties="KEY=VALUE,..."
替换以下内容:
TABLE_NAME:Iceberg 表的名称。PROJECT_ID:您的 Google Cloud 项目 ID。CATALOG_ID:目录的 ID。NAMESPACE_NAME:目录命名空间的名称。KEY=VALUE,...:要添加或更新的表属性。
BigQuery
如需从 BigQuery 更新 Lakehouse 运行时目录中 Apache Iceberg 表的表属性(例如启用 BigQuery DML 或自动表管理),请使用以下 GoogleSQL ALTER TABLE 语句:
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET OPTIONS (`properties.gcp.biglake.table-management` = "enabled");
如需在 Lakehouse 运行时目录中通过 BigQuery 更新 Apache Iceberg 表的架构并添加列,请使用以下 GoogleSQL ALTER TABLE 语句:
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
ADD COLUMN new_column STRING;
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。CATALOG_ID:您的 Lakehouse 运行时目录 ID。NAMESPACE:您的 Iceberg 命名空间名称。TABLE_NAME:Iceberg 表的名称。
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:目录的 ID。NAMESPACE_NAME:目录命名空间的名称。TABLE_NAME:Iceberg 表的名称。
后续步骤
- 了解如何删除表格。