[JBoss JIRA] (TEIID-3623) HBase translator - boolean and biginteger values are not translated correctly
by Steven Hawkins (JIRA)
[ https://issues.jboss.org/browse/TEIID-3623?page=com.atlassian.jira.plugin... ]
Steven Hawkins resolved TEIID-3623.
-----------------------------------
Fix Version/s: 8.12
Resolution: Done
Updated the literal formats for bigdecimal and boolean. Note that the biginteger type should not be used in modeling, just the bigdecimal type.
> HBase translator - boolean and biginteger values are not translated correctly
> -----------------------------------------------------------------------------
>
> Key: TEIID-3623
> URL: https://issues.jboss.org/browse/TEIID-3623
> 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: Steven Hawkins
> Fix For: 8.12
>
> Attachments: insert_biginteger.log, inser_boolean.log
>
>
> *1. Boolean values:* The Teiid translates the value true/false as 1/0, but HBase does not support integer representation of boolean values [1].
> *2. BigInteger values ( <= -2):* Teiid's bigInteger data type is wider than HBase's bigint (as wide as long) type, so it make sense to define column in HBase as e.g. _decimal(30,0)_ and map it to Teiid's biginteger type.
> From Teiid's point of view: There is no problem if inserted value is greater than or equal to -1. But if the value is less than -1, then a ClassCastException is thrown [2]. Phoenix driver require something like "UPSERT INTO smalla (intkey, bigintegervalue) VALUES (1, -10 *.0*)"
> [1]
> *Query:* insert into hbase.smalla (intkey, booleanvalue) values (55, true)
> *Column definition:*
> - source: booleanvalue boolean
> - VDB: BooleanValue boolean OPTIONS (nameinsource 'booleanvalue', NATIVE_TYPE 'boolean')
> *Stack trace:*
> insert_boolean.log
> [2]
> *Query:* insert into hbase.smalla (intkey, bigintegervalue) values (55, -10)
> *Column definition:*
> - source: bigintegervalue decimal(20,0)
> - VDB: BigIntegerValue biginteger OPTIONS (nameinsource 'bigintegervalue', NATIVE_TYPE 'decimal')
> *Stack trace:*
> insert_biginteger.log
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months
[JBoss JIRA] (TEIID-3568) Order By and Limit are not getting pushed to the database, when Union and join are used together.
by Steven Hawkins (JIRA)
[ https://issues.jboss.org/browse/TEIID-3568?page=com.atlassian.jira.plugin... ]
Steven Hawkins commented on TEIID-3568:
---------------------------------------
The updated changes will be in 8.12 Beta1.
> Order By and Limit are not getting pushed to the database, when Union and join are used together.
> --------------------------------------------------------------------------------------------------
>
> Key: TEIID-3568
> URL: https://issues.jboss.org/browse/TEIID-3568
> Project: Teiid
> Issue Type: Enhancement
> Components: Query Engine
> Affects Versions: 8.1
> Reporter: Guru Prasad
> Assignee: Steven Hawkins
> Fix For: 8.12
>
> Attachments: ShowPlan.txt
>
>
> Order By and Limit are not getting pushed to the database, when Union and join are used together.
> In this scenario there if the underlying table has millions of records the query never returns with data.
> *Query 1*: Using only Join without union, this works fine.
> SELECT u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode FROM (
> select evttypecode, evtsysid, evtutctod, evtsystod, evtcatcode from XYZ.Tab1
> ) as u
> LEFT OUTER JOIN XYZ.CATEGORY AS ct ON u.evtcatcode = ct.evtcatcode
> WHERE (u.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (u.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) ORDER BY u.evtsysid LIMIT 8
> PROCESSOR PLAN:
> AccessNode(0) output=[evttypecode AS evttypecode, evtsysid AS evtsysid, evtutctod AS evtutctod, evtsystod AS evtsystod, evtcatcode AS evtcatcode]
> SELECT g_0.EVTTYPECODE AS c_0, g_0.EVTSYSID AS c_1, g_0.EVTUTCTOD AS c_2, g_0.EVTSYSTOD AS c_3, g_0.EVTCATCODE AS c_4 FROM ABC.Tab1 AS g_0 LEFT OUTER JOIN ABC.CATEGORY AS g_1 ON g_0.EVTCATCODE = g_1.EVTCATCODE WHERE (g_0.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (g_0.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) ORDER BY c_1 LIMIT 8
> *Query 2*: Using only Union without any join, this also works fine.
> SELECT u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode FROM (
> select evttypecode, evtsysid, evtutctod, evtsystod, evtcatcode from XYZ.Tab1
> UNION ALL
> select evttypecode, evtsysid, evtutctod, evtsystod, evtcatcode from XYZ.Tab2
> ) as u
> WHERE (u.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (u.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) ORDER BY u.evtsysid LIMIT 8
> PROCESSOR PLAN:
> AccessNode(0) output=[evttypecode AS evttypecode, evtsysid AS evtsysid, evtutctod AS evtutctod, evtsystod AS evtsystod, evtcatcode AS evtcatcode]
> SELECT g_1.EVTTYPECODE AS c_0, g_1.EVTSYSID AS c_1, g_1.EVTUTCTOD AS c_2, g_1.EVTSYSTOD AS c_3, g_1.EVTCATCODE AS c_4 FROM ABC.Tab1 AS g_1 WHERE (g_1.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (g_1.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) UNION ALL
> SELECT g_0.EVTTYPECODE AS c_0, g_0.EVTSYSID AS c_1, g_0.EVTUTCTOD AS c_2, g_0.EVTSYSTOD AS c_3, g_0.EVTCATCODE AS c_4 FROM ABC.Tab2 AS g_0 WHERE (g_0.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (g_0.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) ORDER BY c_1 LIMIT 8
> *Query 3*: Using both Union and join, this does not push down the order by and limit.
> SELECT u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode FROM (
> select evttypecode, evtsysid, evtutctod, evtsystod, evtcatcode from XYZ.Tab1
> UNION ALL
> select evttypecode, evtsysid, evtutctod, evtsystod, evtcatcode from XYZ.Tab2
> ) as u
> LEFT OUTER JOIN XYZ.EVTTYPE AS tp ON tp.evttypecode = u.evttypecode
> LEFT OUTER JOIN XYZ.CATEGORY AS ct ON u.evtcatcode = ct.evtcatcode
> WHERE (u.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (u.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'}) ORDER BY u.evtsysid LIMIT 8
> PROCESSOR PLAN:
> ProjectNode(0) output=[u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode] [u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode]
> LimitNode(1) output=[u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode] limit 8
> SortNode(2) output=[u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode] [SORT] [u.evtsysid]
> JoinNode(3) [MERGE JOIN (SORT/ALREADY_SORTED)] [LEFT OUTER JOIN] criteria=[u.evtcatcode=evtcatcode] output=[u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod, u.evtcatcode]
> JoinNode(4) [MERGE JOIN (SORT/ALREADY_SORTED)] [LEFT OUTER JOIN] criteria=[u.evttypecode=evttypecode] output=[u.evtcatcode, u.evttypecode, u.evtsysid, u.evtutctod, u.evtsystod]
> AccessNode(5) output=[u.evttypecode, u.evtcatcode, u.evtsysid, u.evtutctod, u.evtsystod]
> SELECT g_1.EVTTYPECODE AS c_0, g_1.EVTCATCODE AS c_1, g_1.EVTSYSID AS c_2, g_1.EVTUTCTOD AS c_3, g_1.EVTSYSTOD AS c_4 FROM ABC.Tab1 AS g_1 WHERE (g_1.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (g_1.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'})
> UNION ALL SELECT g_0.EVTTYPECODE AS c_0, g_0.EVTCATCODE AS c_1, g_0.EVTSYSID AS c_2, g_0.EVTUTCTOD AS c_3, g_0.EVTSYSTOD AS c_4 FROM ABC.Tab2 AS g_0 WHERE (g_0.EVTUTCTOD >= {ts'2015-06-03 19:20:00.8'}) AND (g_0.EVTUTCTOD <= {ts'2015-06-03 19:20:01.0'})
> AccessNode(6) output=[evttypecode] SELECT g_0.EVTTYPECODE AS c_0 FROM ABC.EVTTYPE AS g_0 ORDER BY c_0
> AccessNode(7) output=[evtcatcode] SELECT g_0.EVTCATCODE AS c_0 FROM ABC.CATEGORY AS g_0 ORDER BY c_0
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months
[JBoss JIRA] (TEIID-3623) HBase translator - boolean and biginteger values are not translated correctly
by Steven Hawkins (JIRA)
[ https://issues.jboss.org/browse/TEIID-3623?page=com.atlassian.jira.plugin... ]
Steven Hawkins commented on TEIID-3623:
---------------------------------------
2 - is a literal representation issue. The typing is correct, it's just that the bigdecimal literal produced will be -10 and HBase will parse that as a Long and does not support implicit conversion to a bigdecimal. So an explicit cast will be needed to help out their type system.
> HBase translator - boolean and biginteger values are not translated correctly
> -----------------------------------------------------------------------------
>
> Key: TEIID-3623
> URL: https://issues.jboss.org/browse/TEIID-3623
> 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: Steven Hawkins
> Attachments: insert_biginteger.log, inser_boolean.log
>
>
> *1. Boolean values:* The Teiid translates the value true/false as 1/0, but HBase does not support integer representation of boolean values [1].
> *2. BigInteger values ( <= -2):* Teiid's bigInteger data type is wider than HBase's bigint (as wide as long) type, so it make sense to define column in HBase as e.g. _decimal(30,0)_ and map it to Teiid's biginteger type.
> From Teiid's point of view: There is no problem if inserted value is greater than or equal to -1. But if the value is less than -1, then a ClassCastException is thrown [2]. Phoenix driver require something like "UPSERT INTO smalla (intkey, bigintegervalue) VALUES (1, -10 *.0*)"
> [1]
> *Query:* insert into hbase.smalla (intkey, booleanvalue) values (55, true)
> *Column definition:*
> - source: booleanvalue boolean
> - VDB: BooleanValue boolean OPTIONS (nameinsource 'booleanvalue', NATIVE_TYPE 'boolean')
> *Stack trace:*
> insert_boolean.log
> [2]
> *Query:* insert into hbase.smalla (intkey, bigintegervalue) values (55, -10)
> *Column definition:*
> - source: bigintegervalue decimal(20,0)
> - VDB: BigIntegerValue biginteger OPTIONS (nameinsource 'bigintegervalue', NATIVE_TYPE 'decimal')
> *Stack trace:*
> insert_biginteger.log
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months
[JBoss JIRA] (TEIID-3619) HBase translator - INSERT and UPDATE statements have no effect
by Kylin Soong (JIRA)
[ https://issues.jboss.org/browse/TEIID-3619?page=com.atlassian.jira.plugin... ]
Kylin Soong edited comment on TEIID-3619 at 8/11/15 10:41 AM:
--------------------------------------------------------------
In my previous test, I have found Phoenix Connection AutoCommit default is false, doesn't like other vendors.
Can you share the vdb file/test code, and DDL for create/map table in Phoenix?
was (Author: kylin):
Can you share the vdb file/test code, and DDL for create/map table in Phoenix?
> HBase translator - INSERT and UPDATE statements have no effect
> --------------------------------------------------------------
>
> Key: TEIID-3619
> URL: https://issues.jboss.org/browse/TEIID-3619
> 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
>
> Teiid's INSERT and UPDATE statement have no effect [1]. Both statements are translated as UPSERT which needs Connection.commit() to take effect [2].
> [1]
> *select intkey, stringkey from hbase.smalla where intkey = 5*
> |intkey|stringkey|
> |5|5|
> *update hbase.smalla set stringkey = '1000' where intkey = 5*
> no exception here
> *select intkey, stringkey from hbase.smalla where intkey = 5*
> |intkey|stringkey|
> |5|5|
> [2]
> http://phoenix.apache.org/faq.html#I_want_to_get_started_Is_there_a_Phoen... section "2. Using java"
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months
[JBoss JIRA] (TEIID-3619) HBase translator - INSERT and UPDATE statements have no effect
by Juraj Duráni (JIRA)
[ https://issues.jboss.org/browse/TEIID-3619?page=com.atlassian.jira.plugin... ]
Juraj Duráni edited comment on TEIID-3619 at 8/11/15 9:38 AM:
--------------------------------------------------------------
Probably the simplest workaround is to set 'autocommit' for every new connection (driver's property phoenix.connection.autoCommit).
And probably it is the best solution. So I suggest to add a note to the documentation.
was (Author: jdurani):
Probably the simplest workaround is to set 'autocommit' for every new connection (driver's property phoenix.connection.autoCommit).
> HBase translator - INSERT and UPDATE statements have no effect
> --------------------------------------------------------------
>
> Key: TEIID-3619
> URL: https://issues.jboss.org/browse/TEIID-3619
> 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
>
> Teiid's INSERT and UPDATE statement have no effect [1]. Both statements are translated as UPSERT which needs Connection.commit() to take effect [2].
> [1]
> *select intkey, stringkey from hbase.smalla where intkey = 5*
> |intkey|stringkey|
> |5|5|
> *update hbase.smalla set stringkey = '1000' where intkey = 5*
> no exception here
> *select intkey, stringkey from hbase.smalla where intkey = 5*
> |intkey|stringkey|
> |5|5|
> [2]
> http://phoenix.apache.org/faq.html#I_want_to_get_started_Is_there_a_Phoen... section "2. Using java"
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months
[JBoss JIRA] (TEIID-3616) HBase translator - NPE if date value is 'null'
by Steven Hawkins (JIRA)
[ https://issues.jboss.org/browse/TEIID-3616?page=com.atlassian.jira.plugin... ]
Steven Hawkins commented on TEIID-3616:
---------------------------------------
Yes, this is a bug with the HBase driver. Worse, the logic does not work at all - https://issues.apache.org/jira/browse/PHOENIX-869 they are simply setting then getting the milliseconds. So for the time being it's perfectly fine to avoid calling their methods that use calendars.
> HBase translator - NPE if date value is 'null'
> ----------------------------------------------
>
> Key: TEIID-3616
> URL: https://issues.jboss.org/browse/TEIID-3616
> 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: Steven Hawkins
> Attachments: log
>
>
> If the source table in HBase contains a 'NULL' date value, Teiid throws an NPE. I did not encounter any NPE using org.apache.phoenix.jdbc.PhoenixDriver [1]. Other data types seem to be OK too.
> I have tried integer, char, varchar, float, double, tinyint, smallint, bigint, decimal, varbinary, boolean, time, date, timestamp.
> [1]
> Connection con = new org.apache.phoenix.jdbc.PhoenixDriver().connect("jdbc:phoenix:localhost", new Properties())
> ResultSet rs = con.createStatement().executeQuery("select datevalue from smalla");
> while(rs.next()){
> System.out.println(rs.getDate(1));
> }
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
10 years, 7 months