建表
在数仓里,数据表可以分为内部表和外部表。内部表和外部表的区别是内部表的数据存储是在当前用户所在的hdfs目录下,而外部表则不是。
- 内部表和外部表
内部表在hdfs上的常见文件存储格式有 textfile,orc,rc,pqrquet 等存储格式,每种格式的优劣这里先不做具体展开,项目上基于性能和存储考虑,一般选择orc 或者是parquet,o确切来说orc比parquet更省存储,性能差不多。如果是考虑后续更换计算引擎(比如说是spark,或者是impala) 那还是选用parquet 更适合一点(扩展性更强)。
- 分区分桶
这种策略是在应对数据量较大的情况下采用的。
分区可以是一级分区,二级分区,乃至三级分区(example:天-小时-分钟)。
hive表的表名在hdfs上实际是一个文件目录,分区只是文件目录下的子目录而已

分区也分为动态分区和静态分区,静态分区的是往hive表的某一个固定分区写入数据,而动态的则是根据分区字段的值写入对应的分区,所以当选择动态分区的时候,要看下参数有无打开,或者是
在sql之前执行以下脚本
set hive.exec.dynamic.partition=true; set
hive.exec.max.dynamic.partitions=2000;
打开动态分区开关,设置最大动态分区数为2000.具体2000 还是300 还是1000 根据具体场景设计。
- 分桶
对Hive(Inceptor)表分桶可以将表中记录按分桶键的哈希值分散进多个文

本文介绍了Hive数仓中内部表和外部表的区别,包括它们在HDFS上的存储格式,如ORC和Parquet。讨论了分区和分桶策略,强调动态分区和静态分区的使用场景,并提到了外部表在临时分析计算中的作用。建议在建表时考虑优化方案,如选择适当的分区和存储格式。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



