使用col = null分区的SAP HANA分区

时间:2019-05-02 13:07:43

标签: partitioning hana

在SAP HANA 1.0 SPS 12中,我们希望通过ValidationAreaID和VersionValidTo对表进行分区。

到目前为止,这没问题。

但是由于与null的比较应该比时间戳快,所以我想按

进行分区
} technical configuration {
    partition by 
        range (ValidationAreaID) (
            partition value = 1,
            partition value = 2,
            partition value = 3,
            partition others
        ),
        range (VersionValidTo)  (
            partition value = null,
            partition others
        )
    ;

代替

} technical configuration {
    partition by 
        range (ValidationAreaID) (
            partition value = 1,
            partition value = 2,
            partition value = 3,
            partition others
        ),
        range (VersionValidTo)  (
            partition value = '9999-12-31',
            partition others
        )
    ;

但是尝试按空值进行分区会导致错误消息:
Syntax error: unexpected token "null"

1 个答案:

答案 0 :(得分:1)

提供一个封闭的答案: 分区定义子句不允许进行IS NULL检查。 分区需要由一个唯一且可唯一标识的字符串或(无符号)数字或由封闭的值范围指定(请参见here)。

这回答了该部分是否可以为条件IS NULL评估为true的记录创建分区:不是。

答案的第二部分解决了关于IS NULL的检查比对特定值的检查要快的说法。 通常情况并非如此。尽管您可能发现可以比检查该列的整个 main 段更快地完成检查特定列中的NULL条目的数据分布,但这与{{ 1}}条目。 根据任何列(以及表中所有列)中不同值的总体分布,SAP HANA将在该列的主要段中对值ID指针进行排序和压缩。 如果例如列中所有条目的大多数当前为NULL,这很可能导致压缩,从而将所有NULL条目放在最顶部,并使用RLE压缩那些条目。 在这种情况下,对NULL的常规搜索将非常快。 同样,对于该列的其他非常突出的值,压缩可能会发生变化。

据我所知,IS NULL的列存储中唯一的技术差异是它们具有硬编码的固定值ID,因此可以避免查找字典并避免所有列共享NULL个条目的相同值ID。由于字典查找通常不是语句执行的瓶颈,因此可以公平地说“ NULL更快”的想法是不正确的。