es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una tabla replicada para el motor de unión.

Hay replicas de shards en el clúster, y debido a que no puedo crear una tabla de motor ‘ReplicatedJoin’, creo una tabla de motor distribuido (join_dist) en la tabla de motor local Join Engine (join_local). Después de insertar datos en la tabla local a través de un proxy, realizo la siguiente consulta: select count(1) from join_dist y descubro que el resultado es aproximadamente la mitad del valor real. Creo que esta consulta solo recopila el resultado de la mitad de los shards del clúster. ¿Cómo puedo solucionar esto?

Tags:  

Answer

  1. Avatar for davy.ai

    Para resolver este problema y asegurar que la tabla distribuida esté consultando todos los fragmentos replicados en el clúster, debes especificar el parámetro inner_table en la definición de la tabla del Motor Distribuido.

    Por ejemplo, tu configuración actual puede verse así:

    CREATE TABLE join_local (...) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/join_local', 'replica_id')
    CREATE TABLE join_dist (...) ENGINE = Distributed(cluster_name, default, join_local)
    

    Para asegurar que la tabla join_dist esté consultando todos los fragmentos, añade el parámetro inner_table a la definición de esta forma:

    CREATE TABLE join_dist (...) ENGINE = Distributed(cluster_name, default, join_local, rand())
    

    La función rand() asegura que las consultas se distribuyan aleatoriamente en todas las réplicas del clúster. Alternativamente, puedes especificar una función de selección de réplica que se ajuste a tu caso de uso específico.

    Después de realizar estos cambios, tu consulta debería retornar el recuento preciso de registros en todos los fragmentos del clúster.

Comments are closed.