Neste documento, mostramos como executar cargas de trabalho em lote do Dataproc Serverless para Spark SQL e PySpark para criar uma tabela do Apache Iceberg com metadados armazenados no BigQuery Metastore. Para informações sobre outras maneiras de executar o código do Spark, consulte Executar código do PySpark em um notebook do BigQuery e Executar uma carga de trabalho do Apache Spark.
Antes de começar
Se ainda não tiver feito isso, crie um projeto do Google Cloud e um bucket do Cloud Storage.
Configurar o projeto
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
Crie um bucket do Cloud Storage no seu projeto.
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a name that meets the bucket naming requirements.
-
For Choose where to store your data, do the following:
- Select a Location type option.
- Select a Location option.
- For Choose a default storage class for your data, select a storage class.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
Conceda o papel de Editor de dados do BigQuery (
roles/bigquery.dataEditor
) à conta de serviço padrão do Compute Engine,PROJECT_NUMBER-compute@developer.gserviceaccount.com
. Para mais instruções, consulte Conceder um único papel.Exemplo da Google Cloud CLI:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/bigquery.dataEditor
Observações:
- PROJECT_ID e PROJECT_NUMBER estão listados na seção Informações do projeto no Painel do console do Google Cloud.
Verifique se a sub-rede VPC regional em que você vai executar a carga de trabalho em lote do Dataproc Serverless tem o Acesso particular do Google ativado. Para mais informações, consulte Criar uma tabela Iceberg.
Mapeamento de recursos do OSS para recursos do BigQuery
Confira o seguinte mapeamento entre os termos de recurso de código aberto e do BigQuery:
Recurso OSS | Recurso do BigQuery |
---|---|
Namespace, Database | Conjunto de dados |
Tabela particionada ou não particionada | Tabela |
Ver | Ver |
Criar uma tabela Iceberg
Esta seção mostra como criar uma tabela Iceberg com metadados no metastore do BigQuery usando cargas de trabalho em lote do Dataproc Serverless Spark SQL e do PySpark.
Spark SQL
Executar uma carga de trabalho do Spark SQL para criar uma tabela Iceberg
As etapas a seguir mostram como executar uma carga de trabalho em lote do Dataproc Serverless Spark SQL para criar uma tabela Iceberg com metadados armazenados no metastore do BigQuery.
Copie os comandos do Spark SQL a seguir localmente ou no Cloud Shell em um arquivo
iceberg-table.sql
.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
Substitua:
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e WAREHOUSE_FOLDER: bucket e pasta do Cloud Storage usados como diretório do repositório do Iceberg.
Execute o comando a seguir localmente ou no Cloud Shell no diretório que contém
iceberg-table.sql
para enviar a carga de trabalho do Spark SQL.gcloud dataproc batches submit spark-sql iceberg-table.sql \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
Observações:
- PROJECT_ID: o ID do projeto do Google Cloud . Os IDs dos projetos estão listados na seção Informações do projeto no Painel do console do Google Cloud.
- REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
- BUCKET_NAME: o nome do bucket do Cloud Storage. O Spark faz upload das dependências de carga de trabalho para uma pasta
/dependencies
neste bucket antes de executar a carga de trabalho em lote. O WAREHOUSE_FOLDER está localizado neste bucket. - SUBNET_NAME: o nome de uma sub-rede da VPC no
REGION
que tem o Acesso privado do Google ativado e atende a outros requisitos de sub-rede de sessão. - LOCATION: um local do BigQuery compatível. O local padrão é "EUA".
--version
:ambiente de execução do Dataproc sem servidor versão 2.2 ou mais recente.--properties
Propriedades do catálogo.
Conferir metadados de tabela no BigQuery
No Console do Google Cloud, acesse a página BigQuery.
Acessar metadados da tabela Iceberg.
PySpark
As etapas a seguir mostram como executar uma carga de trabalho de lote do PySpark sem servidor do Dataproc para criar uma tabela Iceberg com metadados armazenados no Metastore do BigQuery.
- Copie o seguinte código PySpark localmente ou no
Cloud Shell
para um arquivo
iceberg-table.py
.catalog = "CATALOG_NAME" namespace = "NAMESPACE" spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;") # Create table and display schema spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;") # Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');") # Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);") spark.sql("DESCRIBE example_iceberg_table;")
Substitua:
- CATALOG_NAME e NAMESPACE: o nome do catálogo e o namespace do Iceberg se combinam para identificar a tabela Iceberg (
catalog.namespace.table_name
).
- CATALOG_NAME e NAMESPACE: o nome do catálogo e o namespace do Iceberg se combinam para identificar a tabela Iceberg (
-
Execute o comando a seguir localmente ou no
Cloud Shell
no diretório que contém
iceberg-table.py
para enviar a carga de trabalho do PySpark.gcloud dataproc batches submit pyspark iceberg-table.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
Observações:
- PROJECT_ID: o ID do projeto do Google Cloud . Os IDs dos projetos estão listados na seção Informações do projeto no Painel do console do Google Cloud.
- REGION: uma região do Compute Engine disponível para executar a carga de trabalho.
- BUCKET_NAME: o nome do bucket do Cloud Storage. O Spark faz upload das dependências de carga de trabalho para uma pasta
/dependencies
neste bucket antes de executar a carga de trabalho em lote. - SUBNET_NAME: o nome de uma sub-rede da VPC no
REGION
que tem o Acesso privado do Google ativado e atende a outros requisitos de sub-rede de sessão. --version
:ambiente de execução do Dataproc sem servidor versão 2.2 ou mais recente.- LOCATION: um local do BigQuery com suporte. O local padrão é "EUA".
- BUCKET e WAREHOUSE_FOLDER: bucket e pasta do Cloud Storage usados como o diretório do repositório do Iceberg.
--properties
: Propriedades do catálogo.
- Confira o esquema da tabela no BigQuery.
- No Console do Google Cloud, acesse a página BigQuery. Acessar o BigQuery Studio
- Acessar metadados da tabela Iceberg.