Hive中如何将临时宏转换为临时函数?修改内容及格式咨询
Hive临时宏转临时函数的修改要点与格式说明
一、Hive临时函数的标准创建格式
Hive临时函数仅在当前会话生效,退出会话后自动失效,核心创建语法如下:
CREATE TEMPORARY FUNCTION 函数名(参数名 参数类型[, 参数名 参数类型...]) RETURNS 返回值类型 AS '函数体表达式';
TEMPORARY:声明函数为临时类型,仅当前会话可用- 必须显式指定返回值类型,这是临时函数与临时宏的核心区别之一
- 函数体表达式需要用单引号包裹
二、从临时宏转临时函数的具体修改点
针对你提供的临时宏代码,需完成3处关键修改:
- 替换关键字:将
CREATE TEMPORARY MACRO替换为CREATE TEMPORARY FUNCTION - 添加返回值声明:新增
RETURNS VARCHAR(17)(原逻辑是16位字符串拼接1位校验位,返回总长度17的字符串) - 衔接并包裹函数体:在参数定义后添加
AS关键字,将整个逻辑表达式用单引号包裹
三、修改后的完整临时函数代码
CREATE TEMPORARY FUNCTION AAA (input VARCHAR(16)) RETURNS VARCHAR(17) AS 'input|| SUBSTR( LPAD( (CASE WHEN SUBSTR(LPAD(input,16,0),15,1) = 1 THEN 2 WHEN SUBSTR(LPAD(input,16,0),15,1) = 2 THEN 4 WHEN SUBSTR(LPAD(input,16,0),15,1) = 3 THEN 6 WHEN SUBSTR(LPAD(input,16,0),15,1) = 4 THEN 8 WHEN SUBSTR(LPAD(input,16,0),15,1) = 5 THEN 10 WHEN SUBSTR(LPAD(input,16,0),15,1) = 6 THEN 1 WHEN SUBSTR(LPAD(input,16,0),15,1) = 7 THEN 3 WHEN SUBSTR(LPAD(input,16,0),15,1) = 8 THEN 5 WHEN SUBSTR(LPAD(input,16,0),15,1) = 9 THEN 7 ELSE 0 END) + (CASE WHEN SUBSTR(LPAD(input,16,0),16,1) = 1 THEN 1 WHEN SUBSTR(LPAD(input,16,0),16,1) = 2 THEN 2 WHEN SUBSTR(LPAD(input,16,0),16,1) = 3 THEN 3 WHEN SUBSTR(LPAD(input,16,0),16,1) = 4 THEN 4 WHEN SUBSTR(LPAD(input,16,0),16,1) = 5 THEN 5 WHEN SUBSTR(LPAD(input,16,0),16,1) = 6 THEN 6 WHEN SUBSTR(LPAD(input,16,0),16,1) = 7 THEN 7 WHEN SUBSTR(LPAD(input,16,0),16,1) = 8 THEN 8 WHEN SUBSTR(LPAD(input,16,0),16,1) = 9 THEN 9 ELSE 0 END) ,3,0), 3, 1)';
内容的提问来源于stack exchange,提问作者ryan
相关产品推荐
相关产品推荐

