Динамический запрос Oracle таблицы по дате с Azure фабрикой данных - PullRequest
2 голосов
/ 16 марта 2020

Я создаю задание копирования с помощью Azure фабрики данных (v2) из ​​нашей локальной Oracle базы данных в наше Azure озеро данных. В идеале это задание на копирование должно выполняться как дельта-загрузка, где рассматривается только информация за последний день.

Для этого мы хотим отфильтровать столбец " load_time " , который имеет формат datetime , с dynamici c content функциональностью Azure Data Factory.

Пустой запрос будет:

SELECT sales.* FROM schema.sales sales WHERE sales.load_time >= {everything from one hour ago}

При обогащении этого запроса динамическим c содержимым мы имеем что-то вроде

SELECT sales.* FROM schema.sales sales WHERE sales.load_time >= addHours(utcnow(), -1, format='yyyy-MM-dd HH:mm:ss')

Однако мы продолжаем сталкиваться с ошибкой:

ORA-00904:"ADDHOURS": invalid identifier

Кто-нибудь есть какой-либо опыт / понимание того, что здесь происходит не так?

Спасибо

EDIT-1: Мы стремимся использовать выражения из Dynami c Содержимое в Azure данных Заводская , например, " addHours " для установки предела даты и времени.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Похоже, проблема в выражении Dynami c, которое используется для формирования требуемого запроса.

Пожалуйста, попробуйте обновить динамическое выражение c, как показано ниже, в активности конвейера ADF, чтобы сформировать правильный запрос.

Я определил параметр конвейера с именем SingleQuotes типа string и value = '( одинарная кавычка) - Это необходимо для формирования допустимого условия, например, "WHERE sales.load_time >='2020-03-16 20:04:04'"

Dynami c Выражение :

@concat('SELECT sales.* FROM schema.sales sales WHERE sales.load_time >=', pipeline().parameters.singleQuotes, formatDateTime(addHours(utcnow(), -1), 'yyyy-MM-dd HH:mm:ss'), pipeline().parameters.singleQuotes)

This Dynami c выражение сгенерирует запрос SQL, как показано ниже: (я пробовал это в T- SQL)

"sqlReaderQuery": "SELECT sales.* FROM schema.sales sales WHERE sales.load_time >='2020-03-16 20:04:04'"

Надеюсь, это поможет.

1 голос
/ 16 марта 2020

Я полагаю, что ADDHOUR, который используется, от Oracle. Net C# function . Это не часть функций Oracle. Вы можете создать свою собственную функцию в PL / SQL, которая имитирует ту же функцию, но лучшим решением будет переписать предложение where. Что-то вроде

WHERE sales.load_time >= sysdate - interval '1' hour
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...