[
https://issues.apache.org/jira/browse/PHOENIX-7282?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Szucs Villo reassigned PHOENIX-7282:
------------------------------------
Assignee: Szucs Villo
> Incorrect data in index column for corresponding BIGIT type column in data
> table
> --------------------------------------------------------------------------------
>
> Key: PHOENIX-7282
> URL: https://issues.apache.org/jira/browse/PHOENIX-7282
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.3.0
> Reporter: Sanjeet Malhotra
> Assignee: Szucs Villo
> Priority: Major
>
> If we add a new column of type BIGINT to an existing data table and use
> CASCADE INDEX option then the column in index is aded as DECIMAL type. If we
> query such a column and the query plan gets resolved to use index table
> instead of data table then value returned will be different from the case
> when data table would have been used by query plan.
> IT to reproduce:
> {code:java}
> @Test
> public void testBigIntData() throws Exception {
> String dataTableName = generateUniqueName();
> String indexName = generateUniqueName();
> try(Connection conn = DriverManager.getConnection(getUrl())) {
> conn.createStatement().execute("create table " + dataTableName
> + " (id varchar not null primary key, col1 integer)");
> conn.createStatement().execute("create index " + indexName + " on " +
> dataTableName + " (col1)");
> conn.createStatement().execute("alter table " + dataTableName + " add
> if not exists col3 bigint cascade index all");
> conn.createStatement().execute("upsert into " + dataTableName + "
> (id, col3) values ('a', 3)");
> conn.commit();
> ResultSet rs = conn.createStatement().executeQuery("select col3 from
> " + dataTableName);
> while(rs.next()) {
> System.out.println(rs.getObject(1));
> }
> }
> } {code}
> {{So far this issue has been observed when new column of type BIGINT is added
> to data table/view. But if there is already a column of type BIGINT in the
> data table.view then above error is not observed even if query uses index
> table as per query plan.}}
>
> {{Further findings so far:}}
> # {{During alter table when we add new column in data table/view of type
> BIGINT then we also add a column of type DECIMAL (and not BIGINT) to
> corresponding index/view index.}}
> # {{Above finding is not true for create table but alter table only.}}
> # {{We write to data table/view in column of BIGIT type and also write same
> *byte array* in index/view index also but in a column of DECIMAL type. Byte
> array written in data table at HBase layer was serialized via {{PLong}} class
> but as we write same byte array in index column so at the time of reading
> value (from index table as per query plan) the byte array gets desrialized by
> {{PDecimal}} class. As we are not using compatible serializaion and
> deserialization logic for index column so, a value in data table becomes
> totally another value in index table when read. Serialization logic of PLong
> and PDecimal are completely different thus, so are their deserialization
> logics.}}
> ## {{One such example we saw was that in above IT (for reproducing the
> error) we insert 3 in data table column (of type BIGINT and newly added via
> alter) but the corresponding desrialized value in index is
> `-1.010101010098E+126`}}
> {{Still need to figure out why this issue only happens for new columns added
> via alter DDL but not via create DDL at table/view creation time.}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)