{"record":{"id":"26395a3b49083a98","repo":"apache/iceberg","slug":"delta-lake-table-at-s-contains-no-constructable-s","errorCode":null,"errorMessage":"Delta Lake table at %s contains no constructable snapshot","messagePattern":"Delta Lake table at (.+?) contains no constructable snapshot","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"delta-lake/src/main/java/org/apache/iceberg/delta/BaseSnapshotDeltaLakeTableAction.java","lineNumber":269,"sourceCode":"        for (AddFile addFile : initDataFiles) {\n          DataFile dataFile = buildDataFileFromAction(addFile, transaction.table());\n          filesToAdd.add(dataFile);\n          migratedDataFilesBuilder.add(dataFile.location());\n        }\n\n        // AppendFiles case\n        AppendFiles appendFiles = transaction.newAppend();\n        filesToAdd.forEach(appendFiles::appendFile);\n        appendFiles.commit();\n        tagCurrentSnapshot(constructableStartVersion, transaction);\n\n        return constructableStartVersion;\n      } catch (NotFoundException | IllegalArgumentException | DeltaStandaloneException e) {\n        constructableStartVersion++;\n      }\n    }\n\n    throw new ValidationException(\n        \"Delta Lake table at %s contains no constructable snapshot\", deltaTableLocation);\n  }\n\n  /**\n   * Iterate through the {@code VersionLog} to determine the update type and commit the update to\n   * the given {@code Transaction}.\n   *\n   * <p>There are 3 cases:\n   *\n   * <p>1. AppendFiles - when there are only AddFile instances (an INSERT on the table)\n   *\n   * <p>2. DeleteFiles - when there are only RemoveFile instances (a DELETE where all the records of\n   * file(s) were removed)\n   *\n   * <p>3. OverwriteFiles - when there are a mix of AddFile and RemoveFile (a DELETE/UPDATE)\n   *\n   * @param versionLog the delta log version to commit to iceberg table transaction\n   * @param transaction the iceberg table transaction to commit to","sourceCodeStart":251,"sourceCodeEnd":287,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/delta-lake/src/main/java/org/apache/iceberg/delta/BaseSnapshotDeltaLakeTableAction.java#L251-L287","documentation":"ValidationException thrown when snapshotting a Delta Lake table fails to find any snapshot version that can be constructed into an Iceberg snapshot; every attempted start version raised NotFoundException, IllegalArgumentException, or DeltaStandaloneException.","triggerScenarios":"Running SnapshotDeltaLakeTable with a startSnapshotVersion/toIncrementalSnapshotVersion that is unusable and no constructable version exists, or the Delta log at deltaTableLocation is unreadable/corrupt at every candidate version.","commonSituations":"Wrong delta table location, missing/incomplete Delta transaction logs, incremental migration from an invalid version after table compaction/vacuum removed needed files.","solutions":["Verify deltaTableLocation points to a valid Delta table with an intact _delta_log","Start the incremental snapshot from a valid, still-present version (not vacuumed away)","Run the full (non-incremental) migration once to establish a valid base snapshot"],"exampleFix":"// before\nactions.SnapshotDeltaLakeTable(deltaTable, \"incremental\").toIncrementalSnapshotVersion(42)...\n// after\n// choose a version whose log files still exist (not vacuumed), or run full migration\nactions.SnapshotDeltaLakeTable(deltaTable).execute();","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { action.execute(); } catch (ValidationException e) { /* fall back to full snapshot migration */ }","preventionTips":["Verify the Delta table location and _delta_log integrity before migration","Choose start versions whose log files have not been vacuumed","Run a full migration before attempting incremental snapshots"],"tags":["delta-lake","migration","snapshot"],"backgroundTag":"resource-not-found","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}