Mysql 通过SQL从某些行创建json列
我正在尝试使用SQL(Spark SQL 3.0,databricks runtime 7.0)从现有表创建一个新表。 我想将一个特定列的一些行聚合到新表中的json列中 现有表格Mysql 通过SQL从某些行创建json列,mysql,sql,json,apache-spark-sql,Mysql,Sql,Json,Apache Spark Sql,我正在尝试使用SQL(Spark SQL 3.0,databricks runtime 7.0)从现有表创建一个新表。 我想将一个特定列的一些行聚合到新表中的json列中 现有表格 id, year, month, val u_ced 2002 05 v_scyronc u_ced 2002 05 v_ytbtbdv u_ced 2002 05 v_utncasx u_pny 2005 07 v_opcrgae u_pny
id, year, month, val
u_ced 2002 05 v_scyronc
u_ced 2002 05 v_ytbtbdv
u_ced 2002 05 v_utncasx
u_pny 2005 07 v_opcrgae
u_pny 2005 07 v_wytnecs
我需要一张像这样的新桌子
id, val_json
u_ced {{"shown": true, "val_id": "v_scyronc" },
{"shown": true, "val_id": "v_ytbtbdv" },
{"shown": true, "val_id": "v_utncasx" },
{"shown": true, "val_id": "v_opcrgae" },
{"shown": true, "val_id": "v_wytnecs" }
}}
u_pny {{"shown": true, "val_id": "v_opcrgae" },
{"shown": true, "val_id": "v_wytnecs" }
}}
我想我需要一个“groupby”,但我不知道如何创建json列
我试过:
SELECT json_object(array_agg(id), array_agg(val))
但是,我有一个错误:
Error in SQL statement: AnalysisException: Undefined function: 'json_object'.
This function is neither a registered temporary function nor a permanent function registered in the database 'default'
希望有人能在这方面帮助我
谢谢Spark SQL没有函数“json\u object” 看这个
函数
to_json
,collect_list
和concat_ws
可能有用。这可能有用-
df.show(假)
df.printSchema()
/**
* +-----+-----+------+---------+
*| id,|年,|月,| val|
* +-----+-----+------+---------+
*| u ced | 2002 | 5 | v|u scrync|
*| u ced | 2002 | 5 | v|u ytbtbdv|
*| u ced | 2002 | 5 | v|u utncasx|
*| u|pny | 2005 | 7 | v|u opcrgae|
*| u|pny | 2005 | 7 | v|u wytnecs|
* +-----+-----+------+---------+
*
*根
*|--id,:字符串(nullable=true)
*|--year,:整数(nullable=true)
*|--month,:整数(nullable=true)
*|--val:string(nullable=true)
*/
df.带柱(“显示”,亮起(真实))
.WithColumnRename(“val”、“val\u id”)
.withColumn(“val_json”、struct(col(“显示”)、col(“val_id”))
.groupBy(“id”)
.agg(collect_list(“val_json”).as(“val_json”))
。选择(col(“id”)到_json(col(“val_json”)。作为(“val_json”))
.show(假)
/**
* +-----+-------------------------------------------------------------------------------------------------------------+
*| id | val|u json|
* +-----+-------------------------------------------------------------------------------------------------------------+
*| u_pny |[{“显示”:真,“val_id”:“v_opcrgae”},{“显示”:真,“val_id”:“v_wytnecs”}]|
*| u|ced |[{“显示”:true,“val_id”:“v_scyronc”},{“显示”:true,“val_id”:“v_ytbtbdv”},{“显示”:true,“val_id”:“v_utncasx”}]|
* +-----+-------------------------------------------------------------------------------------------------------------+
*/
按照建议检查您的postgresql版本。我知道这不是您的主要问题,但消息错误早于您的目标。