在单位里使用到了HANA内存数据库做数据加速。HANA数据库基于时髦的内存计算技术,的确在模型处理速度上面提升很快,同时HANA有配套对HANA Studio开发工具,图形化建模大大的加快了模型开发的效率,目前数据从各个业务系统经过ETL过程进入到HANA,在前期建立的规范作为管理依据,数据的存放、字段的命名、以及模型的分层,凡是进入HANA的数据都可以得到有序的使用和管理,建完模型之后在配以大数据分析工具,可以挖掘数据的价值。

HANA支持手工建表,除了通过ETL工具把数据迁移到HANA中,还可以通过手工导入数据的方式将数据迁移到HANA中,目的都是希望运用到HANA优秀的内存计算性能。但是业务用户是没有权限直接操作ETL工具和在HANA Studio工具上使用数据导入功能的,从业务用户的角度来看,为了能够让业务人员直接将数据写入到HANA,需要开发一个客户化的操作界面给业务人员使用。

我是在一开始进入HANA项目时,尝试过使用PHP语言编写程序直接读写HANA数据,目前PHP环境下没有相应的HANA数据驱动,只可以通过ODBC连接的方式来连接HANA,在网上搜索了一些资料,显示是可以读取,但是我在测试的时候出现了字符编码的问题,读取到的中文字符显示为乱码,我推测到是数据编码的原因,但是开发服务器是centos的系统,尝试了多种方法,都不能使得设置的编码格式生效,因此最终无法成功通过PHP来操作HANA数据。

实际上,长期以来,我都是使用PHP来开发的,在进入到单位信息部门,开始接触大数据方面的项目之后,也逐渐的开始学习Python,R语言以及Java,当然在有基础的条件下,学习新的语言相对比较快。虽然Python也有许多的Web框架,但是在开发web动态网站程序是还是推荐Java和php。

在我管理的一个大数据可视化系统,报表的元数据是手工维护的,那么是保存在HANA数据库里面,随着以后报表数量的增多,维护这些元数据也是不小的工作量,因此决定开发一个这样的工具,方便于任何人任意时间都可以录数据。

使用的是JFinal框架,JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。这些特性刚好适合我的需求,不用花太多时间去学习框架的使用,这样学习成本会低一些,能够快速的使用到自己实际的项目中。
找到HANA的数据驱动jar包,放入项目中,通过下面的代码来连接HANA数据库:

private static final String DRIVER = "com.sap.db.jdbc.Driver";
private static final String URL = "jdbc:sap://10.16.xx.xx:30015?reconnect=true";
private static String user = "username";
private static String pwd = "password";

public static Connection getConn() throws ClassNotFoundException, SQLException {
    Class.forName(DRIVER);
    return DriverManager.getConnection(URL, user, pwd);

}

public static void release(Connection conn, java.sql.Statement statement) throws SQLException {
    if (statement != null) {
        statement.close();
    }
    if (conn != null) {
        conn.close();
    }
}

读取HANA数据代码如下:

Connection conn = HanaConn.getConn();
String Sql =  "SELECT * FROM MANUALDATA.Z_REPORT_LIST";
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(Sql); 
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int colNum = resultSetMetaData.getColumnCount();
ArrayList<Map<String, Object>> arrayList = new ArrayList<Map<String,Object>>();
while (resultSet.next()) {
    HashMap<String, Object> rowData = new HashMap<String,Object>();
    for(int i=1;i<=colNum;i++) {
        rowData.put(resultSetMetaData.getColumnName(i), resultSet.getObject(i));
    }
    arrayList.add(rowData); 
}
HanaConn.release(conn,statement);
setAttr("Reports", arrayList);
render("index.html");

最后的两句是JFinal框架的模板功能,能够将数据输出到web页面上。
在java下操作HANA的数据相对要方便许多,主要在数据驱动上不会用问题。

标签: PHP, java, HANA

添加新评论