我无法在phoenix中运行命令
CREATE VIEW "t1" ( pk VARCHAR PRIMARY KEY, "f1".val VARCHAR )
之后我执行了in hbase命令
create 't1', {NAME => 'f1', VERSIONS => 5}
我收到以下错误
org.apache.phoenix.schema.ReadOnlyTableException: ERROR 505 (42000): Table is read only.
at org.apache.phoenix.query.ConnectionQueryServicesImpl.ensureTableCreated(ConnectionQueryServicesImpl.java:815)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:1174)
at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1974)
at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:770)
at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:186)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:305)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:297)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:295)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1255)
at sqlline.Commands.execute(Commands.java:822)
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)
这些命令显示在https://phoenix.apache.org/faq.html下
部分我如何将Phoenix表映射到现有的HBase表?
答案 0 :(得分:1)
您想将phoenix表映射到现有的HBase表。但是在问题描述中,您首先创建了Phoenix视图,之后您尝试创建具有相同名称的HBase表。因此,您将获得org.apache.phoenix.schema.ReadOnlyTableException: ERROR 505 (42000): Table is read only.
例外。
而不是首先创建HBase表,然后创建映射到现有HBase表的Phoenix视图。
实施例: 创建HBase表:
create 't1', {NAME => 'f1', VERSIONS => 5}
创建指向同一HBase表的phoenix视图:
CREATE VIEW "t1" ( pk VARCHAR PRIMARY KEY, "f1".val VARCHAR )
“pk”列声明您的行键是VARCHAR(即字符串),而“f1”.val列声明您的HBase表将包含具有列族和列限定符“f1”的KeyValues:VAL并且他们的价值将是VARCHA
答案 1 :(得分:0)
您需要为现有的HBase表创建 VIEW
,而不是创建 TABLE
,而不是如下所示:
CREATE TABLE "t1" ( ROWKEY VARCHAR PRIMARY KEY, "f1"."val" VARCHAR )
有关详细信息,请查看this