魔数Plus

给魔数添加一些便捷操作

当前为 2022-01-11 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         魔数Plus
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  给魔数添加一些便捷操作
// @author       duantianci
// @match        https://bi.sankuai.com/sql/edit*
// @icon         https://www.google.com/s2/favicons?domain=sankuai.com
// @license      MIT
// @run-at       document-end
// @grant        unsafeWindow
// @require      https://cdn.jsdelivr.net/gh/vkiryukhin/vkBeautify@1645229b04dfa47a2bd7def5562754cb7bae52bd/vkbeautify.min.js
// ==/UserScript==

(function() {
     // Your code here...
     var selectAllBtn = createSelectAllBtn(); // select *
     var SelectAggrBtn = createSelectAggrBtn(); // 单表聚合
     var SelectAggrDiffBtn = createSelectAggrDiffBtn(); // 双表聚合diff
     var AllDiffBtn = createAllDiffBtn(); // 无diff测试
     var btnList = [selectAllBtn,SelectAggrBtn,SelectAggrDiffBtn,AllDiffBtn];


     setTimeout( function(){
       console.log("i am here")
       var matchingElement=document.querySelector("#app > div > div.main-content-wrapper > div > div > div > div.sql-edit > div > div.mtd-tabs-content > div > div > div:nth-child(2) > div > div > span > span.mtd-tooltip-rel > span > button")
       console.log(matchingElement.innerText)
       var beforeEle = matchingElement
       for (var i in btnList){
           var curBtn=btnList[i]
           beforeEle.parentElement.insertBefore(curBtn,beforeEle);
           beforeEle=curBtn;
       }
      },2000);
})();


Date.prototype.format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小时
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for(var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

var getDate=function(delta){
 var day = new Date();
 day.setDate(day.getDate() - delta);
 var sDate = day.format("yyyyMMdd");
 return sDate;
}

var getFormatBtn = function(){
    return document.getElementsByClassName("sql-icon-format")[0];
}


var getCm = function(){
    return document.getElementsByClassName("CodeMirror cm-s-xq-light CodeMirror-wrap")[0].CodeMirror;
}

var getDiffTableName = function(oriTableName){
    return oriTableName.split(".")[0]+"_test." + oriTableName.split(".")[1]
}

var getTableName = function(){
   return document.getElementsByClassName("table-line show-column")[0].childNodes[1].childNodes[0].title;
}

var getColsName = function(){
   var tableCols=[];
   var table = document.getElementsByClassName("column-list")[0];
   var rows = table.rows;//获取所有行
   console.log("lenth",rows.length) //
   for(var i=1; i < rows.length; i++){
       var row = rows[i];//获取每一行
       var colName = row.cells[0].title;//获取具体单元格
       tableCols.push(colName);
   }
   return tableCols;
}


var getColInfo = function(cols){
    var sumEndPatterns=['num', 'cnt', 'amt','fee','1d','7d','15d']
    var disEndPatterns=['uv','user','poi_num']
    var sumCols=cols.filter(name => (
    sumEndPatterns.some(pattern => name.endsWith(pattern)) && !disEndPatterns.some(pattern => name.endsWith(pattern))
)).map(function(col){
    return 'sum('+ col +') as '+col
    }).join(',');

   var disCols=cols.filter(name => (
  disEndPatterns.some(pattern => name.endsWith(pattern))
)).map(function(col){
    return  'count(distinct '+ col +') as '+col
    }).join(',');
   return {'sum':sumCols,'dis':disCols};
}



// select *
function createSelectAllBtn(){
     let selectAllBtn=document.createElement("button");
     selectAllBtn.innerText="select *";
     selectAllBtn.onclick=function(){
         var yesterday=getDate(1);
         var cm = getCm();
         var tableName =getTableName();
         var tableCols = getColsName();
         var joinCols = tableCols.join(",")
         var finalSql="select " +tableCols.join(",") +" from "+tableName +" where dt ="+yesterday +" limit 100";
         var beautifulSql=vkbeautify.sql(finalSql);
         cm.setValue(beautifulSql);
     }
     return selectAllBtn;
}

// 单表聚合
function createSelectAggrBtn(){
     let selectAllBtn=document.createElement("button");
     selectAllBtn.innerText="单表聚合";
     selectAllBtn.onclick=function(){
         var yesterday=getDate(1);
         var cm = getCm();
         var tableName =getTableName();
         var tableCols = getColsName();
         var colInfo = getColInfo(tableCols);
         var commaInfo = colInfo.dis=='' ? '' : ',';
         var finalSql="select " +colInfo.sum +commaInfo+colInfo.dis +" from "+tableName +" where dt ="+yesterday;
         var beautifulSql=vkbeautify.sql(finalSql);
         cm.setValue(beautifulSql);
     }
     return selectAllBtn;
}

//双表聚合diff
function createSelectAggrDiffBtn(){
     let selectAllBtn=document.createElement("button");
     selectAllBtn.innerText="双表聚合diff";
     selectAllBtn.onclick=function(){
         var yesterday=getDate(1);
         var cm = getCm();
         var tableName =getTableName();
         var diffTabeName = getDiffTableName(tableName);
         var tableCols = getColsName();
         var colInfo = getColInfo(tableCols);
         var commaInfo = colInfo.dis=='' ? '' : ',';
         var online ="select " +colInfo.sum +commaInfo+colInfo.dis +" from "+tableName +" where dt ="+yesterday;
         var test   ="select " +colInfo.sum +commaInfo+colInfo.dis +" from "+diffTabeName +" where dt ="+yesterday;
         //var finalSql="select " +colInfo.sum +commaInfo+colInfo.dis +" from "+tableName +" where dt ="+yesterday + " union all    select " +colInfo.sum +commaInfo+colInfo.dis +" from "+diffTabeName +" where dt ="+yesterday;
         var beautifulSql=vkbeautify.sql(online) + " union all "+vkbeautify.sql(test);
         cm.setValue(beautifulSql);
     }
     return selectAllBtn;
}

//双表无diff
function createAllDiffBtn(){
     let selectAllBtn=document.createElement("button");
     selectAllBtn.innerText="双表无diff";
     selectAllBtn.onclick=function(){
         var yesterday=getDate(1);
         var cm = getCm();
         var tableName =getTableName();
         var tableCols = getColsName();
         var joinCols = tableCols.join(",")
         var finalSql="select "+tableCols.join(",") +", COUNT(*) num FROM (select " +tableCols.join(",") +" from "+tableName +" where dt ="+yesterday+" union all   select " +tableCols.join(",") +" from "+tableName +" where dt ="+yesterday +" )tmp GROUP BY " + tableCols.join(",") + " HAVING COUNT(*) !=2";
         // var beautifulSql=vkbeautify.sql(finalSql);
         cm.setValue(finalSql);
     }
     return selectAllBtn;
}