Crea tabelle esterne BigLake per Delta Lake
BigLake ti consente di accedere alle tabelle Delta Lake con controllo dell'accessoo più granulare. Delta Lake è un formato di archiviazione di dati tabulari open source sviluppato da Databricks che supporta tabelle di dati su scala di petabyte.
BigQuery supporta le seguenti funzionalità con le tabelle Delta Lake:
- Delega dell'accesso: esegui query sui dati strutturati in archivi di dati esterni con delega dell'accesso. La delega dell'accesso disaccoppia l'accesso alla tabella Delta Lake dall'accesso all'archivio dati 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 Delta Lake vengono rilevate automaticamente. Le modifiche allo schema vengono riportate nella tabella BigQuery.
Le tabelle Delta Lake supportano anche tutte le funzionalità BigLake quando le configuri come tabelle BigLake.
Prima di iniziare
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
-
In the Trusted Cloud console, activate Cloud Shell.
Assicurati di avere un set di dati BigQuery.
Assicurati che la versione di Google Cloud SDK sia 366.0.0 o successive:
gcloud version
Se necessario, aggiorna Google Cloud SDK.
Crea una connessione a una risorsa Cloud in base all'origine dati esterna e concedi a questa 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 condividerla con te.
bigquery.tables.create
bigquery.connections.delegate
- Ruolo Visualizzatore BigQuery (
roles/bigquery.viewer
) - Ruolo Utente connessione BigQuery (
roles/bigquery.connectionUser
) - Accesso al bucket Cloud Storage che contiene i dati
- PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
- DATASET: il set di dati BigQuery che deve contenere la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome della 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 visualizzi i dettagli della connessione nella console Trusted Cloud , l'ID connessione è il valore dell'ultima sezione dell'ID connessione completo visualizzato in ID connessione, ad esempio
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH: il prefisso della tabella Delta Lake
- DEFINITION_FILE: il percorso di un file di definizione della tabella
- PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
- DATASET: il set di dati BigQuery che deve contenere la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome 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 visualizzi i dettagli della connessione nella console Trusted Cloud , l'ID connessione è il valore dell'ultima sezione dell'ID connessione completo visualizzato 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 tabella Delta Lake
DATASET: il set di dati BigQuery che deve contenere la tabella Delta Lake
- Gli utenti potrebbero riscontrare errori
ACCESS_DENIED
quando tentano di accedere ai file su Cloud Storage. - Funzionalità come controllo dell'accesso granulare sono disponibili solo nelle tabelle BigLake Delta Lake.
- PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
- DATASET: il set di dati BigQuery che deve contenere la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome della tabella Delta Lake
- 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 visualizzi i dettagli della connessione nella console Trusted Cloud , l'ID connessione è il valore dell'ultima sezione dell'ID connessione completo visualizzato in ID connessione, ad esempio
projects/myproject/locations/connection_location/connections/myconnection
.DELTALAKE_TABLE_NAME: il nome della tabella Delta Lake
DATASET: il set di dati BigQuery che deve contenere la tabella Delta Lake
- Supporta la versione 3 del lettore Delta Lake con vettori di eliminazione del percorso relativo e mappatura delle colonne.
- Non supporta i checkpoint Delta Lake V2.
- Devi elencare la versione del lettore nell'ultimo file di 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 utilizzando BigQuery non è supportata.
- I nomi delle colonne della tabella devono rispettare le limitazioni dei nomi delle colonne di BigQuery.
- Le viste materializzate non sono supportate.
- L'API Read non è supportata per Delta Lake.
Assicurati di utilizzare tabelle BigLake Delta Lake (con una connessione).
Gli utenti dispongono dell'autorizzazione richiesta.
Utilizza le utilità Delta Lake per compattare i file di dati sottostanti e rimuovere i file ridondanti, come dati e metadati.
Assicurati che
delta.checkpoint.writeStatsAsStruct
sia impostato sutrue
.Assicurati che le variabili utilizzate di frequente nelle clausole del predicato si trovino nelle colonne di partizione.
Ruoli obbligatori
Per creare una tabella Delta Lake sono necessarie le seguenti autorizzazioni:
Il ruolo Identity and Access Management predefinito Amministratore BigQuery (roles/bigquery.admin
) 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 per te.
Inoltre, per consentire agli utenti BigQuery di eseguire query sulla tabella, il account di serviziot associato alla connessione deve disporre dei seguenti permessi e accesso:
Per ulteriori informazioni su ruoli e autorizzazioni di Identity and Access Management in BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Crea tabelle con Delta Lake
Per creare tabelle Delta Lake:
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:
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:
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:
Quando crei tabelle Delta Lake, il prefisso Delta Lake viene
utilizzato come URI per la tabella. Ad esempio, per una tabella che contiene 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 con il prefisso per identificare la versione corrente della tabella, quindi calcola i metadati e i file per la tabella.
Sebbene sia possibile creare tabelle esterne Delta Lake senza una connessione, questa operazione non è consigliata per i seguenti motivi:
Aggiorna le tabelle Delta Lake
Per aggiornare (aggiornare) lo schema delle tabelle Delta Lake, segui questi passaggi.
bq
In un ambiente a riga di comando, utilizza il comando
bq update
per aggiornare (aggiornare) lo schema della tabella Delta Lake:
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Sostituisci i seguenti valori:
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
}
}'
echo $REQUEST |curl -X PATCH -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/DELTALAKE_TABLE_NAME?autodetect_schema=true
Sostituisci i seguenti valori:
Eseguire query sulle tabelle Delta Lake
Dopo aver creato una tabella BigLake Delta Lake, puoi eseguire query utilizzando la sintassi GoogleSQL, proprio 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.
Per connettersi al datastore viene utilizzata una connessione esterna associata a un account di servizio. Poiché l'account di servizio recupera i dati dal datastore, gli utenti devono accedere solo alla tabella Delta Lake.
Mappatura dei dati
BigQuery converte i tipi di dati Delta Lake in tipi di dati BigQuery come mostrato nella tabella seguente:
Tipo di Delta Lake | 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 presentano le limitazioni delle tabelle BigLake e anche le seguenti limitazioni:
Risoluzione dei problemi
Questa sezione fornisce assistenza per le tabelle BigLake Delta Lake. Per un aiuto più generale per la risoluzione dei problemi relativi alle query BigQuery, consulta Risolvere i problemi relativi alle query.
Timeout della query ed errori delle risorse
Controlla la directory dei log (gs://bucket/warehouse/basictable/_delta_log
) della
tabella Delta Lake e cerca i file JSON con un numero di versione superiore al precedente checkpoint. Puoi ottenere il numero di versione
elencando la directory o esaminando il
file _delta_log/_last_checkpoint.
I file JSON di dimensioni superiori a 10 MiB possono rallentare l'espansione della tabella, il che può causare
problemi di timeout e risorse. Per risolvere il problema, utilizza il comando seguente
per creare un nuovo checkpoint in modo che le query non leggano i file JSON:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");
Gli utenti possono quindi utilizzare lo stesso comando per reimpostare l'intervallo di checkpoint su il valore predefinito di 10 o su un valore che eviti di avere più di 50 MB di file JSON tra i checkpoint.
Nome colonna non valido
Assicurati che il mapping delle colonne sia attivato per la tabella Delta Lake. Il mapping delle colonne è supportato con Reader versione 2 o successive. Per Reader versione 1, imposta "delta.columnMapping.mode" su "name" utilizzando il seguente comando:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");
Se il nome della colonna non valido rispetta le limitazioni dei nomi delle colonne flessibili, contatta l'assistenza clienti Google Cloud o biglake-help@google.com.
Errori di accesso negato
Per diagnosticare i problemi relativi alle tabelle BigLake Delta Lake, controlla quanto segue:
Prestazioni
Per migliorare le prestazioni delle query, prova a svolgere i seguenti passaggi:
I set di dati di grandi dimensioni (superiori a 100 TB) potrebbero trarre vantaggio da configurazioni e funzionalità aggiuntive. Se i passaggi precedenti non risolvono i problemi, valuta la possibilità di contattare l'Assistenza clienti o biglake-help@google.com, soprattutto per i set di dati di dimensioni superiori a 100 TB.