apache/flink · error · CliArgsException
Missing JobId
Error message
Missing JobId
What it means
The dictionary-id variant (readTimestamp(int id)) of the same hard rejection in the double reader of ParquetDataColumnReaderFactory: decoding a dictionary-encoded DOUBLE value as a timestamp is unsupported. It fires on dictionary-encoded pages under the same physical/logical type mismatch as the non-dictionary variant.
Source
Thrown at flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java:1161
}
} else {
t.printStackTrace();
}
return 1;
}
private static void logAndSysout(String message) {
LOG.info(message);
System.out.println(message);
}
// --------------------------------------------------------------------------------------------
// Internal methods
// --------------------------------------------------------------------------------------------
private JobID parseJobId(String jobIdString) throws CliArgsException {
if (jobIdString == null) {
throw new CliArgsException("Missing JobId");
}
final JobID jobId;
try {
jobId = JobID.fromHexString(jobIdString);
} catch (IllegalArgumentException e) {
throw new CliArgsException(e.getMessage());
}
return jobId;
}
/**
* Retrieves the {@link ClusterClient} from the given {@link CustomCommandLine} and runs the
* given {@link ClusterAction} against it.
*
* @param activeCommandLine to create the {@link ClusterDescriptor} from
* @param commandLine containing the parsed command line options
* @param clusterAction the cluster action to run against the retrieved {@link ClusterClient}.View on GitHub (pinned to 2f3c205e92)
Solutions
- Align the Flink column type with the file's DOUBLE physical type, or rewrite the data with proper INT64 timestamps
- Verify the column's physical type with parquet-tools schema before defining the table
- For legacy epoch-double data, read as DOUBLE and cast in SQL
- Pin schemas: avoid changing a column's type without rewriting affected Parquet files
Defensive patterns
Strategy: type-guard
Validate before calling
// Footer-level check: dictionary-encoded DOUBLE column declared as TIMESTAMP
for (ColumnChunkMetaData cc : block.getColumns()) {
if (cc.getPrimitiveType().getPrimitiveTypeName() == DOUBLE
&& cc.getEncodings().stream().anyMatch(Encoding::usesDictionary)) {
// ensure the Flink schema types this column as DOUBLE, not TIMESTAMP
}
} Type guard
static boolean safeTimestampMapping(PrimitiveType pt, Collection<Encoding> encs) {
if (pt.getPrimitiveTypeName() == DOUBLE) return false;
return pt.getPrimitiveTypeName() == INT64 || pt.getPrimitiveTypeName() == INT96;
} Try / catch
try {
vectorizedReader.readToVector(...);
} catch (RuntimeException e) {
if ("Unsupported operation".equals(e.getMessage())) {
// re-check schema mapping; deterministic — do not retry
} else throw e;
} Prevention
- Pin column types: never flip a column between DOUBLE and TIMESTAMP without rewriting data
- Include dictionary-encoded timestamp columns in writer/reader compatibility tests
- Use schema derivation from files (or a schema registry) instead of drift-prone manual DDL
When it happens
Trigger: Dictionary-encoded DOUBLE column read through a Flink TIMESTAMP schema — dictionaryDecode paths call readTimestamp(dictionaryId) on the double reader; schema evolution flipping a DOUBLE column to TIMESTAMP while old dictionary-encoded row groups remain.
Common situations: Same as the non-dictionary variant: epoch-as-double writers, schema drift, mismatched table DDL; manifests only when the page happens to be dictionary-encoded.
Related errors
- JAR file is not a file: {}
- Could not stop with a detached savepoint job "{}".
- Translator {} cannot translate the given pipeline {}.
- Missing JobID. Specify a Job ID to trigger a savepoint.
- Could not stop with a savepoint job "{}".
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/9ac30cdde0d59ca2.
Report an issue: GitHub.