diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/FileDump.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/FileDump.java index fa1543b..f3f2279 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/FileDump.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/FileDump.java @@ -248,6 +248,10 @@ private static void printMetaData(List files, Configuration conf, System.out.println("\nFile length: " + fileLen + " bytes"); System.out.println("Padding length: " + paddedBytes + " bytes"); System.out.println("Padding ratio: " + format.format(percentPadding) + "%"); + OrcRecordUpdater.AcidStats acidStats = OrcRecordUpdater.parseAcidStats(reader); + if (acidStats != null) { + System.out.println("ACID stats:" + acidStats); + } rows.close(); if (files.size() > 1) { System.out.println(Strings.repeat("=", 80) + "\n"); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/JsonFileDump.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/JsonFileDump.java index 18b1f24..6101b97 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/JsonFileDump.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/JsonFileDump.java @@ -167,6 +167,12 @@ public static void printJsonMetaData(List files, Configuration conf, writer.key("fileLength").value(fileLen); writer.key("paddingLength").value(paddedBytes); writer.key("paddingRatio").value(percentPadding); + OrcRecordUpdater.AcidStats acidStats = OrcRecordUpdater.parseAcidStats(reader); + if (acidStats != null) { + writer.key("numInserts").value(acidStats.inserts); + writer.key("numDeletes").value(acidStats.deletes); + writer.key("numUpdates").value(acidStats.updates); + } rows.close(); writer.endObject(); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java index e4651b8..bb93a92 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java @@ -128,6 +128,15 @@ String serialize() { builder.append(deletes); return builder.toString(); } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(" inserts: ").append(inserts); + builder.append(" updates: ").append(updates); + builder.append(" deletes: ").append(deletes); + return builder.toString(); + } } static Path getSideFile(Path main) { @@ -453,17 +462,21 @@ Writer getWriter() { * {@link KeyIndexBuilder} creates these */ static AcidStats parseAcidStats(Reader reader) { - String statsSerialized; - try { - ByteBuffer val = - reader.getMetadataValue(OrcRecordUpdater.ACID_STATS) - .duplicate(); - statsSerialized = utf8Decoder.decode(val).toString(); - } catch (CharacterCodingException e) { - throw new IllegalArgumentException("Bad string encoding for " + - OrcRecordUpdater.ACID_STATS, e); + if (reader.hasMetadataValue(OrcRecordUpdater.ACID_STATS)) { + String statsSerialized; + try { + ByteBuffer val = + reader.getMetadataValue(OrcRecordUpdater.ACID_STATS) + .duplicate(); + statsSerialized = utf8Decoder.decode(val).toString(); + } catch (CharacterCodingException e) { + throw new IllegalArgumentException("Bad string encoding for " + + OrcRecordUpdater.ACID_STATS, e); + } + return new AcidStats(statsSerialized); + } else { + return null; } - return new AcidStats(statsSerialized); } static class KeyIndexBuilder implements OrcFile.WriterCallback {