HIVE数据导出CSV

HIVE数据导出CSV,第1张

此前一直使用HIVE的Insert overwrite到本地目录的方法进行文件导出,但问题多多。主要原因是分隔符经常出现在字段中,实 *** 中用竖杠|分隔问题较少。

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.语法

(1)load data:表示加载数据

(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号部门分到一个分区里面去。


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

原文地址: http://outofmemory.cn/sjk/10061495.html

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

发表评论

登录后才能评论

评论列表(0条)

保存