1

クエリの下のテーブル (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日だけのデータが来るようにしたい.

4

0 に答える 0