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)