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类型的更多相关文章

  1. phoenix 报错:type org.apache.phoenix.schema.types.PhoenixArray is not supported

    今天用phoenix报如下错误: 主要原因: hbase的表中某字段类型是array,phoenix目前不支持此类型 解决方法: 复制替换phoenix包的cursor文件 # Copyright 2 ...

  2. Apache Phoenix系列 | 从入门到精通(转载)

    原文地址:https://cloud.tencent.com/developer/article/1498057 来源: 云栖社区 作者: 瑾谦 By 大数据技术与架构 文章简介:Phoenix是一个 ...

  3. Apache Phoenix基本操作-1

    本篇我们将介绍phoenix的一些基本操作. 1. 如何使用Phoenix输出Hello World? 1.1 使用sqlline终端命令 sqlline.py SZB-L0023780:2181:/ ...

  4. Apache Phoenix基本操作-2

    1. 如何映射一个Phoenix的表到一个Hbase的表? 你可以通过Create table/create view DDL语句在一个已经存在的hbase表上创建一个Phoenix表或者视图.对于C ...

  5. JS高程5.引用类型(2)Array类型

    Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...

  6. 5.2 Array类型介绍

    Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...

  7. JavaScript中Array类型方法总结

    Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...

  8. Object类型与Array类型

    总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...

  9. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析

    saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...

随机推荐

  1. Rikka with Subset

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  2. idea 不能编译生成class文件

    问题:开发工程中将idea中编译输出目录 out 删掉.发现再次编译不能生成class文件 解决方案:settings -> compiler 勾选自动编译选项

  3. IOS开发复习笔记(1)-OC基础知识

    在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下: 1.命名约定 对象类型和名称一致,以免混淆 ...

  4. 解决 request.getInputStream() 只能获取一次body的问题

    问题: 在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数 ...

  5. 001 unique string

    以后坚持每一个星期都写记到算法题,不论简单还是难,纯熟娱乐! 描写叙述: 实现一个算法来推断一个字符串中的字符是否唯一(即没有反复).不能使用额外的数据结构. (即仅仅使用主要的数据结构) 代码: # ...

  6. 解决\build\outputs\apk\dream-debug.apk does not exist on disk错误

    \build\outputs\apk\dream-debug.apk does not exist on disk.错误,apk一直装不到手机里. 最有效的解决方法:Build>Buid APK

  7. App的开发过程

    不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开发过程主要分为以下阶段,本文会按顺序为大家简单地说明: 1.需求梳理.分析 2.产品原型图绘制 3.U ...

  8. spring cloud 使用feign 遇到问题

    spring cloud 使用feign 项目的搭建 在这里就不写了,本文主要讲解在使用过程中遇到的问题以及解决办法 1:示例 @RequestMapping(value = "/gener ...

  9. [String ] StringBuffer VS StringBuilder

    StringBuilder的性能高于StringBuffer,因为StringBuffer是线程安全的. 首先说明一下,一般情况下,字符串相加默认是StringBuilder,但是当数量大于100,或 ...

  10. 第一次java小考心得体会

    本周四Java第一次上课,测试了一个ATM程序,从两点半开始到五点半结束. 整整三个小时,结果怎么说呢,大概可以用惨不忍睹来形容吧. 因为之前有一个测试样卷,以为考试内容不会变的我,只是把学生信息管理 ...