diff --git a/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CommitsCommand.java b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CommitsCommand.java index b2b6940bef3cd..1f508cc34fdcc 100644 --- a/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CommitsCommand.java +++ b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CommitsCommand.java @@ -110,7 +110,7 @@ private String printCommitsWithMetadata(HoodieDefaultTimeline timeline, final Integer limit, final String sortByField, final boolean descending, final boolean headerOnly, - final String tempTableName) throws IOException { + final String tempTableName, final String partition) throws IOException { final List rows = new ArrayList<>(); final List commits = timeline.getCommitsTimeline().filterCompletedInstants() @@ -127,14 +127,26 @@ private String printCommitsWithMetadata(HoodieDefaultTimeline timeline, for (Map.Entry> partitionWriteStat : commitMetadata.getPartitionToWriteStats().entrySet()) { for (HoodieWriteStat hoodieWriteStat : partitionWriteStat.getValue()) { - rows.add(new Comparable[]{ commit.getAction(), commit.getTimestamp(), hoodieWriteStat.getPartitionPath(), - hoodieWriteStat.getFileId(), hoodieWriteStat.getPrevCommit(), hoodieWriteStat.getNumWrites(), - hoodieWriteStat.getNumInserts(), hoodieWriteStat.getNumDeletes(), - hoodieWriteStat.getNumUpdateWrites(), hoodieWriteStat.getTotalWriteErrors(), - hoodieWriteStat.getTotalLogBlocks(), hoodieWriteStat.getTotalCorruptLogBlock(), - hoodieWriteStat.getTotalRollbackBlocks(), hoodieWriteStat.getTotalLogRecords(), - hoodieWriteStat.getTotalUpdatedRecordsCompacted(), hoodieWriteStat.getTotalWriteBytes() - }); + if (StringUtils.nonEmpty(partition) && partition.equals(hoodieWriteStat.getPartitionPath())) { + rows.add(new Comparable[] {commit.getAction(), commit.getTimestamp(), hoodieWriteStat.getPartitionPath(), + hoodieWriteStat.getFileId(), hoodieWriteStat.getPrevCommit(), hoodieWriteStat.getNumWrites(), + hoodieWriteStat.getNumInserts(), hoodieWriteStat.getNumDeletes(), + hoodieWriteStat.getNumUpdateWrites(), hoodieWriteStat.getTotalWriteErrors(), + hoodieWriteStat.getTotalLogBlocks(), hoodieWriteStat.getTotalCorruptLogBlock(), + hoodieWriteStat.getTotalRollbackBlocks(), hoodieWriteStat.getTotalLogRecords(), + hoodieWriteStat.getTotalUpdatedRecordsCompacted(), hoodieWriteStat.getTotalWriteBytes() + }); + break; + } else { + rows.add(new Comparable[] {commit.getAction(), commit.getTimestamp(), hoodieWriteStat.getPartitionPath(), + hoodieWriteStat.getFileId(), hoodieWriteStat.getPrevCommit(), hoodieWriteStat.getNumWrites(), + hoodieWriteStat.getNumInserts(), hoodieWriteStat.getNumDeletes(), + hoodieWriteStat.getNumUpdateWrites(), hoodieWriteStat.getTotalWriteErrors(), + hoodieWriteStat.getTotalLogBlocks(), hoodieWriteStat.getTotalCorruptLogBlock(), + hoodieWriteStat.getTotalRollbackBlocks(), hoodieWriteStat.getTotalLogRecords(), + hoodieWriteStat.getTotalUpdatedRecordsCompacted(), hoodieWriteStat.getTotalWriteBytes() + }); + } } } } @@ -176,12 +188,13 @@ public String showCommits( @CliOption(key = {"sortBy"}, help = "Sorting Field", unspecifiedDefaultValue = "") final String sortByField, @CliOption(key = {"desc"}, help = "Ordering", unspecifiedDefaultValue = "false") final boolean descending, @CliOption(key = {"headeronly"}, help = "Print Header Only", - unspecifiedDefaultValue = "false") final boolean headerOnly) + unspecifiedDefaultValue = "false") final boolean headerOnly, + @CliOption(key = {"partition"}, help = "Partition value") final String partition) throws IOException { HoodieActiveTimeline activeTimeline = HoodieCLI.getTableMetaClient().getActiveTimeline(); if (includeExtraMetadata) { - return printCommitsWithMetadata(activeTimeline, limit, sortByField, descending, headerOnly, exportTableName); + return printCommitsWithMetadata(activeTimeline, limit, sortByField, descending, headerOnly, exportTableName, partition); } else { return printCommits(activeTimeline, limit, sortByField, descending, headerOnly, exportTableName); } @@ -204,7 +217,8 @@ public String showArchivedCommits( @CliOption(key = {"desc"}, help = "Ordering", unspecifiedDefaultValue = "false") final boolean descending, @CliOption(key = {"headeronly"}, help = "Print Header Only", unspecifiedDefaultValue = "false") - final boolean headerOnly) + final boolean headerOnly, + @CliOption(key = {"partition"}, help = "Partition value") final String partition) throws IOException { if (StringUtils.isNullOrEmpty(startTs)) { startTs = CommitUtil.getTimeDaysAgo(10); @@ -217,7 +231,7 @@ public String showArchivedCommits( archivedTimeline.loadInstantDetailsInMemory(startTs, endTs); HoodieDefaultTimeline timelineRange = archivedTimeline.findInstantsInRange(startTs, endTs); if (includeExtraMetadata) { - return printCommitsWithMetadata(timelineRange, limit, sortByField, descending, headerOnly, exportTableName); + return printCommitsWithMetadata(timelineRange, limit, sortByField, descending, headerOnly, exportTableName, partition); } else { return printCommits(timelineRange, limit, sortByField, descending, headerOnly, exportTableName); } diff --git a/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CompactionCommand.java b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CompactionCommand.java index d3845137c8e23..a65bb66bad5b6 100644 --- a/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CompactionCommand.java +++ b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/CompactionCommand.java @@ -115,7 +115,8 @@ public String compactionShow( @CliOption(key = {"sortBy"}, help = "Sorting Field", unspecifiedDefaultValue = "") final String sortByField, @CliOption(key = {"desc"}, help = "Ordering", unspecifiedDefaultValue = "false") final boolean descending, @CliOption(key = {"headeronly"}, help = "Print Header Only", - unspecifiedDefaultValue = "false") final boolean headerOnly) + unspecifiedDefaultValue = "false") final boolean headerOnly, + @CliOption(key = {"partition"}, help = "Partition value") final String partition) throws Exception { HoodieTableMetaClient client = checkAndGetMetaClient(); HoodieActiveTimeline activeTimeline = client.getActiveTimeline(); @@ -123,7 +124,7 @@ public String compactionShow( activeTimeline.readCompactionPlanAsBytes( HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime)).get()); - return printCompaction(compactionPlan, sortByField, descending, limit, headerOnly); + return printCompaction(compactionPlan, sortByField, descending, limit, headerOnly, partition); } @CliCommand(value = "compactions showarchived", help = "Shows compaction details for specified time window") @@ -168,7 +169,8 @@ public String compactionShowArchived( @CliOption(key = {"sortBy"}, help = "Sorting Field", unspecifiedDefaultValue = "") final String sortByField, @CliOption(key = {"desc"}, help = "Ordering", unspecifiedDefaultValue = "false") final boolean descending, @CliOption(key = {"headeronly"}, help = "Print Header Only", - unspecifiedDefaultValue = "false") final boolean headerOnly) + unspecifiedDefaultValue = "false") final boolean headerOnly, + @CliOption(key = {"partition"}, help = "Partition value") final String partition) throws Exception { HoodieTableMetaClient client = checkAndGetMetaClient(); HoodieArchivedTimeline archivedTimeline = client.getArchivedTimeline(); @@ -178,7 +180,7 @@ public String compactionShowArchived( archivedTimeline.loadCompactionDetailsInMemory(compactionInstantTime); HoodieCompactionPlan compactionPlan = TimelineMetadataUtils.deserializeAvroRecordMetadata( archivedTimeline.getInstantDetails(instant).get(), HoodieCompactionPlan.getClassSchema()); - return printCompaction(compactionPlan, sortByField, descending, limit, headerOnly); + return printCompaction(compactionPlan, sortByField, descending, limit, headerOnly, partition); } finally { archivedTimeline.clearInstantDetailsFromMemory(compactionInstantTime); } @@ -408,12 +410,19 @@ protected String printCompaction(HoodieCompactionPlan compactionPlan, String sortByField, boolean descending, int limit, - boolean headerOnly) { + boolean headerOnly, + final String partition) { List rows = new ArrayList<>(); if ((null != compactionPlan) && (null != compactionPlan.getOperations())) { for (HoodieCompactionOperation op : compactionPlan.getOperations()) { - rows.add(new Comparable[]{op.getPartitionPath(), op.getFileId(), op.getBaseInstantTime(), op.getDataFilePath(), - op.getDeltaFilePaths().size(), op.getMetrics() == null ? "" : op.getMetrics().toString()}); + if (StringUtils.nonEmpty(partition) && partition.equals(op.getPartitionPath())) { + rows.add(new Comparable[] {op.getPartitionPath(), op.getFileId(), op.getBaseInstantTime(), op.getDataFilePath(), + op.getDeltaFilePaths().size(), op.getMetrics() == null ? "" : op.getMetrics().toString()}); + break; + } else { + rows.add(new Comparable[] {op.getPartitionPath(), op.getFileId(), op.getBaseInstantTime(), op.getDataFilePath(), + op.getDeltaFilePaths().size(), op.getMetrics() == null ? "" : op.getMetrics().toString()}); + } } } diff --git a/hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestCompactionCommand.java b/hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestCompactionCommand.java index bc5ba168e3ed8..9afdb56f5c71e 100644 --- a/hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestCompactionCommand.java +++ b/hudi-cli/src/test/java/org/apache/hudi/cli/commands/TestCompactionCommand.java @@ -225,7 +225,7 @@ public void testCompactionShowArchived() throws IOException { CommandResult cr = shell().executeCommand("compaction showarchived --instant " + instance); // generate expected - String expected = new CompactionCommand().printCompaction(plan, "", false, -1, false); + String expected = new CompactionCommand().printCompaction(plan, "", false, -1, false, null); expected = removeNonWordAndStripSpace(expected); String got = removeNonWordAndStripSpace(cr.getResult().toString());