diff --git a/pom.xml b/pom.xml
index 59d2ba7..b925973 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
io.cdap.plugin
multi-table-plugins
- 1.4.1
+ 1.4.2-SNAPSHOT
jar
Multiple Table Plugins
diff --git a/src/main/java/io/cdap/plugin/format/DBTableRecordReader.java b/src/main/java/io/cdap/plugin/format/DBTableRecordReader.java
index ad3ac28..b612a6e 100644
--- a/src/main/java/io/cdap/plugin/format/DBTableRecordReader.java
+++ b/src/main/java/io/cdap/plugin/format/DBTableRecordReader.java
@@ -24,6 +24,8 @@
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.sql.Connection;
@@ -38,6 +40,8 @@
* Record reader that reads the entire contents of a database table using JDBC.
*/
public class DBTableRecordReader extends RecordReader {
+ private static final Logger LOG = LoggerFactory.getLogger(DBTableRecordReader.class);
+
private final DBTableName tableName;
private final String tableNameField;
private final MultiTableConf dbConf;
@@ -85,6 +89,10 @@ public boolean nextKeyValue() throws IOException {
schema = Schema.recordOf(tableName.getTable(), schemaFields);
}
if (!results.next()) {
+ if (pos == 0 && DBTableSplit.DEFAULT_CLAUSE.equals(split.getLowerClause())
+ && DBTableSplit.DEFAULT_CLAUSE.equals(split.getUpperClause())) {
+ LOG.info("Source table '{}' has zero records.", tableName.fullTableName());
+ }
return false;
}
diff --git a/src/main/java/io/cdap/plugin/format/DBTableSplit.java b/src/main/java/io/cdap/plugin/format/DBTableSplit.java
index 87142cb..02c115c 100644
--- a/src/main/java/io/cdap/plugin/format/DBTableSplit.java
+++ b/src/main/java/io/cdap/plugin/format/DBTableSplit.java
@@ -26,7 +26,7 @@
* A split representing data in a database table.
*/
public class DBTableSplit extends DataDrivenDBInputFormat.DataDrivenDBInputSplit {
- private static final String DEFAULT_CLAUSE = "1=1";
+ public static final String DEFAULT_CLAUSE = "1=1";
private DBTableName tableName;
diff --git a/src/main/java/io/cdap/plugin/format/MultiTableDBInputFormat.java b/src/main/java/io/cdap/plugin/format/MultiTableDBInputFormat.java
index b985e34..69d7402 100644
--- a/src/main/java/io/cdap/plugin/format/MultiTableDBInputFormat.java
+++ b/src/main/java/io/cdap/plugin/format/MultiTableDBInputFormat.java
@@ -196,6 +196,9 @@ private List getTableSplits(Connection connection, MultiTableDBConfi
columnName,
conf.getPluginConf().getWhereClause()))) {
results.next();
+ if (results.getObject(1) == null && results.getObject(2) == null) {
+ return Collections.singletonList(new DBTableSplit(info.getDbTableName()));
+ }
// Based on the type of the results, use a different mechanism
// for interpolating split points (i.e., numeric splits, text splits,
diff --git a/src/main/java/io/cdap/plugin/format/SQLStatementRecordReader.java b/src/main/java/io/cdap/plugin/format/SQLStatementRecordReader.java
index 4e534e8..37c4950 100644
--- a/src/main/java/io/cdap/plugin/format/SQLStatementRecordReader.java
+++ b/src/main/java/io/cdap/plugin/format/SQLStatementRecordReader.java
@@ -89,6 +89,9 @@ public boolean nextKeyValue() throws IOException {
schema = Schema.recordOf(tableName, schemaFields);
}
if (!results.next()) {
+ if (pos == 0) {
+ LOG.info("SQL statement '{}' ('{}') has zero records.", split.getId(), split.getSqlStatement());
+ }
return false;
}