• hive sql 学习笔记


    Hive是什么?

    Hive就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦。

     如图中所示,Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

    由于Hadoop本身是一个批处理,高延迟的计算框架,Hive使用Hadoop作为执行引擎,自然也就有了批处理,高延迟的特点,在数据量很小的时候,Hive执行也需要消耗较长时间来完成,这时候,就显示不出它与Oracle,Mysql等传统数据库的优势。 

    此外,Hive对事物的支持不够好,原因是HDFS本身就设计为一次写入,多次读取的分布式存储系统,因此,不能使用Hive来完成诸如DELETE、UPDATE等在线事务处理的需求。

    因此,Hive擅长的是非实时的、离线的、对响应及时性要求不高的海量数据批量计算,即席查询,统计分析。

    Hive的数据单元

    • Databases:数据库。概念等同于关系型数据库的Schema,不多解释;
    • Tables:表。概念等同于关系型数据库的表,不多解释;
    • Partitions:分区。概念类似于关系型数据库的表分区,没有那么多分区类型,只支持固定分区,将同一组数据存放至一个固定的分区中。
    • Buckets (or Clusters):分桶。同一个分区内的数据还可以细分,将相同的KEY再划分至一个桶中,这个有点类似于HASH分区,只不过这里是HASH分桶,也有点类似子分区吧。

    6.2 从本地文件系统或者HDFS的一个目录中加载

    如果数据在本地,或者HDFS的某一个目录下,需要加载到目标中或分区中,那么使用LOAD DATA命令即可加载数据:

    • 加载本地文件

    LOAD DATA LOCAL INPATH ‘/home/lxw1234/t_lxw1234/’

    INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);

    • 加载HDFS文件

    LOAD DATA INPATH ‘/user/lxw1234/t_lxw1234/’

    INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);

    6.3 从一个子查询中加载数据

    这个比较简单,就是将一个查询结果插入到目标表或分区中:

    INSERT overwrite TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’)

    SELECT day,url from source_table;

  • 相关阅读:
    免费申请域名
    分享学习linux网站
    二分法
    node 解决存储xss风险报告
    cf987f AND Graph
    loj2587 「APIO2018」铁人两项
    luogu3830 [SHOI2012]随机树
    luogu3343 [ZJOI2015]地震后的幻想乡
    bzoj2560 串珠子
    luogu3317 [SDOI2014]重建
  • 原文地址:https://www.cnblogs.com/pengpenghuhu/p/11735435.html
Copyright © 2020-2023  润新知