Detalles de la configuración
Gestión de usuarios y roles
Considere no usar el usuario default; en su lugar, cree uno específico para usarlo únicamente con este
destino de Fivetran. Los siguientes comandos, ejecutados con el usuario default, crearán un nuevo fivetran_user con los
privilegios necesarios.
CREATE USER fivetran_user IDENTIFIED BY '<password>'; -- utiliza un generador de contraseñas seguro
GRANT CURRENT GRANTS ON *.* TO fivetran_user;Además, puede revocar el acceso del fivetran_user a determinadas bases de datos.
Por ejemplo, al ejecutar la siguiente sentencia, restringimos el acceso a la base de datos default:
REVOKE ALL ON default.* FROM fivetran_user;Puede ejecutar estas sentencias en la consola SQL de ClickHouse.
Configuración avanzada
El destino de ClickHouse Cloud admite un archivo de configuración JSON opcional para casos de uso avanzados. Este archivo le permite ajustar con precisión el comportamiento del destino al anular la configuración predeterminada que controla los tamaños de lote, el paralelismo, los pools de conexiones y los tiempos de espera de las solicitudes.
El archivo debe ser un JSON válido y ajustarse al esquema que se describe a continuación.
Si necesita modificar la configuración después de la configuración inicial, puede editar la configuración del destino en el dashboard de Fivetran y cargar un archivo actualizado.
El archivo de configuración tiene una sección de nivel superior:
{
"destination_configurations": { ... }
}Dentro de ella, puede especificar las siguientes configuraciones que controlan el comportamiento interno del propio conector de destino de ClickHouse. Estas configuraciones afectan a cómo el conector procesa los datos antes de enviarlos a ClickHouse.
| Configuración | Tipo | Predeterminado | Rango permitido | Descripción |
|---|---|---|---|---|
write_batch_size |
integer | 100000 |
5,000 – 100,000 | Número de filas por lote para las operaciones de inserción, actualización y reemplazo. |
select_batch_size |
integer | 1500 |
200 – 1,500 | Número de filas por lote para las consultas SELECT utilizadas durante las actualizaciones. |
mutation_batch_size |
integer | 1500 |
200 – 1,500 | Número de filas por lote para las mutaciones ALTER TABLE UPDATE en modo de historial. Redúzcalo si se están generando sentencias SQL grandes. |
hard_delete_batch_size |
integer | 1500 |
200 – 1,500 | Número de filas por lote para las operaciones de eliminación definitiva en sincronizaciones normales y en modo de historial. Redúzcalo si se están generando sentencias SQL grandes. |
Todos los campos son opcionales. Si no se especifica un campo, se usa el valor predeterminado. Si un valor está fuera del rango permitido, el destino informará de un error durante la sincronización. Los campos desconocidos se ignoran silenciosamente (se registra una advertencia) y no causan errores, lo que permite la compatibilidad con versiones futuras cuando se añaden nuevas configuraciones.
Ejemplo:
{
"destination_configurations": {
"write_batch_size": 50000,
"select_batch_size": 200
}
}Asignación de conversión de tipos
El destino de ClickHouse de Fivetran asigna los tipos de datos de Fivetran a los tipos de ClickHouse de la siguiente manera:
| Tipo de Fivetran | Tipo de ClickHouse |
|---|---|
| BOOLEAN | Bool |
| SHORT | Int16 |
| INT | Int32 |
| LONG | Int64 |
| BIGDECIMAL | Decimal(P, S) |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| LOCALDATE | Date32 |
| LOCALDATETIME | DateTime64(0, 'UTC') |
| INSTANT | DateTime64(9, 'UTC') |
| STRING | String |
| LOCALTIME | String * ** |
| BINARY | String * |
| XML | String * |
| JSON | String * |
Rangos de valores de fecha y hora
Las fuentes de Fivetran pueden enviar valores de fecha y hora en el intervalo 0001-01-01, 9999-12-31. Los tipos de fecha de ClickHouse Cloud tienen rangos más reducidos, por lo que los valores fuera del rango admitido se ajustan silenciosamente al límite más cercano:
| Tipo de Fivetran | Tipo de ClickHouse Cloud | Valor mín. | Valor máx. |
|---|---|---|---|
| LOCALDATE | Date32 | 1900-01-01 | 2299-12-31 |
| LOCALDATETIME | DateTime64(0, 'UTC') | 1900-01-01 00:00:00 | 2262-04-11 23:47:16 |
| INSTANT | DateTime64(9, 'UTC') | 1900-01-01 00:00:00 | 2262-04-11 23:47:16 |
- El límite superior de INSTANT es 2262-04-11 23:47:16 porque DateTime64(9) almacena nanosegundos desde la época Unix como int64, y 2^63 - 1 nanosegundos corresponde a esta fecha. ClickHouse admite DateTime64 con precisión <= 9 hasta 2299-12-31 23:59:59.
- El límite superior de LOCALDATETIME también está limitado a 2262-04-11 23:47:16 debido a un error conocido en el driver de Go para ClickHouse, donde se llama a
time.Time.UnixNano()para todas las precisiones de DateTime64 antes del escalado, lo que provoca un overflow de int64 para fechas posteriores a 2262 incluso con precisión 0.
Tablas de destino
El destino de ClickHouse Cloud usa el motor de tipo
Replacing de la familia
SharedMergeTree
(específicamente, SharedReplacingMergeTree), con control de versiones mediante la columna _fivetran_synced.
Cada columna, excepto las claves primarias (de ordenación) y las columnas de metadatos de Fivetran, se crea
como Nullable(T), donde T es un
tipo de ClickHouse Cloud basado en la asignación de tipos de datos.
La estructura de la tabla varía según el modo de sincronización configurado para el conector: eliminación lógica (predeterminado) o modo de historial (SCD Type 2).
Modo de eliminación lógica
En el modo de eliminación lógica, cada tabla de destino incluye las siguientes columnas de metadatos:
| Columna | Tipo | Descripción |
|---|---|---|
_fivetran_synced |
DateTime64(9, 'UTC') |
Marca temporal de la sincronización del registro por parte de Fivetran. Se usa como columna de versión para SharedReplacingMergeTree. |
_fivetran_deleted |
Bool |
Marcador de eliminación lógica. Se establece en true cuando se elimina el registro de origen. |
_fivetran_id |
String |
Identificador único generado automáticamente. Solo está presente cuando la tabla de origen no tiene claves primarias. |
Una única clave primaria en la tabla de origen
Por ejemplo, la tabla de origen users tiene como clave primaria la columna id (INT) y una columna normal name (STRING).
La tabla de destino se definirá de la siguiente manera:
CREATE TABLE `users`
(
`id` Int32,
`name` Nullable(String),
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_deleted` Bool
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY id
SETTINGS index_granularity = 8192En este caso, la columna id se utiliza como clave de ordenación de la tabla.
Múltiples claves primarias en la tabla de origen
Si la tabla de origen tiene varias claves primarias, se usan en el orden en que aparecen en la definición de la tabla de origen de Fivetran.
Por ejemplo, hay una tabla de origen items con las columnas de clave primaria id (INT) y name (STRING), además de una columna adicional normal description (STRING). La tabla de destino se definirá de la siguiente manera:
CREATE TABLE `items`
(
`id` Int32,
`name` String,
`description` Nullable(String),
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_deleted` Bool
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY (id, name)
SETTINGS index_granularity = 8192En este caso, las columnas id y name se seleccionan como claves de ordenación de la tabla.
Sin claves primarias en la tabla de origen
Si la tabla de origen no tiene claves primarias, Fivetran añadirá un identificador único en forma de columna _fivetran_id.
Considere una tabla events que en el origen solo tiene las columnas event (STRING) y timestamp (LOCALDATETIME).
La tabla de destino en ese caso es la siguiente:
CREATE TABLE events
(
`event` Nullable(String),
`timestamp` Nullable(DateTime),
`_fivetran_id` String,
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_deleted` Bool
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY _fivetran_id
SETTINGS index_granularity = 8192Dado que _fivetran_id es único y no hay otras opciones de clave primaria, se utiliza como clave de ordenación para la tabla.
Modo de historial (SCD Type 2)
Cuando el modo de historial está habilitado, el destino conserva todas las versiones de cada registro en lugar de sobrescribir los valores anteriores. Esto implementa Slowly Changing Dimension Type 2 (SCD Type 2), manteniendo un registro de auditoría completo de todos los cambios.
En el modo de historial, cada tabla de destino incluye las siguientes columnas de metadatos:
| Columna | Tipo | Descripción |
|---|---|---|
_fivetran_synced |
DateTime64(9, 'UTC') |
Marca temporal de cuándo Fivetran sincronizó el registro. Se utiliza como columna de versión para SharedReplacingMergeTree. |
_fivetran_start |
DateTime64(9, 'UTC') |
Marca temporal de cuándo esta versión del registro pasó a estar activa. Forma parte de la clave de ordenación de la tabla. |
_fivetran_end |
Nullable(DateTime64(9, 'UTC')) |
Marca temporal de cuándo esta versión fue reemplazada. Se establece en 2262-04-11 23:47:16 para los registros activos actualmente. |
_fivetran_active |
Nullable(Bool) |
Indica si esta es la versión activa actual del registro. |
_fivetran_id |
String |
Identificador único generado automáticamente. Solo está presente cuando la tabla de origen no tiene claves primarias. |
La columna _fivetran_start siempre se incluye en la cláusula ORDER BY como último elemento de la clave de ordenación compuesta.
Esto permite que varias versiones del mismo registro (con distintas horas de inicio) coexistan en la tabla.
Cuando se actualiza un registro:
- El valor de
_fivetran_endde la versión anterior se establece en el valor de_fivetran_startde la nueva versión menos un nanosegundo, y_fivetran_activese establece enfalse. - La nueva versión se inserta con
_fivetran_activeestablecido entruey_fivetran_endestablecido en2262-04-11 23:47:16.000000000(el valor máximo deDateTime64(9)).
Una única clave primaria en la tabla de origen
Por ejemplo, la tabla de origen users tiene una columna de clave primaria id (INT) y columnas regulares name (STRING) y status (STRING).
La tabla de destino en modo de historial se definirá de la siguiente manera:
CREATE TABLE `users`
(
`id` Int32,
`name` Nullable(String),
`status` Nullable(String),
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_start` DateTime64(9, 'UTC'),
`_fivetran_end` Nullable(DateTime64(9, 'UTC')),
`_fivetran_active` Nullable(Bool)
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY (id, _fivetran_start)
SETTINGS index_granularity = 8192En este caso, id y _fivetran_start forman la clave de ordenación compuesta.
Tras unas cuantas sincronizaciones, la tabla podría contener los siguientes datos:
| id | name | status | _fivetran_start | _fivetran_end | _fivetran_active |
|---|---|---|---|---|---|
| 1 | name 1 | TODO | 2025-11-10 20:57:00.000000000 | 2025-11-11 20:56:59.999000000 | false |
| 1 | name 11 | TODO | 2025-11-11 20:57:00.000000000 | 2262-04-11 23:47:16.000000000 | true |
| 2 | name 2 | TODO | 2025-11-10 20:57:00.000000000 | 2262-04-11 23:47:16.000000000 | true |
El registro id=1 tiene dos versiones: la original (name 1, inactiva) y la actualizada (name 11, activa).
El registro id=2 tiene solo una versión, que está activa actualmente.
Múltiples claves primarias en la tabla de origen
Si la tabla de origen tiene varias claves primarias, todas se incluyen en el ORDER BY, junto con _fivetran_start como último elemento.
Por ejemplo, la tabla de origen items tiene las columnas de clave primaria id (INT) y name (STRING), además de una
columna adicional normal description (STRING). La tabla de destino en modo de historial se definirá de la siguiente manera:
CREATE TABLE `items`
(
`id` Int32,
`name` String,
`description` Nullable(String),
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_start` DateTime64(9, 'UTC'),
`_fivetran_end` Nullable(DateTime64(9, 'UTC')),
`_fivetran_active` Nullable(Bool)
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY (id, name, _fivetran_start)
SETTINGS index_granularity = 8192En este caso, id, name y _fivetran_start forman la clave de ordenación compuesta.
Sin claves primarias en la tabla de origen
Si la tabla de origen no tiene claves primarias, Fivetran añadirá un identificador único como columna _fivetran_id,
y _fivetran_start se añade a la clave de ordenación.
Considere una tabla events que solo tiene las columnas event (STRING) y timestamp (LOCALDATETIME) en el origen.
La tabla de destino en modo de historial es la siguiente:
CREATE TABLE events
(
`event` Nullable(String),
`timestamp` Nullable(DateTime),
`_fivetran_id` String,
`_fivetran_synced` DateTime64(9, 'UTC'),
`_fivetran_start` DateTime64(9, 'UTC'),
`_fivetran_end` Nullable(DateTime64(9, 'UTC')),
`_fivetran_active` Nullable(Bool)
) ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}', _fivetran_synced)
ORDER BY (_fivetran_id, _fivetran_start)
SETTINGS index_granularity = 8192Dado que _fivetran_id y _fivetran_start constituyen la clave de ordenación compuesta.
Seleccionar la versión más reciente de los datos sin duplicados
SharedReplacingMergeTree realiza la deduplicación de datos en segundo plano
solo durante los merges, en un momento desconocido.
Sin embargo, es posible seleccionar ad hoc la versión más reciente de los datos sin duplicados con la palabra clave FINAL:
SELECT *
FROM example FINAL
LIMIT 1000 Consulta la sección optimización de consultas de lectura" de la guía de solución de problemas para obtener consejos sobre optimización de consultas.
Reintentos ante fallos de red
El destino de ClickHouse Cloud reintenta los errores de red transitorios mediante un algoritmo de backoff exponencial.
Esto es seguro incluso cuando el destino inserta los datos, ya que cualquier posible duplicado es gestionado por
el motor de tabla SharedReplacingMergeTree.