2017-08-30 96 views
1

我们有一个包含简单时间序列数据的大型U-SQL表。该表格每天进行分区。无论何时收到新的批次数据,我们都需要插入新的时间序列数据点,并用新值更新之前收到的任何数据点,以防新批次包含旧数据点的更新值。动态截断表分区

由于我们无法使用U-SQL执行粒度更新或删除操作,我们只想截断受影响的分区并插入重新计算的每日值。我们执行合并的U-SQL脚本识别哪些分区需要被截断。

不幸的是,由于我们无法在U-SQL中创建循环,因此似乎无法动态截断所标识的分区。我在其他地方发现的建议是将分区截断交给PowerShell脚本,但我真的想将所有内容都放在同一个U-SQL脚本中,以避免存储和检索临时行集。

我想过使用自定义C#函数,但它似乎不像U-SQL SDK允许C#函数访问/修改数据库元数据。还有其他选择吗?

回答

1

SDK允许您查询元数据,但不能操作对象。

另一种选择是您编写脚本以基于数据生成脚本,然后运行生成的脚本。它仍然意味着你写了两个脚本,但你并不需要存储临时数据。

你知道有多少分区可能需要更新吗?

+1

不幸的是,我们不知道哪些分区需要被截断,直到我们提取了新到达的数据为止,这些数据本身由于涉及的卷数而成本高昂。我们会稍微试验一下,看看临时存储数据的成本是否合理,与生成反向发布相比,这将允许我们只进行插入。 – Dan

+0

请向http://aka.ms/adlfeedback发布您的方案缺少的功能请求。例如,您可以为数据操作语句(例如DELETE,UPDATE)提出请求。 –

+0

试图截断分区表给出以下错误:'当引用分区表时需要分区子句。是否有简单的方法一次截断表的所有分区,或者最好是删除并重新创建桌子? – Dan