Apache Phoenix Upsert Into Table Select * from View
Apache Phoenix Upsert Into Table Select * from View
我已经从 HBase 创建了一个 Phoenix View table,然后从它创建了一个 Phoenix 视图,最后尝试插入到一个新的 :
create view "personal" (k VARCHAR primary key, "personal_data"."name" VARCHAR);
select * from "personal";
+--------+-------------------------------+
| K | name |
+--------+-------------------------------+
| 0 | Darrell Clark |
| 1 | Elizabeth Baker |
| 10 | Brad Alexander |
| 100 | Douglas Morris |
| 1000 | Joel Boyd |
| 10000 | Christine Wood |
| 10001 | Thomas Wilson |
| 10002 | Laura Salinas |
| 10003 | Audrey Norris |
| 10004 | Kristen Klein |
| 10005 | Vanessa Brooks |
| 10006 | Mary Flynn |
| 10007 | Margaret Mullen |
然后我创建一个凤凰table:
create table if not exists personal_table (name VARCHAR, k VARCHAR CONSTRAINT my_pk PRIMARY KEY (name, k));
然后我尝试更新插入:
UPSERT INTO personal_table SELECT * FROM personal;
Error: ERROR 1012 (42M03): Table undefined. tableName=PERSONAL (state=42M03,code=1012)
org.apache.phoenix.schema.TableNotFoundException: ERROR 1012 (42M03): Table undefined. tableName=PERSONAL
at org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:582)
at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:396)
at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:228)
at org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:504)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:784)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:770)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:401)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:391)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:390)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1825)
at sqlline.Commands.execute(Commands.java:822)
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)
可能是什么问题?是否可以从视图中 Upsert into table select *?谢谢!
Is it possible to Upsert into table select * from view?
不,事实并非如此。 upsert 语句中缺少引号导致了这种情况。 "与 CREATE TABLE 一样,table、列族和列名都是大写的,除非它们被双引号括起来
UPSERT INTO personal_table SELECT * FROM personal;
应该是->
UPSERT INTO personal_table SELECT * FROM "personal";
我在本地试过你的案例(修复)。这是我在 HBase Shell:
上执行的
// create personel table on hbase
create 'personel', {NAME => 'personal_data', VERSIONS => 5}
put 'personel','1','personal_data:name','quaresma'
put 'personel','2','personal_data:name','cenk'
put 'personel','3','personal_data:name','fabri'
put 'personel','4','personal_data:name','pepe'
put 'personel','5','personal_data:name','talisca'
scan 'personel'
然后我切换到 phoenix-sqlline 并执行以下命令:
CREATE VIEW "personel" (k VARCHAR PRIMARY KEY, "personal_data"."name" VARCHAR);
SELECT * FROM "personel";
create table if not exists personal_table (name VARCHAR, k VARCHAR CONSTRAINT my_pk PRIMARY KEY (name, k));
UPSERT INTO personal_table SELECT * FROM "personel";
select * from personal_table;
我已经从 HBase 创建了一个 Phoenix View table,然后从它创建了一个 Phoenix 视图,最后尝试插入到一个新的 :
create view "personal" (k VARCHAR primary key, "personal_data"."name" VARCHAR);
select * from "personal";
+--------+-------------------------------+
| K | name |
+--------+-------------------------------+
| 0 | Darrell Clark |
| 1 | Elizabeth Baker |
| 10 | Brad Alexander |
| 100 | Douglas Morris |
| 1000 | Joel Boyd |
| 10000 | Christine Wood |
| 10001 | Thomas Wilson |
| 10002 | Laura Salinas |
| 10003 | Audrey Norris |
| 10004 | Kristen Klein |
| 10005 | Vanessa Brooks |
| 10006 | Mary Flynn |
| 10007 | Margaret Mullen |
然后我创建一个凤凰table:
create table if not exists personal_table (name VARCHAR, k VARCHAR CONSTRAINT my_pk PRIMARY KEY (name, k));
然后我尝试更新插入:
UPSERT INTO personal_table SELECT * FROM personal;
Error: ERROR 1012 (42M03): Table undefined. tableName=PERSONAL (state=42M03,code=1012)
org.apache.phoenix.schema.TableNotFoundException: ERROR 1012 (42M03): Table undefined. tableName=PERSONAL
at org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:582)
at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:396)
at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:228)
at org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:504)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:784)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:770)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:401)
at org.apache.phoenix.jdbc.PhoenixStatement.call(PhoenixStatement.java:391)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:390)
at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1825)
at sqlline.Commands.execute(Commands.java:822)
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)
可能是什么问题?是否可以从视图中 Upsert into table select *?谢谢!
Is it possible to Upsert into table select * from view?
不,事实并非如此。 upsert 语句中缺少引号导致了这种情况。 "与 CREATE TABLE 一样,table、列族和列名都是大写的,除非它们被双引号括起来
UPSERT INTO personal_table SELECT * FROM personal;
应该是->
UPSERT INTO personal_table SELECT * FROM "personal";
我在本地试过你的案例(修复)。这是我在 HBase Shell:
上执行的// create personel table on hbase
create 'personel', {NAME => 'personal_data', VERSIONS => 5}
put 'personel','1','personal_data:name','quaresma'
put 'personel','2','personal_data:name','cenk'
put 'personel','3','personal_data:name','fabri'
put 'personel','4','personal_data:name','pepe'
put 'personel','5','personal_data:name','talisca'
scan 'personel'
然后我切换到 phoenix-sqlline 并执行以下命令:
CREATE VIEW "personel" (k VARCHAR PRIMARY KEY, "personal_data"."name" VARCHAR);
SELECT * FROM "personel";
create table if not exists personal_table (name VARCHAR, k VARCHAR CONSTRAINT my_pk PRIMARY KEY (name, k));
UPSERT INTO personal_table SELECT * FROM "personel";
select * from personal_table;