Clickhouse реализует совместное обновление таблиц

Clickhouse не поддерживает обновление совместных таблиц.

На данный момент существует два метода реализации

Способ 1. Если механизмом обновления таблицы является ENGINE = ReplacingMergeTree, то вы можете использовать соединение для соединения таблиц, затем вставить собранные поля в таблицу, добавить окончательный запрос или выполнить OPTIMIZE (оператор OPTIMIZE вызовет много чтения и запись данных ) Вы обнаружите, что это тот запрос, который вы только что вставили.

Примечание. Измените только то поле, которое вы хотите изменить, а остальные поля оставьте без изменений.

Способ 2. Используйте механизм объединения таблиц.

Пример:

В соответствии с идентификатором обновите столбец 2 таблицы 2 до столбца 2 таблицы 1.

Данные таблицы 1

Данные таблицы 2:

первый шаг:

Создать таблицу

СОЗДАТЬ ТАБЛИЦУ [ ЕСЛИ НЕ СУЩЕСТВУЕТ ] [ дб .]join表 [ В кластере КЛАСТЕРА ]

(

поле идентификатора ,

поле столбца ,

) ENGINE = Join ( join_strictness , join_type , k1 [, k2 , ...])

join_strictness: существует два типа ВСЕ и ЛЮБЫЕ.

ВСЕ — это когда связанная таблица связана с другой таблицей. Если в связанной таблице есть повторяющиеся данные,

Тогда будет связан только один из них, причем будет связан ЛЮБОЙ независимо от того, повторяется он или нет.

Примечание. Если вы хотите реализовать обновление совместной таблицы, тип здесь может быть только ЛЮБОЙ.

join_type: все стандартные типы SQL, поддерживаемые JOIN :

INNER JOIN возвращает только совпадающие строки.

LEFT OUTER JOIN возвращает несовпадающие строки из левой таблицы в дополнение к совпадающим строкам.

RIGHT OUTER JOIN, помимо совпадающих строк, также возвращает несовпадающие строки из правой таблицы.

FULL OUTER JOIN, помимо совпадающих строк, возвращает несовпадающие строки из обеих таблиц.

CROSS JOIN создает декартово произведение всей таблицы, «ключи соединения» не указаны.

Примечание: JOIN без указания типа подразумевает INNER.Ключевое слово OUTER можно смело опустить.

Другие типы соединений, доступные в ClickHouse:

LEFT SEMI JOIN и RIGHT SEMI JOIN, белый список «ключей соединения» без генерации

Сгенерируйте декартово произведение.

LEFT ANTI JOIN и RIGHT ANTI JOIN, черный список «ключей соединения» без создания

Сгенерируйте декартово произведение.

ЛЕВОЕ ЛЮБОЕ СОЕДИНЕНИЕ, ПРАВОЕ ЛЮБОЕ ДЖОН и ВНУТРЕННЕЕ ЛЮБОЕ СОЕДИНЕНИЕ

ASOF JOIN и LEFT ASOF JOIN

k1[, k2, ...]: ключевые поля связанной таблицы. Если связанных полей несколько, просто разделите их запятыми. Например, ENGINE = Join( join_strictness, join_type, k1, k2)

Шаг второй:

Вставьте данные из таблицы 2 в эту объединяющую таблицу.

вставить в таблицу объединения , выбрать * из таблицы 2, где условия таблицы 2

Шаг третий:

Обновить данные таблицы 2 до таблицы 1.

Используйте joinGet(join table', 'changed value', join поле таблицы 1), чтобы получить измененные данные.

Скрипт проверки запроса

выберите идентификатор, столбец1 , столбец2, joinGet(join表',' colum2 ',id);

Результат следующий:

изменить таблицу table 1 update mpnid=joinGet(join table',' colum2 ',id) где состояние таблицы 1;

Обновить результаты:

Guess you like

Origin blog.csdn.net/qq_41110377/article/details/128974420