From 6c37520aa7535adc56edc19776056d742a92b5e9 Mon Sep 17 00:00:00 2001 From: sahusanket Date: Fri, 15 May 2026 17:37:34 +0530 Subject: [PATCH] PLUGIN-1950 : Log zero records for Table mode and SQL Statement mode. --- .../java/io/cdap/plugin/format/DBTableRecordReader.java | 8 ++++++++ src/main/java/io/cdap/plugin/format/DBTableSplit.java | 2 +- .../io/cdap/plugin/format/MultiTableDBInputFormat.java | 3 +++ .../io/cdap/plugin/format/SQLStatementRecordReader.java | 3 +++ 4 files changed, 15 insertions(+), 1 deletion(-) 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; }