Esegui query sulle tabelle BigQuery

Questo documento spiega come utilizzare Spark SQL e l'API Spark DataFrame nei carichi di lavoro Managed Service for Apache Spark per eseguire query sulle tabelle BigQuery.

Prima di iniziare

Abilita le API e, se necessario, concedi i ruoli Identity and Access Management.

Abilita API

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Concedere ruoli Identity and Access Management

Per eseguire gli esempi in questa pagina, sono necessarie le concessioni dei ruoli Managed Service for Apache Spark e BigQuery. A seconda delle norme dell'organizzazione, questi ruoli potrebbero essere già stati concessi. Per verificare le concessioni dei ruoli, vedi Devi concedere i ruoli?.

Ruoli di Managed Service for Apache Spark

Per impostazione predefinita, i batch e le sessioni vengono eseguiti come service account Compute Engine predefinito, a meno che non venga specificato uaccount di serviziont personalizzato per il workload o la sessione.

Ruolo Service Account User

Per ottenere le autorizzazioni necessarie per inviare un carico di lavoro batch, chiedi all'amministratore di concederti il ruolo IAM Service Account User (roles/iam.serviceAccountUser) sull'account di servizio predefinito di Compute Engine. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Ruolo Worker Dataproc

Per assicurarti che il account di servizio predefinito di Compute Engine disponga delle autorizzazioni necessarie per inviare un batch di lavoro, chiedi all'amministratore di concedere il ruolo IAM Dataproc Worker (roles/dataproc.worker) al account di servizio predefinito di Compute Engine sul progetto.

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

L'amministratore potrebbe anche essere in grado di concedere al account di servizio predefinito di Compute Engine le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.

Ruoli BigQuery

Al account di servizio utilizzato per eseguire un batch workload o una sessione interattiva di Managed Service for Apache Spark devono essere concessi i seguenti ruoli IAM sulle seguenti risorse:

  • Visualizzatore dati BigQuery (roles/bigquery.dataViewer) per leggere i dati dalle tabelle, come segue:

    • Lettura da bigquery.DATASET_ID.SOURCE_TABLE negli esempi di Spark SQL SELECT e INSERT INTO.
    • Lettura da INFORMATION_SCHEMA nell'esempio dell'API DataFrame.
  • BigQuery User (roles/bigquery.user) per consentire a Spark di eseguire job che interagiscono con BigQuery.

  • BigQuery Data Editor (roles/bigquery.dataEditor) per scrivere dati o metadati, come segue:

    • Per l'esempio di Spark SQL INSERT INTO, per scrivere in bigquery.DATASET_ID.DESTINATION_TABLE.
    • Per l'esempio di API DataFrame che esegue query su INFORMATION_SCHEMA, questo ruolo è necessario per DATASET_ID fornito in .option('materializationDataset', ...) per consentire al connettore di creare tabelle temporanee per i risultati.

Invia un carico di lavoro batch Spark

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Managed Service for Apache Spark per inviare un workload batch Managed Service for Apache Spark.

Utilizzare Spark SQL

Puoi utilizzare il catalogo Spark BigQuery per eseguire query sulle tabelle BigQuery standard direttamente dai carichi di lavoro batch o dalle sessioni interattive. Questo metodo consente di utilizzare la sintassi GoogleSQL standard per interagire con i dati BigQuery all'interno dei job spark-sql senza scrivere codice PySpark o creare viste temporanee utilizzando l'API DataFrame.

Configura il catalogo BigQuery

Per abilitare il catalogo BigQuery, fornisci le seguenti proprietà Spark al tuo carico di lavoro batch Spark SQL o alla sessione interattiva:

  • dataproc.sparkBqConnector.version=CONNECTOR_VERSION: Specifica la versione del connettore Spark BigQuery.
  • spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog: (Facoltativo) Registra il catalogo bigquery come catalogo Spark SQL.

Esempio di Google Cloud CLI:

gcloud dataproc batches submit spark-sql \
    --project=PROJECT_ID \
    --region=REGION \
    --version=RUNTIME_VERSION \
    --subnet=SUBNET \
    --service-account=SERVICE_ACCOUNT \
    --properties="dataproc.sparkBqConnector.version=CONNECTOR_VERSION,spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog" \
    gs://BUCKET/my_query.sql

Sostituisci quanto segue:

Esegui query sulle tabelle BigQuery

Dopo aver configurato il catalogo, puoi fare riferimento alle tabelle BigQuery in uno script SQL utilizzando il seguente formato: bigquery.DATASET_ID.TABLE_ID.

Query SQL di esempio:

-- Query data from a BigQuery table.
SELECT
  column_a,
  SUM(column_b)
FROM
  bigquery.DATASET_ID.SOURCE_TABLE
WHERE
  partition_date = CURRENT_DATE()
GROUP BY column_a;

-- Insert results into another BigQuery table.
INSERT INTO bigquery.DATASET_ID.DESTINATION_TABLE
SELECT column_a, column_b
FROM bigquery.DATASET_ID.SOURCE_TABLE
WHERE column_c = 'some_value';

Sostituisci quanto segue:

  • DATASET_ID: ID set di dati BigQuery.
  • SOURCE_TABLE: l'ID della tabella da interrogare.
  • DESTINATION_TABLE: l'ID della tabella in cui inserire i dati.

Utilizzare l'API DataFrame

L'API DataFrame è necessaria per accedere alle visualizzazioni INFORMATION_SCHEMA.

  • Per eseguire una query su INFORMATION_SCHEMA:

    • Imposta spark.conf.set('viewsEnabled', 'true').
    • Fornisci .option('materializationDataset', 'DATASET_ID') per consentire al connettore di scrivere i risultati temporanei.

Query PySpark di esempio:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('BigQuery Info Schema Test').getOrCreate()

# Required for INFORMATION_SCHEMA.
spark.conf.set('viewsEnabled', 'true')

# Query INFORMATION_SCHEMA.TABLES.
info_schema_df = spark.read.format('bigquery') \
  .option('project', 'PROJECT_ID') \
  .option('materializationDataset', 'DATASET_ID') \
  .load(f'SELECT table_name, creation_time FROM `PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES`')
info_schema_df.show(5, truncate=False)

Sostituisci quanto segue:

  • PROJECT_ID: ID progetto. Gli ID progetto sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud .
  • DATASET_ID: ID set di dati BigQuery in cui il connettore SparkvBigQuery può scrivere dati temporanei.

Consulta Inviare un carico di lavoro batch di conteggio parole PySpark per un esempio PySpark che legge i dati da una tabella BigQuery standard e poi scrive i risultati in una tabella di output.

Passaggi successivi