我是凤凰城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语法,这将导致我需要的表和列
答案 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
);