package com.alimama.web;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Counters;
import org.apache.hadoop.mapreduce.Job;
import org.apache.log4j.Logger;
import backtype.storm.utils.Utils;
import com.alimama.mdrill.adhoc.ExecutorSerives;
import com.alimama.mdrill.adhoc.MySqlConn;
import com.alimama.mdrill.adhoc.MysqlInfo;
import com.alimama.mdrill.index.MakeIndex;
import com.alimama.mdrill.index.MakeIndex.updateStatus;
import com.alimama.mdrill.json.JSONArray;
import com.alimama.mdrill.json.JSONException;
import com.alimama.mdrill.json.JSONObject;
import com.alimama.mdrill.ui.service.MdrillService;
import com.alimama.mdrill.utils.HadoopUtil;
import com.alimama.web.adhoc.Upload;
/**
* createTable.jsp
* tableJoinList.jsp
* upload.jsp
* download2table.jsp
* downloadoffline.jsp
* downloadjoin.jsp
* deleteDownload.jsp
* deleteTable.jsp
*
* @author yannian.mu
*
*/
public class TableJoin {
private static Logger LOG = Logger.getLogger(TableJoin.class);
public static void addTxt(HttpServletRequest request, HttpServletResponse response,OutputStreamWriter outStream) throws Exception
{
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String store = (String) stormconf.get("higo.download.offline.store") + "/" + day + "/upload_" + java.util.UUID.randomUUID().toString();
Configuration conf=getConf(stormconf);
FileSystem fs=FileSystem.get(conf);
if(!fs.exists(new Path(store)))
{
fs.mkdirs(new Path(store));
}
HashMap<String,String> params=new HashMap<String, String>();
Path outpath=new Path(store,String.valueOf(System.currentTimeMillis()));
FSDataOutputStream out=fs.create(outpath);
OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
Upload up=new Upload();
up.mergerTo(request, response, "gbk", osw, params);
osw.close();
out.close();
String rtn= addTxt(params.get("tableName"), store,params.get("callback"));
outStream.append(rtn);
}
public static String addDownload2Table(final String tableName,final String uuid,String callback) throws SQLException, JSONException, IOException
{
Map stormconf = Utils.readStormConfig();
String hdpConf = (String) stormconf.get("hadoop.conf.dir");
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn conn = new MySqlConn(connstr, uname, passwd);
MysqlInfo info = new MysqlInfo(conn);
HashMap<String, String> result = info.get(uuid);
String rtn= addTxt(tableName, result.get("storedir"),callback);
setJoinDownload(tableName, uuid,null);
DeleteDownload(uuid,null);
return rtn;
}
public static void readJoinResult(String uuid, OutputStreamWriter outStream)
throws SQLException, IOException, JSONException {
final HashMap<String,String> tableInfo=getTableInfo(uuid);
JSONObject jsonObj = new JSONObject();
if(tableInfo==null||tableInfo.isEmpty())
{
jsonObj.put("code", "0");
jsonObj.put("message", "该表不存在");
outStream.append(jsonObj.toString());
return ;
}
if(tableInfo.get("status").equals("INDEXING"))
{
jsonObj.put("code", "0");
jsonObj.put("message", "正在创建索引中请稍后");
outStream.append(jsonObj.toString());
return ;
}
Map stormconf = Utils.readStormConfig();
Configuration conf=getConf(stormconf);
outStream.write(tableInfo.get("colsShowName").replaceAll("\001", ",")
.replaceAll("\t", ",")
+ "\n");
com.alimama.mdrill.ui.service.AdhocOfflineService.readHiveResult(tableInfo.get("txtStorePath"), outStream, conf);
}
public static String getDownloadId(String uuid)
throws SQLException, IOException, JSONException {
final HashMap<String,String> tableInfo=getTableInfo(uuid);
if(tableInfo==null||tableInfo.isEmpty())
{
return "adhoc.csv";
}
String tablename=tableInfo.get("tableShowName");
if(tablename.isEmpty())
{
return "adhoc.csv";
}
return tablename.replaceAll("[\n|\\/|:|\t|\\.|\\\\|\\?|<|>|\\*|\\?|\\|\"]", "_")+".csv";
}
private static final ExecutorService EXECUTE = ExecutorSerives.EXECUTE;
public static String addTxt(final String tableName,final String store,final String callback) throws JSONException, SQLException, IOException
{
JSONObject jsonObj = new JSONObject();
final HashMap<String,String> tableInfo=getTableInfo(tableName);
if(tableInfo==null||tableInfo.isEmpty())
{
jsonObj.put("code", "0");
jsonObj.put("message", "该表不存在");
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
if(tableInfo.get("status").equals("INDEXING"))
{
jsonObj.put("code", "0");
jsonObj.put("message", "正在创建索引中请稍后");
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
final Map stormconf = Utils.readStormConfig();
final Configuration conf=getConf(stormconf);
final FileSystem fs=FileSystem.get(conf);
long size=HadoopUtil.duSize(fs, new Path(store));
if(size>500l*1024*1024)
{
jsonObj.put("code", "0");
jsonObj.put("message", "上传的文件不能超过500m");
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
TableJoin.updatePercent(tableName, "Stage-1 map = 0%, reduce = 0%", "INDEXING") ;
jsonObj.put("code", "1");
EXECUTE.submit(new Runnable() {
@Override
public void run() {
try{
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
if(!fs.exists(new Path(store)))
{
fs.mkdirs(new Path(store));
}
Path txtpath=new Path(tableInfo.get("txtStorePath"));
if(!fs.exists(txtpath))
{
fs.mkdirs(txtpath);
}
for( FileStatus outpath:fs.listStatus(new Path(store)))
{
if(!outpath.isDir())
{
fs.rename(outpath.getPath(), new Path(txtpath,outpath.getPath().getName()+"_"+System.currentTimeMillis()));
}
}
fs.delete(new Path(store),true);
Path basepath=new Path(MdrillService.getBasePath());
FileStatus[] tablelist=fs.listStatus(basepath);
String solrHome=tablelist[0].getPath().toString();
for(FileStatus tbl:tablelist){
if(tbl.isDir()&&fs.exists(new Path(tbl.getPath(),"solr")))
{
solrHome=tbl.getPath().toString();
}
}
HashSet<String> inputs=new HashSet<String>();
inputs.add(txtpath.getName());
TableJoin.updateKb(tableName, HadoopUtil.duSize(fs, txtpath));
String strjoins="";
if(tableInfo!=null&&tableInfo.get("joins")!=null)
{
for(String s:tableInfo.get("joins").split(","))
{
String[] cols=s.split(":");
if(cols.length>=3)
{
strjoins=cols[2];
}
}
}
String index = (String) stormconf.get("higo.download.offline.store")+ "/" + day + "/tmp_" + java.util.UUID.randomUUID().toString();
MakeIndex.make(fs, solrHome, conf, "txt", txtpath.getParent().toString(), inputs, "*", tableInfo.get("indexStorePath"), new Path(index), 1, tableInfo.get("splitString"), false, tableInfo.get("colsName"),new updateStatus() {
@Override
public void update(int statge, Job job) {
try {
TableJoin.LOG.info("update "+tableName+ ",stage:"+statge+",map:"+job.mapProgress()+",reduce:"+job.reduceProgress()+ ":INDEXING");
String percent="Stage-"+statge+" map = "+(job.mapProgress()*100)+"%, reduce = "+(job.reduceProgress()*100)+"%";
TableJoin.updatePercent(tableName, percent, "INDEXING") ;
} catch (Exception e) {
TableJoin.LOG.error("updatePercent",e);
}
}
@Override
public void finish() {
try {
TableJoin.LOG.info("update "+tableName+ ",INDEX");
TableJoin.updatePercent(tableName, "Stage-2 map = 100%, reduce = 100%", "INDEX") ;
} catch (Exception e) {
TableJoin.LOG.error("updatePercent",e);
}
}
@Override
public boolean dump(Job job) {
Counters counters;
try {
counters = job.getCounters();
long wsize=counters.findCounter("higo", "dumpcount").getValue();
if(wsize>0)
{
try {
TableJoin.LOG.info("update "+tableName+ ",dump");
TableJoin.updatePercent(tableName, "Stage-2 map = 100%, reduce = 100%", "DUMP") ;
} catch (Exception e) {
TableJoin.LOG.error("updatePercent",e);
}
return true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
},strjoins,40);
}catch(Exception e){
TableJoin.LOG.error("make index",e);
try {
TableJoin.updatePercent(tableName, "Stage-2 map = 100%, reduce = 100%", "FAIL") ;
} catch (Exception e2) {
TableJoin.LOG.error("updatePercent",e2);
}
}
}
});
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
private static Configuration getConf(Map stormconf) {
String hadoopConfDir = (String) stormconf.get("hadoop.conf.dir");
String opts = (String) stormconf.get("hadoop.java.opts");
Configuration conf = new Configuration();
conf.set("mapred.child.java.opts", opts);
HadoopUtil.grabConfiguration(hadoopConfDir, conf);
return conf;
}
public static String updatePercent(String uuid,String percent,String status) throws SQLException
{
MySqlConn m_fpsql = getConn();
Connection conn = m_fpsql.getConn();
String strSql = "update adhoc_joins set " +
"percent=?,status=?,lastuptime=? where tableName=? ";
System.out.println(strSql);
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, percent);
m_fps.setString(index++, status);
m_fps.setTimestamp(index++, new java.sql.Timestamp(System.currentTimeMillis()));
m_fps.setString(index++, uuid);
m_fps.executeUpdate();
String fullstrSql=m_fps.toString();
return fullstrSql;
} catch (Exception e) {
TableJoin.LOG.error("updatePercent"+m_fps.toString(),e);
}finally{
m_fps.close();
m_fpsql.close();
}
return "";
}
public static String setJoinDownload(String tablename,String uuid,String callback) throws SQLException, JSONException
{
JSONObject jsonObj = new JSONObject();
MySqlConn m_fpsql = getConn();
Connection conn = m_fpsql.getConn();
String strSql = "update adhoc_joins set download_uuid=?,lastuptime=? where tableName=? ";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, uuid);
m_fps.setTimestamp(index++, new java.sql.Timestamp(System.currentTimeMillis()));
m_fps.setString(index++, tablename);
m_fps.executeUpdate();
String fullstrSql=m_fps.toString();
jsonObj.put("code", "1");
return fullstrSql;
} catch (Exception e) {
jsonObj.put("code", "0");
TableJoin.LOG.error("updatePercent"+m_fps.toString(),e);
}finally{
m_fps.close();
m_fpsql.close();
}
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
public static String setJoinDelete(String uuid,String callback) throws SQLException, JSONException
{
JSONObject jsonObj = new JSONObject();
MySqlConn m_fpsql = getConn();
Connection conn = m_fpsql.getConn();
String strSql = "update adhoc_joins set status='DEL',lastuptime=? where tableName=? ";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setTimestamp(index++, new java.sql.Timestamp(System.currentTimeMillis()));
m_fps.setString(index++, uuid);
m_fps.executeUpdate();
String fullstrSql=m_fps.toString();
jsonObj.put("code", "1");
jsonObj.put("__debug", fullstrSql);
} catch (Exception e) {
TableJoin.LOG.error("updatePercent"+m_fps.toString(),e);
jsonObj.put("__debugerror", m_fps.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
public static String DeleteDownload(String uuid,String callback) throws SQLException, JSONException
{
JSONObject jsonObj = new JSONObject();
MySqlConn m_fpsql = getConn();
Connection conn = m_fpsql.getConn();
String strSql = "update adhoc_download set status='DEL',endtime=? where uuid=? ";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setTimestamp(index++, new java.sql.Timestamp(System.currentTimeMillis()));
m_fps.setString(index++, uuid);
m_fps.executeUpdate();
String fullstrSql=m_fps.toString();
jsonObj.put("code", "1");
jsonObj.put("__debug", fullstrSql);
} catch (Exception e) {
jsonObj.put("code", "0");
TableJoin.LOG.error("updatePercent"+m_fps.toString(),e);
jsonObj.put("__debugerror", m_fps.toString());
}finally{
m_fps.close();
m_fpsql.close();
}
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
public static String updateKb(String uuid,long sz) throws SQLException
{
MySqlConn m_fpsql = getConn();
Connection conn = m_fpsql.getConn();
String strSql = "update adhoc_joins set " +
"resultkb=? where tableName=? ";
System.out.println(strSql);
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setInt(index++, (int)sz/1024);
m_fps.setString(index++, uuid);
m_fps.executeUpdate();
String fullstrSql=m_fps.toString();
return fullstrSql;
} catch (Exception e) {
TableJoin.LOG.error("updatePercent"+m_fps.toString(),e);
}finally{
m_fps.close();
m_fpsql.close();
}
return "";
}
private static MySqlConn getConn()
{
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
return m_fpsql;
}
private static Pattern pat=null;
public static double parsePercent(String stage,String percent,boolean issuccess)
{
Integer totalstage=Integer.parseInt(stage);
if(pat==null)
{
pat= Pattern.compile(".*Stage[^\\d]*(\\d+)[^\\d]map[^\\d]*(\\d+)[^\\d].*reduce[^\\d]*(\\d+)[^\\d].*");
}
if(!percent.startsWith("Stage"))
{
return 0d;
}
Integer currStage=0;
double map=0;
double reduce=0;
Matcher mat = pat.matcher(percent);
while (mat.find()) {
currStage=Integer.parseInt(mat.group(1));
map=Double.parseDouble(mat.group(2));
reduce=Double.parseDouble(mat.group(3));
}
if(currStage<1)
{
currStage=1;
}
if(totalstage>0)
{
double result= (100d*(currStage-1)+map*0.5d+reduce*0.5d)/totalstage;
if(result>=100){
result=100;
}
return result;
}
return 100d;
}
public static String getAllKmeans() throws SQLException, JSONException
{
String joins="";
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
Statement stmt = conn.createStatement();
StringBuffer bufferSql=new StringBuffer();
String strsqlAbtest="select '8' as source " +
",jobname as tableShowName" +
",uuid as tableName" +
",cols as colsShowName" +
",'empty' as colsName" +
",'empty' as colsType" +
",'default' as splitString" +
",storedir as txtStorePath" +
",'empty' as indexStorePath" +
",extval as extval" +
",isfinish as isfinish" +
",'INDEX' as status" +
",username as username" +
",starttime as createtime" +
",endtime as lastuptime" +
",'' as joins" +
",stage as stage" +
",percent as percent" +
",resultkb as resultkb" +
",'' as memo" +
",params as params" +
" from adhoc_download where status<>'DEL' and storedir like '%abtest%' ";
bufferSql.append("select source,tableShowName,tableName,colsShowName" +
",colsName,colsType,splitString,txtStorePath,indexStorePath,extval,status,username," +
"createtime,lastuptime,joins,stage,percent,resultkb,memo,params");
bufferSql.append(" from ("+strsqlAbtest+") tmp order by tmp.createtime desc limit 0,1000 ");
String sql=bufferSql.toString();
ResultSet res = stmt.executeQuery(sql);
StringBuffer buff=new StringBuffer();
buff.append("<table width='100%' border=1>");
buff.append("<tr>");
buff.append("<td>").append("name").append("</td>");
buff.append("<td>").append("uuid").append("</td>");
buff.append("<td>").append("username").append("</td>");
buff.append("<td>").append("resultkb").append("</td>");
buff.append("<td>").append("createtime").append("</td>");
buff.append("<td>").append("proccess").append("</td>");
buff.append("<td>").append("msg").append("</td>");
buff.append("<td>").append("params").append("</td>");
buff.append("</tr>");
while (res.next()) {
JSONObject item = new JSONObject();
item.put("source", res.getString("source"));
item.put("tableShowName", res.getString("tableShowName"));//展示名称
item.put("tableName", res.getString("tableName"));//uuid
item.put("colsShowName", res.getString("colsShowName").replaceAll("\\(", "_").replaceAll("\\)", "_").replaceAll(" ", "").replaceAll("_,", ",").replaceAll(",$", ""));
item.put("colsName", res.getString("colsName"));
item.put("colsType", res.getString("colsType"));
item.put("splitString", res.getString("splitString"));
item.put("txtStorePath", res.getString("txtStorePath"));
item.put("indexStorePath", res.getString("indexStorePath"));
item.put("extval", res.getString("extval"));
item.put("status", res.getString("status"));
item.put("username", res.getString("username"));
item.put("createtime", res.getString("createtime"));
item.put("lastuptime", res.getString("lastuptime"));
item.put("joins", res.getString("joins"));
item.put("params", res.getString("params"));
item.put("stage", res.getString("stage"));
item.put("percent", res.getString("percent"));
item.put("resultkb", parseInt(res.getString("resultkb"))>0?res.getString("resultkb"):"<1");
item.put("memo", String.valueOf(res.getString("memo")));
boolean isoversize= (!res.getString("source").equals("8"))&&parseInt(res.getString("resultkb"))>512000;
boolean issuccess=res.getString("status").equals("INDEX")&&res.getString("extval").equals("0");
boolean iserror=res.getString("status").equals("FAIL")||!res.getString("extval").equals("0");
double percent=parsePercent(res.getString("stage"),res.getString("percent"),issuccess);
if(percent>=100&&res.getString("source").equals("8")&&parseInt(res.getString("resultkb"))<=0)
{
issuccess=false;
iserror=true;
}
boolean isallowEdit=!res.getString("status").equals("INDEXING")&&res.getString("source").equals("1");
item.put("allowCreate",String.valueOf(res.getString("source").equals("2")&&issuccess&&percent>=100&&!isoversize));//是否允许将离线下载转换为个人表
item.put("allowUpload",String.valueOf(isallowEdit&&res.getString("status").equals("init")));//上传
item.put("allowDownload",String.valueOf((issuccess||res.getString("status").equals("DUMP"))&&percent>=100));//下载
item.put("allowJoin",String.valueOf(res.getString("source").equals("1")&&issuccess&&percent>=100&&!isoversize));//join
item.put("allowSend",String.valueOf(issuccess&&percent>=100));//推送
item.put("isError", iserror);
String uuidshow=iserror?("<br>"+res.getString("tableName")):"";
item.put("proccess", ((res.getString("status").equals("DUMP")||iserror)?"0":DF_FORMAT.format(percent))+"%");
item.put("msg", String.valueOf(iserror?"服务器异常":isoversize?"数据文件超过500M ":res.getString("status").equals("DUMP")?"设置关联关系的字段有重复值":issuccess&&percent>=100?"成功":res.getString("status").equals("init")?"等待上传数据":"处理中...")+uuidshow);
buff.append("<tr>");
buff.append("<td>").append(item.get("tableShowName")).append("</td>");
buff.append("<td>").append(item.get("tableName")).append("</td>");
buff.append("<td>").append(item.get("username")).append("</td>");
buff.append("<td>").append(item.get("resultkb")).append("</td>");
buff.append("<td>").append(item.get("createtime")).append("</td>");
buff.append("<td>").append(item.get("proccess")).append("</td>");
buff.append("<td>").append(item.get("msg")).append("</td>");
buff.append("<td>").append(item.get("params")).append("</td>");
buff.append("</tr>");
}
buff.append("</table>");
return buff.toString();
}
private static java.text.DecimalFormat DF_FORMAT=new java.text.DecimalFormat("#.####");
public static String getUserTables(String username,int start,int rows,int type,String callback,String moduleName) throws SQLException, JSONException
{
String joins="";
if(moduleName!=null&&moduleName.length()>0)
{
joins=" and joins like '%"+moduleName+":%' ";
}
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
Statement stmt = conn.createStatement();
String strsqlJoin="select '1' as source " +
",tableShowName as tableShowName" +
",tableName as tableName" +
",colsShowName as colsShowName" +
",colsName as colsName" +
",colsType as colsType" +
",splitString as splitString" +
",txtStorePath as txtStorePath" +
",indexStorePath as indexStorePath" +
",'0' as extval" +
",'0' as isfinish" +
",status as status" +
",username as username" +
",createtime as createtime" +
",lastuptime as lastuptime" +
",joins as joins" +
",'2' as stage" +
",percent as percent" +
",resultkb as resultkb" +
",memo as memo" +
" from adhoc_joins where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and (copy_uuid is null or copy_uuid='') "+joins+" ";
StringBuffer bufferSql=new StringBuffer();
if(type==0)//个人中心列表
{
String strsqlJoin2="select '3' as source " +
",tableShowName as tableShowName" +
",tableName as tableName" +
",colsShowName as colsShowName" +
",colsName as colsName" +
",colsType as colsType" +
",splitString as splitString" +
",txtStorePath as txtStorePath" +
",indexStorePath as indexStorePath" +
",'0' as extval" +
",'0' as isfinish" +
",status as status" +
",username as username" +
",createtime as createtime" +
",lastuptime as lastuptime" +
",joins as joins" +
",'2' as stage" +
",percent as percent" +
",resultkb as resultkb" +
",memo as memo" +
" from adhoc_joins where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and (copy_uuid is not null and copy_uuid<>'' and status='INDEX' ) "+joins+" ";
String strsqlDownload="select '2' as source " +
",jobname as tableShowName" +
",uuid as tableName" +
",cols as colsShowName" +
",'empty' as colsName" +
",'empty' as colsType" +
",'default' as splitString" +
",storedir as txtStorePath" +
",'empty' as indexStorePath" +
",extval as extval" +
",isfinish as isfinish" +
",'INDEX' as status" +
",username as username" +
",starttime as createtime" +
",endtime as lastuptime" +
",'' as joins" +
",stage as stage" +
",percent as percent" +
",resultkb as resultkb" +
",'' as memo" +
" from adhoc_download where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and storedir not like '%abtest%' ";
String strsqlAbtest="select '8' as source " +
",jobname as tableShowName" +
",uuid as tableName" +
",cols as colsShowName" +
",'empty' as colsName" +
",'empty' as colsType" +
",'default' as splitString" +
",storedir as txtStorePath" +
",'empty' as indexStorePath" +
",extval as extval" +
",isfinish as isfinish" +
",'INDEX' as status" +
",username as username" +
",starttime as createtime" +
",endtime as lastuptime" +
",'' as joins" +
",stage as stage" +
",percent as percent" +
",resultkb as resultkb" +
",'' as memo" +
" from adhoc_download where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and storedir like '%abtest%' ";
bufferSql.append("select source,tableShowName,tableName,colsShowName" +
",colsName,colsType,splitString,txtStorePath,indexStorePath,extval,status,username," +
"createtime,lastuptime,joins,stage,percent,resultkb,memo");
bufferSql.append(" from ("+strsqlJoin+" union "+strsqlDownload+" union "+strsqlJoin2+" union "+strsqlAbtest+") tmp order by tmp.createtime desc limit "+start+","+rows+" ");
}
if(type==1)//for join
{
bufferSql.append(strsqlJoin+" and status='INDEX' and resultkb<=512000 order by createtime desc limit "+start+","+rows+" ");
}
String sql=bufferSql.toString();
TableJoin.LOG.info("getUserTables:"+sql);
ResultSet res = stmt.executeQuery(sql);
JSONObject jsonObj = new JSONObject();
jsonObj.put("code", "1");
jsonObj.put("_exehql", sql);
JSONArray jsonArray = new JSONArray();
while (res.next()) {
JSONObject item = new JSONObject();
item.put("source", res.getString("source"));
item.put("tableShowName", res.getString("tableShowName"));//展示名称
item.put("tableName", res.getString("tableName"));//uuid
item.put("colsShowName", res.getString("colsShowName").replaceAll("\\(", "_").replaceAll("\\)", "_").replaceAll(" ", "").replaceAll("_,", ",").replaceAll(",$", ""));
item.put("colsName", res.getString("colsName"));
item.put("colsType", res.getString("colsType"));
item.put("splitString", res.getString("splitString"));
item.put("txtStorePath", res.getString("txtStorePath"));
item.put("indexStorePath", res.getString("indexStorePath"));
item.put("extval", res.getString("extval"));
item.put("status", res.getString("status"));
item.put("username", res.getString("username"));
item.put("createtime", res.getString("createtime"));
item.put("lastuptime", res.getString("lastuptime"));
item.put("joins", res.getString("joins"));
item.put("stage", res.getString("stage"));
item.put("percent", res.getString("percent"));
item.put("resultkb", parseInt(res.getString("resultkb"))>0?res.getString("resultkb"):"<1");
item.put("memo", String.valueOf(res.getString("memo")));
boolean isoversize= (!res.getString("source").equals("8"))&&parseInt(res.getString("resultkb"))>512000;
boolean issuccess=res.getString("status").equals("INDEX")&&res.getString("extval").equals("0");
boolean iserror=res.getString("status").equals("FAIL")||!res.getString("extval").equals("0");
double percent=parsePercent(res.getString("stage"),res.getString("percent"),issuccess);
if(percent>=100&&res.getString("source").equals("8")&&parseInt(res.getString("resultkb"))<=0)
{
issuccess=false;
iserror=true;
}
boolean isallowEdit=!res.getString("status").equals("INDEXING")&&res.getString("source").equals("1");
item.put("allowCreate",String.valueOf(res.getString("source").equals("2")&&issuccess&&percent>=100&&!isoversize));//是否允许将离线下载转换为个人表
item.put("allowUpload",String.valueOf(isallowEdit&&res.getString("status").equals("init")));//上传
item.put("allowDownload",String.valueOf((issuccess||res.getString("status").equals("DUMP"))&&percent>=100));//下载
item.put("allowJoin",String.valueOf(res.getString("source").equals("1")&&issuccess&&percent>=100&&!isoversize));//join
item.put("allowSend",String.valueOf(issuccess&&percent>=100));//推送
item.put("isError", iserror);
String uuidshow=iserror?("<br>"+res.getString("tableName")):"";
item.put("proccess", ((res.getString("status").equals("DUMP")||iserror)?"0":DF_FORMAT.format(percent))+"%");
item.put("msg", String.valueOf(iserror?"服务器异常":isoversize?"数据文件超过500M ":res.getString("status").equals("DUMP")?"设置关联关系的字段有重复值":issuccess&&percent>=100?"成功":res.getString("status").equals("init")?"等待上传数据":"处理中...")+uuidshow);
jsonArray.put(item);
}
HashMap<String,String> cnt=getUserTablesCount(username, type,moduleName);
JSONObject data = new JSONObject();
data.put("list",jsonArray);
data.put("total",cnt.get("cnt"));
jsonObj.put("data",data);
jsonObj.put("total_debug", new JSONObject(cnt));
m_fpsql.close();
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
} }
public static Integer parseInt(String str)
{
try{
return Integer.parseInt(str);
}catch(NumberFormatException e)
{
return 0;
}
}
public static HashMap<String,String> getUserTablesCount(String username,int type,String moduleName) throws SQLException
{
String joins="";
if(moduleName!=null&&moduleName.length()>0)
{
joins=" and joins like '%"+moduleName+":%' ";
}
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
Statement stmt = conn.createStatement();
String strsqlJoin="select count(*) as cnt" +
" from adhoc_joins where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and (copy_uuid is null or copy_uuid='') "+joins+" " ;
StringBuffer bufferSql=new StringBuffer();
if(type==0)
{
String strsqlJoin2="select count(*) as cnt" +
" from adhoc_joins where username='"+username.replaceAll("'", "")+"' and status<>'DEL' and (copy_uuid is not null and copy_uuid<>'') "+joins+" " ;
String strsqlDownload="select count(*) as cnt" +
" from adhoc_download where username='"+username.replaceAll("'", "")+"' and status<>'DEL' ";
bufferSql.append("select sum(cnt) as cnt");
bufferSql.append(" from ("+strsqlJoin+" union "+strsqlDownload+" union "+strsqlJoin2+") tmp limit 10 ");
}if(type==1)//for join
{
bufferSql.append(strsqlJoin+" and status='INDEX' and resultkb<=512000 order by createtime desc limit 10 ");
}
String sql=bufferSql.toString();
ResultSet res = stmt.executeQuery(sql);
HashMap<String,String> rtn=new HashMap<String,String>();
rtn.put("_exehql", sql);
while (res.next()) {
rtn.put("cnt", String.valueOf(res.getInt("cnt")));
}
m_fpsql.close();
return rtn;
}
public static HashMap<String,String> getTableInfo(String uuid) throws SQLException
{
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
Statement stmt = conn.createStatement();
String sql="select tableShowName,tableName,colsShowName,colsName,colsType,splitString,txtStorePath,indexStorePath,status,username,createtime,lastuptime,joins,percent,resultkb,download_uuid,copy_uuid,memo from adhoc_joins where tableName='"+uuid.replaceAll("'", "")+"' limit 10";
ResultSet res = stmt.executeQuery(sql);
HashMap<String,String> rtn=new HashMap<String,String>();
rtn.put("_exehql", sql);
boolean issetup=false;
while (res.next()) {
rtn.put("tableShowName", res.getString("tableShowName"));
rtn.put("tableName", res.getString("tableName"));
rtn.put("colsShowName", res.getString("colsShowName"));
rtn.put("colsName", res.getString("colsName"));
rtn.put("colsType", res.getString("colsType"));
rtn.put("splitString", res.getString("splitString"));
rtn.put("memo", String.valueOf(res.getString("memo")));
rtn.put("txtStorePath", res.getString("txtStorePath"));
rtn.put("indexStorePath", res.getString("indexStorePath"));
rtn.put("status", res.getString("status"));
rtn.put("username", res.getString("username"));
rtn.put("createtime", res.getString("createtime"));
rtn.put("lastuptime", res.getString("lastuptime"));
rtn.put("joins", res.getString("joins"));
rtn.put("percent", res.getString("percent"));
rtn.put("resultkb", res.getString("resultkb"));
rtn.put("download_uuid", res.getString("download_uuid"));
rtn.put("copy_uuid", res.getString("copy_uuid"));
issetup=true;
}
m_fpsql.close();
if(!issetup)
{
return null;
}
return rtn;
}
// CREATE TABLE `adhoc_joins` (
// `id` bigint(20) NOT NULL auto_increment,
// `tableShowName` char(240) NOT NULL,
// `tableName` char(240) NOT NULL,
// `colsShowName` text NOT NULL,
// `colsName` text NOT NULL,
// `colsType` text NOT NULL,
// `splitString` char(240) NOT NULL,
// `txtStorePath` text NOT NULL,
// `indexStorePath` text NOT NULL,
// `status` char(240) NOT NULL,
// `username` char(240) NOT NULL,
// `createtime` datetime default '1983-11-07 12:12:12',
// `lastuptime` datetime default '1983-11-07 12:12:12',
// `joins` text NOT NULL,
// `percent` text NOT NULL,
// `percent` text NOT NULL,
// `resultkb` bigint(20) default '0',
// `download_uuid` char(240) default '',
// `copy_uuid` char(240) default '',
// PRIMARY KEY (`id`),
// KEY `username` (`username`),
// KEY `tableName` (`tableName`)
//
// ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
public static String copyto(String uuid,String mailto,String callback,String memo) throws Exception
{
JSONObject jsonObj = new JSONObject();
HashMap<String,String> tableInfo=getTableInfo(uuid);
if(tableInfo==null)
{
//TODO
Map stormconf = Utils.readStormConfig();
String hdpConf = (String) stormconf.get("hadoop.conf.dir");
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn conn = new MySqlConn(connstr, uname, passwd);
MysqlInfo info = new MysqlInfo(conn);
HashMap<String, String> result2 = info.get(uuid);
if(result2!=null)
{
tableInfo=new HashMap<String, String>();
tableInfo.put("tableShowName", result2.get("jobname"));
tableInfo.put("tableName", result2.get("uuid"));
tableInfo.put("colsShowName", result2.get("cols"));
tableInfo.put("colsName", "");
tableInfo.put("colsType", "");
tableInfo.put("splitString", "default");
tableInfo.put("memo", String.valueOf(result2.get("memo")));
tableInfo.put("txtStorePath", result2.get("storedir"));
tableInfo.put("indexStorePath", "");
tableInfo.put("status", "INDEX");
tableInfo.put("username", result2.get("username"));
tableInfo.put("createtime", result2.get("starttime"));
tableInfo.put("lastuptime", result2.get("endtime"));
tableInfo.put("joins", "");
tableInfo.put("percent", "Stage-2 map = 100%, reduce = 100%");
tableInfo.put("resultkb", result2.get("resultkb"));
tableInfo.put("download_uuid", "");
tableInfo.put("copy_uuid", uuid);
}
}
tableInfo.put("memo", String.valueOf(memo));//tableInfo.get("username")+":"+
if(tableInfo==null||tableInfo.isEmpty())
{
jsonObj.put("code", "0");
jsonObj.put("message", "该表不存在");
}else
if(tableInfo.get("status").equals("INDEXING"))
{
jsonObj.put("code", "0");
jsonObj.put("message", "正在创建索引中请稍后");
return jsonObj.toString();
}else
{
JSONArray list = new JSONArray();
for(String username:mailto.split(","))
{
JSONObject result=createByMap(tableInfo, uuid,username);
list.put(result);
}
jsonObj.put("code", "1");
jsonObj.put("data", list);
}
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
} }
public static JSONObject createByMap(final HashMap<String,String> tableInfo,String copyuuid,String username) throws Exception
{
JSONObject jsonObj = new JSONObject();
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String hdpConf = (String) stormconf.get("hadoop.conf.dir");
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
String store = (String) stormconf.get("higo.download.offline.store")
+ "/" + day + "/" + java.util.UUID.randomUUID().toString();
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
String tableName=java.util.UUID.randomUUID().toString();
Connection conn = m_fpsql.getConn();
// tableShowName,tableName,colsShowName,colsName,colsType,splitString,txtStorePath,indexStorePath,status,username,createtime,lastuptime,joins,percent,resultkb,download_uuid,copy_uuid
String strSql = "insert into adhoc_joins " +
"(tableShowName,tableName,colsShowName,colsName,colsType,splitString,txtStorePath,indexStorePath,status,username,createtime,lastuptime,joins,percent,resultkb,download_uuid,copy_uuid,memo)" +
"values" +
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, tableInfo.get("tableShowName"));
m_fps.setString(index++, tableName);
m_fps.setString(index++, tableInfo.get("colsShowName"));
m_fps.setString(index++, tableInfo.get("colsName"));
m_fps.setString(index++, tableInfo.get("colsType"));
m_fps.setString(index++, tableInfo.get("splitString"));
m_fps.setString(index++, tableInfo.get("txtStorePath"));
m_fps.setString(index++, tableInfo.get("indexStorePath"));
m_fps.setString(index++, tableInfo.get("status"));
m_fps.setString(index++, username);
long nowtims=System.currentTimeMillis();
m_fps.setTimestamp(index++, new java.sql.Timestamp(nowtims));
m_fps.setTimestamp(index++, new java.sql.Timestamp(nowtims));
m_fps.setString(index++, tableInfo.get("joins"));
m_fps.setString(index++, tableInfo.get("percent"));
m_fps.setInt(index++, Integer.parseInt(tableInfo.get("resultkb")));
m_fps.setString(index++, tableInfo.get("download_uuid"));
m_fps.setString(index++, copyuuid);
m_fps.setString(index++, tableInfo.get("memo"));
m_fps.executeUpdate();
jsonObj.put("code", "1");
jsonObj.put("tableid", tableName);
jsonObj.put("____debug", m_fps.toString());
} catch (Exception e) {
jsonObj.put("____debug2", m_fps.toString());
jsonObj.put("____debugerror", e.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
return jsonObj;
}
// public String get(String key) throws UnsupportedEncodingException{
// String keyPath = ZKUtil.joinZNode(PROJECT_NODE, key);
// HashMap<String,String> rtn=new HashMap<String,String>();
// rtn.put("code", "0");
//
// try {
// byte[] d=ZKUtil.getData(zkw, keyPath);
// if(d!=null)
// {
// rtn.put("data", new String(d,"utf8"));
// rtn.put("code", "1");
// }else{
// rtn.put("message", "nodata");
// rtn.put("data", "");
// rtn.put("code", "1");
// }
//
// } catch (KeeperException e) {
// rtn.put("message", this.stringify_error(e));
// }
// return new JSONObject(rtn).toString();
// }
public static String get(String key) throws SQLException, JSONException
{
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
Statement stmt = conn.createStatement();
String sql="select tab_key,tab_value from tab_infos where tab_key='"+key+"' limit 10";
ResultSet res = stmt.executeQuery(sql);
JSONObject jsonObj = new JSONObject();
HashMap<String,String> rtn=new HashMap<String,String>();
jsonObj.put("code", "0");
boolean issetup=false;
while (res.next()) {
rtn.put("tab_key", res.getString("tab_key"));
rtn.put("tab_value", res.getString("tab_value"));
issetup=true;
}
m_fpsql.close();
if(issetup)
{
jsonObj.put("data", rtn.get("tab_key"));
jsonObj.put("code", "1");
} else {
jsonObj.put("message", "nodata");
jsonObj.put("data", "");
jsonObj.put("code", "1");
}
return jsonObj.toString();
}
public static String set(String key,String value) throws Exception{
HashMap<String,String> rtn=new HashMap<String,String>();
rtn.put("code", "0");
try {
JSONObject last=new JSONObject(get(key));
if(last.has("message")&&last.getString("message").equals("nodate"))
{
String result=insert(key,value);
return result;
}else{
update(key, value);
rtn.put("lastdata",last.getString("data"));
}
rtn.put("code", "1");
} catch (Exception e) {
rtn.put("message", e.toString());
}
return new JSONObject(rtn).toString();
}
public static String insert(String key,String value) throws Exception
{
JSONObject jsonObj = new JSONObject();
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
String strSql = "insert into tab_infos " +
"(tab_key,tab_value)" +
"values" +
"(?,?)";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, key);
m_fps.setString(index++, value);
m_fps.executeUpdate();
jsonObj.put("code", "1");
JSONObject daa = new JSONObject();
jsonObj.put("data", daa);
jsonObj.put("____debug", m_fps.toString());
} catch (Exception e) {
jsonObj.put("____debug2", m_fps.toString());
jsonObj.put("message", e.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
return jsonObj.toString();
}
// public String del(String key) throws UnsupportedEncodingException{
// String keyPath = ZKUtil.joinZNode(PROJECT_NODE, key);
// HashMap<String,String> rtn=new HashMap<String,String>();
// rtn.put("code", "0");
// try {
// ZKUtil.deleteNodeRecursively(zkw, keyPath);
// rtn.put("code", "1");
// } catch (KeeperException e) {
// rtn.put("message", this.stringify_error(e));
// }
// return new JSONObject(rtn).toString();
// }
public static String del(String key) throws Exception
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("code", "0");
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
String strSql = "delete from tab_infos where tab_key=? ";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, key);
m_fps.executeUpdate();
jsonObj.put("code", "1");
} catch (Exception e) {
jsonObj.put("message", e.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
return jsonObj.toString();
}
public static String update(String key,String value) throws Exception
{
JSONObject jsonObj = new JSONObject();
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
Connection conn = m_fpsql.getConn();
String strSql = "update tab_infos set tab_value=? where tab_key=? ";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, value);
m_fps.setString(index++, key);
m_fps.executeUpdate();
jsonObj.put("code", "1");
JSONObject daa = new JSONObject();
jsonObj.put("data", daa);
jsonObj.put("____debug", m_fps.toString());
} catch (Exception e) {
jsonObj.put("____debug2", m_fps.toString());
jsonObj.put("____debugerror", e.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
return jsonObj.toString();
}
public static String create(String tableShowName,String colsShowName,String splitString,String username,String joins,String callback,String memo) throws Exception
{
// public static HashMap<String,String> getUserTablesCount(String username,int type) throws SQLException
HashMap<String,String> tablecount=getUserTablesCount(username, 1,"");
JSONObject jsonObj = new JSONObject();
if(tablecount!=null&&tablecount.containsKey("cnt")&&Integer.parseInt(tablecount.get("cnt"))>=20)
{
jsonObj.put("code", "0");
jsonObj.put("message", "你已经创建了"+tablecount.get("cnt")+"个个人表了,单用户最多创建20个个人表");
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
String day = fmt.format(new Date());
Map stormconf = Utils.readStormConfig();
String hdpConf = (String) stormconf.get("hadoop.conf.dir");
String connstr = (String) stormconf.get("higo.download.offline.conn");
String uname = (String) stormconf.get("higo.download.offline.username");
String passwd = (String) stormconf.get("higo.download.offline.passwd");
String store = (String) stormconf.get("higo.download.offline.store")
+ "/" + day + "/" + java.util.UUID.randomUUID().toString();
MySqlConn m_fpsql = new MySqlConn(connstr, uname, passwd);
String tableName=java.util.UUID.randomUUID().toString();
Connection conn = m_fpsql.getConn();
String strSql = "insert into adhoc_joins " +
"(tableShowName,tableName,colsShowName,colsName,colsType,splitString,txtStorePath,indexStorePath,status,username,createtime,lastuptime,joins,percent,memo)" +
"values" +
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement m_fps = conn.prepareStatement(strSql);
try {
int index=1;
m_fps.setString(index++, tableShowName);
m_fps.setString(index++, tableName);
m_fps.setString(index++, colsShowName);
StringBuffer colsName=new StringBuffer();
StringBuffer colsType=new StringBuffer();
String[] cols=colsShowName.split(",");
String join="";
HashMap<String,String> colsNames=new HashMap<String, String>();
for(int i=0;i<cols.length;i++)
{
String colname="cols_"+i+"_s";
colsName.append(join);
colsName.append(colname);
colsType.append(join);
colsType.append("string");
colsNames.put(cols[i],colname);
join=",";
}
m_fps.setString(index++, colsName.toString());
m_fps.setString(index++, colsType.toString());
m_fps.setString(index++, MakeIndex.parseSplit(splitString));
m_fps.setString(index++, store+"/txt");
m_fps.setString(index++, store+"/index");
m_fps.setString(index++, "init");
m_fps.setString(index++, username);
long nowtims=System.currentTimeMillis();
m_fps.setTimestamp(index++, new java.sql.Timestamp(nowtims));
m_fps.setTimestamp(index++, new java.sql.Timestamp(nowtims));
StringBuffer joinbuff=new StringBuffer();
String joinchar="";
for(String joindesc:joins.split(","))
{
String[] arr=joindesc.split(":");
joinbuff.append(joinchar);
joinbuff.append(arr[0]);
joinbuff.append(":");
joinbuff.append(arr[1]);
joinbuff.append(":");
joinbuff.append(colsNames.get(arr[2]));
joinchar=",";
}
m_fps.setString(index++,joinbuff.toString());
m_fps.setString(index++,"");
m_fps.setString(index++,String.valueOf(memo));
m_fps.executeUpdate();
jsonObj.put("code", "1");
JSONObject daa = new JSONObject();
daa.put("tableid", tableName);
jsonObj.put("data", daa);
jsonObj.put("____debug", m_fps.toString());
} catch (Exception e) {
jsonObj.put("____debug2", m_fps.toString());
jsonObj.put("____debugerror", e.toString());
jsonObj.put("code", "0");
}finally{
m_fps.close();
m_fpsql.close();
}
if (callback != null && callback.length() > 0) {
return callback + "(" + jsonObj.toString() + ")";
} else {
return jsonObj.toString();
}
}
}