将json导入clickhouse

uqxowvwt  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(988)

我用以下语句创建表:

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对象中未在表描述中显示的字段?

rryofs0p

rryofs0p1#

最新的clickhouse版本(v1.1.54023)支持 input_format_skip_unknown_fields 允许跳过jsoneachrow和tskv格式的未知字段的用户选项。
尝试

clickhouse-client -n --query="SET input_format_skip_unknown_fields=1; INSERT INTO event FORMAT JSONEachRow;"

请参阅文档中的更多详细信息。

66bbxpm5

66bbxpm52#

目前,无法跳过未知字段。
您可以创建带有附加字段的临时表, INSERT 数据,然后做
INSERT SELECT 进入决赛。临时表可能有日志引擎和 INSERT 进入“暂存”表将比进入最终表更快 MergeTree table。
在代码中添加跳过未知字段的可能性相对容易(比如设置“format\u skip\u unknown\u fields”)。

相关问题