Créer des tables BigLake Delta Lake
BigLake vous permet d'accéder aux tables Delta Lake avec un contrôle des accès plus précis. Delta Lake est un format de stockage de données tabulaire Open Source développé par Databricks et compatible avec les tables de données à l'échelle du pétaoctet.
BigQuery est compatible avec les fonctionnalités de tables Delta Lake suivantes :
- Délégation d'accès : interrogez des données structurées dans des datastores externes avec la délégation d'accès. La délégation d'accès dissocie l'accès à la table Delta Lake de l'accès au datastore sous-jacent.
- Contrôle précis des accès appliquez une sécurité précise au niveau de la table, y compris au niveau des lignes et au niveau des colonnes. Pour les tables Delta Lake basées sur Cloud Storage, vous pouvez également utiliser le masquage des données dynamiques.
- Évolution du schéma : les modifications de schéma dans les tables Delta Lake sont détectées automatiquement. Les modifications apportées au schéma sont reflétées dans la table BigQuery.
Les tables Delta Lake sont également compatibles avec toutes les fonctionnalités BigLake lorsque vous les configurez en tant que tables BigLake.
Avant de commencer
-
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.
Assurez-vous de disposer d'un dataset BigQuery.
Assurez-vous que votre version du SDK Google Cloud est 366.0.0 ou ultérieure :
gcloud version
Si nécessaire, mettez à jour le SDK Google Cloud.
Créez une connexion de ressource Cloud basée sur votre source de données externe, puis accordez-lui l'accès à Cloud Storage. Si vous ne disposez pas des autorisations nécessaires pour créer une connexion, demandez à votre administrateur BigQuery de créer une connexion et de la partager avec vous.
Rôles requis
Les autorisations suivantes sont requises pour créer une table Delta Lake :
bigquery.tables.create
bigquery.connections.delegate
Le rôle IAM prédéfini Administrateur BigQuery (roles/bigquery.admin
) inclut ces autorisations.
Si vous n'êtes pas un compte principal dans ce rôle, demandez à votre administrateur de vous accorder ces autorisations ou de créer la table Delta Lake pour vous.
En outre, pour permettre aux utilisateurs BigQuery d'interroger la table, le compte de service associé à la connexion doit disposer de l'autorisation et de l'accès suivants :
- Rôle de lecteur BigQuery (
roles/bigquery.viewer
). - Rôle Utilisateur de connexion BigQuery (
roles/bigquery.connectionUser
) - Accès au bucket Cloud Storage contenant ces données
Pour en savoir plus sur les rôles et les autorisations Identity and Access Management dans BigQuery, consultez la page Rôles et autorisations prédéfinis.
Créer des tables avec Delta Lake
Pour créer des tables Delta Lake, procédez comme suit.
SQL
Utilisez l'instruction CREATE EXTERNAL TABLE
pour créer la table 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']);
Remplacez les valeurs suivantes :
- PROJECT_ID : ID du projet dans lequel vous souhaitez créer la table Delta Lake
- DATASET : ensemble de données BigQuery contenant la table Delta Lake
- DELTALAKE_TABLE_NAME : nom de votre table Delta Lake
- REGION : région contenant la connexion permettant de créer la table Delta Lake, par exemple
us
CONNECTION_ID : ID de connexion, par exemple
myconnection
.Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion, par exemple,
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH : préfixe de la table Delta Lake
bq
Dans un environnement de ligne de commande, utilisez la commande bq mk
pour créer la table Delta Lake :
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Remplacez les valeurs suivantes :
- DEFINITION_FILE : chemin d'accès au fichier de définition de table.
- PROJECT_ID : ID du projet dans lequel vous souhaitez créer la table Delta Lake
- DATASET : ensemble de données BigQuery contenant la table Delta Lake
- DELTALAKE_TABLE_NAME : nom de votre table Delta Lake
REST
Utilisez l'API BigQuery pour créer une table Delta Lake en appelant la méthode 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
Remplacez les valeurs suivantes :
- PROJECT_ID : ID du projet dans lequel vous souhaitez créer la table Delta Lake
- REGION : région contenant la connexion permettant de créer la table Delta Lake, par exemple
us
CONNECTION_ID : ID de connexion, par exemple
myconnection
.Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion, par exemple,
projects/myproject/locations/connection_location/connections/myconnection
.DELTA_TABLE_GCS_BASE_PATH : préfixe de la table Delta Lake
DELTALAKE_TABLE_NAME : nom de votre table Delta Lake
DATASET : ensemble de données BigQuery contenant la table Delta Lake
Lorsque vous créez des tables Delta Lake, le préfixe Delta Lake est utilisé comme URI de la table. Par exemple, pour une table qui contient des journaux dans le bucket gs://bucket/warehouse/basictable/_delta_log
, l'URI de la table est gs://bucket/warehouse/basictable
. Lorsque vous exécutez des requêtes sur la table Delta Lake, BigQuery lit les données associées à ce préfixe pour identifier la version actuelle de la table, puis calcule les métadonnées et les fichiers de la table.
Mettre à jour des tables Delta Lake
Pour mettre à jour (actualiser) le schéma des tables Delta Lake, procédez comme suit.
bq
Dans un environnement de ligne de commande, utilisez la commande bq update
pour mettre à jour (actualiser) le schéma de la table Delta Lake :
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Remplacez les valeurs suivantes :
- PROJECT_ID : ID du projet dans lequel vous souhaitez créer la table Delta Lake
- DATASET : ensemble de données BigQuery contenant la table Delta Lake
- DELTALAKE_TABLE_NAME : nom de votre table Delta Lake
REST
Utilisez l'API BigQuery pour mettre à jour une table Delta Lake en appelant la méthode 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
Remplacez les valeurs suivantes :
- DELTA_TABLE_GCS_BASE_PATH : préfixe de la table Delta Lake
- PROJECT_ID : ID du projet dans lequel vous souhaitez créer la table Delta Lake
- REGION : région contenant la connexion permettant de créer la table Delta Lake, par exemple
us
CONNECTION_ID : ID de connexion, par exemple
myconnection
.Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion, par exemple,
projects/myproject/locations/connection_location/connections/myconnection
.DELTALAKE_TABLE_NAME : nom de votre table Delta Lake
DATASET : ensemble de données BigQuery contenant la table Delta Lake
Interroger des tables Delta Lake
Après avoir créé une table BigLake Delta Lake, vous pouvez l'interroger à l'aide d'une syntaxe GoogleSQL, comme vous le feriez pour une table BigQuery standard. Exemple :
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
Pour en savoir plus, consultez la section Interroger des données Cloud Storage dans des tables BigLake.
Une connexion externe associée à un compte de service permet de se connecter au data store. Comme le compte de service récupère les données du data store, les utilisateurs n'ont besoin que d'accéder à la table Delta Lake.
Mappage de données
BigQuery convertit les types de données Delta Lake en types de données BigQuery, comme indiqué dans le tableau suivant :
Type Delta Lake | Type BigQuery |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC ou BIG_NUMERIC selon la précision |
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>> |
Limites
Les tables Delta Lake présentent des limites de table BigLake, ainsi que les limites suivantes :
- Compatibilité avec la version 3 du lecteur Delta Lake avec des vecteurs de suppression et un mappage de colonnes.
- Les points de contrôle Delta Lake V2 ne sont pas pris en charge.
- Vous devez répertorier la version du lecteur dans le fichier d'entrée de la dernière entrée de journal. Par exemple, les nouvelles tables doivent inclure
00000..0.json
. - Les opérations de capture de données modifiées (CDC, Change Data Capture) ne sont pas acceptées. Toutes les opérations CDC existantes sont ignorées.
- Le schéma est détecté automatiquement. Il n'est pas possible de modifier le schéma à l'aide de BigQuery.
- Les noms de colonne de table doivent respecter les restrictions sur les noms de colonnes de BigQuery.
- Les vues matérialisées ne sont pas acceptées.
- L'API Read n'est pas compatible avec Delta Lake.