Package com.alimama.mdrill.ui.service

Source Code of com.alimama.mdrill.ui.service.AdhocWebServiceParams$HigoAdhocJoinParams

package com.alimama.mdrill.ui.service;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;

import com.alimama.mdrill.json.JSONArray;
import com.alimama.mdrill.json.JSONException;
import com.alimama.mdrill.json.JSONObject;
import com.alimama.mdrill.partion.GetPartions;
import com.alimama.mdrill.ui.service.utils.WebServiceParams;
import com.alimama.mdrill.ui.service.utils.WebServiceParams.StateField;
import com.alimama.web.TableJoin;

public class AdhocWebServiceParams {
  public static class HigoAdhocJoinParams{
    public String tablename;
    public String hdfsPath;
    public String txtPath;
    public ArrayList<String> fq;
    public ArrayList<String> groupfq=new ArrayList<String>();
    public String[] fl;
    public String leftkey;
    public String rightkey;
    public String returnPrefix;
    public String sort;
   
    public String createSql="";
    public String DropSql="";
    public String addData="";
    public String frQuer="";
//    public Stri
   
  }
 
 
  public static HashMap<String,ArrayList<String>> parseFieldToNames(String fl, String groupby,  String params,String leftjoin) throws JSONException, SQLException
  {

    HashMap<String,ArrayList<String>> fieldToName=new HashMap<String, ArrayList<String>>();
    ArrayList<String> groupFields = WebServiceParams.groupFields(groupby);
    ArrayList<String> showFields = WebServiceParams.showHiveFields(fl);
    HigoAdhocJoinParams[] joins=AdhocWebServiceParams.parseJoinsHive(leftjoin, null);
    String daycols=AdhocWebServiceParams.parseDayCols("dt",groupFields,showFields);
    ArrayList<String> fieldlist=new ArrayList<String>();
    if(joins.length<=0)
    {
      for (String field : groupFields) {
        fieldlist.add(field);
      }
      for (String field : showFields) {
        if(!groupFields.contains(field))
        {
          fieldlist.add(field);
        }
      }

    }else
    {
      for (String field : groupFields) {
        fieldlist.add(field);
      }
      for (String field : showFields) {
       
        StateField showfield=WebServiceParams.parseStat(field);
       
        if(!groupFields.contains(showfield.realField))
        {
          if(!showfield.isstat)
          {
            fieldlist.add(field);
          }
        }
      }
     
      for(int i=0;i<joins.length;i++)
      {
        HigoAdhocJoinParams jp=joins[i];
        for (String field : jp.fl) {
          fieldlist.add(jp.tablename+"."+field);

        }
      }
      for (String field : showFields) {
       
        StateField showfield=WebServiceParams.parseStat(field);
       
        if(!groupFields.contains(showfield.realField))
        {
          if(showfield.isstat)
          {
            fieldlist.add(field);
          }
        }
      }
    }
   
    ArrayList<String> fieldNamelist=new ArrayList<String>();

    String[] pcols = params == null ? new String[0] : new String(daycols
        + params.replaceAll("维度指标:", "").replaceAll("。.*$", ""))
        .split(",");
    for (String s : pcols) {
      if (!AdhocOfflineService.isStatFields(s)) {
        fieldNamelist.add(s);
      }
    }
    for (String s : pcols) {
      if (AdhocOfflineService.isStatFields(s)) {
        fieldNamelist.add(s);
      }
    }
   
    fieldToName.put("field", fieldlist);
    fieldToName.put("namelist", fieldNamelist);
    return fieldToName;
  }
 
 
  public static void parseColsNoJoins(StringBuffer cols,ArrayList<String> groupFields,ArrayList<String> showFields,HashMap<String,String> colMapforStatFilter,AtomicInteger nameindex)
  {
    String join = "";

    for (String field : groupFields) {

      cols.append(join);
      cols.append(field);
      join = ",";
    }
    for (String field : showFields) {
      StateField showfield=WebServiceParams.parseStat(field);

      if(!groupFields.contains(field))
      {
        cols.append(join);
        cols.append(field);
       
        if(showfield.isstat)
        {
          String alias="tmp_"+nameindex.incrementAndGet();
          cols.append(" as "+alias);
          colMapforStatFilter.put(field, alias);
        }
        join = ",";
      }
    }
  }
 
