@vtcrimea

Как работать с ReplacingMergeTree в Clickhouse?

Всем привет.
Пытаюсь залить внешнюю вьюху из MSSQL в Clickhouse. Таблица содержит 198 млн уникальных записей. После вставки в таблицу с движком ReplacingMergeTree в результате вставляется 174 млн.
Если я правильно понимаю, должны убраться дублирующиеся записи, но их нет.
Подскажите пожалуйста, почему такая разница в количестве записей?

зы. В Clickhouse новичок

вьюха:
CREATE VIEW [dbo].[v_РС_ОстаткиПоставщиков]
AS
SELECT
_Fld8057 AS [ДатаОбновления],
_Fld8056RRef AS [СкладКомпанииЗначение],
_Fld8055RRef AS [НоменклатураЗначение],
_Fld8058RRef AS [ВалютаЗначение],
_Fld8142 AS [ЦенаПоставщика],
_Fld8059 AS [Количество],
_Fld10707 AS [Партионность],
_Fld10217 AS [База],
_Fld10832 AS [ЦенаОригинал],
_Fld12574 AS [АртикулПоставщика],
_Fld15634 AS [МаркаПоставщика],
_Fld14370 AS [КодНоменклатурыПоставщика],
_Fld14860 AS [СрокПоставки]
FROM [aa8_test].[dbo].[_InfoRg8054] WITH(NOLOCK);

Таблица Clickhouse:
create table SupplierOffers (
`ДатаОбновления` DateTime,
`СкладКомпанииЗначение` String,
`НоменклатураЗначение` String,
`ВалютаЗначение` String,
`ЦенаПоставщика` Decimal,
`Количество` Decimal,
`Партионность` Int32,
`База` Decimal,
`ЦенаОригинал` Decimal,
`АртикулПоставщика` String,
`МаркаПоставщика` String,
`КодНоменклатурыПоставщика` String,
`СрокПоставки` Int32
) ENGINE = ReplacingMergeTree
Order by (`ДатаОбновления`, `СкладКомпанииЗначение`, `НоменклатураЗначение`,`ВалютаЗначение`,`ЦенаПоставщика`,`ЦенаОригинал`, `Количество`,`Партионность`,`База`,`АртикулПоставщика`,`МаркаПоставщика`,`КодНоменклатурыПоставщика`,`СрокПоставки`);
  • Вопрос задан
  • 21 просмотр
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Я не специалист в кликхаусе, но если ты указываешь
ENGINE = ReplacingMergeTree
Order by (....)

то это (скорее всего) включает некоторые механизмы дедубликации. Почитай вот тут пишут
https://clickhouse.com/docs/en/engines/table-engin...

Выше ты писал
должны убраться дублирующиеся записи, но их нет.

это нужно доказать отдельным SQL запросом. Я думаю что ты скорее всего ошибся.
Проверь.
Ответ написан
Комментировать
@vtcrimea Автор вопроса

это нужно доказать отдельным SQL запросом. Я думаю что ты скорее всего ошибся.
Проверь.

Проверяю:

SELECT [ДатаОбновления]
,[СкладКомпанииЗначение]
,[НоменклатураЗначение]
,[ВалютаЗначение]
,[ЦенаПоставщика]
,count([Количество])
FROM [dbo].[v_РС_ОстаткиПоставщиков]
group by [ДатаОбновления]
,[СкладКомпанииЗначение]
,[НоменклатураЗначение]
,[ВалютаЗначение]
,[ЦенаПоставщика]
having count([Количество]) > 1

Не возвращает ни одной записи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы