查询中的下表(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,最终将加载到最终表中。