Как преобразовать таблицу снежинок в другую структуру

я быназваниеОПИСАНИЕАКТИВНЫЙОБНОВЛЕНО_JSON
идентификатор1имя-1desc-1истинный{"diffFields": [{"fieldName": "name","valueAfter": "имя нового сегмента-1","valueBefore": null},{"fieldName": "active","valueAfter": true,"valueBefore": null }],"segmentId": "b204c220-ea8d-4cf4-b579-30eb59a1a2a4"}
идентификатор2имя-2убыль-2истинный{"diffFields": [{"fieldName": "name","valueAfter": "имя нового сегмента-2","valueBefore": null},{"fieldName": "active","valueAfter": true,"valueBefore": null }],"segmentId": "b204c220-ea8d-4cf4-b579-30eb59a1a2a4"}

У меня есть таблица вышеуказанной структуры в снежинке. UPDATED_JSON — столбец вариантов. Я хочу изменить эту таблицу, чтобы она имела структуру, аналогичную приведенной ниже. В UPDATED_JSON у меня есть fieldName, когда его значение равно name, мне нужно обновить столбец name, чтобы получить данные valueAfter. diffFields не заказывается. Если name в updated_json нет, я хочу оставить столбец name с его текущим значением.

в приведенном ниже примере name-1 изменено на new-segment-name-1, потому что UPDATED_JSON имеет fieldName со значением name и valueAfter со значением new-segment-name-1

я быназваниеОПИСАНИЕАКТИВНЫЙ
идентификатор1имя нового сегмента-1desc-1истинный
идентификатор2имя нового сегмента-2убыль-2истинный

Я пытаюсь сделать это с помощью dbt

когда вы говорите «вы делаете это с dbt», что вы хотите, чтобы мы сделали с этой информацией? Вы хотите, чтобы мы предоставили только действительный SQL DBT или только конструкции преобразования dbt? потому что у вас есть две проблемы: как сделать преобразование в снежинку и как заставить dbt сделать это преобразование.

Simeon Pilgrim 22.04.2022 21:40
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваши данные как CTE:

WITH data(id, name, DESCRIPTION, ACTIVE, UPDATED_JSON) as (
    select column1, column2, column3, column4, parse_json(column5) from values    
    ('id1', 'name-1', 'desc-1', true,'{"diffFields": [{"fieldName": "name","valueAfter": "new-segment-name-1","valueBefore": null},{"fieldName": "active","valueAfter": true,"valueBefore": null}],"segmentId": "b204c220-ea8d-4cf4-b579-30eb59a1a2a4"}'),
   ('id2', 'name-2', 'desc-2', true, '{"diffFields": [{"fieldName": "name","valueAfter": "new-segment-name-2","valueBefore": null},{"fieldName": "active","valueAfter": true,"valueBefore": null}],"segmentId": "b204c220-ea8d-4cf4-b579-30eb59a1a2a4"}')
)
select id
    ,max(iff(f.value:fieldName::text = 'name', f.value:valueAfter::text, null))  as name
    ,DESCRIPTION
    ,active
from data, table(flatten(input=>UPDATED_JSON:diffFields)) f
group by 1,3,4;       

дает:

Я БЫНАЗВАНИЕОПИСАНИЕАКТИВНЫЙ
идентификатор2имя нового сегмента-2убыль-2ПРАВДА
идентификатор1имя нового сегмента-1desc-1ПРАВДА

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