You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "Tulasi P (JIRA)" <ji...@apache.org> on 2018/08/02 22:27:00 UTC
[jira] [Comment Edited] (PHOENIX-4791) Array elements are nullified
with joins
[ https://issues.apache.org/jira/browse/PHOENIX-4791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16567518#comment-16567518 ]
Tulasi P edited comment on PHOENIX-4791 at 8/2/18 10:26 PM:
------------------------------------------------------------
{quote}Take a look at RegionScannerFactory.getWrappedScanner() and in particular the replaceArrayIndexElement() method.
{quote}
It looks like *replaceArrayIndexElement()* is doing the correct thing?
{code:java}
Input List<Cell> result =
[
[cell: 123/0:_0/1530140066898/Put/vlen=1/seqid=224, key: 123, family: 0, qualifier: _0, value: x],
[cell: 123/0:ARR_COLUMN/1530140066898/Put/vlen=5/seqid=224, key: 123, family: 0, qualifier: ARR_COLUMN, value: pqrst]
]
Modified List<Cell> result =
[
[cell: 123/0:_0/1530140066898/Put/vlen=1/seqid=224, key: 123, family: 0, qualifier: _0, value: x],
[cell: 123/_v:\x00\x00\x00\x02/LATEST_TIMESTAMP/Put/vlen=5/seqid=0, key: 123, family: _v, qualifier: 2, value: pqt^@^G]
]
{code}
In the example, replaceArrayIndexElement is correctly removing the cell associated with the full array (value = pqrst) and replacing it with a new array of selected elements (value = pqt).
was (Author: tulasip):
bq. Take a look at RegionScannerFactory.getWrappedScanner() and in particular the replaceArrayIndexElement() method.
It looks like *replaceArrayIndexElement()* is doing the correct thing?
{code}
Input List<Cell> result = [[cell: 123/0:_0/1530140066898/Put/vlen=1/seqid=224, key: 123, family: 0, qualifier: _0, value: x], [cell: 123/0:ARR_COLUMN/1530140066898/Put/vlen=5/seqid=224, key: 123, family: 0, qualifier: ARR_COLUMN, value: pqrst]]
Modified List<Cell> result = [[cell: 123/0:_0/1530140066898/Put/vlen=1/seqid=224, key: 123, family: 0, qualifier: _0, value: x], [cell: 123/_v:\x00\x00\x00\x02/LATEST_TIMESTAMP/Put/vlen=5/seqid=0, key: 123, family: _v, qualifier: 2, value: pqt^@^G]]
{code}
In the example, replaceArrayIndexElement is correctly removing the cell associated with the full array (value = pqrst) and replacing it with a new array of selected elements (value = pqt).
> Array elements are nullified with joins
> ---------------------------------------
>
> Key: PHOENIX-4791
> URL: https://issues.apache.org/jira/browse/PHOENIX-4791
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.11.0, 4.12.0, 4.13.0, 4.14.0
> Reporter: Tulasi P
> Priority: Major
> Fix For: 4.15.0
>
>
> Returning elements of an array from a table that is part of a join causes array elements to be nullified.
> {noformat}
> create table array_test_1 (id integer not null primary key, arr tinyint[5]);
> upsert into array_test_1 values (1001, array[0, 0, 0, 0, 0]);
> upsert into array_test_1 values (1002, array[0, 0, 0, 0, 1]);
> upsert into array_test_1 values (1003, array[0, 0, 0, 1, 1]);
> upsert into array_test_1 values (1004, array[0, 0, 1, 1, 1]);
> upsert into array_test_1 values (1005, array[1, 1, 1, 1, 1]);
> {noformat}
>
> {noformat}
> create table test_table_1 (id integer not null primary key, val varchar);
> upsert into test_table_1 values (1001, 'abc');
> upsert into test_table_1 values (1002, 'def');
> upsert into test_table_1 values (1003, 'ghi');{noformat}
> {noformat}
> 0: jdbc:phoenix:localhost> select t1.id, t2.val, t1.arr[1], t1.arr[2], t1.arr[3] from array_test_1 as t1 join test_table_1 as t2 on t1.id = t2.id;
> +--------+---------+---------+------------------------+---------------+
> | T1.ID | T2.VAL | ARRAY_ELEM(T1.ARR, 1) | ARRAY_ELEM(T1.ARR, 2) | ARRAY_ELEM(T1.ARR, 3) |
> +--------+---------+---------+-----------------+------------------------+
> | 1001 | abc | null | null | null |
> | 1002 | def | null | null | null |
> | 1003 | ghi | null | null | null |
> +--------+---------+--------+------------------------+-----------------+
> 3 rows selected (0.056 seconds)
> {noformat}
> However, directly selecting array elements from the array returns data correctly.
> {noformat}
> 0: jdbc:phoenix:localhost> select [t1.id, t1.arr[1], t1.arr[2], t1.arr[3] from array_test_1 as t1;
> +-------+--------+-------------+-------------+
> | ID | ARRAY_ELEM(ARR, 1) | ARRAY_ELEM(ARR, 2) | ARRAY_ELEM(ARR, 3) |
> +-------+--------+-------------+-------------+
> | 1001 | 0 | 0 | 0 |
> | 1002 | 0 | 0 | 0 |
> | 1003 | 0 | 0 | 0 |
> | 1004 | 0 | 0 | 1 |
> | 1005 | 1 | 1 | 1 |
> +-------+-------+--------------+--------------+
> 5 rows selected (0.044 seconds)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)