sql—如何在现有hbase表上创建phoenix表/视图

nnt7mjpx  于 2021-06-09  发布在  Hbase
关注(0)|答案(3)|浏览(519)

我是新来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语法,它将生成我需要的表和列

wwtsj6pe

wwtsj6pe1#

请参阅apachephoenix f.a.q.一节如何将phoenix表Map到现有的hbase表?
这个主题也可以帮助链接。

gkn4icbw

gkn4icbw2#

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

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

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表中获取数据。

相关问题