1.hive索引
https://www.cnblogs.com/zlslch/p/6105294.html
分区数据非常庞大的情况下,索引常常是优于分区的。
Hive并不像事物数据库那样针对个别的行来执行查询、更新、删除等操作。这些操作依赖高效的索引来实现高性能。
为什么创建索引?
没有索引时,类似'WHERE tab1.col1 = 10' 的查询,Hive会加载整张表或分区,然后处理所有的rows,但是如果在字段col1上面存在索引时,那么只会加载和处理文件的一部分。
hive > create index user_index on table user(id)
> as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
> with deferred rebuild
> IN TABLE user_index_table;
#更新数据
ALTER INDEX user_index on user REBUILD;
#设置属性:设置 Hive 的索引属性来优化索引查询
set hive.exec.dynamic.partition.mode=nonstrict;----设置所有列为 dynamic partition
set hive.exec.dynamic.partition=true;----使用动态分区
#设置优化参数(这两个参数默认为false,需要打开)
set hive.optimize.index.filter =true;
set hive.optimize.index.groupby =true;
2.show partitions
how partitions 可以展示这个表格之下的所有分区信息。这个命令常常用在使用SQL语句操作数据之前。举个简单的例子,如果我们想要根据uid融合两个hive表格,那么在筛选数据的时候用到分区dt(datetime)以确保融合的数据是在同一天生成的。
3.sorted as parquet
hive 查询结果转为parquet格式 存入hdfs中
parquet:
压缩?我理解的是一个压缩格式。以列储存。缩短查询时间。提升存储效率,压缩内存。
https://cloud.tencent.com/developer/article/1158295
https://blog.csdn.net/worldchinalee/article/details/82785262