关于HiveQL基础语法和查询语句在GitHub
数据类型
1 原子类型
> DECIMAL 任意精度的小数,类似Java的BigDecimal
(精度,标度) 精度默认值为10, 标度默认值为0
DECIMAL(5, 2) -999.99~999.99
省略标度 DECIMAL(5) -99999~99999
省略精度 DECIMAL(10,0)
> 存储文本 STRING VARCHAR CHAR
> Binary 存储变长二进制数组
> TIMESTAMP精度为纳秒的时间戳
时间戳是UNIX纪元开始的秒数
2 复杂类型
> ARRAY
>MAP
>STRUCT STRUCT<a:STRING, b:INT, c:DOUBLE> 数据格式与定义格式匹配
>UNION UNIONTYPE<STRING, INT> 数据格式与格式之一匹配
操作与函数
> 操作符:关系操作符 算数操作符 逻辑操作符
> 内置函数:数学和统计函数 字符串函数 日期函数 条件函数 聚集函数 处理XML和JSON的函数
> SHOW FUNCTIONS;
类型转换
> 数值类型隐式转换只能向范围更广的类型或文本类型转换,不能反向转换
> 文本可以互转
> 文本可以转为DOUBLE或DECIMAL
> BOOLEAN不可转换
> TIMESTAMP和DATE可以转换文本
> CAST可以显式转换
表
> Hive把元数据放在关系型数据库中Derby/MySQL
> 表的数据放在文件系统中
托管表和外部表
> 托管表:数据移入仓库目录
所有数据集都有Hive处理
> 外部表:到仓库目录以外的位置访问数据 EXTERNAL
Hive和其他工具处理同一个数据集
从Hive导出数据供其他应用使用
为一个数据集关联不同的模式
将HDFS的数据集当作外部表使用,使用Hive的变换功能把数据移到托管的Hive表
分区和桶
分区
> 根据分区列的值对表划分,叫分区,如时间戳表按照日期划分,同一天一个区
> 在分区基础上再划分,如按天分区之后按国家分区,称为子分区
> PARTITIONED BY
桶
> CREATE TABLE BUCKETED_USERS(ID INT, NAME STRING) CLUSTERED BY (ID) INTO 4 BUCKETS;
> Hive对ID进行HASH,将结果除以桶的个数取余数,每个桶里有随机的用户集合
> CLUSTERED BY
存储格式
行格式
> SerDe定义,序列化和反序列化工具
> 查询表,把文件中字节形式反序列化为对象
> INSERT/CTAS把序列化为字节形式
文件格式
> 一行中字段容器的格式,如纯文本文件存储
> 文本分隔符 CTRLA CTRLB CTRLC
二进制存储格式
导入数据
> INSERT
> 多表插入
> CTAS CREATE TABLE ... AS SELECT
表的修改和丢弃
> ALTER TABLE
> 重命名表:托管表将表数据移到新目录下,并修改元数据,外部表只更新元数据,不会移动目录
> DROP TABLE
> 外部表只删除元数据
> 托管表删除元数据和表数据