无法使用 INTEGRITY VIOLATION IGNORE 插入源 table

Cannot insert into source table with INTEGRITY VIOLATION IGNORE

在 U-SQL 脚本中,我们希望将分区 table 中的数据 SELECT 放入行集中,进行一些操作,然后将数据插入到相同的行集中table.

以下工作正常:

@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

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

Completed with 'Error' : 30-08-2017 10:18:32 Execution failed with error '1_SV1_Extract_Split Error { "diagnosticCode":195887163,"severity":"Error", "component":"RUNTIME", "source":"System", "errorId":"E_RUNTIME_SYSTEM_INTERNALISSUE", "message":"An internal error has been reported 'Assertion failed: 'partitionDimension < vertexIndices.size()'

[removed stack trace]

如果我们在 INSERT 语句中明确指定分区:

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

...脚本运行良好。然而,我们有这样一种情况,我们 SELECT 来自多个分区的数据基于 PartitionColumn 的一系列值,所以我们只想依赖隐式插入到桶中。有解决办法吗?

我应该注意,这仅在本地数据库上使用 Data Lake Tools for Visual Studio.

进行了测试

这看起来像是一个错误(系统内部问题)。如果它仅在本地 运行 重现,或者如果它在集群中失败,你能否用重现来记录事件 link?您也可以将信息发送到 usql [at] microsoft dot com。