TableAu官方案例,环境设置等

http://onlinehelp.tableau.com/current/api/sdk/zh-cn/help.htm#SDK/tableau_sdk_installing.htm%3FTocPath%3D_____3

功能实现

  1. 将数据库的查询结果生成TDE文件(TableAu数据源)
  2. 并上传至服务器
  3. 可实时替换TableAu Service仪表盘中的数据.

环境设置

需要安装TableAu SDK,否则无法生成TDE文件,异常为:找不到模块
根据系统版本下载SDK,配置环境变量
详情参考上面的连接!

TableAu Jar

#TableAu 需要的Jar包,连接上有下载地址.
jna.jar
tableaucommon.jar
tableauextract.jar
tableauserver.jar

全部代码(供参考)

package com.tenly.common.sql.util;/*** -----------------------------------------------------------------------------* * 该类用与导出TDE文件(TableAu的离线数据格式)* * -----------------------------------------------------------------------------*/
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import com.tableausoftware.TableauException;
import com.tableausoftware.common.Collation;
import com.tableausoftware.common.Result;
import com.tableausoftware.common.Type;
import com.tableausoftware.extract.Extract;
import com.tableausoftware.extract.ExtractAPI;
import com.tableausoftware.extract.Row;
import com.tableausoftware.extract.Table;
import com.tableausoftware.extract.TableDefinition;
import com.tableausoftware.server.ServerAPI;
import com.tableausoftware.server.ServerConnection;public final class CreateTableAuFile {private static Map<String, Type> typeMap=getTypeMap();private static SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");private static Calendar cal = Calendar.getInstance();  /***------------------------------------------------------------------------ *该类用于创建TDE文件中的列*-----------------------------------------------------------------------* @throws Exception */private static TableDefinition makeTableDefinition(String tableName) throws Exception {Connection conn=null;TableDefinition tableDef = new TableDefinition();try{conn= HiveExcutor.getConn();ResultSet set= conn.getMetaData().getColumns(null, null, tableName, null);if(set!=null){tableDef.setDefaultCollation(Collation.EN_GB);while(set.next()){tableDef.addColumn(set.getString("COLUMN_NAME"), typeMap.get(set.getString("TYPE_NAME")));}}}finally{if(conn!=null){conn.close();conn=null;}}return tableDef;}/***------------------------------------------------------------------------ *插入数据*-----------------------------------------------------------------------* @throws Exception */private static void insertData(Table table,String tableName) throws Exception {Connection conn= null;PreparedStatement  ps =null;try{conn= HiveExcutor.getConn();TableDefinition tableDef = table.getTableDefinition();Row row = new Row(tableDef);int countColumn=tableDef.getColumnCount();String column="";if(countColumn==0) return;for (int i = 0; i < countColumn; i++) {column=column+tableDef.getColumnName(i)+",";}column=column.substring(0, column.length()-1);String sql="select "+column+" from "+tableName;ps = conn.prepareStatement(sql);ResultSet resultSet = ps.executeQuery();while(resultSet.next()){for (int i = 0; i < countColumn; i++) {if("INTEGER".equals(tableDef.getColumnType(i).toString())){row.setInteger(i, resultSet.getInt(i+1));}else if("DOUBLE".equals(tableDef.getColumnType(i).toString())){row.setDouble(i, resultSet.getDouble(i+1));}else if("BOOLEAN".equals(tableDef.getColumnType(i).toString())){row.setBoolean(i, resultSet.getBoolean(i+1));}else if("UNICODE_STRING".equals(tableDef.getColumnType(i).toString())){row.setString(i, resultSet.getString(i+1));}else if("DATE".equals(tableDef.getColumnType(i).toString())){cal.setTime(resultSet.getDate(i+1));row.setDate(i, cal.get(cal.YEAR),cal.get(cal.MONTH)+1,cal.get(cal.DAY_OF_MONTH));}}table.insert(row);}}finally{if( ps!=null){ps.close();ps=null;}if(conn!=null) {conn.close();conn=null;}}}/***------------------------------------------------------------------------ *  生成文件的主方法*  文件保存路径在:<项目路径>\WebRoot\TableAuFile*  文件名格式: 2016517TableName.tde*-----------------------------------------------------------------------* @throws Exception */public void createFile(String tableName) throws Exception{String sysName=System.getProperty("os.name").toUpperCase(); String relativelyPath=System.getProperty("user.dir");File file=null;String url=null;String fileName=format.format(new Date())+"-"+tableName+".tde";if(sysName.contains("WINDOW")){relativelyPath=relativelyPath.substring(0,relativelyPath.lastIndexOf("\\bin"));url=relativelyPath+"\\webapps\\gtdss\\WEB-INF\\classes\\TableAuFile";file=new File(url+"\\"+fileName);if(file.exists()){file.delete();}/**Extract为必须的,不可设置其他替代字符*/try ( Extract extract = new Extract(url+"\\"+fileName)) {Table table;if (!extract.hasTable("Extract")) {TableDefinition tableDef = makeTableDefinition(tableName);table = extract.addTable("Extract", tableDef);}else{table = extract.openTable("Extract");}insertData(table,tableName);}}else{//usr/local/tomcat/binSystem.err.println(relativelyPath);System.out.println("/bin");System.err.println(relativelyPath.lastIndexOf("/bin"));relativelyPath=relativelyPath.substring(0,relativelyPath.lastIndexOf("/bin"));url=relativelyPath+"/webapps/gtdss/WEB-INF/classes/TableAuFile";file=new File(url+"/"+fileName);if(file.exists()){file.delete();}/**Extract为必须的,不可设置其他替代字符*/try ( Extract extract = new Extract(url+"/"+fileName)) {Table table;if (!extract.hasTable("Extract")) {TableDefinition tableDef = makeTableDefinition(tableName);table = extract.addTable("Extract", tableDef);}else{table = extract.openTable("Extract");}insertData(table,tableName);}}ExtractAPI.initialize();ExtractAPI.cleanup();}/***------------------------------------------------------------------------ *文件上传服务器*tableAu service的连接信息*path:172.*.*.*:8000  userName:****    password:*****-----------------------------------------------------------------------*/public static void uploadFile(String theme,String tableName,String path, String userName, String password){ServerConnection serverConnection =null;try {ServerAPI.initialize();serverConnection = new ServerConnection();serverConnection.connect( path,  userName,  password, "");String sysName=System.getProperty("os.name").toUpperCase(); String fileName=format.format(new Date())+"-"+tableName;String url=null;String relativelyPath=null;if(sysName.contains("WINDOW")){relativelyPath=System.getProperty("user.dir"); relativelyPath=relativelyPath.substring(0,relativelyPath.lastIndexOf("\\bin"));url=relativelyPath+"\\webapps\\gtdss\\WEB-INF\\classes\\TableAuFile";String filePath=url+"\\"+fileName+".tde";System.out.println("系统版本"+sysName+"-地址:"+filePath);/**文件地址,default分组,名称,是否覆盖*/serverConnection.publishExtract(filePath, "default",theme, true);}else{relativelyPath=System.getProperty("user.dir"); relativelyPath=relativelyPath.substring(0,relativelyPath.lastIndexOf("/bin"));url=relativelyPath+"/webapps/gtdss/WEB-INF/classes/TableAuFile";String filePath=url+"/"+fileName+".tde";System.out.println("系统版本"+sysName+"-地址:"+filePath);/**文件地址,default分组,名称,是否覆盖*/serverConnection.publishExtract(filePath, "default",theme, true);}}catch (TableauException e) {switch(Result.enumForValue(e.getErrorCode())) {case INTERNAL_ERROR:System.err.println("INTERNAL_ERROR - Could not parse the response from the server.");break;case INVALID_ARGUMENT:System.err.println("INVALID_ARGUMENT - " + e.getMessage());break;case CURL_ERROR:System.err.println("CURL_ERROR - " + e.getMessage());break;case SERVER_ERROR:System.err.println("SERVER_ERROR - " + e.getMessage());break;case NOT_AUTHENTICATED:System.err.println("NOT_AUTHENTICATED - " + e.getMessage());break;case BAD_PAYLOAD:System.err.println("BAD_PAYLOAD - Unknown response from the server. Make sure this version of Tableau API is compatible with your server.");break;case INIT_ERROR:System.err.println("INIT_ERROR - " + e.getMessage());break;case UNKNOWN_ERROR:default:System.err.println("An unknown error occured.");break;}e.printStackTrace(System.err);}finally{try {serverConnection.disconnect();serverConnection.close();ServerAPI.cleanup();} catch (TableauException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/***------------------------------------------------------------------------ *  TableAU中所有类型:INTEGER,DOUBLE,BOOLEAN,DATE,DATETIME,DURATION,CHAR_STRING,UNICODE_STRING*  对应Hive中的所有类型*-----------------------------------------------------------------------*/public static Map<String, Type> getTypeMap(){Map<String, Type> map=new HashMap<String,Type>();map.put("TINYINT",Type.INTEGER);map.put("SMALLINT", Type.INTEGER);map.put("BIGINT", Type.UNICODE_STRING);map.put("BOOLEAN", Type.BOOLEAN);map.put("FLOAT", Type.DOUBLE);map.put("DOUBLE", Type.DOUBLE);map.put("STRING", Type.UNICODE_STRING);map.put("BINARY", Type.UNICODE_STRING);map.put("TIMESTAMP", Type.UNICODE_STRING);map.put("DECIMAL", Type.UNICODE_STRING);map.put("DATE", Type.DATE);map.put("CHAR", Type.UNICODE_STRING);map.put("VARCHAR", Type.UNICODE_STRING);return map;}
}

