Перейти к основному содержимому
Перейти к основному содержимому

Основы

примечание

Справка по клиентскому протоколу в процессе разработки.

Большинство примеров только на Go.

Этот документ описывает бинарный протокол для TCP-клиентов ClickHouse.

Varint

Для длин, кодов пакетов и других случаев используется беззнаковая varint кодировка. Используйте binary.PutUvarint и binary.ReadUvarint.

примечание

Знаковая varint не используется.

Строка

Строки переменной длины кодируются как (длина, значение), где длина — это varint, а значение — это строка в кодировке utf8.

к сведению

Проверьте длину, чтобы предотвратить OOM:

0 ≤ len < MAX

s := "Hello, world!"

// Writing string length as uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// Writing string value.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

Целые числа

подсказка

ClickHouse использует Младший порядок для целых чисел фиксированного размера.

Int32

v := int32(1000)

// Encode.
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

// Decode.
d := int32(binary.LittleEndian.Uint32(buf))
fmt.Println(d) // 1000
00000000  e8 03 00 00 00 00 00 00                           |........|

Логическое значение

Логические значения представлены одним байтом, 1 — это true, а 0 — это false.