Скопируйте таблицу транзакций Hadoop в снежинку

В настоящее время мы используем Hadoop и Snowflake для хранения наших данных.

Процесс - Скопировать файлы Hadoop ORC в папку Snowflake s3, используя DISTCP, а затем запустить таблицу Копировать в Snowflake из S3. Это скопирует все, что есть в таблице Hadoop ORC, в таблицу Snowflake.

Теперь у меня есть новое требование, в котором моя таблица Hadoop является транзакционной таблицей, а существующие записи обновляются каждый час. Если я копирую файлы ORC на S3 и запускаю команду "Копировать", он добавляет дополнительные записи в существующую таблицу, а не обновляет существующие 1.

Как я могу решить эту проблему в Snowflake?

1 ответ

Обычно три стратегии используются для чего-то вроде этого:

  • периодически перезагружайте все - в зависимости от вашего объема данных, это может быть возможно и быстро (известно, что Snowflake может загружать несколько ТБ в час). Вы можете использовать комбо из CREATE TABLE LIKE, COPY а также SWAP сделать это транзакционно.
  • идентифицировать и экспортировать только новые строки - не знаю, какой у вас источник данных, но вы можете это сделать
  • при загрузке в Snowflake не вставляйте существующие строки. У вас должен быть какой-то способ определить, какие строки одинаковы, например, поле идентификатора (или комбинация полей). Тогда ты можешь COPY во временную таблицу, а затем использовать MERGE объединить новые / измененные строки (см. документацию для различных возможных вариантов)

Немного поздно, но одно из возможных и более точных решений:

  1. Создайте таблицу переходных процессов на лету и скопируйте почасовые данные переходов в эти таблицы переходных процессов.
  2. Объединить в итоговую таблицу: из таблицы переходных процессов, созданной на шаге 1, ОБЪЕДИНИТЬСЯ в итоговую таблицу на основе вашего ПК.

Это типичный случай сохранения таблиц снимков и таблиц журнала. Чтобы избежать шага 1 вручную, вы также можете воспользоваться SNOWPIPE.

В таких случаях используйте команду Snowflake MERGE для обновления / вставки строк в целевую таблицу. В дополнение к этому вы можете изучить Snowflake CDC, чтобы загружать только дельту изменений между предыдущим и текущим моментом: https://docs.snowflake.net/manuals/user-guide/streams.html

Другие вопросы по тегам