TableAu TDE文件创建与上传相关推荐

  1. 12.React Native文件创建、查看、下载、上传-react-native-fs

    目录 1.react-native-fs是什么? 2.react-native-fs支持哪些功能? 3.react-native-fs如何使用? 4.react-native-fs功能介绍? 5.文件 ...

  2. 用php文件创建表,使用PHP创建单个文件上传表单的最佳方式是什么?

    文件上传教程 HTML > action.php是将处理上传的PHP文件的名称(如下所示) > MAX_FILE_SIZE必须在输入类型文件之前立即出现.该值可以很容易地在客户端上操作,所 ...

  3. Unity(十七) 在Unity中Android使用FTP进行上传、下载、文件创建(客户端部分)

    参考链接:https://www.cnblogs.com/zhenzaizai/p/7434669.html 感谢原作,并修正判断文件夹是否存在的问题 如何在Win10上创建FTP服务器 :https ...

  4. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  5. Linux 中 3 个文件打包上传和下载相关命令详解

    tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...

  6. ftp服务器上传的文件打不开,ftp服务器文件有的上传不了

    ftp服务器文件有的上传不了 内容精选 换一换 为了防止您的主机被勒索病毒侵害,请创建防护策略,将重点防御的文件添加到防护策略的监控路径中,并启动机器学习.机器学习会自动聚类并收集该策略下的所有服务器 ...

  7. php上传文件后定时删除,PHP根据条件定时删除文件代码

    这是一个根据文件的创建时间进行判断删除文件的,一般用于文件上传后定时删除文件. 是个很实用的东西(至少对于我来说是这样). 下面开始代码: /* 本文件用法:放到目录,在程序头部添加 include( ...

  8. FCKEditor最新上传漏洞(ASP),允许上传“.asp;jpg”类型文件解决方案

    近期公司大量网站受到***,造成很的损失.经过反复分析,发现原来是FCKEditor存在上传漏洞.这里,我针对此上传漏洞进行了修正,具体情况请见以下分析: ***表现: 接收上传的目录,发现有以&qu ...

  9. 怎么用u盘在服务器上传文件,U盘向云服务器传输文件吗

    U盘向云服务器传输文件吗 内容精选 换一换 使用云服务器备份创建镜像后,通过创建成功的镜像创建云服务器,但登录云服务器后提示系统进入维护模式,无法正常使用云服务器.当云服务器带有数据盘的时候,恢复后的 ...

最新文章

  1. vuecli启动的服务器位置,webpack – 在vue cli 3生成的项目中启动dev服务器
  2. php mysql百万级数据_php+mysql百万级数据怎么排序_PHP教程
  3. 浅谈 iOS 版本号
  4. 万能的BERT连文本纠错也不放过
  5. 说说windows10自带浏览器Edge的好与不好
  6. 存储维护和服务器的区别,存储服务器和普通服务器区别是什么? 你想知道吗服务器类型一般是什么...
  7. 【转】世界顶级人工智能会议的总结
  8. RocketMQ 下载、安装与 单机启动
  9. deepin tim(wine)无法安装_「原创」Deepin详细安装教程 原来这么简单啊
  10. from collections import OrderedDict
  11. python怎么用input输入列表_Python - 根据列表内容验证用户输入的最佳方法是什么?...
  12. 十大ERP系统排行榜—2022年
  13. unity2018 Image使用Sliced九宫格进行调整
  14. 模型量化 pytorch2onnx
  15. 语音计算机音乐学猫叫,“杨钰莹学猫叫”上热搜,坤音四子自带流量……山东卫视春晚喜提全国收视第一...
  16. matlab湿度廓线,中国气象数据网
  17. 美公共警报系统曝漏洞 专家:警惕预警系统上演狼来了
  18. [轻笔记]蛙跳积分法
  19. HDU6356 Glad You Came(2018HDU多校联赛第五场,线段树)
  20. CSS中雪碧图CSS-Sprite的使用,解决图片闪烁问题

热门文章

  1. JavaScript base64
  2. samsung s5830i root
  3. 云原生应用的最小特权原则
  4. 2.1.3 运算放大器的参数以及选型、静态、交流技术指标
  5. JQ插件写法 扩展JQ方法
  6. 超炫物理动态图!收藏吧,吓死宝宝了...
  7. 【智能优化算法】基于遗传算法实现城市交通信号优化附matlab代码
  8. 洛谷—— P1536 村村通
  9. 工业控制信息安全标准介绍
  10. 【云周刊】第134期:阿里云发布ECS企业级产品家族 19款实例族涵盖173个应用场景...