HIVE必备语法

1、数据加载【必须掌握】(1,2,3,4,5)
从本地文件加载:
    hadoop fs -put 本地路径 hdfs路径;
    load data local path 本地路径 into table 表名;
    load data local path 本地路径 overwrite into table 表名;
从一个表加载到另一个表:
    insert into table table_name select语句--插入
    insert overwrite table table_name select 语句---覆盖
    create  table table_name like select语句--建表时把另一张表的格式复制过来
    
    1/在实战中,通常都是从MySQL直接导入到ods的表中,通过sqoop
    2/背景,老师现在自己建的数据源,在hdfs上创建了文件,将数据源通过编辑的方式,将数据源报错到hdfs上,
    然后他直接就可以查到了?
    --我突然就想起来hive的作用就是将HFDS中的数据和表进行映射,让我疑惑的是我印象中的加载方式好像没有这种.
    回头看了一眼,都是将Linux上的文件加载到hdfs上(让hive进行映射),或者直接加载到表中

2、创建分桶排序表(1,2,3,4,5)【重点】

create table table_name(
    name string,
    id int,
    years array<string>
)
clustered by name 
    sorted by (id desc)
     into 4 buckets;
row format deliminted 
collection trims terminated by "|"
​
3、创建普通表,查询时分桶排序【重点】(1,2,3,4,5)
set.mapreduce.job.reduce=n;
cluster by  不能倒序 等效于distrbute by  + order by (全局排序)   可以倒序
-- 为什么要在查询时分桶排序,不在建表时操作呢?
    分桶字段一定是经常查询和关联的字段
-- 有些字段我们不经常连接,偶尔使用一次且想提高连接效率,则可以使用该方法,为什么?
分桶排序比全局排序效率更高
4、正则匹配[了解](1,2,3,4,5)
rlike 
    .任意一个字符  * 任意个任意字符
    ....   等效与  .{4}
5、union联合查询【重要】(1,2,3,4,5)
union 是增加行
join  是增加列
union 会默认去重 想要不去重 union all
会默认使用哈希值排序,先要按照自己的规则排序需再排序合并后再添加
6、sampling抽样【理解】(1,2,3,4)
tablesample (bucket x out of y on column)
x 是从第几个桶开始取, 索引从1开始,其它索引从0开始
y 总桶数÷y 就是我们要取的桶数   
x 决不能大于y
column 是要抽取的字段
放在表名后面,如果有别名,放在别名前面
select * from table_nane tablesample(bucket x out of y on column)
​
rand()返回0-1的任意随机浮点数
包含0不博涵1
​
​
7、虚拟列【了解】(1,2,3)
INPUT_FILE_NAME:显示数据行在文件中的具体位置

Hive的函数

1、区分和Python的函数

2、分为

8、函数的分类(1,2,3)
UDF:一进一出:round()四舍五入
UDTF生成表函数:explode 炸裂函数
UDAF聚合函数:多进一出 count()
9、查看函数的使用方法【重要】(1,2,3)
show functions;
desc function extended +;
desc function extended rand;(不能有括号)
10、字符串函数(1,)

字符串拼接ws+字符串拆分(2个对比记忆)

'传智,有你,会更好'
'我','是','帅哥'
concat()
concat_ws('-','我','是','帅哥')--》连接符是在最前面
我是
spilt ('传智,有你,会更好',',')-->分隔符是在最后面

截取字符串的部分信息【必须得掌握】

'我爱北京天安门abc'
/*
 我  爱 北  京 天 安 门
 1   2  3  4  5  6  7
 -7 -6 -5 -4 -3 -2 -1
 */
 substr(字符串,起始位置,截取长度)
substr('我爱北京天安门abc',5,3)
substr('我爱北京天安门abc',-3,3)
证明两个都是从左往右走

hive和java,Python不同的点

trim
select trim('  su  sf  ')
清除两侧的空白,不能清除中间的,
hive不能清除制表符和换行符
java和Python可以清除制表符(\t)和换行符(\n)
11、时间函数【全背】

时间,日期,时间标准格式,

