我正在尝试使用apachephoenix在hbase表上运行sql查询。根据官方文档,需要使用sql查询为现有表创建模式:
CREATE TABLE TABLE_NAME (....)
我试图通过phoenix api直接连接到一个现有的表(用hbase api创建)来避免这种情况,但是我遇到了异常。问题是当phoenix执行这个查询时,它会在表上创建很多东西。例如,在hbase Jmeter 板的tables部分,我可以看到phoenix将以下元数据添加到我的表中:
'QUOTES', {METHOD => 'table_att', coprocessor$1 => '|org.apache.phoenix.coprocessor.ScanRegionObserver|1|', coprocessor$2 => '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|1|', coprocessor$3 => '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|1|', coprocessor$4 => '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|1|', coprocessor$5 => '|org.apache.phoenix.hbase.index.Indexer|1073741823|index.builder=org.apache.phoenix.index.PhoenixIndexBuilder,org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec'}, {NAME => '0', DATA_BLOCK_ENCODING => 'FAST_DIFF', KEEP_DELETED_CELLS => 'true'}
听起来像是pheonix正在更改表的元信息(它创建了一些协处理器和索引构建器),这是不是在为生产制造问题(与使用hbase api的代码相冲突)?如果是这样,如何避免呢?
1条答案
按热度按时间kgqe7b3p1#
是的,ApachePhoenix在执行以下操作时会将协处理器添加到基础hbase表的元数据中
CREATE TABLE
或者CREATE VIEW
如本文所述。这些操作不会干扰使用hbase api的代码,因为协处理器执行的任何处理只有在发出api调用的客户端设置了特定于phoenix的属性时才会触发。为了一个
Phoenix VIEW
,仅进行这些元数据更改。为了一个Phoenix TABLE
,除了这些元数据更改之外,表的每一行都会添加一个空的keyvalue。这样做是为了提高性能,并且在所有列都设置为null时防止行“消失”。更多细节在这里。