【问题标题】:Interpolation in Snowflake. Anyone know if this is possible via some kind of inbuilt function (or otherwise)?雪花中的插值。任何人都知道这是否可以通过某种内置功能(或其他方式)实现?
【发布时间】:2022-06-15 05:01:44
【问题描述】:

我的输入数据(时间戳)分布不均匀的频率。我希望使用插值来使 x 轴均匀。

到目前为止,我在 Snowflake 文档中找不到任何内容。

【问题讨论】:

  • 我研究过各种方法,并看到其他人在这些方面的工作。该方法可能会根据要求的细节而有所不同。您能否提供最少的数据样本和预期输出?

标签: snowflake-cloud-data-platform interpolation


【解决方案1】:

这是一种方法 -

低于日期 CTE 的日期不一致。

想法是—— 我们从数据集中得到最小日期和最大日期。 接下来,我们找到最大和最小日期之间的天数。 接下来,我们计算从最小日期开始添加多少天以生成日期的插值数据集。 对于表格生成器,我们必须给出一个常数,因此我们使用一个很大的数字并使用限定来停止所需的日期数。

with date_cte(dates) as
(select * from values
('2022-01-12'::date),
('2022-02-12'::date),
('2022-02-19'::date),
('2022-03-11'::date),
('2022-04-10'::date),
('2022-04-12'::date),
('2022-05-02'::date),
('2022-06-14'::date),
('2022-06-28'::date)
), agg_cte as (
select dates, 
max(dates) over (order by null) mx ,
min(dates) over (order by null)  mn,
count(*) over (order by null)  cnt,
datediff(day,mn,mx) days_btwn, days_btwn/(cnt-1) days_incr 
from date_cte)
select a.dates,
a.mn,
a.mx,
a.days_btwn,
a.days_incr
,row_number() over(order by seq4()) rn,
dateadd(day,a.days_incr * (rn-1), a.mn) interpolated_dates
from agg_cte a,table(generator(rowcount=>10000)) 
qualify row_number() over (order by null)<=cnt
order by interpolated_dates asc;

将产生以下数据集(参考 INTERPOLATED_DATES 列)-

DATES MN MX DAYS_BTWN DAYS_INCR RN INTERPOLATED_DATES
2022-01-12 2022-01-12 2022-06-28 167 20.875000 1 2022-01-12
2022-02-12 2022-01-12 2022-06-28 167 20.875000 2 2022-02-02
2022-02-19 2022-01-12 2022-06-28 167 20.875000 3 2022-02-23
2022-03-11 2022-01-12 2022-06-28 167 20.875000 4 2022-03-16
2022-04-10 2022-01-12 2022-06-28 167 20.875000 5 2022-04-06
2022-04-12 2022-01-12 2022-06-28 167 20.875000 6 2022-04-26
2022-05-02 2022-01-12 2022-06-28 167 20.875000 7 2022-05-17
2022-06-14 2022-01-12 2022-06-28 167 20.875000 8 2022-06-07
2022-06-28 2022-01-12 2022-06-28 167 20.875000 9 2022-06-28

【讨论】:

  • 谢谢。这是有道理的。但是你会在增加一层复杂性的情况下做到这一点吗?假设您在多个城市的给定时间戳测量污染。 “日期”列将包含来自不同城市的值(非统一 x 值)。怎样才能让它发挥作用?
猜你喜欢
  • 2021-02-18
  • 2019-11-05
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2015-12-14
相关资源
最近更新 更多