【问题标题】:How to transform data into daily snapshot given the two date columns?给定两个日期列,如何将数据转换为每日快照?
【发布时间】:2023-01-18 16:10:11
【问题描述】:

我的表中有产品数据,看起来与此类似

product_id user_id sales_start sales_end quantity
1 12 2022-01-01 2022-02-01 15
2 234 2022-11-01 2022-12-31 123

我想将表格转换为每日快照,使其看起来像这样:

product_id user_id quantity date
1 12 15 2022-01-01
1 12 15 2022-01-02
1 12 15 2022-01-03
... ... ... ...
2 234 123 2022-12-31

我知道如何在 Pandas 中做类似的事情,但我需要在 AWS Athena 中做。 我想获取日期间隔并将其取消嵌套,但我正在努力正确映射它们。

关于如何转换数据的任何想法?

【问题讨论】:

    标签: amazon-athena presto


    【解决方案1】:

    您可以使用 sequnece 生成日期范围,然后使用 unnest 生成日期范围:

    with dataset(product_id, user_id, sales_start, sales_end, quantity) as (
        values (1,  12  , date '2022-01-01', date '2022-01-05', 15), -- short date ranges
            (2, 234, date '2022-11-01', date '2022-11-03', 123) -- short date ranges
    )
    
    select product_id, user_id, quantity, date
    from dataset,
         unnest(sequence(sales_start, sales_end, interval '1' day)) as t(date);
    

    输出:

    product_id user_id quantity date
    1 12 15 2022-01-01
    1 12 15 2022-01-02
    1 12 15 2022-01-03
    1 12 15 2022-01-04
    1 12 15 2022-01-05
    2 234 123 2022-11-01
    2 234 123 2022-11-02
    2 234 123 2022-11-03

    【讨论】:

      【解决方案2】:

      这将帮助你sequence

      SELECT product_id, user_id, quantity, date(date) as date FROM(    
          VALUES 
          (1, 12, DATE '2022-01-01', DATE '2022-02-01', 15),
          (2, 234, DATE '2022-11-01', DATE '2022-12-31', 123)
      ) AS t (product_id, user_id, sales_start, sales_end, quantity),
      UNNEST(sequence(sales_start, sales_end, interval '1' day)) t(date)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2019-08-23
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多