ClickHouse 无法解析从 Kafka 提交的 json 消息的时间戳
ClickHouse cannot parse json message's timestamp filed from Kafka
我在 ClickHouse 中将 table 配置为从 Kafka 读取 JSON 格式的消息,但是当我尝试读取 table:[=13 时,解析时间字段出现错误=]
SELECT *
FROM mydb.kafka
错误 TCPHandler:代码:27。DB::Exception:无法解析输入:预期“”之前:“.753844305Z”}':(读取键 created_at 的值时):同时解析 Kafka 消息(主题:mytopic,分区:0,偏移量:0)':执行 SourceFromInputStream 时。 (CANNOT_PARSE_INPUT_ASSERTION_FAILED)
JSON 消息有这个字段 "created_at":"2021-10-17T14:33:19.753844305Z"
我是如何创建的table:
CREATE TABLE IF NOT EXISTS mydb.kafka‖(‖id bigint,‖name String,‖created_at DateTime‖) ENGINE = Kafka()‖SETTINGS‖kafka_broker_list = 'localhost:9094' ,‖ kafka_topic_list = 'mytopic',‖ kafka_group_name = 'sample_group',‖ kafka_format = 'JSONEachRow';
有两种类型:
- 日期时间
2021-10-17T14:33:19
(32 位)
- DateTime64(n)
2021-10-17T14:33:19.753
(n=3)(64 位)
但无论如何,您必须启用 date_time_input_format=best_effort
,因为 DateTime 的默认格式是 2021-10-17 14:33:19
$ cat /etc/clickhouse-server/users.d/date_time_input_format.xml
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<date_time_input_format>best_effort</date_time_input_format>
</default>
</profiles>
</yandex>
我在 ClickHouse 中将 table 配置为从 Kafka 读取 JSON 格式的消息,但是当我尝试读取 table:[=13 时,解析时间字段出现错误=]
SELECT *
FROM mydb.kafka
错误 TCPHandler:代码:27。DB::Exception:无法解析输入:预期“”之前:“.753844305Z”}':(读取键 created_at 的值时):同时解析 Kafka 消息(主题:mytopic,分区:0,偏移量:0)':执行 SourceFromInputStream 时。 (CANNOT_PARSE_INPUT_ASSERTION_FAILED)
JSON 消息有这个字段 "created_at":"2021-10-17T14:33:19.753844305Z"
我是如何创建的table:
CREATE TABLE IF NOT EXISTS mydb.kafka‖(‖id bigint,‖name String,‖created_at DateTime‖) ENGINE = Kafka()‖SETTINGS‖kafka_broker_list = 'localhost:9094' ,‖ kafka_topic_list = 'mytopic',‖ kafka_group_name = 'sample_group',‖ kafka_format = 'JSONEachRow';
有两种类型:
- 日期时间
2021-10-17T14:33:19
(32 位) - DateTime64(n)
2021-10-17T14:33:19.753
(n=3)(64 位)
但无论如何,您必须启用 date_time_input_format=best_effort
,因为 DateTime 的默认格式是 2021-10-17 14:33:19
$ cat /etc/clickhouse-server/users.d/date_time_input_format.xml
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<date_time_input_format>best_effort</date_time_input_format>
</default>
</profiles>
</yandex>