Creare una tabella Apache Iceberg con metadati in BigQuery Metastore

Questo documento illustra come eseguire i carichi di lavoro batch di Dataproc Serverless per Spark SQL e PySpark per creare una tabella Apache Iceberg con metadati archiviati nel metastore BigQuery. Per informazioni su altri modi per eseguire il codice Spark, consulta Eseguire il codice PySpark in un notebook BigQuery e Eseguire un carico di lavoro Apache Spark.

Prima di iniziare

Se non l'hai già fatto, crea un progetto Google Cloud e un bucket Cloud Storage.

  1. Configurare il progetto

    1. 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.
    2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    3. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

    4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    5. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

  2. Crea un bucket Cloud Storage nel tuo progetto.

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. 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.
    4. Click Create.

  3. Concedi il ruolo Editor dati BigQuery (roles/bigquery.dataEditor) all'account di servizio predefinito di Compute Engine, PROJECT_NUMBER-compute@developer.gserviceaccount.com. Per istruzioni, consulta Concedere un singolo ruolo.

    Esempio di Google Cloud CLI:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/bigquery.dataEditor
    

    Note:

    • PROJECT_ID e PROJECT_NUMBER sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud.
  4. Assicurati che nella subnet VPC regionale in cui eseguirai il tuo carico di lavoro batch Dataproc Serverless sia attivo l'accesso privato Google. Per ulteriori informazioni, consulta Creare una tabella iceberg.

Mappatura delle risorse OSS alle risorse BigQuery

Tieni presente la seguente mappatura tra i termini delle risorse open source e delle risorse BigQuery:

Risorsa OSS Risorsa BigQuery
Spazio dei nomi, Database Set di dati
Tabella partizionata o non partizionata Tabella
Visualizza Visualizza

Creare una tabella Iceberg

Questa sezione mostra come creare una tabella Iceberg con metadati in BigQuery Metastore utilizzando i carichi di lavoro batch Spark SQL e PySpark di Dataproc Serverless.

Spark SQL

Esegui un carico di lavoro Spark SQL per creare una tabella Iceberg

I passaggi riportati di seguito mostrano come eseguire un workload batch Spark SQL Dataproc Serverless per creare una tabella Iceberg con i metadati della tabella archiviati in BigQuery Metastore.

  1. Copia i seguenti comandi Spark SQL localmente o in Cloud Shell in un file 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;
    

    Sostituisci quanto segue:

    • CATALOG_NAME: nome del catalogo Iceberg.
    • BUCKET e WAREHOUSE_FOLDER: bucket e cartella Cloud Storage utilizzati come directory del magazzino Iceberg.
  2. Esegui il seguente comando localmente o in Cloud Shell dalla directory contenente iceberg-table.sql per inviare il carico di lavoro 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"
      

    Note:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della Dashboard della console Google Cloud.
    • REGION: una regione Compute Engine disponibile per eseguire il carico di lavoro.
    • BUCKET_NAME: il nome del bucket Cloud Storage. Spark carica le dipendenze del carico di lavoro in una cartella /dependencies in questo bucket prima di eseguire il carico di lavoro batch. WAREHOUSE_FOLDER si trova in questo bucket.
    • SUBNET_NAME: il nome di una subnet VPC in REGION in cui è attivo Accesso privato Google e che soddisfa altri requisiti per le subnet di sessione.
    • LOCATION: una posizione BigQuery supportata. La località predefinita è "US".
    • --version: versione del runtime Dataproc Serverless 2.2 o successiva.
    • --properties Proprietà del catalogo.
  3. Visualizzare i metadati della tabella in BigQuery

    1. Nella console Google Cloud, vai alla pagina BigQuery.

      Vai a BigQuery Studio

    2. Visualizza i metadati della tabella Iceberg.

PySpark

I passaggi riportati di seguito mostrano come eseguire un carico di lavoro batch PySpark Dataproc Serverless per creare una tabella Iceberg con i metadati della tabella archiviati in BigQuery Metastore.

  1. Copia il seguente codice PySpark localmente o in Cloud Shell in un file 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;")

    Sostituisci quanto segue:

    • CATALOG_NAME e NAMESPACE: il nome e lo spazio dei nomi del catalogo Iceberg si combinano per identificare la tabella Iceberg (catalog.namespace.table_name).
  2. Esegui il seguente comando localmente o in Cloud Shell dalla directory contenente iceberg-table.py per inviare il carico di lavoro 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"
        

    Note:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud.
    • REGION: una regione di Compute Engine disponibile per eseguire il carico di lavoro.
    • BUCKET_NAME: il nome del bucket Cloud Storage. Spark carica le dipendenze del carico di lavoro in una cartella /dependencies in questo bucket prima di eseguire il carico di lavoro batch.
    • SUBNET_NAME: il nome di una subnet VPC in REGION in cui è attivo Accesso privato Google e che soddisfa altri requisiti per le subnet di sessione.
    • --version: versione del runtime Dataproc Serverless 2.2 o successiva.
    • LOCATION: una posizione BigQuery supportata. La località predefinita è "US".
    • BUCKET e WAREHOUSE_FOLDER: bucket e cartella Cloud Storage utilizzati come directory del magazzino Iceberg.
    • --properties: Proprietà del catalogo.
  3. Visualizza lo schema della tabella in BigQuery.
    1. Nella console Google Cloud, vai alla pagina BigQuery. Vai a BigQuery Studio
    2. Visualizza i metadati della tabella Iceberg.