• 《OD学hive》第五周0723


    https://cwiki.apache.org/confluence/display/Hive/LanguageManual

    一、创建表

    create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '	';
    
    describe formatted student;
    
    load data local inpath '/opt/datas/student.txt' into table test.student;

    二、函数

    show functions;

    describe function extended upper;

    select id, upper(name) from test.student;

    三、设置

    cat .hiverc
    set hive.cli.print.header=true;
    set hive.cli.print.current.db=true;

     hive --hiveconf hive.root.logger=INFO,console

    四、hive数据仓库位置配置

    默认位置 /user/hive/warehouse

    注意:

    在仓库目录下,没有对默认的数据库default创建文件夹;

    如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹,目录名称为表名;

    在hive中使用dfs命令: dfs -rm -R /user/hive/warehouse/bf_log;

    查看设置 set system:user.name;

    执行设置 set system:user.name=beifeng;

    此种方式进行设置,仅仅在当前session生效。

    五、hive的几种交互方式

    1. hive -e "select * from test.student;"

    2. hive -f <filename>

    hive -f hivef.sql > result.txt

    3. hive -i <filename>

    在hive cli命令窗口如何查看hdfs文件系统:

     dfs -ls /

    在hive cli命令窗口如何查看本地文件系统:

     !ls /

    六、数据类型

    datatype:

    1. primitive_type:

    (1)Numeric Types:

    TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE,DECIMAL

    (2)Date/Time Types

    TIMESTARMP,DATE

    (3)String Types

    STRING,VARCHAR,CHAR

    (4)Misc Types

    BOOLEAN, BINARY

    (5)Complex Types

    arrays,maps,structs,union

    2. array_type

    3. map_type

    4. struct_type

    5. union_type

     python

    >> content

    << ip, req_url, http_ref

    使用脚本语言

    1)table,load   E

    2) select, python T

    3) sub table     L

    七、表类型

    1. MANAGED_TABLE

    2. EXTERNAL_TABLE

    3. 分区表

    分区表实际上就是对应一个HDFS系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成更小的数据集。

    在查询时通过where子句中的表达式来选择查询所需要的指定的分区,这样的查询效率会提高很多。

    create table dept_partition

    (

    deptno int,

    deptname string,

    loc string

    )

    partitioned by (event_month string)

    row format delimited fileds terminated by ' ';

    msck repair table dept_partition;

    alter table dept_partition add partition(day='20160720');

    show partitions dept_partition;

    八、导入数据的六大方式 

    1. 加载本地文件到hive表

    load data local inpath 'filepath' into table default.emp;

    2. 加载hdfs文件到hive中

    load data inpath 'filepath' into table default.emp;

    3. 加载数据覆盖表中已有的数据

    load data inpath 'filepath' overwrite into table default.emp;

    4. 创建表时通过insert加载

    create table default.emp_cli like emp;

    insert into table default.emp_cli select * from default.emp;

    5. 创建表时通过select 加载

    6. 创建表时通过location指定加载

    九、导出数据的几种方式

    1. 

    insert overwrite local directory '/opt/datas/hive_exp_emp' select * from default.emp;

    2. 

    insert overwrite local directory '/opt/datas/hive_exp_emp3' ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' COLLECTION ITEMS TERMINATED BY ' ' select * from default.emp;

    3.

    hive -e "select * from default.emp" > /opt/datas/exp_res.txt

    4.  

    insert overwrite directory '/user/hive/warehouse/hive_exp_emp4' select * from default.emp;

    十、Hive常见查询

    1. 常见select

    select t.empno, t.ename, t.deptno from emp t;

    select * from emp limit 5; 

    select t.empno, t.ename, t.deptno from emp t where t.sal between 800 and 1500;

    select t.empno, t.ename, t.deptno from emp t where t.comm is null;

    2.  max/min/count/sum/avg

    desc function extended max;

    select count(*) cnt from emp;

    select max(sal) max_sal from emp;

    select sum(sal) from emp;

    select avg(sal) from emp;

    3. group by / having 分组

    (1)每个部门的平均工资

    select t.deptno, avg(t.sal) as avg_sal from emp t group by t.deptno;

    (2)每个部门中每个岗位的最高薪水

    select t.deptno, t.job, avg(t.sal) as avg_sal from emp t group by t.deptno, t.job;

     (3)having

    where 是针对单条记录进行筛选

    having 是针对分组结果进行筛选

    (4)求每个部门的平均薪水大于2000的部门

    select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;

    4. join

    (1)

    等值join

    m n

    m表中一条记录和n表中的一条记录组成一条记录

    join ...on 

     select e.empno, e.ename, e.deptno, d.dname from emp e join dept d on e.deptno = d.deptno;

    (2)左连接

     select e.empno, e.ename, e.deptno, d.dname from emp e left join dept d on e.deptno = d.deptno;

    (3)右连接

     select e.empno, e.ename, e.deptno, d.dname from emp e right join dept d on e.deptno = d.deptno;

    十一、导入导出

    1.  EXPORT:

    导出,将Hive表中的数据,导出到外部;

    EXPORT TABLE tablename TO 'export_target_path'

    export_target_path: HDFS上的路径

    EXPORT TABLE default.emp to '/user/hive/warehouse/export/emp_exp';

    2. IMPORT:

    导入,将外部数据导入Hive表中;

    IMPORT [EXTENAL] TABLE new_orginal 

    create table db_hive_01.emp like default.emp;

    import table db_hive_01.emp from '/user/hive/warehouse/export/emp_exp';

    十二、order by、sort by、distribute by、cluster by

     1. order by 

    全局排序,一个Reduce

    select * from emp order by empno desc;

    2. sort by

    每个reduce内部进行排序,全局结果集不是排序

    select * form emp sort by empno asc;

    set mapreduce.job.reduces=3;

    insert overwrite local directory '/opt/datas/sortby-res' select * from emp sort by empno asc;

    3. distribute by

    类似MR中partition,进行分区,结合sort by使用

    insert overwrite local directory '/opt/datas/distbyby-res' select * from emp distribute by deptno sort by empno asc;

    注意事项:

    distribute by必须要在sort by 之前

    4. cluster by

    当distribute by和sort by字段相同时,可以使用cluster by;

    insert overwrite local directory '/opt/datas/clusterby-res' select * from emp cluster by empno;

    十三、Hive中自带Function使用和自定义UDF编程及使用

      

  • 相关阅读:
    laravel tinker的使用
    清空表中数据
    不要为过多思考浪费你的精力
    #tomcat#启动过程分析(上)
    #hashMap冲突原理#详细
    #数组集合知识#HashMap的实现原理
    #数据库#连接数据库的几个步骤
    #数据库#JDBC基础知识
    #数据库#查询语句 1=1的使用条件
    #tomcat#虚拟主机配置及访问(三)
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5680874.html
Copyright © 2020-2023  润新知