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:

Diagrama que 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();
Copy

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:

  1. Criar tabelas Iceberg.

  2. Configurar o controle de acesso.

  3. Obter um token de acesso para autenticação.

  4. Verificar as permissões do token de acesso.

  5. (Opcional) Configurar políticas de proteção de dados.

  6. Conectar um mecanismo de consulta externo às tabelas Iceberg por meio do Horizon Catalog.

  7. 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:

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:

  1. Configurar autenticação de par de chaves

  2. Conceder uma função ao usuário

  3. Gerar um JSON Web Token (JWT)

  4. Gerar um token de acesso

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;
Copy

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

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>"
Copy

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>'
Copy

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>'
Copy

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"
Copy

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"
Copy

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
Copy

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:

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
Copy

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 .warehouse no 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:

  1. Comente a seguinte linha: f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"

  2. 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

Conecte-se usando um token de acesso programático (PAT)

Use uma das seguintes configurações para a conexão:

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
Copy

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 .warehouse no 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:

  1. Comente a seguinte linha: f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"

  2. 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

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()
Copy

Como usar um namespace

spark.sql("use namespace <your_schema_name_in_snowflake>")
Copy

Exibição de tabelas

spark.sql("show tables").show()
Copy

Consulta a uma tabela

spark.sql("use namespace spark_demo")
spark.sql("select * from <your_table_name_in_snowflake>").show()
Copy

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.