Saltar al contenido principal
Esta guía presenta patrones comunes para trabajar con datos JSON replicados de MongoDB a ClickHouse mediante ClickPipes. Supongamos que creamos una colección t1 en MongoDB para hacer seguimiento de los pedidos de los clientes:
El conector CDC de MongoDB replica documentos de MongoDB en ClickHouse mediante el tipo de datos JSON nativo. La tabla replicada t1 de ClickHouse contendrá la siguiente fila:

Esquema de tabla

Las tablas replicadas usan este esquema estándar:
  • _id: Clave primaria de MongoDB
  • doc: Documento de MongoDB replicado como tipo de datos JSON
  • _peerdb_synced_at: Registra cuándo se sincronizó por última vez la fila
  • _peerdb_version: Lleva un seguimiento de la versión de la fila; se incrementa cuando la fila se actualiza o se elimina
  • _peerdb_is_deleted: Indica si la fila está eliminada

Motor de tabla ReplacingMergeTree

ClickPipes mapea las colecciones de MongoDB en ClickHouse mediante la familia de motores de tabla ReplacingMergeTree. Con este motor, las actualizaciones se modelan como inserciones con una versión más reciente (_peerdb_version) del documento para una clave primaria determinada (_id), lo que permite gestionar de forma eficiente actualizaciones, reemplazos y eliminaciones como inserciones versionadas. ReplacingMergeTree elimina los duplicados de forma asíncrona en segundo plano. Para garantizar la ausencia de duplicados en la misma fila, utilice el FINAL modificador. Por ejemplo:

Gestión de eliminaciones

Las eliminaciones de MongoDB se propagan como nuevas filas marcadas como eliminadas mediante la columna _peerdb_is_deleted. Normalmente, querrás excluirlas de tus consultas:
También puede crear una política de nivel de fila para filtrar automáticamente las filas eliminadas, en lugar de especificar el filtro en cada consulta:

Consultas de datos JSON

Puede consultar directamente los campos JSON mediante la sintaxis de punto:
Query
Result
Al consultar campos de objetos anidados con la sintaxis de punto, asegúrese de añadir el operador ^:
Query
Result

Tipo Dynamic

En ClickHouse, cada campo de JSON tiene el tipo Dynamic. El tipo Dynamic permite a ClickHouse almacenar valores de cualquier tipo sin conocerlo de antemano. Puede comprobarlo con la función toTypeName:
Query
Result
Para examinar los tipos de datos subyacentes de un campo, puedes consultarlos con la función dynamicType. Ten en cuenta que puede haber distintos tipos de datos para un mismo nombre de campo en diferentes filas:
Query
Result
Funciones regulares funcionan con el tipo Dynamic igual que con las columnas normales: Ejemplo 1: Análisis de fechas
Query
Result
Ejemplo 2: Lógica condicional
Query
Result
Ejemplo 3: operaciones con Array
Query
Result

Conversión de tipos en campos

Las funciones de agregación de ClickHouse no funcionan directamente con el tipo Dynamic. Por ejemplo, si intentas aplicar directamente la función sum a un tipo Dynamic, obtendrás el siguiente error:
Para usar las funciones de agregación, convierta el campo al tipo adecuado mediante la función CAST o la sintaxis :::
Query
Result
La conversión del tipo Dynamic al tipo de dato subyacente (determinado por dynamicType) ofrece un rendimiento muy alto, ya que ClickHouse ya almacena internamente el valor en ese tipo subyacente.

Aplanado de JSON

Vista normal

Puede crear vistas normales sobre la tabla JSON para encapsular la lógica de aplanado, conversión de tipos y transformación, y así consultar los datos como si se tratara de una tabla relacional. Las vistas normales son ligeras, ya que solo almacenan la consulta en sí, no los datos subyacentes. Por ejemplo:
Esta vista tendrá el siguiente esquema:
Ahora puedes consultar la vista de forma similar a una tabla aplanada:

Vista materializada actualizable

Puede crear vistas materializadas actualizables, que permiten programar la ejecución de consultas para deduplicar filas y almacenar los resultados en una tabla de destino aplanada. Con cada actualización programada, la tabla de destino se sustituye por los resultados más recientes de la consulta. La principal ventaja de este método es que la consulta que usa la palabra clave FINAL se ejecuta solo una vez durante la actualización, lo que elimina la necesidad de usar FINAL en las consultas posteriores sobre la tabla de destino. Una desventaja es que los datos de la tabla de destino solo están actualizados hasta la última actualización. Para muchos casos de uso, intervalos de actualización de varios minutos a unas pocas horas ofrecen un buen equilibrio entre la frescura de los datos y el rendimiento de las consultas.
Ahora puedes consultar la tabla flattened_t1 directamente sin el modificador FINAL:

Vista materializada incremental

Si desea acceder a columnas aplanadas en tiempo real, puede crear vistas materializadas incrementales. Si su tabla tiene actualizaciones frecuentes, no se recomienda usar el modificador FINAL en su vista materializada, ya que cada actualización desencadenará una fusión. En su lugar, puede deduplicar los datos en tiempo de consulta creando una vista normal sobre la vista materializada.
Ahora puedes consultar la vista flattened_t1_final de la siguiente manera:
Última modificación el 1 de julio de 2026