KYLIN-2222 web ui uses rest api to decide which dim encoding is valid for different typed columns
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/722efb82 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/722efb82 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/722efb82 Branch: refs/heads/KYLIN-2428 Commit: 722efb82357e0ebcf7853a813272bd960044dd52 Parents: 570ab42 Author: Hongbin Ma <mahong...@apache.org> Authored: Wed Feb 8 21:41:41 2017 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Wed Feb 8 21:41:57 2017 +0800 ---------------------------------------------------------------------- .../rest/controller/EncodingController.java | 73 ++++++++++++++++++++ .../kylin/rest/service/EncodingService.java | 54 +++++++++++++++ 2 files changed, 127 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/722efb82/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java new file mode 100644 index 0000000..2f532e2 --- /dev/null +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +package org.apache.kylin.rest.controller; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.kylin.metadata.datatype.DataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import org.apache.kylin.rest.service.EncodingService; + +@Controller +@RequestMapping(value = "/encodings") +public class EncodingController extends BasicController { + + private static final Logger logger = LoggerFactory.getLogger(EncodingController.class); + + @Autowired + private EncodingService encodingService; + + /** + * Get valid encodings for the datatype, if no datatype parameter, return all encodings. + * + * @return suggestion map + */ + @RequestMapping(value = "valid_encodings", method = { RequestMethod.GET }) + @ResponseBody + public Map<String, Object> getValidEncodings() { + + Set<String> allDatatypes = Sets.newHashSet(); + allDatatypes.addAll(DataType.DATETIME_FAMILY); + allDatatypes.addAll(DataType.INTEGER_FAMILY); + allDatatypes.addAll(DataType.NUMBER_FAMILY); + allDatatypes.addAll(DataType.STRING_FAMILY); + + Map<String, List<String>> datatypeValidEncodings = Maps.newHashMap(); + for (String dataTypeStr : allDatatypes) { + datatypeValidEncodings.put(dataTypeStr, encodingService.getValidEncodings(DataType.getType(dataTypeStr))); + } + + Map<String, Object> ret = Maps.newHashMap(); + ret.put("code", "000"); + ret.put("data", datatypeValidEncodings); + return ret; + } +} http://git-wip-us.apache.org/repos/asf/kylin/blob/722efb82/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java b/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java new file mode 100644 index 0000000..7d7d016 --- /dev/null +++ b/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + + +package org.apache.kylin.rest.service; + +import java.util.List; + +import org.apache.kylin.dimension.BooleanDimEnc; +import org.apache.kylin.dimension.DateDimEnc; +import org.apache.kylin.dimension.DictionaryDimEnc; +import org.apache.kylin.dimension.FixedLenDimEnc; +import org.apache.kylin.dimension.FixedLenHexDimEnc; +import org.apache.kylin.dimension.IntegerDimEnc; +import org.apache.kylin.dimension.TimeDimEnc; +import org.apache.kylin.metadata.datatype.DataType; +import org.springframework.stereotype.Component; + +import com.google.common.collect.Lists; + +@Component("encodingService") +public class EncodingService extends BasicService { + + public List<String> getValidEncodings(DataType dataType) { + if (dataType.isIntegerFamily()) { + return Lists.newArrayList(BooleanDimEnc.ENCODING_NAME, DateDimEnc.ENCODING_NAME, TimeDimEnc.ENCODING_NAME, DictionaryDimEnc.ENCODING_NAME, IntegerDimEnc.ENCODING_NAME); + } else if (dataType.isNumberFamily()) { //numbers include integers + return Lists.newArrayList(DictionaryDimEnc.ENCODING_NAME); + } else if (dataType.isDateTimeFamily()) { + return Lists.newArrayList(DateDimEnc.ENCODING_NAME, TimeDimEnc.ENCODING_NAME, DictionaryDimEnc.ENCODING_NAME); + } else if (dataType.isStringFamily()) { + return Lists.newArrayList(BooleanDimEnc.ENCODING_NAME, DateDimEnc.ENCODING_NAME, TimeDimEnc.ENCODING_NAME, DictionaryDimEnc.ENCODING_NAME, FixedLenDimEnc.ENCODING_NAME, // + FixedLenHexDimEnc.ENCODING_NAME, IntegerDimEnc.ENCODING_NAME); + } else { + throw new IllegalArgumentException("can't provide valid encodings for datatype:" + dataType); + } + } + +}