本文主要内容
-
数据库数据表的定义;
-
Hive语句注意事项;
-
DDL语句HQL与MySQL的差异点;
-
Hive的数据类型及数据类型转换;
-
建表分隔符,分区表、分桶表、外部表的技术与意义;
-
普通表、分区表和分桶表数据的导入、导出及删除方式和注意事项。
目录
-
MySQL中虽然有表分区,但因为有数据仓库的存在,所以MySQL中就没有介绍了
-
排序中distribute by 不是排序是分区,sort by + distribute by=cluster by
第一节 数据库数据表定义
0.1 HQL语句注意事项
-
HQL语言大小写不敏感。 内容(条件where ,if/ case when)、HDFS路径名分大小写;
-
HQL可以写在一行或者多行;
-
关键字不能被缩写也不能分行;
-
各子句一般要分行写 (美化的问题);
-
使用缩进提高语句的可读性 (美化的问题);
-
-- 为注释符号(只有这一个);
0.2 Hive-DDL知识图谱
- 如果想要删除增减字段,建议使用create table 新表 as 旧表,再把旧表删了,这种操作对文件没有影响,只是有一部分关系没有映射而已。
- Hive与MySQL差异点
-
数据表DDL 删除字段HQL语句更加复杂,但表结构一般不会随便更改,这里就不作讲解。
-
分区编辑,因为在MySQL阶段没有介绍,所以在这里重点讲解;
-
除以上两点,其它语句Hive与MySQL基本一样
- 创建删除数据库
Create Database if not Exists Lagou_HiveClass;
use Lagou_HiveClass;--使用数据库
1.1 数据类型
-
1.字符串类型常用String,为了节省空间也用Varchar/Char;
-
2.Misc类常用Boolean ;Binary——1/0(相当于MySQL中的bit);
-
3.复合类:示例见“1.2分隔符”建表语句及截图
-
ARRAY数组——同一种类型(全是姓名;全是ID);
-
MAP——两种类型{例如:(张三,北京)}
-
Struct——(列名1,类型1;列名2,类型2;···)
-
联合体一般不用,这里不作介绍
-
-
4.日期时间类型timestamp类型为HQL专有的类型,而MySQL没有单独的时间戳类型,需要用长整型存储
- 注意:日期时间类型文件装载时,源文件是("年-月-日")以”-“连接的才能正常显示数据
-
若源文件数据是("年/月/日")以“/"连接时的,该如何解决?
-
先将该字段数据类型改成字符串型(此时,能显示日期数据);
-
alter table 表名 change column 旧列名 新列名 varchar(50);
-
也可以重新建表改字段类型
-
-
再把字符串类型改成时间类型的数据放入创建的新表,删除旧表;
create table 新表名 as SELECT (旧表原有的其他字段), to_date(from_unixtime(unix_timestamp(reg_time,'yyyy/mm/dd'))) as 字段名 from 旧表; --reg_time为旧表日期字段 drop table 旧表; --此时,数据为正常的年-月-日时间类型
-
-
1.1.1 数据类型转换
-
cast(列名 as 要转换的类型)
-
convert(数据类型,列名)
-
有些操作会自动转换数据类型,如下:
-
①如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现!
-
②对于BINARY类型(二进制)的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作。