hadoop - Apache Phoenix 非法数据。预期长度至少为 4 个字节,但有 2 个

标签 hadoop hive apache-phoenix

我有一个像下面这样创建的 Phoenix 表
Phoenix Table

Phoenix 顶部的 Hive 外部表如下所示

create External table TABLE_NAME (
rowKey STRING,
unique_id     string,
USERNAME      string,
DAY           string,
MONTH         string,
YEAR          string,
APPID         INT)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES
("hbase.columns.mapping" = "
details:unique_id,
details:USERNAME,
details:DAY,
details:MONTH,
details:YEAR,
details:APPID")
TBLPROPERTIES
("hbase.table.name"="HBAE_TABLE_NAME");

当我将数据加载到 Hive 外部表并尝试从 Phoenix 表访问 APPID(整数列)时,出现以下错误。 问题仅与 Integer 列有关,剩下的就是我可以正常访问的所有内容。当我从配置单元表访问时,数据看起来不错。

java.lang.RuntimeException: java.sql.SQLException: ERROR 201 (22000): Illegal data. Expected length of at least 4 bytes, but had 2
        at sqlline.IncrementalRows.hasNext(IncrementalRows.java:73)
        at sqlline.TableOutputFormat.print(TableOutputFormat.java:33)
        at sqlline.SqlLine.print(SqlLine.java:1653)
        at sqlline.Commands.execute(Commands.java:833)
        at sqlline.Commands.sql(Commands.java:732)
        at sqlline.SqlLine.dispatch(SqlLine.java:808)
        at sqlline.SqlLine.begin(SqlLine.java:681)
        at sqlline.SqlLine.start(SqlLine.java:398)
        at sqlline.SqlLine.main(SqlLine.java:292)

非常感谢任何帮助!

最佳答案

将您的每个配置单元表列设为 string,并在 phoenix View 中将每个列设为 varchar。问题将得到解决。 Phoenix 支持 Integer、Date 等,但 bug 仍然存在,所以如果你想使用 phoenix,请将所有内容转换为 string 和 varchar。它适用于 Phoenix 4.4.0

关于hadoop - Apache Phoenix 非法数据。预期长度至少为 4 个字节,但有 2 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169258/

相关文章:

sql - HIVE从子查询创建表

hadoop - 尝试配置 Apache Phoenix 时 HBase 区域服务器出现故障

java - Hadoop 作业返回异常 "classNotFound"

hadoop - Mapreduce Vs Spark Vs Storm Vs Drill——对于小文件

hadoop - 如何在Pig脚本中注册类路径文件?

hadoop - 如何从 hive 0.9.0 访问 cassandra 2.0.3

hadoop - hbase-indexer solr numFound 与 hbase 表行大小不同

mysql - 在 Phoenix 中使用包含 IFNULL 和序列号列的 sql 查询时出错

java - MapWritable 的 MapWritable 上的迭代器

hadoop - 我们如何在 Pig 中将多行组合成一行