Azure SQL 超过 102,400 行到一个分布的 DW CTAS 不会自动压缩

Azure SQL DW CTAS of over 102,400 rows to one distribution doesn't automatically compress

我认为列存储的工作方式是,如果您将超过 102,400 行批量加载到列存储的一个分布中,它会自动压缩它。我没有在 Azure SQL DW 中观察到这一点。

我正在执行以下 CTAS 声明:

create table ColumnstoreDemoCTAS
WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION=HASH(Column1))
AS
select top 102401 cast(1 as int) as Column1, f.*
from FactInternetSales f
cross join sys.objects o1
cross join sys.objects o2

现在我检查列存储行组的状态:

select t.name
,NI.distribution_id
,CSRowGroups.state_description
,CSRowGroups.total_rows
,CSRowGroups.deleted_rows
FROM sys.tables AS t
JOIN sys.indexes AS i
    ON t.object_id = i.object_id
JOIN sys.pdw_index_mappings AS IndexMap
    ON i.object_id = IndexMap.object_id
    AND i.index_id = IndexMap.index_id
JOIN sys.pdw_nodes_indexes AS NI
    ON IndexMap.physical_name = NI.name
    AND IndexMap.index_id = NI.index_id
LEFT JOIN sys.pdw_nodes_column_store_row_groups AS CSRowGroups
    ON CSRowGroups.object_id = NI.object_id 
    AND CSRowGroups.pdw_node_id = NI.pdw_node_id
    AND CSRowGroups.distribution_id = NI.distribution_id
    AND CSRowGroups.index_id = NI.index_id    
WHERE t.name = 'ColumnstoreDemoCTAS'
ORDER BY 1,2,3,4 desc;

我最终得到一个包含 102401 行的 OPEN 行组。我是否误解了列存储的这种行为? Azure SQL DW 有什么不同吗?

如果我从 SSIS 批量插入相同数量的行作为一个缓冲区,我会看到相同的行为。

我尝试了 Drew 关于插入超过 650 万行的建议,但我仍然以所有 OPEN 行存储结束:

create table ColumnstoreDemoWide
WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION=HASH(Column1))
AS
select top 7000000 ROW_NUMBER() OVER (ORDER BY f.ProductKey) as Column1, f.*
from FactInternetSales f
cross join sys.objects o
cross join sys.objects o2
cross join sys.objects o3

将您的数据放在集群列存储中不会减少返回的行数。相反,它会压缩存储的数据,以减少 space 在磁盘上的占用。这将意味着为查询移动的数据更少,您将支付更少的存储费用,但您的结果将保持不变。也就是说,您的数据当前驻留在增量存储中,因此您不会看到任何压缩。由于 SQL DW 的架构,我们在幕后将数据分为多个组。这使我们能够更轻松地并行计算和扩展,但也意味着每个组都将拥有自己的 columnstore/deltastore,因此您将需要加载更多行以获得压缩优势。

除了分布结构之外,与 SQL 数据仓库相比,SQL 服务器的阈值也有所不同。对于 DW,阈值是 1,048,576,直到按照@JRJ 描述的那样解决了缺陷。现在 Azure SQL DW 的阈值与 SQL 系列的其他产品一样是 120,400。一旦分布中的行超过此值,您应该会看到行被压缩了。

您可以在此处找到有关加载到列存储的更多信息:https://msdn.microsoft.com/en-US/library/dn935008.aspx

这是服务中的一个缺陷。该修复程序目前正在推出。例如,如果您在 Japan West 尝试此操作,您会发现其行为与您预期的一样。