设为首页 加入收藏

TOP

如何用Phoenix(4.14版本)映射HBase中已有的表
2019-04-29 01:46:39 】 浏览:59
Tags:何用 Phoenix 4.14 版本 映射 HBase 有的
版权声明:本文为博主原创文章,转载时请注明出处,谢谢!喝酒不骑马 邮箱myz9412@163.com https://blog.csdn.net/Colton_Null/article/details/83387995

一.为什么要做映射?

本地安装好 Phoenix 之后,用 phoenix 的 !talblse 命令列出所有表,会发现 HBase 原有的表没有被列出来。而使用 Phoenix sql 的 CREATE 语句创建的一张新表,则可以通过 !tables 命令展示出来。

这是因为 Phoenix 无法自动识别 HBase 中原有的表,所以需要将 HBase 中已有的做映射,才能够被 Phoenix 识别并操作。说白了就是要需要告诉 Phoenix 一声 xx 表的 xx 列是主键,xx 列的数据类型。

二.如果进行映射?

这里我从用 hbase shell 创建一个表开始,来展示如何做映射。

1.创建一个 HBase 表并插入一定量数据

create 'test_table','0'
put 'test_table', 'row001','0:name','Jane'
put 'test_table', 'row002','0:name','Tom'
put 'test_table', 'row003','0:name','Bill'

数据如图所示:
在这里插入图片描述

2.使用 CREATE 语句在 Phoenix 中创建映射表

CREATE TABLE "test_table" ( "ROW" varchar primary key, "0"."name" varchar);

创建过程会有几秒钟卡顿,请耐心等待。

这里有几点需要注意:

a) Phoenix 对表名和列名都是区分大小写的,但是,如果不加双引号,则默认为大写。例如上面这条语句,如果 test_table 不加双引号,则创建后的表名则是 TEST_TABLE。

b) 表名要和 HBase 中建立的表名一致。HBase 默认的主列名是 ROW,所以要将“ROW”设置为主键。列簇和列名也要用双引号括起来,要不然小写会自动变成大写。

3.使用 SELECT 语句查询

SELECT * FROM "test_table";

查得结果如图所示:

在这里插入图片描述

4.特殊强调

如果你使用的是 Phoenix 4.10 及以上的版本,可能会遇到查不出数据的情况,如下图所示:
在这里插入图片描述

这是因为在 4.10 版本之后,Phoenix 对列的编码方式有所改变(官方文档地址:http://phoenix.apache.org/columnencoding.html)。就拿上面的例子来说,同样是"name"这个列,看起来列名是一样的,但是 Phoenix 对这个列名进行了编码,也就是说 Phoenix 创建的 name 列实际上和 HBase 里的 name 列不是一个列了,所以查不出来数据。

那么如何解决这个问题呢?

在使用 Phoenix 创建表的时候,需要设置 COLUMN_ENCODED_BYTES 属性为 0,即不让 Phoenix 对 column family 进行编码。

CREATE TABLE "test_table" ( "ROW" varchar primary key, "0"."name" varchar) column_encoded_bytes=0;

这样就能查出数据了。

另外,根据官方文档的内容,“One can set the column mapping property only at the time of creating the table. ”,也就是说只有在创建表的时候才能够设置属性。如果在创建的时候没有设置,之后怎么去设置就不太清楚了,可能是无法改变,至少目前我还没有找到相关方法。所以大家在创建映射表的时候一定要注意设置属性。

三.视图映射

如果只做查询操作的话,建议大家使用视图映射的方式,而非表映射。因为一旦出现问题,例如上面提到的,在创建映射表时如果忘记设置属性(4.10版之后),那么想要删除映射表的话,HBase 中该表也会被删除,导致数据的丢失。而如果是用视图映射,则删除视图不会影响原有表的数据。

创建视图的语句同创建表差不多:

CREATE VIEW "test_table" ( "ROW" varchar primary key, "0"."name" varchar);

四.总结

  1. 需要将原有 HBase 中的表做映射才能后使用 Phoenix 操作。
  2. Phoenix 区分大小写,切默认情况下会将小写转成大写,所以表名、列簇、列名需要用双引号。
  3. Phoenix 4.10 版本之后,在创建表映射时需要将 COLUMN_ENCODED_BYTES 置为 0。
  4. 删除映射表,会同时删除原有 HBase 表。所以如果只做查询炒作,建议做视图映射。

站在前人的肩膀上前行,感谢以下博客及文献的支持。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇5.5 HBase表设计实例 下一篇HBase中冷热数据处理以及资源分配..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目