Creazione tabelle BigLake di Delta Lake

Per richiedere feedback o assistenza per questa funzionalità, invia un'email all'indirizzo biglake-help@google.com.

BigLake consente di accedere alle tabelle del Delta Lake con controllo dell'accesso più granulare. Delta Lake è un formato di archiviazione di dati tabulari open source sviluppato da Databricks che supporta tabelle di dati con scalabilità nell'ordine di petabyte.

BigQuery supporta le seguenti funzionalità con le tabelle Delta Lake:

  • Delega accesso: esegui query su dati strutturati in datastore esterni con la delega di accesso. La delega di accesso disaccoppia l'accesso alla tabella Delta Lake dall'accesso al datastore sottostante.
  • Controllo dell'accesso granulare: applica una sicurezza granulare a livello di tabella, inclusa la sicurezza a livello di riga e a livello di colonna. Per le tabelle Delta Lake basate su Cloud Storage, puoi anche utilizzare il mascheramento dinamico dei dati.
  • Evoluzione dello schema: le modifiche allo schema nelle tabelle del Delta Lake vengono rilevate automaticamente. Le modifiche allo schema vengono applicate nella tabella BigQuery.

Le tabelle Delta Lake supportano anche tutte le funzionalità BigLake quando le configuri come tabelle BigLake.

Prima di iniziare

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Abilita le API BigQuery Connection and BigQuery Reservation.

    Abilita le API

  4. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

  5. Assicurati di avere un set di dati BigQuery.

  6. Assicurati che la tua versione di Google Cloud SDK sia 366.0.0 o successiva:

    gcloud version
    

    Se necessario, aggiorna Google Cloud SDK.

  7. Crea una connessione a risorse cloud basata sull'origine dati esterna e concedi alla connessione l'accesso a Cloud Storage. Se non disponi delle autorizzazioni appropriate per creare una connessione, chiedi all'amministratore BigQuery di creare una connessione e di condividerla con te.

Ruoli obbligatori

Per creare una tabella del Delta Lake, sono necessarie le seguenti autorizzazioni:

  • bigquery.tables.create
  • bigquery.connections.delegate

Il ruolo predefinito Amministratore BigQuery (roles/bigquery.admin) di Identity and Access Management include queste autorizzazioni.

Se non sei un'entità in questo ruolo, chiedi all'amministratore di concederti queste autorizzazioni o di creare la tabella Delta Lake.

Inoltre, per consentire agli utenti BigQuery di eseguire query sulla tabella, l'account di servizio associato alla connessione deve disporre dell'autorizzazione e dell'accesso seguenti:

  • Ruolo Visualizzatore BigQuery (roles/bigquery.viewer)
  • Ruolo Utente connessione BigQuery (roles/bigquery.connectionUser)
  • Accesso al bucket Cloud Storage che contiene i dati

Per ulteriori informazioni sui ruoli e sulle autorizzazioni di Identity and Access Management in BigQuery, consulta Autorizzazioni e ruoli predefiniti.

Creazione di tabelle con Delta Lake

Per creare tabelle del Delta Lake, segui questi passaggi.

SQL

Utilizza l'istruzione CREATE EXTERNAL TABLE per creare la tabella Delta Lake:

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  format ="DELTA_LAKE",
  uris=['DELTA_TABLE_GCS_BASE_PATH']);

Sostituisci i seguenti valori:

  • PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
  • DATASET: il set di dati BigQuery per contenere la tabella Delta Lake
  • DELTALAKE_TABLE_NAME: il nome della tua tabella Delta Lake
  • REGION: la regione che contiene la connessione per creare la tabella Delta Lake, ad esempio us
  • CONNECTION_ID: l'ID connessione, ad esempio myconnection

    Quando visualizza i dettagli della connessione nella console Google Cloud, l'ID connessione è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempio projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: il prefisso della tabella Delta Lake

bq

In un ambiente a riga di comando, utilizza il comando bq mk per creare la tabella Delta Lake:

bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

Sostituisci i seguenti valori:

  • DEFINITION_FILE: il percorso di un file di definizione di tabella
  • PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
  • DATASET: il set di dati BigQuery per contenere la tabella Delta Lake
  • DELTALAKE_TABLE_NAME: il nome della tua tabella Delta Lake

REST

Utilizza l'API BigQuery per creare una tabella Delta Lake chiamando il metodo API tables.insert:

REQUEST='{
  "autodetect": true,
  "externalDataConfiguration": {
  "sourceFormat": "DELTA_LAKE",
  "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
  "sourceUris": [
    "DELTA_TABLE_GCS_BASE_PATH"
  ],
 },
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'

echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true

