我用以下语句创建表:
CREATE TABLE event(
date Date,
src UInt8,
channel UInt8,
deviceTypeId UInt8,
projectId UInt64,
shows UInt32,
clicks UInt32,
spent Float64
) ENGINE = MergeTree(date, (date, src, channel, projectId), 8192);
原始数据如下所示:
{ "date":"2016-03-07T10:00:00+0300","src":2,"channel":18,"deviceTypeId ":101, "projectId":2363610,"shows":1232,"clicks":7,"spent":34.72,"location":"Unknown", ...}
...
使用以下命令加载数据的文件:
cat *.data|sed 's/T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]+0300//'| clickhouse-client --query="INSERT INTO event FORMAT JSONEachRow"
clickhouse客户端抛出异常:
Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: location: (at row 1)
是否可以跳过json对象中未在表描述中显示的字段?
2条答案
按热度按时间rryofs0p1#
最新的clickhouse版本(v1.1.54023)支持
input_format_skip_unknown_fields
允许跳过jsoneachrow和tskv格式的未知字段的用户选项。尝试
请参阅文档中的更多详细信息。
66bbxpm52#
目前,无法跳过未知字段。
您可以创建带有附加字段的临时表,
INSERT
数据,然后做INSERT
SELECT
进入决赛。临时表可能有日志引擎和INSERT
进入“暂存”表将比进入最终表更快MergeTree
table。在代码中添加跳过未知字段的可能性相对容易(比如设置“format\u skip\u unknown\u fields”)。