繁体   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