是否可以使用 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
此解决方案提供了正确的结果,并且还利用分区来确保必须从数据湖中检索尽可能少的数据。
我有一个包含 ~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
此解决方案提供了正确的结果,并且还利用分区来确保必须从数据湖中检索尽可能少的数据。