Tutorial: introdução à arquitetura de alto desempenho do Snowpipe Streaming SDK

Este tutorial fornece instruções passo a passo para configurar e executar um aplicativo de demonstração que utiliza a nova arquitetura de alto desempenho com o snowpipe-streaming SDK.

Pré-requisitos

Antes de executar a demonstração, certifique-se de atender aos seguintes pré-requisitos:

  • Conta Snowflake: Verifique se você tem acesso a uma conta Snowflake. Você precisará de um usuário com privilégios suficientes (por exemplo, ACCOUNTADMIN ou USERADMIN para a configuração inicial) para criar o usuário dedicado e a função personalizada detalhadas em Etapa 1: configure os objetos Snowflake.

  • Acesso à rede: certifique-se de que sua rede permite conectividade de saída para o Snowflake e o AWS S3. Ajuste as regras de firewall, se necessário, porque o SDK faz chamadas da API REST para o Snowflake e para o AWS S3.

  • Ambiente de desenvolvimento Java: instale o Java 11 ou posterior e o Maven para o gerenciamento de dependências.

  • Python instale o Python versão 3.9 ou posterior.

  • SDKs do Snowpipe Streaming e o código de exemplo: obtenha o SDK Java ou o SDK Python e baixe o código de amostra de sua linguagem preferida em Etapa 3: configure o projeto de demonstração.

Introdução

Esta seção descreve as etapas necessárias para configurar e executar o aplicativo de demonstração.

Etapa 1: configure os objetos Snowflake

Antes de usar o snowpipe-streaming SDK, você deve criar uma tabela de destino e um objeto PIPE dedicado em seu ambiente Snowflake. Diferentemente da arquitetura clássica, a arquitetura de alto desempenho exige um objeto PIPE para a ingestão de dados.

Gere um par de chaves para autenticação

Gere um par de chaves públicas e privadas para autenticação usando OpenSSL. Para obter mais informações, consulte Autenticação de pares de chaves e rotação de pares de chaves.

Execute os seguintes comandos em seu terminal para gerar as chaves:

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Copy
PUBK=$(cat ./rsa_key.pub | grep -v KEY- | tr -d '\012')
echo "ALTER USER MY_USER SET RSA_PUBLIC_KEY='$PUBK';"
Copy

Importante

Salve os arquivos rsa_key.p8 (chave privada) e rsa_key.pub (chave pública) gerados de forma segura. Eles serão usados nas etapas de autenticação subsequentes.

Crie um banco de dados, um esquema, uma tabela, um canal, e configure a autenticação do usuário

Run the following SQL commands in your Snowflake account (for example, using Snowsight or SnowSQL). Note that you will need a role with permissions to create users, roles, and databases (e.g., ACCOUNTADMIN or USERADMIN for the first few lines, and then switching to the new role). Replace placeholders like MY_USER, MY_ROLE, MY_DATABASE, etc., with your desired names.

-- 1. Create a dedicated role and user (Run with a highly-privileged role)
CREATE OR REPLACE USER MY_USER;
CREATE ROLE IF NOT EXISTS MY_ROLE;
GRANT ROLE MY_ROLE TO USER MY_USER;

-- 2. Set the public key for key-pair authentication
-- NOTE: Replace 'YOUR_FORMATTED_PUBLIC_KEY' with the output of the PUBK variable from the key generation step.
ALTER USER MY_USER SET RSA_PUBLIC_KEY='YOUR_FORMATTED_PUBLIC_KEY';

-- 3. Set the default role (Recommended)
ALTER USER MY_USER SET DEFAULT_ROLE=MY_ROLE;

-- 4. Switch to the new role and create objects
USE ROLE MY_ROLE;
-- NOTE: You may also need to run USE WAREHOUSE YOUR_WH; here if a default warehouse isn't set.

-- Create database and schema
CREATE OR REPLACE DATABASE MY_DATABASE;
CREATE OR REPLACE SCHEMA MY_SCHEMA;

-- Create a target table
CREATE OR REPLACE TABLE MY_TABLE (
    data VARIANT,
    c1 NUMBER,
    c2 STRING
);

-- Create PIPE object for streaming ingestion
CREATE OR REPLACE PIPE MY_PIPE
AS COPY INTO MY_TABLE FROM (SELECT $1, $1:c1, $1:ts FROM TABLE(DATA_SOURCE(TYPE => 'STREAMING')));


-- 5. Configure authentication policy (Optional, but recommended for explicit control)
CREATE OR REPLACE AUTHENTICATION POLICY testing_auth_policy
  AUTHENTICATION_METHODS = ('KEYPAIR')
  CLIENT_TYPES = ('DRIVERS');

-- Apply authentication policy (if created)
ALTER USER MY_USER SET AUTHENTICATION POLICY testing_auth_policy;
Copy

Etapa 2: configure um perfil de autenticação

O aplicativo de demonstração requer um arquivo profile.json para armazenar as configurações de conexão, inclusive os detalhes de autenticação. O SDK usa autenticação de par de chaves para conexões seguras.

Crie um arquivo de configuração de perfil

Crie ou atualize o arquivo profile.json no diretório raiz do seu projeto de demonstração.

profile.json template

{
    "user": "MY_USER",
    "account": "your_account_identifier",
    "url": "https://your_account_identifier.snowflakecomputing.com:443",
    "private_key_file": "rsa_key.p8",
    "role": "MY_ROLE"
}
Copy

Substitua os espaços reservados:

Etapa 3: configure o projeto de demonstração

Adicionar a dependência JAR

Para incluir o SDK do Snowpipe Streaming, adicione a seguinte dependência ao pom.xml do Maven. O Maven baixa automaticamente o JAR do repositório público.

<dependency>
    <groupId>com.snowflake</groupId>
    <artifactId>snowpipe-streaming</artifactId>
    <version>YOUR_SDK_VERSION</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.18.1</version>
</dependency>
Copy

Importante

Substitua YOUR_SDK_VERSION pela versão específica disponível no Maven Central.

Baixe o código Java de amostra.

Coloque o arquivo de perfil

Certifique-se de que o arquivo profile.json que você configurou em Etapa 2: configure um perfil de autenticação está localizado no diretório raiz do seu projeto.

Etapa 4: use o exemplo de código fornecido e execute o aplicativo de demonstração

No seu terminal, navegue até o diretório raiz do projeto.

Criar e executar

  • Crie o projeto:

    mvn clean install
    
    Copy
  • Execute a classe principal:

    mvn exec:java -Dexec.mainClass="com.snowflake.snowpipestreaming.demo.Main"
    
    Copy

Etapa 5: verifique os dados

Após executar a demonstração, verifique os dados ingeridos no Snowflake:

SELECT COUNT(*) FROM MY_DATABASE.MY_SCHEMA.MY_TABLE;
SELECT * FROM MY_DATABASE.MY_SCHEMA.MY_TABLE LIMIT 10;
Copy