Back to home page

OSCL-LXR

 
 

    


0001 /**
0002  * Licensed to the Apache Software Foundation (ASF) under one
0003  * or more contributor license agreements.  See the NOTICE file
0004  * distributed with this work for additional information
0005  * regarding copyright ownership.  The ASF licenses this file
0006  * to you under the Apache License, Version 2.0 (the
0007  * "License"); you may not use this file except in compliance
0008  * with the License.  You may obtain a copy of the License at
0009  *
0010  *     http://www.apache.org/licenses/LICENSE-2.0
0011  *
0012  * Unless required by applicable law or agreed to in writing, software
0013  * distributed under the License is distributed on an "AS IS" BASIS,
0014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0015  * See the License for the specific language governing permissions and
0016  * limitations under the License.
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  * ClassicTableTypeMapping.
0037  * Classic table type mapping :
0038  *  Managed Table to Table
0039  *  External Table to Table
0040  *  Virtual View to View
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 }