Hive 如何将本地文件导入表,如何将表导入本地文件

在实际业务中,很多情况下,比如自建的字典传入线上数据库中供他人查询;或者一些线下业务,如线下客户经理记录数据,电话销售记录等上传数据库等等,我们需要将自建的数据(如excel、txt等)导入到数据库或者集群表中,提供给他人查询
还存在一些情况,比如使用线上特征在本地建模时,我们需要将数据库或集群中的表导入到本地。

一、将本地文件导入Hive表

首先要确保集群上存在对应的表,如果还没有建表,则需要先建表
比如:

create table if not exists table_A(
col_a    string   ,
col_b   string  ,
col_b     int 
)comment ''
row format delimited fields terminated by '\t'
stored as textfile;

然后就可以上传文件到表中了。

hive -e "set hive.cli.print.header=true; 
set hive.resultset.use.unique.column.names=false; 
use databaseA;
load data local inpath '/path/table_A.csv' into table table_A;
"

注意load data后必须要加local关键字。否则会认为是集群上的目录,导致找不到文件。

二、将Hive表导入本地文件

1.当数据量较小的时候
当需要导入的数据量较小的时候,可以直接导入:

hive -e "set hive.cli.print.header=true; 
set hive.resultset.use.unique.column.names=false; 
select col_a, col_b, col_c
from table_A 
where dt = new
; " > table_A.csv

2.当数据量较大的时候
通常我们在建模时数据量通常包含上千个字段,数据量是比较大的,此时将Hive上的select产生的文件导入到本地的目录下。具体方式如下:

hive -e "INSERT OVERWRITE LOCAL DIRECTORY '/path/'  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * 
from table_A
;"

需要注意的是,这种方式会覆盖/path/目录下的所有文件,因此使用这种方式导入时,最好新建一个目录。同样的LOCAL 关键字(不区分大小写)表示了是本地的路径。
上面方式导入时会产生很多类似于00000_*的小文件。
我们可以使用如下方式合并

cat 0* > table_A.csv
rm -rf 0*

还有一点是需要注意的,这种方式导入的数据不存在列名。可以使用第一种方式将列名单独导入一个文件,之间再与第二种当时导入的文件合并起来

发布了29 篇原创文章 · 获赞 3 · 访问量 1547
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览