咨询:将BigQuery JavaScript UDF迁移至MySQL的实现方案
MySQL中实现BigQuery JSON数组拆分UDF的方案
一、MySQL对JavaScript UDF的支持情况
MySQL 8.0.19及更高版本支持用JavaScript编写用户定义函数(UDF),底层依托V8引擎,完全能实现你原BigQuery UDF的逻辑。如果你的MySQL版本低于这个版本,就只能用纯SQL语法来实现等效功能。
二、等效的MySQL JavaScript UDF实现
直接沿用原JS逻辑,适配MySQL的函数语法即可:
CREATE FUNCTION json2array(json TEXT) RETURNS JSON LANGUAGE JS DETERMINISTIC BEGIN if (json) { return JSON.parse(json).map(x => JSON.stringify(x)); } else { return []; } END;
说明:MySQL没有和BigQuery完全一致的ARRAY<STRING>类型,这里用JSON类型存储字符串数组,使用时可以通过JSON_TABLE展开,或者直接作为数组对象调用。
三、低版本MySQL的纯SQL替代方案
如果你的MySQL版本不支持JS UDF,可以用纯SQL函数实现相同效果:
CREATE FUNCTION json2array_sql(json TEXT) RETURNS JSON DETERMINISTIC BEGIN DECLARE result JSON DEFAULT '[]'; IF json IS NOT NULL AND json != '' THEN SET result = ( SELECT JSON_ARRAYAGG(JSON_QUOTE(j.value)) FROM JSON_TABLE(json, '$[*]' COLUMNS(value JSON PATH '$')) j ); END IF; RETURN result; END;
这个函数通过JSON_TABLE拆分输入的JSON数组,用JSON_QUOTE将每个元素转为标准JSON字符串格式,最后用JSON_ARRAYAGG重新组合成目标字符串数组的JSON结构,和原JS UDF输出完全一致。
内容的提问来源于stack exchange,提问作者Santosh Kumar Sahoo
相关产品推荐
相关产品推荐

