SDK do catálogo Snowflake

O Snowflake Catalog SDK está disponível para Apache Iceberg™ versões 1.2.0 ou posteriores.

Com o Snowflake Catalog SDK, você pode usar o mecanismo Apache Spark™ para consultar tabelas Iceberg.

Operações de catálogo com suporte

O SDK oferece suporte aos seguintes comandos para navegar nos metadados do Iceberg no Snowflake:

  • SHOW NAMESPACES

  • USE NAMESPACE

  • SHOW TABLES

  • USE DATABASE

  • USE SCHEMA

O SDK atualmente suporta apenas operações de leitura (instruções SELECT).

Instalação e conexão

Para instalar o Snowflake Catalog SDK, baixe a versão mais recente das bibliotecas Iceberg.

Antes de poder usar o Snowflake Catalog SDK, você precisa de um banco de dados Snowflake com uma ou mais tabelas Iceberg. Para criar uma tabela Iceberg, consulte Criar uma tabela Apache Iceberg™ no Snowflake.

Depois de estabelecer uma conexão e o SDK confirmar que os metadados do Iceberg estão presentes, o Snowflake acessa os dados do Parquet usando o volume externo associado à(s) tabela(s) Iceberg.

Exemplos

Para ler os dados da tabela com SDK, comece configurando as seguintes propriedades para seu cluster Spark:

spark-shell --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.2.0,net.snowflake:snowflake-jdbc:3.13.28
# Configure a catalog named "snowflake_catalog" using the standard Iceberg SparkCatalog adapter
--conf spark.sql.catalog.snowflake_catalog=org.apache.iceberg.spark.SparkCatalog
# Specify the implementation of the named catalog to be Snowflake's Catalog implementation
--conf spark.sql.catalog.snowflake_catalog.catalog-impl=org.apache.iceberg.snowflake.SnowflakeCatalog
# Provide a Snowflake JDBC URI with which the Snowflake Catalog will perform low-level communication with Snowflake services
--conf spark.sql.catalog.snowflake_catalog.uri='jdbc:snowflake://<account_identifier>.snowflakecomputing.com'
# Configure the Snowflake user on whose behalf to perform Iceberg metadata lookups
--conf spark.sql.catalog.snowflake_catalog.jdbc.user=<user_name>
# Provide the user password. To configure the credentials, you can provide either password or private_key_file.
--conf spark.sql.catalog.snowflake_catalog.jdbc.password=<password>
# Configure the private_key_file to use when connecting to Snowflake services; additional connection options can be found at https://docs.snowflake.com/en/user-guide/jdbc-configure.html
--conf spark.sql.catalog.snowflake_catalog.jdbc.private_key_file=<location of the private key>
Copy

Nota

Você pode usar qualquer parâmetro de conexão do driver JDBC compatível com Snowflake em sua configuração usando a seguinte sintaxe: --conf spark.sql.catalog.snowflake_catalog.jdbc.property-name=property-value

Depois de configurar seu cluster Spark, você poderá verificar quais tabelas estão disponíveis para consulta. Por exemplo:

spark.sessionState.catalogManager.setCurrentCatalog("snowflake_catalog");
spark.sql("SHOW NAMESPACES").show()
spark.sql("SHOW NAMESPACES IN my_database").show()
spark.sql("USE my_database.my_schema").show()
spark.sql("SHOW TABLES").show()
Copy

Então você pode selecionar uma tabela para consultar.

spark.sql("SELECT * FROM my_database.my_schema.my_table WHERE ").show()
Copy

Você pode usar a estrutura DataFrame com linguagens como Python e Scala para consultar dados.

df = spark.table("my_database.my_schema.my_table")
df.show()
Copy

Nota

Se você receber erros de leitura vetorizada ao executar consultas, poderá desativar as leituras vetorizadas para sua sessão configurando: spark.sql.iceberg.vectorization.enabled=false. Para continuar usando leituras vetorizadas, você pode definir o parâmetro STORAGE_SERIALIZATION_POLICY.

Armazenamento em cache de consulta

Quando você emite uma consulta, o Snowflake armazena o resultado em cache dentro de um determinado período (90 segundos por padrão). Você pode ter latência até esse período. Se você planeja acessar dados programaticamente para fins de comparação, defina a propriedade spark.sql.catalog..cache-enabled como false para desativar o armazenamento em cache.

Se seu aplicativo for projetado para tolerar uma quantidade específica de latência, você poderá usar a seguinte propriedade para especificar o período de latência: spark.sql.catalog..cache.expiration-interval-ms.

Limitações

As seguintes limitações se aplicam ao Snowflake Catalog SDK e estão sujeitas a alterações:

  • O SDK atualmente suporta apenas operações de leitura (instruções SELECT).

  • Apenas o Apache Spark é compatível com a leitura de tabelas Iceberg.

  • Você não pode usar SDK para acessar tabelas Snowflake que não sejam Iceberg.