
我们在写HQL有没有遇到过数据量特别大的时候比如,使用HQL 处理起来非常复杂,非常慢,这时候我们可以使用Hive给加个索引来提高我们的速度。多了就不说了,我们直接开始。
Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0.0 引入的物化视图除外),当查询引用 视图 时,Hive 可以将视图的定义与查询结合起来,例如将查询中的 过滤器推送到视图 中。
创建视图注意事项
准备数据
创建一个测试视图
语法:
示例 :
通过 desc formatted default.user_view详情信息
Hive 在 0.7.0 引入了索引的功能,索引的 设计目标是提高表某些列的查询速度 。如果没有索引,带有谓词的查询(如'WHERE table1.column = 10')会加载 整个表或分区并处理所有行 。但是如果 column 存在索引,则只 需要加载和处理文件的一部分 。
我们在使用之前上面创建好的 user 表对 id 字段创建名字为 user_index ,索引存储在 user_index_table 索引表中
此时索引表中是没有数据的,需要重建索引才会有索引的数据。
Hive 会启动 MapReduce 作业去建立索引,建立好后查看索引表数据如下。三个表字段分别代表: 索引列的值 、 该值对应的 HDFS 文件路径 、 该值在文件中的偏移量 。
默认情况下,虽然建立了索引,但是 Hive 在查询时候是不会 自动去使用索引 的,需要 开启相关配置 。开启配置后,涉及到索引列的查询就会使用索引功能去 优化查询 。
删除索引会删除对应的索引表。
如果存在索引的表被删除了,其对应的索引和索引表都会被删除。如果被索引表的某个分区被删除了,那么分区对应的分区索引也会被删除。
在 指定列 上建立索引,会产生一张索引表( Hive的一张物理表 ),里面字段包括: 索引列的值 、 该值对应的 HDFS 文件路径 、 该值在文件中的偏移量 。
在执行索引字段查询时候,首先额外生成一个 MapReduce job ,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的 hdfs文件路径及偏移量 , 输出到hdfs上的一个文件中,然后根据这些文件中的hdfs路径和偏移量 ,筛选原始 input文件 ,生成 新的split ,作为整个job的split,这样就达到不用全表扫描的目的。
今天给大家分享了Hive中常用的视图和说索引,索引虽然能帮助我们提高查询效率和分组效率但它也有缺点的,创建好索引是无法自动 rebuild 也就意味着修改数据和添加数据都需要手动执行 rebuild 。如果频繁修改的数据就不建议使用 索引 了。信自己,努力和汗水总会能得到回报的。我是大数据老哥,我们下期见~~~
实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段。
如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。
解决方法:
解决方法很简单,就是增加col1时加上cascade关键字。示例如下:
加深记忆的方法也很简单,cascade的中文翻译为“级联”,也就是不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构。
ADD COLUMNS lets you add new columns to the end of the existing columns but before the partition columns. This is supported for Avro backed tables as well, for Hive 0.14 and later.
REPLACE COLUMNS removes all existing columns and adds the new set of columns. This can be done only for tables with a native SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe, LazySimpleSerDe and ColumnarSerDe). Refer to Hive SerDe for more information. REPLACE COLUMNS can also be used to drop columns. For example, "ALTER TABLE test_change REPLACE COLUMNS (a int, b int)" will remove column 'c' from test_change's schema.
The PARTITION clause is available in Hive 0.14.0 and latersee Upgrading Pre-Hive 0.13.0 Decimal Columns for usage.
The CASCADE|RESTRICT clause is available in Hive 1.1.0. ALTER TABLE ADD|REPLACE COLUMNS with CASCADE command changes the columns of a table's metadata, and cascades the same change to all the partition metadata. RESTRICT is the default, limiting column changes only to table metadata.
方法一:利用编辑器直接插入控制字符,以Vi为例。进入Vi:Shell代码收藏代码$visupply-20110101.txt在Vi命令模式下,键入:setlist,设置控制字符可见,成功后Vi会立即显示一个行结束标志$。填入Hive表中需要的每列数据欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)