hive cheatsheet

1. Hive导出到.csv文件

由于Hive中导出的文件不是以逗号,而是以Tab(或者说’\t’)为分隔符的,因此,下面的命令自己试过可以转换为逗号分隔的文件,也就是真正的csv文件。

当然,有时候可能还需要跟转码的工具进行组合,转换编码格式。

1
2
3
4
5
sed -i ‘s/\t/,/g’ xxx.csv
``````
当然,第一步是
```bash
hive -e “SQL语句” > xxx.csv

所以完整的流程代码是

1
2
hive -e "SQL query" > xxx.csv
sed -i 's/\t/,/g' xxx.csv

2. Hive导入.csv文件建表

注意:

为了配合csv文件,建表的时候,最后一行的row format delimited fields terminated by ‘,’;必须要有,否则列会出问题

(这牵涉到csv和tsv等问题)

所以,在Hive下完整的删表建表导数据的流程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
drop table if exists table_name;
CREATE EXTERNAL TABLE beike.beike_ershoufang (
details_name string,
postition_url string ,
house_url string,
house_id string,
house_info string,
follew_info string,
subway string,
total_price float,
total_price_danwei string,
unit_price float,
district string,
city_name string,
fetchtime timestamp
)COMMENT '贝壳二手房'
PARTITIONED BY (dt STRING, cd3 STRING)
row format delimited fields terminated by ',';

load data local inpath '/home/andrew/output.csv'
into table beike.beike_ershoufang PARTITION(dt='2017-03-31' ,cd3='1389');;

3. Hive看包括行数在内的信息

1
2
show tblproperties table_name;
desc formatted table_name;

4. Hive一次写入一个表的多个分区的数据

1
2
3
4
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table table1 partition(partition_column)
select col1, col2,..., partition_column from table1;

5. Hive一次写入大量分区

1
2
3
4
5
set hive.exec.max.dynamic.partitions=100000;
--每一个mapreduce job允许创建的分区的最大数量,如果超过了这个数量就会报错
set hive.exec.max.dynamic.partitions.pernode=100000;
--hive.exec.max.created.files :所有的mapreduce job允许创建的文件的最大数量
set hive.exec.max.created.files=10000;

6避免产生小文件

–在MapReduce的任务结束时合并小文件

1
set hive.merge.mapredfiles=true;

7Hive开启本地模式

1
set hive.exec.mode.local.auto=true;

8查询打印表头

1
set hive.cli.print.header=true;