Google bigquery 用于将json扩展为记录的BigQuery UDF
我有一个(JSON)字符串列,如下所示:Google bigquery 用于将json扩展为记录的BigQuery UDF,google-bigquery,user-defined-functions,Google Bigquery,User Defined Functions,我有一个(JSON)字符串列,如下所示: [{"someValue":6,"other":true, "maybeThisValue":"exists?"},{"someValue": "cool value", "other": null}] 最后,我想说: +------------+-------+----------------+ | someValue | other | maybeThisValue | +------------+-------+----------------
[{"someValue":6,"other":true, "maybeThisValue":"exists?"},{"someValue": "cool value", "other": null}]
最后,我想说:
+------------+-------+----------------+
| someValue | other | maybeThisValue |
+------------+-------+----------------+
| 6 | true | exists? |
+------------+-------+----------------+
| cool value | | |
+------------+-------+----------------+
由于模式变化太大,我希望获取字符串的键并从中动态生成记录(无数组或结构)。输入JSON将始终是具有单个深度键值(无子节点)的对象数组
我在想,对于一个UDF,这可能是不可能的,因为我们必须提前指定返回值,并且可能会有额外的列。但也许这是可能的两个UDF?一个自定义项能否生成并保存,然后执行另一个自定义项
或者我可以从一个UDF开始,它将给我(JSON)字符串的唯一键,然后编写一个dbt宏,它将使用该函数调用的返回??(我不确定这是否可行)
我知道如何在中实现这一点,但我想知道您是否有任何想法让它在BigQuery中工作,或者是否可以在UDF中实现,即使它有点慢,也会非常酷
转换数据类型是一件痛苦的事情,但是如果它能够检测到前5列都是数字,并且安全地转换为int,那将非常酷。。。我不知道该怎么做,所以字符串是好的
与此类似:
也许可以使用自定义JSONPath“****”
:
如果没有数组
,这可能是不可能的:/
也许这可以通过BigQuery脚本实现
也许我可以用这个做一部分
我可以得到这样的值
CREATE TEMP FUNCTION json2array(json STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return JSON.parse(json).map(x=>JSON.stringify(x));
""";
CREATE TEMPORARY FUNCTION CUSTOM_JSON_EXTRACT(json STRING, json_path STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return jsonPath(JSON.parse(json), json_path);
"""
OPTIONS (
library="gs://your_bucket/jsonpath-0.8.0.js"
);
select SPLIT(CUSTOM_JSON_EXTRACT(jsoncolumn,'*.'))
FROM `db.master`,
unnest(json2arrayUDF(JSON_EXTRACT(jsoncolumn, "$"))) jsoncolumn
现在我只需要拿到钥匙,然后以某种方式将这两件事匹配起来……这是一个很好的要求,但是现在在SQL中工作时,您需要已经定义了结果行的结构。我决定创建一个脚本,通过查找目标表的jsonstring列并使用Object.keys()@jaksco执行UDF来生成所需的SQL查询。您介意共享您的脚本吗?我遇到了完全相同的问题。谢谢。我再也不能访问这个脚本了,但是你可以做类似的事情。实际上,我不建议在BigQuery中解析字符串。这对于大数据来说太慢了。使用BQ在导入时自动创建的结构和数组将引导您找到性能最好的解决方案。你只需要把它们打开
|1 | 6 |
| | true |
| | exists? |
|2 | cool value |
| | |
| | |