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>
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()
Então você pode selecionar uma tabela para consultar.
spark.sql("SELECT * FROM my_database.my_schema.my_table WHERE ").show()
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()
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.