Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
Mysql 在BigQuery中查询表_Mysql_Sql_Json_Group By_Google Bigquery - Fatal编程技术网

Mysql 在BigQuery中查询表

Mysql 在BigQuery中查询表,mysql,sql,json,group-by,google-bigquery,Mysql,Sql,Json,Group By,Google Bigquery,背景 我有一个表,有1列“data”,其中包含BigQuery中的“JSON”,如下所示 data {"name":"x","mobile":999,"location":"abc"} {"name":"x1","mobile":9991,"location":"abc1"} 现在,我想使用groupby函数: SELECT data FROM table GROUP BY json_extract(data,'$.location') 此查询抛出一

背景

我有一个表,有1列“data”,其中包含BigQuery中的“JSON”,如下所示

 data    
 {"name":"x","mobile":999,"location":"abc"}
 {"name":"x1","mobile":9991,"location":"abc1"}
现在,我想使用groupby函数:

SELECT
    data
FROM
    table 
GROUP BY 
    json_extract(data,'$.location')
此查询抛出一个错误

GROUP BY中的表达式JSON_EXTRACT([data],“$.location”)无效

所以,我将查询修改为

SELECT
    data, json_extract(data,'$.location') as l
FROM
    table 
GROUP BY
    l
此查询引发错误

GROUP BY列表中不存在表达式“data”

查询

如何在GROUPBY子句中使用JSON字段


(在查询上下文中)使用JSON填充列有哪些限制。

您是按位置对某些内容进行分组,但没有对
数据
字段使用聚合函数,因此编译器不知道选择哪个或在源代码上聚合什么

为了说明示例,我编译了这个测试查询,它使用
group\u concat

select group_concat(data),location from
(
select * from
(SELECT '{"name":"x","mobile":999,"location":"abc"}' as data,json_extract('{"name":"x","mobile":999,"location":"abc"}','$.location') as location),
(SELECT '{"name":"x","mobile":111,"location":"abc"}' as data,json_extract('{"name":"x","mobile":111,"location":"abc"}','$.location') as location),
(SELECT '{"name":"x1","mobile":9991,"location":"abc1"}' as data,json_extract('{"name":"x1","mobile":9991,"location":"abc1"}','$.location') as location)

) d
group by location
并返回:

+-----+---------------------------------------------------------------------------------------------------+----------+--+
| Row | f0_                                                                                               | location |  |
+-----+---------------------------------------------------------------------------------------------------+----------+--+
| 1   | {"name":"x","mobile":999,"location":"abc"},"{""name"":""x"",""mobile"":111,""location"":""abc""}" | abc      |  |
+-----+---------------------------------------------------------------------------------------------------+----------+--+
| 2   | {"name":"x1","mobile":9991,"location":"abc1"}                                                     | abc1     |  |
+-----+---------------------------------------------------------------------------------------------------+----------+--+

试试下面的方法

SELECT location,
  GROUP_CONCAT_UNQUOTED(REPLACE(data, ',"location":"' + location + '"', '')) AS data
FROM (
  SELECT data,
    JSON_EXTRACT_SCALAR(data,'$.location') AS  location,
  FROM YourTable
)
GROUP BY location  

好的,很好,但是如果我有大量的行,这个方法可以扩展吗?如果你说的是BigQuery,是的,甚至可以运行PB级的快速操作。内部选择是运行静态查询而没有表的纯粹示例。但是您的数据在一个表中,所以您只能查询它。不清楚-您希望得到什么结果?您能提供输出中“聚合”行的示例吗?