在 SQL Server 中,我只是一个带有 BETWEEN 语句的 JOIN,将时间范围分解为多个间隔记录。查询看起来类似于
SELECT
a.UltimateID,
a.SiteID,
ProductID,
b.Date
FROM
ss_UsageTracking a
JOIN SELECTServerSchema.ss_fn_CreateDateTable(@StartDate, @EndDate, 1) b ON b.Date BETWEEN a.StartDate AND a.EndDate
这为 StartDate 和 EndDate 之间的每个数据提供了一条记录。我们已经找到了一种方法来使用返回 SQL 数组和 CROSS APPLY EXPLODE 语句的 UDF 进行爆炸。
我看到的问题是我们正在计算数百万次的日期范围,行集中的每行一次。这似乎是非常低效的,并且确实是处理时消耗时间的主要来源。
我已经创建了一种生成上面使用的日期表的方法,并且想试验性能,但是 U-SQL 连接不支持 BETWEEN 语句。
应该使用什么方法?从文档中不清楚 CROSS APPLY 是否可以处理这个问题。
如果间隔在两个日期之间,我尝试在后面的代码中使用 UDF 返回 true 或 false,但这只会导致错误 JOIN ON 子句只能在列上而不是 UDF