SDK do catálogo Iceberg do Snowflake

Este tópico aborda como configurar e usar o SDK do catálogo Iceberg do Snowflake. O SDK está disponível para versões do Apache Iceberg 1.2.0 ou posteriores.

Com o SDK do catálogo Iceberg do Snowflake, 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 SDK do catálogo Iceberg do Snowflake, faça download da versão mais recente das bibliotecas Iceberg.

Antes de poder usar o SDK do catálogo Iceberg do Snowflake, você precisa de um banco de dados Snowflake com uma ou mais tabelas Iceberg. Para criar uma tabela Iceberg, consulte Criação de uma tabela Iceberg.

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, trabalhe com o representante da equipe de conta para definir um parâmetro de conta.

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 SDK do catálogo Iceberg do Snowflake e estão sujeitas a alterações:

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

  • Consultas do Time Travel não são suportadas.

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