hive-DDL语法

1、模糊查找表使用

show tables like '*merchant_user_*_his*'

2、建表指定的表存储格式

  • 首先需要了解行式存储与列式存储的优缺点
a. 行式存储主要存储结构化数据,列式存储主要存储结构化数据以及非结构化数据
b. 行式存储是将每一行数据存储为一个连续的块,列式存储将每一列数据存储为一个连续的块
c. 关于插入、更新操作,这种操作以行为单位,所以选择行式存储更合适
d. 关于查询分析,基本不可能做全表扫描,只做指定列查询,所以使用列式存储更高效,并且针对分析的话,列式存储数据类型一致,压缩更高效
e. 关于分块的问题,行式存储分块就是按照块的大小,总大小除以块大小即可计算出来。列式存储分块是以列为单位,需要根据数据类型所占字节数、设置的数据存储块是多少MB、一列有多少行数据去计算最终落盘的存储块个数
  • 其次弄清楚数仓适合使用列式存储后,不同场景、数据类型、数据量的情况选择什么样的列式存储格式
    • TextFile(文本)
    • CSV(文本)
    • RCFile(列存)
    • SequenceFile(二进制)
    • AVRO(行存)
    • ORC(列存)
    • Parquet(列存)

下面主要介绍常用的格式主要是orc以及parquet。

这两种格式区别有很多的探究点,但是我觉得最应该明白的是他们的存储逻辑。
orc的存储是基于Stripe存储,对所有数据做行切分为多个Stripe,在Stripe内部对所有列做列式存储构成一个个block块。
parquet是基于page存储,每个page是一个列的子集,每个page都可以独立的进行读取与编码。

orc详细原理:
每个ORC文件由1个或多个条带 (stripe) 组成,每个条带一般是一个HDFS块。每个条带由Index Data、Row Data、 Stripe Footer组成Index Data: 保存了一些索引信息,记录着每个数据段在stripe中的位置。Row Data: 主要存放数据的地方,一个Rows Data由多个行组构成,每10000行构成一个行组行组内部以流式形式列式存储,实际上由两部分构成: metadata Stream描述行组的元数据dataStream数据流
Stripe Footer: 描述各个stream的类型、长度等信息
另外,每个orc文件中除若干个stripe外,还包含file footer (文件脚注) 、postscript (描述信息)
file footer: 记录每个stripe的行数,每个列的数据类型,每个列的最大值、最小值等信息.postscript: 压缩参数、压缩大小等信息读取orc文件时,先读取postscript信息,根据postscript记录的filefooter长度信息,解析filefooter,再从filefooter中解析出各个stripe信息,再读取各个stripe。

大致写一下数仓阶段使用的格式:
1. 原始数据落地阶段:该阶段一般采用CSV格式存储,数据在类型上以文本为主,保持数据原样。该阶段的数据也能被AI摄入。
2. 数据标准化阶段:该阶段一般是数仓的数据加工组织阶段,数据面临修改、更新,采用ORC能够较好支持该阶段的数据ACID需求。数据压缩通常 采用Snappy,以达到最优的性价比。
3. 数据分析阶段:该阶段一般采用Parquet,因为该阶段的数据一般很小变化,而且Parquet在复杂的嵌套结构方面,有较ORC不错的性能表现。Parquet数据压缩一般采用Zstandard压缩

3、关于表chema的变更

建表语句如下

create table test(
	col1 string,
	col2 string,
	col3 string)
comment '测试表'
partitioned by(stat_date bigint);
  • 表存储为默认textfile
# 增加字段
alter table test add columns(col4 string comment '字段4') cascade;

# 修改字段名称、类型、注释通用语句
alter table test change column col4 col4_1 double comment '字段4名称更新' cascade;

# 调整字段3的字段顺序,将其放置在col1之后
alter table test change column col3 col3 string after col1 cascade; 

# 删除指定字段col3,实际是采用替换的方式
alter table test replace columns(
col1 string,
col2 string,
col4_1 double);
  • 表存储为orc
    • 该格式不支持调整顺序以及删除字段
# 增加字段
alter table test add columns(col4 string comment '字段4') cascade;

# 修改字段名称、类型、注释通用语句
alter table test change column col4 col4_1 double comment '字段4名称更新' cascade;
  • 为什么orc不能调整字段顺序
在 ORC 存储格式中,数据是按列存储的,而不是按行存储的。这就意味着数据文件中的每一列都有自己的元数据,对
于调整字段顺序这样的操作,需要更复杂的元数据变更,涉及到数据文件的重新组织和元数据的更新。这会导致数据文
件的重写,代价较高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值