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
- 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.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. 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.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.
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.
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 catalogobigquerycome 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:
PROJECT_ID: ID progetto. Gli ID progetto sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud .REGION: la regione in cui verrà eseguito il batchRUNTIME_VERSION: (Facoltativo) Versione del runtime di Managed Service for Apache Spark. Se non specificata, viene selezionata la versione runtime predefinita corrente.CONNECTOR_VERSION: versione del connettore Spark BigQuery. Per trovare una versione del connettore compatibile conRUNTIME_VERSION, consulta Versioni del runtime di Managed Service for Apache Spark. Se il connettore non è preinstallato, puoi trovare le versioni disponibili nella pagina delle release di GitHub.SUBNET: (Facoltativo) La subnet da utilizzare per il carico di lavoro batch. Se non specificata, viene utilizzata la subnetdefault.SERVICE_ACCOUNT: (Facoltativo) Service account con cui verrà eseguito il job batch. Se non viene specificato, viene utilizzato l'account di servizio predefinito di Compute Engine.BUCKET: il bucket Cloud Storage contenente il file SQL.
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.
- Imposta
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
- Scopri di più sul connettore Spark BigQuery.
- Esamina le quote di Managed Service for Apache Spark.