【问题标题】:Phoenix view over existing hbase table works but Phoenix table doesn'tPhoenix 对现有 hbase 表的视图有效,但 Phoenix 表无效
【发布时间】:2019-04-18 23:55:20
【问题描述】:

我是 HBase 和 Phoenix 的新手。我在将现有 HBase 表映射到 phoenix 时遇到问题。我的最终意图是我应该能够更新 HBase 表的现有行以及使用 Phoenix SQL 将新行插入其中。 我在 HBASE 中的表看起来像这样(它在列族 CASEDETAILS 下有五列):

CASES
COLUMN FAMILIES DESCRIPTION
{NAME => 'CASEDETAILS', BLOOMFILTER => 'NONE', VERSIONS => '2', IN_MEMORY => 
'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL 
=> 'FOREVER',COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 
'false', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

当我使用命令在该表上创建视图时

create view CASES( pk VARCHAR PRIMARY KEY,
                    CASEDETAILS.CASEID VARCHAR,
                    CASEDETAILS.CREATED VARCHAR,
                    CASEDETAILS.CREATEDBY VARCHAR,
                    CASEDETAILS.MBI VARCHAR,
                    CASEDETAILS.MEMBER VARCHAR);

它有效,我可以使用选择查询从表中获取数据,但我无法更新任何行,也无法插入新行。它给出了一个错误“表是只读的”

但是在上面的 Phoenix 创建命令中,我将“view”替换为“table”,即我试图在 Phoenix 中创建一个同名的表;建表成功但select语句不起作用。

所以我这里有几个问题:

1) 为什么现有 Hbase 表的视图可以工作,而表却不能?

2) 有没有办法使用 Phoenix SQL 接口更新 HBase 表中的现有行?

3) 在 Phoenix 中映射现有表时,保持列名顺序和列名大小写的重要性如何?

注意:我已经探索了现有数据库以解决类似问题,并最终意识到我的观点有效但表格无效。但是,没有一个问题能够解决我的最终问题,即通过 Phoenix 更新现有 HBase 表的现有行

【问题讨论】:

    标签: sql apache hbase phoenix


    【解决方案1】:

    以下是答案:

    1.Views 也可以用更复杂的 WHERE 子句定义,但在这种情况下,你不能对它们发出 DML,因为你会得到一个 ReadOnlyException。您仍然可以通过它们进行查询,并且它们的 WHERE 子句将与标准 SQL 视图一样有效。
    正如预期的那样,您也可以在另一个 VIEW 上创建一个 VIEW 以进一步过滤数据集。与上面相同的规则适用:如果在 VIEW 及其父 VIEW(s) 中仅使用简单的相等表达式,则新视图也是可更新的,否则它是只读的。

    您可以在此处找到有关查看的更多详细信息:https://phoenix.apache.org/views.html

    2.是的,您可以更新/插入 phoenix 表中的值,同时更新底层 HBase 表。

    UPSERT INTO TEST(NAME,ID) VALUES('foo',123);
    

    如果不存在则将记录插入表中,否则更新现有值。

    3.不必维护列名的顺序。列名与名称映射。默认情况下,它将所有名称都大写,但如果需要,可以在小写引号内指定。 https://phoenix.apache.org/language/index.html#create_table

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多