[英]How to add auto incremented columns while creating External Tables using CETAS in Azure Synapse serverless SQL Pool?
[英]Is it possible to filter on a dynamic date range with an Azure Synapse Serverless SQL Pool?
我有一個包含 ~40.000.000.000 條記錄的大型數據集,按日期進行分區。
為了確保單個用戶不會一次查詢整個數據集,我想提供一個 SQL function 而不是直接訪問數據集。 SQL function 有一個@from 和一個@to 數據作為輸入參數,並檢查 function 調用不會一次查詢超過 14 天的數據。
到目前為止一切順利,但不起作用的是在我的 OPENROWSET 查詢中使用日期范圍(日期列表)作為過濾條件。
我已經嘗試將日期列表作為子查詢、#tempTable 和@tableVar 提供,但似乎沒有任何效果。
下面你可以看到我最后一次嘗試使用子查詢。
DECLARE @From DATE = '2020-10-17', @To DATE = '2020-10-25';
SELECT *
FROM OPENROWSET(BULK '/date=*/*', DATA_SOURCE = 'data', FORMAT='PARQUET') as rows
WHERE rows.filepath(1) In (
(
SELECT TOP (DATEDIFF(DAY, @From, @To) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @From)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b
) -- Date list based on the @From and @To
當我運行此代碼時,我收到以下錯誤消息,就像我使用 #tempTable 時一樣
該查詢引用了分布式處理模式不支持的 object。
我很感激每一個提示。
哦,伙計,謝謝你的小費 kashyap。
不知何故,我之前沒有嘗試過最明顯的解決方案:
DECLARE @From DATE = '2020-10-17', @To DATE = '2020-10-25';
SELECT *
FROM OPENROWSET(BULK '/date=*/*', DATA_SOURCE = 'data', FORMAT='PARQUET') as rows
WHERE rows.filepath(1) >= @From and rows.filepath(1) <= @To
該解決方案提供了正確的結果,並且還利用分區來確保必須從數據湖中檢索盡可能少的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.