复制活动的Azure数据工厂表达式查询

时间:2019-07-11 07:42:41

标签: azure copy azure-table-storage azure-data-factory azure-data-factory-2

我试图将数据从表存储复制到其他存储帐户的另一个表存储,为此,我正在Azure数据工厂中使用复制活动。

我想过滤将要复制到接收器表存储的行,因为该Azure数据工厂提供了一个定义查询的选项。 我想对数据类型为String但保留数值的Partition键应用过滤器。 我正在查看此文档: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops 那里说类型转换对于比较运算符(例如“ eq”,“ le”,“ ge”等)是隐式的

因此,如果我的查询是“ PartitionKey eq 0”,它将失败并显示此错误:

A storage operation failed with the following error 'The remote server returned an error: (400) Bad Request.'.. Activity ID:edf8e608-d25e

但是,如果我将查询定义为“ PartitionKey eq '0'”,那么它将起作用。

我想获取具有一定范围数字的行,因为我需要将分区键转换为数字值,该怎么办?

startsWith”和“ endsWith”也不起作用 例如,此查询PartitionKey startsWith '10'给出与上述相同的错误。

看起来像这样: enter image description here 预先感谢。

1 个答案:

答案 0 :(得分:0)

首先,要确保查询正常运行-您可以在Azure门户中使用 Storage Explorer(预览版) Query Builder 模式构建查询:
Query built with Query builder

,然后切换到文本编辑器

enter image description here

现在,您确定已获得正确的查询
让我们将此查询应用于ADF。没有动态内容-这将是完全相同的查询:
enter image description here

为了创建动态查询-我们需要添加变量或参数来定义边界:
enter image description here

然后,在查询字段中创建动态内容,替换查询:

PartitionKey ge '0' and PartitionKey le '1'

使用 concat 函数的以下形式:

@concat('PartitionKey ge ''0'' and PartitionKey lt ''1''')

请注意,我必须用单引号(')加上一个额外的('')。
最后-我们只需要用先前定义的参数替换硬编码的值即可:

@concat('PartitionKey ge ''',pipeline().parameters.PartitionStart,''' and PartitionKey lt ''',pipeline().parameters.PartitionEnd,'''')

仅此而已。我希望我能解释如何通过在Azure数据工厂中构建动态内容(查询)来实现这一目标。