Connessioni BigQuery - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessioni BigQuery

È possibile utilizzare AWS Glue per Spark per leggere e scrivere su tabelle in Google BigQuery in AWS Glue 4.0 e versioni successive. È possibile leggere da BigQuery con una query SQL di Google. Ci si connette a BigQuery utilizzando le credenziali archiviate in AWS Secrets Manager tramite una connessione AWS Glue.

Per ulteriori informazioni su Google BigQuery, consulta il sito Web di Google Cloud BigQuery.

Configurazione delle connessioni BigQuery

Per connetterti a Google BigQuery da AWS Glue, dovrai creare e archiviare le tue credenziali di Google Cloud Platform in un segreto AWS Secrets Manager, quindi associare tale segreto a una connessione AWS Glue con Google BigQuery.

Per configurare una connessione a BigQuery:
  1. In Google Cloud Platform, crea e identifica le risorse pertinenti:

  2. In Google Cloud Platform, crea ed esporta le credenziali dell'account del servizio:

    Puoi utilizzare la procedura guidata per le credenziali di BigQuery per accelerare questo passaggio: Crea credenziali.

    Per creare un account di servizio in GCP, segui il tutorial disponibile in Creazione di account di servizio.

    • Quando selezioni il progetto, seleziona il progetto contenente la tua tabella BigQuery.

    • Quando selezioni i ruoli IAM di GCP per il tuo account di servizio, aggiungi o crea un ruolo che conceda le autorizzazioni appropriate per eseguire processi BigQuery per leggere, scrivere o creare tabelle BigQuery.

    Per creare le credenziali per il tuo account di servizio, segui il tutorial disponibile in Creazione della chiave di un account di servizio.

    • Quando selezioni il tipo di chiave, seleziona JSON.

    Ora dovresti avere scaricato un file JSON con le credenziali per il tuo account di servizio. La schermata visualizzata dovrebbe risultare simile a quella nell'immagine seguente:

    { "type": "service_account", "project_id": "*****", "private_key_id": "*****", "private_key": "*****", "client_email": "*****", "client_id": "*****", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "*****", "universe_domain": "googleapis.com" }
  3. base64 codifica il tuo file di credenziali scaricato. In una sessione AWS CloudShell o simile, puoi farlo dalla riga di comando eseguendo cat credentialsFile.json | base64 -w 0. Conserva l'output di questo comando, credentialString.

  4. In AWS Secrets Manager, crea un segreto utilizzando le tue credenziali di Google Cloud Platform. Per creare un segreto in Secrets Manager, segui il tutorial disponibile in Create an AWS Secrets Manager secret nella documentazione di AWS Secrets Manager. Dopo aver creato il segreto, prendi nota del nome, secretName, per il passaggio successivo.

    • Quando selezioni le coppie chiave/valore, crea una coppia per la chiave credentials con il valore credentialString.

  5. In Catalogo dati AWS Glue, crea una connessione seguendo i passaggi riportati in Aggiungere una AWS Glue connessione. Dopo aver creato la connessione, prendi nota del nome, connectionName, per il passaggio successivo.

    • Quando selezioni un tipo di connessione, seleziona Google BigQuery.

    • Quando selezioni il Segreto AWS, fornisci secretName.

  6. Concedi al ruolo IAM associato al tuo processo AWS Glue il permesso di leggere secretName.

  7. Nella configurazione del processo AWS Glue, fornisci connectionName come Connessione di rete aggiuntiva.

Lettura da tabelle BigQuery

Prerequisiti:

  • Una tabella BigQuery da cui si desidera leggere. Avrai bisogno della tabella di BigQuery e dei nomi dei set di dati, nel modulo [dataset].[table]. Lo chiameremo tableName.

  • Il progetto di fatturazione per la tabella BigQuery. Avrai bisogno del nome del progetto, parentProject. Se non esiste un progetto padre di fatturazione, utilizza il progetto contenente la tabella.

  • Informazioni di autenticazione di BigQuery. Completa i passaggi descritti in Gestione delle credenziali di connessione con AWS Glue per configurare le informazioni di autenticazione. Sarà necessario il nome della connessione AWS Glue, connectionName.

Ad esempio:

bigquery_read = glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "sourceType": "table", "table": "tableName", }

È possibile anche fornire una query per filtrare i risultati restituiti al DynamicFrame. Sarà necessario configurare query, sourceType, viewsEnabled e materializationDataset.

Ad esempio:

Prerequisiti aggiuntivi:

Sarà necessario creare o identificare un set di dati BigQuery, materializationDataset, in cui BigQuery può scrivere viste materializzate per le tue query.

Sarà necessario concedere le autorizzazioni GCP IAM appropriate all'account di servizio per creare tabelle in materializationDataset.

glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "materializationDataset": materializationDataset, "parentProject": "parentProject", "viewsEnabled": "true", "sourceType": "query", "query": "select * from bqtest.test" } )

