我正在使用 Azure Synapse Spark sql 笔记本,我有一个查找表,其中包含主表中 15 个代码字段的显示值。我希望避免将查找表连接到主表 15 次来查找每个代码字段的显示值。
在 Qlik 脚本中,我会将查找表作为两列映射表加载到内存中,然后我可以在字段表达式中使用 applymap() 函数来检索显示值。
我可以使用 SparkSQL 中的等效项吗?
您可以编写 Spark SQL 用户定义函数(UDF)来从查找表中检索显示值并填充主表中的字段。这样,我们就可以避免对所有表使用
join
。
示例用户定义函数:
这是用户定义的函数,它将
input_value
作为输入并返回 display_value
作为查找表的输出。
CREATE OR REPLACE FUNCTION get_display_value(input_value STRING)
RETURNS STRING
AS
BEGIN
DECLARE display_value STRING;
SET display_value = (SELECT display_value FROM lookup_table WHERE input_value = input_value);
RETURN display_value;
END;
您可以在查询中使用
get_display_value(<column_name>)
来获取查找表值以及主表值。