hive里查看字段类型的函数

hive里查看字段类型的函数,第1张

文本框设置InputMask属性='9999999'(位数你按需要定)。

属性值

cMask

指定如何输入和显示数据。下面的表格显示了cMask的可能值。cMask说明

将小写字母转换为大写字母,允许数字,空格,和符号,如减号(_)数据。在固定的位置上显示货币符号,符号由SETCURRENCY命令指定。显示位置浮动的货币符号,在微调器和文本框中其位置在靠近数字的地方。显示当前Windows控制面板中区域和语言选项中设置的数字分组,或者分隔符,标记符。显示当前由SETPOINT命令设置的小数点符号(默认为句号())允许数字和符号数据。只允许字母数据。放置在指定的位置输入非十六进制的符号。只允许逻辑型数据。只允许字母和数字数据。仅允许字母表中的字符以并将它们转换为大写(A-Z)。仅允许字母表中的字符以并将它们转换为小写(a-z)只允许任何数据。允许字母Y,y,N,和n做为逻辑型数据的值。分别代表T和F。应用于:Column对象|ComboBox控件|Spinner控件|TextBox控件InputMask不同于Format属性。Format会影响整个输入字段,你可以混合使用几个Format码,但它们影响输入字段中的所有数据。

:Hive的insert语句能够从查询语句中获取数据,并同时将数据Load到目标表中。现在假定有一个已有数据的表staged_employees(雇员信息全量表),所属国家cnty和所属州st是该表的两个属性,我们做个试验将该表中的数据查询出来插入到另一个表

一般的求取前20%,就是使用两个窗口函数,如下获取

这种写法是一般的写法,当然也可以把count放在where那,来获取总的行数

hive中提供了一个非常有用的函数桶函数,把全部的数据分成5个桶获取第一个桶即可

percentile_approx / percentile -- spark

approx_percentile -- presto

kylin

percentile_approx(order_price, array(01,05,075,095),9999) over(order by order_price asc )

按照降序,获取中位数,和学过的窗口函数order by排序功能一样,局部的中位数

要想获取全局的中位数直接over()为空即可,在遇到数据倾斜可能失效,使用这个函数和前面的窗口写法获取的大差不差

这类小样本的问题是不能使用上面的三种方法的,可能有的分区只有几条数据,根本就不满足20%的条件,或者是由于样本太小,第20%不存在,还有一种就是特定需求

说一下这个需求的背景,销售排行榜上,我需要对四分位的销售者给予激励,这类销售者具备较大的潜力

有三种方法来解决这个问题,由于20%不存在,那么我们取20%-25%都是可以接受的,在窗口写法的基础上,排个序获取后几位即可,最后一种方法就是在窗口的写法上嵌套一层偏移量函数

目前没有明确的判断语句只能通过脚本

show create table tableName 有partition的是分区

获取分区

show partitions tableName 就能获取这个表所有的表名

如果用shell脚本写的话是这样

tablePartition=`hive -e "show create table tableName " 2>&1 | grep "partition"`

if [ -n $tablePartition ]

then

Partitions=`hive -e " show partitions tableName"`

fi

#整型

TINYINT — 微整型,只占用1个字节,只能存储0-255的整数。

SMALLINT– 小整型,占用2个字节,存储范围–32768 到 32767。

INT– 整型,占用4个字节,存储范围-2147483648到2147483647。

BIGINT– 长整型,占用8个字节,存储范围-2^63到2^63-1。

#布尔型

BOOLEAN — TRUE/FALSE

#浮点型

FLOAT– 单精度浮点数。

DOUBLE– 双精度浮点数。

#字符串型

STRING– 不设定长度。

Structs:一组由任意数据类型组成的结构。比如,定义一个字段C的类型为STRUCT {a INT; b STRING},则可以使用a和Cb来获取其中的元素值;

Maps:和Java中的Map相同,即存储K-V对的;

Arrays:数组;

复杂数据类型的声明必须使用尖括号指明其中数据字段的类型。定义三列,每列对应一种复杂的数据类型,如下所示。

TEXTFILE //文本,默认值

SEQUENCEFILE // 二进制序列文件

RCFILE //列式存储格式文件 Hive06以后开始支持

ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive011以后开始支持

PARQUET //列出存储格式文件,Hive013以后开始支持

#参考博客:

>

select orderid,fenjian,timee

from

(

select orderid,fenjian,timee,row_number(orderid,fenjian) rn

from (

select orderid,fenjian,timee from tableName

distribute by orderid,fenjian sort by orderid,fenjian,timee asc

) t1

) t2

where t2rn=1

目标:

1、掌握hive基础语法、常用函数及其组合使用

2、掌握一些基本业务指标的分析思路与实现技巧

1)某次经营活动中,商家发起了“异性拼团购”,试着针对某个地区的用户进行推广,找出匹配用户。

注意:如果该表是一个分区表,则where条件中必须对分区字段进行限制

2)选出在2018年12月31日,购买的商品品类是food的用户名、购买数量、支付金额

3)试着对本公司2019年第一季度商品的热度与价值度进行分析。

"2019年一月到三月,每个品类有多少人购买,累计金额是多少"

GROUP BY HAVING(分类汇总过滤)

4)找出在2019年4月支付金额超过5万元的用户,给这些VIP用户赠送优惠券

5)2019年4月,支付金额最多的TOP5用户

查看Hive中的函数:show functions;

查看具体函数的用法:1)desc function 函数名;2)desc function extended函数名;

6)

7)用户的首次激活时间,与2019年5月1日的日期间隔。

