簡體   English   中英

是否可以使用 Azure Synapse Serverless SQL 池過濾動態日期范圍?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM