u-sql 脚本是否按顺序执行?

Does u-sql script executes in sequence?

我应该进行增量加载并使用以下结构。 语句是否按顺序执行,即 TRUNCATE 永远不会在前两个获取数据的语句之前执行:

@newData = Extract ... (FROM FILE STREAM)

@existingData = SELECT * FROM dbo.TableA //this is ADLA table

@allData = SELECT * FROM @newData UNION ALL SELECT * FROM @existingData

TRUNCATE TABLE dbo.TableA;

INSERT INTO dbo.TableA SELECT * FROM @allData

非常清楚:U-SQL 脚本不是逐条执行的。相反,它将 DDL/DML/OUTPUT 语句按顺序分组,查询表达式只是插入和输出的子树。但首先它在编译期间将数据绑定到它们的名称,因此您来自 TableA 的 SELECT 将绑定到数据(有点像轻量级快照),所以即使在 [=18 之前执行截断=],您应该仍然能够从 table A 读取数据(请注意,权限更改可能会影响它)。

此外,如果您的脚本在执行阶段失败,您应该进行原子执行。这意味着如果您的 INSERT 失败,则应该在最后撤消 TRUNCATE。

话虽如此,为什么不逐步使用 INSERT 并定期使用 ALTER TABLE REBUILD 而不是执行上述每次插入时读取完整 table 的模式?