【问题标题】:How to create a Phoenix Table / View over an Existing Hbase table如何在现有 Hbase 表上创建 Phoenix 表/视图
【发布时间】:2016-03-25 08:40:26
【问题描述】:

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

我无法创建映射到现有 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

我想要做的是有一个有 2 列的凤凰表。

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

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

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

我正在寻找 Phoenix DDL 语法,它将生成我需要的表和列

【问题讨论】:

    标签: sql apache hbase phoenix


    【解决方案1】:

    参见Apache Phoenix F.A.Q. Section 如何将 Phoenix 表映射到现有的 HBase 表?

    这个话题也很有帮助link

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • phoenix 表可以有别的名字而不是 hbase 吗?
      【解决方案3】:

      Phoenix 有一个非常好的特性,如果我们在 phoenix 中创建任何表,它会自动反映在 Hbase 中,但如果我们在 Hbase 中创建任何表,它不会反映在 Phoenix 中。

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

      在您的情况下,您的列族名称是“esrdata”,因此请在 phoenix 中运行以下查询:

      创建视图 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 表列应为大写。喜欢:

      column=esrdata:VALUE

      那么只有它会从 Hbase 表中获取数据。

      【讨论】:

      • 不是一个好的答案。他问的是在凤凰城现有的 Hbase 表上创建一个表。这可以通过 IgorekPotworek 来完成
      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多