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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery Connection and BigQuery Reservation APIs.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. Assurez-vous de disposer d'un dataset BigQuery.

  6. 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.

  7. 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.