Apache Phoenix的Array类型
Apache Phoenix支持JDBC ARRAY类型,任何原生的数据类型就可以在ARRAY中使用。下面我介绍一下在创建的表中使用ARRAY类型。
先看一下创建表的SQL语句:
CREATE TABLE regions (
region_name VARCHAR,
zips VARCHAR ARRAY[10],
CONSTRAINT pk PRIMARY KEY (region_name)
);
或者创建ARRAY类型时不指定大小,如下:
CREATE TABLE regions (
region_name VARCHAR,
zips VARCHAR[],
CONSTRAINT pk PRIMARY KEY (region_name)
);
接着我们插入一些数据:
UPSERT INTO regions(region_name,zips) VALUES('SFBay Area',ARRAY['94115','94030','94125']);
UPSERT INTO regions(region_name,zips) VALUES('PalaArea',ARRAY['94030','98030','95125']);
或者通过JDBC编程方式插入数据:
package com.pingan.phoenix;
import Java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnPhoenixOp {
public static void main(String[] args) throws SQLException {
Statement stmt = null;
ResultSet rset = null;
PreparedStatement stmt2 = null;
Connection conn = DriverManager.getConnection("jdbc:phoenix:10.20.18.24:2181:/hbase114");
stmt = conn.createStatement();
stmt.executeUpdate("DROPTABLE IF EXISTS regions");
stmt.executeUpdate("CREATETABLE regions (region_name VARCHAR, zips VARCHAR[], CONSTRAINT pk PRIMARY KEY(region_name))");
stmt.executeUpdate("UPSERTINTO regions(region_name,zips) VALUES('SF Bay Area', ARRAY['94115','94030','94125'])");
conn.commit();
stmt2 = conn.prepareStatement("UPSERT INTO regions VALUES(?,?)");
stmt2.setString(1,"Pala Area");
String[] zips = new String[] {"94030","98030","95125"};
Array array = conn.createArrayOf("VARCHAR", zips);
stmt2.setArray(2, array);
stmt2.executeUpdate();
conn.commit();
stmt2 = conn.prepareStatement("SELECT region_name FROM regions WHERE zips[1] = '94030' OR zips[2] ='94030' OR zips[3] = '94030'");
rset = stmt2.executeQuery();
while (rset.next()) {
System.out.println(rset.getString("region_name"));
}
stmt2.close();
stmt.close();
conn.close();
}
}
我们查看一下regions的全部数据:
过滤部分数据:
查询Array的部分内容:
SELECT zips[1] FROM regions WHERE region_name = 'SF Bay Area';
结果:
+---------------------------------+
| ARRAY_ELEM(ZIPS, 1) |
+----------------------------------+
| 94115 |
+----------------------------------+
SELECT region_name FROM regions WHERE zips[1] = '94030' OR zips[2] = '94030' OR zips[3] = '94030';
结果为:
+-------------------------+
| REGION_NAME |
+-------------------------+
| Pala Area |
| SF Bay Area |
+-------------------------+
查看Array中元素个数:
SELECT ARRAY_LENGTH(zips) FROM regions;
结果为:
+---------------------------------+
| ARRAY_LENGTH(ZIPS) |
+----------------------------------+
| 3 |
| 3 |
+----------------------------------+
在Array中搜索相关内容,可以使用ANY和ALL内置函数:
SELECT region_name FROM regions WHERE '94030' = ANY(zips);
返回:
+--------------------------+
| REGION_NAME |
+--------------------------+
| Pala Area |
| SF Bay Area |
+-------------------------+
SELECT region_name FROM regions WHERE '94030' = ALL(zips);
没有结果。
上面使用ANY函数的SQL等价于:
SELECT region_name FROM regions WHERE zips[1] = '94030' OR zips[2] = '94030' OR zips[3] = '94030';
使用ALL函数的SQL等价于:
SELECT region_name FROM regions WHERE zips[1] = '94030' AND zips[2] = '94030' AND zips[3] = '94030';
Apache Phoenix的Array类型的更多相关文章
- phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported
今天用phoenix报如下错误: 主要原因: hbase的表中某字段类型是array,phoenix目前不支持此类型 解决方法: 复制替换phoenix包的cursor文件 # Copyright 2 ...
- Apache Phoenix系列 | 从入门到精通(转载)
原文地址:https://cloud.tencent.com/developer/article/1498057 来源: 云栖社区 作者: 瑾谦 By 大数据技术与架构 文章简介:Phoenix是一个 ...
- Apache Phoenix基本操作-1
本篇我们将介绍phoenix的一些基本操作. 1. 如何使用Phoenix输出Hello World? 1.1 使用sqlline终端命令 sqlline.py SZB-L0023780:2181:/ ...
- Apache Phoenix基本操作-2
1. 如何映射一个Phoenix的表到一个Hbase的表? 你可以通过Create table/create view DDL语句在一个已经存在的hbase表上创建一个Phoenix表或者视图.对于C ...
- JS高程5.引用类型(2)Array类型
Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...
- 5.2 Array类型介绍
Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...
- JavaScript中Array类型方法总结
Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...
- Object类型与Array类型
总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...
- [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析
saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...
随机推荐
- c++ 继承,组合
.什么是继承 A继承B,说明A是B的一种,并且B的所有行为对A都有意义 eg:A=WOMAN B=HUMAN A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟不会. .什么是组合 若在逻辑上A是B的“ ...
- Linux 并发服务器雏形总结
如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示.示意图如下: 所谓并发服务器:就是一个服务器可以同时为 ...
- 【BZOJ4448】[Scoi2015]情报传递 主席树+LCA
[BZOJ4448][Scoi2015]情报传递 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员能有若干名(可能没有)下线,除1名大头 ...
- 《从零开始学Swift》学习笔记(Day 46)——下标重写
原创文章,欢迎转载.转载请注明:关东升的博客 下标是一种特殊属性.子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器. 下面看一个示例 ...
- redis集群报错,(error) MOVED 15495 127.0.0.1:7003
节点会对命令请求进行分析和key的slot计算,并且会查找这个命令所要处理的键所在的槽.如果要查找的哈希槽正好就由接收到命令的节点负责处理, 那么节点就直接执行这个命令. 另一方面, 如果所查 ...
- 系统盘的消耗 谨慎的日志存储到系统盘+日志级别!! 569 error_log = /usr/local/php7/logs/php-error.log 26 error_log = /usr/local/php7/logs/fpm_error_log
案例: 系统盘一夜之间骤增近20G nginx + php-fpm cat /usr/local/nginx/conf/nginx.conf 查看对请求的处理 4个配置文件 /usr/local/n ...
- entropy 压缩信息的熵更加高 实际上英文文本的熵大概只有4.7比特
https://en.wikipedia.org/wiki/Entropy_(information_theory) https://zh.wikipedia.org/wiki/熵(信息论) 熵的概念 ...
- puppeteer,webdriverio, chrome webdriver
http://www.r9it.com/20171106/puppeteer.html Puppeteer 至少需要 Node v6.4.0,如要使用 async / await,只有 Node v7 ...
- Service 事务(JdbcUtils 升级)
1. DAO 事务 // 在 DAO 中处理事务真是"小菜一碟" public void xxx(){ Connection con = null; try{ con = Jdbc ...
- RHEVM 相关介绍
基础概念: RHEV-H RHEVH(Redhat Enterprise Virtuallization Hypervisor),它是运行虚拟机所需的最低操作系统.RHEVH由作为RHEL(Redha ...