【问题标题】:Lookup activity in an Azure Data Factory Data Copy Source - Syntax ErrorAzure 数据工厂数据复制源中的查找活动 - 语法错误
【发布时间】:2019-05-30 10:18:16
【问题描述】:

解决这个https://docs.microsoft.com/en-us/azure/data-factory/tutorial-incremental-copy-portal

我有一个名为 GetCurrentWatermarkValue 的查找活动,带有 sqlReaderQuery:

Select WaterMarkValue as CurrentWatermarkValue\nfrom WatermarkTable

我有另一个名为 GetNewWatermarkValue 的活动,带有 sqlReaderQuery:

select max(createdon) as NewWatermarkValue from shipment

然后我尝试在源中使用它们来进行数据复制活动,使用

select *
from Shipment
where CreatedOn > '@{activity('GetCurrentWatermarkValue').output.firstRow.CurrentWatermarkValue}' 
and CreatedOn <= '@{activity('GetNewWatermarkValue').output.firstRow.NewWatermarkValue}'

预览数据按钮是灰色的(但当我删除 where 条件时启用)所以显然有问题

设置接收器后,我尝试设置映射。单击 Mapping 选项卡上的 Import schema 给出:

A database operation failed with the following error: 'Incorrect syntax near 'GetCurrentWatermarkValue'.'. Activity ID:98794aa9-c866-48d6-b9ff-9cb277bac6ed

我想也许我应该使用添加动态内容选项,但这只是给出了

Query is required

我在某处读到,当在 Lookup 活动上设置 First Row Only 时,firstRow 之后的文本。应该是 [TableName] 但这似乎不对。

查找:

{
    "name": "GetCurrentWatermarkValue",
    "type": "Lookup",
    "policy": ...,
    "typeProperties": {
        "source": {
            "type": "AzureSqlSource",
            "sqlReaderQuery": "Select WaterMarkValue as CurrentWatermarkValue\nfrom WatermarkTable"
        },
        "dataset": {
            "referenceName": "WatermarkTable",
            "type": "DatasetReference"
        }
    }
}

查找:

{
    "name": "GetNewWatermarkValue",
    "type": "Lookup",
    "policy": ...,
    "typeProperties": {
        "source": {
            "type": "AzureSqlSource",
            "sqlReaderQuery": "select max(createdon) as NewWatermarkValue from shipment"
        },
        "dataset": {
            "referenceName": "ShipmentsTable",
            "type": "DatasetReference"
        }
    }
}

数据复制:

{
    "name": "ArchiveShipments",
    "type": "Copy",
    "dependsOn": [
        {
            "activity": "GetCurrentWatermarkValue",
            "dependencyConditions": [
                "Succeeded"
            ]
        },
        {
            "activity": "GetNewWatermarkValue",
            "dependencyConditions": [
                "Succeeded"
            ]
        }
    ],
    "policy": ...,
    "typeProperties": {
        "source": {
            "type": "AzureSqlSource",
            "sqlReaderQuery": {
                "value": "select *\nfrom Shipment\nwhere CreatedOn > '@{activity('GetCurrentWatermarkValue').output.firstRow.CurrentWatermarkValue}' \nand CreatedOn <= '@{activity('GetNewWatermarkValue').output.firstRow.NewWatermarkValue}'",
                "type": "Expression"
            }
        },
        "sink": {
            "type": "AzureSqlSink"
        },
        "enableStaging": false
    },
    "inputs": [
        {
            "referenceName": "ShipmentsTable",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "ShipmentArchiveTable",
            "type": "DatasetReference"
        }
    ]
}

【问题讨论】:

    标签: azure azure-data-factory-2


    【解决方案1】:

    这看起来像是语法问题,试试这是复制活动查询:

    @{CONCAT('select * from Shipment where CreatedOn > ', activity('GetCurrentWatermarkValue').output.firstRow.CurrentWatermarkValue, ' and CreatedOn <= ', activity('GetNewWatermarkValue').output.firstRow.NewWatermarkValue}
    

    除非您想手动设置,否则不要使用映射,如果列名相同,则只需单击“清除”即可。

    希望这有帮助!

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2022-11-11
      • 2019-03-28
      • 2022-01-04
      • 1970-01-01
      • 2020-09-15
      • 2022-11-11
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多