hbase-presto-phoenix遇到的坑

phoenix:

1.表/字段名要加双引号。
2.不加双引号,默认英文单词,创建的表/字段为大写。
3.select 字段的时候要加单引号
select * from "aaa" where "name" = 'zys'
等价于
select * from AAA where NAME = 'zys'

4.联动hbase, hbase int用phoenix bigint类型,直接用代码操作hbase存int类型(正负数),
	会导致在phoenix select * from tb 操作读不出来数据,报错"字段长度不够"
	那是因为你用hbase存数据的时候要调用phoenix的toBytes方法存才行,hbase自身的toBytes不行.
	总而言之,你要保证hbase存的数字也是byte类型的,建议用phoenix的tobyte转换数字再存hbase。
	其实更好的做法是,操作phoenix来存int类型的数据。
	参考:	
		https://stackoverflow.com/questions/36131091/phoenix-doesnt-display-negative-integer-values-correctly
		https://stackoverflow.com/questions/52829944/apache-phoenix-illegal-data-exception

5.如果你要联动presto,不要打开命名空间的配置。(phoenix.schema.isNamespaceMappingEnabled -> false)
6.sqlline sdk 必须和 hbase sdk对应上,才能连接!!!如果创建了部分这些表,然后报错,手动在hbase清掉(disable+drop),再重连,重创建
SYSTEM:CATALOG
SYSTEM:FUNCTION
SYSTEM:LOG
SYSTEM:MUTEX
SYSTEM:SEQUENCE
SYSTEM:STATS

7.Error: ERROR 201 (22000): Illegal data. Expected length of at least 10151331 bytes, but had 287 (state=22000,code=201)

presto
1.presto 332高版本才支持phoenix连接操作hbase
2.presto 查询语句不支持小写的表名!!!但是它的select表名的语句默认是小写的!
3.presto 如果想联动phoenix + hbase,请保证hbase的表名都是”大写的“!!!

Presto().hbase_query('''
select * from sync_apps
''', typ="original")
等价于
在phoenix sqlline中执行 
select * from "SYNC_APPS"
或
select * from sync_apps

4.presto配置,这条没用,官方的presto会带,自建的不需要,但是要陪host域名映射
hive.config.resources=/root/soft/presto-server-332/etc/core-site.xml, /root/soft/presto-server-332/etc/hdfs-site.xml
HBASE
1.存的数据都是byte类型
2. 写完命令不要加 ; 分号,分号用来分割多个命令,连续执行
3. presto 和 phoenix对应的时候,注意字段是不是两边都有,比如phoenix 的timestamp,presto就没有,识别不了

Phoenix	Presto
BOOLEAN		(same)
BIGINT		(same)
INTEGER		(same)
SMALLINT	(same)
TINYINT		(same)
DOUBLE		(same)
FLOAT		REAL
DECIMAL		(same)
BINARY		VARBINARY
VARBINARY	(same)
DATE		(same)
TIME		(same)
VARCHAR		(same)
CHAR		(same)

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值