Mysql 在BigQuery中查询表
背景 我有一个表,有1列“data”,其中包含BigQuery中的“JSON”,如下所示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') 此查询抛出一
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级的快速操作。内部选择是运行静态查询而没有表的纯粹示例。但是您的数据在一个表中,所以您只能查询它。不清楚-您希望得到什么结果?您能提供输出中“聚合”行的示例吗?