  public static boolean hasStatFiled(ArrayList<String> showFields)
  {
    for (String field : showFields) {
      StateField showfield=WebServiceParams.parseStat(field);
      if(showfield.isstat)
      {
        return true;
      }
    }
    return false;
  }
 
  public static void parseColsWithJoins(StringBuffer cols,StringBuffer cols_inner,HigoAdhocJoinParams[] joins,HashMap<String,String> colMap,HashMap<String,String> colMapforStatFilter,ArrayList<String> groupFields,ArrayList<String> showFields,AtomicInteger nameindex)
  {
    //----inner begin-----
    String join = "";

    for (String field : groupFields) {
      if(colMap.containsKey(field))
      {
        continue;
      }
      cols_inner.append(join);
      cols_inner.append(field);
      String alias="tmp_"+nameindex.incrementAndGet();
      cols_inner.append(" as "+alias);
      colMap.put(field, alias);
      join = ",";
    }
    for (String field : showFields) {
      StateField showfield=WebServiceParams.parseStat(field);
      if(!groupFields.contains(showfield.realField))
      {
        if(colMap.containsKey(showfield.realField))
        {
          continue;
        }
        cols_inner.append(join);
        cols_inner.append(showfield.realField);
        String alias="tmp_"+nameindex.incrementAndGet();
        cols_inner.append(" as "+alias);
        colMap.put(showfield.realField, alias);
        join = ",";
      }
    }
   
    for(int i=0;i<joins.length;i++)
    {
      HigoAdhocJoinParams jp=joins[i];
      if(!groupFields.contains(jp.leftkey)&&!showFields.contains(jp.leftkey))
      {
        if(colMap.containsKey(jp.leftkey))
        {
          continue;
        }
        cols_inner.append(join);
        cols_inner.append(jp.leftkey);
        String alias="tmp_"+nameindex.incrementAndGet();
        cols_inner.append(" as "+alias);
        colMap.put(jp.leftkey, alias);
        join = ",";
      }
    }
   
   
    //----inner end-----
   
   
   
   
   
    join = "";
    for (String field : groupFields) {
      cols.append(join);
      cols.append("jl1.");
      cols.append(colMap.get(field));
      String alias="tmp_"+nameindex.incrementAndGet();
      cols.append(" as "+alias);
      join = ",";
    }
    for (String field : showFields) {
     
      StateField showfield=WebServiceParams.parseStat(field);
     
      if(!groupFields.contains(showfield.realField))
      {
        if(!showfield.isstat)
        {
          cols.append(join);

          cols.append("jl1.");
          cols.append(colMap.get(showfield.realField));
          join = ",";

        }
      }
    }
   
    for(int i=0;i<joins.length;i++)
    {
      HigoAdhocJoinParams jp=joins[i];
      for (String field : jp.fl) {
        cols.append(join);
        cols.append("jr"+i+".");
        cols.append(field);
        String alias="tmp_"+nameindex.incrementAndGet();
        cols.append(" as "+alias);
        join = ",";
      }
    }
    for (String field : showFields) {
     
      StateField showfield=WebServiceParams.parseStat(field);
     
      if(!groupFields.contains(showfield.realField))
      {
        if(showfield.isstat)
        {
          cols.append(join);

          cols.append(showfield.type);
          cols.append("(");
          cols.append("jl1.");
          cols.append(colMap.get(showfield.realField));
          cols.append(")");
         
          String alias="tmp_"+nameindex.incrementAndGet();
          cols.append(" as "+alias);
          colMapforStatFilter.put(field, alias);
          join = ",";

        }
      }
    }
   
   
  }
 
