关于Hive(三) HiveQL和表

关于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

       > 外部表只删除元数据

        > 托管表删除元数据和表数据


猜你喜欢

转载自blog.csdn.net/weixin_42129080/article/details/80820413