1

查询中的下表(TMP_RN_TC)是一个临时表,用于将数据加载到最终表中。该表必须从阶段表中获取数据,并且临时表数据的输出需要存储在最终表中。阶段表将在每次运行中获取 15 天的数据。

但是事实/最终表应该存储第一次运行的所有数据,然后仅在一天的数据发生变化之后(其余 14 天的数据将保持不变)。由于 stage-table 甚至会保存重复的数据,因此 temp-table 应该能够删除这些重复数据并仅加载第二次运行当天的数据。区别没有帮助。以下是数据和查询:

例如,在第一次运行 15 天时,我们得到 30 条记录,但在第二次运行中,stage 得到了 30 多条记录,即在第二次运行之后现在在 stage 中有 60 条记录,但是临时表应该只选择 2 条记录因为这只会在第二次运行中发生变化,其余 14 天(28 行)的数据将是相同的。

这是我要构建的查询:

1 行数据如下所示:

{
  "location": "xyz",
  "metrics": [
    {
    "name": "traffic_in",
      "data": [
        {
          "group": {
            "start": "2020-07-05",
            "type": "date"
          },
          "index": 0,
          "next_level": [
            {"index": 0,
              "validity": "complete",
              "value": 1,
              "group": {
                "finish": "00:15",
                "start": "00:00",
                "type": "time"
              }
            }
          ]
        }
      ],
    }
  ],
}

下面是雪花查询:

create or replace TABLE TMP_RN_TC as
(select * from(
               select distinct
                   replace(D_NEXT : location , '"' , '')as  rn_loc_id,
                   mtr.value:name::VARCHAR as  metrics_name,
                   dta.value:group.start::DATE as metrics_event_date,
                   dta.value:index::numeric as metrics_date_index,
                   nxt.value:validity::VARCHAR as metrics_data_validity,
                   nxt.value:value::numeric as metrics_data_value,
                   nxt.value:group.start::time as metrics_data_start_tms,
                   nxt.value:index::numeric as metrics_time_index
           from STG_RN_TC stg,
           lateral flatten(input => stg.D_NEXT:metrics) mtr,
           lateral flatten(input => mtr.value:data) dta,
           lateral flatten(input => dta.value:next_level)nxt)
 ) ;

注意:从第二次运行开始,我希望只有一天的数据进入 tmp-table,最终将加载到最终表中。

4

0 回答 0