Массовая загрузка в Snowflake с интеграцией данных Petnatho через JDB C медленная - PullRequest
0 голосов
/ 26 февраля 2020

У нас есть несколько локальных баз данных, и тогда у нас было также хранилище данных, как и в помещении. Теперь переход к облаку и хранилищу данных будет в Snowflake. Но у нас все еще есть больше исходных систем, чем в облаке, поэтому мы хотели бы придерживаться нашего локального решения ETL. Мы используем интеграцию данных Pentaho (PDI) в качестве нашего инструмента ETL.

Тогда возникает проблема, заключающаяся в том, что шаг вывода таблицы PDI, использующий драйвер Snowflake JDB C, ужасно медленный для массовых загрузок в Снежинка. Год go было еще хуже, так как тогда он просто вставлял INTO и COMMIT после каждого ряда. К сегодняшнему дню она значительно улучшилась (при просмотре истории / журналов Снежинки) теперь кажется, что она делает какое-то PUT для некоторой временной стадии Снежинки, но затем оттуда все еще делается какая-то INSERT для целевой таблицы, и это медленный (в нашем тестовом примере для загрузки 1 000 000 записей потребовался час).

Мы использовали обходной путь для массовой загрузки, в котором мы используем скрипты Snow SQL (инструмент командной строки Snowflakes) сделать массовую загрузку в Snowflake, которая затем организована PDI. В нашем примере это займет менее минуты, чтобы получить те же 1 000 000 записей в Snowflake.

Все, что затем делается в базе данных Snowflake, просто выполняется с помощью шагов PDI SQL, отправляемых в Snowflake через JDB C, и все наши запросы исходной системы работают нормально с PDI. Таким образом, проблема заключается только в массовой загрузке в Snowflake, где нам нужно сделать какой-то странный обходной путь:

Вместо:

PDI.Table input(get source data) >> PDI.Table output(write to Snowflake table)

у нас тогда:

PDI.Table input(get source data) >> PDI.Write to local file >> Snowsql.PUT local file to Snowflake Stage >> Snowsql.COPY data from Snowflake Stage to Snowflake table >> PDI clear local file, also then clear Snowflake stage.

Это работает, но гораздо сложнее, чем нужно (по сравнению с предыдущим, например, при загрузке базы данных).

Я даже не знаю, связана ли эта проблема с Snowflake (если JDB Драйвер C работает не оптимально) на стороне или на стороне PDI (если он просто не использует драйвер JDB C правильно), но хотел бы, чтобы он работал лучше.

1 Ответ

0 голосов
/ 26 февраля 2020

Для массовой загрузки в Snowflake, вам нужно сделать пут и скопировать.

...