You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ai...@apache.org on 2018/08/08 17:48:05 UTC
hive git commit: HIVE-20136: Code Review of ArchiveUtils Class
(BELUGA BEHR, reviewed by Aihua Xu)
Repository: hive
Updated Branches:
refs/heads/master 0fd23b6bd -> 7dce7b79b
HIVE-20136: Code Review of ArchiveUtils Class (BELUGA BEHR, reviewed by Aihua Xu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/7dce7b79
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/7dce7b79
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/7dce7b79
Branch: refs/heads/master
Commit: 7dce7b79b9d877256046c5e595110a23de9bdcce
Parents: 0fd23b6
Author: Aihua Xu <ai...@apache.org>
Authored: Wed Aug 8 10:40:14 2018 -0700
Committer: Aihua Xu <ai...@apache.org>
Committed: Wed Aug 8 10:40:14 2018 -0700
----------------------------------------------------------------------
.../hadoop/hive/ql/exec/ArchiveUtils.java | 78 ++++++++------------
1 file changed, 32 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/7dce7b79/ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java
index 5576d11..6ad0556 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/ArchiveUtils.java
@@ -21,13 +21,14 @@ package org.apache.hadoop.hive.ql.exec;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.Warehouse;
@@ -41,7 +42,6 @@ import org.apache.hadoop.hive.ql.metadata.Table;
/**
* ArchiveUtils.
- *
*/
@SuppressWarnings("nls")
public final class ArchiveUtils {
@@ -105,7 +105,7 @@ public final class ArchiveUtils {
throw new HiveException("Unable to get partitions directories prefix", e);
}
Path tableDir = tbl.getDataLocation();
- if(tableDir == null) {
+ if (tableDir == null) {
throw new HiveException("Table has no location set");
}
return new Path(tableDir, prefixSubdir);
@@ -136,16 +136,16 @@ public final class ArchiveUtils {
public HarPathHelper(HiveConf hconf, URI archive, URI originalBase) throws HiveException {
this.originalBase = addSlash(originalBase);
String parentHost = archive.getHost();
- String harHost = null;
+ String harHost = archive.getScheme();
if (parentHost == null) {
- harHost = archive.getScheme() + "-localhost";
+ harHost += "-localhost";
} else {
- harHost = archive.getScheme() + "-" + parentHost;
+ harHost += "-" + parentHost;
}
// have to make sure there's slash after .har, otherwise resolve doesn't work
- String path = addSlash(archive.getPath());
- if(!path.endsWith(".har/")) {
+ String path = StringUtils.appendIfMissing(archive.getPath(), "/");
+ if (!path.endsWith(".har/")) {
throw new HiveException("HAR archive path must end with .har");
}
// harUri is used to access the partition's files, which are in the archive
@@ -155,41 +155,33 @@ public final class ArchiveUtils {
base = new URI("har", archive.getUserInfo(), harHost, archive.getPort(),
path, archive.getQuery(), archive.getFragment());
} catch (URISyntaxException e) {
- throw new HiveException("Couldn't create har URI from archive URI", e);
+ throw new HiveException("Could not create har URI from archive URI", e);
}
}
public URI getHarUri(URI original) throws URISyntaxException {
URI relative = originalBase.relativize(original);
if (relative.isAbsolute()) {
- throw new URISyntaxException("Couldn't create URI for location.",
- "Relative: " + relative + " Base: "
- + base + " OriginalBase: " + originalBase);
+ throw new URISyntaxException("Could not create URI for location.",
+ "Relative: " + relative + " Base: " + base + " OriginalBase: "
+ + originalBase);
}
-
return base.resolve(relative);
-
-
}
}
- public static String addSlash(String s) {
- return s.endsWith("/") ? s : s + "/";
- }
-
/**
* Makes sure, that URI points to directory by adding slash to it.
* Useful in relativizing URIs.
*/
public static URI addSlash(URI u) throws HiveException {
- if(u.getPath().endsWith("/")) {
+ if (u.getPath().endsWith("/")) {
return u;
- } else {
- try {
- return new URI(u.getScheme(), u.getAuthority(), u.getPath() + "/", u.getQuery(), u.getFragment());
- } catch (URISyntaxException e) {
- throw new HiveException("Couldn't append slash to a URI", e);
- }
+ }
+ try {
+ return new URI(u.getScheme(), u.getAuthority(), u.getPath() + "/", u.getQuery(), u.getFragment());
+ } catch (URISyntaxException e) {
+ throw new HiveException("Could not append slash to a URI", e);
}
}
@@ -217,9 +209,9 @@ public final class ArchiveUtils {
}
/**
- * Get a prefix of the given parition's string representation. The sencond
+ * Get a prefix of the given parition's string representation. The second
* argument, level, is used for the prefix length. For example, partition
- * (ds='2010-01-01', hr='00', min='00'), level 1 will reture 'ds=2010-01-01',
+ * (ds='2010-01-01', hr='00', min='00'), level 1 will return 'ds=2010-01-01',
* and level 2 will return 'ds=2010-01-01/hr=00'.
*
* @param p
@@ -230,16 +222,8 @@ public final class ArchiveUtils {
* @throws HiveException
*/
public static String getPartialName(Partition p, int level) throws HiveException {
- List<FieldSchema> ffields = p.getTable().getPartCols();
- List<FieldSchema> fields = new ArrayList<FieldSchema>(level);
- List<String> fvalues = p.getValues();
- List<String> values = new ArrayList<String>(level);
- for(int i =0;i<level;i++) {
- FieldSchema fs = ffields.get(i);
- String s = fvalues.get(i);
- fields.add(fs);
- values.add(s);
- }
+ List<FieldSchema> fields = p.getTable().getPartCols().subList(0, level);
+ List<String> values = p.getValues().subList(0, level);
try {
return Warehouse.makePartName(fields, values);
} catch (MetaException e) {
@@ -282,19 +266,21 @@ public final class ArchiveUtils {
partSpecLevel++;
}
- if(partSpecLevel != partSpec.size()) {
- throw new HiveException("partspec " + partSpec
- + " is wrong for table " + tbl.getTableName());
+ if (partSpecLevel != partSpec.size()) {
+ throw new HiveException(
+ "partspec " + partSpec + " is wrong for table " + tbl.getTableName());
}
Map<String, String> spec = new HashMap<String, String>(partSpec);
- List<String> reversedKeys = new LinkedList<String>();
+ List<String> reversedKeys = new ArrayList<String>();
for (FieldSchema fs : tbl.getPartCols()) {
if (spec.containsKey(fs.getName())) {
- reversedKeys.add(0, fs.getName());
+ reversedKeys.add(fs.getName());
}
}
+ Collections.reverse(reversedKeys);
+
for (String rk : reversedKeys) {
List<Partition> parts = db.getPartitions(tbl, spec, (short) 1);
if (parts.size() != 0) {
@@ -304,14 +290,14 @@ public final class ArchiveUtils {
// partition would be archived, so it not being archived means
// no archiving was done neither at this nor at upper level
return null;
- } else if (getArchivingLevel(p) > spec.size()) {
+ }
+ if (getArchivingLevel(p) > spec.size()) {
// if archiving was done at this or at upper level its level
// would be lesser or equal to specification size
// it is not, which means no archiving at this or upper level
return null;
- } else {
- return getPartialName(p, getArchivingLevel(p));
}
+ return getPartialName(p, getArchivingLevel(p));
}
spec.remove(rk);
}