Tutorial: introdução à API REST do Snowpipe Streaming usando cURL e um JWT:¶
Nota
Recomendamos que você comece com oSDK do Snowpipe Streaming sobre API REST para se beneficiar do melhor desempenho e da experiência de introdução.
Este guia mostra como transmitir dados para o Snowflake usando a API REST do Snowpipe Streaming e um token Web JSON (JWT) gerado com SnowSQL.
Pré-requisitos¶
Antes de começar, certifique-se de ter os seguintes itens:
Usuário e objetos do Snowflake:
Um usuário do Snowflake configurado para autenticação de par de chaves. Registre sua chave pública usando o seguinte comando SQL:
Um banco de dados, um esquema e uma tabela de destino do Snowflake para ingestão de streaming. Você pode criá-los usando os seguintes comandos SQL e substituindo os espaços reservados, como MY_DATABASE, MY_SCHEMA e MY_TABLE, pelos nomes desejados:
ACCOUNT_IDENTIFIER:
Sugerimos o uso do Formato 1 para o ACCOUNT_IDENTIFIER, que usa o nome da conta da sua organização; por exemplo, myorg-account123. Para obter mais informações sobre o formato, consulte Identificadores de conta.
Ferramentas instaladas:
curl: Para fazer solicitações HTTP.jq: Para analisar respostas JSON.SnowSQL: Para executar comandos, o cliente de linha de comando do Snowflake.
JWT gerado:
gere seu JWT usando SnowSQL:
Cuidado
Armazene seu JWT com segurança. Evite expô-lo em logs ou scripts.
Instruções passo a passo¶
Conclua as seguintes etapas para transmitir dados para o Snowflake.
Etapa 1: Definir variáveis de ambiente¶
Configure as variáveis de ambiente necessárias para sua conta Snowflake e a operação de streaming. Observe que a variável PIPE tem como alvo o canal de streaming padrão associado à sua tabela.
Etapa 2: Descobrir o host de ingestão¶
Importante
Se o nome de sua conta Snowflake contiver sublinhados (por exemplo, MY_ACCOUNT), um problema conhecido pode causar um erro interno ao chamar o serviço de ingestão.
Você deve substituir todos os sublinhados por traços no INGEST_HOST antes de gerar o token com escopo. Este formato convertido (com traços) deve ser usado para todas as chamadas de API REST subsequentes, incluindo a geração do próprio token com escopo.
Por exemplo, se o nome do host retornado for my_account.region.ingest.snowflakecomputing.com, você deve alterá-lo para my-account.region.ingest.snowflakecomputing.com em todas chamadas de API REST subsequentes.
O host de ingestão é o ponto de extremidade para o streaming de dados. Descobrir o host de ingestão usando seu JWT:
Obtenha um token com escopo para autorizar operações no host de ingestão:
Etapa 3: Abrir o canal¶
Abrir um canal de streaming para iniciar a ingestão de dados:
Etapa 4: Anexar uma linha de dados¶
Anexar uma única linha de dados ao canal aberto.
4.1 Extrair tokens de continuação e deslocamento¶
Esses tokens são cruciais para manter o estado da sua sessão de streaming.
4.2 Criar linha de amostra¶
Gerar uma linha de dados de amostra no formato NDJSON:
4.3 Acrescentar linha¶
Enviar a linha de amostra para o canal de streaming:
Nota
Este exemplo inclui o cabeçalho Content-Encoding: zstd para demonstrar suporte à compactação. Para este exemplo simples com dados não compactados, você pode omitir esse cabeçalho. Ao enviar dados compactados, especifique zstd ou gzip para corresponder ao formato de compactação da sua carga útil.
Importante
Após cada operação de acréscimo, você deverá atualizar o
continuationTokenpara a próxima chamada de acréscimo. A resposta da chamada de acréscimo de linhas contém um camponext_continuation_tokenque você deve usar para fazer suas atualizações.O sucesso da operação de acréscimo confirma apenas que o serviço recebeu os dados, e não que eles persistem na tabela. Execute a etapa seguinte para verificar a persistência antes de consultar ou passar para o próximo lote.
4.4 Verificar a persistência dos dados e o deslocamento confirmado usando getChannelStatus¶
Conclua essa etapa crítica para garantir a confiabilidade do aplicativo. Não há garantia de que os dados serão persistentes até avançar o committedOffset. Para confirmar que as linhas que você acabou de anexar persistem com sucesso, use getChannelStatus.
Verifique o status atual do seu canal de streaming:
Verificação
Você deve garantir que o committedOffset retornado na resposta seja maior ou igual ao deslocamento das linhas que acabou de anexar. Somente após o avanço de:code:committedOffset você poderá ter certeza de que os dados estão disponíveis com segurança na tabela.
4.5 Consultar se os dados persistiram na tabela¶
Depois de confirmar que o committedOffset avançou a etapa anterior (4.4), você poderá consultar para saber se eles foram ingeridos na tabela do Snowflake.
Execute a seguinte consulta SQL no Snowflake:
Etapa 5 (opcional): Limpeza¶
Remover arquivos temporários e desconfigurar variáveis de ambiente:
Solução de problemas¶
HTTP 401 (Não autorizado): verifique se o seu token JWT é válido e não expirou. Se necessário, gere-o novamente.
HTTP 404 (Não encontrado): verifique novamente se os nomes do banco de dados, esquema, pipe e canal estão escritos corretamente e existem na sua conta Snowflake.
Sem host de ingestão: certifique-se de que o URL do host do plano de controle esteja correto e acessível.