是否可以使用 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 函数而不是直接访问数据集。 SQL 函数有一个@from 和一个@to 数据作为输入参数,并检查函数调用不会一次查询超过 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

时一样

The query references an object that is not supported in distributed processing mode.

我很感激每一个提示。

哦,伙计,谢谢你的小费 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

此解决方案提供了正确的结果,并且还利用分区来确保必须从数据湖中检索尽可能少的数据。