Scrittura su tabelle BigQuery

Questo esempio scrive direttamente nel servizio BigQuery. BigQuery supporta anche il metodo di scrittura "indiretto". Per ulteriori informazioni sulla configurazione di scritture indirette, consulta la pagina Utilizzo della scrittura indiretta con Google BigQuery.

Prerequisiti:

  • Una tabella BigQuery in cui si desidera scrivere. Avrai bisogno della tabella di BigQuery e dei nomi dei set di dati, nel modulo [dataset].[table]. È possibile anche fornire un nuovo nome di tabella che verrà creato automaticamente. Lo chiameremo tableName.

  • Il progetto di fatturazione per la tabella BigQuery. Avrai bisogno del nome del progetto, parentProject. Se non esiste un progetto padre di fatturazione, utilizza il progetto contenente la tabella.

  • Informazioni di autenticazione di BigQuery. Completa i passaggi descritti in Gestione delle credenziali di connessione con AWS Glue per configurare le informazioni di autenticazione. Sarà necessario il nome della connessione AWS Glue, connectionName.

Ad esempio:

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "writeMethod": "direct", "table": "tableName", } )

Indicazioni di riferimento alle opzioni di connessione a BigQuery

  • project: Predefinita: impostazione predefinita dell'account del servizio Google Cloud. Utilizzato per la lettura/scrittura. Il nome di un progetto Google Cloud associato alla tua tabella.

  • table: (obbligatorio) utilizzato per la lettura/scrittura. Il nome della tabella BigQuery nel formato [[project:]dataset.].

  • dataset: obbligatorio quando non è definito tramite l'opzione table. Utilizzato per la lettura/scrittura. Il nome del set di dati che contiene la tabella BigQuery.

  • parentProject: Predefinita: impostazione predefinita dell'account del servizio Google Cloud. Utilizzato per la lettura/scrittura. Il nome di un progetto Google Cloud associato al project utilizzato per la fatturazione.

  • sourceType: utilizzato per la lettura. Richiesto durante la lettura. Valori validi: table, query indica ad AWS Glue se la lettura avverrà per tabella o per query.

  • materializationDataset: utilizzato per la lettura. Valori validi: stringhe. Il nome di un set di dati BigQuery utilizzato per archiviare le materializzazioni per le viste.

  • viewsEnabled: utilizzato per la lettura. Valore predefinito: false. Valori validi: vero, falso. Configura se BigQuery utilizzerà le viste.

  • query: utilizzato per la lettura. Usato quando viewsEnabled è vero. Una query DQL di GoogleSQL.

  • temporaryGcsBucket: utilizzato per la scrittura. Obbligatorio quando writeMethod è impostato sull'impostazione predefinita (indirect). Nome di un bucket di Google Cloud Storage utilizzato per archiviare una forma intermedia dei dati durante la scrittura su BigQuery.

  • writeMethod: valore predefinito: indirect. Valori validi: direct, indirect. Utilizzato per la scrittura. Specifica il metodo utilizzato per scrivere i dati.

    • Se impostato su direct, il connettore scriverà utilizzando l'API BigQuery Storage Write.

    • Se impostato su indirect, il connettore scriverà su Google Cloud Storage, quindi effettuerà il trasferimento su BigQuery utilizzando un'operazione di caricamento. L'account del servizio Google Cloud avrà bisogno delle autorizzazioni GCS appropriate.

Utilizzo della scrittura indiretta con Google BigQuery

Questo esempio utilizza la scrittura indiretta, che scrive i dati su Google Cloud Storage e li copia su Google BigQuery.

Prerequisiti:

Sarà necessario un bucket temporaneo di Google Cloud Storage, temporaryBucket.

Il ruolo IAM GCP per l'account di servizio GCP di AWS Glue richiederà le autorizzazioni GCS appropriate per accedere a temporaryBucket.

Configurazione aggiuntiva:

Per configurare la scrittura indiretta con BigQuery:
  1. Valuta Configurazione delle connessioni BigQuery e individua o scarica nuovamente il file JSON delle credenziali GCP. Identifica secretName, il segreto AWS Secrets Manager per la connessione AWS Glue con Google BigQuery utilizzata nel tuo processo.

  2. Carica il file JSON delle credenziali in una posizione Amazon S3 adeguatamente sicura. Mantieni il percorso del file, s3secretpath, per i passaggi futuri.

  3. Modifica secretName, aggiungendo la chiave spark.hadoop.google.cloud.auth.service.account.json.keyfile. Imposta il valore su s3secretpath.

  4. Concedi al tuo processo AWS Glue le autorizzazioni IAM Amazon S3 per accedere a s3secretpath.

Ora puoi fornire la posizione temporanea del bucket GCS al tuo metodo di scrittura. Non è necessario fornire il writeMethod, poiché indirect in passato è stata l'impostazione predefinita.

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "temporaryGcsBucket": "temporaryBucket", "table": "tableName", } )