Enregistrer une connexion de service¶
Cette rubrique explique comment enregistrer vos identifiants de connexion de service avec Snowflake ou votre service tiers (par exemple, Apache Spark™). L’administrateur Snowflake Open Catalog enregistre une connexion de service.
L’exemple de code de cette rubrique montre comment enregistrer une connexion de service dans Spark. L’exemple de code est dans PySpark.
Conditions préalables¶
Avant de pouvoir enregistrer une connexion de service, vous devez configurer une connexion de service. Pour obtenir des instructions, voir Configuration d’une connexion de service.
Enregistrer une connexion de service¶
L’exemple de code suivant sert à enregistrer une connexion de service unique.
Remarque
Vous pouvez également enregistrer plusieurs connexions de service ; voir Exemple 2 : enregistrement de deux connexions de service.
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \
.config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \
.getOrCreate()
Paramètres¶
Paramètre |
Description |
---|---|
|
Spécifie le nom du catalogue auquel se connecter. |
|
Spécifie les coordonnées Maven pour votre fournisseur de stockage Cloud externe :
|
|
Spécifie l’ID client à utiliser par le principal de service. |
|
Spécifie le secret client à utiliser par le principal de service. |
|
Spécifie l’identificateur de compte pour votre compte Open Catalog. En fonction de la région et de la plateforme Cloud du compte, cet identificateur peut être le localisateur de compte à lui seul (par exemple, |
|
Spécifie le rôle principal accordé au principal de service. |
Enregistrement d’une connexion de service interrégionale (Amazon S3 uniquement)¶
L’exemple de code suivant sert à enregistrer une connexion de service lorsque les conditions suivantes sont remplies :
Votre compte Open Catalog est hébergé sur Amazon S3.
Votre fournisseur de stockage externe est Amazon S3.
Votre compte Open Catalog est hébergé dans une région S3 différente de la région S3 où se trouve le compartiment de stockage contenant vos tables Apache Iceberg™.
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \
.config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \
.config('spark.sql.catalog.opencatalog.client.region','<target_s3_region>') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \
.getOrCreate()
Paramètres¶
Paramètre |
Description |
---|---|
|
Spécifie le nom du catalogue auquel se connecter. |
|
Spécifie l’ID client à utiliser par le principal de service. |
|
Spécifie le secret client à utiliser par le principal de service. |
|
Spécifie l’identificateur de compte pour votre compte Open Catalog. En fonction de la région et de la plateforme Cloud du compte, cet identificateur peut être le localisateur de compte à lui seul (par exemple, |
|
Spécifie le code de région où se trouve le compartiment S3 contenant vos tables Apache Iceberg. Pour les codes de région, voir Points de terminaison de service AWS et consultez la colonne Région dans la table. |
|
Spécifie le rôle principal accordé au principal de service. |
Exemples¶
Cette section contient des exemples d’enregistrement d’une connexion de service dans Spark.
Exemple 1 : enregistrement d’une connexion de service unique (S3)
Exemple 2 : enregistrement de deux connexions de service (S3)
Exemple 3 : enregistrement d’une connexion de service unique (Cloud Storage de Google)
Exemple 4 : enregistrement d’une connexion de service unique (Azure)
Exemple 1 : enregistrement d’une connexion de service unique (S3)¶
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','000000000000000000000000000=:1111111111111111111111111111111111111111111=') \
.config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:data_engineer') \
.getOrCreate()
Exemple 2 : enregistrement de deux connexions de service (S3)¶
Important
Lors de l’enregistrement de plusieurs connexions de service, vous devez définir les instances
opencatalog
dans le code pour la première connexion sur le texte unique dans le code pour chaque connexion ultérieure. Par exemple, dans le code suivant, les instancesopencatalog
pour la première connexion sont définies suropencatalog1
pour la deuxième connexion :
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','000000000000000000000000000=:1111111111111111111111111111111111111111111=') \
.config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:data_scientist') \
.config('spark.sql.catalog.opencatalog1', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog1.type', 'rest') \
.config('spark.sql.catalog.opencatalog1.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog1.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog1.credential','222222222222222222222222222=:3333333333333333333333333333333333333333333=') \
.config('spark.sql.catalog.opencatalog1.warehouse','Catalog2') \
.config('spark.sql.catalog.opencatalog1.scope','PRINCIPAL_ROLE:data_scientist') \
.getOrCreate()
Exemple 3 : enregistrement d’une connexion de service unique (Cloud Storage de Google)¶
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,org.apache.iceberg:iceberg-gcp-bundle:1.5.2') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','000000000000000000000000000=:1111111111111111111111111111111111111111111=') \
.config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:data_engineer') \
.getOrCreate()
Exemple 4 : enregistrement d’une connexion de service unique (Azure)¶
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,org.apache.iceberg:iceberg-azure-bundle:1.5.2') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://ab12345.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','000000000000000000000000000=:1111111111111111111111111111111111111111111=') \
.config('spark.sql.catalog.opencatalog.warehouse','Catalog1') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:data_engineer') \
.getOrCreate()
Vérification de la connexion à Open Catalog¶
Pour vérifier que Spark est connecté à Open Catalog, répertoriez les espaces de noms du catalogue. Pour plus d’informations, voir Référencement d’espaces de noms.