datediff(string enddate,string startdate):结束日期减去开始日期的天数

拓展:日期增加函数(增加天数)、减少函数(减少天数) —— date_add、date_sub(类型要是string类型的)

date_add(string startdate,int days)、date_sub(string startdate,int days)

case when 函数

8)统计以下四个年龄段20岁以下、20-30岁、30-40岁、40岁以上的用户数

case when 的时候不用加group by,只有在聚合函数的时候才需要group by

if 函数

9)统计每个性别的用户等级高低分布情况(假设level大于5为高级,注意列名不能使用中文的)

10)分析每个月都拉新情况

substring(stringA,INT start,int len),substr(stringA,INT start,int len),截取起始位置和截取长度

extra1需要解析json字段,然后用$key取出想要获取的value;

extra2使用的是中括号加引号的方式进行字段提取和分组;

两种写法要看字段类型的不同采取不同的方式

11)求不同手机品牌的用户数

12)ELLA用户的2018年的平均每次支付金额,以及2018年最大的支付日期和最小的支付日期的间隔

13)2018年购买的商品品类在两个以上的用户数

步骤总结:

1、先求出每个人购买的商品品类书

2、筛选出购买商品品类书大于2的用户

3、统计符合条件的用户有多少个

14)用户激活时间在2018年,年龄段在20-30岁和30-40岁的婚姻情况分布

步骤总结:

1、先选出激活时间在2018年的用户,并把他们所在的年龄段计算好,并提取出婚姻状况;

如何select后面没有进行聚合,则可以不用使用group by,直接使用where进行过滤就可以;

2、取出年龄段在20-30岁和30-40岁的用户,把他们的婚姻状况转义成可理解的说明;

3、聚合计算,针对年龄段,婚姻状况的聚合

用到from_unixtime和unix_timestamp两种函数:

from_unixtime:时间戳转日期函数

用法:from_unixtime(bigint unixtime[, stringformat])

返回值: string

substr(from_unixtime(unix_timestamp()),1,10)

结果为:2017-01-03

select from_unixtime(unix_timestamp('20180905','yyyymmdd'),'yyyy-mm-dd')

from dwceshi_data

结果如下:

2018-09-05

2018-09-05转成20180905

select from_unixtime(unix_timestamp('2018-09-05','yyyy-mm-dd'),'yyyymmdd')

from dwceshi_data

结果如下:

20180905

用法:unix_timestamp(string date)

注意:里面格式必须是yyyy-MM-dd HH:mm:ss,如果不是会返回null值

返回值: bigint

from dwceshi_data;

结果如下:

1536120063

获取当前日期的时间戳:

select unix_timestamp()

from dwceshi_data;

结果如下:

1536126324

hive表中,存放着无法直接识别的字符串格式的时间,如'20170728102031',要计算两个时间相差的秒数。

1、先将字符串调整为hive可以识别的格式,即将形如'20170728102031' 转成 '2017-07-28 10:20:31'。 因为hive的 regexp_replace 不支持子语句,没法一次转换,只能用万能的 substr 和拼接函数来写了

select concat(substr('20170728102031',1,4),'-',

substr('20170728102031',5,2),'-',

substr('20170728102031',7,2),' ',

substr('20170728102031',9,2),':',

substr('20170728102031',11,2),':',

substr('20170728102031',13,2))

select unix_timestamp(concat(substr('20170728102031',1,4),'-',substr('20170728102031',5,2),'-',

substr('20170728102031',7,2),' ',

substr('20170728102031',9,2),':',

substr('20170728102031',11,2),':',

substr('20170728102031',13,2))) - unix_timestamp(concat(substr('20170728112031',1,4),'-',

substr('20170728112031',5,2),'-',

substr('20170728112031',7,2),' ',

substr('20170728112031',9,2),':',

substr('20170728112031',11,2),':',

substr('20170728112031',13,2)))

hive > select create_time ,datediff(from_unixtime(unix_timestamp(),’yyyy-MM-dd HH:mm:ss’), create_time) from test;

结果:当前时间是2017-11-16 与create_time的11-10之间差了6天,输出6;

hive >select datediff(’2012-12-08′,’2012-05-09′) from dual;

213

日期时间转日期函数: to_date语法: to_date(string timestamp) 返回:string

hive> select to_date(’2011-12-08 10:03:01′) from dual;

2011-12-08

2011

以下可以取到 month,hour,minute,second 用法和上面的一样

日期转周函数: weekofyear语法: weekofyear (string date) 返回值: int 说明: 返回日期在当前的周数。

hive> select weekofyear(’2011-12-08 10:03:01′) from dual;

49

日期增加函数: date_add语法:

date_add(string startdate, int days)

返回值: string

说明: 返回开始日期startdate增加days天后的日期

举例:

hive> select date_add(’2012-12-08′,10) from dual;

2012-12-18

日期减少函数: date_sub语法: date_sub (string startdate, int days)

返回值: string

说明: 返回开始日期startdate减少days天后的日期。

举例:

hive> select date_sub(’2012-12-08′,10) from dual;

2012-11-28

所以我们利用其中的hour和datediff来获取create_time与当前时间的小时差:

hive> select create_time,

(hour(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'))-

hour(create_time)+(datediff(from_unixtime(unix_timestamp(),

'yyyy-MM-dd HH:mm:ss'), create_time))24) as hour_dValue

以上就是关于hive里查看字段类型的函数全部的内容,包括:hive里查看字段类型的函数、hive 查询某一列有多少中取值、2021-05-28-Hive-21(求取前10%的四种方法)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9284563.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存