Phoenix 关联hbase表历史数据

Phoenix 基本使用

进入Phoenix

 phoenix-sqlline.py 10.248.161.18:2181:/hbase

 或者进入目录下执行

cd /opt/cloudera/parcels/APACHE_PHOENIX/bin

关联Hbase原有表

  • 创建Hbase表,列簇为 cf1 , cf2
create 'phoenix_hbase_test','cf1','cf2'
  • 插入测试数据
put 'phoenix_hbase_test', 'key1','cf1:name','zhangsan'
put 'phoenix_hbase_test', 'key1','cf2:age','18'
put 'phoenix_hbase_test', 'key2','cf1:name','lisi'
put 'phoenix_hbase_test', 'key2','cf2:age','26'
put 'phoenix_hbase_test', 'key3','cf1:name','chenwu'
put 'phoenix_hbase_test', 'key4','cf2:age','10'
  • 查看

  •  创建Phoenix表关联

在Phoenix执行

create table "phoenix_hbase_test"("rowkey" varchar primary key, "cf1"."name" varchar , "cf2"."age" varchar)  column_encoded_bytes=0; 

或者创建视图(可以理解为视图是hive的外部表,table是内部表,删除内部表hbase表也会删除,删除视图hbase表还存在)

create view "phoenix_hbase_test"("rowkey" varchar primary key, "cf1"."name" varchar , "cf2"."age" varchar) ;

 

注意:

        这里这里在Phoenix后面有column_encoded_bytes=0;  意思是禁用对字段值进行压缩编码(4.10)后的新特性,如果不加会查询会无数据,具体可参考:

  • 查询数据 
0: jdbc:phoenix:xxxx:2181:/hbase> select * from "phoenix_hbase_test";
+---------+-----------+------+
| rowkey  |   name    | age  |
+---------+-----------+------+
| key1    | zhangsan  | 18   |
| key2    | lisi      | 26   |
| key3    | chenwu    |      |
| key4    |           | 10   |
+---------+-----------+------+
4 rows selected (0.025 seconds)
  • Phoenix插入数据 并查看内容
0: jdbc:phoenix:xxx:2181:/hbase> upsert into "phoenix_hbase_test"("rowkey","cf1"."name","cf2"."age") values('key5','shazi','66');
1 row affected (0.007 seconds)
0: jdbc:phoenix:xxx:2181:/hbase> select * from "phoenix_hbase_test";
+---------+-----------+------+
| rowkey  |   name    | age  |
+---------+-----------+------+
| key1    | zhangsan  | 18   |
| key2    | lisi      | 26   |
| key3    | chenwu    |      |
| key4    |           | 10   |
| key5    | shazi     | 66   |
+---------+-----------+------+
5 rows selected (0.021 seconds)

如果是视图的场景下,是无法upsert into ,只能通过hbase put添加数据 

0: jdbc:phoenix:xxx:2181:/hbase> upsert into "phoenix_hbase_test"("rowkey","cf1"."name","cf2"."age") values('key5','shazi','66');
Error: ERROR 505 (42000): Table is read only. (state=42000,code=505)
org.apache.phoenix.schema.ReadOnlyTableException: ERROR 505 (42000): Table is read only.at org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:359)at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:784)at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:770)at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:401)at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:391)at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:389)at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378)at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1825)at sqlline.Commands.execute(Commands.java:822)at sqlline.Commands.sql(Commands.java:732)at sqlline.SqlLine.dispatch(SqlLine.java:813)at sqlline.SqlLine.begin(SqlLine.java:686)at sqlline.SqlLine.start(SqlLine.java:398)at sqlline.SqlLine.main(SqlLine.java:291)

视图有以下几点限制

1.只有通过VIEW进行更新时,才能维护VIEW上的INDEX。通过底层TABLE或父VIEW进行的更新不会反映在索引(PHOENIX-1499)中。
2.如果主键列的主键约束以可变长度列(PHOENIX-2157)结尾,则主键列不能添加到VIEW中。
3.VIEW可以通过简单的SELECT *查询仅在单个表上定义。您不能在多个连接的表格或聚合(PHOENIX-1505,PHOENIX-1506)上创建VIEW 。
4.当一个列添加到VIEW时,新列不会自动添加到任何子视图(PHOENIX-2054)。解决方法是手动将该列添加到子视图。
5.所有列在创建时都必须投影到VIEW中(即仅支持CREATE VIEW ... AS SELECT *)。但是,请注意,在通过ALTER VIEW命令创建后,您可以在VIEW中删除从基表继承的非主键列。在未来的版本(PHOENIX-1507)中支持在SELECT子句中提供列和或表达式的子集。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++面试(二)

笔试题: Char * const p,char const *p,const char *p分别表示什么意思? 面向对象的三个特性是什么,有什么意义? 编程实现字符串连接函数 char * strcat(char *strDest,const char *strsrc);不用C/C字符串处理库函数。 ISO七层参考模型是什…

C++面试(三)

笔试题: 1 写出按一个字节的位对其方式的命令 #pragma pack(n) 2 写出UpdateData(BOOL values)函数的作用 3 写字符串拷贝函数,不能用系统的strcpy; Char *Strcpy(char *str, const char *Srcstr); 4 对两个有序的链表head1,head2,把他们合并…

