【问题标题】:Azure Data Factory Data flow expression builder using parameters使用参数的 Azure 数据工厂数据流表达式生成器
【发布时间】:2021-12-08 18:48:33
【问题描述】:

我尝试将管道参数传递给数据流活动,同时尝试传递我的目录/文件夹的值。正如concat('myArchive/', $myFolderDF) 给我的错误:Column operands are not allowed in literal expressions。我尝试使用这个'{$myFolderDF}' 并仍然得到错误。您能否指导我在数据流活动中使用表达式中的参数。

JSON:

parameters{
    myFolderDF as string
}
source(allowSchemaDrift: true,
    validateSchema: false,
    ignoreNoFilesFound: false,
    format: 'csv',
    fileSystem: 'FileSource',
    folderPath: (concat('myFileArchive/',$myFolderDF)),
    fileName: (concat(lower($myFolderDF),'.csv')),
    documentForm: 'documentPerLine') ~> DFSource
DFSource sink(allowSchemaDrift: true,
    validateSchema: false,
    format: 'csv',
    fileSystem: 'FileArchive',
    folderPath: (concat('myFileArchive/',$myFolderDF)),
    partitionFileNames:[(concat($myFolderDF,toString(currentTimestamp(),'MMddyyyy'),'.csv'))],
    umask: 0022,
    preCommands: [],
    postCommands: [],
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true,
    saveOrder: 0,
    partitionBy('hash', 1)) ~> DFFileArchive

【问题讨论】:

  • 您可能需要尝试@concat('myArchive/', '@{pipeline().parameters.myFolderDF}') 之类的方法。确保您的参数/变量用大括号 { } 括起来并与 @ 关联
  • 您可以在数据集本身中硬编码“myarchive/”,也可以在通配符路径下的源选项下提及。通过传递@{pipeline().parameters.myFolderDF} 使数据流参数表达式保持简单。在数据流中,您可以简单地将其用作 $dataflowparamname
  • 嗨@ray,我为参数标记尝试了花括号,但仍然得到同样的错误。
  • 嗨@AllAboutBI,我也试过你的方法,得到了同样的错误。

标签: azure-data-factory azure-data-factory-2 azure-data-factory-pipeline azure-data-flow


【解决方案1】:

当我触发管道运行时,我能够正确获取它。请以下面的配置为例。

假设这与数据集参数无关并且源数据集没有提供显式 文件路径

数据流配置:

数据流参数: get_dir

通配符路径: concat('my/',$get_dir)

管道参数: pipe_param

分配给数据流参数:

get_dir: @pipeline().parameters.pipe_param

传递动态值:

原始文件位置:source / my / myArchive / mysource (1).csv

参数化:source / concat('my/',$get_dir)

动态值:myArchive/*.csv

【讨论】:

  • 嗨@KarthikBhyresh-MT,我所做的一切都与您在回复中提到的相同,但仍然遇到相同的错误。我已经用 json 更新了 OP。
  • oki 你如何获取从管道传递给 $myFolderDF 的值。就像,在我的示例中,我在管道运行提示期间手动输入它。你是动态的吗?在数据流入管道之前的任何其他活动?
  • 嗨@KarthikBhyresh-MT,我用图像更新了我的OP。我通过管道运行提示传递值。在数据流活动参数的管道中,这是我传递的值@pipeline().parameters.myFolderDF,在数据流参数中我将其留空。很难调试数据流活动以查看在 Debug 期间将哪些值传递到表达式中。
  • 当我查看数据流活动输入 json 时,我看到参数值正确传递。
  • oki,你能从管道中取消选中数据流参数选项中的Expression 属性吗?并确保没有尾随空格或开头或参数名称或输入值之间。
猜你喜欢
  • 2022-11-18
  • 2021-11-25
  • 2021-09-16
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多