0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 package org.apache.hive.service.cli.operation;
0020
0021 import java.util.Arrays;
0022 import java.util.Collection;
0023 import java.util.HashMap;
0024 import java.util.HashSet;
0025 import java.util.Map;
0026 import java.util.Set;
0027
0028 import com.google.common.collect.ArrayListMultimap;
0029 import com.google.common.collect.Iterables;
0030 import com.google.common.collect.Multimap;
0031 import org.apache.hadoop.hive.metastore.TableType;
0032 import org.slf4j.Logger;
0033 import org.slf4j.LoggerFactory;
0034
0035
0036
0037
0038
0039
0040
0041
0042 public class ClassicTableTypeMapping implements TableTypeMapping {
0043
0044 private static final Logger LOG = LoggerFactory.getLogger(ClassicTableTypeMapping.class);
0045
0046 public enum ClassicTableTypes {
0047 TABLE,
0048 VIEW,
0049 MATERIALIZED_VIEW,
0050 }
0051
0052 private final Map<String, String> hiveToClientMap = new HashMap<String, String>();
0053 private final Multimap<String, String> clientToHiveMap = ArrayListMultimap.create();
0054
0055 public ClassicTableTypeMapping() {
0056 hiveToClientMap.put(TableType.MANAGED_TABLE.name(), ClassicTableTypes.TABLE.name());
0057 hiveToClientMap.put(TableType.EXTERNAL_TABLE.name(), ClassicTableTypes.TABLE.name());
0058 hiveToClientMap.put(TableType.VIRTUAL_VIEW.name(), ClassicTableTypes.VIEW.name());
0059 hiveToClientMap.put(TableType.MATERIALIZED_VIEW.toString(),
0060 ClassicTableTypes.MATERIALIZED_VIEW.toString());
0061
0062 clientToHiveMap.putAll(ClassicTableTypes.TABLE.name(), Arrays.asList(
0063 TableType.MANAGED_TABLE.name(), TableType.EXTERNAL_TABLE.name()));
0064 clientToHiveMap.put(ClassicTableTypes.VIEW.name(), TableType.VIRTUAL_VIEW.name());
0065 clientToHiveMap.put(ClassicTableTypes.MATERIALIZED_VIEW.toString(),
0066 TableType.MATERIALIZED_VIEW.toString());
0067 }
0068
0069 @Override
0070 public String[] mapToHiveType(String clientTypeName) {
0071 Collection<String> hiveTableType = clientToHiveMap.get(clientTypeName.toUpperCase());
0072 if (hiveTableType == null) {
0073 LOG.warn("Not supported client table type " + clientTypeName);
0074 return new String[] {clientTypeName};
0075 }
0076 return Iterables.toArray(hiveTableType, String.class);
0077 }
0078
0079 @Override
0080 public String mapToClientType(String hiveTypeName) {
0081 String clientTypeName = hiveToClientMap.get(hiveTypeName);
0082 if (clientTypeName == null) {
0083 LOG.warn("Invalid hive table type " + hiveTypeName);
0084 return hiveTypeName;
0085 }
0086 return clientTypeName;
0087 }
0088
0089 @Override
0090 public Set<String> getTableTypeNames() {
0091 Set<String> typeNameSet = new HashSet<String>();
0092 for (ClassicTableTypes typeNames : ClassicTableTypes.values()) {
0093 typeNameSet.add(typeNames.name());
0094 }
0095 return typeNameSet;
0096 }
0097
0098 }