Снежинка боковая сплющенная с заменой ключей в json - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть таблица в Snowflake с такой же структурой, как показано ниже,

----------------------------------------
Name | Number
----------------------------------------
Dim_1 | {'Table_1': 100}
Dim_1 | {'Table_1': 101}
Dim_2 | {'Table_2': 200, 'Table_3': 300}
Dim_2 | {'Table_2': 201, 'Table_3': 301}

, и я пытаюсь получить вывод в виде:

-----------------------
Name | Table | Entries
-----------------------
Dim_1 | Table_1 | 100
Dim_1 | Table_1 | 101
Dim_2 | Table_2 | 200
Dim_2 | Table_3 | 300
Dim_2 | Table_2 | 201
Dim_2 | Table_3 | 301

Есть идеи?

1 Ответ

1 голос
/ 15 февраля 2020

Простое применение функции FLATTEN может работать здесь. Функция создает боковое представление с разнесенными строками из каждой исходной строки. Для плоских объектов все пары значений ключа разбиты на одну строку.

Использование части KEY сглаженного результата обеспечивает часть Table требуемого вывода, а часть VALUE обеспечивает Entries. Поскольку FLATTEN создает боковое представление, у вас все еще есть доступ к значениям строки предыдущей исходной таблицы, чтобы продолжить сохранять столбец Name в результате.

Пример запроса, который выполняет преобразование:

SELECT
  t.name AS "Name",
  lv.key AS "Table",
  lv.value AS "Entries"
FROM
  data_table t,
  LATERAL FLATTEN(input => t.number) lv
...