具有聚集列存储索引的表不支持游标——如何查询
一.问题描述
SQL Server 2014引入了聚集列存储索引,但是导致select语句不能直接进行查询,当想要通过sqoop工具(spark同理)从sqlserver往hive仓库中抽数时,只能整表抽,不能做一些字段的筛选。
二.解决办法
- 方法一:
select top 100 * from student
; 查询前100条 - 方法二:
select top 100 percent * from student
;查询100%
这个方法可以完美解决SqlServer中查询问题,在关系型数据库往hive数仓做数据迁移时,可以有针对型的对字段进行筛选。
三.知识拓展
以下部分有时间可以看。
微软在SQL Server 2012引入了列存储技术,使得OLAP和Data warehouse场景性能提升10X,并且数据压缩能力超过传统表7X。这项技术包含三个方面的创新:列存储索引、Batch Mode Processing和基于Column Segment的压缩。但是,SQL Server 2012列存储索引的一个致命缺点是列存储索引表会进入只读状态,用户无法更新操作。SQL Server 2014引入了可更新聚集列存储索引技术来解决列存储索引表只读的问题,使得列存储索引表使用的范围和场景大大增加。
名词解释
SQL Server 2014使用聚集列存储索引来解决列存储索引表只读问题的同时,引入了几个全新的名称。
Clustered Column Store Index
聚集列存储索引是一个可更新的整张表数据物理存储结构,并且每张表只允许创建一个聚集列存储索引,不能与其他的索引并存。我们可以对聚集列存储索引进行Insert、Delete、Update、Merge和Bulk Load操作。 这也是SQL Server 2014 Clustered Columnstore Index正真强大的地方。下面这张来自微软官方的图描述了聚集列存储索引的物理存储结构:
注释:sqlserver2012版利用列存储让存储效率提升了10倍,但是只能读,后来聚集列索引解决了只读问题。