学习笔记—Hive创建表
1. Hive语句的特点
HQL 语言大小写不敏感,但内容分大小写(where ,if/ case when,如:数据表内容某人名叫Tom,则条件后不能写tom,HDFS 路径名(NameNode)分大小写) ;
HQL 可以写在一行或者多行, 关键字不能被缩写也不能分行,同 SQL;
各子句一般要分行写, 使用缩进提高语句的可读性,为了美化,同SQL;
-- 为注释符号 ;
Hive 不存储数据,他是表到HDFS文件的映射关系(语句);
2. DDL
2.1 Hive的数据库DDL
Hive的数据库中相关的DDL语句与SQL基本一致,常见如下:
创建数据库:create database [if not exists] 数据库名
查看数据库:show databases
删除数据库:drop database [if exists] 数据库名
使用数据库:use 数据库名
2.2 Hive的数据表DDL
创建表:creat table 表名(colname, data_type,
colname, data_type, .....) 或
create table 表名 like 已有表表名;
或
create table like select 语句;
查看表:show tables
查看表结构:desc 表名
查看建表语句:show create table 表名
删除表:drop table [if exists] 表名
修改表名:alter table 表名 rename to 新表名
字段编辑:添加字段:alter table 表名 add column [colname data_type, colname 2 data_type2 ....]
修改字段名/类型 alter table 表名 change 旧字段名 新字段名 新字段类型
分区编辑:添加分区: alter table 表名 add partition (分区字段='分区字段数值')
查看分区:show partitions 表名
删除分区:alter table 表名 drop partition (分区字段='分区字段数值')
注:MySQL也可以分区,但一般不用,用数仓解决分区(后面内容详细解释数仓的分区);
2. 数据类型
2.1 类型
与MySQL数据库类型差异点:复合类字段
Array:同类型字段(data_type),都是数字类或字符串类型;
Map:组合类 (如:张三 北京;张三 18),可以组合不同类型字段
struct:结构体
2.2 数据类型转换
cast(列名 as 要转换的类型) ;
convert(数据类型,列名);
如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现;
对于BINARY类型的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型 数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作;
对于Date类型的数据,只能在Date、Timestamp以及String之间进行转换。
3. 分隔符
4. 示例解释
-- 创建表
create table emp(
userid bigint,
emp_name array<string>, -- 数组类型:外国人的名字包含 名 和 姓
emp_date map<string,date>, -- 将入职日期和出生日期组合,入职日期和出生日期字段类型(key_value)为string,
-- 其值本身(value_type)类型为date
other_info struct<deparment:string,gender:string>
row format delimited -- 指定分隔符
fields terminated by '\t' -- 字段分隔为\t,表示一个字段为一个制表位
collection terminated by ',' -- 元素分隔符:将array/struct中各个字段用,隔开;将map中的key_value用,隔开
map keys terminated by ':' -- 将map类型的key和value用:隔开
-- 三类分隔符指令都存在时,顺序不能错
表结果:
10011 为userid,字段类型bigint;
Mary Sluis为字段名和姓,用array组合,用字段用,隔开;
第三列为map组合,birthdate和from_date都是key_value, 为string字段,key_value 被,分隔;后面的日期分别为其值,值类型(value_type)为date,被: 分隔;
第四列为其他信息,字段被, 分隔;
本文由 mdnice 多平台发布
版权归原作者 thatdanielyang 所有, 如有侵权,请联系我们删除。