使用Azure Data Factory按日期动态查询Oracle表

i1icjdpr  于 2023-04-29  发布在  Oracle
关注(0)|答案(3)|浏览(133)

我正在使用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”来设置日期时间限制。

4si2a6ki

4si2a6ki1#

看起来问题出在用于形成所需查询的动态表达式上。
请尝试在ADF管道活动中更新动态表达式,以形成有效查询。
我已经定义了一个名为SingleQuotes的管道参数,类型为string和value = '(单引号)-这是形成有效where条件(如“WHERE sales.load_time >='2020-03-16 20:04:04'”)所必需的。

动态表达式

@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)

此动态表达式将生成如下所示的SQL查询:(我在T-SQL中尝试过)
“sqlReaderQuery”:“SELECT sales.* FROM schema.sales sales WHERE sales.load_time >='2020-03-16 20:04:04'
希望这能帮上忙。

pxiryf3j

pxiryf3j2#

我相信正在使用的ADDHOURS来自Oracle .Net C# function。这不是甲骨文功能的一部分你可以在PL/SQL中构建自己的函数,它模仿相同的函数,但更好的解决方案是重写where子句。就像

WHERE sales.load_time >= sysdate - interval '1' hour
rkkpypqq

rkkpypqq3#

我也遇到了同样的问题,我通过以下方法解决了这个问题:
1.创建一个Set变量activity(假设名称为- X)

@formatDateTime('2022-01-01 00:00:00', 'yyyy-MM-dd HH:mm:ss')

1.将以下代码写入管道表达式生成器:
@{concat('select * from Table where Column1=''','A',''' AND TO_CHAR(Date,''','YYYY-MM-DD HH24:MI:SS',''')〉= ''',variables('X '),'''')}
这将做的伎俩!

相关问题