推广

Hive(七)分区表和分桶表

iseeyu3年前 (2024-02-21)推广170

数据加载结果


  1. 查询分区表中数据
  • 查看分区表信息
hive (default)> desc log_partition;
OK
col_name    data_type   comment
name                    string                                      
gender                  string                                      
age                     int                                         
day                     string                                      
         
# Partition Information      
# col_name              data_type               comment             
day                     string                                      
Time taken: 0.141 seconds, Fetched: 8 row(s)

col_name :常规字段
data_type:数据类型
comment:注释。
# Partition Information : 表示分区信息,
# col_name: 分区字段
data_type: 数据类型
comment:注释
day string # 分区字段名

  • 查询单个分区信息
hive (default)> select * from log_partition where day='20200101';
OK
log_partition.name  log_partition.gender    log_partition.age   log_partition.day
张三  男   18  20200101
李四  女   20  20200101
王二  男   34  20200101
  • 也可以查询多个分区信息
select * from log_partition where day='20200101' 
union 
select * from log_partition where day='20200102';

由于该方式查询需要运行ResourceManager,这里就就直接展示结果吧

Total MapReduce CPU Time Spent: 4 seconds 80 msec
OK
_u1.name    _u1.gender  _u1.age _u1.day
二狗子 男   28  20200102
小李子 男   23  20200102
张三  男   18  20200101
张大贵人    男   23  20200102
李四  女   20  20200101
王二  男   34  20200101
王疯子 女   78  20200102
Time taken: 22.96 seconds, Fetched: 4 row(s)

注意:千万不要写成 select * from log_partition where day='20200101' and '20200102';没有为什么,可能不支持,已躺雷。

  1. 查看分区表有多少分区
    语法:show partitions <分区表>
hive (default)> show partitions log_partition;
OK
partition
day=20200101
day=20200102
day=20200103
Time taken: 0.068 seconds, Fetched: 3 row(s)
  1. 添加分区
  • 创建单个分区
    案例:在log_partition分区表中添加 2020104 分区
hive (default)> alter table log_partition add partition(day='2020104');
OK
Time taken: 0.093 seconds

创建单个分区结果查看

-创建多个分区
案例:在log_partition分区表中添加 20200105 和 20200106 分区

hive (default)> alter table log_partition add partition(day='20200105') partition(day='20200106');
OK
Time taken: 0.091 seconds

语法:alter table <分区表> add partition(分区字段=分区值) partition(分区字段=分区值) …;
总结:添加多个分区,需要指定指定多个partition(),每个partition 使用空格分隔。

  1. 删除分区
  • 删除单个分区
    语法:alter table <表名> drop partition ()
hive (default)> alter table dept_partition drop partition (day='20200406');
  • 同时删除多个分区(分区之间必须有逗号)
    语法:alter table <表名> drop partition (),partition (),partition ()…;
hive (default)> alter table dept_partition drop partition(day='2020041'),partition(day='20200402');
  1. 查看分区表结构
    语法:desc [fromatted] <table> ;
hive (default)> desc formatted dept_partition;
OK
col_name    data_type   comment
# col_name              data_type               comment             
deptno                  int                                         
dname                   string                                      
loc                     string                                      
         
# Partition Information      
# col_name              data_type               comment             
day                     string          
...
...                         

分区表二级分区

所谓的二级分区,就是在分区中在嵌套一个分区,简单点描述就是目录嵌套目录。当然不止能创建二级分区,根据业务需求,三级四级也是可以的。对于表来说,分区就是一个字段。以下案例数据过于敏感,并不会展示查询结果。

  1. 创建二级分区表
create table zhenai(name string,resume string,hometown string,marriage string,age string,height string) partitioned by (day string,hour string)  
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE;

ROW FORMAT SERDE ‘org.apache.hive.hcatalog.data.JsonSerDe’ STORED AS TEXTFILE

参考网站:https://www.cnblogs.com/lhicp/p/14033516.html

  1. 加载数据到分区表中
    1.从hdfs中进行加载
hive (default)> load data inpath '/flume/zhenai/20210603/14' into table zhenai partition(day='20210603',hour='14');

 2.查询分区数据数据过于铭感,就不展示了

