#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
Комментарии:
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:
Это трюк, который был для меня блокировкой, но попробуйте это-
- Перейдите к sink
- Сопоставление
- Нажмите на формат вывода
- Выберите формат данных или формат времени, который вы предпочитаете для хранения данных в приемнике.
Выберите любой из заданных форматов, которые вы хотите.