我已经使用sliceIdentifierColumnName
设置了一个ADF管道,该管道运行良好,因为它按预期用GUID填充了字段。然而,最近该字段停止填充,刷新会起作用,但sliceIdentifierColumnName
字段的值为null
,或者偶尔加载会失败,因为它试图用值1填充该字段,这会导致切片加载失败。
这种变化发生在它完美工作之前的某个时间点,在它多次未能正确填充字段之后。我确信没有对管道进行任何更改,导致它突然失败。有什么我应该找的地方吗?
这里是管道源的摘录,我正在阅读AmazonRedshift中的一个表,并向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"
}
],
此外,这里是错误输出文本
复制活动在接收器遇到用户错误:.database.windows.net端:ErrorCode=UserErrorInvalidDataValue,'Type=Microsoft.DataTransfer。Common.Shared.HybridDeliveryException,Message=Column"ColumnForADUseOnly"包含无效值"1"。,Source=Microsoft.DataTransfer.Common,'Type=System.ArgumentException,Message=值的类型与列类型不匹配无法存储<1> 在ColumnForADUseOnly列中。类型应为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中名为[ColumnForADUseOnly]二进制NULL,正是这一列现在正在填充NULL或1。谢谢,
您需要将[ColumnForADUseOnly]定义为二进制(32),不带长度修饰符的binary
默认长度为1,从而截断切片标识符。。。
当数据定义或变量声明语句中未指定n时,默认长度为1。如果未使用CAST函数指定n,则默认长度为30。参见此处