我使用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。 谢谢,
答案 0 :(得分:0)
你需要将[ColumnForADFuseOnly]定义为二进制(32),没有长度修饰符的binary
默认为长度为1,从而截断你的sliceIdentifier ......
当在数据定义或变量声明语句中未指定n时,默认长度为1.如果未使用CAST函数指定n,则默认长度为30 。见here