为什么我的 Azure 数据工厂数据流失败并出现“存储未定义”错误?

问题描述 投票:0回答:2

执行数据流时出现此错误。我已正确提供所有数据流参数,例如 PipelineStartTime、PipelineEndTime。

Job failed due to reason: com.microsoft.dataflow.Issues: DF-ARG-007 - store is not defined - EXE-0001,Dataflow cannot be analyzed as a graph,[564 737],
source(
) ~> dummy
DF-EXPR-012 - Parameter value for FileName missing - [418 464 564 737],com.microsoft.dataflow.Parameter@597aa1ed,EXE-0001,Dataflow cannot be analyzed as a graph,
dummy derive(
) ~> derivedColumn1
DF-EXPR-012 - Parameter value for PipelineStartTime missing - [418 473 564 737],EXE-0001,Dataflow cannot be analyzed as a graph,
dummy derive(
) ~> derivedColumn1,com.microsoft.dataflow.Parameter@5954ed58
DF-EXPR-012 - Parameter value for PipelineEndTime missing - EXE-0001,Dataflow cannot be analyzed as a graph,com.microsoft.dataflow.Parameter@1819981a,
dummy derive(
) ~> derivedColumn1,[418 473 564 737]
DF-EXPR-012 - Parameter value for NoRowsRead missing - [418 473 564 737],EXE-0001,Dataflow cannot be analyzed as a graph,com.microsoft.dataflow.Parameter@47c44f0c,
dummy derive(
) ~> derivedColumn1
DF-EXPR-012 - Parameter value for Status missing

我做了什么

我创建的数据流将复制活动中的值作为参数,并且我正确提供了所有参数值,例如 PipelineStartTime、PipelineEndTime、状态、错误等。但是数据流因给出此错误而失败。 在将错误变量作为参数提供之前,它工作正常,但之后它开始给出此类错误。

对于错误变量,我提供了这个值:

@concat('"',replace(substring(activity('Copy data1').output.errors[0].Message, 0,100 ),'\r\n|\r|\n' ,'' ),'"')

如何解决这个问题?

azure azure-data-factory pipeline
2个回答
0
投票

我遇到了同样的错误(DF-ARG-007 - 未定义存储)。就我而言,我想将包含单引号的名称移交给管道 For-Each 循环(字符串参数)中的数据流。经过几个小时的检查和测试后,我现在责怪数据工厂可能搞砸了它的内部 JSON 编码。

总结
我需要处理的名称字段包含引号,例如“迈尔斯·奥布莱恩”:

症状
监视器内部显示如下内容(注意名称的双引号):

{
"dataflow": {
    "referenceName": "PostProcessContact",
    "type": "DataFlowReference",
    "parameters": {
        "accountid": "'12345678-abcd-1234-abcd-123456789abc'",
        "name": "'Miles O''Brian'",
        ...
    },
    ...
}

错误

作业因以下原因失败:com.microsoft.dataflow.问题:DF-ARG-007 - 未定义存储 - 来源( ) ~> dummysource,EXE-0001,数据流无法作为图表进行分析,[564 737] DF-ARG-007 - 未定义存储 - EXE-0001,数据流无法作为图表进行分析, 操作接收器( ) ~> 父账户ID,[564 737]

潜在的相关 DF 活动
在调用的流程中,我使用没有记录的虚拟源,因为我想仅根据给定的参数构建记录。

"source(useSchema: false,",
"     allowSchemaDrift: true,",
"     validateSchema: false,",
"     inferDriftedColumnTypes: true,",
"     ignoreNoFilesFound: true,",
"     format: 'json',",
"     fileSystem: 'power-platform-dataflows',",
"     fileName: 'nuxnildummy.json',",
"     documentForm: 'singleDocument') ~> dummysource",

解决方法
就我而言,我可以通过将输入字符串中的单引号替换为 ' 来解决问题,即 char(145)。这不是一个很好的解决方案,但它有效,我保留这个名称仅供参考。

// Previous Assignment: 
"'@item()['name']'",

// Fixed Assignment:
"'@{if(equals(item()['name'], null), null, replace(item()['name'], '''', '‘'))}'",

结论
虽然解决方法在我的情况下是可以的,但它仍然是一个糟糕的实现,因此@Microsoft:

  • 如果这个问题能在未来的更新中得到解决,那就太好了。
  • 如果添加一个内存中的 JSON 源,而不需要在 Flowlet 中创建虚拟源(例如,将 [{}, {}, ...] 等记录数组转换为可用的数据源),那就太好了表)。

0
投票

将 Azure Synapse Piplines 中创建的查询语句传递到 Dataflow 时,我遇到了“DF-ARG-007 - store is not Define” 添加额外的“'”,如下所示:

示例: 如果陈述很简单:

"'SELECT * FROM DBO.table'"
没有问题

但是如果声明是

SELECT * FROM DBO.table WHERE ModifiedDate >= '1990-01-01 00:00:00.000'

转换为

"'SELECT * FROM DBO.table WHERE ModifiedDate >= '1990-01-01 00:00:00.000''" -- notice 2 single quotes at the end

解决方案

  1. 在将其发送到数据流转换之前
    SELECT * FROM DBO.table WHERE ModifiedDate >= '1990-01-01 00:00:00.000'
    SELECT * FROM DBO.table WHERE ModifiedDate >= ^^1990-01-01 00:00:00.000^^

使用:

@replace(activity('Get Select Query').output?.value[0].Query, '''', '^^')
在管道活动中

  1. 在数据流中,首先删除所有单引号 (') 并将 ^^ 替换回 '。
    replace(replace($query,"'",""),"^^","'")

因此无论有没有 where 子句,查询都不会中断。

© www.soinside.com 2019 - 2024. All rights reserved.