Tables de requêtes Apache Iceberg™ avec un moteur externe via Snowflake Horizon Catalog¶
This preview introduces support for querying Snowflake-managed Apache Iceberg™ tables by using an external query engine through Snowflake Horizon Catalog. To ensure this interoperability with external engines, Apache Polaris™ (incubating) is integrated into Horizon Catalog. In addition, Horizon Catalog exposes Apache Iceberg™ REST APIs. These APIs let you read the tables by using external query engines.
Pour interroger des tables Iceberg gérées par Snowflake avec un moteur de requête externe, vous pouvez utiliser cette fonctionnalité au lieu de synchroniser des tables Iceberg gérées par Snowflake avec Snowflake Open Catalog. Pour plus d’informations sur Open Catalog, voir Vue d’ensemble de Snowflake Open Catalog.
En connectant un moteur de requête externe à des tables Iceberg via Horizon Catalog, vous pouvez effectuer les tâches suivantes :
Utiliser n’importe quel moteur de requête externe qui prend en charge le protocole REST Iceberg ouvert pour interroger ces tables, comme Apache Spark™.
Interrogez des tables Iceberg gérées par Snowflake existantes et nouvelles dans un compte Snowflake nouveau ou existant à l’aide d’un seul point de terminaison Horizon Catalog.
Interrogez les tables en utilisant vos utilisateurs, rôles, politiques et authentifications existants dans Snowflake.
Utilisez des identifiants de connexion distribués.
Pour plus d’informations sur Snowflake Horizon Catalog, voir Catalogue Snowflake Horizon.
Le schéma suivant montre des moteurs de requête externes lisant des tables Iceberg gérées par Snowflake via Horizon Catalog et Snowflake lisant et écrivant dans ces tables :
Facturation¶
API REST Iceberg de Horizon Catalog est disponible dans toutes les éditions de Snowflake.
Les requêtes API sont facturées à 0,5 crédit par million d’appels et sont facturées comme des services Cloud.
Pour l’accès aux données interrégionales, des frais standard de sortie des données interrégionales, comme indiqué dans la Table de consommation du service Snowflake sont applicables.
Note
Les clients ne seront pas facturés tant que cette fonctionnalité ne sera pas disponible.
Avant de commencer¶
Récupérez l’identificateur de compte de votre compte Snowflake contenant les tables Iceberg que vous souhaitez interroger. Pour obtenir des instructions, voir Identificateurs de compte. Vous spécifiez cet identificateur lorsque vous connectez un moteur de requête externe à vos tables Iceberg.
Astuce
Pour obtenir votre identificateur de compte en utilisant SQL, vous pouvez exécuter la commande suivante :
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
Connectivité privée (en option)¶
Pour une connectivité sécurisée, envisagez de configurer la connectivité privée entrante et sortante pour votre compte Snowflake lorsque vous accédez au point de terminaison Horizon Catalog.
Note
La connectivité privée n’est prise en charge que pour les tables Iceberg gérées par Snowflake et stockées sur Amazon S3 ou Azure Storage (ADLS).
Procédure d’interrogation des tables Iceberg à l’aide d’un moteur de requête externe¶
Pour interroger des tables Iceberg en utilisant un moteur de requête externe, procédez comme suit :
Créez des tables Iceberg.
Configurez le contrôle d’accès.
Obtenez un jeton d’accès pour l’authentification.
Verify access token permissions.
(Facultatif) Configurez des politiques de protection des données.
Connectez un moteur de requête externe aux tables Iceberg via Horizon Catalog.
Interrogez des tables Iceberg.
Étape 1 : Créer des tables Iceberg¶
Important
Si vous souhaitez interroger des tables Iceberg gérées par Snowflake, vous pouvez ignorer cette étape.
Dans cette étape, vous créez des tables Iceberg gérées par Snowflake qui utilisent Snowflake comme catalogue, afin de pouvoir les interroger avec un moteur de requête externe. Pour obtenir des instructions, reportez-vous aux rubriques suivantes :
Tutoriel : Créer votre première table Apache Iceberg™ : Un tutoriel qui montre comment créer une base de données, créer une table Iceberg gérée par Snowflake et charger des données dans la table.
Créer une table Iceberg gérée par Snowflake : Exemple de code pour créer une table Iceberg gérée par Snowflake.
Étape 2 : Configurer le contrôle d’accès¶
Important
Les rôles Snowflake qui incluent le caractère tiret (-) dans le nom de rôle ne sont pas pris en charge lorsque vous accédez aux tables Iceberg via le point de terminaison Horizon Catalog.
Si vous disposez déjà de rôles configurés avec accès aux tables Iceberg que vous souhaitez interroger, vous pouvez ignorer cette étape.
Dans cette étape, vous configurez le contrôle d’accès pour les tables Iceberg gérées par Snowflake que vous souhaitez interroger avec un moteur de requête externe. Par exemple, vous pouvez configurer les rôles suivants dans Snowflake :
Rôle DATA_ENGINEER, qui a accès à tous les schémas et à toutes les tables Iceberg gérées par Snowflake dans une base de données.
Rôle DATA_ANALYST, qui a accès à un schéma de la base de données et a accès uniquement à deux tables Iceberg gérées par Snowflake dans ce schéma.
Pour obtenir des instructions, voir Configuration du contrôle d’accès. Pour plus d’informations sur le contrôle d’accès dans Snowflake, voir Aperçu du contrôle d’accès.
Étape 3 : Obtenir un jeton d’accès pour l’authentification¶
Dans cette étape, vous obtenez un jeton d’accès, que vous devez avoir pour vous authentifier auprès du point de terminaison Horizon Catalog de votre compte Snowflake. Vous devez obtenir un jeton d’accès pour chaque utilisateur (service ou humain) et rôle configuré avec accès aux tables Iceberg gérées par Snowflake. Par exemple, vous devez obtenir un jeton d’accès pour un utilisateur avec le rôle DATA_ENGINEER et un autre utilisateur avec le rôle DATA_ANALYST.
You specify this access token later when you connect an external query engine to Iceberg tables through Horizon Catalog.
Vous pouvez obtenir un jeton d’accès en utilisant l’une des options d’authentification suivantes :
OAuth externe¶
If you’re using External OAuth, generate an access token for your identity provider. For instructions, see Présentation de External OAuth.
Note
Pour OAuth externe, vous pouvez également configurer votre connexion au moteur avec l’actualisation automatique du jeton au lieu de spécifier un jeton d’accès.
Authentification par paire de clés¶
If you use key-pair authentication, to obtain an access token, you sign a JSON web token (JWT) with your private key.
The following steps cover how to generate an access token for key-pair authentication:
Étape 1 : Configurer l’authentification par paire de clés¶
Dans cette étape, vous effectuez les tâches suivantes :
Générer une clé privée.
Générer une clé publique
Stocker les clés privées et publiques en toute sécurité
Octroyer le privilège d’attribuer une clé publique à un utilisateur de Snowflake
Attribuer la clé publique à un utilisateur Snowflake
Vérifier l’empreinte digitale de la clé publique de l’utilisateur
Pour obtenir des instructions, voir Configuration de l’authentification par paire de clés.
Étape 2 : Accorder un rôle à l’utilisateur.¶
Exécuter la commande GRANT ROLE pour accorder le rôle Snowflake qui a des privilèges sur les tables que vous souhaitez interroger à l’utilisateur d’authentification par paire de clés. Par exemple, pour accorder le rôle ENGINEER à l’utilisateur my_service_user, exécutez les commandes suivantes :
GRANT ROLE ENGINEER to user my_service_user;
Étape 3 : Générer un jeton Web JSON (JWT)¶
Dans cette étape, vous utilisez SnowSQL pour générer un jeton Web JSON (JWT) pour l’authentification par paire de clés.
Note
SnowSQL doit être installé sur votre machine.
Vous pouvez également utiliser Python, la CLI Snowflake, Java ou Node.js pour générer un JWT. Pour un exemple, voir les sections suivantes :
Utilisez SnowSQL pour générer un JWT :
snowsql --private-key-path "<private_key_file>" \
--generate-jwt \
-h "<account_identifier>.snowflakecomputing.com" \
-a "<account_locator>" \
-u "<user_name>"
Où :
<private_key_file>is the path to your private key file that corresponds to the public key assigned to your Snowflake user. For example:/Users/jsmith/.ssh/rsa_key.p8.<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Avant de commencer. An example of an account identifier ismyorg-myaccount.<account_locator>est le localisateur de compte pour votre compte Snowflake.Pour trouver votre localisateur de compte, reportez-vous à Localisez les informations de compte Snowflake dans Snowsight et notez le localisateur de compte dans la boîte de dialogue Account Details.
<user_name>est le nom d’utilisateur d’un utilisateur Snowflake dont la clé publique est attribuée à l’utilisateur.
Step 4: Generate an access token¶
Important
Pour générer un jeton d’accès, vous devez d’abord générer un JWT. Vous devez d’abord générer un JWT parce que vous utilisez le JWT pour générer le jeton d’accès.
Utilisez une commande curl pour générer un jeton d’accès :
curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=session:role:<role>' \
--data-urlencode 'client_secret=<JWT_token>'
Où :
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Avant de commencer. An example of an account identifier ismyorg-myaccount.<role>is the Snowflake role that is granted access to Iceberg tables, such as ENGINEER.<JWT_token>est le JWT que vous avez généré à l’étape précédente.
Programmatic access token (PAT)¶
If you use PATs, generate a PAT for authentication.
First, you generate a PAT, which you use to connect an external query engine to Iceberg tables. Then, you generate an access token, which you only use to verify the permissions for your PAT.
Étape 1 : Générer un PAT¶
Pour des instructions sur la façon de configurer et de générer un PAT, voir Utilisation de jetons d’accès programmatique pour l’authentification.
Step 2: Generate an access token for your PAT¶
Dans cette étape, vous générez un jeton d’accès pour votre PAT.
Attention
Vous ne spécifiez le jeton d’accès que vous générez à cette étape que lorsque vous vérifiez les autorisations pour votre PAT. Lorsque vous connectez un moteur de requête externe à des tables Iceberg, vous devez spécifier le PAT que vous avez généré à l’étape précédente, et non le jeton d’accès que vous générez à cette étape.
Utilisez une commande curl pour générer un jeton d’accès pour votre PAT :
curl -i --fail -X POST "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=session:role:<role>' \
--data-urlencode 'client_secret=<PAT_token>'
Où :
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Avant de commencer. An example of an account identifier ismyorg-myaccount.<role>is the Snowflake role that is granted to your PAT and has access to the Iceberg tables you want to query, such as ENGINEER.<PAT_token>est la valeur du jeton PAT que vous avez généré à l’étape précédente.
Step 4: Verify access token permissions¶
À cette étape, vous vérifiez les autorisations pour le jeton d’accès que vous avez obtenu à l’étape précédente.
Vérifier l’accès au point de terminaison IRC Horizon¶
Utilisez une commande curl pour vérifier que vous avez l’autorisation d’accéder à votre point de terminaison IRC Horizon :
curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/config?warehouse=<database_name>" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json"
Où :
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Avant de commencer. An example of an account identifier ismyorg-myaccount.<access_token>is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.<database_name>est le nom de la base de données que vous souhaitez interroger.Important
Vous devez spécifier le nom de la base de données en majuscules, même si elle a été créée avec des lettres minuscules.
Exemple de valeur de retour :
{
"defaults": {
"default-base-location": ""
},
"overrides": {
"prefix": "MY-DATABASE"
}
}
Récupérer les métadonnées d’une table¶
Vous pouvez également effectuer une requête GET pour récupérer les métadonnées d’une table. Snowflake utilise l’opération loadTable pour charger les métadonnées des tables depuis votre catalogue REST.
curl -i --fail -X GET "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog/v1/<database_name>/namespaces/<namespace_name>/tables/<table_name>" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json"
Où :
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Avant de commencer. An example of an account identifier ismyorg-myaccount.<database_name>est la base de données de la table dont vous souhaitez récupérer les métadonnées.<namespace_name>est l’espace de noms de la table dont vous souhaitez récupérer les métadonnées.<table_name>est la table dont vous souhaitez récupérer les métadonnées.<access_token>is your access token that you generated. If you’re using a PAT, this value is the access token you generated, not the personal access token (PAT) you generated.
Important
Vous devez spécifier les noms de base de données, les espaces de noms et les noms de tables en majuscules, même si l’objet a été créé avec des lettres minuscules.
(Facultatif) Étape 5 : Configurer des politiques de protection des données¶
Dans cette étape, vous configurez des politiques de protection des données pour les tables Iceberg. Si vous n’avez pas de tables à protéger à l’aide de politiques de données Snowflake, vous pouvez passer à l’étape suivante.
Note
Les tables protégées par les politiques de protection des données sont accessibles via l’API REST Horizon Iceberg et en utilisant Apache Spark™.
Pour obtenir des instructions sur la configuration des politiques de protection des données, consultez Configurer des politiques de protection des données sur les tables Iceberg accessibles via l’API REST Horizon Iceberg et en utilisant Apache Spark™.
Step 6: Connect an external query engine to Iceberg tables through Horizon Catalog¶
In this step, you connect an external query engine to Iceberg tables through Horizon Catalog. With this connection, you can query the tables by using the external query engine.
Les moteurs externes utilisent le point de terminaison Apache Iceberg™ REST exposé par Snowflake. Pour votre compte Snowflake, ce point de terminaison a le format suivant :
https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog
The example code in this step shows how to set up a connection in Spark, and the example code is in PySpark. For more information, see the following sections:
Se connecter à l’aide de OAuth externe ou de l’authentification par paire de clés
Se connecter à l’aide d’un jeton d’accès programmatique (PAT)
Se connecter à l’aide de OAuth externe ou de l’authentification par paire de clés¶
Utilisez l’une des configurations suivantes pour vous connecter :
To access Iceberg tables that don’t have Snowflake data protection policies configured, connect an external query engine without enforcing data policies.
To access Iceberg tables that have Snowflake row access and masking policies configured, connect an external query engine with data policies enforced.
Connect an external query engine without enforcing data policies¶
To connect the external query engine to Iceberg tables by using External OAuth or key pair authentication. Use the following example code.
Ce code n’applique pas de politiques de protection des données :
# Snowflake Horizon Catalog Configuration, change as per your environment
CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE
# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"
# Paste the External Oauth Access token that you generated in Snowflake here
ACCESS_TOKEN = "<your_access_token>"
# Iceberg Version
ICEBERG_VERSION = "1.9.1"
def create_spark_session():
"""Create and configure Spark session for Snowflake Iceberg access."""
spark = (
SparkSession.builder
.appName("SnowflakeIcebergReader")
.master("local[*]")
# JAR Dependencies for Iceberg and Azure
.config(
"spark.jars.packages",
f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
# for Azure storage, use the below package and comment above azure bundle
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
)
# Iceberg SQL Extensions
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.defaultCatalog", CATALOG_NAME)
# Horizon REST Catalog Configuration
.config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
.config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
.config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
.config(f"spark.sql.catalog.{CATALOG_NAME}.token", ACCESS_TOKEN)
.config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
.config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)
# Required for vended credentials
.config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
.config("spark.sql.iceberg.vectorization.enabled", "false")
.getOrCreate()
)
spark.sparkContext.setLogLevel("ERROR")
return spark
Où :
<account_identifier>is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see Avant de commencer.<your_access_token>est le jeton d’accès que vous avez obtenu. Pour l’obtenir, voir. Étape 3 : Obtenir un jeton d’accès pour l’authentification.Note
Pour OAuth externe, vous pouvez également configurer votre connexion au moteur avec l’actualisation automatique du jeton au lieu de spécifier un jeton d’accès.
<database_name>est le nom de la base de données de votre compte Snowflake qui contient les tables Iceberg gérées par Snowflake que vous souhaitez interroger.Note
La propriété
.warehousedans Spark attend le nom de votre base de données Snowflake, et non le nom de votre entrepôt Snowflake.<role>est le rôle dans Snowflake qui est configuré avec accès aux tables Iceberg que vous souhaitez interroger. Par exemple : DATA_ENGINEER.
Important
Par défaut, l’exemple de code est configuré pour les tables Apache Iceberg™ stockées sur Amazon S3. Si vos tables Iceberg sont stockées sur Azure Storage (ADLS), procédez comme suit :
Commentez la ligne suivante :
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"Ne commentez pas la ligne suivante :
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
Connect an external query engine with data policies enforced¶
Pour vous connecter avec des politiques de protection des données appliquées, consultez Connecter Spark aux tables Iceberg.
Se connecter à l’aide d’un jeton d’accès programmatique (PAT)¶
Utilisez l’une des configurations suivantes pour vous connecter :
If you don’t use data protection policies with the Iceberg tables that you want to query, use the configuration Connect an external query engine without enforcing data policies.
If you use data protection policies with the Iceberg tables that you want to query, use the configuration Connect an external query engine with data policies enforced.
Connect an external query engine without enforcing data policies¶
To connect the external query engine to Iceberg tables by using a programmatic access token (PAT), use the following example code.
Ce code n’applique pas de politiques de protection des données :
# Snowflake Horizon Catalog Configuration, change as per your environment
CATALOG_URI = "https://<account_identifier>.snowflakecomputing.com/polaris/api/catalog"
HORIZON_SESSION_ROLE = f"session:role:<role>"
CATALOG_NAME = "<database_name>" #provide in UPPER CASE
# Cloud Service Provider Region Configuration (where the Iceberg data is stored)
REGION = "eastus2"
# Paste the PAT you generated in Snowflake here
PAT_TOKEN = "<your_PAT_token>"
# Iceberg Version
ICEBERG_VERSION = "1.9.1"
def create_spark_session():
"""Create and configure Spark session for Snowflake Iceberg access."""
spark = (
SparkSession.builder
.appName("SnowflakeIcebergReader")
.master("local[*]")
# JAR Dependencies for Iceberg and Azure
.config(
"spark.jars.packages",
f"org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{ICEBERG_VERSION},"
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"
# for Azure storage, use the below package and comment above azure bundle
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
)
# Iceberg SQL Extensions
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.defaultCatalog", CATALOG_NAME)
# Horizon REST Catalog Configuration
.config(f"spark.sql.catalog.{CATALOG_NAME}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{CATALOG_NAME}.type", "rest")
.config(f"spark.sql.catalog.{CATALOG_NAME}.uri", CATALOG_URI)
.config(f"spark.sql.catalog.{CATALOG_NAME}.warehouse", CATALOG_NAME)
.config(f"spark.sql.catalog.{CATALOG_NAME}.credential", PAT_TOKEN)
.config(f"spark.sql.catalog.{CATALOG_NAME}.scope", HORIZON_SESSION_ROLE)
.config(f"spark.sql.catalog.{CATALOG_NAME}.client.region", REGION)
# Required for vended credentials
.config(f"spark.sql.catalog.{CATALOG_NAME}.header.X-Iceberg-Access-Delegation", "vended-credentials")
.config("spark.sql.iceberg.vectorization.enabled", "false")
.getOrCreate()
)
spark.sparkContext.setLogLevel("ERROR")
return spark
Où :
<account_identifier>is your Snowflake account identifier for the Snowflake account that contains the Iceberg tables that you want to query. To find this identifier, see Avant de commencer.<your_PAT_token>est le PAT que vous avez obtenu. Pour l’obtenir, voir. Étape 3 : Obtenir un jeton d’accès pour l’authentification.<role>est le rôle dans Snowflake qui est configuré avec accès aux tables Iceberg que vous souhaitez interroger. Par exemple : DATA_ENGINEER.<database_name>est le nom de la base de données de votre compte Snowflake qui contient les tables Iceberg gérées par Snowflake que vous souhaitez interroger.Note
La propriété
.warehousedans Spark attend le nom de votre base de données Snowflake, et non le nom de votre entrepôt Snowflake.
Important
Par défaut, l’exemple de code est configuré pour les tables Apache Iceberg™ stockées sur Amazon S3. Si vos tables Iceberg sont stockées sur Azure Storage (ADLS), procédez comme suit :
Commentez la ligne suivante :
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"Ne commentez pas la ligne suivante :
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
Connect an external query engine with data policies enforced¶
Pour vous connecter avec des politiques de protection des données appliquées, consultez Connecter Spark aux tables Iceberg.
Step 7: Query Iceberg tables¶
Cette étape fournit les exemples de code suivants pour utiliser Apache Spark™ afin d’interroger des tables Iceberg :
Afficher les espaces de noms
Utiliser des espaces de noms
Afficher les tables
Interroger une table
Afficher les espaces de noms¶
spark.sql("show namespaces").show()
Utiliser l’espace de noms¶
spark.sql("use namespace <your_schema_name_in_snowflake>")
Afficher les tables¶
spark.sql("show tables").show()
Interroger une table¶
spark.sql("use namespace spark_demo")
spark.sql("select * from <your_table_name_in_snowflake>").show()
Considérations relatives à l’interrogation de tables Iceberg avec un moteur de requête externe¶
Tenez compte des points suivants lorsque vous interrogez des tables Iceberg avec un moteur de requête externe :
Pour les tables dans Snowflake :
Seules les tables Iceberg gérées par Snowflake sont prises en charge.
Les requêtes sur des tables Iceberg distantes ou gérées en externe, y compris les tables Delta Direct et Parquet Direct et les tables natives Snowflake, ne sont pas prises en charge.
Vous pouvez effectuer des requêtes, mais pas écrire dans des tables Iceberg.
Les lectures externes ne sont prises en charge que sur la version 2 ou antérieure d’Iceberg.
This feature is only supported for Snowflake-managed Iceberg tables that are stored on Amazon S3, Google Cloud, or Microsoft Azure for all public cloud regions. S3-compatible non-AWS storage is not yet supported.
Les tables protégées par les politiques de données à granularité fine suivantes sont accessibles via l’API REST Horizon Iceberg et en utilisant Apache Spark™ :
Masking policies
Politiques de masquage basées sur les balises
Politiques d’accès aux lignes
Les rôles Snowflake qui incluent le caractère tiret (-) dans le nom de rôle ne sont pas pris en charge lorsque vous accédez aux tables Iceberg via le point de terminaison Horizon Catalog.
L’octroi explicite de l’accès au point de terminaison Horizon Catalog à vos comptes de stockage n’est pas pris en charge. Nous vous recommandons d’utiliser une connexion privée pour sécuriser la connexion entre les moteurs externes et Horizon Catalog, ainsi qu’entre Horizon Catalog et le compte de stockage.