Лучший способ отменить вкладку и выбрать столбец, если в таблице есть столбец с повторяющимися записями, который сам содержит много столбцов с повторяющимися записями - PullRequest
0 голосов
/ 14 февраля 2019

Допустим, у меня есть данные XML, которые сохраняются в таблице Bigquery, поэтому большая структура запроса может представлять собой некоторый нормальный атомарный столбец, а затем столбец повторяющихся записей, внутри этого столбца записи некоторый атомарный столбец и новый столбец повторяющихся записей, и это для многихстолбцы.

Теперь я хочу узнать, как лучше всего отложить вкладку, в основном, когда нам нужны данные из каждого столбца и применить агрегирование, скажем (сумма) для повторяющегося столбца.

Например, еслиЯ пишу запрос как Выбор имени, сумма (unit.unitprice) из теста, unnest (product1) p, Unnest (p.unit) unit - здесь единица повторяется в столбце записи в столбце повторяющихся записей продукта.

Itработает, но у меня есть другой столбец для другого продукта (например), поэтому, если я напишу

Выберите имя, сумму (unit1.unitprice), сумму (unit2.tax) из теста, unnest (product1) p1,Unnest (p1.unit) unit1, unnest (product2) p2, Unnest (p2.unit) unit2

Здесь начнется проблема, поскольку все три декартовых произведения дадут больше строки, а сумма будет неправильной.

Это только пример, в таблице есть еще такой столбец, к которому я хочу применить сумму и все.

Данные файла JSON, которые могут использовать аналогичную структуру: -

{ "Код": "123456", "время": "2018-08-27T16: 42: 04,000", "вентилятор": [{ "последовательность": 1, "единица": [{ "продать": "126,89", "стоимость": "126,89"}, { "продать": "126,89", "стоимость": "126.89"}], "продукт": [{ "плата": "40", "причина": "тестирование"}, {"fee": "400", "reason": "testing1"}]}], "AC": [{"sequence": 1, "unit": [{"sell": "1500", "Стоимость ":" 1500 "}]}, {" последовательность ": 2," единица ": [{" продать ":" 1500" , "стоимость": "1500"}, { "продать": "200",»cost ":" 250 "}]}]}

Запросы: - Этот запрос дает правильную сумму

select any_value (sku), sum (unit.cost) из nonpii_air_ticketed.test, unnest (fan) f, unnest (f.unit) unit

Когда мы добавляем еще один компонент (product) в unnest, сумма единиц изменяется и дает неправильное значение, и то же самое применимо, если у нас больше таких столбцов.

выберите any_value (sku), сумму (unit.cost), sum (fee.fee) из nonpii_air_ticketed.test, unnest (fan) f, unnest (f.unit) unit, unnest (f.product) плату

Схема таблицы со значением

1 Ответ

0 голосов
/ 14 февраля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  ANY_VALUE(sku), 
  SUM((SELECT SUM(cost) FROM f.unit)), 
  SUM((SELECT SUM(fee) FROM f.product)) 
FROM nonpii_air_ticketed.test, 
UNNEST(fan) f   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...