2017-08-30 99 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