数据仓库工具Hive—数据操作(装载数据,数据导入,数据导出)

建表时加载数据

  1. 装载数据(Load)

    基本语法:
    LOAD DATA [LOCAL] INPATH 'filepath'
    [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)]
    
    1. LOAD DATA LOCAL … 从本地文件系统加载数据到Hive表中。本地文件会拷贝到Hive表指定的位置
    2. LOAD DATA … 从HDFS加载数据到Hive表中。HDFS文件移动到Hive表指定的位置
    3. INPATH:加载数据的路径
    4. OVERWRITE:覆盖表中已有数据;否则表示追加数据
    5. PARTITION:将数据加载到指定的分区
  2. 创建表之后加载数据

    -- 创建表
    CREATE TABLE tabA (
    	id int
    	,name string
    	,area string
    ) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
    
    数据文件(~/data/sourceA.txt):
    1,fish1,SZ
    2,fish2,SH
    3,fish3,HZ
    4,fish4,QD
    5,fish5,SR
    
    -- 拷贝文件到 HDFS
    hdfs dfs -put sourceA.txt data/
    
    -- 加载本地文件到hive(tabA) 本地文件还在
    LOAD DATA LOCAL INPATH '/home/hadoop/data/sourceA.txt' INTO TABLE tabA;
    
    -- 加载hdfs文件到hive(tabA) HDFS文件,已经被转移
    LOAD DATA INPATH 'data/sourceA.txt' INTO TABLE tabA;
    
    -- 加载数据覆盖表中已有数据
    LOAD DATA INPATH 'data/sourceA.txt' OVERWRITE INTO TABLE tabA;
    
  3. 创建表时直接加载数据

    -- 创建表时加载数据
    hdfs dfs -mkdir /user/hive/tabB
    hdfs dfs -put sourceA.txt /user/hive/tabB
    
    CREATE TABLE tabB (
    	id INT
    	,name string
    	,area string
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    Location '/user/hive/tabB';
    

数据导入

  1. 往分区表中导入数据:

    -- 创建分区表
    CREATE TABLE tabC (
    	id INT
    	,name string
    	,area string
    )
    partitioned by (month string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
    
    -- 插入数据
    insert into table tabC partition(month='202201')
    values (5, 'wangwu', 'BJ'), (4, 'lishi', 'SH'), (3,'zhangsan', 'TJ');
    
    -- 插入查询的结果数据
    insert into table tabC partition(month='202202')
    select id, name, area from tabC where month='202201' ;
    
    -- 多表(多分区)插入模式
    insert overwrite table tabC partition(month='202003')
    select id, name, area where month='202002'
    insert overwrite table tabC partition(month='202004')
    select id, name, area where month='202002';
    
  2. 创建表并插入数据(as select),根据查询结果创建表:

    create table if not exists tabD 
    as select * from tabC;
    
  3. 使用import导入数据

    import table student2 partition(month='201709') 
    from '/user/hive/warehouse/export/student';`
    

数据导出

  1. 将查询到的表中数据导出到本地

    insert overwrite local directory '/home/hadoop/data/tabC' 
    select * from tabC;
    
  2. 将查询结果格式化输出到本地

    insert overwrite local directory '/home/hadoop/data/tabC2' 
    row format delimited fields terminated by ' '
    select * from tabC;
    
  3. 将查询结果导出到HDFS:

    insert overwrite directory '/user/hadoop/data/tabC3'
    row format delimited fields terminated by ' '
    select * from tabC;
    
  4. 使用 dfs 命令导出数据到本地。本质是执行数据文件的拷贝

    dfs -get /user/hive/warehouse/mydb.db/tabc/month=202001 /home/hadoop/data/tabC4
    
  5. 使用hive 命令导出数据到本地。执行查询将查询结果重定向到文件

    hive -e "select * from tabC" > a.log
    
  6. 使用export 导出数据到HDFS。使用export导出数据时,不仅有数还有表的元数据信息

    export table tabC to '/user/hadoop/data/tabC4';
    
  7. 使用 export 导出的数据,也可以使用 import 命令导入到 Hive 表中

  8. 使用 like tname创建的表结构与原表一致。

  9. create … as select … 新建的表的结构可能原表的结构不一致

    create table tabE like tabc;
    import table tabE from ''/user/hadoop/data/tabC4';
    
  10. 截断表,清空数据。(注意:仅能操作内部表) 外部表不能执行 truncate 操作

    truncate table tabE;
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值