Created 03-29-2016 08:44 AM
Phoenix Query:
CREATE TABLE STORE.DETAILS (Market_Key UNSIGNED_INT NOT NULL, Product_Key UNSIGNED_INT NOT NULL, Period_Key UNSIGNED_INT NOT NULL, Units double CONSTRAINT pk PRIMARY KEY (Market_Key, Product_Key, Period_Key))
In hbase i am having two columns i hope Primary key combination is converted to row key. can you please let me know how the primary keys are combined and converted to rowkeys
Created 03-29-2016 08:58 AM
Hello Santosh
When creating a Phoenix table through the DSL, as you are doing, phoenix will handle all the magic before pushing using Hbase as a store. In this scenario you will get a complex rowkey in the order you have written it: Market_key-Product_Key-Period-Key so the order in which you declare in your statement is important as it will be the order of your complex rowkey. Furthermore to separate the values Phoenix will use a 0 byte in between each element of the key, or use size encoding info if applicable. So, for example if you have (varchar,u_long, varchar) primary key, the rowkey for values like 'X',1,'Y'will be : ('X', 0x00) (0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01), ('Y')
Lastly the Primary Key elements becoming the rowkey they will not be Hbase columns of your table so keep that in mind will designing it if has importance.
Created 03-30-2016 03:13 AM
Hi Maillard,
Thank you for your reply basically i am trying to convert a phoenix query to hbase query
Phoenix query:
SELECT PRODUCT_KEY, STORE_KEY, PERIOD_KEY , U_PER_STORE_WEEKS_PROJ FROM FG.FCT FCT where
PRODUCT_KEY in ( SELECT PRODUCT_KEY FROM FG.PRDC ) AND
STORE_KEY in ( SELECT STORE_KEY FROM FG.STR WHERE STORE IN ( '03441' ) ) AND
PERIOD_KEY in ( SELECT PERIOD_KEY FROM FG.PRD WHERE PERIOD_SHORT_DESC IN ('Super Bowl 2 W/E 02/07/15') );
Can this be done and can you let me know on how to start with for the conversion
Created 03-29-2016 09:01 AM
A great source of information is the Apache Phoenix FAQ, your question has been answered there https://phoenix.apache.org/faq.html#How_I_map_Phoenix_table_to_an_existing_HBase_table
I won't copy the whole answer
Our composite row keys are formed by simply concatenating the values together, with a zero byte character used as a separator after a variable length type.
Created 08-18-2017 10:28 AM
Hey @Artem Ervits can you please give me an example of making a composite rowkey in Phoenix and accessing it? It'd be of great help to me.
Created 11-07-2017 09:57 PM
I am also looking for an example which illustrate creation of a Hbase put statement corresponding to a upsert query in Phoenix which has a composite row key (primary key) similar to what is mentioned above. If someone can give an example of that it would be great. Not sure how can I add this Zero byte character in Hbase put statement.
Created 11-28-2017 05:05 PM
If you look at how Phoenix handles in its code, you will get an Idea.
Specifically, org.apache.phoenix.query.QueryConstants.java defines zero byte separator as below
public static final byte SEPARATOR_BYTE = (byte) 0; public static final byte[] SEPARATOR_BYTE_ARRAY = new byte[] {SEPARATOR_BYTE};
You can use Bytes.add(byte[], byte[]) to append separator byte array to form a composite row key.
Let me know,How it works...