MaxCompute Lightning是MaxCompute产品的交互式查询服务,支持以PostgreSQL协议及语法连接访问Maxcompute项目,让您使用熟悉的工具以标准 SQL查询分析MaxCompute项目中的数据,快速获取查询结果。
很多开发者希望利用Lightning的特性来开发数据应用,本文将结合示例来介绍Java和Python如何连接访问Lightning进行应用开发(参考时需要替换为您项目所在region的Endpoint及用户认证信息)。
一、Java使用JDBC访问Lightning
示例如下:

import java.sql.*;public class Main {private static Connection connection;public static void main(String[] args) throws SQLException {String url = "jdbc:postgresql://lightning.cn-shanghai.maxcompute.aliyun.com:443/your_project_name?prepareThreshold=0&sslmode=require";String accessId = "<your_maxcompute_access_id>";String accessKey = "<your_maxcompute_access_key>";String sql = "select * from dual";try {Connection conn = getCon(url, accessId, accessKey);Statement st = conn.createStatement();System.out.println("Send Lightning query");ResultSet rs = st.executeQuery(sql);while (rs.next()) {System.out.println(rs.getString(1)+ "\t");}System.out.println("End Lightning query");conn.close();} catch (SQLException e) {e.printStackTrace();}}public static Connection getCon(String lightningsHost, String lightningUser, String lightningPwd) {try {if (connection == null || connection.isClosed()) {try {Class.forName("org.postgresql.Driver").newInstance();DriverManager.setLoginTimeout(1);connection = DriverManager.getConnection(lightningsHost, lightningUser, lightningPwd);} catch (Exception ex) {ex.printStackTrace();}}} catch (Exception ex) {ex.printStackTrace();}return connection;}
}复制代码

二、Java使用druid访问Lightning
1.pom依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.23</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>9.3-1101-jdbc4</version></dependency>
复制代码

2.spring配置

    <bean id="LightningDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="url" value="jdbc:postgresql://lightning.cn-shanghai.maxcompute.aliyun.com:443/project_name?prepareThreshold=0&sslmode=require”/> <!--替换成自己project所在region的Endpoint—><property name="username" value=“访问用户的Access Key ID"/><property name="password" value="访问用户的Access Key Secret"/><property name="driverClassName" value="org.postgresql.Driver"/><property name="dbType" value="postgresql"/><property name="initialSize" value="1" />  <property name="minIdle" value="1" /><property name="maxActive" value="5" />  <!—Lightning服务每个project的连接数限制20,所以不要配置过大,按需配置,否则容易出现query_wait_timeout错误 --><!--以下两个配置,检测连接有效性,修复偶尔出现create connection holder error错误 --><property name="testWhileIdle" value="true" /><property name="validationQuery" value="SELECT 1" /></bean><bean class="com.xxx.xxx.LightningProvider"><property name="druidDataSource" ref="LightningDataSource"/></bean>复制代码

3.代码访问

