TABLE data_vault_core.hubDocument (
documentHashKey FixedString(20),
loadDate DateTime,
recordSource String,
documentID String
) ENGINE = MergeTree() ORDER BY documentHashKey
В нее требуется вставить данные следующим запросом:
INSERT INTO data_vault_core.hubDocument
(documentHashKey, loadDate, recordSource, documentID)
SELECT documentHashKey, loadDate, recordSource, documentID
FROM data_vault_stage.hubDocument
where documentHashKey not in (SELECT documentHashKey from data_vault_core.hubDocument)
DDL data_vault_stage.hubDocument аналогичен DDL data_vault_core.hubDocument.
В табличке data_vault_core.hubDocument около 200млн записей. Запрос с инсертом падает ввиду нехватки оперативной памяти. Я так понимаю,
это формируется множество из правой части IN.
Как можно решить эту задачу? То есть вставить только те строки, которых нет в data_vault_core.hubDocument?
выполнить 103 раза, documentHashKey%103 =0 documentHashKey%103 =1 documentHashKey%103 =2 INSERT INTO data_vault_core.hubDocument (documentHashKey, loadDate, recordSource, documentID) SELECT documentHashKey, loadDate, recordSource, documentID FROM data_vault_stage.hubDocument where documentHashKey%103=0 documentHashKey not in (SELECT documentHashKey from data_vault_core.hubDocument where documentHashKey%103=0)
Обсуждают сегодня