zoukankan      html  css  js  c++  java
  • hive操作

    创建一个内部表:

    hive> CREATE TABLE IF NOT EXISTS student1 (sno INT,name STRING,age INT,sex STRING)
           > ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE;

     

     查看

    hive> show tables;

     

     创建外部表:

    hive> CREATE EXTERNAL TABLE IF NOT EXISTS student2 (sno INT,sname STRING,age INT,sex STRING)
      > ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
      > STORED AS TEXTFILE LOCATION '/user/external';

     

     查询

     

     

    删除表test1表

     

     查看表结构

     

     添加字段并查看表结构

     

     

     

     修改表名

     

     查看修改

     

     修改回原来的

     

     创建和已知表结构相同的表

     

     查看表结构

     

     

     加载本地数据

     

     

     查看

     

     加载HDFS中的数据

     

     

     单表插入

    先创建表

     

     查看表结构是否相同

     

     将student1中的数据插入student11 

    hive> INSERT OVERWRITE TABLE student111 SELECT * FROM student11;

     查看

     

     多表插入

    创建表

     

     将student1中的数据同时插入student3和student4

    hive> FROM student1 INSERT OVERWRITE TABLE student3 SELECT *
    > INSERT OVERWRITE TABLE student4 SELECT *;

     

     

     

     

     查询某个字段

     where条件查询

     

     all和distinct的区别:

     

     

     

     

     limit限制查询条数

     

     

     group by分组查询的使用:

    创建表

     导入数据

     

     查看

     

     计算表的行数

     创建去重后存放数据的表

    将去重后的数据导入group_gender_sum表

    hive> INSERT OVERWRITE TABLE group_gender_sum SELECT group_test.gender, COUNT (DISTINCT
    group_test.uid) FROM group_test GROUP BY group_test.gender;

     注意:聚合操作可以同时进行多个操作,但是不能有两个聚合操作有不同的distinct列。

    下面给出测试:

    先创建一个表:group_gender_agg

    将group_test聚合后的数据插入到group_gender_agg

    hive> INSERT OVERWRITE TABLE group_gender_agg SELECT group_test.gender,COUNT(DISTINCT gr
    oup_test.uid),COUNT(*),sum(DISTINCT group_test.uid) > FROM group_test GROUP BY group_test.gender;

    下面的查询就是错误的,不能包含多个distinct。不能通过同时操作两个不同的列。

    hive> INSERT OVERWRITE TABLE group_gender_agg
    > SELECT group_test.gender,COUNT(DISTINCT group_test.uid),COUNT(DISTINCT group_test.ip)
    > FROM group_test > GROUP BY group_test.gender;

     

     ORDER BY 排序查询

    ORDER BY 会对输入做全局排序,这样就只有一个reduce,当输入数据规模较大时需要耗费较长的计算时间。(因为多个reduce是不能保证全局有序的)

    使用 ORDER BY 查询的时候,为了优化查询速度,使用hive.mapred.mode属性。

    hive.mapred.mode=nonstrict;(defult value/默认值)

     hive.mapred.mode=strict;

    这里与数据库中的ORDER BY的区别在于, hive.mapred.mode=strict模式下必须制定limit,否则报错。

    hive> set hive.mapred.mode=strict;
    hive> SELECT * FROM group_test ORDER BY uid limit 5;

     SORT BY 查询

    SORT BY不会受到hive.mapred.mode的值是否为strict和nonstrict的影响。

    SORT BY的数据只能保证在同一个reduce中的数据可以按照制定字段排序。

    使用SORT BY可以指定执行的reduce的个数(set mapred.reduce.tasks=<number>).可以输出更多的数据。

    对输出的数据再执行归并排序,即可以得到全部结果。

    hive> set hive.mapred.mode=strict;
    hive> SELECT * FROM group_test SORT BY uid;

    DISTRIBUTE BY排序查询

    按照指定的对数据划分到不同的输出reduce文件中(控制map的输出在reducer是如何划分的)

     

    我们所有的uid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by uid(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。

    cluster by查询

     cluster by的功能就是distribute by和sort by相结合

     

     注意:注意被cluster by指定的列只能是降序,不能指定asc和desc。

  • 相关阅读:
    Python Day 30 网络编程 (串讲 FTP作业)
    Python Day 29 网络编程 ( socket中的一些常见方法,登录验证,socketserver模块)
    Python Day 28 网络编程 (socket远程命令执行, tcp黏包现象,以及struck模块的使用 )
    Python Day 27 网络编程 (socket udp)
    Python Day 26 网络编程 ( 网络编程基础 socket tcp)
    Python Day 25 蜥蜴串讲
    Python Day 24 面向对象进阶(双下方法 __new__ __del__ item系列 异常处理)
    Python Day 23 面向对象进阶(内置方法:反射,isinstance和issubclass,__str__和__repr__和其他双下方法)
    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)
    aaencode:用颜文字来加密吧
  • 原文地址:https://www.cnblogs.com/lyywj170403/p/9429345.html
Copyright © 2011-2022 走看看