天蓝色数据工厂:在查询中使用变量

Nel*_*ias 6 azure-data-factory

我创建了一个复制活动,将数据从本地数据库复制到 Azure SQL 数据库。我需要动态修改查询,因此它需要一个日期范围,并带有这两个变量:

  • inidate
  • enddate

我想在where子句中使用它,但我不知道如何引用变量。我尝试了这个,但它不起作用:

  SELECT * FROM tableOnPrem 
  WHERE dateOnPrem BETWEEN '@variable('inidate')' AND '@variable('enddate')'
Run Code Online (Sandbox Code Playgroud)

如何才能实现这一目标?

小智 8

我发现添加大括号足以使其正常工作(就像Joel Cochran使用复数变量s关键字所说的那样):

SELECT * FROM tableOnPrem 
WHERE dateOnPrem 
BETWEEN '@{variables('inidate')}' AND '@{variables('enddate')}'
Run Code Online (Sandbox Code Playgroud)

但是,它仍然在源“预览数据”选项上报告错误,但尽管如此,它在实际管道运行中运行正常。


Joe*_*ran 2

在管道中(如复制活动),您需要使用管道表达式语言(PEL) 动态构建查询字符串。最好的方法是使用concat函数将查询拼凑在一起:

@concat('SELECT * FROM tableOnPrem WHERE dateOnPrem BETWEEN ''',variables('inidate'),''' AND ''',variables('enddate'),'''')
Run Code Online (Sandbox Code Playgroud)

这可能很快就会变得复杂,因此您需要特别注意逗号、括号、“”和“””。

请注意,“@”符号仅出现一次,即在表达式的开头。另外,要引用管道变量,您将调用“variable s ”函数。

  • 可以肯定的是,特别是在 Web 开发中,数据工厂管道应该在受控/封闭系统中运行。如果你的内部参与者发送这样的字符串,我认为你有更大的问题。我正在回答提出的问题,但存储过程将是另一个可行的选择。 (2认同)