[
https://issues.apache.org/jira/browse/PHOENIX-4551?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16528148#comment-16528148
]
William Shen edited comment on PHOENIX-4551 at 6/29/18 7:56 PM:
----------------------------------------------------------------
[~rajeshbabu],
We are running into a similar issue (but not related to auto commit, it happens
with and without autocommit). Here is a reproducible case in 4.13:
{code:java}
CREATE TABLE IF NOT EXISTS test.t (a INTEGER PRIMARY KEY,b UNSIGNED_INT,c
BIGINT);
CREATE INDEX IF NOT EXISTS "i1" ON test.t (c) INCLUDE (b);
CREATE INDEX IF NOT EXISTS "i2" ON test.t (c) INCLUDE (a);
delete from test.t where b > 25;{code}
produces
{code:java}
Error: ERROR 514 (42892): A duplicate column name was detected in the object
definition or ALTER TABLE/VIEW statement. columnName=TEST.TEST.T.C
(state=42892,code=514)
org.apache.phoenix.schema.ColumnAlreadyExistsException: ERROR 514 (42892): A
duplicate column name was detected in the object definition or ALTER TABLE/VIEW
statement. columnName=TEST.TEST.T.C
at org.apache.phoenix.schema.PTableImpl.init(PTableImpl.java:529)
at org.apache.phoenix.schema.PTableImpl.<init>(PTableImpl.java:421)
at org.apache.phoenix.schema.PTableImpl.makePTable(PTableImpl.java:305)
at org.apache.phoenix.compile.DeleteCompiler.compile(DeleteCompiler.java:730)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:771)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:759)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:387)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:377)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:376)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:364)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1738)
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){code}
And by having just one instead of the indices, the issue goes away:
{code:java}
drop index "i2" on test.t;
No rows affected (5.579 seconds)
delete from test.t where b > 25;
No rows affected (0.011 seconds){code}
Do you think this is the same issue resolved in 4.14, or should I file a
separate bug against 4.13?
was (Author: willshen):
[~rajeshbabu],
We are running into a similar issue (but not related to auto commit, it happens
with and without autocommit). Here is a reproducible case in 4.13:
{code:java}
CREATE TABLE IF NOT EXISTS test.t (a INTEGER PRIMARY KEY,b UNSIGNED_INT,c
BIGINT);
CREATE INDEX IF NOT EXISTS "i1" ON test.t (c) INCLUDE (b);
CREATE INDEX IF NOT EXISTS "i2" ON test.t (c) INCLUDE (a);
delete from test.t where b > 25;{code}
produces
{code:java}
Error: ERROR 514 (42892): A duplicate column name was detected in the object
definition or ALTER TABLE/VIEW statement. columnName=TEST.TEST.T.C
(state=42892,code=514)
org.apache.phoenix.schema.ColumnAlreadyExistsException: ERROR 514 (42892): A
duplicate column name was detected in the object definition or ALTER TABLE/VIEW
statement. columnName=TEST.TEST.T.C
at org.apache.phoenix.schema.PTableImpl.init(PTableImpl.java:529)
at org.apache.phoenix.schema.PTableImpl.<init>(PTableImpl.java:421)
at org.apache.phoenix.schema.PTableImpl.makePTable(PTableImpl.java:305)
at org.apache.phoenix.compile.DeleteCompiler.compile(DeleteCompiler.java:730)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:771)
at
org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:759)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:387)
at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:377)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:376)
at
org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:364)
at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1738)
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){code}
And by having just one instead of the indices, the issue goes away:
{code:java}
0: jdbc:phoenix:labs-boba-namenode-lv-101,lab> drop index "i2" on test.t;
No rows affected (5.579 seconds)
0: jdbc:phoenix:labs-boba-namenode-lv-101,lab> delete from test.t where b > 25;
No rows affected (0.011 seconds){code}
Do you think this is the same issue resolved in 4.14, or should I file a
separate bug against 4.13?
> Possible ColumnAlreadyExistsException is thrown from delete when autocommit
> off
> -------------------------------------------------------------------------------
>
> Key: PHOENIX-4551
> URL: https://issues.apache.org/jira/browse/PHOENIX-4551
> Project: Phoenix
> Issue Type: Bug
> Reporter: Romil Choksi
> Assignee: Rajeshbabu Chintaguntla
> Priority: Major
> Fix For: 5.0.0-alpha, 4.14.0
>
> Attachments: PHOENIX-4551.patch, PHOENIX-4551_v2.patch,
> PHOENIX-4551_v3.patch
>
>
> Here are the simple steps to reproduce it.
> {noformat}
> 0: jdbc:phoenix:localhost> CREATE TABLE IF NOT EXISTS A (a INTEGER PRIMARY
> KEY,b UNSIGNED_INT,c BIGINT);
> No rows affected (2.3 seconds)
> 0: jdbc:phoenix:localhost> CREATE INDEX idx_global ON A (c);
> No rows affected (7.282 seconds)
> 0: jdbc:phoenix:localhost> CREATE LOCAL INDEX idx_local ON A (c);
> No rows affected (11.322 seconds)
> 0: jdbc:phoenix:localhost> !autocommit off
> *Autocommit status: false*
> 0: jdbc:phoenix:localhost> delete from A where a > 5;
> *Error: ERROR 514 (42892): A duplicate column name was detected in the object
> definition or ALTER TABLE/VIEW statement. columnName=A.C
> (state=42892,code=514)*
> org.apache.phoenix.schema.ColumnAlreadyExistsException: ERROR 514 (42892): A
> duplicate column name was detected in the object definition or ALTER
> TABLE/VIEW statement. columnName=A.C
> at org.apache.phoenix.schema.PTableImpl.init(PTableImpl.java:529)
> at org.apache.phoenix.schema.PTableImpl.<init>(PTableImpl.java:421)
> at org.apache.phoenix.schema.PTableImpl.makePTable(PTableImpl.java:305)
> at org.apache.phoenix.compile.DeleteCompiler.compile(DeleteCompiler.java:730)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:771)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableDeleteStatement.compilePlan(PhoenixStatement.java:759)
> at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:387)
> at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:377)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:376)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:364)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1738)
> 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)
> 0: jdbc:phoenix:localhost>
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)