我正在将很少的查询从谷歌BigQuery迁移到MySQL,并需要帮助将下面的BigQuery Java脚本UDF复制到等效的MySQL。我在网上没有看到任何参考资料。MySQL支持Java吗?这里的要求是将JSON数组拆分为一个简单的字符串数组(每个字符串表示单个JSON字符串)。
CREATE OR REPLACE FUNCTION `<project>.<dataset>.json2array`(json STRING) RETURNS ARRAY<STRING> LANGUAGE js AS R"""
if (json) {
return JSON.parse(json).map(x=>JSON.stringify(x));
} else {
return [];
}
""";发布于 2022-11-06 17:34:54
不,MySQL不支持JavaScript存储函数。MySQL支持用过程语言编写的存储函数。它还支持从C或C++编译的可加载服务器的函数,但它们并不常见。
MySQL没有ARRAY数据类型。在MySQL中最接近的是JSON数据类型,它可能是一个一维字符串数组。如果您的JSON文档被保证是该格式的数组,那么只需执行以下操作:
CREATE FUNCTION json2array(in_string TEXT) RETURNS JSON DETERMINISTIC
RETURN CAST(in_string AS JSON);在本例中,我不确定创建存储函数的意义是什么,因为它只执行CAST()所能做的事情。因此,您最好调用CAST()并跳过创建存储函数。
也许,存储函数的一个很好的用途是测试输入,以确保它是一个具有数组格式的文档(使用类型())。例如:
CREATE FUNCTION json2array(in_string TEXT) RETURNS JSON DETERMINISTIC
RETURN IF(JSON_TYPE(in_string) = 'ARRAY', CAST(in_string AS JSON), JSON_ARRAY());https://stackoverflow.com/questions/74338018
复制相似问题