创建表

创建 Apache Iceberg 表会在 Lakehouse 运行时目录的命名空间内初始化新的表元数据和存储空间。

如果您想在目录中提供现有的 Apache Iceberg 表,请参阅注册表

如果您在创建表期间未在命名空间或表级指定明确的存储位置,系统会自动在目录的默认位置(从目录的基本 Cloud Storage 存储桶派生)下构建表的元数据和数据目录,方法是附加命名空间和表标识符。

准备工作

  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 存储桶

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

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

表格功能和支持

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

支持的 Iceberg 表

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

使用表格选项(预览版)

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

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

创建表

创建 Iceberg 表。

控制台

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

    前往 Lakehouse

  2. 选择现有目录,或者创建目录(如果您还没有目录)。

  3. 在菜单栏中,点击 + 创建表格

  4. 表格式部分,选择 Iceberg

  5. 表名称部分,输入具有唯一性的表名称。

  6. 可选:在属性部分中,配置表格属性。 系统会列出预定义的属性,例如 gcp.biglake.bigquery-dml.enabledgcp.biglake.table-management.enabled

    例如,您可以将这些值更改为 true,以启用 BigQuery DML 或自动表管理。如需了解详情,请参阅配置表格选项

  7. 点击创建

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

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

如需使用 gcloud 创建表,请运行 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:目录命名空间的名称。

后续步骤