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/