View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.giraph.io.hcatalog;
20  
21  import com.google.common.base.Splitter;
22  import com.google.common.collect.Lists;
23  import com.google.common.collect.Maps;
24  
25  import java.util.List;
26  import java.util.Map;
27  
28  /**
29   * Utilities and helpers for working with Hive tables.
30   */
31  public class HiveUtils {
32    // TODO use Hive util class if this is already provided by it
33  
34    /**
35     * Private constructor for helper class.
36     */
37    private HiveUtils() {
38      // Do nothing.
39    }
40  
41    /**
42    * @param outputTablePartitionString table partition string
43    * @return Map
44    */
45    public static Map<String, String> parsePartitionValues(
46        String outputTablePartitionString) {
47      if (outputTablePartitionString == null) {
48        return null;
49      }
50      Splitter commaSplitter = Splitter.on(',').omitEmptyStrings().trimResults();
51      Splitter equalSplitter = Splitter.on('=').omitEmptyStrings().trimResults();
52      Map<String, String> partitionValues = Maps.newHashMap();
53      for (String keyValStr : commaSplitter.split(outputTablePartitionString)) {
54        List<String> keyVal = Lists.newArrayList(equalSplitter.split(keyValStr));
55        if (keyVal.size() != 2) {
56          throw new IllegalArgumentException(
57              "Unrecognized partition value format: " +
58              outputTablePartitionString);
59        }
60        partitionValues.put(keyVal.get(0), keyVal.get(1));
61      }
62      return partitionValues;
63    }
64  }