Phoenix 关联映射 Hbase表 获取不到数据,upsert hbase 列名为16进制字符

创建Hbase表 create phoenix_hbase_test,cf1,cf2 put phoenix_hbase_test, key1,cf1:name,zhangsan put phoenix_hbase_test, key1,cf2:age,18 put phoenix_hbase_test, key2,cf1:name,lisi put phoenix_hbase_test, key2,cf2:age,26 put phoenix_hbase_test, key3,cf1:name,c…

node.js模块和包

概念:模块(Module)和包(Package)是Node.js最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、分装、然后组合起来。模块正式为了实现这种方式而诞生,在浏览器JavaScript中,脚本模块的拆分和组…

C++面试/技巧(四)

我们老师那个时候就唧唧歪歪的说不要写精通……这了那了的。但是经过我的个人实践才发现,不管你写什么,别人问到你简历上你提到的东西时你能回答上来。别你写着精通某个技术,别人问你时你却说我不是很了解只是知道一点或干脆说不会&#xff0…

Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server

Phoenix链接异常,报错如下 0: jdbc:phoenix:xxx:2181:/hbase> Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server. (state43M10,code7…

node.js包管理器和代码调式

一、如何使用包管理器 Node.js包管理器,即npm是Node.js官方提供的包管理工具,它已经成了Node.js包的标准发布平台,用于Node.js包的发布、传播、依赖控制。(1)获取一个包 npm [install/i] [package_name] 例如安装express包:…

C++面试(五)

一. 笔试题. 有考关于SIZEOFC多态.虚函数内存泄露.把一串字符串.>0放左边,小于0的放右边.EXIT() 跟 _EXIT()的区别C怎样才能实现一个类只能创建一个实例有一串字符串.将其中的小写字母转为大写字母简述下进程和线程之间的区别. 二、面试题 根据简历过一遍.里面提到的相关技…

phoenix创建索引报错“ Mutable secondary indexes must have the hbase.regionserver.wal.codec property”

phoenix 创建hbase表索引时异常,报错如下 Error: ERROR 1029 (42Y88): Mutable secondary indexes must have the hbase.regionserver.wal.codec property set to org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec in the hbase-sites.xml of every …

node.js全局对象和全局变量

概念:所有属性都可以在程序的任何地方访问,即全局变量。在JavaScript中,通常window是全局对象,而Node.js的全局对象是global,所有全局变量都是global对象的属性,如:console、process等。一、全局…

软件项目开发流程

需求分析 1.相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。[1]2.系统分析员深…

node.js util全局变量和事件驱动events

一、util全局变量 1.util.inherits(constructor,superConstructor)此方法是一个实现对象间原型继承的函数。javaScript通过原型赋值来实现继承,细节可参考云哥JS高级视频(原型)。案例看 util/inherits.js定义了一个基础对象Base,原型方法为showName&…

Phoenix 关联查询异常 , MaxServerCacheSizeExceededException phoenix.query.maxServerCacheBytes

参数配置说明:http://phoenix.apache.org/tuning.html Join:http://phoenix.apache.org/joins.html 从设计角度来讲,尽可能的不使用phoenix进行关联查询,速度比直接根据条件查询慢很多很多 测试关联,异常如下 Error:…

面试时,你会问面试官哪些问题?

明天又要去参加一次面试。每次面试的时候,面试官都会在最后给面试者一些时间,来问问题。这是个非常好的机会,能按照自己的思路,来了解职位、技术、企业文化、福利待遇、企业状况和前景等情况,以弥补前面面试过程中没有…

Phoenix 原理 以及 Phoenix在HBase中的应用

一、前言 业务使用HBase已经有一段时间了,期间也反馈了很多问题,其中反馈最多的是HBase是否支持SQL查询和二级索引,由于HBase在这两块上目前暂不支持,导致业务在使用时无法更好的利用现有的经验来查询HBase。虽然HBase本身不支持…

node.js文件操作

介绍:fs模块是文件操作的封装,它提供了文件的读取,写入,更名,删除,遍历目录,链接POSIX文件系统操作。与其他模块不同的是,fs模块中所有的操作都提供了异步和同步两个版本&#xff0c…

Undo/Redo框架实现

http://www.cnblogs.com/wanghui9072229/archive/2011/08/29/2158960.html

phoenix 使用详细介绍 创建二级索引

phoenix 关联hbase 基本使用参考:https://blog.csdn.net/zhangshenghang/article/details/97491597 Phoenix 创建二级索引 hbase中有表test_article ,在表空间 test_ns ,列簇 fn 下有字段 url , text , uid ,name 连接phoenixphoenix-sqlline.py hostname:2181:/hb…

node.js详解Http服务器

概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端。http.server是一个基于事件的HTTP服务器。内部有C实现。接口由JavaScript封装。http.request则是一个HTTP客户端工具。用户向服务器发送请求。一、HTTP服务器 http.Server实现的…

C++面试(六)

二. 面试题 1.自我介绍 2.TCP和UDP的区别 3.简述下项目的流程