Apache Drill是否支持多个字符作为分隔符?

时间:2019-03-20 11:53:37

标签: apache-drill

我有一个文件,其中有双管道而不是逗号或单管道作为定界符。

07||1||60||51111288||470||12647767||-1||0||-1||6||||77039144||-1||||||||||||||||||||||61807||||-1||1899-12-30 00:00:00.000||0||39||2019-03-07 17:15:56.000||1899-12-30 00:00:00.000||2019-03-07 17:23:35.000||0||0||0||-1578673||107||-1||-1||1||1||-1||-1||3||.000000||.000000||.000000||-1||.000000||-1||.000000||-1||.000000||.000000||2019-03-07 17:23:35.000||-1||-1||-1||-1||-1||-1||||||||-1||||||-1||||||1978955,2

想知道如何在Apache Drill中配置存储,以便它可以处理双管道。

"formats": {
    "csv": {
      "type": "text",
      "extensions": [
        "csv",
        "CSV"
      ],
      "delimiter": "||"
    }

如果我使用双管道,则会引发错误:Please retry: error (invalid JSON mapping)

根据本文https://drill.apache.org/blog/2015/12/14/drill-1.4-released/linedelimiter可以具有双重字符,但delimiter则没有提及

1 个答案:

答案 0 :(得分:1)

当前delimiter setting使用Java byte类型。这就是为什么无法在其中存储几个字符的原因,您将收到Jackson序列化错误(启用调试级别日志以从日志中查找此错误)。

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `char` out of VALUE_STRING token
 at [Source: (StringReader); line: 25, column: 20] (through reference chain: org.apache.drill.exec.store.dfs.FileSystemConfig["formats"]->java.util.LinkedHashMap["psv"]->org.apache.drill.exec.store.easy.text.TextFormatPlugin$TextFormatConfig["delimiter"])
    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) ~[jackson-databind-2.9.5.jar:2.9.5]
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342) ~[jackson-databind-2.9.5.jar:2.9.5]
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1138) ~[jackson-databind-2.9.5.jar:2.9.5]
...

可能可以更好地记录下来。但是对于我来说,它应该加以改进,因此随时可以为此问题创建一张Jira票证。