クエリの下のテーブル (TMP_RN_TC) は、データを最終テーブルにロードするために使用される一時テーブルです。このテーブルはステージ テーブルからデータを取得する必要があり、一時テーブル データの出力は最終テーブルに格納する必要があります。ステージ テーブルは、実行ごとに 15 日間のデータを取得します。
ただし、Fact/Final テーブルには、最初の実行のすべてのデータと、変更される 1 日だけのデータの後に格納する必要があります (残りの 14 日間のデータは同じままです)。stage-table には重複データも保持されるため、temp-table はそれらの重複データを削除し、2 回目の実行からその日のデータのみをロードできるはずです。個別は役に立ちませんでした。以下は、データとクエリです。
たとえば、15 日間の最初の実行では 30 レコードを取得しますが、2 回目の実行では、ステージはさらに 30 レコードを取得します。これは、2 回目の実行後の現在のステージでは 60 レコードですが、一時テーブルは 2 レコードのみを選択する必要があります。それは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)
) ;
注:2回目の実行から、最終的に最終テーブルにロードされるtmp-tableに1日だけのデータが来るようにしたい.