Crea set di dati federati AWS Glue

Questo documento descrive come creare un set di dati federato in BigQuery collegato a un database esistente in AWS Glue.

Un set di dati federato è una connessione tra BigQuery e un'origine dati esterna a livello di set di dati. Le tabelle di un set di dati federato vengono compilate automaticamente dalle tabelle dell'origine dati esterna corrispondente. Puoi eseguire query su queste tabelle direttamente in BigQuery, ma non puoi apportare modifiche, aggiunte o eliminazioni. Tuttavia, tutti gli aggiornamenti apportati in quell'origine dati vengono applicati automaticamente in BigQuery.

Prima di iniziare

Assicurati di avere una connessione per accedere ai dati di AWS Glue.

  • Per creare o modificare una connessione, segui le istruzioni riportate in Connessione ad Amazon S3. Quando crei la connessione, includi la seguente istruzione del criterio per AWS Glue nel criterio AWS Identity and Access Management per BigQuery. Includi questa istruzione, oltre alle altre autorizzazioni sul bucket Amazon S3 in cui sono archiviati i dati nelle tabelle AWS Glue.

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }

    Sostituisci quanto segue:

    • REGION: la regione AWS, ad esempio us-east-1
    • ACCOUNT_ID:: l'ID account AWS di 12 cifre
    • DATABASE_NAME: il nome del database AWS Glue

Autorizzazioni obbligatorie

Per ottenere le autorizzazioni necessarie per creare un set di dati federato, chiedi all'amministratore di concederti il ruolo IAM Amministratore BigQuery (roles/bigquery.admin). Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare un set di dati federato. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per creare un set di dati federato sono necessarie le seguenti autorizzazioni:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

Creare un set di dati federato

Per creare un set di dati federato:

Console

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

  2. Nel riquadro Explorer, seleziona il progetto in cui vuoi creare il set di dati.

  3. Espandi l'opzione Azioni e fai clic su Crea set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci un nome univoco per il set di dati.
    • Per Tipo di località, scegli una località AWS per il set di dati, ad esempioaws-us-east-1. Una volta creato un set di dati, la posizione non può essere modificata.
    • Per Set di dati esterno:

      • Seleziona la casella accanto a Esegui il collegamento a un set di dati esterno.
      • Per Tipo di set di dati esterno, seleziona AWS Glue.
      • In Origine esterna, inserisci aws-glue:// seguito dall'Nome risorsa Amazon (ARN) del database AWS Glue, ad esempio aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
      • Per ID connessione, seleziona la connessione AWS.
    • Lascia invariate le altre impostazioni predefinite.

  5. Fai clic su Crea set di dati.

SQL

Utilizza l'CREATE EXTERNAL SCHEMAistruzione DDL (Data Definition Language).

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

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    Sostituisci quanto segue:

    • DATASET_NAME: il nome del nuovo set di dati in BigQuery.
    • PROJECT_ID: il tuo ID progetto.
    • CONNECTION_LOCATION: la posizione della connessione AWS, ad esempio aws-us-east-1.
    • CONNECTION_NAME: il nome della connessione AWS.
    • AWS_GLUE_SOURCE: il Amazon Resource Name (ARN) del database AWS Glue con un prefisso che identifica la sorgente, ad esempio aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
    • LOCATION: la posizione del nuovo set di dati in BigQuery, ad esempio aws-us-east-1. Una volta creato un set di dati, non puoi modificarne la posizione.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.

bq

In un ambiente a riga di comando, crea un set di dati utilizzando il comando bq mk:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

Sostituisci quanto segue:

  • LOCATION: la posizione del nuovo set di dati in BigQuery, ad esempio aws-us-east-1. Una volta creato un set di dati, non puoi modificarne la posizione. Puoi impostare un valore predefinito per la posizione utilizzando il file .bigqueryrc.
  • AWS_GLUE_SOURCE: il Amazon Resource Name (ARN) del database AWS Glue, ad esempio arn:aws:glue:us-east-1:123456789:database/test_database.
  • PROJECT_ID: il tuo ID progetto BigQuery.
  • CONNECTION_LOCATION: la posizione della connessione AWS, ad esempio aws-us-east-1.
  • CONNECTION_NAME: il nome della connessione AWS.
  • DATASET_NAME: il nome del nuovo set di dati in BigQuery. Per creare un set di dati in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: PROJECT_ID:DATASET_NAME.

