无法使用INTEGRITY VIOLATION IGNORE插入到源表中

时间:2017-08-30 08:27:27

标签: azure-data-lake u-sql

在U-SQL脚本中,我们希望将分区表中的数据选择为行集,进行一些操作,然后将数据插入到同一个表中。

以下工作正常:

@rowset =
    SELECT PartitionColumn,
           DataColumn * 2 AS DataColumn      // Some manipulation
    FROM MyTable;

INSERT MyTable (PartitionColumn, DataColumn)
ON INTEGRITY VIOLATION IGNORE
SELECT PartitionColumn,
       DataColumn
FROM @rowset;

但是,如果我们在PartitionColumn上添加WHERE条件,假设我们在@partition1中有一个有效的分区存储区值:

@rowset =
    SELECT PartitionColumn,
           DataColumn * 2 AS DataColumn
    FROM MyTable
    WHERE PartitionColumn == @partition1

执行脚本时出现以下错误:

  

完成'错误':30-08-2017 10:18:32执行失败   错误'1_SV1_Extract_Split错误{       “diagnosticCode”:195887163, “严重”: “错误”,       “组件”: “RUNTIME”,       “源”:“系统”,       “ErrorID中”: “E_RUNTIME_SYSTEM_INTERNALISSUE”       “message”:“已报告内部错误'断言失败:'partitionDimension< vertexIndices.size()'

     

[删除堆栈跟踪]

如果我们在INSERT语句中显式指定分区:

INSERT MyTable (DataColumn)
PARTITION (@partition1)
SELECT DataColumn
FROM @rowset;

...脚本运行正常。但是,我们有一种情况,我们根据PartitionColumn的一系列值从几个分区中选择数据,所以我们只想依赖于隐式插入到桶中。有解决方法吗?

我应该注意,这只是使用Data Studio for Visual Studio在本地数据库上测试过的。

1 个答案:

答案 0 :(得分:0)

这看起来像一个错误(SYSTEM INTERNAL ISSUE)。如果只在本地运行中使用repros,或者如果集群中出现故障,则可以使用repro来报告事件吗?您也可以将信息发送给usql [at] microsoft dot com。