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

时间:2018-01-30 20:15:13

标签: azure-data-lake u-sql

我应该做增量加载并使用以下结构。 这些语句是按顺序执行的,即在获得数据的前两个语句之前永远不会执行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

1 个答案:

答案 0 :(得分:2)

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

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

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