Skip to content

Instantly share code, notes, and snippets.

View alexey-milovidov's full-sized avatar

Alexey Milovidov alexey-milovidov

View GitHub Profile
milovidov@milovidov-desktop:~/work/ClickHouse/docs/tools$ clickhouse-client
ClickHouse client version 22.2.1.1.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 22.2.1 revision 54455.
milovidov-desktop :) ALTER TABLE test.hits ADD COLUMN all MATERIALIZED formatRow('TSV', *)
ALTER TABLE test.hits
ADD COLUMN `all` MATERIALIZED formatRow('TSV', *)
1. Short-curcuit вычисление некоторых функций.
ClickHouse использует векторное вычисление выражений в запросах (vectorized query execution). То есть, каждая функция вызывается не для отдельных значений, а для небольших массивов - кусочков столбцов. Для примера, в вычисление x + y будут переданы два массива - массив значений x и массив соответствующих значений y.
Недостаток состоит в том, что сложнее реализовать short-curcuit операторы. К таким операторам относятся AND, OR, if. Для примера, в выражении expr1 AND expr2, будут сначала вычислены оба аргумента, а затем переданы в функцию AND. Хотя в тех строчках, где expr1 равно false, выражение expr2 вовсе не обязательно было вычислять. Это становится проблемой, когда само вычисление expr2 сложное, или когда при вычислении expr2 может быть выкинуто исключение.
Short-curcuit вычисление можно было бы реализовать так:
- вычислить expr1;
- отфильтровать массивы входных аргументов для вычисления expr2, оставив только значения, где expr1 = true;
- вычислить expr2 на
+ - сделано хотя бы в master
* - в процессе
Доработки форматов.
+ Protobuf
+ Parquet
+ Avro
+ Настраиваемое поведение CSV: separator.
@alexey-milovidov
alexey-milovidov / example.txt
Created June 16, 2016 20:48
Example of sequenceMatch aggregate function usage in ClickHouse.
$ clickhouse-client
ClickHouse client version 0.0.53720.
Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.
:) CREATE TABLE test.funnel (userID UInt64, eventType Enum8('A' = 1, 'B' = 2), EventTime Date, Age UInt8) ENGINE = Memory
CREATE TABLE test.funnel
(
userID UInt64,

Счётчики, метрики и трейспоинты в ClickHouse (черновик).

Мотивация

В ClickHouse разным образом реализовано некоторое количество функциональности, имеющей общие черты. Это:

  • метрики на основе инкрементальных счётчиков (ProfileEvents);
  • метрики на основе количества одновременных процессов (Metrics);
  • метрики на основе асинхронно получаемых значений (AsynchronousMetrics);
  • ограничения на сложность выполнения запроса (встроены в Settings);
  • прогресс выполнения запроса (Progress, отправляется клиенту);
memcpy.S:
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
│vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi│
╞══════════════════════════════════════════════════════════════════════════════╡
│ Copyright 2020 Justine Alexandra Roberts Tunney │
│ │
│ Permission to use, copy, modify, and/or distribute this software for │
│ any purpose with or without fee is hereby granted, provided that the │
│ above copyright notice and this permission notice appear in all copies. │
# -*- coding: utf-8 -*-
import logging
import sandbox.sdk2.helpers
import subprocess
import os
from sandbox import sdk2
import sandbox.common.types.resource as ctr
import sandbox.common.types.client as ctc
from sandbox.projects.clickhouse.BaseOnCommitTask.base import NeedToRunDescription
$ clickhouse-client
ClickHouse client version 21.3.1.1.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.3.1 revision 54447.
milovidov-desktop :) SELECT toDateTime(1234567890, 'Europe/Moscow')
SELECT toDateTime(1234567890, 'Europe/Moscow')
Query id: 99607776-8d7a-47f7-a3ca-ed00baa20c08
#include <cstddef>
#include <cstdint>
#include <vector>
#include <iostream>
#define ALWAYS_INLINE __attribute__((__always_inline__))
namespace
{
WITH wordShingleMinhashCaseInsensitiveUTF8(body) AS hashes
SELECT DISTINCT body
FROM github_events
WHERE (event_type = 'IssueCommentEvent') AND (action = 'created') AND ((hashes.1) = 245165191482241124)
Query id: 975b45e6-38fe-4ec6-8524-dad348549cac
┌─body───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option. │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