时间转日期不成功的两种情况 ,

获取指定时间的部分信息(年,季度),获取时间差(3种情况),时间的增加和减少(按天来算),

【时间转换为时间戳,将时间戳转换为时间类型,时间类型格式成自己想要的形式。_format】明天早上背

总结:不管是转换还是提取,都需要标准的时间格式

select `current_date`();
select `current_timestamp`();  timestamp  tablesample
yyyy-MM-dd HH:mm:ss
'2023-04-06 14:46:47.040000000'
select 格式不对(2023年11月1日)
select 日期残缺(2023-11-)
select year(`current_timestamp`())
select datediff(时间,时间)或者(日期,时间)
select dateadd(日期或者时间 +5/-4)
select
select
select
select
select
select
select
12、数学函数(1,)
获取从1-7的随机整数怎么搞??
ceil(rand()*7) 
获取从5-10的随机整数怎么搞??
ceil(rand()*5 +5)
向上取整,向下取整
 ceil      fioor
rand()
round()
​
13、条件函数(极其重要)【后面新零售项目,每个都用到它,先把它刷5次】(1,2,3)
1、if条件函数(hive的)昨天的if条件函数(shell的)
hive:
    if (条件 ,true返回的数据,false返回的数据)
    select name ,if(gender='男','男生','女生') from table_name;
2、空值类型  空值判断,
    null=null返回的还是null,并非布尔类型
    is null
    is notnull
3、空值替换  
    nvl(字段,默认字段)
    create table table_name1 as select if(gender='男',null,'女生') from table_name2;
    select nvl(gender,'男生') from table_name2;
4、获取第一个不为null的数据
    coalesce (1,null,3,null)
    coalesce (`array` (null,1,3))
    可以接收array类型,但是会把单个array看成一个整体
5、case when 的两种用法。[orderid  paytime totalmoney1  paypyte
                   
select                            值  返回数据
    orderid,
    paytime,
    case totalmoney1
        when 0 then '现金'(这个位置绝对不能有逗号)
        when 2 then '微信'
        else '未知'
    end
    as totalmoney2,
    paypyte
from table_name;
​
select                          判断条件  返回数据
    orderid,
    paytime,
    case 
        when totalmoney1 = 0 then ''
        when totalmoney1 = 2 then ''
        else '未知'
    end
    as totalmoney2,
    paypyte
from table_name;
​

14、数据类型转换
cast(原有数据 as 想要的数据类型)
cast('123.4' as int);

15、其它函数(哈希,CRC)
哈希取值(分桶排序,union默认排序)
CRC循环冗余码校验 手机下载软件时进行包的完整性检测

16、集合函数【理解】
array_concatins--》判断是否在内部  array_contains(array(1,null,4,2,7),7)判断7是否在array内
sort_array(1,3,2,0,4)--排序

17、CET表达式【非常重要】(1,)
with 临时表名1 as 查询集1,临时表名2 as 查询2,临时表名3 as查询集3
查询集3可以使用临时表名1和2
优势:只需要加载一次表到内存当中,不使用CET时,需要读取一次加载一次
with table_name1 as(select * from table_name2),
    table_name3 as (select * from table_name1)
select name ,id from table_name3;
​
18、炸裂函数和侧视图【理解】

array + map 炸裂 lateral view视窗

select explode (`map`())
两列N行  炸成K列和V列
select explode (`array`(1,2,3,4,,5,6))一列6行
​
​

案例 :

1、建表
create table table_name1(
    id int,
    years array<sting>
)
row format delimited 
    collection trims terminated by "|"
    
2、如何炸开?
方案一:
select explode(字段名) as 别名 from table_name1 b(炸成后的表起别名,一定要起)
3、利用侧视图合并表
select name , year from table_name1 lateral view explode(字段) b(表别名)  as字段别名;
​
​
N、今天用到的函数
rand()随机返回一个浮点数  
round()保留几位小数
​
单词:
extended:扩充的
coalesce: 
trim:
substr:
floor:
ceil:
记忆不清

获取第一个不为空的值

contains
contains
coalesce
coalesce
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值