如何将表导入本地文件系统?

vybvopom  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(338)

我正在尝试从配置单元中的表导出结果,并使用以下命令:

bline --hiveconf hive.mapred.mode=nonstrict --outputformat=csv2 -e "select * from db.table;">~/table.csv

(bline is an alias for beeline -u address + some options)

询问结束后,我

error java.lang.OutOfMemoryError: GC overhead limit exceeded

我是正确导出表还是有更好的方法导出配置单元中的表?

ltskdhd1

ltskdhd11#

因为您需要一个不同的分隔符,所以有一个更干净的解决方案

insert overwrite local directory '/tmp/mytable' 
row format delimited
fields terminated by ','
select * from mytable
;

语言手册

演示

Hive

create table mytable (i int,s string,d date);

insert into mytable values 
    (1,'hello','2017-03-01')
   ,(2,'world','2017-03-02')
;

select * from mytable
;

mytable.i   mytable.s   mytable.d
1   hello   2017-03-01
2   world   2017-03-02
insert overwrite local directory '/tmp/mytable' 
row format delimited
fields terminated by ','
select * from mytable
;

猛击

cat /tmp/mytable/*
1,hello,2017-03-01
2,world,2017-03-02
hivapdat

hivapdat2#

因为您的表是以文本格式存储的,所以您可以简单地使用get/getmerge将文件从hdfs复制到本地文件系统
得到
获取合并

演示

Hive

create table mytable (i int,s string,d date);

insert into mytable values 
    (1,'hello','2017-03-01')
   ,(2,'world','2017-03-02')
;

select * from mytable
;

mytable.i   mytable.s   mytable.d
1   hello   2017-03-01
2   world   2017-03-02

show create table mytable;

CREATE TABLE `mytable`(
  `i` int, 
  `s` string, 
  `d` date)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://localhost:8020/user/hive/warehouse/mytable'
.
.
.

猛击

hdfs dfs -getmerge /user/hive/warehouse/mytable mytable.txt

cat mytable.txt 

1hello2017-03-01
2world2017-03-02

p、 在列之间有一个看不见的分隔符,字符soh,ascii值为1。

<mytable.txt tr $'\x01' ','
1,hello,2017-03-01
2,world,2017-03-02

相关问题