Ошибка BigQuery: скалярный подзапрос создал более одного элемента

Я столкнулся с проблемой, когда мне не удалось проанализировать одну строку JSON в BigQuery и заставить ее правильно отображаться.

Вот строка JSON

{"id":"ae7001c0-8728-4b90-a6a2 3e137983b320",
 "seq":"20210315047",
 "branch_id":"liketea0410",
 "terminal_no":"liketea0410A",
 "subtotal_":60,
 "total":60,
 "qty_subtotal":2,
 "discount_subtotal":0,
 "items":
     [{"no":"10010002",
       "name":"drink_1",
       "current_qty":1,
       "current_price":25,
       "current_discount":0,
       "discount_name":"",
       "condiment":
           [{"condiment_id":"e66b9b19-ec8e-4371-b4a8-b490b3996fe9",
             "name":"test1",
              "price":0},
            {"condiment_id":"6ad55413-0706-4e74-b9a8-f6e6a7b8c2cf",
             "name":"test2",
             "price":0}]},
      {"no":"10010002",
       "name":"drink_2",
       "current_qty":1,
       "current_price":25,
       "current_discount":0,
       "discount_name":"",
       "condiment":
           [{"condiment_id":"c24188c0-3612-40d1-8bdf-0da423af94c2",
            "name":"test_3",
            "price":10},
            {"condiment_id":"a5adcc2a-7c75-421c-b680-ca9392dfae12",
            "name":"test_4",
            "price":0},
            {"condiment_id":"5446a39c-2eae-4217-bf9a-b77545552c1f",
             "name":"test_5",
             "price":0}]}
      ]}

В этой строке Json есть два заказа, и я хочу разделить их на 2 отдельные строки.

Мой ожидаемый результат

drink_name | condiment_1 | condiment_2 | condiment_3 | 
drink_1       test_1         test_2        null
drink_2       test_4         test_5        test_3

До сих пор из моего собственного теста я смог PRASE_JSON одну строку и получить результат. Но если я использую столбец, содержащий тот же JSON, то bigquery возвращается с ошибкой. Есть идеи?

Заранее спасибо!

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете рассмотреть ниже запрос.

WITH sample_data AS (
  SELECT """
    -- put your json here
    """ json
)
SELECT * FROM (
  SELECT JSON_VALUE(item, '$.name') drink_name,
         JSON_VALUE(cond, '$.name') condiment,
         offset + 1 AS offset
    FROM sample_data, 
  UNNEST (JSON_QUERY_ARRAY(json, '$.items')) item,
  UNNEST (JSON_QUERY_ARRAY(item, '$.condiment')) cond WITH offset
)  PIVOT (ANY_VALUE(condiment) AS condiment FOR offset IN (1, 2, 3));

Результаты запроса

Большое спасибо! Это именно то, что мне нужно! Тем не менее, не могли бы вы немного подробнее рассказать о смещенной части и поворотной части в конце? Я немного смущен. Заранее спасибо!

Jerry Tai 17.11.2022 03:22

@JerryTai, пожалуйста, ознакомьтесь с кратким объяснением ниже. docs.google.com/spreadsheets/d/…

Jaytiger 17.11.2022 15:39

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