Как проанализировать переменную JSON в Snowflake с помощью SQL

#sql #json #snowflake-cloud-data-platform

Вопрос:

Итак, у меня есть набор данных, и в нем есть столбец, содержащий такие данные:

 ID     values
0001   [
       {
        prices: {
          ia: '20K ',
          ln: '3K-10K'
        },
        formats: [
          'n',
          'ia'
        ],
        id: 'c8f4f498-1cfeaf1-455a-a5ac-310191wefw959583',
        image_url: 'file.jpg',
        slug: 'test1'
      },
       {
        prices: {
          ia: '20K ',
          ln: '3K-10K'
        },
        formats: [
          'n',
          'ia'
        ],
        id: 'c8f4f4wfwe98-1ca1-455a-a5ac-3101919wfewf59583',
        image_url: 'file.jpg',
        slug: 'test3'
      }
    ]
0002   [
       {
        prices: {
          ia: '20K ',
          ln: '3K-10K'
        },
        formats: [
          'n',
          'ia'
        ],
        id: 'c8f4feeee498-1ca1-455a-a5ac-3101919fwewf59583',
        image_url: 'file.jpg',
        slug: 'test2'
      }
 

Все, что меня волнует в этой переменной, — это slug . Но у разных идентификаторов разное количество пуль. Как я мог получить новый df из этих данных, чтобы показать мне каждую пулю, а также количество.

Так что результат, которого я хочу:

   ID              slugs  slug_count
0001  ['test1','test3']           2
0002          ['test2']           1
 

Ответ №1:

Сгладить и сгруппировать:

 with data as (
select $1 id, parse_json($2) j
from values(1, '[{"slug":"a"}]'), (2, '[{"slug":"a1"},{"slug":"a2"}]')
)

select id, array_agg(x.value:slug) slugs, count(*) slug_count
from data, table(flatten(j)) x
group by id
 

введите описание изображения здесь