Phoenix和Hbase的一般FAQ问题

本文详细介绍了如何在Phoenix和HBase之间建立表映射,包括直接在Phoenix中建表并自动映射到HBase的方法,以及如何在已有的HBase表基础上创建Phoenix表。此外,还提供了一些实用的脚本命令示例和常见问题解决方案。

第一:
建表问题:
(1):如果在phoenix中建表,那么表建好以后,它会自动映射到hbase库里面,即hbase库里面就有这个表了,如果像phoenix中的表插入数据,那么数据会自动在hbase库中映射表中插入数据。
(2):如果是先在hbase中建表,那么phoenix中是不存在这个相同的表的,因此要在phoenix中映射有hbase中这个相同的表,那么就必须在phoenix中创建相同的表,并且数据的类型要跟hbase中的数据类型要一样,这样hbase中的表以及表中的数据就可以映射到phoenix中。

例子:phoenix中的建表语句:
create table “mhl_session_max_time_da”(
“advert_id” varchar(20) not null primary key,
“mhl”.“create_time” varchar DEFAULT NULL,
“mhl”.“store” varchar(255) DEFAULT NULL,
“mhl”.“region” varchar(255) DEFAULT NULL,
“mhl”.“agent_name” varchar(80) DEFAULT NULL,
“mhl”.“max_session_time” varchar(20) DEFAULT NULL
) COLUMN_ENCODED_BYTES=‘NONE’;

注:phoenix中的建表语句中,不能用comment 来对字段进行解释,否则会报错

数据类型
(1):Hbase中的数据类型都是Byte类型,显示都是二进制的形式,如果想在hbase中能看到数据,那么可以在导入数据到hbase中时可以弄成String类型,这样在hbase中就可以看见数据。
(2):如果已经数据本来的数据类型来存到habse上,比喻int,double,存在habse那么数据会显示成二进制形式,如果是存入“”中文“”,那么hbase中的中文都显示成二进制形式,把表映射到phoenix上,phoenix上的数据类型要跟hbase上的数据类型相同,那么在phoenix上去写sql语句查找数据,数据都是可以显示出来的,中文也可以显示出来的。

第二
Phoenxi的脚本命令来创建表
注意:phoenix建表的时候表名、列族、列名是有大小写区分的,要想用小写,那么必须用双引号括起来,不然就会显示的是大写。

   建表脚本:
  ./psql.py data-1,data-2,data-3:2181 /data2/shuairui/mhl_session_max_time_da.sql 

mhl_session_max_time_da.sql的内容如下:
CREATE TABLE IF NOT EXISTS WEB_STAT (
HOST CHAR(2) NOT NULL,
DOMAIN VARCHAR NOT NULL,
FEATURE VARCHAR NOT NULL,
DATE DATE NOT NULL,
USAGE.CORE BIGINT,
USAGE.DB BIGINT,
STATS.ACTIVE_VISITOR INTEGER
CONSTRAINT PK PRIMARY KEY (HOST, DOMAIN, FEATURE, DATE)
);

导入数据:

./psql.py -t WEB_STAT data-1,data-2,data-3:2181 /data2/mhl_session_max_time_da.csv
一定要用逗号分割的csv
在这里插入图片描述

参考文档:http://blog.youkuaiyun.com/fansy1990/article/details/22939887

第三:
Hbase中已经存在表,与Phoenix做映射

hbase 已有表LCT_TEST:
在这里插入图片描述
只需在phoenix中添加同名表即可映射到hbase的同名表.

create table “LCT_TEST”(“ROW” varchar primary key, “op_www”.“exists” varchar , “op_www”.“exists1” varchar);

把HBASE中的ROW当作主键
表名和列族以及列名需要用双引号括起来,因为HBase是区分大小写的,如果不用双引号括起来的话Phoenix在创建表的时候会自动将小写转换为大写字母.

在这里插入图片描述
在这里插入图片描述
参考文档:http://blog.youkuaiyun.com/maomaosi2009/article/details/45598985

第四:
Phoenix中踩过的坑:
1、phoenix插入数据,如果存在单引号情况,记住转义处理。
2、Phoneix是apache下top level的针对HBase的sql引擎,可以方便地使用此以sql形式访问HBase。我们用它来读取HBase的数据性能方面的可以参考官网:http://phoenix.apache.org/performance.html#
3、limit支持的问题: 不支持limit N,M 这种类似于Mysql的写法,支持limit N
目前DWAPI中配置的返回条数中如果不手动写limit N,它会按照下拉框:返回结果限制数 生成LIMIT N,M语法,导致sql执行失败

异常信息举例:
2317:java.sql.SQLException: ERROR 602 (42P00): Syntax error. Missing “EOF” at line 3, column 74. Query:
2318:
2319:select * from “em_user_deal” where “pk”=‘1000755_亲子频道_2014-11-14’ limit 0,5000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值