表重建

时间:2017-08-21 16:42:12

标签: azure azure-data-lake u-sql

当我在一个存储过程中调用ALTER TABLE REBUILD并尝试同时在另一个存储过程中调用数据时发生错误。

CREATE PROCEDURE IF NOT EXISTS RebuildContent()
AS  
BEGIN 

INSERT INTO dbo.Log (Date, Message)
VALUES ( DateTime.UtcNow, "Starting Content table rebuilding ..." );

ALTER TABLE dbo.Content REBUILD;

ALTER TABLE dbo.ContentCrc REBUILD;

INSERT INTO dbo.Log (Date, Message)
VALUES ( DateTime.UtcNow, "Completed Content table rebuilding ..." );

END;

enter image description here

有没有解决方法可以避免它? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

您正在重建和从同一张桌子阅读之间遇到竞争条件。

重建表会通过压缩插入创建的文件来创建新文件。不幸的是,现在,一旦重建正在删除旧文件,您将无法访问旧版本,并且您将收到错误消息。

我们知道这个问题,并创建了一个工作项来保留对已启动查询的旧文件​​的访问权限(提供快照语义)。但是,我目前没有ETA。

因此,在此之前,请安排重建和阅读作业,不要重叠。

注意:您仍然可以同时重建和插入或插入和读取。