`

Hive基本语法使用

 
阅读更多

 

 

1 创建表以及表的关联查询

2 外部表的使用 

3 复杂数据类型的使用 

4 分区的使用

5 桶的使用与理解 

6 官方文档

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

一、 创建表以及表的关联查询

1) 创建表

hive> create table student(name STRING,age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;

hive> create table ticket(age INT,price FLOAT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;

 

2)创建本地数据文件 student.txt 和ticket.txt,并加载到hive的数据表中

 内容:

 student.txt文件

huang26

lili25

dongdong27

wangxiao5

 

ticket.txt文件,加载到数据库中每一行多的数据会被忽略掉,少得数据会变成null

2619.0qwe

2510.0er

27

590.0

 

3)加载数据 

 LOAD DATA LOCAL INPATH '/root/student.txt' OVERWRITE INTO TABLE student;

 查看数据是否正确加载: select * from student ;

LOAD DATA LOCAL INPATH '/root/ticket.txt' OVERWRITE INTO TABLE ticket;   

 查看数据是否正确加载: select * from ticket ;

 

4)查看表以及表结构

hive> show tables;

hive> describe student;

 

5) 两个表连接查询(hive编译成MapReduce程序,在hadoop上执行)

 select * from student s  join ticket t on s.age=t.age;

 

 

二、外部表的使用 (对于外部表的删除数据文件不会被删除,只会删除元数据)

1)创建表的文件数据目录

-bash-3.2# hadoop fs -mkdir /tmp/ticket

-bash-3.2# hadoop fs -put /root/person.txt  /tmp/ticket 

-bash-3.2# hadoop fs -put /root/ticket.txt /tmp/ticket

-bash-3.2# hadoop fs -ls /tmp/ticket

2)创建外部表

 create external table student_ext(name STRING,age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE LOCATION '/tmp/ticket'

3) 数据确认

  select * from student_ext 查询到上面两个文件内容全都倒表student_ext中了

  结论:一个路径对应的应该是一个表关联的数据文件, 有其他的文件,则默认文件中数据也会导入到

  这个外部表中,没数据的列会为NULL,多出来的数据会被忽略 

4)

 

三、复杂数据类型的使用  

这里列之间以'\t'分割,数组元素之间以','分割 

数据文件内容:

huangfengbeijing,shanghai,tianjin,guangzhou

linanchangchu,chengdu,wuhan

 

hive> create table complex(name string,work_locations array<string>)

       ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

       COLLECTION ITEMS TERMINATED BY ',';

 

加载数据:

LOAD DATA LOCAL INPATH '/root/complex.txt' OVERWRITE INTO TABLE complex 

确认数据是否在:

select * from complex; 

 

查询数组第一个数据:

select name,work_locations[0] from complex; 

结果:

huangfengxiao   beijing

linan   changchu

 

四、分区使用 

 Mis li huangfengxiao 20

 Mis li lijie 21

 Mis li dongdong 21

 Mis li liqiang 21

 Mis li hemeng 21

 Mr xu dingding 19

 Mr xu wangqiang 19

 Mr xu lidong 19

 Mr xu hexing 19

1) 用处:上面数据  是老师 、学生、年龄 ,如果按教师分区的话,在查询的时候可以直接分区查询  

 

2) 分区文件:

 classmem_Misli.txt

dingding19

wangqiang19

lidong19

hexing19

 classmem_MrXu.txt

dingding19

wangqiang19

lidong19

hexing19

 

3) 创建表

create table classmem(student string,age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\'  partitioned by(teacher string)

 

3) 数据导入-分区名称为查询表的最后一列,执行select * from classmem;

 LOAD DATA LOCAL INPATH '/root/classmem_Misli.txt' overwrite INTO TABLE classmem partition (teacher = 'Mis.li')  ;

 LOAD DATA LOCAL INPATH '/root/classmem_MrXu.txt' overwrite INTO TABLE classmem partition (teacher = 'Mis.Xu');  

 

4) 按分区进行数据查询 

  select * from classmem where teacher='Mis.Xu';   

 

五、桶的使用 

桶的原理是对一个表(或者分区)进行切片,选择被切片的字段,设定桶的个数,用字段与个数的hash值进行入桶。

比如bucket.txt数据文件内容如下:

id name age

1 huang 11

2 li 11

3 xu 12

4 zhong 14

5 hu 15

6 liqiang 17

7 zhonghua 19

如果我们想将这个数据表切成3个桶,切片字段为id

那么用id字段hash后,3个桶的内容如下:

桶id hash 3 =0

3 xu 12

6 liqiang 17

桶id hash 3 =1

1 huang 11

4 zhong 14

7 zhonghua 19

桶id hash 3 =2

2 li 11

5 hu 15

这个过程的创建表语句如下:

create table bucketmem (id int,name string,age int) CLUSTERED BY (id) sorted by (id asc) into 3 buckets

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

 

LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/bucketmem.txt' INTO TABLE bucketmem;

select * from bucketmem tablesample(bucket 1 out of 4)

 

六、其他基本语句 

 1) 更改名称

alter table old_table_name RENAME TO new_table_name ;

 2)更改表名称

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type[COMMENT col_comment] 

 

 3)添加一个字段或者替换掉表中所有字段

     ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)   

     ADD是代表新增一字段,字段位置在所有列后面(partition列前);REPLACE则是表示替换表中所有字段

 

 

 七、在hive中查看hdfs文件

dfs -ls /user;

 

 

 八、时间处理函数 

  1) 字符串类型时间戳转换成日期

   select from_unixtime(cast('1326988805' as int),'yyyyMMddHH');  2012011908

  2)得到当前时间 

     select unix_timestamp()

  3)日期类型转换为时间戳  

select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss')

        select unix_timestamp(’2011-12-07 13:01:03′) 

   4)取日期的某一部分  hour,minute,second,weekofyear(当前是这个 年的第几周)

select to_date('2011-12-08 10:03:01′)  ;    --2011-12-08

select year('2011-12-08 10:03:01');--2011

select month('2011-12-08 10:03:01');

select day('2011-12-08 10:03:01'); 

select datediff(’2012-12-08′,’2012-05-09′)  查询时间差 

date_add(string startdate, int days)  日期添加天数 

date_sub (string startdate, int days)  日期减去天数 

 

 

 

 

 

分享到:
评论

相关推荐

    hive基础语法

    - 通过ROWFORMAT定义数据行的格式,如字段分隔符、集合分隔符等,如果未指定则默认使用Hive自带的序列化和反序列化器(SerDe)。 - 指定数据存储格式,支持多种格式,包括SEQUENCEFILE、TEXTFILE、RCFILE等。 - ...

    hive词法语法分析草稿0.3

    《hive词法语法分析草稿0.3》是关于Hive源码分析的一份教程,主要探讨了如何利用ANTLR这一解析工具对Hive的词法、语法和语义进行解析,进而生成执行计划并进行优化。ANTLR是一个强大的解析器生成器,常用于处理语言...

    Hive简介、Hive基础语法、Hive编程

    Hive简介,包括Hive的来源,系统的架构 Hive基础语法,包括 Hive各种函数 Hive编程,导入、导出、建表、分区、自定义函数

    Hive语法详解

    ### Hive SQL语法详解 #### 一、Hive简介与特性 Hive是一个建立在Hadoop之上的数据...以上是关于Hive SQL语法的一些基本介绍和详细说明。通过理解这些概念和语法,你可以更好地利用Hive来进行大数据的处理和分析。

    HIVE语法.docx

    - 类似于`LIKE`,但使用的语法更接近Java正则表达式。 11. **REGEXP操作** `REGEXP` - 使用正则表达式进行模式匹配。 ### 二、数学运算 Hive支持基本的数学运算操作符,用于数值计算和处理。 1. **加法操作** `...

    01.hive查询语法--基本查询--条件查询--关联查询.mp4

    01.hive查询语法--基本查询--条件查询--关联查询.mp4

    Hive语法详解.docx (排版清晰,覆盖全面,含目录)

    ### Hive语法详解 #### 一、安装和配置 **1.1 要求** - **硬件需求**:为了高效地运行Hive,推荐至少具备4GB内存,并且Hive服务器应该有足够的磁盘空间来存储元数据。 - **软件需求**:Hive需要Java环境支持,...

    Hive语法及技术进阶.pdf

    本文将详细介绍 Hive 语法的基本概念、创建表、加载数据、查询数据等知识点。 一、Hive 基本语法-建表 Hive 表是 Hive 中的基本概念,用于存储数据。创建表是 Hive 中的基本操作,用于定义表的结构。Hive 提供了...

    Hive基础,详解介绍HIVESQL中的语法

    Hive基础,详解介绍HIVESQL中的语法

    hive 创建表语法.docx

    Hive 创建表语法是 Hive 中的一种基本操作,用于创建 Hive 表。Hive 表可以是内部表,也可以是外部表。下面将详细介绍 Hive 创建表语法的使用。 EXTERNAL 关键字 在 Hive 中,使用 EXTERNAL 关键字可以创建外部表...

    Hive函数及语法说明.docx

    Hive 支持基本的 SQL 操作,如 SELECT、FROM、WHERE、GROUP BY、JOIN 等,这些构成了 Hive 查询的基础。 #### 扩展语法 为了满足更复杂的需求,Hive 还允许添加自定义语法。例如,`cube` 和 `rollup` 用于多维数据...

    Hive语法及技术进阶.pptx

    Hive 语法是指使用 Hive 处理数据时所使用的语句和命令。以下是 Hive 语法及技术进阶的知识点: Hive 基本语法 Hive 的基本语法包括创建表、加载数据、查询数据等。创建表的基本语法是: `CREATE [EXTERNAL] ...

    hive-sql语法大全

    Hive SQL 语法大全 Hive SQL 语法大全是 Hive 中的 SQL 语法说明,涵盖了数据库操作、表操作、数据类型等方面的知识点。 一、数据库操作 1. 创建数据库:CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION '...

    Hive 基本命令操作1

    以上就是关于Hive基本命令操作的一些核心知识点,包括创建表、查看表结构、数据加载以及查询等。在实际操作中,根据业务需求选择合适的数据模型(如分区表)并正确地管理数据,能够极大地提高数据处理的效率和便利性...

    Hadoop-2.8.0-HA-Hive安装部署与HQL09.hive的基本语法--建表语法.mp4

    Hadoop-2.8.0-HA-Hive安装部署与HQL09.hive的基本语法--建表语法.mp4

    hive笔记,干货满满,基础语法,分桶分区等

    语法笔记hive干货,没有废话,基础语法,自己学习中记录的基础简单内容,入门级别,分桶,分区,查询,常用命令等。

    Hive简明教程-大数据技术系列

    例如,你可以学习如何使用LOAD DATA命令将数据导入Hive表,使用SELECT语句进行基本查询,以及如何运用GROUP BY和JOIN操作来处理复杂的数据分析任务。此外,Hive支持UDF(用户自定义函数),这使得用户可以根据需要...

Global site tag (gtag.js) - Google Analytics