Terraform

Utilizza la risorsa google_bigquery_dataset.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

L'esempio seguente crea un set di dati federato AWS Glue:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi farlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

API

Chiama il metodo datasets.insert con una risorsa set di dati e un campo externalDatasetReference per il database AWS Glue.

Elenca le tabelle in un set di dati federato

Per elencare le tabelle disponibili per le query nel set di dati federato, consulta Elenco dei set di dati.

Ottenere informazioni sulla tabella

Per informazioni sulle tabelle del tuo set di dati federato, ad esempio i dettagli dello schema, consulta Ottenere informazioni sulle tabelle.

Controllare l'accesso alle tabelle

Per gestire l'accesso alle tabelle del set di dati federato, consulta Controllare l'accesso alle risorse con IAM.

La sicurezza a livello di riga, la sicurezza a livello di colonna e il mascheramento dei dati sono supportati anche per le tabelle nei set di dati federati.

Le operazioni sugli schemi che potrebbero invalidare i criteri di sicurezza, ad esempio l'eliminazione di una colonna in AWS Glue, possono causare l'errore dei job fino a quando i criteri non vengono aggiornati. Inoltre, se elimini una tabella in AWS Glue e la ricrei, i tuoi criteri di sicurezza non vengono più applicati alla tabella ricreata.

Esegui query sui dati di AWS Glue

Eseguire query sulle tabelle nei set di dati federati è come eseguire query sulle tabelle in qualsiasi altro set di dati BigQuery.

Puoi eseguire query sulle tabelle AWS Glue nei seguenti formati:

  • CSV (compressi e non compressi)
  • JSON (compresso e non compresso)
  • Parquet
  • ORC
  • Avro
  • Iceberg

Dettagli della mappatura delle tabelle

Ogni tabella a cui concedi l'accesso nel database AWS Glue viene visualizzata come tabella equivalente nel set di dati BigQuery.

Formato

Il formato di ogni tabella BigQuery è determinato dai seguenti campi della rispettiva tabella AWS Glue:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

L'unica eccezione sono le tabelle Iceberg, che utilizzano il campo TableType (Table.Parameters["table_type"]).

Ad esempio, una tabella AWS Glue con i seguenti campi è mappata a una tabella ORC in BigQuery:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

Località

La posizione di ogni tabella BigQuery è determinata da quanto segue:

  • Tabelle Iceberg: il campo Table.Parameters["metadata_location"] nella tabella AWS Glue
  • Tabelle non partizionate non Iceberg: il campo Table.StorageDescriptor.Location nella tabella AWS Glue
  • Tabelle partizionate non Iceberg: l'API AWS Glue GetPartitions

Altre proprietà

Inoltre, alcune proprietà delle tabelle AWS Glue vengono mappate automaticamente alle opzioni specifiche del formato in BigQuery:

Formato SerializationLib Valore della tabella AWS Glue Opzione BigQuery
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON JsonSerDe di Hive Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

Creare una visualizzazione in un set di dati federato

Non puoi creare una visualizzazione in un set di dati federato. Tuttavia, puoi creare una vista in un set di dati standard basato su una tabella in un set di dati federato. Per ulteriori informazioni, consulta Creare visualizzazioni.

Eliminare un set di dati federato

L'eliminazione di un set di dati federato è la stessa di qualsiasi altro set di dati BigQuery. Per ulteriori informazioni, consulta la sezione Eliminare i set di dati.

Prezzi

Per informazioni sui prezzi, consulta la pagina relativa ai prezzi di BigQuery Omni.

Limitazioni

  • Si applicano tutte le limitazioni di BigQuery Omni.
  • Non puoi aggiungere, eliminare o aggiornare dati o metadati nelle tabelle di un set di dati federato AWS Glue.
  • Non puoi creare nuove tabelle, visualizzazioni o viste materializzate in un set di dati federato AWS Glue.
  • Le visualizzazioni INFORMATION_SCHEMA non sono supportate.
  • La memorizzazione nella cache dei metadati non è supportata.
  • Le impostazioni a livello di set di dati relative ai valori predefiniti per la creazione delle tabelle non influiscono sui set di dati federati perché non puoi creare tabelle manualmente.
  • Il tipo di dati UNION di Apache Hive non è supportato per le tabelle Avro.

Passaggi successivi