前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021年大数据HBase(十一):Apache Phoenix的视图操作

2021年大数据HBase(十一):Apache Phoenix的视图操作

作者头像
Lansonli
发布2021-10-11 16:31:42
1.2K0
发布2021-10-11 16:31:42
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

Apache Phoenix的视图操作

一、应用场景

因为我们之前已经创建了 MOMO_CHAT:MSG 表,而且数据添加的方式都是以PUT方式原生API来添加的。故此时,我们不再需要再使用Phoenix创建新的表,而是使用Phoenix中的视图,通过视图来建立与HBase表之间的映射,从而实现数据快速查询。

二、视图介绍

我们可以在现有的HBase或Phoenix表上创建一个视图。表、列蔟和列名必须与现有元数据完全匹配,否则会出现异常。当创建视图后,就可以使用SQL查询视图,和操作Table一样。

三、语法说明

代码语言:javascript
复制
create view "my_hbase_table" (
  rowkey varchar primary key,
  列族.列名1 数据类型,
  列族.列名2 数据类型,
  ....
)

考虑以下几个问题:

  1. 视图如何映射到HBase的表? 视图的名字必须是:命名空间.表名
  2. 视图中的列如何映射到HBase的列蔟和列?  列名必须是:列蔟.列名
  3. 视图中的类如何映射到HBase的ROWKEY? 指定某个列为primary key,自动映射ROWKEY

四、建立MOMO_CHAT:MSG的视图

1、参考SQL语句

-- 创建MOMO_CHAT:MSG视图

代码语言:javascript
复制
CREATE VIEW
IF
	NOT EXISTS "MOMO_CHAT"."MSG" (
		"pk" VARCHAR PRIMARY KEY,  -- 指定ROWKEY映射到主键
		"C1"."msg_time" VARCHAR,
		"C1"."sender_nickyname" VARCHAR,
		"C1"."sender_account" VARCHAR,
		"C1"."sender_sex" VARCHAR,
		"C1"."sender_ip" VARCHAR,
		"C1"."sender_os" VARCHAR,
		"C1"."sender_phone_type" VARCHAR,
		"C1"."sender_network" VARCHAR,
		"C1"."sender_gps" VARCHAR,    "C1"."receiver_nickyname" VARCHAR,
		"C1"."receiver_ip" VARCHAR,
		"C1"."receiver_account" VARCHAR,
		"C1"."receiver_os" VARCHAR,
		"C1"."receiver_phone_type" VARCHAR,
		"C1"."receiver_network" VARCHAR,
		"C1"."receiver_gps" VARCHAR,
		"C1"."receiver_sex" VARCHAR,
		"C1"."msg_type" VARCHAR,
	  "C1"."distance" VARCHAR 
	);

2、尝试查询一条数据

代码语言:javascript
复制
SELECT * FROM "MOMO_CHAT"."MSG" LIMIT 1;

五、完成陌陌查询案例

1、需求

根据日期、发送人账号、接收人账号查询历史消息

2、编写SQL实现陌陌案例

代码语言:javascript
复制
SELECT
	C1."sender_account",
	C1."receiver_account",
	C1."msg_time",
	C1."message" 
FROM
	MOMO_CHAT.MSG 
WHERE
	substr( C1."msg_time", 0, 10 ) = '2021-07-16' 
	AND C1."sender_account" = '18461866438' 
	AND C1."receiver_account" = '13641568674';

3、使用java连接Phoenix: 

代码语言:javascript
复制
@Override    
public List<Msg> getMessage(String date, String sender, String receiver) throws Exception {
        Class.forName(PhoenixDriver.class.getName());         
        Connection connection = DriverManager.getConnection("jdbc:phoenix:node1:2181");
        PreparedStatement ps = connection.prepareStatement("SELECT * FROM MOMO_CHAT.MSG T WHERE substr(\"msg_time\", 0, 10) = ? " 
        	+ "AND T.\"sender_account\" = ? " 
        	+ "AND T.\"receiver_account\" = ? ");
        ps.setString(1, date);         
        ps.setString(2, sender);
        ps.setString(3, receiver);        
        ResultSet rs = ps.executeQuery();        
        List<Msg> msgList = new ArrayList<>();
        while(rs.next()) {            
        	Msg msg = new Msg();            
        	msg.setMsg_time(rs.getString("msg_time"));            
        	msg.setSender_nickyname(rs.getString("sender_nickyname"));            
        	msg.setSender_account(rs.getString("sender_account"));            
        	msg.setSender_sex(rs.getString("sender_sex"));            
        	msg.setSender_ip(rs.getString("sender_ip"));            
        	msg.setSender_os(rs.getString("sender_os"));            
        	msg.setSender_phone_type(rs.getString("sender_phone_type"));            
        	msg.setSender_network(rs.getString("sender_network"));            
        	msg.setSender_gps(rs.getString("sender_gps"));            
        	msg.setReceiver_nickyname(rs.getString("receiver_nickyname"));            
        	msg.setReceiver_ip(rs.getString("receiver_ip"));            
        	msg.setReceiver_account(rs.getString("receiver_account"));            
        	msg.setReceiver_os(rs.getString("receiver_os"));            
        	msg.setReceiver_phone_type(rs.getString("receiver_phone_type"));            
        	msg.setReceiver_network(rs.getString("receiver_network"));            
        	msg.setReceiver_gps(rs.getString("receiver_gps"));            
        	msg.setReceiver_sex(rs.getString("receiver_sex"));            
        	msg.setMsg_type(rs.getString("msg_type"));            
        	msg.setDistance(rs.getString("distance"));            
        	msgList.add(msg);        
        }
        return msgList;    
}

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Phoenix的视图操作
    • 一、应用场景
      • 二、视图介绍
        • 三、语法说明
          • 四、建立MOMO_CHAT:MSG的视图
            • 1、参考SQL语句
            • 2、尝试查询一条数据
          • 五、完成陌陌查询案例
            • 1、需求
            • 2、编写SQL实现陌陌案例
            • 3、使用java连接Phoenix: 
        相关产品与服务
        TDSQL MySQL 版
        TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档