Агрегации агрегаций не допускаются Bigquery

Я пытаюсь запросить мою таблицу аналитики google bigquery. Поля, которые меня интересуют, являются вложенными. Структура, которую я хочу получить, соответствует: Категория > Подкатегория > Подподкатегория.

Я попытался сделать следующее:

select 
event_param1.value.string_value AS category,
event_param2.value.string_value AS action,
ARRAY_AGG(DISTINCT event_param3.value.string_value) AS label
FROM `analytics.events_20*` AS t,
UNNEST(event_params) as event_param1,
UNNEST(event_params) as event_param2,
UNNEST(event_params) as event_param3
where
parse_date('%y%m%d', _table_suffix) between DATE_sub(current_date(), interval 30 day) and DATE_sub(current_date(), interval 1 day) AND
event_param1.key = 'category' and
event_param2.key = 'action' and
event_param3.key = 'label'
group by category, action
order by category, action

Но это возвращает одну строку с одной категорией, одной подкатегорией и массивом всех подподкатегорий.

Я хочу иметь одну строку с одной категорией, всеми подкатегориями, всеми подподкатегориями в каждой подкатегории.

Это пример того, что я получаю:

{
    "category": "Apple Watch",
    "action": "Apple Badge Clicked",
    "label": [
      "User Landing Page",
      "Attract",
      "Guest Landing Page",
      "Guest In Workout",
      "User In Workout"
    ]
  },
  {
    "category": "Apple Watch",
    "action": "CONNECTED",
    "label": [
      "User Landing Page",
      "Attract",
      "Guest Landing Page",
      "Guest In Workout",
      "User In Workout"
    ]
  }

И это то, что я хочу:

{
    "category": "Apple Watch",
    "action": {
        "Apple Badge Clicked": {
            "label": [
                "User Landing Page",
                "Attract",
                "Guest Landing Page",
                "Guest In Workout",
                "User In Workout"
            ]
        },
        "CONNECTED": {
            "label": [
                "User Landing Page",
                "Attract",
                "Guest Landing Page",
                "Guest In Workout",
                "User In Workout"
            ]
        }
    }
}

Если я попробую ARRAY_AGG внутри другого ARRAY_AGG, я получу Aggregations of aggregations are not allowed Bigquery. Я знаю, что то, что я прошу, не так просто, но подобное решение тоже сработает.

Хотя я ничего не знаю о BigQuery, вам, похоже, нужно вложить действие и снова вложить этикетка (т. е. трехуровневый запрос) для достижения конечного результата. Попробуйте этот запрос с CTE: pastebin.com/DEacBHtv.

Parfait 07.05.2019 23:07
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
1 518
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам нужно сначала агрегировать в массив на самом высоком уровне. После этого вы можете переупорядочить данные с помощью подзапросов:

Это не точно отражает желаемый результат, но гибок со всеми типами действий:

WITH test AS (
  SELECT * FROM UNNEST([
    STRUCT('Apple Watch' AS category, 'Apple Badge Clicked' as action, 'User Landing Page' as label),
    ('Apple Watch','Apple Badge Clicked','Attract'),
    ('Apple Watch','Apple Badge Clicked','Guest Landing Page'),
    ('Apple Watch','CONNECTED','User Landing Page'),
    ('Apple Watch','CONNECTED','Attract'),
    ('Apple Watch','CONNECTED','User In Workout')
  ])  
),
-- first level of aggregation, prepare for fine tuning
catAgg as (
  SELECT 
    category,
    ARRAY_AGG(struct(action, label)) AS catInfo
  FROM test
  GROUP BY 1
)

SELECT 
  category,
  -- feed sub-query output into an array "action"
  array(SELECT AS STRUCT 
     action as actionType, -- re-group data within the array by field "action"
     array_agg(distinct label) as label
   FROM UNNEST(catInfo)
   GROUP BY 1
   ) as action
FROM catAgg

надеюсь это поможет

Пробовал для запроса данных за один день. Работал! Но когда я пытаюсь получить данные за последние 30 дней, Big Query жалуется: Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 119% of limit. Top memory consumer(s): aggregate functions and GROUP BY clauses: 98% other/unattributed: 2%

AAlferez 10.05.2019 17:15

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