Neste tutorial, você vai explorar como o ClickHouse pode ser usado para executar consultas analíticas em grandes volumes de dados.
Você também verá como usar um dicionário para enriquecer os dados e escrever consultas com junções.
Pré-requisitos
Para este tutorial, você vai precisar de:- Uma conta no ClickHouse Cloud (US$ 300 em créditos gratuitos ao se cadastrar)
- Um serviço do ClickHouse Cloud
Crie a tabela
O conjunto de dados usado neste tutorial é o de táxis da cidade de Nova York, que contém detalhes sobre milhões de corridas de táxi, com colunas como valor da gorjeta, pedágios, tipo de pagamento e muito mais.
- Selecione SQL Console no menu à esquerda
- Clique na aba + ao lado do ícone de início para criar uma nova consulta
- No editor SQL, digite a consulta abaixo e clique em Run:
Expandable
Insira os dados
Agora que você criou uma tabela, adicione os dados de táxi da cidade de Nova York a partir de arquivos CSV no S3.O comando a seguir insere cerca de 2.000.000 de linhas na sua tabela Aguarde até que a inserção dos dados seja concluída. Cerca de 150 MB de dados serão baixados.
Quando a inserção terminar, verifique o número de linhas na tabela O resultado deve ter 1.999.657 linhas
trips a partir de dois arquivos diferentes no S3: trips_1.tsv.gz e trips_2.tsv.gz:Expandable
trips:Analise os dados
Com os dados carregados, você pode executar algumas consultas para analisá-los.
-
Calcule o valor médio das gorjetas:
-
Calcule o custo médio com base no número de passageiros:
-
Calcule o número diário de embarques por bairro:
-
Calcule a duração de cada corrida em minutos e, em seguida, agrupe os resultados por duração:
-
Mostre o número de embarques em cada bairro, discriminado por hora do dia:
Criar um dicionário
Em seguida, você criará um dicionário (um mapeamento de pares chave-valor armazenado em memória) chamado Verifique se funcionou. A consulta a seguir deve retornar 265 linhas, ou seja, uma linha para cada bairro:
taxi_zone_dictionary para mapear IDs de localização para nomes de distritos (boroughs) de NYC, com base em um arquivo CSV que contém todos os bairros da cidade de Nova York.
Esses IDs correspondem às colunas pickup_nyct2010_gid e dropoff_nyct2010_gid na tabela de corridas.Veja abaixo um trecho do arquivo CSV que você está usando, em formato de tabela. A coluna LocationID do arquivo corresponde às colunas pickup_nyct2010_gid e dropoff_nyct2010_gid da sua tabela trips:Execute o comando SQL a seguir, que cria um dicionário chamado
taxi_zone_dictionary e o preenche com os dados do arquivo CSV no S3. A URL do arquivo é https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv.Definir
LIFETIME como 0 desabilita as atualizações automáticas, evitando tráfego desnecessário para o nosso bucket do S3. Em outros cenários, talvez seja conveniente configurá-lo de outra forma. Para mais detalhes, consulte Atualização de dados de dicionário usando LIFETIME.Execute consultas usando o dicionário
Você pode usar a função O JFK fica no Queens. Observe que o tempo para recuperar o valor é praticamente zero:Use a função A consulta a seguir retorna 0 porque 4567 não é um valor de Use a função Esta consulta soma o número de corridas de táxi por distrito que terminam no aeroporto LaGuardia ou no JFK. O resultado é semelhante ao seguinte. Observe que há muitas corridas em que o bairro de embarque é desconhecido:
dictGet (ou suas variações) para obter um valor de um dicionário.
Basta informar o nome do dicionário, o valor desejado e a chave (que, no nosso exemplo, é a coluna LocationID de taxi_zone_dictionary) para receber o valor correspondente.
Por exemplo, a consulta a seguir retorna o Borough cujo LocationID é 132 (que corresponde ao aeroporto JFK):dictHas para verificar se uma chave existe no dicionário. Por exemplo, a consulta a seguir retorna 1 (que equivale a “true” no ClickHouse):LocationID no dicionário:dictGet para obter o nome de um distrito em uma consulta. Por exemplo:Faça uma junção
Por fim, escreva algumas consultas que façam a junção do A resposta é idêntica à da consulta com Esta consulta retorna as linhas das 1000 corridas com os maiores valores de gorjeta e, em seguida, realiza uma junção interna de cada linha com o dicionário:
taxi_zone_dictionary com a sua tabela trips.Comece com um JOIN simples que funcione de forma semelhante à consulta sobre aeroportos mostrada anteriormente:dictGet:Observe que o resultado da consulta
JOIN acima é o mesmo da consulta anterior, que usava dictGetOrDefault (exceto pelo fato de que os valores Unknown não são incluídos).
Nos bastidores, o ClickHouse está, na verdade, chamando a função dictGet para o dicionário taxi_zone_dictionary, mas a sintaxe JOIN é mais familiar para desenvolvedores SQL.Próximos passos
Saiba mais sobre o ClickHouse na documentação a seguir:- Introdução aos índices primários no ClickHouse: Saiba como o ClickHouse usa índices primários esparsos para localizar com eficiência os dados relevantes durante as consultas.
- Integre uma fonte de dados externa: Conheça as opções de integração de fontes de dados, incluindo arquivos, Kafka, PostgreSQL, pipelines de dados e muitas outras.
- Visualize dados no ClickHouse: Conecte sua ferramenta de UI/BI preferida ao ClickHouse.
- Referência SQL: Explore as funções SQL disponíveis no ClickHouse para transformar, processar e analisar dados.