使用 Sqoop 将数据从 Impala 加载到 Vertica 时出现以下错误。



我正在运行以下命令:



并非每次都引发此错误。我有几次成功的测试加载了超过 200 万行数据。所以我猜可能有一些坏数据在被拒绝的行中包含特殊字符。这很烦人,因为当出现此错误时,mapreduce 作业会回滚并重试。在这种情况下,目标表中将有大量重复数据。

有没有人知道是否有任何可以设置处理特殊字符的sqoop导出参数,或者是否有任何方法可以跳过坏数据,这意味着禁用回滚?谢谢!

最佳答案

这可能不仅仅是特殊字符。例如,如果您尝试将 'abc ' 填充到数字字段中,则该行将被拒绝。即使您收到此错误,我也相信它不会在加载之后并且应该提交所有可以提交的数据(但我会验证)。如果您隔离“丢失”的行,您可能能够找出数据或字段定义的问题。

要查找的常见内容:

  • 将字符类型数据填充到数字字段中(可能是隐式转换,或者仅在值非 NULL 时显示)。
  • NULL 值到 NOT NULL 字段
  • 计数字符和 VARCHAR 八位字节等价。 VARCHAR(x) 表示八位字节,但一个 UTF-8 字符可以有多个八位字节。
  • 与#3 类似,字符串太长而无法放入指定字段。

  • 在驱动程序中,批量插入被替换为 COPY FROM STDIN 语句。您也许可以在 query_requests 中找到该语句,但我不确定它是否会有所帮助。

    Sqoop 并没有真正给你太多机会来进一步调查(据我所知,我检查了通用的 JDBC 加载器)。可以查看 executeBatch() 的返回数组并将其与您的执行批处理联系起来。也许修改通用的 JDBC 加载器?

    希望这可以帮助。

    关于hadoop - [Vertica][VJDBC](100172) 一行或多行被服务器拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33244915/

    10-16 06:01