splitByChar Nullable - PullRequest
       17

splitByChar Nullable

0 голосов
/ 25 марта 2020

У меня следующий запрос:

SELECT DISTINCT col_name, toTypeName(col_name)
  FROM remote('host_name', 'db.table', 'user', 'password')

Результат - 6 записей (WITHOUT NULL). Пример:

some_prefix-1, Nullable(String)
...
some_prefix-6, Nullable(String)

Теперь я пытаюсь splitByChar , но получаю:

Код: 43, e.displayText () = DB :: Исключение: вложенный тип Array (String) не может быть внутри типа Nullable (версия 20.1.2.4 (официальная сборка))

Я пытался использовать not null condition и преобразовывать тип, но проблема все еще остается. Вот так:

SELECT DISTINCT toString(col_name) AS col_name_str,
                splitByChar('-', col_name_str)
  FROM remote('host_name', 'db.table', 'user', 'password')
 WHERE col_name IS NOT NULL

Это ожидаемое поведение? Как это исправить?

1 Ответ

1 голос
/ 25 марта 2020

Отсутствие поддержки Nullable в splitByChar (https://github.com/ClickHouse/ClickHouse/issues/6517)

Вы используете неправильное приведение toString

SELECT DISTINCT
    cast(col_name, 'String') AS col_name_str,
    splitByChar('-', col_name_str)
FROM
(
    SELECT cast('aaaaa-vvvv', 'Nullable(String)') AS col_name
)
WHERE isNotNull(col_name)

┌─col_name_str─┬─splitByChar('-', cast(col_name, 'String'))─┐
│ aaaaa-vvvv   │ ['aaaaa','vvvv']                           │
└──────────────┴────────────────────────────────────────────┘

или assumeNotNull

SELECT DISTINCT
    assumeNotNull(col_name) AS col_name_str,
    splitByChar('-', col_name_str)
FROM
(
    SELECT cast('aaaaa-vvvv', 'Nullable(String)') AS col_name
)
WHERE isNotNull(col_name)

┌─col_name_str─┬─splitByChar('-', assumeNotNull(col_name))─┐
│ aaaaa-vvvv   │ ['aaaaa','vvvv']                          │
└──────────────┴───────────────────────────────────────────┘
...