创建表

借助 Lakehouse 运行时目录,您可以在 Cloud Storage 中创建 Apache Iceberg 表,并可在 BigQuery、Apache Spark、Trino 和 Iceberg REST API 中查询和修改这些表。如果您在创建表时未指定明确的存储路径,Lakehouse 运行时目录会自动将元数据和数据目录放置在目录端点的默认 Cloud Storage 位置下,并附加命名空间和表标识符。

如需注册现有 Apache Iceberg 表而不创建新的存储目录,请参阅注册表。

准备工作

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

  2. 启用 BigLake API(如果尚未启用)。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。

    启用 API

  3. 使用 Apache Iceberg REST 目录端点设置 Lakehouse 运行时目录。如需启用自动表管理,请确保目录使用凭据分发模式。

所需的角色

如需获得创建表所需的权限,请让管理员向您授予项目和存储桶的以下 IAM 角色:

  • 创建表:
    • BigLake Admin (roles/biglake.admin) - 您的项目
    • Storage Admin (roles/storage.admin) - 目标 Cloud Storage 存储桶

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

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

如果您的目录端点使用凭证分发模式,并且其 Cloud Storage 存储桶受 VPC Service Controls 服务边界保护,则您还必须在创建表之前为目录端点的服务账号配置入站流量规则。如需了解详情,请参阅将 VPC Service Controls 与凭证发放搭配使用。

表格功能和支持

在 Lakehouse 运行时目录中使用表时,了解不同的表类型及其选择启用的功能会很有帮助。如需详细了解如何专门使用 Apache Iceberg 表,请参阅 Apache Iceberg 表概览。

支持的 Iceberg 表

仅支持 Apache Iceberg V2(正式版)和 V3(预览版)表。不支持 Iceberg V1 表。如需升级现有 V1 表,请参阅将 Iceberg V1 表升级到 V2。

使用表格选项(预览版)

您可以通过配置特定表属性,选择启用 BigQuery 托管功能,例如 BigQuery 数据操纵语言 (DML) 和自动表管理。这些功能的启用方式因表的创建位置而异:

  • 从 BigQuery:默认情况下,BigQuery DML 和自动表管理处于启用状态。
  • 从开源引擎:如需选择启用,您必须明确配置表属性。如需了解详情,请参阅配置表选项。

创建表

创建 Iceberg 表。如需启用自动表管理 (gcp.biglake.table-management.enabled),目录必须使用凭据分配模式。

控制台

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

    前往 Lakehouse

  2. 选择现有目录,如果没有,请创建一个。

  3. 选择现有命名空间,或创建一个命名空间(如果您还没有命名空间)。

  4. 在菜单栏中,点击 + 创建表。

  5. 在表格式部分,选择 Iceberg。

  6. 在表名称部分,输入唯一的表名称。

  7. 可选:在属性部分中,配置表属性。本部分列出了预定义的属性,例如 gcp.biglake.bigquery-dml.enabled 和 gcp.biglake.table-management.enabled。

    例如,您可以将这些值更改为 true,以启用 BigQuery DML 或表管理。表管理会执行后台任务,例如压缩和快照到期。如需了解详情,请参阅配置表选项。

  8. 点击创建。

您的表会显示在命名空间详情页面上。

Spark

spark.sql("CREATE TABLE NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG;")

替换以下值:

  • NAMESPACE_NAME:您的命名空间的名称。
  • TABLE_NAME:表的名称。

如需启用读写互操作性和表管理(预览版),请将这些属性添加到 TBLPROPERTIES 子句中:

TBLPROPERTIES (
  'gcp.biglake.bigquery-dml.enabled' = true,
  'gcp.biglake.table-management.enabled' = true
)

Trino

CREATE TABLE SCHEMA_NAME.TABLE_NAME (id int, data varchar);

替换以下值:

  • SCHEMA_NAME:架构的名称。
  • TABLE_NAME:表的名称。

如需启用读写互操作性和表管理(预览版),请将以下属性添加到 WITH 子句中:

WITH (
  "gcp.biglake.bigquery-dml.enabled" = 'true',
  "gcp.biglake.table-management.enabled" = 'true'
)

gcloud

如需使用 Google Cloud CLI 创建表,请运行 gcloud biglake iceberg tables create 命令:

gcloud biglake iceberg tables create \
    --project="PROJECT_ID" \
    --catalog="CATALOG_ID" \
    --namespace="NAMESPACE_NAME" \
    --create-from-file="TABLE_DEFINITION_FILE"

替换以下内容:

  • PROJECT_ID: Google Cloud项目 ID。
  • CATALOG_ID:您的目录的 ID。
  • NAMESPACE_NAME:目录命名空间的名称。
  • TABLE_DEFINITION_FILE:包含 Iceberg 表定义的 JSON 文件的路径。

BigQuery

如需在 Lakehouse 运行时目录中通过 BigQuery 创建 Apache Iceberg 表,请使用以下 GoogleSQL CREATE TABLE 语句。从 BigQuery 创建表时,默认情况下会启用 BigQuery DML 和表管理。如需使用自动表管理,目录必须使用凭据分发模式。

CREATE TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME` (id int, data string);

替换以下内容:

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

REST

如需使用 REST API 创建 Iceberg 表,请向 CreateIcebergTable 端点发出 POST 请求:

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

请求正文必须包含有效的 Iceberg CreateTableRequest JSON 载荷,用于定义表架构、分区规范和初始属性。

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • CATALOG_ID:您的目录的 ID。
  • NAMESPACE_NAME:目录命名空间的名称。

后续步骤