将json导入clickhouse

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

我用以下语句创建表:

  1. CREATE TABLE event(
  2. date Date,
  3. src UInt8,
  4. channel UInt8,
  5. deviceTypeId UInt8,
  6. projectId UInt64,
  7. shows UInt32,
  8. clicks UInt32,
  9. spent Float64
  10. ) ENGINE = MergeTree(date, (date, src, channel, projectId), 8192);

原始数据如下所示:

  1. { "date":"2016-03-07T10:00:00+0300","src":2,"channel":18,"deviceTypeId ":101, "projectId":2363610,"shows":1232,"clicks":7,"spent":34.72,"location":"Unknown", ...}
  2. ...

使用以下命令加载数据的文件:

  1. 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客户端抛出异常:

  1. 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格式的未知字段的用户选项。
尝试

  1. 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”)。

相关问题