Consultar tabelas Apache Iceberg™ com um mecanismo externo por meio do 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.
Para consultar tabelas Iceberg gerenciadas pelo Snowflake com um mecanismo de consulta externo, você pode usar este recurso em vez de sincronizar tabelas Iceberg gerenciadas pelo Snowflake com o Snowflake Open Catalog. Para obter mais informações sobre o Open Catalog, consulte Visão geral do Snowflake Open Catalog.
Ao conectar um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog, você pode executar as seguintes tarefas:
Usar qualquer mecanismo de consulta externo compatível com o protocolo aberto do REST Iceberg para consultar essas tabelas, como o Apache Spark™.
Consultar quaisquer tabelas Iceberg gerenciadas pelo Snowflake, existentes ou novas, em uma conta Snowflake nova ou existente, usando um único ponto de extremidade do Horizon Catalog.
Consultar as tabelas usando seus usuários, funções, políticas e autenticação existentes no Snowflake.
Usar credenciais fornecidas.
Para obter mais informações sobre o Snowflake Horizon Catalog, consulte Catálogo Snowflake Horizon.
O diagrama a seguir mostra mecanismos de consulta externos lendo tabelas Iceberg gerenciadas pelo Snowflake por meio do Horizon Catalog e o Snowflake lendo e gravando nessas tabelas:
Faturamento¶
A REST API Iceberg do Catálogo Horizon está disponível em todas as edições do Snowflake.
As solicitações de API são faturadas como 0,5 crédito por milhão de chamadas e cobradas como serviços de nuvem.
Para acesso a dados entre regiões, aplicam-se as tarifas padrão de saída de dados entre regiões, conforme indicado na Tabela de consumo de serviços do Snowflake.
Nota
Os clientes não serão cobrados até que esse recurso esteja disponível para o público em geral.
Antes de começar¶
Recupere o identificador da conta Snowflake que contém as tabelas Iceberg que você deseja consultar. Para obter instruções, consulte Identificadores de conta. Você especifica esse identificador ao conectar um mecanismo de consulta externo às suas tabelas Iceberg.
Dica
Para obter o identificador da sua conta usando SQL, você pode executar o seguinte comando:
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
Conectividade privada (opcional)¶
Para conectividade segura, considere configurar a conectividade privada de Entrada e Saída para sua conta Snowflake ao acessar o ponto de extremidade do Horizon Catalog.
Nota
A conectividade privada é compatível apenas com tabelas Iceberg gerenciadas pelo Snowflake e armazenadas no Amazon S3 ou Armazenamento do Azure (ADLS).
Fluxo de trabalho para consultar tabelas Iceberg usando um mecanismo de consulta externo¶
Para consultar tabelas Iceberg usando um mecanismo de consulta externo, siga estas etapas:
Criar tabelas Iceberg.
Configurar o controle de acesso.
Obter um token de acesso para autenticação.
Verify access token permissions.
(Opcional) Configurar políticas de proteção de dados.
Conectar um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog.
Consultar tabelas Iceberg.
Etapa 1: Criar tabelas Iceberg¶
Importante
Se você já tem tabelas Iceberg gerenciadas pelo Snowflake que deseja consultar, pode pular esta etapa.
Nesta etapa, você cria tabelas Iceberg gerenciadas pelo Snowflake que usam o Snowflake como catálogo, para que possa consultá-las com um mecanismo de consulta externo. Para obter instruções, consulte os seguintes tópicos:
Tutorial: Crie sua primeira tabela Apache Iceberg™: Um tutorial que mostra como criar um banco de dados, criar uma tabela Iceberg gerenciada pelo Snowflake e carregar dados na tabela.
Criar uma tabela Iceberg gerenciada pelo Snowflake: Código de exemplo para criar uma tabela Iceberg gerenciada pelo Snowflake.
Etapa 2: Configurar o controle de acesso¶
Importante
Funções do Snowflake que incluem o caractere hífen (-) no nome não são compatíveis durante o acesso a tabelas Iceberg por meio do ponto de extremidade do Horizon Catalog.
Se você já tiver funções configuradas com acesso às tabelas Iceberg que deseja consultar, poderá ignorar esta etapa.
Nesta etapa, você configura o controle de acesso para as tabelas Iceberg gerenciadas pelo Snowflake que deseja consultar com um mecanismo de consulta externo. Por exemplo, você pode configurar as seguintes funções no Snowflake:
Função DATA_ENGINEER, que tem acesso a todos os esquemas e a todas as tabelas Iceberg gerenciadas pelo Snowflake em um banco de dados.
Função DATA_ANALYST, que tem acesso a um esquema no banco de dados e somente a duas tabelas Iceberg gerenciadas pelo Snowflake dentro desse esquema.
Para obter instruções, consulte Configuração do controle de acesso. Para obter mais informações sobre o controle de acesso no Snowflake, consulte Visão geral do controle de acesso.
Etapa 3: Obter um token de acesso para autenticação¶
Nesta etapa, você obtém um token de acesso, necessário para autenticar-se no ponto de extremidade do Horizon Catalog para sua conta Snowflake. Você precisa obter um token de acesso para cada usuário (seja ele de serviço ou humano) e função configurada com acesso às tabelas Iceberg gerenciadas pelo Snowflake. Por exemplo, você precisa obter um token de acesso para um usuário com a função DATA_ENGINEER e outro usuário com a função DATA_ANALYST.
You specify this access token later when you connect an external query engine to Iceberg tables through Horizon Catalog.
Você pode obter um token de acesso usando uma das seguintes opções de autenticação:
OAuth externo¶
If you’re using External OAuth, generate an access token for your identity provider. For instructions, see Visão geral de External OAuth.
Nota
Para o OAuth externo, como alternativa, você pode configurar sua conexão com o mecanismo com atualização automática de token em vez de especificar um token de acesso.
Autenticação de pares de chaves¶
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:
Etapa 1: Configurar autenticação de par de chaves¶
Nesta etapa, você executa as seguintes tarefas:
Gerar uma chave privada
Geração de uma chave pública
Armazenamento das chaves públicas e privadas com segurança
Conceder o privilégio de atribuição de chave pública a um usuário Snowflake
Atribuição da chave pública a um usuário do Snowflake
Verificação da impressão digital da chave pública do usuário
Para obter instruções, consulte Configuração da autenticação do par de chaves.
Etapa 2: Conceder uma função ao usuário¶
Execute o comando GRANT ROLE para conceder a função do Snowflake que tem privilégios nas tabelas que você deseja consultar ao usuário com autenticação de par de chaves. Por exemplo, para conceder a função ENGINEER ao usuário my_service_user, execute o seguinte comando:
GRANT ROLE ENGINEER to user my_service_user;
Etapa 3: Gerar um JSON Web Token (JWT)¶
Nesta etapa, você usa o SnowSQL para gerar um JSON Web Token (JWT) para autenticação de par de chaves.
Nota
Você deve ter o SnowSQL instalado em sua máquina.
Como alternativa, você pode usar Python, Snowflake CLI, Java ou Node.js para gerar um JWT. Para obter um exemplo, consulte as seguintes seções:
Use o SnowSQL para gerar um JWT:
snowsql --private-key-path "<private_key_file>" \
--generate-jwt \
-h "<account_identifier>.snowflakecomputing.com" \
-a "<account_locator>" \
-u "<user_name>"
Onde:
<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 Antes de começar. An example of an account identifier ismyorg-myaccount.<account_locator>é o localizador da sua conta Snowflake.Para encontrar o localizador da conta, consulte Como localizar as informações da sua conta Snowflake no Snowsight e confira o localizador da conta na caixa de diálogo Account Details.
<user_name>é o nome de um usuário do Snowflake que recebeu a chave pública.
Step 4: Generate an access token¶
Importante
Para gerar um token de acesso, você deve primeiro gerar um JWT. Primeiro você deve gerar um JWT porque você usa esse JWT para gerar o token de acesso.
Use um comando curl para gerar um token de acesso:
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>'
Onde:
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Antes de começar. 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>é o JWT que você gerou na etapa anterior.
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.
Etapa 1: Gerar um PAT¶
Para obter instruções sobre como configurar e gerar um PAT, consulte Uso de tokens de acesso programático para autenticação.
Step 2: Generate an access token for your PAT¶
Nesta etapa, você gera um token de acesso para seu PAT.
Atenção
Você só especifica o token de acesso gerado nesta etapa para verificar as permissões do seu PAT. Quando você conectar um mecanismo de consulta externo às tabelas Iceberg, deverá especificar o PAT que gerou na etapa anterior, e não o token de acesso que você gera nesta etapa.
Use um comando curl para gerar um token de acesso para seu 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>'
Onde:
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Antes de começar. 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>é o valor do PAT que você gerou na etapa anterior.
Step 4: Verify access token permissions¶
Nesta etapa, você verifica as permissões do token de acesso obtido na etapa anterior.
Verificar o acesso ao ponto de extremidade IRC no Horizon¶
Use um comando curl para verificar se você tem permissão para acessar o ponto de extremidade IRC no 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"
Onde:
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Antes de começar. 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>é o nome do banco de dados que você deseja consultar.Importante
Você deve especificar o nome do banco de dados com todas as letras maiúsculas, mesmo que ele tenha sido criado com letras minúsculas.
Exemplo de valor de retorno:
{
"defaults": {
"default-base-location": ""
},
"overrides": {
"prefix": "MY-DATABASE"
}
}
Recuperar os metadados de uma tabela¶
Você também pode fazer uma solicitação GET para recuperar os metadados de uma tabela. O Snowflake usa a operação loadTable para carregar metadados da tabela do seu catálogo 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"
Onde:
<account_identifier>is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. To find the account identifier, see Antes de começar. An example of an account identifier ismyorg-myaccount.<database_name>é o banco de dados da tabela com os metadados que você deseja recuperar.<namespace_name>é o namespace da tabela com os metadados que você deseja recuperar.<table_name>é a tabela com os metadados que você deseja recuperar.<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.
Importante
Você deve especificar o banco de dados, os namespaces e os nomes das tabelas com todas as letras maiúsculas, mesmo que o objeto tenha sido criado com letras minúsculas.
Etapa 5 (opcional): Configurar políticas de proteção de dados¶
Nesta etapa, você configura as políticas de proteção de dados para tabelas Iceberg. Se você não tiver tabelas que precisa proteger com as políticas de dados do Snowflake, poderá prosseguir para a próxima etapa.
Nota
Tabelas protegidas por políticas de proteção de dados podem ser acessadas pela API REST do Horizon Iceberg e usando o Apache Spark™.
Para obter instruções sobre como configurar políticas de proteção de dados, consulte Configurar políticas de proteção de dados em tabelas Iceberg acessadas por meio da API REST do Horizon Iceberg e usando o 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.
Os mecanismos externos usam o ponto de extremidade da REST Apache Iceberg™ exposto pelo Snowflake. Para sua conta Snowflake, esse ponto de extremidade tem o seguinte formato:
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:
Conectar-se usando OAuth externo ou autenticação por par de chaves.¶
Use uma das seguintes configurações para a conexão:
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.
Este código não aplica políticas de proteção de dados:
# 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
Onde:
<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 Antes de começar.<your_access_token>é o seu token de acesso que você obteve. Para obtê-lo, consulte Etapa 3: Obter um token de acesso para autenticação.Nota
Para o OAuth externo, como alternativa, você pode configurar sua conexão com o mecanismo com atualização automática de token em vez de especificar um token de acesso.
<database_name>é o nome do banco de dados em sua conta Snowflake que contém as tabelas Iceberg gerenciadas pelo Snowflake que você deseja consultar.Nota
A propriedade
.warehouseno Spark espera o nome do seu banco de dados Snowflake, não o nome do seu warehouse Snowflake.<role>é a função no Snowflake que está configurada com acesso às tabelas Iceberg que você deseja consultar. Por exemplo: DATA_ENGINEER.
Importante
Por padrão, o exemplo de código está configurado para tabelas Apache Iceberg™ armazenadas no Amazon S3. Se suas tabelas Iceberg estiverem armazenadas no Armazenamento do Azure (ADLS), execute as seguintes etapas:
Comente a seguinte linha:
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"Remova o comentário da seguinte linha:
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
Connect an external query engine with data policies enforced¶
Para conectar com as políticas de proteção de dados aplicadas, consulte Conectar o Spark a tabelas Iceberg.
Conecte-se usando um token de acesso programático (PAT)¶
Use uma das seguintes configurações para a conexão:
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.
Este código não aplica políticas de proteção de dados:
# 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
Onde:
<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 Antes de começar.<your_PAT_token>é o PAT que você obteve. Para obtê-lo, consulte Etapa 3: Obter um token de acesso para autenticação.<role>é a função no Snowflake que está configurada com acesso às tabelas Iceberg que você deseja consultar. Por exemplo: DATA_ENGINEER.<database_name>é o nome do banco de dados em sua conta Snowflake que contém as tabelas Iceberg gerenciadas pelo Snowflake que você deseja consultar.Nota
A propriedade
.warehouseno Spark espera o nome do seu banco de dados Snowflake, não o nome do seu warehouse Snowflake.
Importante
Por padrão, o exemplo de código está configurado para tabelas Apache Iceberg™ armazenadas no Amazon S3. Se suas tabelas Iceberg estiverem armazenadas no Armazenamento do Azure (ADLS), execute as seguintes etapas:
Comente a seguinte linha:
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"Remova o comentário da seguinte linha:
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
Connect an external query engine with data policies enforced¶
Para conectar com as políticas de proteção de dados aplicadas, consulte Conectar o Spark a tabelas Iceberg.
Step 7: Query Iceberg tables¶
Esta etapa fornece os seguintes exemplos de código para usar o Apache Spark™ para consultar tabelas Iceberg:
Mostrar namespaces
Usar namespaces
Exibição de tabelas
Consulta a uma tabela
Mostrar namespaces¶
spark.sql("show namespaces").show()
Como usar um namespace¶
spark.sql("use namespace <your_schema_name_in_snowflake>")
Exibição de tabelas¶
spark.sql("show tables").show()
Consulta a uma tabela¶
spark.sql("use namespace spark_demo")
spark.sql("select * from <your_table_name_in_snowflake>").show()
Considerações para consultar tabelas Iceberg com um mecanismo de consulta externo¶
Considere os seguintes itens ao consultar tabelas Iceberg com um mecanismo de consulta externo:
Para tabelas no Snowflake:
Somente tabelas Iceberg gerenciadas pelo Snowflake são compatíveis.
Não é possível consultar tabelas Iceberg remotas ou gerenciadas externamente, incluindo tabelas Delta Direct e Parquet Direct e tabelas nativas do Snowflake.
Você pode consultar, mas não pode gravar em tabelas Iceberg.
As leituras externas são compatíveis apenas com a versão 2 ou anterior do 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.
Tabelas protegidas pelas seguintes políticas de dados refinadas podem ser acessadas pela API REST do Horizon Iceberg e usando o Apache Spark™:
Masking policies
Políticas de mascaramento baseadas em tags
Políticas de acesso a linhas
Funções do Snowflake que incluem o caractere hífen (-) no nome não são compatíveis durante o acesso a tabelas Iceberg por meio do ponto de extremidade do Horizon Catalog.
Não é possível conceder explicitamente acesso do ponto de extremidade do Horizon Catalog às suas contas de armazenamento. Recomendamos que você use conectividade privada para conectividade segura de mecanismos externos ao Horizon Catalog e do Horizon Catalog à conta de armazenamento.