HiveSQL数据定义语言(DDL)
京杭运河开凿年代HiveSQL数据定义语⾔(DDL)
第⼀章、数据定义语⾔(D D L)概述
1.1D D L语法的作⽤
数据定义语⾔ (Data Definition Language, DDL),是SQL语⾔集中对数据库内部的对象结构进⾏创建,删除,修改等的操作语⾔,这些数据库对象包括database(schema)、table、view、index等。核⼼语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。
在某些上下⽂中,该术语也称为数据描述语⾔,因为它描述了数据库表中的字段和记录。
1.2H i v e中D D L使⽤
Hive SQL(HQL)与SQL的语法⼤同⼩异,基本上是相通的,学过SQL的使⽤者可以⽆痛使⽤Hive SQL。只不过在学习HQL语法的时候,特别要注意Hive⾃⼰特有的语法知识点,⽐如partition相关的DDL操作。
基于Hive的设计、使⽤特点,HQL中create语法(尤其create table)将是学习掌握DDL语法的重中之重。可以说建表是否成功直接影响数据⽂件是否映射成功,进⽽影响后续是否可以基于SQL分析数据。通俗点说,没有表,表没有数据,你分析什么呢?
选择正确的⽅向,往往⽐盲⽬努⼒重要。
第⼆章、H i v e D D L建表基础
2.1完整建表语法树
蓝⾊字体是建表语法的关键字,⽤于指定某些功能。
[]中括号的语法表⽰可选。
|表⽰使⽤的时候,左右语法⼆选⼀。
建表语句中的语法顺序要和上述语法规则保持⼀致。
2.2H i v e数据类型详解
整体概述
Hive中的数据类型指的是Hive表中的列字段类型。Hive数据类型整体分为两个类别:原⽣数据类型(primitive data type)和复杂数据类型(complex data type)。
投资理财专业原⽣数据类型包括:数值类型、时间类型、字符串类型、杂项数据类型;
复杂数据类型包括:array数组、map映射、struct结构、union联合体。
关于Hive的数据类型,需要注意:
英⽂字母⼤⼩写不敏感;
除SQL数据类型外,还⽀持Java数据类型,⽐如:string;
int和string是使⽤最多的,⼤多数函数都⽀持;
复杂数据类型的使⽤通常需要和分隔符指定语法配合使⽤。
如果定义的数据类型和⽂件不⼀致,hive会尝试隐式转换,但是不保证成功。
原⽣数据类型
Hive⽀持的原⽣数据类型如下图所⽰:
其中标注的数据类型是使⽤较多的,详细的描述请查询语法⼿册:
复杂数据类型
Hive⽀持的复杂数据类型如下图所⽰:
其中标注的数据类型是使⽤较多的,详细的描述请查询语法⼿册:
数据类型隐式、显⽰转换
与SQL类似,HQL⽀持隐式和显式类型转换。
原⽣类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。 下表描述了类型之间允许的隐式转换:
显式类型转换使⽤CAST函数。
电子信息科学
例如,CAST('100'as INT)会将100字符串转换为100整数值。 如果强制转换失败,例如CAST('INT'as INT),该函数返回NULL。
2.3H i v e读写⽂件机制
北影女S e r D e是什么
SerDe是Serializer、Deserializer的简称,⽬的是⽤于序列化和反序列化。序列化是对象转化为字节码的过程;⽽反序列化是字节码转换为对象的过程。
Hive使⽤SerDe(和FileFormat)读取和写⼊⾏对象。
需要注意的是,“key”部分在读取时会被忽略,⽽在写⼊时key始终是常数。基本上⾏对象存储在“value”中。
可以通过desc formatted tablename查看表的相关SerDe信息。默认如下:
左权是抗战期间八路军牺牲的最高将吗
智商多少正常
H i v e读写⽂件流程
Hive读取⽂件机制:⾸先调⽤InputFormat(默认TextInputFormat),返回⼀条⼀条kv键值对记录(默认是⼀⾏对应⼀条记录)。然后调⽤SerDe(默认LazySimpleSerDe)的Deserializer,将⼀条记录中的value根据分隔符切分为各个字段。
Hive写⽂件机制:将Row写⼊⽂件时,⾸先调⽤SerDe(默认LazySimpleSerDe)的Serializer将对象转换成字节序列,然后调⽤OutputFormat将数据写⼊HDFS⽂件中。
S e r D e相关语法
在Hive的建表语句中,和SerDe相关的语法为:
其中ROW FORMAT是语法关键字,DELIMITED和SERDE⼆选其⼀。
如果使⽤delimited表⽰使⽤默认的LazySimpleSerDe类来处理数据。如果数据⽂件格式⽐较特殊可以使⽤ROW FORMAT SERDE serde_name指定其他的Serde类来处理数据,甚⾄⽀持⽤户⾃定义SerDe类。
L a z y S i m p l e S e r D e分隔符指定
LazySimpleSerDe是Hive默认的序列化类,包含4种⼦语法,分别⽤于指定字段之间、集合元素之间、map映射 kv之间、换⾏的分隔符号。在建表的时候可以根据数据的特点灵活搭配使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。