ClickHouse-hive推数ck报错expected ‘\t‘ before等

一、背景

  • 早上往ck推数的任务突然报错,处理了好久,记录一下
  • 报错信息如下

ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: ckpub53.olap.jd.com, port: 2000; Code: 27. DB::ParsingException: Cannot parse input: expected '\t' before: ' \t未知\t1\t搜索\tapp\t50\t1\t50\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t': 

Row 3516:
xxxxx
ERROR: garbage after Int32: " <TAB>未知<TAB>1"
: While executing ParallelParsingBlockInputFormat: (at row 40780)
. (CANNOT_PARSE_INPUT_ASSERTION_FAILED) (version 22.3.2.1)
  at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.getException(ClickHouseExceptionSpecifier.java:91)
  at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:55)
  at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:28)
  at ru.yandex.clickhouse.ClickHouseStatementImpl.checkForErrorAndThrow(ClickHouseStatementImpl.java:875)

二、原因

  • 向ClickHouse中插入数值型数据时,如果数据为空,则会导致列错乱

  • 排查过程:

    • 刚开始我认为是Row 3516:xxxxx 的问题,从hive查询之后发现该条数据没有问题(误导人啊😂)
    • 后来一系列排查,排查到了是hive表脏数据+类型强转的问题(hive和ck表结构不一致。。。上游流量迭代json等一系列原因,移交任务害死人啊。。。😂
      • `1. hive和ck字段类型不匹配 (hive 字段类型 string 、ck 字段类型 int)
      • 2.int类型跟空格导致强转为null,而往CK插入数值型数据时,如果数据为空,则会导致列错乱

三、解决

  • 处理CK当中int 类型字段 的 null值
    • 我的场景下一方面快速修复应用层保障履约,一方面处理底层流量解析剔除脏数据
  • 之后需注意
    • ck建表
      • 1.保持字段类型一致
      • 2.如果ck是int类型,需要处理null值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值