如何在现有Hbase表上创建Phoenix Table / View

时间:2015-12-18 15:32:33

标签: sql apache hbase phoenix

我是凤凰城Hbase的新手。 我们需要针对Hbase数据库发出SQL Like查询。我决定将Apache Phoenix作为SQL Skin放在现有的Hbase表之上,该表已经加载了我们想要检索的数据。

我在创建映射到现有Hbase表的Phoenix表时遇到问题。

Here is my sample Hbase Table
hbase(main):033:0> describe 'esrmock'
Table esrmock is ENABLED
esrmock
COLUMN FAMILIES DESCRIPTION
{NAME => 'esrdata', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', 
REPLICATION_SCOPE => '0', VERSIONS => '1', MIN_VERSIONS => '0', TTL => 
'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 
'false', BLOCKCACHE => 'true'}
1 row(s) in 0.0360 seconds

Sample Data in the table
hbase(main):034:0> scan 'esrmock'
ROW                                                          COLUMN+CELL
21333444555-234234564666-5                                  
                           column=esrdata:value, timestamp=1450450438296,                               
                           value=sdfgsdfhfgjfgdfgfghfghe546e547ydfghfghe547e567udtyfghngj
21333444555-23423534654-5                                   
                            column=esrdata:value, timestamp=1450450446777, 
                            value=sdfgsdfhfgjfgdfgfghfghe546e547ydfghfghe547e567udtyfghngj
21333444555-23423534666-5                                   
                            column=esrdata:value, timestamp=1450450443184, 
                           value=sdfgsdfhfgjfgdfgfghfghe546e547ydfghfghe547e567udtyfghngj
3 row(s) in 0.0250 seconds

我想做的是拥有一个有两列的凤凰表。

id - >这应该是与Hbase行Key对应的主键。

数据 - >这应该是esrdata:value列的内容。

根据我的尝试,我只能创建一个包含1列的phoenix表,这是hbase中的行键,但是我无法创建包含我正在寻找的数据的另一列。

我正在寻找Phoenix DDL语法,这将导致我需要的表和列

3 个答案:

答案 0 :(得分:3)

凤凰城有很好的功能,如果我们将在凤凰城创建任何表格,那么它将自动反映在Hbase中,但如果我们将在Hbase中创建任何表格,那么它将不会反映在凤凰城。

如果你想将现有的Hbase表映射到Phoenix,那么你必须在phoenix中创建一个View并且该视图将是只读的意味着它可以从Hbase表中获取数据而我们只能看到那些数据,我们不能通过凤凰修改或插入新数据。

在您的情况下,您的列系列名称是“esrdata”。所以在凤凰城运行以下查询:

创建视图esrmock(pk VARCHAR PRIMARY KEY,esrdata.value VARCHAR)

你不能在phoenix中拥有数据列,因为它将映射与Hbase完全相同的列,因此如果你想要列名作为数据,那么你必须在Hbase表中创建列并为其创建视图。喜欢:

创建视图esrmock(pk VARCHAR PRIMARY KEY,esrdata.data VARCHAR)

“pk”列声明您的行键是VARCHAR(即字符串),而“esrdata”.value列声明您的HBase表将包含具有列族和列限定符“esrdata”的KeyValues:VALUE并且他们的价值将是VARCHAR。

注意: Phoenix会自动在内部对列名称进行大写,因此您的Hbase表列应为大写。喜欢:

<强>柱= esrdata:VALUE

然后只会从Hbase表中获取数据。

答案 1 :(得分:1)

请参阅Apache Phoenix F.A.Q.部分我如何将Phoenix表映射到现有的HBase表?

此主题也非常有用link

答案 2 :(得分:1)

如果要映射现有的hbase表,可以执行以下命令:

CREATE TABLE "esrmock"(
PK VARCHAR PRIMARY KEY, 
"esrdata"."value" VARCHAR
);