菜鸟进阶(Hive的深入应用,分区和分桶)

导入数据:
    1、load data local inpath '/root/tes.txt' into table test.usr;
      将本地的数据导入到hive中
    2、load data  inpath 'hdfs://node01:9000/user/tes.txt' into table test.te;
        从hdfs集群导入数据
    
    LOAD DATA命令,可分为LOAD DATA LOCAL INPATH和LOAD DATA INPATH。两者的区别在于LOCAL导入的是本地文件而不加LOCAL的导入的是HDFS文件
    
    
    3、insert into
    4、from table1
        insert into tables2
            select id ,name
    
创建表:
        内部表--删除之后数据全部丢失
        外部表--删除元数据之后源数据还存在
        1、结构一样,但是数据不一样  ----like
            create table bws like te;
        2、结构一样,数据也一样----as
            create table bws2 as select * from tes;

ROW FORMAT DELIMITED : 行格式分隔
FIELDS TERMINATED BY ’,’ : 字段之间使用空格分隔
COLLECTION ITEMS TERMINATED BY ‘-’ : 集合(就是这的数据)使用逗号分隔
MAP KEYS TERMINATED BY ‘:’ : 键值对使用冒号分隔
LINES TERMINATED BY ‘\n’ : 记录之间使用换行符分隔


create table psn1(
id int,
name varchar(11),
hobby arrays<string>,
address map<string,string>
)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ’,’
COLLECTION ITEMS TERMINATED BY ‘-’ 
MAP KEYS TERMINATED BY ‘:’ :
LINES TERMINATED BY ‘\n’ 
数据格式:
11,小明11,lol-book-movie,beijing:bawei-shanghai:putdong
11,小明12,lol-book-movie,beijing:bawei-shanghai:putdong
11,小明11,lol-book-movie,beijing:bawei-shanghai:putdong
11,小明14,lol-book-movie,beijing:bawei-shanghai:putdong

 


创建表:

Hive 内部表
    CREATE  TABLE [IF NOT EXISTS] table_name
    删除表时,元数据与数据都会被删除
Hive 外部表 ----EXTERNAL
    CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name LOCATION hdfs_path
    删除外部表只删除metastore的元数据,不删除hdfs中的表数据

Hive 查看表描述

DESCRIBE [EXTENDED|FORMATTED] table_name
    extended
    formatted
table-type:查看创建表的类型

补充:临时表
        在当前进程中可以对数据进行相应的操作,但是退出hive时,就自动删除
        create temporary table name-----一定是一张内部表

        
        
        

Hive 分区partition

    必须在表定义时指定对应的partition字段
    a、单分区建表语句:
    create table day_table (id int, content string) partitioned by (dt int);
    上传数据:
        load data local inpath '/root/tes.txt' into table test.usr partition (age=10);
    单分区表,按天分区,在表结构中存在id,content,dt三列。
    以dt为文件夹区分
    粗细力度分区的时候要根据业务需求,提前进行相应的设定 年月日时分秒
b、 双分区建表语句:
    create table hour(id int, content string) partitioned by (dt int, hour int);
    双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。
    先以dt为文件夹,再以hour子文件夹区分

增加分区
    alter table hour add partition(dt=10,hour=40);

    alert table tablename add partiton(age=10,sex='man')
    也就是说添加分区的时候不能直接添加,而是需要将原来的分区也要包含其中,完成相应的排序
    删除分区
    alter table tablename drop partition (sex='boy')
        注:删除分区的时候,会将所有存在的分区都删除
        

    
动态分区:
    1、修改权限
    set hive.exec.dynamic.partiton=true //开启动态分区
    2、修改默认状态
    set hive.exec.dynamic.partiton.mode=nostrict //默认strict。至少有一个静态分区
    
创建分区表:
 create table psn22(
 id int,
 name string,
 likes array<String>,
 address map<string ,string>
 )
 partitioned by (age int ,sex string)
 ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ’,’ 
COLLECTION ITEMS TERMINATED BY ‘,’ 
MAP KEYS TERMINATED BY ‘:’ 
LINES TERMINATED BY ‘\t’ 

写入数据
from psn21 //已经存在的表格并且要有数据
insert overwrite table pas22 partiton (age,sex) 
select * distribute by age,sex 

 

分桶表:
测试数据
1,tom,11

开启分桶
    set hive.enforce.bucketing=true
创建桶
    create table psnbucket1 (
    id int,
    name string,
    age int)
    clustered by (age) into 4 buckets
    row format delimited 
    fields terminated by ','
加载数据
    insert into  table psnbucket select id,name,age from psn31
抽样
    select * from bucket_table tablesample(bucket 1 out of 4 by colimes)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值