  public static String parseDayCols(String hpart,ArrayList<String> groupFields,ArrayList<String> showFields)
  {
    String daycols="";
    for (String field : groupFields) {
      if(field.equals("thedate"))
      {
        daycols="日期,";
      }
      if(field.equals(hpart))
      {
        daycols="日期,";
      }
    }
    for (String field : showFields) {
      if(field.equals("thedate"))
      {
        daycols="日期,";
      }
      if(field.equals(hpart))
      {
        daycols="日期,";
      }
    }
    return daycols;
  }
 
  public  static StringBuffer makeWhere(ArrayList<String> fqList,ArrayList<String> notin,String key)
  {
    StringBuffer sqlWhere = new StringBuffer();
    String join = " where ";
    for (String fq : fqList) {
      sqlWhere.append(join);
      sqlWhere.append(fq);
      join = " and ";
    }
   
    for (String p : notin) {
      sqlWhere.append(join);
      sqlWhere.append("inhdfs_udf("+key+",'"+p+"')='-'");
      join = " and ";
    }
   
   
   
    return sqlWhere;
  }
  public static HigoAdhocJoinParams[] parseJoinsHive(String leftjoin,GetPartions.Shards shard) throws JSONException, SQLException
  {
    if(leftjoin==null||leftjoin.trim().isEmpty())
    {
      return new HigoAdhocJoinParams[0];
    }
    JSONArray jsonStr=new JSONArray(leftjoin.trim());
    HigoAdhocJoinParams[] rtn=new HigoAdhocJoinParams[jsonStr.length()];
    for(int i=0;i<jsonStr.length();i++)
    {
      JSONObject obj=jsonStr.getJSONObject(i);
      HigoAdhocJoinParams p=new HigoAdhocJoinParams();
      p.tablename=obj.getString("tablename");
     
      HashMap<String, String> map=TableJoin.getTableInfo(p.tablename);
      if(map!=null)
      {
        p.txtPath=map.get("txtStorePath");
      }
      p.hdfsPath=obj.getString("path")+"/part-00000";
      if(shard!=null)
      {
        p.fq=WebServiceParams.fqListHive(false,"dt",obj.getString("fq"),false,null,null,null,null);
      }
      p.fl=obj.getString("fl").split(",");
      p.leftkey=obj.getString("leftkey");
      p.rightkey=obj.getString("rightkey");
      p.returnPrefix=obj.getString("prefix");
      p.sort=obj.has("sort")?obj.getString("sort"):"";
     
      String tmptblname=("tmp_"+p.tablename+"_"+System.currentTimeMillis()).replaceAll("-", "_");
      p.createSql=AdhocHiveTmpTable.createTmpTable(tmptblname, map.get("colsName").split(","), map.get("splitString"));
      p.DropSql=AdhocHiveTmpTable.dropTable(tmptblname);
      p.addData=AdhocHiveTmpTable.addData(tmptblname, map.get("txtStorePath"));
     
      StringBuffer sqlWhere = new StringBuffer();
      String join = " where ";
      for (String fq : p.fq) {
        sqlWhere.append(join);
        sqlWhere.append(fq);
        join = " and ";
      }
      HashSet<String> allfl=new HashSet<String>();
      for(String s:obj.getString("fl").split(","))
      {
        allfl.add(s.trim());
      }
      allfl.add(p.rightkey);
     
      StringBuffer buff=new StringBuffer();
      String joinchar="";
      for(String fl:allfl)
      {
        buff.append(joinchar);
        buff.append(fl);
        joinchar=",";
      }
     
      p.frQuer="select "+ buff.toString()+" from "+tmptblname +" "+sqlWhere.toString();
      rtn[i]=p;
    }
    return rtn;
  }
}
TOP

Related Classes of com.alimama.mdrill.ui.service.AdhocWebServiceParams$HigoAdhocJoinParams

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.