Airflow gerenciado (Geração 3) | Airflow gerenciado (Geração 2) | Airflow gerenciado (Geração 1 legada)
Esta página explica como criar e modificar tabelas do BigLake Iceberg no BigQuery usando operadores do Airflow no ambiente do Airflow gerenciado.
Sobre as tabelas do BigLake Iceberg no BigQuery
As tabelas do BigLake Iceberg no BigQuery fornecem a base para a criação de lakehouses de formato aberto Google Cloud. As tabelas do BigLake Iceberg no BigQuery oferecem a mesma experiência totalmente gerenciada que as tabelas padrão do BigQuery, mas armazenam dados em buckets de armazenamento de propriedade do cliente. As tabelas do BigLake Iceberg no BigQuery oferecem suporte ao formato de tabela aberta do Iceberg para melhor interoperabilidade com mecanismos de computação de código aberto e de terceiros em uma única cópia de dados.
Antes de começar
Confira as limitações das tabelas do BigLake Iceberg no BigQuery. As mesmas limitações se aplicam ao trabalhar com tabelas do BigLake Iceberg usando operadores do Airflow.
Crie uma conexão a recursos do Cloud para o bucket do Cloud Storage em que a tabela do BigLake Iceberg será localizada.
Confira se as permissões do IAM estão atribuídas da seguinte maneira:
A conta de serviço do seu ambiente precisa ter papéis do IAM para trabalhar com tabelas do BigLake Iceberg no BigQuery. Siga as instruções descritas em Tabelas do BigLake para Apache Iceberg no BigQuery.
A conta de serviço associada à conexão a recursos do Cloud precisa ter papéis do IAM para ler e gravar dados no Cloud Storage. Siga as instruções descritas em Tabelas do BigLake para Apache Iceberg no BigQuery.
Criar uma tabela do BigLake Iceberg no BigQuery
Para criar uma tabela do BigLake Iceberg no BigQuery, use BigQueryCreateTableOperator da mesma forma que para outras tabelas do BigQuery. No campo biglakeConfiguration, forneça a configuração da tabela.
import datetime
from airflow.models.dag import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryCreateTableOperator
with DAG(
"bq_iceberg_dag",
start_date=datetime.datetime(2025, 1, 1),
schedule=None,
) as dag:
create_iceberg_table = BigQueryCreateTableOperator(
task_id="create_iceberg_table",
project_id="PROJECT_ID",
dataset_id="DATASET_ID",
table_id="TABLE_NAME",
table_resource={
"schema": {
"fields": [
{"name": "order_id", "type": "INTEGER", "mode": "REQUIRED"},
{"name": "customer_id", "type": "INTEGER", "mode": "REQUIRED"},
{"name": "amount", "type": "INTEGER", "mode": "REQUIRED"},
{"name": "created_at", "type": "TIMESTAMP", "mode": "REQUIRED"},
]
},
"biglakeConfiguration": {
"connectionId": "CONNECTION_NAME",
"storageUri": "STORAGE_URI",
"fileFormat": "PARQUET",
"tableFormat": "ICEBERG",
}
}
)
Substitua:
PROJECT_ID: o ID do projeto.DATASET_ID: um conjunto de dados existente.TABLE_NAME: o nome da tabela que você está criando;CONNECTION_NAME: o nome da conexão a recursos do Cloud no formatoprojects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID.STORAGE_URI: um URI totalmente qualificado do Cloud Storage para a tabela. Por exemplo,gs://example-bucket/iceberg-table.
Consultar uma tabela do BigLake Iceberg no BigQuery
Depois de criar uma tabela do BigLake Iceberg, você pode consultá-la com BigQueryInsertJobOperator como de costume. O operador não precisa de configuração adicional especificamente para tabelas do BigLake Iceberg.
import datetime
from airflow.models.dag import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryInsertJobOperator
with DAG(
"bq_iceberg_dag_query",
start_date=datetime.datetime(2025, 1, 1),
schedule=None,
) as dag:
insert_values = BigQueryInsertJobOperator(
task_id="iceberg_insert_values",
configuration={
"query": {
"query": f"""
INSERT INTO `TABLE_ID` (order_id, customer_id, amount, created_at)
VALUES
(101, 19, 1, TIMESTAMP '2025-09-15 10:15:00+00'),
(102, 35, 2, TIMESTAMP '2025-09-14 10:15:00+00'),
(103, 36, 3, TIMESTAMP '2025-09-12 10:15:00+00'),
(104, 37, 4, TIMESTAMP '2025-09-11 10:15:00+00')
""",
"useLegacySql": False,
}
}
)
Substitua:
TABLE_IDpelo ID da tabela, no formatoPROJECT_ID.DATASET_ID.TABLE_NAME.