メインコンテンツへスキップ
メインコンテンツへスキップ

基本

注記

クライアントプロトコルのリファレンスは現在作成中です。

ほとんどのサンプルコードは Go のみで提供されています。

このドキュメントでは、ClickHouse の TCP クライアント向けバイナリプロトコルについて説明します。

Varint

長さやパケットコードなどには、unsigned varint エンコード方式が使われます。 binary.PutUvarintbinary.ReadUvarint を使用してください。

注記

signed varint は使用されません。

String

可変長文字列は (length, value) という形式でエンコードされます。ここで lengthvarintvalue は UTF-8 文字列です。

参考文献

OOM によるメモリ枯渇を防ぐため、length を必ず検証すること:

0 ≤ len < MAX

s := "Hello, world!"

// 文字列長を uvarint として書き込む。
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// 文字列本体を書き込む。
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

整数

ヒント

ClickHouse は固定サイズの整数に リトルエンディアン (Little Endian) を使用します。

Int32

v := int32(1000)

// エンコード
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

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

Boolean

Boolean 型は 1 バイトで表現され、1true0false を表します。