hive 常用导入/导出

首先列出讲述下面几种导入方式的数据和hive表。

  1. 从本地导入数据
    首先需要创建hive 表
    load data local inpath '本地文件位置及名称' [overwrite] into table hive表名称,overwrite 为可选命令,表示覆盖原有数据,默认为追加数据
    如:
load data local inpath "/home/test.csv" into table test_hive_table #默认追加导入
 load data local inpath '/home/test.csv' overwrite into table test_hive_table partition (dataday='20190501'); # 写入到分区表
load data local inpath "/home/test.csv" overwrite into table test_hive_table #覆盖导入
  1. 从HDFS 中导入数据
    load data inpath ‘HDFS 文件路径及文件名称’ [overwrite] into table hive表名称,
    overwrite 为可选命令,表示覆盖原有数据,默认为追加数据
    如:
load data inpath  "/user/dfs/test.txt" into table test_hive_table #默认追加导
load data inpath  "/user/dfs/test.txt" overwrite into table test_hive_table #覆盖导入
  1. hive 导入 hive
  • 创建表并导入数据
    create table 库名.表名 as hive查询语句;
    如:
create table testDB_A.test_table_A as select * from testDB_B.test_table_B;
  • hive 表已存在,insert into 导入数据
    insert into table 表名 hive查询语句;
    如:
insert into table testDB_A.test_table_A select * from testDB_B.test_table_B;

4.从本地导入HDFS中,hive表已建好,并指定HDFS中文件路径,将数据导入HDFS指定目录中。注意:要保重数据能和列对应,并且分隔符需要和建表时保持一致
hdfs dfs -put 本地文件路径及名称 hive表和HDFS对应目录
如:

hdfs dfs -put /home/test1.txt /user/hive/test.db/test_table

如果一次需要上传多个文件,比如在home 下有 test1.txt、test2.txt、test3.txt,可以使用通配符的方式来上传多个。

hdfs dfs -put /home/test*.txt /user/hive/test.db/test_table

Hive数据导出的几种方式

  1. insert方式
  • 保存到本地
    insert overwrite local directory '本地目录路径' row format delimited fields terminated by '指定分隔符' hive查询语句;
    如:
insert overwrite local directory "/home/table_file"   row format delimited  fields terminated by "\t"  select * from hive_table;
  • 保存到HDFS
    insert overwrite directory 'HDFS目录路径' row format delimited fields terminated by '指定分隔符' hive查询语句;
    如:
insert overwrite directory "/user/dfs/table_file"   row format delimited  fields terminated by "\t"  select * from hive_table;
  1. linux命令行执行HQL
  • hive -e "use 库名; hive查询表语句" | tr "," "需要修改的分隔符" > 文件路径及名称
    如:
 hive -e "use test; select * from test_table" | tr "," "|"  > /tmp/table.csv
  • hive -f 指定sql文件 | tr "," "需要修改的分隔符" > 文件路径及名称
    如:
 hive -e my.sql | tr "," "|"  > /tmp/table.csv

my.sql 内容如下

use test; 
select * from test_table;
  1. 直接从hive表对应到HDFS目录下get到本地
    hdfs dfs -get HDFS目录/(代表所有文件) 本地目录
    如:
hdfs dfs -get /user/hive/test.db/test_table/*  /home/test_file

下面说下 导出到三中方式到区别
insert 和HDFS 的导出方式: 会在导出的目录存储多个文件,一般在需要导出到其他HDFS 文件中使用
linux命令HQL 的导出方式:会把导出的是数据存入一个文本中,方便使用,一般导出本地使用该方法

你可能感兴趣的:(hive 常用导入/导出)