Azure ADF sliceIdentifierColumnName未正确填充

时间:2017-10-05 13:02:13

标签: azure azure-data-factory

我使用sliceIdentifierColumnName设置了一个ADF管道,它运行良好,因为它按预期使用GUID填充了字段。最近,此字段已停止填充,刷新将起作用,但sliceIdentifierColumnName字段的值为null,或者偶尔加载会失败,因为它尝试使用值1填充此字段导致切片加载失败。

此更改发生在某个时间点,在它完全正常工作之后,在多次无法正确填充字段之后。我确信没有对Pipeline进行任何更改导致突然失败。我应该看的任何指针?

这是管道源的摘录,我正在从Amazon Redshift中的表中读取并写入Azure SQL表。

    "activities": [
        {
            "type": "Copy",
            "typeProperties": {
                "source": {
                    "type": "RelationalSource",
                    "query": "$$Text.Format('select * from mytable where eventtime >= \\'{0:yyyy-MM-ddTHH:mm:ssZ}\\'   and   eventtime < \\'{1:yyyy-MM-ddTHH:mm:ssZ}\\'       ' , SliceStart, SliceEnd)"
                },
                "sink": {
                    "type": "SqlSink",
                    "sliceIdentifierColumnName": "ColumnForADFuseOnly",
                    "writeBatchSize": 0,
                    "writeBatchTimeout": "00:00:00"
                }
            },
            "inputs": [
                {
                    "name": "AmazonRedshiftSomeName"
                }
            ],
            "outputs": [
                {
                    "name": "AzureSQLDatasetSomeName"
                }
            ],
            "policy": {
                "timeout": "1.00:00:00",
                "concurrency": 10,
                "style": "StartOfInterval",
                "longRetry": 0,
                "longRetryInterval": "00:00:00"
            },
            "scheduler": {
                "frequency": "Hour",
                "interval": 2
            },
            "name": "Activity-somename2Hour"
        }
    ],

此外,这是错误输出文本

复制活动在Sink:.database.windows.net端遇到用户错误:ErrorCode = UserErrorInvalidDataValue,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message = Column'TolumnForADFuseOnly'包含无效值'1' 。,Source = Microsoft.DataTransfer.Common,''Type = System.ArgumentException,Message =值类型与列类型不匹配不能存储&lt; 1&gt;在ColumnForADFuseOnly列中。 预期类型是Byte []。,Source = System.Data,''Type = System.ArgumentException,Message =值类型与列类型不匹配,Source = System.Data,'。

以下是源数据集的一部分,它是一个包含所有数据类型为String的表。

{
    "name": "AmazonRedshiftsomename_2hourly",
    "properties": {
        "structure": [
            {
                "name": "eventid",
                "type": "String"
            },
            {
                "name": "visitorid",
                "type": "String"
            },
            {
                "name": "eventtime",
                "type": "Datetime"
            }
}

最后,目标表与源表相同,将每个列名映射到Azure中的对应表,但Azure中的其他列除外 [ColumnForADFuseOnly]二进制NULL, 这个列现在要么填充NULL或1。 谢谢,

1 个答案:

答案 0 :(得分:0)

你需要将[ColumnForADFuseOnly]定义为二进制(32),没有长度修饰符的binary默认为长度为1,从而截断你的sliceIdentifier ......

当在数据定义或变量声明语句中未指定n时,默认长度为1.如果未使用CAST函数指定n,则默认长度为30 。见here