我使用的是hbase 2.0.2版和phoenix 5.0.0版。我在上面有一个hbase表,我们使用下面的步骤创建了phoenix视图
hbase(main):007:0> create 'phownix_test','details'
hbase(main):008:0> put 'phownix_test','1','details:MAC','1234567'
Took 1.5056 seconds
hbase(main):009:0> put 'phownix_test','1','details:deviceName','RAINDEVICE'
Took 0.0101 seconds
hbase(main):010:0> put 'phownix_test','1','details:CO2','234.543'
Took 0.0079 seconds
hbase(main):011:0> put 'phownix_test','1','details:latitude','9876543'
Took 0.0084 seconds
hbase(main):012:0> scan 'phownix_test'
ROW COLUMN+CELL
1 column=details:CO2, timestamp=1609744038606, value=234.543
1 column=details:MAC, timestamp=1609744024895, value=1234567
1 column=details:deviceName, timestamp=1609744031974, value=RAINDEVICE
1 column=details:latitude, timestamp=1609744051328, value=9876543
然后我在hbase表的顶部创建了一个phoenix视图。
create view "phownix_test"("ID" VARCHAR primary key,"details"."MAC" UNSIGNED_INT,"details"."CO2" UNSIGNED_FLOAT,"details"."deviceName" VARCHAR,"details"."latitude" UNSIGNED_LONG);
从Phoenix城视图选择数据时,我得到以下错误。
0: jdbc:phoenix:> select * from "phownix_test";
Error: ERROR 201 (22000): Illegal data. Expected length of at least 51 bytes, but had 23 (state=22000,code=201)
java.sql.SQLException: ERROR 201 (22000): Illegal data. Expected length of at least 51 bytes, but had 23
at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:503)
at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150)
at org.apache.phoenix.schema.KeyValueSchema.next(KeyValueSchema.java:214)
at org.apache.phoenix.expression.ProjectedColumnExpression.evaluate(ProjectedColumnExpression.java:116)
at org.apache.phoenix.compile.ExpressionProjector.getValue(ExpressionProjector.java:69)
at org.apache.phoenix.jdbc.PhoenixResultSet.getString(PhoenixResultSet.java:635)
at sqlline.Rows$Row.<init>(Rows.java:183)
at sqlline.BufferedRows.<init>(BufferedRows.java:38)
at sqlline.SqlLine.print(SqlLine.java:1660)
at sqlline.Commands.execute(Commands.java:833)
at sqlline.Commands.sql(Commands.java:732)
at sqlline.SqlLine.dispatch(SqlLine.java:813)
at sqlline.SqlLine.begin(SqlLine.java:686)
at sqlline.SqlLine.start(SqlLine.java:398)
at sqlline.SqlLine.main(SqlLine.java:291)
2条答案
按热度按时间ffx8fchx1#
如果要将phoenix视图添加到现有hbase表中,则必须确保表中存储的值按phoenix预期的方式编码为字节。因为您是从hbase shell而不是通过phoenix将数据写入表中,所以这种情况可能不会发生(错误消息表明情况就是这样)。
如果是新表,不要使用hbase shell,而是使用phoenix sql命令来创建表。这样一切都将按照Phoenix城的预期进行配置。此后,只使用phoenix与数据交互(写入、查询、创建视图等),以避免与不同编码等相关的问题。
jm81lzqq2#
在我们插入hbase的那一刻,我们必须以二进制格式对数据进行编码。然后我们可以相应地用所需的数据类型创建phoenix视图。它对我有用