• Hive分区表


    分区表
     
    在Hive Select查询中,一般会扫描整个表内容(HDFS上文件的内容),会消耗很多时间做没必要的工作。分区表指的是在创建表时,指定partition的分区空间。
     
    庞大的数据集可能需要耗费大量的时间去处理。在许多场景下,可以通过分区或切片的方法减少每一次扫描总数据量,这种做法可以显著地改善性能。
     
    数据会依照单个或多个列进行分区,通常按照时间、地域或者是商业维度进行分区。比如vido表,分区的依据可以是电影的种类和评级,另外,按照拍摄时间划分可能会得到更一致的结果。为了达到性能表现的一致性,对不同列的划分应该让数据尽可能均匀分布。最好的情况下,分区的划分条件总是能够对应where语句的部分查询条件。
     
      Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值。但是由于HDFS并不支持大量的子目录,这也给分区的使用带来了限制。我们有必要对表中的分区数量进行预估,从而避免因为分区数量过大带来一系列问题。
     
      Hive查询通常使用分区的列作为查询条件。这样的做法可以指定MapReduce任务在HDFS中指定的子目录下完成扫描的工作。HDFS的文件目录结构可以像索引一样高效利用。
     
     
     
    分区表的语法:
     
    create table tablename
    name string
    )
    partitioned by(key type,…)
     
    示例:
     
    create table if not exists employees(
    name string,
    salary string,
    subordinates array<string>,
    deductions map<string,float>,
    address struct<street:string,city:string,state:string,zip:int>
    )
    partitioned by (dt string,type string) //制定分区
    row format delimited fields terminated by ' ' //指定字段分隔符为tab
    collection items terminated by ',' //指定数组中字段分隔符为逗号
    map keys terminated by ':' //指定字典中KV分隔符为冒号
    lines terminated by ' ' //指定行分隔符为回车换行
    stored as textfile //指定存储类型为文件
    ;
     
    查看刚才建立的分区
    SHOW PARTITIONS employees;
     
     
     
     
    a ... .. |.. . . . .. . a100
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
     
    create table 弱天气 (id 天气类型 类型规范 气象数据 。。。。。。。 ); -----/usr/hive/warehouse/弱天气
    part....... 雨 /usr/hive/warehouse/rain
    part....... 雪 (1 雪 10020 30mm/h ............) /usr/hive/warehouse/snow
    part....... 风 /usr/hive/warehouse/wind
    part....... 霜 /usr/hive/warehouse/shuang
    part....... 雷电 /usr/hive/warehouse/light
    part....... 雾 /usr/hive/warehouse/wu
    part....... 霾 /usr/hive/warehouse/mai
     
    1 雪 10020 30mm/h ............
    2 雨 10019 60mm/h ............
     
    range
     
     
    oltp 联机在线事务处理系统
    olap 联机在线决策支持系统
    dss/dw 离线或非联机决策支持系统
     
    所谓数据仓库指的就是所存储数据经过特殊处理(ETL)后汇总到某一容器中,以供决策支持调用。
     
     
     
    create table people (id char(18),name varchar(100),sex char(4),birthday date);
    partitioned by (local string)
     
    13亿数据中找到所有的吉林人
     
     
    select * from people where local='吉林';
     
    如果在不分区的情况下我需要到13亿条数据中逐条寻找吉林的数据
     
    如果在分区的情况下 我只需要到local下的吉林区间里去找就可以了 大大的缩小了查询范围
     
  • 相关阅读:
    .ashx
    svn设置过滤内容
    .NET开发人员应该下载的十个必备工具(1)
    C#中操作XML (节点添加,修改,删除完整版)
    NVelocity模板引擎的注意事项
    什么是好的程序员?
    SQLSERVER2005登录时出错
    240多个jQuery插件(转)
    自己搭建svn
    一元三次方程求解
  • 原文地址:https://www.cnblogs.com/dasiji/p/11245542.html
Copyright © 2020-2023  润新知