Как построить запрос Snowflake для получения этих результатов
Приведенная ниже таблица (TMP_RN_TC) в запросе - это временная таблица, которая будет использоваться для загрузки данных в окончательную таблицу. Эта таблица должна получать данные из stage-table, а вывод данных временной таблицы должен храниться в итоговой таблице. Таблица этапов будет получать данные за 15 дней при каждом запуске.
Но таблица фактов / итоговая таблица должна хранить все данные для первого запуска, а затем только после одного дня данные, которые будут меняться (остальные 14-дневные данные останутся такими же). Поскольку stage-table будет содержать даже повторяющиеся данные, temp-table должна иметь возможность удалять эти дубликаты и загружать только данные за день из второго запуска. Distinct не помогло. Ниже приведены данные и запрос:
Например, при первом прогоне в течение 15 дней мы получаем 30 записей, но во втором прогоне стадия получает еще 30 записей, то есть 60 записей в стадии после 2-го прогона, но временная таблица должна выбирать только 2 записи. поскольку это изменилось бы только во втором прогоне, а остальные 14-дневные (28 строк) данные будут такими же.
Это запрос, который я хочу создать:
Данные в одну строку выглядят так:
{
"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 поступали данные только за один день, которые в конечном итоге будут загружены в окончательную таблицу.