美文网首页
hive 常用导入/导出

hive 常用导入/导出

作者: daley_磊 | 来源:发表于2019-02-23 15:09 被阅读0次

    首先列出讲述下面几种导入方式的数据和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 常用导入/导出

          本文链接:https://www.haomeiwen.com/subject/vkieyqtx.html