列具有无法参与列存储索引的数据类型
Posted
技术标签:
【中文标题】列具有无法参与列存储索引的数据类型【英文标题】:Column has a data type that cannot participate in a columnstore index 【发布时间】:2021-11-22 12:03:25 【问题描述】:我想使用以下查询在表中创建聚集列存储索引:
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON agl_20180319_bck
我收到了这个错误:
消息 35343,第 16 级,状态 1,第 6 行 声明失败。列“memberOf”的数据类型不能参与列存储索引。省略列“memberOf”。
“memberOf”属于这种类型:memberOf nvarchar(max)
。
如何克服/忽略这个错误,它是什么意思?
【问题讨论】:
【参考方案1】:只需指定 varchar 变量的长度,而不是使用最大值。对我有用!
【讨论】:
【参考方案2】:根据documentation:
使用以下任何数据类型的列不能包含在 列存储索引:
nvarchar(max)、varchar(max) 和 varbinary(max)(适用于 SQL Server 2016 及之前的版本,以及非聚集列存储索引)
要么更改列的类型(如果可以),要么在此特定列上没有列存储索引。
【讨论】:
这意味着我必须创建一个非聚集列存储索引? 不,这意味着您根本无法在该列上创建列存储索引。您可以尝试将类型从 nvarchar(max) 更改以对其进行限制,例如将长度设置为 4000。然后您可以在其上创建列存储索引。【参考方案3】:您需要单独指定参与的列,不包括 memberOf 和任何其他不能在 columnStore 索引中使用的列
【讨论】:
我尝试了您的建议并收到以下消息:语句失败,因为在创建聚集列存储索引时不允许指定键列表。在不指定键列表的情况下创建聚集列存储索引。CREATE CLUSTERED COLUMNSTORE INDEX cci ON algtable_20180319_bck (displayname, alias, firstname, lastname, exaddress)
以上是关于列具有无法参与列存储索引的数据类型的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:加载具有日期列数据类型的 avro 文件,只要转换为时间戳