/** * Each write statement in a transaction creates its own delete delta dir, * when split-update acid operational property is turned on. * @since 2.2.x */ @VisibleForTesting public static String deleteDeltaSubdir(long min, long max, int statementId) { return deleteDeltaSubdir(min, max) + "_" + String.format(STATEMENT_DIGITS, statementId); }
String getName() { assert stmtIds.isEmpty() : "use getName(int)"; return AcidUtils.addVisibilitySuffix(AcidUtils .deleteDeltaSubdir(minWriteId, maxWriteId), visibilityTxnId); } String getName(int stmtId) {
String makeDeleteDeltaDirNameCompacted(long minTxnId, long maxTxnId) { return AcidUtils.deleteDeltaSubdir(minTxnId, maxTxnId); } }
String getName(int stmtId) { assert !stmtIds.isEmpty() : "use getName()"; return AcidUtils.addVisibilitySuffix(AcidUtils .deleteDeltaSubdir(minWriteId, maxWriteId, stmtId), visibilityTxnId); } @Override
/** * Each write statement in a transaction creates its own delete delta dir, * when split-update acid operational property is turned on. * @since 2.2.x */ @VisibleForTesting static String deleteDeltaSubdir(long min, long max, int statementId) { return deleteDeltaSubdir(min, max) + "_" + String.format(STATEMENT_DIGITS, statementId); }
/** * Convert the list of begin/end transaction id pairs to a list of delete delta * directories. Note that there may be multiple delete_delta files for the exact same txn range starting * with 2.2.x; * see {@link org.apache.hadoop.hive.ql.io.AcidUtils#deltaSubdir(long, long, int)} * @param root the root directory * @param deleteDeltas list of begin/end transaction id pairs * @return the list of delta paths */ public static Path[] deserializeDeleteDeltas(Path root, final List<AcidInputFormat.DeltaMetaData> deleteDeltas) throws IOException { List<Path> results = new ArrayList<Path>(deleteDeltas.size()); for(AcidInputFormat.DeltaMetaData dmd : deleteDeltas) { if(dmd.getStmtIds().isEmpty()) { results.add(new Path(root, deleteDeltaSubdir(dmd.getMinTxnId(), dmd.getMaxTxnId()))); continue; } for(Integer stmtId : dmd.getStmtIds()) { results.add(new Path(root, deleteDeltaSubdir(dmd.getMinTxnId(), dmd.getMaxTxnId(), stmtId))); } } return results.toArray(new Path[results.size()]); }
@Test public void testDeleteDeltaSubdirPathGeneration() throws Exception { String deleteDeltaSubdirPath = AcidUtils.deleteDeltaSubdir(1, 10); assertEquals("delete_delta_0000001_0000010", deleteDeltaSubdirPath); deleteDeltaSubdirPath = AcidUtils.deleteDeltaSubdir(1, 10, 5); assertEquals("delete_delta_0000001_0000010_0005", deleteDeltaSubdirPath); }
deleteDeltaSubdir(options.getMinimumWriteId(), options.getMaximumWriteId()) : deltaSubdir(options.getMinimumWriteId(), } else { subdir = options.isWritingDeleteDelta() ? deleteDeltaSubdir(options.getMinimumWriteId(), options.getMaximumWriteId(), options.getStatementId())
deleteDeltaSubdir(options.getMinimumTransactionId(), options.getMaximumTransactionId()) : deltaSubdir(options.getMinimumTransactionId(), } else { subdir = options.isWritingDeleteDelta() ? deleteDeltaSubdir(options.getMinimumTransactionId(), options.getMaximumTransactionId(), options.getStatementId())
AcidUtils.deleteDeltaSubdir(200,200,0) : AcidUtils.deleteDeltaSubdir(200,200)), directory.getCurrentDirectories().get(0).getPath()); assertEquals(new Path(root, use130Format ?