Este documento mostra como executar cargas de trabalho em lote do SQL e do PySpark do Serviço Gerenciado para Apache Spark para criar uma tabela do Apache Iceberg com metadados armazenados no catálogo do ambiente de execução do Lakehouse. Para informações sobre outras maneiras de executar código Spark, consulte Executar código 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 Google Cloud projeto e um bucket do Cloud Storage.
Criar seu projeto
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
Enable the Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
Enable the Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Crie um bucket do Cloud Storage no seu projeto.
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
- Clique em Criar.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
-
Na seção Começar, faça o seguinte:
- Insira um nome globalmente exclusivo que atenda aos requisitos de nomeação de bucket.
- Para adicionar um
rótulo de bucket,
abra a seção Rótulos (),
clique em add_box
Adicionar rótulo e especifique um
keye umvaluepara o rótulo.
-
Na seção Escolha onde armazenar seus dados, faça o seguinte:
- Selecione um tipo de local.
- Escolha um local onde os dados do bucket serão armazenados permanentemente no menu suspenso Tipo de local.
- Se você selecionar o tipo de local birregional, também poderá ativar a replicação turbo usando a caixa de seleção relevante.
- Para configurar a replicação entre buckets, selecione
Adicionar replicação entre buckets usando o Serviço de transferência do Cloud Storage e
siga estas etapas:
Configurar a replicação entre buckets
- No menu Bucket, selecione um bucket.
Na seção Configurações de replicação, clique em Configurar para definir as configurações do job de replicação.
O painel Configurar a replicação entre buckets aparece.
- Para filtrar objetos a serem replicados por prefixo de nome de objeto, insira um prefixo com que você quer incluir ou excluir objetos e clique em Adicionar um prefixo.
- Para definir uma classe de armazenamento para os objetos replicados, selecione uma classe de armazenamento no menu Classe de armazenamento. Se você pular esta etapa, os objetos replicados vão usar a classe de armazenamento do bucket de destino por padrão.
- Clique em Concluído.
-
Na seção Escolha como armazenar seus dados, faça o seguinte:
- Selecione uma classe de armazenamento padrão para o bucket ou Classe automática para gerenciamento automático da classe de armazenamento dos dados do bucket.
- Para ativar o namespace hierárquico, na seção Otimizar o armazenamento para cargas de trabalho com uso intensivo de dados, selecione Ativar namespace hierárquico neste bucket.
- Na seção Escolha como controlar o acesso a objetos, selecione se o bucket aplica ou não a prevenção de acesso público e selecione um método de controle de acesso para os objetos do bucket.
-
Na seção Escolha como proteger os dados do objeto, faça o
seguinte:
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
- Para ativar a exclusão reversível, clique na caixa de seleção Política de exclusão reversível (para recuperação de dados) e especifique o número de dias que você quer reter os objetos após a exclusão.
- Para definir o controle de versões de objetos, clique na caixa de seleção Controle de versões de objetos (para controle de versões) e especifique o número máximo de versões por objeto e o número de dias após os quais as versões não atuais expiram.
- Para ativar a política de retenção em objetos e buckets, clique na caixa de seleção Retenção (para compliance) e faça o seguinte:
- Para ativar o bloqueio de retenção de objetos, clique na caixa de seleção Ativar retenção de objetos.
- Para ativar o Bloqueio de bucket, clique na caixa de seleção Definir política de retenção de bucket e escolha uma unidade e um período de armazenamento para a retenção.
- Para escolher como os dados do objeto serão criptografados, expanda a seção Criptografia de dados () e selecione um método de Criptografia de dados.
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
-
Na seção Começar, faça o seguinte:
- Clique em Criar.
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 Google Cloud .
Mapeamento de recursos do OSS para recursos do BigQuery
Observe o seguinte mapeamento entre termos de recursos de código aberto e do BigQuery:
| Recurso do OSS | Recurso do BigQuery |
|---|---|
| Namespace, banco de dados | Conjunto de dados |
| Tabela particionada ou não particionada | Tabela |
| Ver | Ver |
Criar uma tabela do Iceberg
Nesta seção, mostramos como criar uma tabela do Iceberg com metadados no catálogo de tempo de execução do Lakehouse usando o Serviço Gerenciado para Apache Spark, o Spark SQL e as cargas de trabalho em lote 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 SQL do Serviço Gerenciado para Apache Spark para criar uma tabela do Iceberg com metadados armazenados no catálogo de tempo de execução do Lakehouse.
Copie os seguintes comandos do Spark SQL localmente ou no Cloud Shell em um arquivo
iceberg-table.sql.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; USE 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 do Cloud Storage e pasta usados como diretório do data warehouse do Iceberg.
Execute o comando a seguir localmente ou no Cloud Shell no diretório que contém
iceberg-table.sqlpara 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=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 do projeto estão listados na seção Informações do projeto no painel do console 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 da carga de trabalho para uma pasta
/dependenciesnesse bucket antes de executar a carga de trabalho em lote. O WAREHOUSE_FOLDER está localizado neste bucket. --version:versão 2.2 ou mais recente do ambiente de execução do Serviço Gerenciado para Apache Spark.- SUBNET_NAME: o nome de uma sub-rede VPC no
REGION. Se você omitir essa flag, o Serviço Gerenciado para Apache Spark vai selecionar a sub-rededefaultna região da sessão. O Serviço Gerenciado para Apache Spark ativa o Acesso privado do Google (PGA) na sub-rede. Para requisitos de conectividade de rede, consulte Configuração de rede do Serviço Gerenciado para Apache Spark. - LOCATION: um local do BigQuery compatível. O local padrão é "US".
--propertiesPropriedades do catálogo.
Ver metadados da tabela no BigQuery
No console do Google Cloud , acesse a página BigQuery.
Ver metadados da tabela Iceberg.
PySpark
As etapas a seguir mostram como executar uma carga de trabalho em lote do PySpark do Serviço Gerenciado para Apache Spark para criar uma tabela do Iceberg com metadados armazenados no catálogo do ambiente de execução do Lakehouse.
- Copie o seguinte código PySpark localmente ou no Cloud Shell em um arquivo
iceberg-table.py.from pyspark.sql import SparkSession spark = SparkSession.builder.appName("iceberg-table-example").getOrCreate() 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 do 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 do Iceberg (
-
Execute o comando a seguir localmente ou no
Cloud Shell
no diretório que contém
iceberg-table.pypara 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=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 do projeto 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 da carga de trabalho para uma pasta
/dependenciesnesse bucket antes de executar a carga de trabalho em lote. --version:versão 2.2 ou mais recente do ambiente de execução do Serviço Gerenciado para Apache Spark.- SUBNET_NAME: o nome de uma sub-rede VPC em
REGION. Se você omitir essa flag, o Serviço Gerenciado para Apache Spark vai selecionar a sub-rededefaultna região da sessão. O Serviço Gerenciado para Apache Spark ativa o Acesso privado do Google (PGA) na sub-rede. Para requisitos de conectividade de rede, consulte Configuração de rede do Serviço Gerenciado para Apache Spark. - LOCATION: um local compatível do BigQuery. O local padrão é "US".
- BUCKET e WAREHOUSE_FOLDER: bucket do Cloud Storage e pasta usados como diretório do data warehouse do Iceberg.
--properties: propriedades do catálogo.
- Visualizar o esquema da tabela no BigQuery.
- No console do Google Cloud , acesse a página BigQuery. Acessar o BigQuery Studio
- Ver metadados da tabela Iceberg.