牛骨文教育服务平台(让学习变的简单)
博文笔记

Hive的一些常识性技巧

创建时间:2016-07-02 投稿人: 浏览次数:1070

导语

Hive的SQL语法层设计,个人感觉很多一部分参照了MySQL的实现,目的是为了让人更容易上手,毕竟MySQL的用户还是很多的,算是变相的降低了Hive的使用门槛吧。本文介绍了些在MySQL上比较常用的技巧,也会介绍一些与MySQL不同的地方,以及在Hive上特有的小技巧。

内容如下

  1. Hive支持三种集合类型,这是一种反范式的设计,关系型数据库都不存在集合的数据类型,当然,Hive本身也不是为了关系而生的。三种集合类型分别为:array, struct, map。
  2. 在想要查看的字段比较多的时候,可以为输出增加一个表头,便于查看每个字段对应的含义。可参照如下设置。

    set hive.cli.print.header = true;

  3. Hive的数据加载模式是读时模式,具体的说就是数据加载时不做任何验证,而在读取的时候,会将不匹配的数据置成’NULL’。个人感觉这样的设置比较坑,没有想明白为什么要这么做,导致用户如果想在HDFS跑MR导入Hive的话就需要自己做严谨的数据检查,Hive不会帮你做任何检查。

  4. desc table_name; 输出表的schema信息以及分区信息。
    desc extended table_name;使用时可能会被吓到,输出一堆信息,因为难以阅读,不建议阅读
    desc formatted table_name;格式化了上面的信息,较全
    show create table table_name; 该语句输出表的建表语句,较为好用,输出的信息也基本够用了。

  5. 表的类型。按照表的所有权分可分为两类。一种是内部表,也叫管理表,另一种叫外部表。内部表的数据相当于把数据托管给Hive,Hive集中管理,如果进行drop table的操作,则Hive会把数据也删掉。外部表的数据所有权归HDFS,因此drop table时候数据不会被删,只会删掉表的Schema信息。外部表较为常用,生产上一般使用外部表。

  6. 如果使用文件向Hive中导入数据的方式,则会在装载数据的时候检查文件的格式是否和建表时指定的是否一致,注意,这里所说的文件格式并不是表的Schema信息,而是文件编码或者压缩方式等。
  7. SQL中的投影字段可以使用反引号+正则表达式的方式来匹配列名,这个语法糖有点意思。
  8. SQL中如果使用了distribute的话,则要注意书写的前后顺序,一定要放在sort by语句之前。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。