t

thatdaniel

V1

2022/10/16阅读:23主题:默认主题

【Hive】Hive 创建表

学习笔记—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,被: 分隔;

第四列为其他信息,字段被, 分隔;

分类:

后端

标签:

大数据

作者介绍

t
thatdaniel
V1