Passer au contenu principal
EntréeSortieAlias

Description

Le format CapnProto est un format de messages binaires semblable au format Protocol Buffers et à Thrift, mais contrairement à JSON ou à MessagePack. Les messages CapnProto sont strictement typés et ne sont pas auto-descriptifs, ce qui signifie qu’ils nécessitent une description de schéma externe. Le schéma est appliqué à la volée et mis en cache pour chaque requête. Voir aussi Schéma de format.

Correspondance des types de données

Le tableau ci-dessous présente les types de données pris en charge et leur correspondance avec les types de données ClickHouse dans les requêtes INSERT et SELECT.
Type de données CapnProto (INSERT)Type de données ClickHouseType de données CapnProto (SELECT)
UINT8, BOOLUInt8UINT8
INT8Int8INT8
UINT16UInt16, DateUINT16
INT16Int16INT16
UINT32UInt32, DateTimeUINT32
INT32Int32, Decimal32INT32
UINT64UInt64UINT64
INT64Int64, DateTime64, Decimal64INT64
FLOAT32Float32FLOAT32
FLOAT64Float64FLOAT64
TEXT, DATAString, FixedStringTEXT, DATA
union(T, Void), union(Void, T)Nullable(T)union(T, Void), union(Void, T)
ENUMEnum(8/16)ENUM
LISTArrayLIST
STRUCTTupleSTRUCT
UINT32IPv4UINT32
DATAIPv6DATA
DATAInt128/UInt128/Int256/UInt256DATA
DATADecimal128/Decimal256DATA
STRUCT(entries LIST(STRUCT(key Key, value Value)))MapSTRUCT(entries LIST(STRUCT(key Key, value Value)))
  • Les types entiers peuvent être convertis les uns dans les autres lors des opérations d’entrée/sortie.
  • Pour utiliser Enum au format CapnProto, utilisez le paramètre format_capn_proto_enum_comparising_mode.
  • Les Array peuvent être imbriqués et accepter une valeur de type Nullable comme argument. Les types Tuple et Map peuvent également être imbriqués.

Exemple d’utilisation

Insertion et sélection de données

Vous pouvez insérer des données CapnProto à partir d’un fichier dans une table ClickHouse à l’aide de la commande suivante :
$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_schema = 'schema:Message' FORMAT CapnProto"
où le schema.capnp se présente ainsi :
struct Message {
  SearchPhrase @0 :Text;
  c @1 :Uint64;
}
Vous pouvez sélectionner des données d’une table ClickHouse et les enregistrer dans un fichier au format CapnProto à l’aide de la commande suivante :
$ clickhouse-client --query = "SELECT * FROM test.hits FORMAT CapnProto SETTINGS format_schema = 'schema:Message'"

Utilisation d’un schéma généré automatiquement

Si vous ne disposez pas d’un schéma CapnProto externe pour vos données, vous pouvez tout de même lire/écrire des données au format CapnProto à l’aide d’un schéma généré automatiquement. Par exemple :
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS format_capn_proto_use_autogenerated_schema=1
Dans ce cas, ClickHouse générera automatiquement un schéma CapnProto à partir de la structure de la table à l’aide de la fonction structureToCapnProtoSchema et utilisera ce schéma pour sérialiser les données au format CapnProto. Vous pouvez également lire un fichier CapnProto avec un schéma généré automatiquement (dans ce cas, le fichier doit être créé à l’aide du même schéma) :
$ cat hits.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_capn_proto_use_autogenerated_schema=1 FORMAT CapnProto"

Paramètres de format

Le paramètre format_capn_proto_use_autogenerated_schema est activé par défaut et s’applique si format_schema n’est pas défini. Vous pouvez également enregistrer le schéma généré automatiquement dans un fichier lors des opérations d’entrée/sortie à l’aide du paramètre output_format_schema. Par exemple :
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS 
    format_capn_proto_use_autogenerated_schema=1,
    output_format_schema='path/to/schema/schema.capnp'
Dans ce cas, le schéma CapnProto généré automatiquement sera enregistré dans le fichier path/to/schema/schema.capnp.
Dernière modification le 25 juin 2026