Gérer les métadonnées Open Source avec BigLake Metastore (classique)
BigLake Metastore (classique) est un service de métadonnées physiques unifié pour les produits d'analyse de données sur Google Cloud. Il fournit une source unique de référence pour les métadonnées et vous permet de gérer et d'accéder aux données provenant de plusieurs sources. BigLake Metastore (classique) est accessible depuis BigQuery et divers moteurs de traitement de données ouverts sur Managed Service pour Apache Spark, ce qui en fait un outil utile pour les analystes et les ingénieurs de données.
Pour gérer les métadonnées métier, consultez Knowledge Catalog.
Fonctionnement de BigLake Metastore (classique)
BigLake Metastore (classique) est un service sans serveur qui ne nécessite pas de provisionner des ressources avant de l'utiliser. Vous pouvez l'utiliser comme alternative sans serveur à Hive Metastore dans les clusters Managed Service pour Apache Spark. BigLake Metastore (classique) fonctionne de la même manière que Hive Metastore via ses API compatibles avec Hive. Vous pouvez interroger immédiatement les tables au format ouvert dans BigQuery sans aucune autre étape. BigLake Metastore (classique) n'est compatible qu'avec les tables Apache Iceberg.
BigLake Metastore (classique) fournit des API, des bibliothèques clientes et une intégration de moteur de données (telle qu'Apache Spark) pour gérer les catalogues, les bases de données et les tables.
Limites
BigLake Metastore (classique) est soumis aux limites suivantes :
- Il n'est pas compatible avec les tables Apache Hive.
- Les rôles et autorisations IAM (Identity and Access Management) ne peuvent être accordés qu'aux projets. L'attribution d'autorisations IAM aux ressources n'est pas prise en charge.
- Cloud Monitoring n'est pas compatible.
- Les catalogues et bases de données BigLake Metastore (classique) sont soumis aux limites de dénomination suivantes :
- Les noms peuvent comporter jusqu'à 1 024 caractères.
- Les noms ne peuvent contenir que des lettres UTF-8 (majuscules, minuscules), des chiffres et des traits de soulignement.
- Les noms doivent être uniques pour chaque combinaison de projet et de région.
- Les tables BigLake Metastore (classique) suivent les mêmes conventions de nommage que les tables BigQuery. Pour en savoir plus, consultez la section Nommer les tables.
Avant de commencer
Vous devez activer la facturation et l'API BigLake avant d'utiliser BigLake Metastore (classique).
- Demandez à votre administrateur de vous attribuer le rôle IAM Administrateur de Service Usage (
roles/serviceusage.serviceUsageAdmin) sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès. - Activez la facturation pour votre Google Cloud projet. Découvrez comment vérifier si la facturation est activée pour un projet.
Activez l'API BigLake.
Rôles requis
- Pour disposer d'un contrôle total sur les ressources BigLake Metastore (classique), vous
devez disposer du rôle Administrateur BigLake (
roles/biglake.admin). Si vous utilisez un compte de service de connecteur BigQuery Spark, un compte de service Managed Service pour Apache Spark, ou un compte de service de VM Managed Service pour Apache Spark, accordez-lui le rôle d'administrateur BigLake. - Pour disposer d'un accès en lecture seule aux ressources BigLake Metastore (classique), vous devez disposer du rôle Lecteur BigLake (
roles/biglake.viewer). Par exemple, lorsque vous interrogez une table BigLake Metastore (classique) dans BigQuery, l'utilisateur ou le compte de service de connexion BigQuery doit disposer du rôle Lecteur BigLake. - Pour créer des tables BigQuery avec des connexions, vous devez disposer du
rôle Utilisateur de connexion BigQuery
(
roles/bigquery.connectionUser). Pour en savoir plus sur le partage de connexions, consultez Partager des connexions avec des utilisateurs.
Selon le cas d'utilisation, l'identité qui appelle BigLake Metastore (classique) peut être un compte utilisateurs ou un compte de service :
- Utilisateur : lors de l'appel direct de l'API BigLake ou lors de l'interrogation d'une table gérée Apache Iceberg sans connexion depuis BigQuery. Dans ce cas, BigQuery utilise les identifiants de l'utilisateur.
- Connexion de ressources cloud BigQuery: lors de l'interrogation d'une table gérée Iceberg avec une connexion depuis BigQuery. BigQuery utilise les identifiants du compte de service de connexion pour accéder à BigLake Metastore (classique).
- Connecteur Spark BigQuery: lors de l'utilisation de Spark avec BigLake Metastore (classique) dans une procédure stockée Spark dans BigQuery. Spark utilise les identifiants du compte de service du connecteur Spark pour accéder à BigLake Metastore (classique) et créer des tables BigQuery.
- Compte de service Managed Service pour Apache Spark: lors de l'utilisation de Spark avec BigLake dans Managed Service pour Apache Spark. Spark utilise les identifiants du compte de service.
- Compte de service de VM Managed Service pour Apache Spark: lors de l'utilisation de Managed Service pour Apache Spark (et non Managed Service pour Apache Spark). Apache Spark utilise les identifiants du compte de service de la VM.
Selon vos autorisations, vous pouvez vous attribuer ces rôles ou demander à votre administrateur de vous les accorder. Pour en savoir plus sur l'attribution de rôles, consultez la page Afficher les rôles pouvant être attribués sur des ressources.
Pour afficher les autorisations exactes requises pour accéder aux ressources BigLake Metastore (classique), développez la section Autorisations requises :
Autorisations requises
biglake.tables.getau niveau du projet, pour tous les accès en lecture seule. L'interrogation d'une table gérée Iceberg table est en lecture seule.biglake.{catalogs|databases|tables}.*au niveau du projet, pour toutes les autorisations de lecture et d'écriture. En règle générale, Apache Spark doit pouvoir lire et écrire des données, y compris créer, gérer, et afficher des catalogues, des bases de données et des tables.bigquery.connections.delegateau niveau de la connexion à la ressource cloud BigQuery ou à un niveau supérieur, pour créer une table gérée Iceberg à l'aide d'une connexion.
Se connecter à BigLake Metastore (classique)
Les sections suivantes expliquent comment se connecter à BigLake Metastore (classique). Elles installent et utilisent le plug-in de catalogue BigLake Apache Iceberg, indiqué par les fichiers JAR dans les méthodes suivantes. Le plug-in de catalogue se connecte à BigLake Metastore (classique) à partir de moteurs Open Source tels qu'Apache Spark.
Se connecter avec une VM Managed Service pour Apache Spark
Pour vous connecter à BigLake Metastore (classique) avec une VM Managed Service pour Apache Spark, procédez comme suit :
- Utilisez SSH pour vous connecter à Managed Service pour Apache Spark.
Dans la CLI Spark SQL, utilisez l'instruction suivante pour installer et configurer le catalogue personnalisé Apache Iceberg pour travailler avec BigLake Metastore (classique) :
spark-sql \ --packages ICEBERG_SPARK_PACKAGE \ --jars BIGLAKE_ICEBERG_CATALOG_JAR \ --conf spark.sql.catalog.SPARK_CATALOG=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.SPARK_CATALOG.catalog-impl=org.apache.iceberg.gcp.biglake.BigLakeCatalog \ --conf spark.sql.catalog.SPARK_CATALOG.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.SPARK_CATALOG.gcp_location=LOCATION \ --conf spark.sql.catalog.SPARK_CATALOG.blms_catalog=BLMS_CATALOG \ --conf spark.sql.catalog.SPARK_CATALOG.warehouse=GCS_DATA_WAREHOUSE_FOLDER \ --conf spark.sql.catalog.SPARK_HMS_CATALOG=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.SPARK_HMS_CATALOG.type=hive \ --conf spark.sql.catalog.SPARK_HMS_CATALOG.uri=thrift://HMS_URI:9083
Remplacez les éléments suivants :
ICEBERG_SPARK_PACKAGE: version d'Apache Iceberg à utiliser avec Spark. Nous vous recommandons d'utiliser la version de Spark qui correspond à celle de votre instance Managed Service pour Apache Spark ou Managed Service pour Apache Spark. Pour afficher la liste des versions d'Apache Iceberg disponibles, consultez Téléchargements Apache Iceberg. Par exemple, l'option pour Apache Spark 3.3 est la suivante :
--packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.2.1BIGLAKE_ICEBERG_CATALOG_JAR: URI Cloud Storage du plug-in de catalogue personnalisé Iceberg à installer. Selon votre environnement, sélectionnez l'une des options suivantes :Iceberg 1.9.1: gs://spark-lib/biglake/biglake-catalog-iceberg1.9.1-0.1.3-with-dependencies.jarIceberg 1.5.1: gs://spark-lib/biglake/biglake-catalog-iceberg1.5.1-0.1.2-with-dependencies.jarIceberg 1.5.0: gs://spark-lib/biglake/biglake-catalog-iceberg1.5.0-0.1.1-with-dependencies.jarIceberg 1.2.0: gs://spark-lib/biglake/biglake-catalog-iceberg1.2.0-0.1.1-with-dependencies.jarIceberg 0.14.0: gs://spark-lib/biglake/biglake-catalog-iceberg0.14.0-0.1.1-with-dependencies.jar
SPARK_CATALOG: identifiant de catalogue pour Spark. Il est associé à un catalogue BigLake Metastore (classique).PROJECT_ID: ID du projet du catalogue BigLake Metastore (classique) auquel le catalogue Spark est associé. Google CloudLOCATION: emplacement Google Cloud du catalogue BigLake Metastore (classique) auquel le catalogue Spark est associé.BLMS_CATALOG: ID du catalogue BigLake Metastore (classique) auquel le catalogue Spark est associé. Le catalogue n'a pas besoin d'exister et peut être créé dans Spark.GCS_DATA_WAREHOUSE_FOLDER: dossier Cloud Storage dans lequel Spark crée tous les fichiers. Il commence pargs://.HMS_DB: (facultatif) base de données HMS contenant la table depuis laquelle copier.HMS_TABLE: (facultatif) table HMS depuis laquelle copier.HMS_URI: (facultatif) point de terminaison HMS Thrift.
Se connecter avec un cluster Managed Service pour Apache Spark
Vous pouvez également envoyer un job Managed Service pour Apache Spark à un cluster. L'exemple suivant installe le catalogue personnalisé Iceberg approprié .
Pour vous connecter avec un cluster Managed Service pour Apache Spark, envoyez un job avec les spécifications suivantes :
CONFS="spark.sql.catalog.SPARK_CATALOG=org.apache.iceberg.spark.SparkCatalog," CONFS+="spark.sql.catalog.SPARK_CATALOG.catalog-impl=org.apache.iceberg.gcp.biglake.BigLakeCatalog," CONFS+="spark.sql.catalog.SPARK_CATALOG.gcp_project=PROJECT_ID," CONFS+="spark.sql.catalog.SPARK_CATALOG.gcp_location=LOCATION," CONFS+="spark.sql.catalog.SPARK_CATALOG.blms_catalog=BLMS_CATALOG," CONFS+="spark.sql.catalog.SPARK_CATALOG.warehouse=GCS_DATA_WAREHOUSE_FOLDER," CONFS+="spark.jars.packages=ICEBERG_SPARK_PACKAGE" gcloud dataproc jobs submit spark-sql --cluster=MANAGED_SERVICE_FOR_APACHE_SPARK_CLUSTER \ --project=MANAGED_SERVICE_FOR_APACHE_SPARK_PROJECT_ID \ --region=MANAGED_SERVICE_FOR_APACHE_SPARK_LOCATION \ --jars=BIGLAKE_ICEBERG_CATALOG_JAR \ --properties="${CONFS}" \ --file=QUERY_FILE_PATH
Remplacez les éléments suivants :
MANAGED_SERVICE_FOR_APACHE_SPARK_CLUSTER: cluster Managed Service pour Apache Spark auquel envoyer le job.MANAGED_SERVICE_FOR_APACHE_SPARK_PROJECT_ID: ID du projet du cluster Managed Service pour Apache Spark. Cet ID peut être différent dePROJECT_ID.MANAGED_SERVICE_FOR_APACHE_SPARK_LOCATION: emplacement du cluster Managed Service pour Apache Spark. Cet emplacement peut être différent deLOCATION.QUERY_FILE_PATH: chemin d'accès au fichier contenant les requêtes à exécuter.
Se connecter avec Managed Service pour Apache Spark
De même, vous pouvez envoyer une charge de travail par lot à Managed Service pour Apache Spark. Pour ce faire, suivez les instructions relatives aux charges de travail par lot avec les options supplémentaires suivantes :
--properties="${CONFS}"--jars=BIGLAKE_ICEBERG_CATALOG_JAR
Se connecter avec des procédures stockées BigQuery
Vous pouvez utiliser des procédures stockées BigQuery pour exécuter des jobs Managed Service pour Apache Spark. Le processus est semblable à l'exécution directe de jobs Managed Service pour Apache Spark dans Managed Service pour Apache Spark.
Créer des ressources de métastore
Les sections suivantes décrivent comment créer des ressources dans le métastore.
Créer des catalogues
Les noms de catalogue sont soumis à des contraintes. Pour en savoir plus, consultez la section Limites. Pour créer un catalogue, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.create
méthode et spécifiez le nom d'un catalogue.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG;
Terraform
Cela crée une base de données BigLake nommée "my_database" de type "HIVE" dans le catalogue spécifié par la variable "google_biglake_catalog.default.id". Pour en savoir plus, consultez la documentation Terraform BigLake.
resource "google_biglake_catalog" "default" { name = "my_catalog" location = "US" }
Créer des bases de données
Les noms de base de données sont soumis à des contraintes. Pour en savoir plus, consultez la section Limites. Pour vous assurer que votre ressource de base de données est compatible avec les moteurs de données, nous vous recommandons de créer des bases de données à l'aide de moteurs de données au lieu de créer manuellement le corps de la ressource. Pour créer une base de données, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.create
méthode et spécifiez le nom d'une base de données.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG.BLMS_DB;
Remplacez les éléments suivants :
BLMS_DB: ID de la base de données BigLake Metastore (classique) à créer
Terraform
Cela crée une base de données BigLake nommée "my_database" de type "HIVE" dans le catalogue spécifié par la variable "google_biglake_catalog.default.id". Pour en savoir plus, consultez la documentation Terraform BigLake.
resource "google_biglake_database" "default" { name = "my_database" catalog = google_biglake_catalog.default.id type = "HIVE" hive_options { location_uri = "gs://${google_storage_bucket.default.name}/${google_storage_bucket_object.metadata_directory.name}" parameters = { "owner" = "Alex" } } }
Créer des tables
Les noms de table sont soumis à des contraintes. Pour en savoir plus, consultez la section Nommer les tables. Pour créer une table, choisissez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.tables.create
méthode et spécifiez le nom d'une table.
Spark SQL
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg;
Remplacez les éléments suivants :
BLMS_TABLE: ID de la table BigLake Metastore (classique) à créer
Terraform
Cela enregistre une table BigLake Metastore (classique) nommée "my_table" et de type "Hive" dans la base de données spécifiée par la variable "google_biglake_database.default.id". Notez que la table doit exister avant l'enregistrement dans le catalogue, ce qui peut être effectué en initialisant la table à partir d'un moteur tel qu'Apache Spark. Pour en savoir plus, consultez la documentation du fournisseur Terraform : Table BigLake.
resource "google_biglake_table" "default" { name = "my-table" database = google_biglake_database.default.id type = "HIVE" hive_options { table_type = "MANAGED_TABLE" storage_descriptor { location_uri = "gs://${google_storage_bucket.default.name}/${google_storage_bucket_object.data_directory.name}" input_format = "org.apache.hadoop.mapred.SequenceFileInputFormat" output_format = "org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat" } parameters = { "spark.sql.create.version" = "3.1.3" "spark.sql.sources.schema.numParts" = "1" "transient_lastDdlTime" = "1680894197" "spark.sql.partitionProvider" = "catalog" "owner" = "Alex" "spark.sql.sources.schema.part.0" = jsonencode({ "type" : "struct", "fields" : [ { "name" : "id", "type" : "integer", "nullable" : true, "metadata" : {} }, { "name" : "name", "type" : "string", "nullable" : true, "metadata" : {} }, { "name" : "age", "type" : "integer", "nullable" : true, "metadata" : {} } ] }) "spark.sql.sources.provider" = "iceberg" "provider" = "iceberg" } } }
Exemple Terraform E2E
Cet exemple GitHub fournit un exemple E2E exécutable qui crée un catalogue, une base de données et une table BigLake Metastore (classique) . Pour en savoir plus sur l'utilisation de cet exemple, consultez Commandes Terraform de base.
Copier une table Iceberg depuis Hive Metastore vers BigLake Metastore (classique)
Pour créer une table Iceberg et copier une table Hive Metastore dans BigLake Metastore (classique), utilisez l'instruction Spark SQL suivante :
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg TBLPROPERTIES(hms_table='HMS_DB.HMS_TABLE');
Associer des tables BigLake à des tables BigLake Metastore (classique)
Lorsque vous créez une table Iceberg dans Spark, vous pouvez également créer une table externe Iceberg associée en même temps.
Associer automatiquement des tables
Pour créer une table Iceberg dans Spark et créer automatiquement une table externe Iceberg en même temps, utilisez l'instruction SQL Spark suivante :
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg TBLPROPERTIES(bq_table='BQ_TABLE_PATH', bq_connection='BQ_RESOURCE_CONNECTION');
Remplacez les éléments suivants :
BQ_TABLE_PATH: chemin d'accès à la table externe Iceberg à créer. Suivez la syntaxe du chemin d'accès à la table BigQuery. Elle utilise le même projet que le catalogue BigLake Metastore (classique) si le projet n'est pas spécifié.BQ_RESOURCE_CONNECTION(facultatif) : le format estproject.location.connection-id. Si cette option est spécifiée, les requêtes BigQuery utilisent les identifiants de connexion à la ressource cloud pour accéder à BigLake Metastore (classique). Si cette option n'est pas spécifiée, BigQuery crée une table externe standard au lieu d'une table BigLake.
Associer manuellement des tables
Pour créer manuellement des liens de table externe Iceberg avec des URI de table BigLake Metastore (classique) spécifiés (blms://…), utilisez l'instruction SQL BigQuery suivante :
CREATE EXTERNAL TABLE 'BQ_TABLE_PATH' WITH CONNECTION `BQ_RESOURCE_CONNECTION` OPTIONS ( format = 'ICEBERG', uris = ['blms://projects/PROJECT_ID/locations/LOCATION/catalogs/BLMS_CATALOG/databases/BLMS_DB/tables/BLMS_TABLE'] )
Afficher les ressources de métastore
Les sections suivantes décrivent comment afficher les ressources dans BigLake Metastore (classique).
Afficher les catalogues
Pour afficher toutes les bases de données d'un catalogue, utilisez la
projects.locations.catalogs.list
méthode et spécifiez le nom d'un catalogue.
Pour afficher des informations sur un catalogue, utilisez la
projects.locations.catalogs.get
méthode et spécifiez le nom d'un catalogue.
Afficher les bases de données
Pour afficher une base de données, procédez comme suit :
API
Pour afficher toutes les tables d'une base de données, utilisez la
projects.locations.catalogs.databases.list
méthode et spécifiez le nom d'une base de données.
Pour afficher des informations sur une base de données, utilisez la
projects.locations.catalogs.databases.get
méthode et spécifiez le nom d'une base de données.
Spark SQL
Pour afficher toutes les bases de données d'un catalogue, utilisez l'instruction suivante :
SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;
Pour afficher des informations sur une base de données définie, utilisez l'instruction suivante :
DESCRIBE { DATABASE | NAMESPACE } [EXTENDED] SPARK_CATALOG.BLMS_DB;
Afficher des tables
Pour afficher toutes les tables d'une base de données ou une table définie, procédez comme suit :
API
Pour afficher toutes les tables d'une base de données, utilisez la
projects.locations.catalogs.databases.tables.list méthode et spécifiez le nom d'une base de données.
Pour afficher des informations sur une table, utilisez la
projects.locations.catalogs.databases.tables.get
méthode et spécifiez le nom d'une table.
Spark SQL
Pour afficher toutes les tables d'une base de données, utilisez l'instruction suivante :
SHOW TABLES IN SPARK_CATALOG.BLMS_DB;
Pour afficher des informations sur une table définie, utilisez l'instruction suivante :
DESCRIBE TABLE [EXTENDED] SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Modifier les ressources de métastore
Les sections suivantes décrivent comment modifier les ressources dans le métastore.
Mettre des tables à jour
Pour éviter les conflits lorsque plusieurs jobs tentent de mettre à jour la même table en même temps, BigLake Metastore (classique) utilise le verrouillage optimiste. Pour utiliser le verrouillage optimiste, vous devez d'abord obtenir la version actuelle de la table (appelée etag) à l'aide de la méthode GetTable. Vous pouvez ensuite apporter des modifications à la table et utiliser la méthode UpdateTable, en transmettant l'etag récupéré précédemment. Si un autre job met à jour la table une fois que vous avez récupéré l'etag, la méthode UpdateTable échoue. Cette mesure garantit qu'un seul job peut mettre à jour la table à la fois, ce qui évite les conflits.
Pour créer une table BigLake, choisissez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.tables.patch
méthode et spécifiez le nom d'une table.
Spark SQL
Pour connaître les options de mise à jour des tables en SQL, consultez
ALTER TABLE.
Renommer des tables
Pour renommer une table, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.tables.rename
méthode et spécifiez le nom d'une table et une valeur newName.
Spark SQL
ALTER TABLE BLMS_TABLE RENAME TO NEW_BLMS_TABLE;
Remplacez les éléments suivants :
NEW_BLMS_TABLE: nouveau nom deBLMS_TABLE. Doit se trouver dans le même ensemble de données queBLMS_TABLE.
Supprimer les ressources de métastore
Les sections suivantes décrivent comment supprimer les ressources dans BigLake Metastore (classique).
Supprimer les catalogues
Pour supprimer un ensemble de données, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.delete
méthode et spécifiez le nom d'un catalogue. Cette méthode ne supprime pas les
fichiers associés sur Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG;
Supprimer des bases de données
Pour supprimer un ensemble de données, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.delete
méthode et spécifiez le nom d'une base de données. Cette méthode ne supprime pas les
fichiers associés sur Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG.BLMS_DB;
Supprimer des tables
Pour supprimer un ensemble de données, sélectionnez l'une des options suivantes :
API
Utilisez la
projects.locations.catalogs.databases.tables.delete
méthode et spécifiez le nom d'une table. Cette méthode ne supprime pas les
fichiers associés sur Google Cloud.
Spark SQL
Pour n'abandonner que la table, utilisez l'instruction suivante:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Pour abandonner la table et supprimer les fichiers associés sur Google Cloud, utilisez l'instruction suivante:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE PURGE;