我正在使用Azure Data Factory(v2)创建一个从我们的内部部署Oracle数据库到我们的Azure Data Lake的复制作业。理想情况下,此复制作业被设置为增量加载,其中仅考虑来自最后一天的信息。
为此,我们希望使用Azure数据工厂的动态内容功能过滤datetime格式的列“load_time”。
伪查询将是:
SELECT sales.* FROM schema.sales sales WHERE sales.load_time >= {everything from one hour ago}
当用动态内容丰富这个查询时,我们有如下内容
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:我们的目标是使用the Dynamic Content in Azure Data Factory中的表达式,例如“addHours”来设置日期时间限制。
3条答案
按热度按时间4si2a6ki1#
看起来问题出在用于形成所需查询的动态表达式上。
请尝试在ADF管道活动中更新动态表达式,以形成有效查询。
我已经定义了一个名为SingleQuotes的管道参数,类型为string和value = '(单引号)-这是形成有效where条件(如“
WHERE sales.load_time >='2020-03-16 20:04:04'
”)所必需的。动态表达式:
此动态表达式将生成如下所示的SQL查询:(我在T-SQL中尝试过)
“sqlReaderQuery”:“
SELECT sales.* FROM schema.sales sales WHERE sales.load_time >='2020-03-16 20:04:04'
”希望这能帮上忙。
pxiryf3j2#
我相信正在使用的ADDHOURS来自Oracle .Net C# function。这不是甲骨文功能的一部分你可以在PL/SQL中构建自己的函数,它模仿相同的函数,但更好的解决方案是重写where子句。就像
rkkpypqq3#
我也遇到了同样的问题,我通过以下方法解决了这个问题:
1.创建一个Set变量activity(假设名称为- X)
1.将以下代码写入管道表达式生成器:
@{concat('select * from Table where Column1=''','A',''' AND TO_CHAR(Date,''','YYYY-MM-DD HH24:MI:SS',''')〉= ''',variables('X '),'''')}
这将做的伎俩!