03 Carregar os dados — duas formas
Os mesmos 26,5 milhões de ticks carregados duas vezes: primeiro com ClickPipes, o pipeline gerenciado que você usaria em produção; depois, com uma única chamada a s3() — e quando escolher cada opção.
Os dados estão em um bucket S3 público, portanto nenhuma chave ou credencial é necessária — basta informar a URL. A transferência acontece no servidor, do S3 para o ClickHouse; os 26,5 milhões de registros não passam pelo seu notebook nem dependem do Wi-Fi do local.
Você carregará os mesmos 26,5 milhões de ticks de duas formas diferentes para conhecer ambas.
O método 1 usa ClickPipes, o pipeline gerenciado e guiado pela interface que você adotaria em
produção. O método 2 usa uma única linha de SQL — a maneira mais rápida de carregar dados durante
uma demonstração. Siga a ordem; um TRUNCATE entre os métodos mantém a contagem correta.
Método 1 — ClickPipes, a opção gerenciada para produção
ClickPipes é um serviço de ingestão totalmente gerenciado: aponte-o para o armazenamento de objetos ou para um stream, e ele continua carregando sem que você precise criar um conector. Este é o fluxo completo.
- No menu à esquerda, clique em Data sources e depois no botão Create ClickPipe.

Em Data sources também ficam as opções "Upload file" e "Add sample data".
- Em Select the data source, escolha Amazon S3 (no topo da lista Popular).

- Em Setup your ClickPipe connection, informe qualquer name, defina Authentication method → Public (o bucket é público) e cole o endereço abaixo em S3 file path:
https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquetDeixe Continuous ingestion desativado — é um arquivo único — e clique em Incoming data →.

- Em Incoming data, o ClickHouse mostra uma prévia do arquivo encontrado — você verá
fx/ticks.parquetcom 158,43 MB. Confirme File type → Parquet, deixe a compactação em Detect automatically e clique em Parse information →.

- Em Parse information, o ClickHouse mostra uma linha de exemplo e detecta as colunas. Em
Upload data to, selecione Existing table, escolha o Database que contém sua tabela
(normalmente
default) e defina Table →forex. Confira se os campos de origem (datetime,bid,ask,base,quote) correspondem às colunas de mesmo nome — o mapeamento deve ser automático. Deixe os campos extras_path/_file/_sizesem mapeamento. Depois, clique em Details and settings →.

A captura de tela mostra o banco techthai do apresentador — use o banco que contém a sua tabela.
- Em Details and settings, mantenha as Permissions padrão (o ClickPipes cria um usuário de gravação dedicado para você) e clique em Create ClickPipe.

Sem job Spark e sem carregador personalizado.
- Você volta para Data sources, onde o ClickPipe aparece. Em alguns segundos, o Status muda para Completed e Records mostra 26.488.218 — todos os ticks carregados do armazenamento de objetos.

Confira o que foi carregado. Execute isto no SQL Console:
-- expect 26,488,218 ticks across 12 pairs
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;Você deve ver
ticks = 26.488.218 e pairs = 12. São cerca de 26,5 milhões de linhas carregadas do armazenamento de objetos em segundos.
Método 2 — uma linha com s3(), a opção mais rápida em uma demonstração
Agora, carregue exatamente os mesmos dados com uma única instrução SQL, direto do arquivo público. Primeiro, esvazie a tabela para não duplicar a contagem; depois, faça a inserção:
-- clear the rows ClickPipes just loaded so we don't double up
TRUNCATE TABLE forex;
-- load all ~26.5M ticks from the public S3 file in one line (server-side)
INSERT INTO forex
SELECT * FROM s3('https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquet', NOSIGN, 'Parquet');
-- and check again (expect 26,488,218)
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;NOSIGN significa "sem credenciais" — é tudo o que você precisa para ler um bucket público.
SELECT * funciona porque a ordem das colunas da tabela corresponde à ordem no arquivo.
ClickPipes ou a função s3() — quando usar cada opção
As mesmas 26.488.218 linhas foram carregadas de duas maneiras. A diferença é o que acontece depois da primeira carga: se você quer um pipeline contínuo e gerenciado ou uma leitura rápida e pontual.
| ClickPipes | Função de tabela s3() | |
|---|---|---|
| O que é | Um serviço de ingestão totalmente gerenciado, configurado no console | Uma função SQL chamada dentro de uma consulta |
| Melhor opção para | Cargas contínuas de produção que você quer configurar e deixar funcionando | Cargas pontuais rápidas, exploração ad hoc e scripts |
| Novos arquivos / continuidade | Pode continuar observando um bucket ou stream e carregar novos dados continuamente | Execução única — lê apenas o que existe sempre que você a executa |
| Configuração | Interface guiada, sem necessidade de SQL | Uma única instrução INSERT … SELECT |
| Monitoramento e novas tentativas | Integrados — status, tratamento de erros e novas tentativas no console | Nenhum — em caso de falha, você mesmo executa novamente |
| Origens | Várias: S3, GCS, Azure, Kafka e outros streams, CDC de Postgres/MySQL e mais | Apenas armazenamento de objetos (funções relacionadas: gcs(), azureBlobStorage(), url()) |
Regra prática: use ClickPipes quando os dados continuarem chegando e você quiser um serviço
gerenciado; use s3() quando quiser trazer um arquivo imediatamente. Hoje você usou a linha
única para começar a consultar rápido — agora vamos explorar os dados.
02 Criar a tabela
Um CREATE TABLE para 26,5 milhões de ticks de câmbio e o motivo de base e quote iniciarem a chave de ordenação — uma decisão cujo efeito você sentirá no módulo 04.
04 Executar as consultas de mercado
Sete consultas sobre 26,5 milhões de ticks, cada uma substituindo uma página de SQL: contagens aproximadas, topK, candles OHLC, percentis, combinadores -If, argMax e o desafio final da chave de ordenação.