当前位置:文档之家› hive自定义函数说明

hive自定义函数说明

Hive自定义函数说明函数清单:
用法:
getID
通过UUID来生成每一行的唯一ID:
select getid() ;
oracle_concat
hive的concat函数遇到空值的情况下会直接返回空,而在oracle中对于字符串类型空字符串与null是等价对待的
select default.oracle_concat('ff-',null,'','--cc');
Select concat('ff-',null,'','--cc');
getBirthDay
从身份证号码中截取生日信息,返回日期格式为’yyyy-MM-dd’
getGoodsInfo
self_date_format
为格式化来自oracle的时间格式,将格式为’yyyy/MM/dd’和’yyyy/MM/dd HH:mm:ss’的日期格式转换为’yyyy-MM-dd’
Select default. self_date_format(‘2012-12-12’);
Select default. self_date_format(‘20121212’,’yyyyMMdd’);
oracle_months_between
由于当前版本hive不带months_between函数,所以添加
oracle_decode
hive中的decode函数为字符编码函数和encode对应。

Oracle中decode函数类似case when 函数,添加oracle_decode函数减少sql的改写。

与为与oracle功能同步,本函数将null和字符串’’等价对待。

select default.oracle_decode('',null,1,2) r1,
default.oracle_decode(null,'',1,2) r2,
default.oracle_decode('aaa','','Nnull','aaa','is a*3','aaa') r3,
default.oracle_decode('ccc','', 'Nnull','aaa','is a*3','aaa') r4,
default.oracle_decode('','', 'Nnull','aaa','is a*3','aaa') r5;
BinomialTest
_FUNC_(expr1, expr2, p_value, alternativeHypothesis)
alternativeHypothesis:
接受指定值的字符串
取值:TWO_SIDED , GREATER_THAN , LESS_THAN
二项分布检测函数。

实现oracle中的二项分布检测功能。

计算expr1 等于exper2 的值占数据总数的二项分布检测结果,类型依据alternativeHypothesis 确定
days_between_360
实现execl中的day360功能getbirthday
select default. getbirthday(身份证号码);
f_get_interest_effect
f_get_monthpay_bsm
f_get_monthpay_int
f_get_work_days
f_paymentschedule
SELECT
SRC.SERIALNO
,SRC.ACCT_LOAN_NO
,PDATE AS PAYDATE--SRC.PAYDATE ,SRC.PERIODS
,SRC.BUSINESSSUM
,SRC.BIR
,SRC.EIR
,SID--,SRC.SEQID
,PRINCIPAL-- SRC.PAYBUSINESSSUM ,INTEREST -- SRC.PAYINTEREST
,SRC.PAYCUSTOMERSERVICEFEE
,SRC.PAYACCOUNTMANAGEFEE
,SRC.PAYINSURANCEFEE
,SRC.PAYBUGPAYFEE
,TYPE
,CURRENT_DATE AS ETL_IN_DT
,src.CANCELEDDATE
FROM
FINANCE.FIN_ACCT_PAYMENT_SCHEDULE_FIX SRC
LATERAL VIEW
DEFAULT.F_PAYMENTSCHEDULE(SRC.PAYDATE,SRC.BIR/1200,SRC.PERIODS,SRC.BU SINESSSUM)
MYTABLE AS PRINCIPAL, INTEREST, PDATE,SID
WHERE SRC.P_DAY='2017-02-14'limit10
udf_dictionary
字典表: default.dictionary
字段: p_name 分区, key1 string, key2 string, value string
使用:
1.字典表插入数据
2.用udf_dictionary函数从字典表提取数据, 该函数接收3个参数, 第一、第二参数必须为
常量。

三个参数分别对应字典表的p_name,key1,key2。

注意:字典表数据需要扫描和加载至内存,注意大小。

加载至内存数据对应于通过p_name,key1过滤;字典表内数据可以反复使用;存储过程中setp1放置DataHome/DICTIONARY下,包含DICTIONARY时自动依赖
Step 1:
INSERT OVERWRITE TABLE default.dictionary
PARTITION(p_name='s3.CODE_LIBRARY_ITEMNAME')
SELECT
a.codeno
a.ITEMNO,
a.ITEMNAME
FROM s3.CODE_LIBRARY a;
Step 2:
Select DEFAULT.udf_dictionary('s3.CODE_LIBRARY_ITEMNAME ','Occupation',6);
default.ExtractCoordinates
单一参数入参:
select default.ExtractCoordinates('<126.542076,44.82494>');
select default.ExtractCoordinates('<+31.61328064,+120.47313897> +/- 1414.00m (speed -1.00 mps / course -1.00) @ 2017/1/22 中国标准时间19:27:16');
select default.ExtractCoordinates('<+31.61328064,+120.47313897> +/- 1414.00m (speed -1.00 mps / course -1.00) @ 2017/1/22 中国标准时间19:27:16');
双参数入参:
P1: 经度
P2:纬度
select default.ExtractCoordinates('东经120/26/39','北纬40/21/55')
select default.ExtractCoordinates('105.8490712595','31.8176806624')
查询结果使用:
select ll.lng,t from (select
default.ExtractCoordinates('105.8490712595','31.8176806624') as ll) a
default.distanceSimplify
select default.distanceSimplify(纬度1,经度1, 纬度2, 经度2) from table;
default.f_unpivot
实现行转列
select default.f_unpivot('key1','key1,value1,value2', key1,value1,value2) from tmp;
default.f_unpivot(键值名称,所有列名称(必须包含键值名称),所有列)
键值名称和列名称格式为字符串,由逗号分隔
default.f_unpivot2
实现行转列
select default.f_unpivot2('key1,key2','V1,V2,V3', K1,K2,V1,Value1,V2,Value2,V3,Value3) from tmp;。

相关主题