【ODPS】阿里云ODPS中带分区的表操作
1.创建分区表:
分区表有自己的分区列,而分区表则没有。
public static void createTableWithPartition(Odps odps, String createTableName)
throws Exception {
Tables tables = odps.tables();// /获取表示ODPS全部Table的集合对象
boolean a = tables.exists(createTableName);// 推断指定表test_table_jyl是否存在
if (a) {
System.out.println("指定表存在");
Table table = tables.get(createTableName);
tables.delete(createTableName);//存在就删除
} else {
System.out.println("指定表不存在");
}
System.out.println("-------------------------------------------------"); /* 创建表 */
if (tables.exists(createTableName)) {
System.out.println("指定表存在,无法创建");
} else {
System.out.println("指定表不存在,能够创建");
/* TableSchema表示ODPS中表的定义 */
TableSchema tableSchema = new TableSchema();
/* 加入列 */
Column col; // Column表示ODPS中表的列定义
col = new Column("id", OdpsType.STRING, "ID");
tableSchema.addColumn(col);
col = new Column("name", OdpsType.STRING, "姓名");
tableSchema.addColumn(col);
col = new Column("sex", OdpsType.BIGINT, "性别");
tableSchema.addColumn(col);
col = new Column("birthday", OdpsType.DATETIME, "生日");
tableSchema.addColumn(col); /* 加入分区列 */
col = new Column("province ", OdpsType.STRING, "省(分区列)");
tableSchema.addPartitionColumn(col); tables.create(createTableName, tableSchema);//创建表
System.out.println("表【" + createTableName + "】创建成功");
}
System.out.println("-------------------------------------------------"); }
2.分区表数据上传:
分区表上传数据必须指定分区。所以上传数据前必须保证存在分区,不存在就创建一个,创建分区有两种方法
/*PartitionSpec类表示一个特定分区的定义*/
String partitionColumn="province";//表中的分区列
/*第一种,直接调用带參构造函数,
* 參数格式:分区定义字符串。比方: pt='1',ds='2'
*/
PartitionSpec partitionSpec1 = new PartitionSpec(partitionColumn+"='hubei'"); /*另外一种,调用布带參数构造函数,再调用队形set方法。 */
PartitionSpec partitionSpec2 = new PartitionSpec();
partitionSpec2.set(partitionColumn, "hubei");
TableTunnel类中有两个创建创建上传会话方法:
createUploadSession
public TableTunnel.UploadSession createUploadSession(String projectName,
String tableName)
throws TunnelException
- 在非分区表上创建上传会话
-
- Parameters:
projectName- Project名称tableName- 表名,非视图- Returns:
TableTunnel.UploadSession- Throws:
TunnelException
createUploadSession
public TableTunnel.UploadSession createUploadSession(String projectName,
String tableName,
PartitionSpec partitionSpec)
throws TunnelException
- 在分区表上创建上传会话
注: 分区必须为最末级分区,如表有两级分区pt,ds, 则必须所有指定值, 不支持仅仅指定当中一个值
- Parameters:
projectName- Project名tableName- 表名,非视图partitionSpec- 指定分区PartitionSpec- Returns:
TableTunnel.UploadSession- Throws:
TunnelException
分区表必须使用带分区的构造方法。还必须保证该分区存在,否则会报异常。
public static void uploadDataToYun(Odps odps, String project, String tableName)
throws Exception {
TableTunnel tunnel = new TableTunnel(odps);
tunnel.setEndpoint(TUNNEL_URL);// 设置TunnelServer地址,没有设置TunnelServer地址的情况下自己主动选择 /*PartitionSpec类表示一个特定分区的定义*/
String partitionColumn="province";//表中的分区列
PartitionSpec partitionSpec = new PartitionSpec();
partitionSpec.set(partitionColumn, "hubei"); Table table = odps.tables().get(tableName);//获取当前表
boolean a= table.hasPartition(partitionSpec);//推断上述定义分区在表中是否存在
if(a){
System.out.println("分区已经存在,能够直接上传数据");
}else{
System.out.println("分区不存在,先创建分区再上传数据");
table.createPartition(partitionSpec);
} /*在分区表上创建上传会话*/
TableTunnel.UploadSession uploadSession = tunnel.createUploadSession(
project, tableName,partitionSpec); RecordWriter rw = uploadSession.openRecordWriter(1);
Column[] columns = new Column[4];
columns[0] = new Column("id", OdpsType.STRING);
columns[1] = new Column("name", OdpsType.STRING);
columns[2] = new Column("sex", OdpsType.BIGINT);
columns[3] = new Column("birthday", OdpsType.DATETIME);
Record r = new ArrayRecord(columns); r.setString("id", "3");
r.setString("name", "name3");
r.setBigint("sex", (long) 2);
Date date = new Date();
r.setDatetime("birthday", date);
rw.write(r);
rw.close();//一定要close,不然无法commit Long[] blocks = uploadSession.getBlockList();
uploadSession.commit(blocks);
System.out.println("数据上传成功");
}
3.測试类:
private static final String ACCESS_ID = "***********";
private static final String ACCESS_KEY = "***************";
private static final String PROJECT_NAME = "*************";
private static final String TUNNEL_URL = "http://dt.odps.aliyun.com";
private static final String ODPS_URL = "http://service.odps.aliyun.com/api"; public static void main(String args[]) throws Exception { /* 先构建阿里云帐号 */
Account account = new AliyunAccount(ACCESS_ID, ACCESS_KEY); /* Odps类是ODPS SDK的入口 */
Odps odps = new Odps(account);
odps.setDefaultProject(PROJECT_NAME);// 指定默认使用的Project名称
odps.setEndpoint(ODPS_URL);// 设置ODPS服务的地址 String tableName="test_table_jyl";
/*创建带分区的表*/
createTableWithPartition(odps,tableName); /*上传数据*/
uploadDataToYun(odps, PROJECT_NAME, tableName);
}
【ODPS】阿里云ODPS中带分区的表操作的更多相关文章
- 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...
- 阿里云centos中mysql的安装及一些常识知识
------------------------------------------------------------------- 阿里云centos中mysql的安装 工具WinSCP v ...
- 使用Navicat连接阿里云服务器中的Mysql数据库
1.首先将阿里云服务器中的安全组添加上Mysql的端口3306,如下图所示: 步骤就是进入到阿里云的官网,点击右上角控制台,在左边选择云服务器ECS--->实例 点击图中的管理按钮,然后选择本实 ...
- 第69节:Java中数据库的多表操作
第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...
- 阿里云ODPS <====>蚂蚁大数据
1.命令行客户端工具的安装参考文档:http://repo.aliyun.com/odpscmd/?spm=a2c4g.11186623.2.17.5c185c23zHshCq 2.创建和查看表:ht ...
- 阿里云卸载自带的JDK,安装JDK完成相关配置
0.预备工作 笔者的云服务器购买的是阿里云的轻量应用服务器,相比于云服务器ECS,轻量应用服务器是固定流量但是网络带宽较高,对于服务器来说,网络带宽是非常昂贵的,而带宽也决定了你的应用访问的流畅度,带 ...
- 重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB
摘要:POLARDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库,其最大的特色是计算节点与存储节点分离,借助优秀的RDMA网络以及最新的块存储技术.POLARDB不但满足 ...
- 给阿里云主机添加swap分区,解决问题:c++: internal compiler error: Killed (program cc1plus)
前言 今天安装spdlog,一个快速得C++日志库,按照文档步骤,不料出现了一堆错误,像c++: internal compiler error: Killed (program cc1plus)等一 ...
- 阿里云服务器CentOS7怎么分区格式化/挂载硬盘
一.在阿里云上购买了服务器的硬盘后就可以操作了,先看看硬盘情况: 硬盘vda是系统盘:vdb是在阿里云后台购买的另一块硬盘. 第一次使用要分区:fdisk /dev/vdb1 在提示符下依次输入:n+ ...
随机推荐
- Struts2之一 初体验
Struts2 框架是基于MV模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的. 01.需要在we ...
- iOS - UITableView 多选功能实现
:自定义Cell中的代码 #import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property(nonatomic ...
- MariaDB常用命令手记
创建用户命令 mysql>create user username@localhost identified by 'password'; 直接创建用户并授权的命令 mysql>grant ...
- html5——多列布局
基本概念 1.多列布局类似报纸或杂志中的排版方式,上要用以控制大篇幅文本. 2.跨列属性可以控制横跨列的数量 /*列数*/ -webkit-column-count: ; /*分割线*/ -webki ...
- 图论 Make Unique:有向图和无向图的一些算法
计算机科学入门资料之一的<算法与数据结构-C语言版>,覆盖了基础算法的几乎所有分支,其中的一个典型分支为图理论. 一个简介:图论基础-图数据结构基础 一个简洁的博客:图论基础,简列一本书 ...
- (原创)如何对APP服务端进行压力测试
版权声明:本文为原创文章,转载请先联系并标明出处 APP性能测试分为客户端性能测试和服务端性能测试,客户端的性能测试主要是针对启动快慢.耗电量.耗流量.内存使用等指标进行评估,目前主流的APP客户端性 ...
- 脚本添加删除nginx配置中的内容
[root@nodejs script]# more editnginx.sh #!/bin/bash # function back_check(){ # 备份配置和覆盖配置文件 cp -rf /e ...
- Cookie的实现
Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server.同时在浏览器允许脚本执行的情况下,Cookie是可以被Jav ...
- c#遍历注册表
--来自 https://blog.csdn.net/wenchangren/article/details/751863using System; using Microsoft.Win32; us ...
- 一个数据去重sql
参考: https://www.jb51.net/article/129656.htm DELETE testcaseFROM testcase, ( SELECT max(id) id, a ...