SQOOP-1281: Support of glob paths during export
(Clément MAHTIEU via Jarek Jarcec Cecho)
diff --git a/src/java/org/apache/sqoop/mapreduce/ExportJobBase.java b/src/java/org/apache/sqoop/mapreduce/ExportJobBase.java
index f9fa7f3..068b8f7 100644
--- a/src/java/org/apache/sqoop/mapreduce/ExportJobBase.java
+++ b/src/java/org/apache/sqoop/mapreduce/ExportJobBase.java
@@ -127,18 +127,26 @@
FileSystem fs = p.getFileSystem(conf);
try {
- FileStatus stat = fs.getFileStatus(p);
+ FileStatus[] fileStatuses = fs.globStatus(p);
- if (null == stat) {
+ if (null == fileStatuses) {
// Couldn't get the item.
LOG.warn("Input path " + p + " does not exist");
return FileType.UNKNOWN;
}
+ if (fileStatuses.length == 0) {
+ LOG.warn("Input path " + p + " does not match any file");
+ return FileType.UNKNOWN;
+ }
+
+ FileStatus stat = fileStatuses[0];
+
if (stat.isDir()) {
- FileStatus [] subitems = fs.listStatus(p);
+ Path dir = stat.getPath();
+ FileStatus [] subitems = fs.listStatus(dir);
if (subitems == null || subitems.length == 0) {
- LOG.warn("Input path " + p + " contains no files");
+ LOG.warn("Input path " + dir + " contains no files");
return FileType.UNKNOWN; // empty dir.
}
diff --git a/src/test/com/cloudera/sqoop/TestAvroExport.java b/src/test/com/cloudera/sqoop/TestAvroExport.java
index 1d8f5df..5303048 100644
--- a/src/test/com/cloudera/sqoop/TestAvroExport.java
+++ b/src/test/com/cloudera/sqoop/TestAvroExport.java
@@ -333,6 +333,26 @@
}
}
+ public void testPathPatternInExportDir() throws IOException, SQLException {
+ final int TOTAL_RECORDS = 10;
+
+ ColumnGenerator[] gens = new ColumnGenerator[] {
+ colGenerator(true, Schema.create(Schema.Type.BOOLEAN), true, "BIT"),
+ };
+
+ createAvroFile(0, TOTAL_RECORDS, gens);
+ createTable(gens);
+
+ // Converts path to an unary set while preserving the leading '/'
+ String pathPattern = new StringBuilder(getTablePath().toString())
+ .insert(1, "{")
+ .append("}")
+ .toString();
+
+ runExport(getArgv(true, 10, 10, "--export-dir", pathPattern));
+ verifyExport(TOTAL_RECORDS);
+ }
+
public void testNullableField() throws IOException, SQLException {
String[] argv = {};
final int TOTAL_RECORDS = 1 * 10;