Данные ETL по одному столбцу, но разделить другой столбец. Как мне сделать это быстрее? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть сопоставление с etl, одна большая таблица содержит около 3 миллиардов записей.

Эта таблица имеет раздел на столбце RECORDDATE, и я загружаю только вчерашние данные в таблицу stage, и после завершения загрузки таблицы stage я использую exchange_partition для загрузки данных в основную таблицу.

Это отлично работает. Но нам нужно поместить раздел в другой столбец (OTHERDATECOLUMN), но все же я хочу получить данные по столбцу RECORDDATE. Поэтому я не могу использовать exchange_partition, и мне нужно сначала удалить записи, а затем вставить непосредственно в основную таблицу. Это медленно.

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

заранее спасибо

1 Ответ

0 голосов
/ 10 мая 2020

После просмотра всех комментариев я не нашел быстрого и умного решения. Либо используйте простое удаление - хотя это занимает много времени, либо ...

Попробуйте загрузить данные последовательно, в несколько шагов - следующим образом:

  • Проверьте, сколько разных OTHERDATECOLUMN дат, которые у вас есть для вашего RECORDDATE набора данных
  • Теперь al oop: для каждой даты в OTHERDATECOLUMN:
    • Получить данные одной даты и загрузить в TEMP таблицу
    • Добавить все данные из TARGET таблицы - кроме тех, которые необходимо заменить новыми данными (*) (пояснения см. В примере запроса ниже)
    • Используйте Exchange partition (как изначально) для получения данных из TEMP_TABLE в TARGET_TABLE

(*) Запрос для загрузки из TARGET_TABLE данных, которых нет в TEMP_TABLE

INSERT INTO TEMP_TABLE
SELECT * FROM TARGET_TABLE 
WHERE NOT EXISTS
(SELECT * FROM TEMP_TABLE WHERE TARGET_TABLE.ID = TEMP_TABLE.ID)

Надеюсь Я ясно выражаюсь :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...