hive (default)> select * from zhenai where day='20210603' and hour='12';
  1. 把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式
  • 方式一:上传数据后修复
    1.创建一个分区目录(day=20210603,hour=15)

    hive (default)> dfs -mkdir -p /user/hive/warehouse/zhenai/day=20210603/hour=15;
    

    2.将最近的一批数据复制到hour=15目录下

    hive (default)> dfs -mv /flume/zhenai/20210603/15/1522706220328.json  /user/hive/warehouse/zhenai/day=20210603/hour=15;
    

    此时查询是无法查询到数据的

    &emsp;hive (default)> select * from zhenai where day='20210603'  and hour='15';
    OK
    zhenai.name   zhenai.resume   zhenai.hometown zhenai.marriage zhenai.age    zhenai.height zhenai.day  zhenai.hour
    Time taken: 0.094 seconds
    
    1. 执行修复命令
      语法:msck repair table <分区表>
    hive (default)>  msck repair table zhenai;
    OK
    Partitions not in metastore:  zhenai:day=20210603/hour=15
    Repair: Added partition to metastore zhenai:day=20210603/hour=15
    Time taken: 0.085 seconds, Fetched: 2 row(s)
    

    再次查询就有数据了

    hive (default)> select * from zhenai where hour='15';
    OK
    zhenai.name   zhenai.resume   zhenai.hometown zhenai.marriage zhenai.age    zhenai.height zhenai.day  zhenai.hour
    # 表数据在这展示,数据敏感,不做展示
    
  • 方式二:上传数据后添加分区

    1. 创建一个分区目录 (day=20210603,hour=16)
    hive (default)> dfs -mkdir -p /user/hive/warehouse/zhenai/day=20210603/hour=16;
    

    2 . 导入数据

    hive (default)> dfs -cp /flume/zhenai/20210603/15/1622706220328.json   /user/hive/warehouse/zhenai/day=20210603/hour=
    
    1. 添加分区
    hive (default)> alter table zhenai add partition (day='20210603',hour='16');
    
    1. 数据查询
    hive (default)> select * from zhenai where day='20210603' and hour='16';
    OK
    zhenai.name   zhenai.resume   zhenai.hometown zhenai.marriage zhenai.age    zhenai.height zhenai.day  zhenai.hour
    # 表数据在这展示,数据敏感,不做展示
    
  • 方式三:创建文件夹后load数据到分区

    1. 创建一个分区目录 (day=20210603,hour=17)
    hive (default)> dfs -mkdir -p /user/hive/warehouse/zhenai/day=20210603/hour=17;
    
    1. 上传数据
    hive (default)> load data inpath '/flume/zhenai/20210603/16/1622707379156.json' into table zhenai partition(day='20210603',hour='17');
    
    1. 查询数据
    hive (default)> select * from zhenai where day='20210603' and hour='17';
    OK
    zhenai.name   zhenai.resume   zhenai.hometown zhenai.marriage zhenai.age    zhenai.height zhenai.day  zhenai.hour
    # 表数据在这展示,数据敏感,不做展示
    

  1. 动态分区调整

关系型数据库中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用Hive的动态分区,需要进行相应的配置。

开启动态分区参数设置

  1. 开启动态分区功能(默认true,开启)
hive.exec.dynamic.partition=true
  1. 设置为非严格模式(动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict
  1. 在所有执行MR的节点上,最大一共可以创建多少个动态分区。默认1000
hive.exec.max.dynamic.partitions=1000
  1. 在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。
hive.exec.max.dynamic.partitions.pernode=100
  1. 整个MR Job中,最大可以创建多少个HDFS文件。默认100000
hive.exec.max.created.files=100000
  1. 当有空分区生成时,是否抛出异常。一般不需要设置。默认false
hive.error.on.empty.partition=false

分桶表

  1. 概述

分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。

分桶是将数据集分解成更容易管理的若干部分的另一个技术。
分区针对的是数据的存储路径;分桶针对的是数据文件。

  1. 语法

create table <表名>(id int, name string)
clustered by(id) # 指定按什么字段进行分桶
into 4 buckets # 共分为几个桶
row format delimited fields terminated by ‘\t’; # 指定切割符

分桶抽样

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56902.html

相关文章

弘辽科技:淘宝入店关键词怎么写。

弘辽科技:淘宝入店关键词怎么写。

淘宝商家在经营店铺的时候,需要对店铺以及商品进行优化,尤其是对于商品关键词,将关键词设置的精准一些就能够增加商品被搜到的机会,那淘宝入店关键词怎么写?接下来我们就来给大家讲解一下这方面的内容。 一、淘宝入店关键词怎么写? 1、 关键词首先要跟你的宝贝高度相关 虽然说关键词可以自由设置...

如何觉察自己和别人的能量?

如何觉察自己和别人的能量?

01觉察身体身体知道与他人的真实关系当你和一个特别的人在一起时,觉察一下你身体的感受。躯干是弯着的,还是挺直着?你的双臂交在胸前,还是放在身后、放开心胸?肩膀向着前面、还是后面?腰是倾向前方还是后方?身体总是会在你面对不同的人时,告诉你许多的线索。如果你的腰倾向前方,那就表...

我来教你做好这几点,网站推广优化效果惊人。

我来教你做好这几点,网站推广优化效果惊人。

由于互联网的快速发展,现在的营销方式越来越多样化,如果企业现在想做好优化,就一定的突破传统的营销方式,但是,大多数企业并不知道怎么去优化自己网站,今天小编就为大家分享关于网站推广优化的方法,只要用心做好以下这几点,网站推广优化效果是一定会看得见的。 一、立足用户,进行分析 网站其实都...

网站SEO优化选择关键词的5大注意事项。

网站SEO优化选择关键词的5大注意事项。

做网站SEO经常能看到一些网站出现奇葩的关键词,甚至你会去想这是怎么做到的?选择关键词有哪些方法呢?下面由小编为大家分享网站选择关键词的5点注意事项吧! 选择关键词主要有以下5点需要注意: 1、不要选择生活常用词和形容词 曾经一个网站的关键词是“爱生活、爱时尚”,这两关键词是一个状态...

超级推荐基础出价公式是什么(超级推荐的出价公式)

超级推荐基础出价公式是什么(超级推荐的出价公式)

商品的淘宝转化率和客单价我们是知道的,当然,新品你可能不知道转化率,这个时候可以以店铺其他相似款的转化率作为参考,然后我们根据预期的roi就可以计算出我们的这个ppc,这个roi是根据你想要达到的目的自己定的。...

搜索引擎已收录网页url重写

搜索引擎已收录网页url重写

觉得有必要写下有关于 URL 的相关优化,相信有不少站长朋友们会遇到改版或是换源码时,对于去以前搜索引擎已经收录的网页,就不忍心抛下,那么怎么办呢?请问下看 一、改版时,如何保留原链接,创建新的 URL? 具体操作办法(仅适用于 apache 网络服务器):文件位置:apache->con...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片