Раздел удаления распределенной таблицы - PullRequest
0 голосов
/ 12 апреля 2020

Я создал реплицированную таблицу дерева слияний, как показано ниже:

CREATE TABLE probe.a on cluster dwh (
instime UInt64,
psn UInt64
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/probe/a', '{replica}') PARTITION BY instime ORDER BY (psn);

Затем я создал распределенную таблицу как:

CREATE TABLE probe.a_distributed on cluster dwh (
instime UInt64,
psn UInt64
) ENGINE = Distributed(dwh,probe, a, rand());

Затем я добавил макрос на каждом сервере:

Сервер 1

<yandex>
    <macros replace="true">
        <shard>1</shard>
        <replica>server1.com</replica>
    </macros>
</yandex>

Сервер 2

<yandex>
    <macros replace="true">
        <shard>2</shard>
        <replica>server2.com</replica>
    </macros>
</yandex>

Удаленные серверы:

<dwh>
            <!-- shard 01 -->
            <shard>            
                <replica>
                    <host>server1.com</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>test12pwd</password>
                </replica>
            </shard>

            <!-- shard 02 -->
            <shard>            
                <replica>
                    <host>server2.com</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>test12pwd</password>
                </replica>
            </shard>
 </dwh>

У меня две проблемы при удалении раздела:

  1. Когда я удаляю раздел с использованием распределенной таблицы

    ALTER TABLE probe.a в кластере dwh DROP PARTITION '2020-03-13';

Я получаю ошибку:

DB :: Exception: Таблица «а» реплицируется, но осколок № 4 не реплицируется в соответствии с определением кластера. Возможно, истина забыта в конфигурации кластера. (версия 19.16.14.65) (версия 19.16.14.65)

Удалено разделение по отдельности, но в распределенной таблице все еще отображается половина строки, но когда я проверяю локально, нет строки enter image description here

Как можно решить эту проблему с распределенной таблицей разрешаться для данных, которые будут отсеяны без репликации?

1 Ответ

1 голос
/ 12 апреля 2020

вы используете реплицированные таблицы. Вы ДОЛЖНЫ пометить свои осколки <internal_replication>true</internal_replication>.

<dwh>
            <!-- shard 01 -->
            <shard>            
                <internal_replication>true</internal_replication>
                <replica>
                    <host>server1.com</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>test12pwd</password>
                </replica>
            </shard>

            <!-- shard 02 -->
            <shard>           
             <internal_replication>true</internal_replication> 
                <replica>
                    <host>server2.com</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>test12pwd</password>
                </replica>
            </shard>
 </dwh>
...