You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Alejandro Anadon (Jira)" <ji...@apache.org> on 2021/11/02 19:28:00 UTC
[jira] [Created] (PHOENIX-6585) strange behavior when using default values and upsert with nulls in not pk fields
Alejandro Anadon created PHOENIX-6585:
-----------------------------------------
Summary: strange behavior when using default values and upsert with nulls in not pk fields
Key: PHOENIX-6585
URL: https://issues.apache.org/jira/browse/PHOENIX-6585
Project: Phoenix
Issue Type: Bug
Components: core
Reporter: Alejandro Anadon
While I was doing the test case for the fix in PHOENIX-6583 , I discovered a strange behavior when using default values and upsert with nulls in not pk fields.
Steps:
CREATE TABLE IF NOT EXISTS DUMMYTABLE (pk INTEGER PRIMARY KEY, int INTEGER DEFAULT -100);
UPSERT INTO DUMMYTABLE (pk,int) VALUES (1,null);
SELECT * FROM DUMMYTABLE;
now you can see that there is a null in the field.
SELECT * FROM DUMMYTABLE WHERE INT IS NULL;
Hey!! No result!! they were? is it null or not null?
(It doesn't happen if we create the table witout 'DEFAULT -100' . In taht case, the results are correct).
After a investigation, that is because after 'UPSERT INTO DUMMYTABLE (pk,int) VALUES (1,null);' it insert in hbase a record without a value:
hbase(main):003:0> scan 'DUMMYTABLE'
ROW COLUMN+CELL
\x80\x00\x00\x01 column=0:\x00\x00\x00\x00, timestamp=1635879976908, value=x
\x80\x00\x00\x01 column=0:\x80\x0B, timestamp=1635879976908, value=
1 row(s)
It is hard to solve it, because that is the way that phoenix can difer nulls from default value -100.
But , how can be solve the problem when setting null? From client side point of view, if whe put a null, we want to be null, not default value.
So if phoenix removes from hbase the record, it has no way to see if it is null or default value -100. And if it insert a value like "value=" to represent the null (as it is doing actualy), then the select "where int is null" does not works. I don't know if I can make myself understood.
I tested it with other types and the behavior is similar.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)