Configurações do Snowpipe Streaming com arquitetura de alto desempenho

Este guia descreve as configurações para o cliente Snowpipe Streaming de alto desempenho que estão disponíveis em SDKs Java e Python. Há dois tipos distintos de configuração:

  • Variáveis de ambiente no âmbito do processo: Variáveis que controlam o registro em log e as métricas para todo o aplicativo em execução e devem ser definidas antes da inicialização do cliente.

  • Propriedades do lado do cliente: Propriedades que definem a conexão segura e o destino da ingestão, por exemplo, url, user e private_key, e são configuradas para um objeto de cliente específico, normalmente por meio de um mapa em linha ou de um arquivo profile.json.

Um único aplicativo pode executar vários objetos de cliente. Cada objeto tem as próprias propriedades do lado do cliente, mas todos compartilham as mesmas configurações de variável de ambiente no âmbito do processo para registro em log e métricas.

A arquitetura de alto desempenho exige que o cliente seja explicitamente vinculado a um objeto PIPE específico, que gerencia o esquema, as transformações e a ingestão na tabela de destino.

Variáveis de ambiente

Essas configurações controlam o comportamento no âmbito do processo, como o registro em log e a coleta de métricas, e devem ser definidas como variáveis de ambiente antes que o objeto de cliente seja inicializado. A tabela a seguir mostra as variáveis de ambiente que se aplicam a todos os objetos do cliente Snowpipe Streaming dentro do mesmo processo:

Variável

Descrição

Valor padrão

SS_ENABLE_METRICS

Definir como TRUE para habilitar o servidor de métricas Prometheus integrado.

FALSE

SS_METRICS_PORT

A porta usada para expor as métricas.

50000

SS_METRICS_IP

O endereço IP em que o servidor de métricas está hospedado.

127.0.0.1

SS_LOG_LEVEL

O nível mínimo de registro em log a ser gerado.

info (opções: info, warn, error)

Propriedades obrigatórias

O SDK de alto desempenho exige que várias propriedades estabeleçam a conexão segura e o destino de ingestão específico (o PIPE). A tabela a seguir mostra as propriedades de conexão e autenticação de usuário necessárias:

Propriedade

Descrição

url

URL para acessar sua conta Snowflake, incluindo o identificador da sua conta. O protocolo (https://) e o número da porta são opcionais.

user

Nome de login do usuário da conta Snowflake.

account

Identificador da conta Snowflake; por exemplo, xy12345.

Se authorization_type está definido como JWT, que é o padrão, forneça o conteúdo da chave ou o caminho do arquivo da chave, conforme mostrado na tabela a seguir:

Propriedade

Descrição

private_key

Conteúdo da chave privada usado para autenticar o usuário. Inclua apenas o conteúdo da chave, sem cabeçalho, rodapé ou quebras de linha.

private_key_file

Caminho do arquivo para a chave privada; por exemplo, rsa_key.p8. Esta é uma alternativa para fornecer o conteúdo da chave diretamente.

Propriedades opcionais

A tabela a seguir mostra as propriedades opcionais de SDK de alto desempenho:

Propriedade

Descrição

role

Função de controle de acesso a ser usada para a sessão após a conexão ao Snowflake.

authorization_type

Propriedade que configura o método de autenticação. As opções são: JWT (autenticação de par de chaves, padrão).

Externalização de segredos

A Snowflake recomenda fortemente que você externalize os segredos, como private_key e credenciais OAuth, e armazene-os em um serviço de gerenciamento de chaves; por exemplo, AWS KMS.

Exemplos de configuração

Os exemplos a seguir mostram configurações de variáveis de ambiente e do lado do cliente.

Configuração do lado do cliente por meio de um arquivo profile.json

O exemplo a seguir mostra como definir propriedades do lado do cliente:

// profile.json
{
  "authorization_type": "JWT",
  "url": "https://<account_identifier>.snowflakecomputing.com",
  "user": "MY_SNOWFLAKE_USER",
  "account": "XY12345",
  "private_key_file": "/path/to/rsa_key.p8",
  "role": "MY_INGEST_ROLE"
}
Copy

Configuração do lado do cliente fornecida em linha

Os exemplos a seguir mostram como definir propriedades do lado do cliente diretamente no código:

Exemplo em Python

config = {
    "authorization_type": "JWT",
    "url": "https://<account_identifier>.snowflakecomputing.com",
    "user": "MY_SNOWFLAKE_USER",
    "account": "XY12345",
    "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
}
# ... code to initialize client with 'config'
Copy

Exemplo em Java

Map<String, Object> config = new HashMap<>();
config.put("authorization_type", "JWT");
config.put("url", "https://<account_identifier>.snowflakecomputing.com");
config.put("user", "MY_SNOWFLAKE_USER");
config.put("account", "XY12345");
config.put("private_key_file", "/path/to/rsa_key.p8");
config.put("role", "MY_INGEST_ROLE");
// ... code to initialize client with 'config'
Copy

Configuração de variáveis de ambiente

Os exemplos a seguir mostram como definir variáveis de ambiente no âmbito do processo no shell antes de executar o aplicativo:

Linux ou macOS (Bash ou Zsh)

# Set the log level for the entire application process to 'warn'
export SS_LOG_LEVEL=warn

# Change the IP for metrics to a specific loopback address
export SS_METRICS_IP=127.0.0.5

# Now run your application
Copy

Windows (prompt de comando)

# Set the log level for the entire application process to 'warn'
set SS_LOG_LEVEL=warn

# Change the metrics port
set SS_METRICS_PORT=55000

# Now run your application
Copy