我是新来Phoenix城的,hbase。我们需要对hbase数据库发出类似sql的查询。我们决定使用apachephoenix作为现有hbase表之上的sql皮肤,该表已经加载了我们要检索的数据。
创建Map到现有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
我想做的是有一个phoenix表,它有两列。
id->这应该是与hbase行键对应的主键。
数据->这应该是esrdata:value column.
根据我的尝试,我只能创建一个phoenix表,其中有一列是hbase中的行键,但我无法创建另一列,其中包含我要查找的数据。
我正在寻找phoenix ddl语法,它将生成我需要的表和列
3条答案
按热度按时间wwtsj6pe1#
请参阅apachephoenix f.a.q.一节如何将phoenix表Map到现有的hbase表?
这个主题也可以帮助链接。
gkn4icbw2#
如果要Map现有的hbase表,可以执行以下命令:
dba5bblo3#
phoenix有一个非常好的特性,如果我们在phoenix中创建任何表,那么它将自动反映在hbase中,但是如果我们在hbase中创建任何表,那么它将不会反映在phoenix中。
如果要将现有的hbase表Map到phoenix,则必须在phoenix中创建一个视图,该视图将是只读的,这意味着它可以从hbase表中获取数据,并且我们只能看到该数据,我们不能通过phoenix修改或插入新数据。
在您的例子中,您的列族名称是“esrdat”,因此在phoenix中运行以下查询:
创建视图esrmock(pk varchar主键,esrdata.value varchar)
phoenix中不能有数据列,因为它将Map与hbase中完全相同的列,因此如果要将列名作为数据,则必须在hbase表中创建列并为相同的列创建视图。比如:
创建视图esrmock(pk varchar主键,esrdata.data varchar)
“pk”列声明行键是varchar(即字符串),而“esrdata”.value列声明hbase表将包含列族和列限定符为“esrdata”:value的keyvalues,它们的值将是varchar。
注意:phoenix会在内部自动将列名大写,因此hbase表的列应该是大写的。比如:
列=esrdata:value
只有它才能从hbase表中获取数据。