Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Bigquery不允许聚合的聚合_Sql_Arrays_Json_Object_Google Bigquery - Fatal编程技术网

Sql Bigquery不允许聚合的聚合

Sql Bigquery不允许聚合的聚合,sql,arrays,json,object,google-bigquery,Sql,Arrays,Json,Object,Google 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.eve

我正在尝试查询我的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"
            ]
        }
    }
}
如果我在另一个数组\u AGG中尝试一个数组\u AGG,我会得到不允许的聚合的聚合。
我知道我要问的不是那么简单,但类似的解决方案也会奏效

首先需要聚合到最高级别的数组中。之后,您可以使用子查询重新排列数据:

这是一个不能准确反映您所需输出的操作,但可灵活处理各种操作类型:

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

希望这有帮助

虽然我对BigQuery一无所知,但您似乎需要嵌套操作并再次嵌套标签,即三级查询以实现最终结果。使用CTEs尝试此查询:。尝试查询一天的数据。工作!但是,当我尝试处理最后30天的数据时,Big Query抱怨:在查询执行过程中超出了资源:查询无法在分配的内存中执行。峰值使用率:限制的119%。顶级内存使用者:聚合函数和分组依据子句:98%其他/未分配:2%