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; }