DataFactory преобразует строку (год в виде 2 цифр) в дату

#azure #datetime #azure-data-factory #azure-data-factory-2 #azure-data-factory-pipeline

#azure #дата и время #azure-data-factory #azure-data-factory-2 #azure-data-factory-конвейер

Вопрос:

В настоящее время я использую набор файлов журналов CSV на фабрике данных Azure, которые мне нужно обработать и ввести в таблицу SQL.

Проблема в том, что некоторые столбцы содержат временную метку, в которой год представлен 2 цифрами (в отличие от полного 4-значного года). например. 01/03/17 22:10:33 имеет формат даты MM/dd/yy HH:mm:ss

Как мне преобразовать это в дату или добавить ’20’ к значению года? (например. 01/03/17 22:10:33 превратится в 01/03/2017 22:10:33 ). Это было бы довольно просто сделать в коде, но я не уверен, как это сделать в потоке данных на фабрике данных Azure.

Редактировать: как упоминал @HimanshuSinha-msft, апострофы должны быть удалены перед синтаксическим анализом, чтобы работать. Я добавил дополнительный шаг к потоку данных следующим образом: toTimestamp(substring({Column Name},2,length({Column Name})-1), 'MM/dd/yy hh:mm:ss') и это сработало!

Ответ №1:

Потоки данных ADF полностью поддерживают стандартные форматеры даты и времени Java. В вашем случае вы должны преобразовать toTimestamp() как есть, чтобы выстроить компоненты даты / времени в ряд, а затем преобразовать в выходную строку, которую вы хотите получить с помощью toString() как таковой:

toString(отметка времени(’01/03/17 22:10:33′, ‘ ММ/дд/гггг ЧЧ: мм: сс’), ‘ММ/дд/гггг ЧЧ: мм: сс’)

Подробнее:

https://learn.microsoft.com/en-us/azure/data-factory/data-flow-expression-functions#totimestamp

https://learn.microsoft.com/en-us/azure/data-factory/concepts-data-flow-expression-builder#convert-to-dates-or-timestamps

Комментарии:

1. Я пытался использовать toTimestamp функцию, но результаты все те же, значения столбца по-прежнему отображаются как Null . Я добавил шаг в поток данных для добавления нового столбца и ввел следующее выражение toTimestamp({Start Date}, "MM/dd/yy HH:mm:ss")

2. В приведенном выше примере ваша начальная дата содержит 2 пробела. Учитывали ли вы это в своем форматере?

3. Да, я это сделал. Значения в csv также окружены апострофами, например, такими '01/03/17 22:10:33' , и я даже пытался установить формат как 'MM/dd/yy HH:mm:ss' (между кавычками). Я не могу понять, что происходит. В настоящее время я пробовал использовать пробелы 1 и 2, а также с апострофами и без них — ничего не сработало

4. можете ли вы вставить пример строки из вашего CSV-файла?

5. Просматривая данные, я вижу, что даты заключены в одинарные кавычки, и именно по этой причине @MarkKromerMSFT предложил не работать, я провел небольшой тест, и если мы сможем удалить одинарные кавычки, он будет работать нормально. Я попробовал приведенное ниже выражение, и оно работает, пожалуйста, дайте нам знать, как оно работает. Отметка времени (подстрока (Somedate,2,длина (Somedate) -1), ‘ММ / дд / гг чч: мм: сс’)

Ответ №2:

Это трюк, который был для меня блокировкой, но попробуйте это-

  1. Перейдите к sink
  2. Сопоставление
  3. Нажмите на формат вывода
  4. Выберите формат данных или формат времени, который вы предпочитаете для хранения данных в приемнике.

Выберите любой из заданных форматов, которые вы хотите.