Saltar al contenido principal
EntradaSalidaAlias

Descripción

El formato CapnProto es un formato de mensajes binarios similar a Protocol Buffers y Thrift, pero no a JSON ni a MessagePack. Los mensajes de CapnProto están estrictamente tipados y no son autodescriptivos, lo que significa que requieren una descripción de esquema externa. El esquema se aplica sobre la marcha y se almacena en caché para cada consulta. Véase también Esquema de formato.

Correspondencia entre tipos de datos

La siguiente tabla muestra los tipos de datos compatibles y su correspondencia con los tipos de datos de ClickHouse en las consultas INSERT y SELECT.
Tipo de dato de CapnProto (INSERT)Tipo de dato de ClickHouseTipo de dato de 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)))
  • Los tipos enteros pueden convertirse entre sí durante la entrada y la salida.
  • Para trabajar con Enum en formato CapnProto, use la opción format_capn_proto_enum_comparising_mode.
  • Los Array pueden anidarse y pueden tener un valor del tipo Nullable como argumento. Los tipos Tuple y Map también pueden anidarse.

Ejemplo de uso

Insertar y seleccionar datos

Puede insertar datos de CapnProto desde un archivo en una tabla de ClickHouse con el siguiente comando:
$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_schema = 'schema:Message' FORMAT CapnProto"
Donde schema.capnp se ve así:
struct Message {
  SearchPhrase @0 :Text;
  c @1 :Uint64;
}
Puede seleccionar datos de una tabla de ClickHouse y guardarlos en un archivo con el formato CapnProto mediante el siguiente comando:
$ clickhouse-client --query = "SELECT * FROM test.hits FORMAT CapnProto SETTINGS format_schema = 'schema:Message'"

Uso de un esquema autogenerado

Si no dispone de un esquema externo de CapnProto para sus datos, aún puede generar o ingerir datos en formato CapnProto mediante un esquema autogenerado. Por ejemplo:
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS format_capn_proto_use_autogenerated_schema=1
En este caso, ClickHouse autogenerará el esquema de CapnProto según la estructura de la tabla mediante la función structureToCapnProtoSchema y usará este esquema para serializar datos en formato CapnProto. También puede leer un archivo CapnProto con un esquema autogenerado (en este caso, el archivo debe haberse creado con el mismo esquema):
$ cat hits.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_capn_proto_use_autogenerated_schema=1 FORMAT CapnProto"

Configuración del formato

La configuración format_capn_proto_use_autogenerated_schema está habilitada de forma predeterminada y se aplica si no se ha establecido format_schema. También puede guardar el esquema autogenerado en un archivo durante la entrada/salida mediante la configuración output_format_schema. Por ejemplo:
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS 
    format_capn_proto_use_autogenerated_schema=1,
    output_format_schema='path/to/schema/schema.capnp'
En este caso, el esquema CapnProto autogenerado se guardará en el archivo path/to/schema/schema.capnp.
Última modificación el 10 de junio de 2026