Altering a table lets you evolve the schema (such as adding columns) and update table metadata properties.
Modifications are managed by the Lakehouse runtime catalog.
Before you begin
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Set up the Lakehouse runtime catalog with the Apache Iceberg REST catalog endpoint.
Required roles
To get the permissions that you need to alter a table, ask your administrator to grant you the following IAM roles on your project and storage bucket:
-
Alter table in credential vending mode:
BigLake Editor (
roles/biglake.editor) - the project -
Alter table in non-credential vending mode:
- BigLake Editor (
roles/biglake.editor) - the project - Storage Object User (
roles/storage.objectUser) - the Cloud Storage bucket
- BigLake Editor (
For more information about granting roles, see Manage access to projects, folders, and organizations.
You might also be able to get the required permissions through custom roles or other predefined roles.
Table capabilities and support
When using tables in the Lakehouse runtime catalog, it's helpful to understand the different table types and their opt-in capabilities. To learn more about using Apache Iceberg tables specifically, see Overview of Apache Iceberg tables.
Supported Iceberg tables
Only Apache Iceberg V2 (GA) and V3 (Preview) tables are supported. Iceberg V1 tables aren't supported. To upgrade existing V1 tables, see Upgrade Iceberg V1 tables to V2.
Use table options (Preview)
You can opt in to use BigQuery managed capabilities, such as BigQuery Data Manipulation Language (DML) and automatic table management, by configuring specific table properties. These features are enabled in different ways depending on where the table is created:
- From BigQuery: BigQuery DML and automatic table management are enabled by default.
- From open source engines: To opt-in, you must explicitly configure table properties. See Configure table options for more information.
See Configure table options for detailed instructions.
Alter a table
Add a column to the table:
Console
In the Google Cloud console, go to Lakehouse.
Select an existing catalog or create one if you don't have one.
In the Namespace details table, select a table and expand the menu options.
Click Edit.
Update the table values in the dialog.
Click Save.
Spark
spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
To enable read/write interoperability and table management, set the properties using the SET TBLPROPERTIES clause:
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;
To enable read/write interoperability and table management, you can configure the following table properties:
'gcp.biglake.bigquery-dml.enabled' = true'gcp.biglake.table-management.enabled' = true
gcloud
To update table properties using gcloud, run the gcloud biglake iceberg tables update command.
gcloud biglake iceberg tables update TABLE_NAME \ --project="PROJECT_ID" \ --catalog="CATALOG_ID" \ --namespace="NAMESPACE_NAME" \ --update-properties="KEY=VALUE,..."
Replace the following:
TABLE_NAME: the name of your Iceberg table.PROJECT_ID: your Google Cloud project ID.CATALOG_ID: the ID of your catalog.NAMESPACE_NAME: the name of your catalog namespace.KEY=VALUE,...: table properties to add or update.
BigQuery
To update table properties for an Apache Iceberg table in the
Lakehouse runtime catalog from BigQuery (such
as enabling BigQuery DML or automatic table management),
use the following GoogleSQL ALTER TABLE
statement:
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET OPTIONS (`properties.gcp.biglake.table-management` = "enabled");
To update the schema and add a column in an Apache Iceberg table in the
Lakehouse runtime catalog from BigQuery,
use the following GoogleSQL ALTER TABLE statement:
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
ADD COLUMN new_column STRING;
Replace the following:
PROJECT_ID: your Google Cloud project ID.CATALOG_ID: your Lakehouse runtime catalog ID.NAMESPACE: your Iceberg namespace name.TABLE_NAME: the name of your Iceberg table.
REST
To commit changes to an Iceberg table using the REST API, make a POST
request to the UpdateIcebergTable (CommitTable) endpoint:
POST /iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME
The request body must contain a valid Iceberg CommitTableRequest JSON
payload defining the base requirement and the list of metadata updates to
apply.
Replace the following:
PROJECT_ID: your Google Cloud project ID.CATALOG_ID: the ID of your catalog.NAMESPACE_NAME: the name of your catalog namespace.TABLE_NAME: the name of your Iceberg table.
What's next
- Learn how to delete a table.