PostgreSQL查询UDF迁移BigQuery遇错,求多字段简洁查询方案
PostgreSQL UDF迁移至BigQuery的适配问题
需要将以下PostgreSQL格式的UDF迁移至BigQuery,该UDF接收单个STRING输入,从lookup表返回对应标签(无匹配时返回输入值):
CREATE OR REPLACE FUNCTION get_label (IN g_name text,OUT g_label text) STABLE STRICT parallel SAFE BEGIN ATOMIC SELECT gl_label AS g_label FROM lookup_table WHERE gl_name= g_name UNION ALL SELECT g_name --无匹配时返回输入值 LIMIT 1; END;
迁移到BigQuery后运行该UDF时,触发关联子查询错误。目前可通过LEFT JOIN实现预期逻辑,但这种方式对终端用户来说效率极低:
用户习惯的简洁查询写法:
SELECT id, get_label(field_1) AS field_1, get_label(field_2) AS field_2 ... FROM table
现在不得不改用的复杂嵌套写法:
SELECT id, COALESCE(field_1_lv, field_1) AS field_1, COALESCE(field_2_lv, field_2) AS field_2 FROM( SELECT t1.id, t1.field_1, t1.field_2, j1.gl_label AS field_1_lv, j2.gl_label as field_2_lv FROM table_1 t1 LEFT JOIN lookup_table j1 ON t1.field_1 = j1.gl_name LEFT JOIN lookup_table j2 ON t1.field_2 = j2.gl_name)
补充背景:业务表约10万行,lookup表约3千行。曾尝试使用临时UDF,但每次查询前都要粘贴代码,且需要写大量CASE语句,操作繁琐。
内容的提问来源于stack exchange,提问作者Pheonix
相关产品推荐
相关产品推荐

