[
https://issues.jboss.org/browse/TEIID-3621?page=com.atlassian.jira.plugin...
]
Kylin Soong commented on TEIID-3621:
------------------------------------
Yes, the HBase translator needs to know what is the PK in the
Phoenix's table so it can properly perform insert and update - Phoenix driver requires
to include a PK in UPSERT
This is what we did previously, If no primary key defined
in VDB map to Phoenix table's primary key, AssertionError throw as [1].
No, the HBase translator cannot assume that PK in the VDB has been
defined on very same column as in the Phoenix. We should do it more defensively and
"ask" the user to explicitly define what is the PK in the source table.
Phoenix is a SQL layer on top of HBase,
if create table map to HBase table([2] is a example), we can know PK in the processing of
mapping.
If we create a new table, it's easy to know which column is PK.
[1]
https://github.com/teiid/teiid/blob/master/connectors/translator-hbase/sr...
[2]
https://github.com/teiid/teiid-quickstarts/tree/master/hbase-as-a-datasource
HBase translator - UPDATE statement requires primary key
--------------------------------------------------------
Key: TEIID-3621
URL:
https://issues.jboss.org/browse/TEIID-3621
Project: Teiid
Issue Type: Bug
Affects Versions: 8.7.1.6_2
Environment: Hbase: 1.1.1
Phoenix: 4.5.0-HBase-1.1
Reporter: Juraj DurĂ¡ni
Assignee: Kylin Soong
The HBase translator requires table to have a primary key defined. Is the PK really
needed? If the table has no PK defined, then all columns are PK. E.g. query *UPDATE
hbase.SmallA SET StringNum = '555' WHERE hbase.SmallA.StringNum IS NULL* is
translated as *UPSERT INTO smalla (stringnum, intkey) SELECT '555', smalla.intkey
FROM smalla WHERE smalla.stringnum IS NULL* (intkey is PK). Teiid can simply add all
columns (except those defined in 'SET').
Yes, I know that HBase requires the PK to be defined, but what happen if a user decide to
change PK in VDB [1]? It could be a problem whether PK is in VDB defined or not.
I suggest to add a hbase-translator-specific execution property which define PK in the
source table and remove AssertionError [2].
[1]
*HBase table:* create table mytable(id integer primary key, nickname varchar(1))
*Teiid table:* create table mytable(id integer, username varchar(1) primary key)
Both, id and username, are valid PK (artificial/natural).
[2]
https://github.com/teiid/teiid/blob/master/connectors/translator-hbase/sr...
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)