Azure Delta Load не распознает временную метку эпохи (мс) в качестве имени столбца водяного знака

Я пытаюсь выполнить дельта-загрузку (добавочную загрузку) с помощью Фабрики данных Azure из SQL Server в хранилище BLOB-объектов. В моих таблицах есть столбец updateStamp, который представляет собой время эпохи в миллисекундах, числовой (19,0) тип данных. Когда я пытаюсь выбрать имя столбца «Водяной знак» в разделе конфигурации инструмента «Копировать данные» в ADF, это не один из вариантов, и он не позволяет мне вручную вводить имя столбца. Похоже, ему нужен только тип данных datetime или ключевой целочисленный тип данных. Я пробовал с задачей копирования на основе метаданных и разностным копированием из шаблона базы данных, но безуспешно. Есть ли обходной путь или способ преобразования максимума и его использования (вместо добавления еще одного столбца к сотням миллионов строк). Любая помощь или руководство приветствуются.

Я ожидаю, что смогу использовать тип данных, который указывает момент времени в качестве водяного знака для добавочной загрузки, даже если этот тип данных не является датой и временем.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести это в своей среде, используя дельта-копию из шаблона базы данных в adf для столбца водяных знаков с типом метки времени эпохи. Ниже приведены шаги.

  • Входная таблица и таблица водяных знаков взяты, как на изображении ниже. (Исходное значение водяного знака для таблицы водяных знаков указано как 1657238400000, чтобы скопировать все записи при первом запуске)

  • Хранимая процедура для обновления нового значения водяного знака записывается на сервере SQL, как показано ниже.
Create PROCEDURE update_watermark @LastModifyDate numeric(19,0)
AS
BEGIN
    UPDATE watermarktable
    SET [WatermarkValue] = @LastModifyDate
END
  • В ADF берется дельта-копия из шаблона базы данных и предоставляется связанная служба для источника, приемника и управляющей таблицы. Затем выберите Использовать шаблон.

  • Конфигурация в действиях LookupLastWaterMark, LookupCurrentWaterMark, DeltaCopyfromDB не изменена

  • В действии UpdateWaterMark выбирается имя хранимой процедуры и импортируется параметр. тип параметра LastModifyDate задан как Int64.

  • Отладка нажимается для запуска конвейера, и задаются параметры конвейера для источника, приемника и управляющей таблицы.

  • После копирования файла значение водяного знака обновляется последним значением.

Файл стока:

  • В источник добавлена ​​новая позиция (4-я запись на изображении ниже добавлена ​​заново).

  • Pipeline перезапускается, чтобы проверить, скопированы ли дельта-строки.

Дельта-записи копируются в приемник, когда временная метка эпохи указана в качестве столбца водяных знаков.

Ссылка: документ MS по дельта-копии из шаблона базы данных.

Спасибо. Использование процедуры для определения водяного знака было выходом. Меня беспокоит только то, что моя «таблица 1» имеет ~ 50 столбцов и ~ 100 тыс. строк. Кажется, это просто добавление строк в конец таблицы 1, как будто это таблица водяных знаков, а не фильтрация строк из таблицы.

TomH 09.11.2022 14:47

Не могли бы вы объяснить это подробно? Что не фильтруется из таблицы?

Aswin 09.11.2022 15:01

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