public class LightningProvider {DruidDataSource druidDataSource;/*** 执行sql* @param sql* @return* @throws Exception*/public void execute(String sql) throws SQLException {DruidPooledConnection connection = null ;Statement st = null;try{connection = druidDataSource.getConnection();st = connection.createStatement();ResultSet resultSet = st.executeQuery(sql);//对返回值的解析和处理的代码//按行处理,每行的数据放到一个map中ResultSetMetaData metaData = resultSet.getMetaData();int columnCount = metaData.getColumnCount();List<LinkedHashMap> rows = Lists.newArrayList();while(resultSet.next()){LinkedHashMap map = Maps.newLinkedHashMap();for(int i=1;i<=columnCount;i++){String label = resultSet.getMetaData().getColumnLabel(i);map.put(label,resultSet.getString(i));}rows.add(map);}   }catch (Exception e){e.printStackTrace();}finally {try {if(st!=null) {st.close();}} catch (SQLException e) {e.printStackTrace();}try {if(connection!=null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}}
}复制代码

三、Python使用pyscopg2访问Lightning
示例如下:

#!/usr/bin/env python
# coding=utf-8import psycopg2
import sysdef query_lightning(lightning_conf, sql):"""Query data through Lightning by sqlArgs:lightning_conf: a map contains settings of 'dbname', 'user', 'password', 'host', 'port'sql:  query submit to LightningReturns:result: the query result in format of list of rows"""result = Noneconn = Noneconn_str = Nonetry:conn_str = ("dbname={dbname} ""user={user} ""password={password} ""host={host} ""port={port}").format(**lightning_conf)except Exception, e:print >> sys.stderr, ("Invalid Lightning' configuration ""{}".format(e))sys.exit(1)try:conn = psycopg2.connect(conn_str)conn.set_session(autocommit=True) # This will disable transaction# started with keyword BEGIN,# which is currently not# supported by Lightning’ public servicecur = conn.cursor()# execute Lightning' querycur.execute(sql)# get resultresult = cur.fetchall()except Exception, e:print >> sys.stderr, ("Failed to query data through ""Lightning: {}".format(e))finally:if conn:conn.close()return resultif __name__ == "__main__":# step1. setup configurationlightning_conf = {"dbname": “your_project_name”,"user": "<your_maxcompute_access_id>", "password": "<your_maxcompute_access_key>", "host": "lightning.cn-shanghai.maxcompute.aliyun.com",  #your region lightning endpoint"port": 443}# step2. issue a queryresult = query_lightning(lightning_conf, "select * from test”)# step3. print resultif result:for i in xrange(0, len(result)):print "Got %d row from Lightning:%s" % (i + 1, result[i])复制代码

四、Python使用ODBC访问Lightning
您需要现在电脑上安装并和配置odbc驱动。代码示例如下:

import pyodbc
conn_str = ("DRIVER={PostgreSQL Unicode};""DATABASE=your_project_name;""UID=your_maxcompute_access_id;""PWD=your_maxcompute_access_key;""SERVER=lightning.cn-shanghai.maxcompute.aliyun.com;" #your region lightning endpoint"PORT=443;")
conn = pyodbc.connect(conn_str)
crsr = conn.execute("SELECT * from test”)
row = crsr.fetchone()
print(row)
crsr.close()
conn.close()复制代码

由于Lightning提供了PostgreSQL兼容的接口,您可以像开发PostgreSQL的应用一样开发Lightning应用程序。

使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发相关推荐

  1. 微信小程序 科学计算器(微信小程序+java+python)

    微信小程序之科学计算器 (微信小程序+java+python) 先把自己的小程序和页面贴出来 1.前后端实现步骤: 1.前端采用的就是微信小程序开发工具,后端采用的是以springboot为基础,调用 ...

  2. python数据分析模块包括_数据开发必会 | Python数据分析模块

    作为数据开发,Python强大的数据分析模块还是必须要会的,横向拓展数据分析与挖掘技术栈也是很有必要的.本文将对Pandas.NumPy.SciPy.Matplotlib等分析挖掘库的安装和使用进行简 ...

  3. uniapp+vue微信小程序java python物资物品租赁系统php

    系统管理也都将通过计算机进行整体智能化操作,对于社团物品租赁所牵扯的管理及数据保存都是非常多的,管理端:首页.个人中心.用户管理.物品类别管理.物品信息管理.租赁订单管理.物品续租管理.物品归还管理. ...

  4. 微信小程序java python node医疗微服务系统医院预约挂号系统

    ,本系统分为用户,管理员,医生三个角色,其中用户可以注册登陆小程序,查看新闻资讯,医生列表,评价医生,医生咨询,提交预约信息,上传健康码:医生可以登陆系统,对用户信息管理,上传自己的医生信息,查看预约 ...

  5. python 访问网页 重定向_Python数据网络采集5--处理Javascript和重定向

    Python数据网络采集5--处理Javascript和重定向 到目前为止,我们和网站服务器通信的唯一方式,就是发出HTTP请求获取页面.有些网页,我们不需要单独请求,就可以和网络服务器交互(收发信息 ...

  6. [学习笔记]黑马程序员python教程

    文章目录 思维导图 Python基础知识图谱 面向对象 SQL入门和实战 Python高阶技巧 第一阶段 第九章:Python异常.模块与包 1.9.1异常的捕获 1.9.1.1 为什么要捕获异常 1 ...

  7. Java后端开发工程师是否该转大数据开发?

    背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我从事java后端开发,对大数据领域工作有些了解,但不深入.本文描述一下我对jav ...

  8. 杭州某知名xxxx公司急招大量java以及大数据开发工程师

    因公司战略以及业务拓展,收大量java攻城狮以及大数据开发攻城狮. 职位信息: java攻城狮: https://job.cnblogs.com/offer/56032 大数据开发攻城狮: https ...

  9. SWIG妙用: MATLAB程序转python和Java库

    1.引言 Python或Java调用MATLAB程序需要安装MATLAB官方提供的支持库(MATLAB Runtime),而且适配的python或JDK版本有限,不方便移植.本文的思路是用MATLAB ...

最新文章

  1. Science长文综述:通过空间斑图形成避免复杂系统崩溃
  2. C++标准库与STL简介
  3. rapidJson输出时 保留小数位
  4. Python pip更换升级源
  5. ios 常用操作-1
  6. python怎么用lambda和map函数_Python之lambda匿名函数及map和filter的用法
  7. POJ 1966 Cable TV Network (最大流最小割)
  8. android 北斗定位代码_iPhone 11 确认支持北斗导航,真相来了!
  9. 如何快速的入门Docker并且实现部署
  10. python的基础_毫无基础的人如何入门 Python ?
  11. 2. Browser 对象 - Window 对象(2)
  12. android遥控器:控制电脑上的暴风影音播放(C#作为服务端)
  13. x2分布临界值表(卡方分布)
  14. win10无法访问共享文件,报出错误代码0x80004005
  15. IPC$入侵的4种方式
  16. 退出qemu_qemu虚拟机的关机方式
  17. 10个问题帮你瞬间化解面试中的尴尬,赢得面试官好感
  18. 归一化数字角频率_数字角频率ω与模拟角频率Ω的理解
  19. android 带刻度的滑动条_Android滚动刻度尺实现
  20. 利用抓包思想实现“优雅”请假

热门文章

  1. mysqlnd--的说明
  2. 用setsockopt()来控制recv()与send()的超时
  3. Spring(二)——Junit测试工具、属性的注入方式、注解
  4. 基于Javaweb的订餐管理系统的介绍和分析
  5. 计算机应用基础教案 马成荣,江苏省职业学校计算机应用基础(马成荣主编)课程两课评比教案:单元教学设计说明...
  6. Hello, World!我的房车编程生活,已经 150 天了
  7. android studio clone 方法不能先用,Android Studio中使用git功能无法clone原因分析
  8. 第四范式与丘成桐北京雁栖湖应用数学研究院签署战略合作协议
  9. 汇编解析(5)-intel的奔4的netburst控制单元技术提高指令处理速度
  10. 【Python】Pandas数据排序实现