Apache Iceberg-Tabelle mit Metadaten im BigQuery Metastore erstellen

In diesem Dokument wird beschrieben, wie Sie Dataproc Serverless für Spark SQL- und PySpark-Batch-Arbeitslasten ausführen, um eine Apache Iceberg-Tabelle mit Metadaten zu erstellen, die im BigQuery Metastore gespeichert sind. Informationen zu anderen Möglichkeiten zum Ausführen von Spark-Code finden Sie unter PySpark-Code in einem BigQuery-Notebook ausführen und Apache Spark-Arbeitslast ausführen.

Hinweise

Erstellen Sie ein Google Cloud -Projekt und einen Cloud Storage-Bucket, falls noch nicht geschehen.

  1. Projekt einrichten

    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. Erstellen Sie einen Cloud Storage-Bucket in Ihrem Projekt.

    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. Gewähren Sie der Compute Engine-Standarddienstkonto-ID PROJECT_NUMBER-compute@developer.gserviceaccount.com die Rolle BigQuery-Datenbearbeiter (roles/bigquery.dataEditor). Eine Anleitung finden Sie unter Einzelne Rolle zuweisen.

    Beispiel für die Google Cloud CLI:

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

    Hinweise:

    • PROJECT_ID und PROJECT_NUMBER sind im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
  4. Achten Sie darauf, dass für das regionale VPC-Subnetz, in dem Sie Ihre Dataproc Serverless-Batcharbeitslast ausführen, der private Google-Zugriff aktiviert ist. Weitere Informationen finden Sie unter Iceberg-Tabelle erstellen.

Zuordnung von Open-Source-Ressourcen zu BigQuery-Ressourcen

Beachten Sie die folgende Zuordnung zwischen Open-Source-Ressourcen und BigQuery-Ressourcen:

OSS-Ressource BigQuery-Ressource
Namespace, Datenbank Dataset
Partitionierte oder nicht partitionierte Tabelle Tabelle
Ansehen Ansehen

Iceberg-Tabelle erstellen

In diesem Abschnitt erfahren Sie, wie Sie mit Dataproc Serverless Spark SQL- und PySpark-Batch-Arbeitslasten eine Iceberg-Tabelle mit Metadaten im BigQuery Metastore erstellen.

Spark SQL

Spark SQL-Arbeitslast ausführen, um eine Iceberg-Tabelle zu erstellen

In den folgenden Schritten wird gezeigt, wie Sie eine Dataproc Serverless Spark SQL-Batcharbeitslast ausführen, um eine Iceberg-Tabelle mit Tabellenmetadaten zu erstellen, die im BigQuery Metastore gespeichert sind.

  1. Kopieren Sie die folgenden Spark SQL-Befehle lokal oder in Cloud Shell in eine iceberg-table.sql-Datei.

    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;
    

    Ersetzen Sie Folgendes:

    • CATALOG_NAME: Name des Iceberg-Katalogs.
    • BUCKET und WAREHOUSE_FOLDER: Cloud Storage-Bucket und -Ordner, die als Iceberg-Lagerverzeichnis verwendet werden.
  2. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus dem Verzeichnis mit iceberg-table.sql aus, um die Spark SQL-Arbeitslast einzureichen.

    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"
      

    Hinweise:

    • PROJECT_ID: Die Projekt-ID Ihres Google Cloud -Abos. Projekt-IDs werden im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
    • REGION: Eine verfügbare Compute Engine-Region zum Ausführen der Arbeitslast.
    • BUCKET_NAME: Der Name Ihres Cloud Storage-Buckets Spark lädt Arbeitslastabhängigkeiten in einen /dependencies-Ordner in diesem Bucket hoch, bevor die Batcharbeitslast ausgeführt wird. Die WAREHOUSE_FOLDER befindet sich in diesem Bucket.
    • SUBNET_NAME: Der Name eines VPC-Subnetzes in der REGION, für das der private Google-Zugriff aktiviert ist und das die anderen Anforderungen an ein Sitzungssubnetz erfüllt.
    • LOCATION: Ein unterstützter BigQuery-Speicherort. Der Standardstandort ist „USA“.
    • --version:Dataproc Serverless-Laufzeitversion 2.2 oder höher.
    • --properties Katalogeigenschaften.
  3. Tabellenmetadaten in BigQuery ansehen

    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

      Zu BigQuery Studio

    2. Metadaten von Iceberg-Tabellen ansehen

PySpark

In den folgenden Schritten wird gezeigt, wie Sie eine serverlose Dataproc-PySpark-Batcharbeitslast ausführen, um eine Iceberg-Tabelle mit Tabellenmetadaten zu erstellen, die im BigQuery Metastore gespeichert sind.

  1. Kopieren Sie den folgenden PySpark-Code lokal oder in Cloud Shell in eine iceberg-table.py-Datei.
    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;")

    Ersetzen Sie Folgendes:

    • CATALOG_NAME und NAMESPACE: Der Name und der Namespace des Iceberg-Katalogs werden kombiniert, um die Iceberg-Tabelle (catalog.namespace.table_name) zu identifizieren.
  2. Führen Sie den folgenden Befehl lokal oder in Cloud Shell aus dem Verzeichnis mit iceberg-table.py aus, um die PySpark-Arbeitslast einzureichen.
    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"
        

    Hinweise:

    • PROJECT_ID: Die Projekt-ID Ihres Google Cloud -Abos. Projekt-IDs werden im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
    • REGION: Eine verfügbare Compute Engine-Region zum Ausführen der Arbeitslast.
    • BUCKET_NAME: Der Name Ihres Cloud Storage-Buckets Spark lädt Arbeitslastabhängigkeiten in einen /dependencies-Ordner in diesem Bucket hoch, bevor die Batcharbeitslast ausgeführt wird.
    • SUBNET_NAME: Der Name eines VPC-Subnetzes in REGION, für das der private Google-Zugriff aktiviert ist und das die anderen Anforderungen an ein Sitzungssubnetz erfüllt.
    • --version:Dataproc Serverless-Laufzeitversion 2.2 oder höher.
    • LOCATION: Ein unterstützter BigQuery-Standort. Der Standardstandort ist „USA“.
    • BUCKET und WAREHOUSE_FOLDER: Cloud Storage-Bucket und Ordner, die als Iceberg-Lagerverzeichnis verwendet werden.
    • --properties: Katalogeigenschaften
  3. Rufen Sie das Tabellenschema in BigQuery auf.
    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery. Zu BigQuery Studio
    2. Metadaten von Iceberg-Tabellen ansehen