Sostituisci i seguenti valori:

  • PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
  • REGION: la regione che contiene la connessione per creare la tabella Delta Lake, ad esempio us
  • CONNECTION_ID: l'ID connessione, ad esempio myconnection

    Quando visualizza i dettagli della connessione nella console Google Cloud, l'ID connessione è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempio projects/myproject/locations/connection_location/connections/myconnection.

  • DELTA_TABLE_GCS_BASE_PATH: il prefisso della tabella Delta Lake

  • DELTALAKE_TABLE_NAME: il nome della tua tabella Delta Lake

  • DATASET: il set di dati BigQuery per contenere la tabella Delta Lake

Quando crei tabelle del Delta Lake, viene utilizzato il prefisso del Delta Lake come URI della tabella. Ad esempio, per una tabella con log nel bucket gs://bucket/warehouse/basictable/_delta_log, l'URI della tabella è gs://bucket/warehouse/basictable. Quando esegui query sulla tabella Delta Lake, BigQuery legge i dati sotto il prefisso per identificare la versione corrente della tabella, quindi calcola i metadati e i file per la tabella.

Aggiornamento tabelle Delta Lake

Per aggiornare lo schema delle tabelle del Delta Lake, segui questi passaggi.

bq

In un ambiente a riga di comando, utilizza il comando bq update per aggiornare lo schema della tabella Delta Lake:

bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME

Sostituisci i seguenti valori:

  • PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
  • DATASET: il set di dati BigQuery per contenere la tabella Delta Lake
  • DELTALAKE_TABLE_NAME: il nome della tua tabella Delta Lake

REST

Utilizza l'API BigQuery per aggiornare una tabella Delta Lake chiamando il metodo API tables.patch:

REQUEST='{
  "externalDataConfiguration": {
    "sourceFormat": "DELTA_LAKE",
    "sourceUris": [
      "DELTA_TABLE_GCS_BASE_PATH"
    ],
    "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
    "autodetect": true
  },
  "tableReference": {
    "tableId": "DELTALAKE_TABLE_NAME"
  }
}'
echo $REQUEST |curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables

Sostituisci i seguenti valori:

  • DELTA_TABLE_GCS_BASE_PATH: il prefisso della tabella Delta Lake
  • PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
  • REGION: la regione che contiene la connessione per creare la tabella Delta Lake, ad esempio us
  • CONNECTION_ID: l'ID connessione, ad esempio myconnection

    Quando visualizza i dettagli della connessione nella console Google Cloud, l'ID connessione è il valore nell'ultima sezione dell'ID connessione completo mostrato in ID connessione, ad esempio projects/myproject/locations/connection_location/connections/myconnection.

  • DELTALAKE_TABLE_NAME: il nome della tua tabella Delta Lake

  • DATASET: il set di dati BigQuery per contenere la tabella Delta Lake

Esegui query sulle tabelle Delta Lake

Dopo aver creato una tabella BigLake Delta Lake, puoi eseguire una query utilizzando la sintassi GoogleSQL, come faresti con una tabella BigQuery standard. Ad esempio:

SELECT field1, field2 FROM mydataset.my_cloud_storage_table;

Per maggiori informazioni, consulta Eseguire query sui dati di Cloud Storage nelle tabelle BigLake.

Una connessione esterna associata a un account di servizio viene utilizzata per connettersi al datastore. Poiché l'account di servizio recupera i dati dal datastore, gli utenti devono poter accedere solo alla tabella Delta Lake.

Mappatura dei dati

BigQuery converte i tipi di dati del Delta Lake in tipi di dati BigQuery, come mostrato nella seguente tabella:

Tipo di lago delta Tipo BigQuery
boolean BOOL
byte INT64
int INT64
long INT64
float FLOAT64
double FLOAT64
Decimal(P/S) NUMERIC o BIG_NUMERIC a seconda della precisione
date DATE
time TIME
timestamp (not partition column) TIMESTAMP
timestamp (partition column) DATETIME
string STRING
binary BYTES
array<Type> ARRAY<Type>
struct STRUCT
map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

Limitazioni

Le tabelle Delta Lake hanno limitazioni per le tabelle BigLake, oltre alle seguenti limitazioni:

  • Supporta la versione del lettore 3 di Delta Lake con vettori di eliminazione e mappatura delle colonne.
  • Devi elencare la versione del lettore nell'ultima voce di log. Ad esempio, le nuove tabelle devono includere 00000..0.json.
  • Le operazioni Change Data Capture (CDC) non sono supportate. Eventuali operazioni CDC esistenti vengono ignorate.
  • Lo schema viene rilevato automaticamente. La modifica dello schema tramite BigQuery non è supportata.
  • I nomi delle colonne delle tabelle devono rispettare le limitazioni relative ai nomi delle colonne di BigQuery.
  • Le viste materializzate non sono supportate.
  • L'API Read non è supportata per Delta Lake.