Hive学习笔记

1.建表语法:

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 

      [(col_name data_type [COMMENT col_comment], ...)] 

      [COMMENT table_comment] 

      [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 

      [CLUSTERED BY (col_name, col_name, ...) 

      [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 

      [ROW FORMAT row_format] 

      [STORED AS file_format] 

      [LOCATION hdfs_path]

•CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常

•EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)

•LIKE 允许用户复制现有的表结构,但是不复制数据

    CREATE TABLE empty_key_value_store

    LIKE key_value_store;

•COMMENT可以为表与字段增加描述

•ROW FORMAT

    DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]

        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

   | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

         用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。

例子:

create table student (Snoint,Sname string,Sex string,Sageint,Sdept string)

row format delimited fields terminated by','//声明分隔符

stored as textfile;//声明储存方式

2. 查询学生信息,按性别分区,在分区内按年龄有序

1)select * from student order by sex, sage;

2)set mapred.reduce.tasks=2;

select * from student distribute by sex sort by sage;

distribute by是按照指定的字段对数据进行划分到不同的reduce中

第一的语句,我们只是按照性别和年龄排序

第二个,我们设置了2个reduce,并且按照性别分区。sort by sage;

理解sort by和order by的区别。order by是全局排序。而sort by是每个分区内部排序。

3. 查询学生的姓名、课程名称和分数

select student.sname, course.cname, sc.grade 

from student join sc on student.sno= sc.sno

join course on sc.cno=course.cno

join后面跟要连接的表,on后面跟连接的条件。

on和where是不同的

  -on指的连接条件

-where是表链接后,再进一步按照where指定条件筛选

你可能感兴趣的:(Hive学习笔记)