Так и должно быть?
CREATE TABLE example (
key Int32,
value Nullable(Int32)
)
ENGINE = MergeTree()
ORDER BY key;
INSERT INTO example VALUES (1, 100), (2, 200), (3, NULL);
<yandex>
<dictionary>
<name>example_dict</name>
<source>
<clickhouse>
<host>localhost</host>
<user>default</user>
<password></password>
<db>default</db>
<port>9000</port>
<table>example</table>
<where></where>
</clickhouse>
</source>
<layout>
<flat/>
</layout>
<structure>
<id>
<name>key</name>
</id>
<attribute>
<name>key</name>
<type>Int32</type>
<null_value>0</null_value>
</attribute>
<attribute>
<name>value</name>
<type>Int32</type>
<null_value>0</null_value>
</attribute>
</structure>
<lifetime>15</lifetime>
</dictionary>
</yandex>
SYSTEM RELOAD DICTIONARY 'example_dict';
Code: 349, e.displayText() = DB::Exception: Cannot convert NULL value to non-Nullable type: while converting source column value to destination column value (version 20.4.2.9 (official build))
кмк неправильное описание словаря. Почему тут есть attribute> <name>key</name> ? Там уже был <id> <name>key</name>
<attribute> <name>value</name> <type>Int32</type> <null_value>0</null_value> <expression>assumeNotNull(value)</expression> </attribute> у меня заработало SELECT * FROM dict.example_dict ┌─key─┬─value─┐ │ 1 │ 100 │ │ 2 │ 200 │ │ 3 │ 0 │ └─────┴───────┘
Обсуждают сегодня