Creare tabelle esterne BigLake per Delta Lake
BigLake ti consente di accedere alle tabelle Delta Lake con un controllo dell'accesso più granulare. Delta Lake è un formato di archiviazione dati tabulare open source sviluppato da Databricks che supporta e tabelle di dati su scala petabyte.
BigQuery supporta le seguenti funzionalità con le tabelle Delta Lake:
- Delegazione dell'accesso: esegui query sui dati strutturati in data store esterni con la delega dell'accesso. La delega dell'accesso scollega l'accesso alla tabella Delta Lake dall'accesso al datastore sottostante.
- Controllo dell'accesso granulare: applica una sicurezza granulare in a livello di tabella, tra cui a livello di riga e a livello di colonna. Per le tabelle Delta Lake basate su Cloud Storage, puoi anche utilizzare la mascheratura dinamica dei dati.
- Evoluzione dello schema: le modifiche allo schema nelle tabelle Delta Lake vengono rilevate automaticamente. Modifiche alle vengono riportati nella tabella BigQuery.
Le tabelle Delta Lake supportano anche tutte le funzionalità di BigLake se le configuri come tabelle BigLake.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery Connection and BigQuery Reservation APIs.
-
In the Google Cloud console, activate Cloud Shell.
Assicurati di avere un dataset BigQuery.
Assicurati che la versione di Google Cloud SDK sia 366.0.0 o successiva:
gcloud version
Se necessario, aggiornare Google Cloud SDK.
Crea un Connessione alle risorse cloud in base all'origine dati esterna e concedi la connessione per accedere a Cloud Storage. Se non hai le autorizzazioni appropriate per creare una connessione, chiedi l'amministratore BigQuery per creare una connessione e la condividiamo con te.
Ruoli obbligatori
Per creare una tabella Delta Lake sono necessarie le seguenti autorizzazioni:
bigquery.tables.create
bigquery.connections.delegate
L'amministratore BigQuery (roles/bigquery.admin
) predefinito
Il ruolo 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 per te.
Inoltre, per consentire agli utenti di BigQuery di eseguire query sulla tabella, l'account di servizio associato alla connessione deve avere quanto segue autorizzazione e accesso:
- Ruolo Visualizzatore BigQuery (
roles/bigquery.viewer
) - Ruolo Utente connessione BigQuery (
roles/bigquery.connectionUser
) - Accesso al bucket Cloud Storage contenente i dati
Per ulteriori informazioni su ruoli e autorizzazioni di Identity and Access Management in BigQuery, vedi Ruoli e autorizzazioni predefiniti.
crea tabelle con Delta Lake
Per creare tabelle Delta Lake, segui questi passaggi.
SQL
Utilizza la
Dichiarazione 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 che conterrà la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome della tabella del lago delta
- 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 riportato nell'ultima sezione dell'ID connessione completo visualizzato nell'ID connessione, per 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 della tabella
- PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
- DATASET: il set di dati BigQuery che conterrà la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome della 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 riportato nell'ultima sezione dell'ID connessione completo visualizzato nell'ID connessione, per 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 conterrà la tabella Delta Lake
Quando crei tabelle Delta Lake, il prefisso Delta Lake è
utilizzato 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 e poi calcola i metadati e i file della tabella.
Aggiornare le tabelle Delta Lake
Per aggiornare (aggiornare) lo schema delle tabelle Delta Lake:
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:
- PROJECT_ID: l'ID del progetto in cui vuoi creare la tabella Delta Lake
- DATASET: il set di dati BigQuery che conterrà la tabella Delta Lake
- DELTALAKE_TABLE_NAME: il nome della tabella Delta Lake
REST
Utilizza l'API BigQuery per
aggiorna 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 riportato nell'ultima sezione dell'ID connessione completo visualizzato nell'ID connessione, per esempio
projects/myproject/locations/connection_location/connections/myconnection
.DELTALAKE_TABLE_NAME: il nome della tabella del lago delta
DATASET: il set di dati BigQuery contenente la tabella Delta Lake
Esegui query sulle tabelle Delta Lake
Dopo aver creato una tabella BigLake di Delta Lake, puoi eseguire query utilizzando la sintassi di GoogleSQL, come faresti con una tabella BigQuery standard. Ad esempio:
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
Per ulteriori informazioni, vedi Eseguire query sui dati di Cloud Storage nelle tabelle BigLake.
Una connessione esterna associata a si utilizza un account di servizio per la connessione al datastore. Poiché il servizio recupera i dati dal datastore, gli utenti devono solo accedere Tabella Delta Lake.
Mappatura dei dati
BigQuery converte i tipi di dati di Delta Lake in tipi di dati BigQuery come mostrato nella tabella seguente:
Tipo di Lake 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 presentano le limitazioni delle tabelle BigLake, oltre ai seguenti limiti:
- Supporta la versione del lettore 3 di Delta Lake con vettori di eliminazione e mappatura delle colonne.
- Non supporta i checkpoint Delta Lake V2.
- Devi elencare la versione del lettore nell'ultimo file della voce di log. Ad esempio,
le nuove tabelle devono includere
00000..0.json
. - Le operazioni CDC (Change Data Capture) non sono supportate. Qualsiasi operazione CDC esistente viene ignorata.
- Lo schema viene rilevato automaticamente. La modifica dello schema utilizzando BigQuery non è supportata.
- I nomi delle colonne delle tabelle devono essere conformi a BigQuery restrizioni relative ai nomi delle colonne.
- Le viste materializzate non sono supportate.
- L'API Read non è supportata per Delta Lake.