This is an automated email from the ASF dual-hosted git repository. boblu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 8f5f830 KYLIN-3942 Rea-time OLAP don't support multi-level json event 8f5f830 is described below commit 8f5f8302f19fbc72a2800bdb7191956ed54ad870 Author: luguosheng1314 <550175...@qq.com> AuthorDate: Fri Apr 12 13:33:57 2019 +0800 KYLIN-3942 Rea-time OLAP don't support multi-level json event --- webapp/app/js/controllers/sourceMeta.js | 134 ++++++++++++++------------------ 1 file changed, 57 insertions(+), 77 deletions(-) diff --git a/webapp/app/js/controllers/sourceMeta.js b/webapp/app/js/controllers/sourceMeta.js index 43ddbfe..62c2aa9 100755 --- a/webapp/app/js/controllers/sourceMeta.js +++ b/webapp/app/js/controllers/sourceMeta.js @@ -578,6 +578,48 @@ KylinApp } } + // 推断列的类型 + function checkColumnValType(val,key){ + var defaultType; + if(typeof val ==="number"){ + if(/id/i.test(key)&&val.toString().indexOf(".")==-1){ + defaultType="int"; + }else if(val <= 2147483647){ + if(val.toString().indexOf(".")!=-1){ + defaultType="decimal"; + }else{ + defaultType="int"; + } + }else{ + defaultType="timestamp"; + } + }else if(typeof val ==="string"){ + if(!isNaN((new Date(val)).getFullYear())&&typeof ((new Date(val)).getFullYear())==="number"){ + defaultType="date"; + }else{ + defaultType="varchar(256)"; + } + }else if(Object.prototype.toString.call(val)=="[object Array]"){ + defaultType="varchar(256)"; + }else if (typeof val ==="boolean"){ + defaultType="boolean"; + } + return defaultType; + } + // 打平straming表结构 + function flatStreamingJson (objRebuildFunc, flatResult) { + return function flatObj (obj,base,comment) { + base=base?base+"_":""; + comment= comment?comment+"|":"" + for(var i in obj){ + if(Object.prototype.toString.call(obj[i])=="[object Object]"){ + flatObj(obj[i],base+i,comment+i); + continue; + } + flatResult.push(objRebuildFunc(base+i,obj[i],comment+i)); + } + } + } var StreamingSourceCtrl = function ($scope, $location,$interpolate,$templateCache, $modalInstance, tableNames, MessageService, projectName, scope, tableConfig,cubeConfig,StreamingModel,StreamingService) { @@ -686,51 +728,10 @@ KylinApp $scope.table.sourceValid = true; //streaming table data change structure - var columnList=[] - function changeObjTree(obj,base,comment){ - base=base?base+"_":""; - comment= comment?comment+"|":"" - for(var i in obj){ - if(Object.prototype.toString.call(obj[i])=="[object Object]"){ - changeObjTree(obj[i],base+i,comment+i); - continue; - } - columnList.push(createNewObj(base+i,obj[i],comment+i)); - } - } - - function checkValType(val,key){ - var defaultType; - if(typeof val ==="number"){ - if(/id/i.test(key)&&val.toString().indexOf(".")==-1){ - defaultType="int"; - }else if(val <= 2147483647){ - if(val.toString().indexOf(".")!=-1){ - defaultType="decimal"; - }else{ - defaultType="int"; - } - }else{ - defaultType="timestamp"; - } - }else if(typeof val ==="string"){ - if(!isNaN((new Date(val)).getFullYear())&&typeof ((new Date(val)).getFullYear())==="number"){ - defaultType="date"; - }else{ - defaultType="varchar(256)"; - } - }else if(Object.prototype.toString.call(val)=="[object Array]"){ - defaultType="varchar(256)"; - }else if (typeof val ==="boolean"){ - defaultType="boolean"; - } - return defaultType; - } - function createNewObj(key,val,comment){ var obj={}; obj.name=key; - obj.type=checkValType(val,key); + obj.type=checkColumnValType(val,key); obj.fromSource="Y"; obj.checked="Y"; obj.comment=comment; @@ -739,7 +740,8 @@ KylinApp } return obj; } - changeObjTree($scope.streaming.parseResult); + var columnList = [] + flatStreamingJson(createNewObj, columnList)($scope.streaming.parseResult) var timeMeasure = $scope.cubeConfig.streamingAutoGenerateMeasure; for(var i = 0;i<timeMeasure.length;i++){ var defaultCheck = 'Y'; @@ -1044,7 +1046,6 @@ KylinApp }; $scope.getTableData = function() { - $scope.tableData.name = ''; $scope.tableData.columns = []; @@ -1067,43 +1068,22 @@ KylinApp $scope.streaming.errMsg = 'Source json invalid, Please correct your schema and generate again.'; return; } - - var columnsByTemplate = []; - // kafka parser + var columnsByTemplate=[] + function createNewObj(key,val,comment){ + var obj={}; + obj.name=key; + obj.datatype=checkColumnValType(val,key); + obj.comment=comment; + if (obj.datatype === 'timestamp') { + $scope.streaming.TSColumnArr.push(key); + } + return obj; + } if (tableConfig.streamingSourceType.kafka === $scope.tableData.source_type) { // TODO kafka need to support json not just first layer - for (var key in templateObj) { - - var contentType = 'varchar(256)'; - var content = templateObj[key]; - - // TODO optimize the type parse - if (typeof content !== 'string') { - if (typeof content === 'boolean') { - contentType = 'boolean'; - } else if (typeof content === 'number'){ - if (content <= 2147483647) { //631152000 - if (content.toString().indexOf('.') != -1){ - contentType = 'decimal'; - } else { - contentType = 'int'; - } - } else { - contentType = 'timestamp'; - $scope.streaming.TSColumnArr.push(key); - } - } - } - - columnsByTemplate.push({ - name: key, - datatype: contentType - }); - - } + flatStreamingJson(createNewObj, columnsByTemplate)(templateObj) } - var columnsByAuto = []; // TODO change the streamingAutoGenerateMeasure format