insert overwrite local directory '/url/lxb/hive'
row format delimited
fields terminated by ','
select * from table_name limit 100
此外也尝试使用HIVE -E的方法,再通过sed 's/x01/,/g'命令进行文件过滤。
两种效果均不是很理想,究其原因,主要是两种方法导出的文件都不是标准CSV。
目前使用比较顺畅的方式是通过spark-shell2, 先把Hive表转化为DataFrame,再基于DataFrame.writer.csv()(DataFrameWriter.csv)导出到HDFS。
df = spark.sql("select * from test.student3")
df.write.csv("/HDFS目录")
hadoop fs -get /HDFS目录 XXX
----------------------------------- 2019-08-05更新--------------------------------------
beeline -n hive -u jdbc: hive2://XXXX:10000 --verbose=true --outputformat=csv2 -e "XXXXXXXX" >>XXX.csv
通过beeline导出HIVE数据至CSV较为稳定。
然后导出的数据编码为utf-8,需要进行转码。
iconv -f UTF-8 -t GBK XXX.csv to XXX_gbk.csv
有时候转GBK会报错,可以选另外两种Excel可以直接打开的编码格式。
1.语法
(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区
2.实 *** 案例
(0)创建一张表
(1)加载本地文件到hive
(2)加载HDFS文件到hive中
上传文件到HDFS
加载HDFS上数据
(3)加载数据覆盖表中已有的数据
上传文件到HDFS
加载数据覆盖表中已有的数据
1.创建一张分区表
2.基本插入数据
3.基本模式插入(根据单张表查询结果)
4.多插入模式(根据多张表查询结果)(有问题,只是查询单表不同分区的)
根据查询结果创建表(查询的结果会添加到新创建的表中)
1.创建表,并指定在hdfs上的位置
2.上传数据到hdfs上
3.查询数据
注意:先用export导出后,再将数据导入。
1.将查询的结果导出到本地
2.将查询的结果格式化导出到本地
3.将查询的结果导出到HDFS上(没有local)
基本语法:(hive -f/-e 执行语句或者脚本 >file)
后续..............................。
注意:Truncate只能删除管理表,不能删除外部表中数据
1.全表查询
2.选择特定列查询
注意:
(1)SQL 语言大小写不敏感。
(2)SQL 可以写在一行或者多行
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写。
(5)使用缩进提高语句的可读性。
1.重命名一个列
2.便于计算
3.紧跟列名,也可以在列名和别名之间加入关键字‘AS’
4.案例实 ***
查询名称和部门
(1)where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。
(2)where后面不能写分组函数,而having后面可以使用分组函数。
(3)having只用于group by分组统计语句。
空字段赋值
5.CASE WHEN
需求
求出不同部门男女各多少人。结果如下:
创建本地emp_sex.txt,导入数据
创建hive表并导入数据
按需求查询数据
Order By:全局排序,一个Reducer
1.使用 ORDER BY 子句排序
ASC(ascend): 升序(默认)
DESC(descend): 降序
2.ORDER BY 子句在SELECT语句的结尾
3.案例实 ***
(1)查询员工信息按工资升序排列
(2)查询员工信息按工资降序排列
按照员工薪水的2倍排序
按照部门和工资升序排序
Sort By:每个Reducer内部进行排序,对全局结果集来说不是排序。
1.设置reduce个数
2.查看设置reduce个数
3.根据部门编号降序查看员工信息
4.将查询结果导入到文件中(按照部门编号降序排序)
Distribute By:类似MR中partition,进行分区,结合sort by使用。
注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。
对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
案例实 *** :
当distribute by和sorts by字段相同时,可以使用cluster by方式。
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。
1)以下两种写法等价
注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)