Разделение SAP HANA с col = пустым разделом - PullRequest
0 голосов
/ 02 мая 2019

В SAP HANA 1.0 SPS 12 мы хотим разделить таблицу по ValidationAreaID и VersionValidTo.

Пока это не проблема.

Но так как сравнение с нулем должно бытьбыстрее, чем отметка времени, которую я хочу разделить на

} 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 Ответ

1 голос
/ 15 мая 2019

Чтобы предоставить закрываемый ответ: Предложения определения раздела не допускают проверку IS NULL. Раздел должен быть либо задан одной отдельной и однозначно идентифицируемой строкой, либо (без знака) цифрой, либо закрытым диапазоном значений (см. здесь ).

Это отвечает на вопрос, возможно ли создать раздел для записей, где условие IS NULL оценено как истинное: это не так.

Вторая часть ответа касается утверждения, что проверка для IS NULL выполняется быстрее, чем проверка для определенного значения. Это не совсем так. Хотя вы можете найти распределения данных, для которых проверка NULL записей в определенном столбце может быть выполнена быстрее, чем сканирование всего основного сегмента этого столбца, это не является чем-то особенным для записи NULL. В зависимости от общего распределения отдельных значений в любом столбце (и во всех столбцах таблицы) SAP HANA сортирует и сжимает указатели идентификаторов значений в главном сегменте столбца. Например, если большинство всех записей в столбце в настоящее время NULL, что вполне может привести к сжатию, которое помещает все записи NULL в самый верх и сжимает записи с RLE. В этом случае общий поиск IS NULL будет очень быстрым. Аналогично, сжатие может измениться для других очень заметных значений этого столбца.

Единственное техническое различие в хранилище столбцов для NULL s, о котором я знаю, заключается в том, что они имеют жестко запрограммированный и фиксированный идентификатор значения, так что поиск в словаре можно избежать, и все столбцы разделяют тот же идентификатор значения для NULL записей. Поскольку поиск по словарю обычно не является узким местом в выполнении операторов, можно сказать, что идея «NULL is fast» неверна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...