Hive的基本语法

一、建库

  1. create database 库名
  2. show databases; 显示所有数据库
  3. drop database 库名 删除数据库
  4. use 库名 指定使用哪个数据库

二、建表

  1. create table 表名(字段名 字段类型,…)
    eg:create table t_user(id int,name string,age int)
    row format delimited
    fields terminated by ',';
    指定数据文件中的分隔符
  2. 创建外部表
    eg:create external table t_access(ip string,url string,access_time string)
    row format delimited
    fields terminated by ','

    内部表存放位置 /user/hice/warehome/库名/,表删除后,数据文件也不存在
    外部表存放位置由用户个人指定,即数据文件的位置,表删除后,数据文件仍然存在
  3. 创建分区表
    (1)一个分区字段
    eg:create table t_access(ip string,url string,access_time string)
    partitioned by(dt string)
    row format delimited
    fields terminated by ',';

    **:分区字段不能与表中字段相同
    向分区中导入数据:
    load data local inpath '/root/access.log.2017-08-05.log' into table t_access partition(dt='20180829');
    (2)多个分区字段
    eg:create table t_user(id int,name string,age int)
    partitioned by(department string,sex string,howold int)
    row format delimited fields terminated by ',';

    向分区中导入数据:
    load data local inpath '/root/p1.dat' into table t_partition partition(department='xiangsheng',sex='male',howold=20);
  4. 删除表 drop table 表名;

三、hive中数据的导入导出

  1. 导入数据
    从本地导入:load data local inpath "本地文件路径" into table 表名;
    从hdfs集群上导入: load data inpath "本地文件路径" into table 表名;
  2. 导出数据
    导入到本地:insert overwrite local directory '要导入的位置'
    row format delimited fields terminated by ','
    select * from 表名;

    导出到hdfs集群上:nsert overwrite directory '要导入的位置'
    row format delimited fields terminated by ','
    select * from 表名;

四、hive查询语法

**:hive查询语法基本与sql语句相同

  1. 基本查询:select * from 表名;
  2. 条件查询:select * from t_user where id = 1;
  3. join管理查询
    假如有a.txt文件
    a,1
    b,2
    c,3
    d,4
    假如有b.txt文件
    a,xx
    b,yy
    d,zz
    e,pp
    (1)内部关联
    eg:select *
    from t_a a
    join t_b b
    on a.name=b.name

    结果:
    aname | anumb | bname | bnick |
    | a | 1 | a | xx |
    | b | 2 | b | yy |
    | d | 4 | d | zz |
    (2)左外关联
    eg:select *
    from t_a a
    left outer join t_b b
    on a.name=b.name

    结果:
    aname | anumb | bname | bnick |
    | a | 1 | a | xx |
    | b | 2 | b | yy |
    | c | 3 | null | null |
    | d | 4 | d | zz |
    (3)右外关联
    eg:select *
    from t_a a
    right outer join t_b b
    on a.name=b.name

    结果:
    aname | anumb | bname | bnick |
    | a | 1 | a | xx |
    | b | 2 | b | yy |
    | d | 4 | d | zz |
    | null | null | e | pp |
    (4)全关联
    eg:select *
    from t_a a
    full join t_b b
    on a.name=b.name;

    结果:
    aname | anumb | bname | bnick |
    | a | 1 | a | xx |
    | b | 2 | b | yy |
    | c | 3 | null | null |
    | d | 4 | d | zz |
    | null | null | e | pp |
    (5)Left semi join :相当于join连接两个表后产生的数据中的左半部分
    eg:select
    a.name as aname,
    a.numb as anumb
    from t_a a
    left semi join t_b b
    on a.name=b.name;

    结果:
    aname | anumb
    | a | 1
    | b | 2
    | d | 4
  4. 分组查询group by
    select * from t_user group by age having age>18;查询按年龄分组后的年龄大于18的数据
    **: 一旦有group by子句,那么,在select子句中就不能有 (分组字段,聚合函数) 以外的字段
    where是用于在真正执行查询逻辑之前过滤数据用的
    having是对group by聚合之后的结果进行再过滤;
  5. 聚合查询
    聚合查询包括count(), max(), min(), avg(), sum()等等
    eg: select count(*) from 表名
  6. 子查询(嵌套查询)
    子查询查询到的信息生成一个临时表,从这个表中查数据
    eg:select id,name,brother
    from
    (select id,name,family_members['brother'] as brother from t_person) tmp
    where brother is not null;
展开阅读全文

没有更多推荐了,返回首页