我尝试使用以下查询连接到Hive:
"tasks": [
{
"type": "typescript",
"tsconfig": "tsconfig.json",
"problemMatcher": [
"$tsc"
],
"options": {
"shell": {
"executable": "cmd.exe",
"args": [
"/d", "/c"
]
}
}
}
]
查询成功运行。
再添加一个过滤器,即select * from some-table where yyyy = 2018 and mm = 01 and dd = 05 runs
生成以下错误:
java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hive.serde2.io.DateWritable无法转换为 org.apache.hadoop.io.Text
答案 0 :(得分:0)
该错误是由Serializer-Deserializers生成的。
根本原因:创建表时,您可能未定义 STORED AS
标记。尝试使用 desc <table name>
描述您的表格,您可能会看到类似这样的内容:
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL |
| InputFormat: | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat | NULL |
| OutputFormat: | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat | NULL |
这不是很好的做法。默认情况下,您的SerDes使用惰性评估。使用 STORED AS ORC
创建一个表,然后尝试描述您的表,但这次的结果可能有所不同:
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.hadoop.hive.ql.io.orc.OrcSerde | NULL |
| InputFormat: | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat | NULL |
| OutputFormat: | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat | NULL |
尝试一下,您也许可以解决问题。