Как построить запрос 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 поступали данные только за один день, которые в конечном итоге будут загружены в окончательную таблицу.

0 ответов

Другие вопросы по тегам