目录
一、数据类型
1、基本数据类型
类型 | 说明 |
数值型 | |
tinyint | 1字节0-255整数 |
SMALLINT | 小整形2字节 |
INT | 4字节整形 |
BIGINT | 8字节整形 |
FLOAT | 单精度 |
DOUBLE | 双精度 |
DECIMAL | 可带小数的精确数字字符串 |
布尔型 | |
Boolean | TRUE/FALSE |
字符串型 | |
STRING | 不设长度 |
varchar | 最大长度65535,长度不固定字符串 |
char | 最大长度255,固定长度字符串 |
时间类型 | |
TIMESTAMP | 时间戳类型 |
DATE | 日期类型 |
字节序列:BINARY |
2、复合数据类型
ARRAY | 同类型元素的数组,索引从0开始,ARRAY<TYPE> |
MAP | 字典类型MAP<TYPE,TYPE> |
STRUCT | 结构体类型,STRUCT<COL:TYPE,COL:TYPE....> |
UNIONTYPE | 联合体类型,UNIONTYPE<TYPE,TYPE.....> |
二、数据定义
1、数据库
创建数据库的语句如下。
CREATE DATABASE [IF NOT EXISTS] dbName
[COMMENT '这是一个数据,创建数据库可以指定位置']
[LOCATION '/user/hadoop/mydb']
[WITH DBPROPERTIES('CREATOR'='JONE','DATE'='2020-12-29')];
查找数据库
SHOW DATABASES;
//还可以用正则表达式匹配筛选出想要找的数据库
SHOW DATABASES LIKE 'd.*';
查看数据库信息
DESCRIBE DATABASE dbName;
切换当前数据库
USE default;
通过以下命令显示当前数据库
set hive.cli.print.current.db=true
删除数据库
DROP DATABASE [IF EXISTS] dbName CASCADE;
测试:
CREATE DATABASE IF NOT EXISTS mydb
COMMENT '测试数据库'
LOCATION '/user/hadoop/mydb'
WITH DBPROPERTIES('CREATOR'='Jone','DATE'='2020-12-29');
在执行descibe database mydb的时候,数据库中文注释总是乱码,按照网上的方法也搞不定。好在表,字段注释不是乱码。
2、表
创建表
CREATE TABLE [IF NOT EXISTS] mydb.student_info(
id VARCHAR(5) COMMMENT '唯一标识',
name STRING COMMENT '名字',
age UNIONTYPE<INT,STRING> COMMENT '年龄,联合类型可以是int,可以是string',
home_address STRUCT<PROVINCE:STRING,CITY:STRING,TOWN:STRING> COMMENT '家庭地址,省市乡三级行政机构',
family ARRAY<STRING> COMMENT '家人'
)
[COMMENT '学生信息表']
[TBLPROPETTIES('CREATOR'='ATM')]
[LOCATION '/user/hadoop/mydb/student_info'];
拷贝表模式
CREATE TABLE mydb.stu
LIKE mydb.student_info
查看表
describe [formatted] student_info;
show tblproperties student_info;
管理表
管理表也叫内部表,这种表的数据周期由hive控制。当删除表中的数据时,数据文件中的数据也会被删除。
外部表
区别于内部表,hive对外部表没有所有权。所以当删除表时,hive仅删除相关元数据。不会删除数据文件。
CREATE [EXTERNAL] TABLE IF NOT EXISTS mydb.student_info(
id VARCHAR(5) COMMENT '唯一标识',
name STRING COMMENT '名字',
age UNIONTYPE<INT,STRING> COMMENT '年龄,联合类型可以是int,可以是string',
home_address STRUCT<PROVINCE:STRING,CITY:STRING,TOWN:STRING> COMMENT '家庭地址,省市乡三级行政机构',
family ARRAY<STRING> COMMENT '家人'
)
COMMENT '学生信息表'
LOCATION '/user/hadoop/mydb/student_info'
TBLPROPERTIES('CREATOR'='ATM');
分区表
CREATE TABLE WORDS(LINE STRING)
PARTITIONED BY (DT STRING);
通过[PARTITIONED BY]来指定分区列,这个列不用放在表模式中。hive会在hdfs中创建分区子目录。
三、数据操作
加载数据
LOAD DATA [LOCAL] INPATH INTO TABLE employees PARTITION (COUNTRY = 'US',STATE='CA');
如果指定了LOCAL关键字,则后面的INPATH是本地路径,否则是hdfs上的路径。
HiveSQL和MySQL是很像的。如果有MySQL基础,HiveSQL也是可以很容易上手的。
HIVE SQL的知识非常多。这里简单介绍一点点。可以看书学习。推荐人民邮电出版社出版的曹坤翻译的《Hive编程指南》
到此Hadoop、zookeeper、hive、hue都以及有了。下一步就是期待已久的实战了。这里参考华为大数据实验离线分析部分的指导文档