Consultar tabelas Apache Iceberg™ com um mecanismo externo por meio do Snowflake Horizon Catalog¶
Esta versão preliminar introduz suporte para consultar tabelas Apache Iceberg™ gerenciadas pelo Snowflake usando um mecanismo de consulta externo por meio do Snowflake Horizon Catalog. Para garantir essa interoperabilidade com mecanismos externos, o Apache Polaris™ (em incubação) está integrado ao Horizon Catalog. Além disso, o Horizon Catalog expõe as APIs REST Apache Iceberg™. Essas APIs permitem ler as tabelas usando mecanismos de consulta externos.
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.
Verificar as permissões do token de acesso.
(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.
Você especificará esse token de acesso posteriormente quando conectar um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog.
Você pode obter um token de acesso usando uma das seguintes opções de autenticação:
OAuth externo¶
Se você estiver usando o OAuth externo, gere um token de acesso para seu provedor de identidade. Para obter instruções, consulte 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¶
Se você usar a autenticação por par de chaves, para obter um token de acesso, você assina um token da Web JSON (JWT) com sua chave privada.
As etapas a seguir abordam como gerar um token de acesso para autenticação de par de chaves:
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.<accountidentifier>``is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. Para encontrar o identificador da conta, consulte Antes de começar. Um exemplo de identificador da conta émyorg-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.
Etapa 4: Gerar um token de acesso¶
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:
<accountidentifier>``is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. Para encontrar o identificador da conta, consulte Antes de começar. Um exemplo de identificador da conta émyorg-myaccount.<role>é a função do Snowflake que recebeu acesso às tabelas Iceberg, como ENGINEER.<JWT_token>é o JWT que você gerou na etapa anterior.
Token de acesso programático (PAT)¶
Se você usar PATs, gere um PAT para autenticação.
Primeiro, você gera um PAT, que usa para conectar um mecanismo de consulta externo às tabelas Iceberg. Em seguida, você gera um token de acesso, que só usa para verificar as permissões do seu 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.
Etapa 2: Gerar um token de acesso para o 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:
<accountidentifier>``is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. Para encontrar o identificador da conta, consulte Antes de começar. Um exemplo de identificador da conta émyorg-myaccount.<role>é a função do Snowflake concedida ao seu PAT e que tem acesso às tabelas Iceberg que você deseja consultar, como ENGINEER.<PAT_token>é o valor do PAT que você gerou na etapa anterior.
Etapa 4: Verificar as permissões do token de acesso¶
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:
<accountidentifier>``is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. Para encontrar o identificador da conta, consulte Antes de começar. Um exemplo de identificador da conta émyorg-myaccount.<access_token>é o token de acesso que você gerou. Se você usa um PAT, esse valor é o token de acesso gerado, e não o token de acesso pessoal (PAT).<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:
<accountidentifier>``is the account identifier for your Snowflake account, in the format<organization_name>-<account_name>. Para encontrar o identificador da conta, consulte Antes de começar. Um exemplo de identificador da conta émyorg-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>é o token de acesso que você gerou. Se você usa um PAT, esse valor é o token de acesso gerado, e não o token de acesso pessoal (PAT).
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™.
Etapa 6: Conectar um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog¶
Nesta etapa, você conecta um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog. Com essa conexão, você pode consultar as tabelas usando o mecanismo de consulta externo.
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
O código de exemplo nesta etapa mostra como configurar uma conexão no Spark e está em PySpark. Para obter mais informações, consulte as páginas a seguir:
Conectar-se usando OAuth externo ou autenticação por par de chaves.¶
Use uma das seguintes configurações para a conexão:
Para acessar tabelas Iceberg que não têm políticas de proteção de dados do Snowflake configuradas, conecte um mecanismo de consulta externo sem aplicar políticas de dados.
Para acessar tabelas Iceberg que têm políticas de acesso a linhas e de mascaramento do Snowflake configuradas, conecte um mecanismo de consulta externo com políticas de dados aplicadas.
Conectar um mecanismo de consulta externo sem aplicar políticas de dados¶
Para conectar o mecanismo de consulta externo a tabelas Iceberg usando OAuth externo ou autenticação por par de chaves, use o código de exemplo abaixo.
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>é o identificador da sua conta Snowflake que contém as tabelas Iceberg que você deseja consultar. Para encontrar esse identificador, consulte 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}"
Conectar um mecanismo de consulta externo com políticas de dados aplicadas¶
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:
Se você não usar políticas de proteção de dados com as tabelas Iceberg que deseja consultar, use a configuração Conectar um mecanismo de consulta externo sem aplicar políticas de dados.
Se você usar políticas de proteção de dados com as tabelas Iceberg que deseja consultar, use a configuração Conectar um mecanismo de consulta externo com políticas de dados aplicadas.
Conectar um mecanismo de consulta externo sem aplicar políticas de dados¶
Para conectar o mecanismo de consulta externo a tabelas Iceberg usando um token de acesso programático (Programmatic Access Token, PAT), use o código de exemplo a seguir.
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>é o identificador da sua conta Snowflake que contém as tabelas Iceberg que você deseja consultar. Para encontrar esse identificador, consulte 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}"
Conectar um mecanismo de consulta externo com políticas de dados aplicadas¶
Para conectar com as políticas de proteção de dados aplicadas, consulte Conectar o Spark a tabelas Iceberg.
Etapa 7: Consultar tabelas Iceberg¶
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.
Esse recurso é compatível apenas com tabelas Iceberg gerenciadas pelo Snowflake armazenadas no Amazon S3, Google Cloud ou Microsoft Azure para todas as regiões de nuvem pública. O armazenamento não AWS compatível com S3 ainda não é aceito.
Tabelas protegidas pelas seguintes políticas de dados refinadas podem ser acessadas pela API REST do Horizon Iceberg e usando o Apache Spark™:
Políticas de mascaramento
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.