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

  1. Align the Flink column type with the file's DOUBLE physical type, or rewrite the data with proper INT64 timestamps
  2. Verify the column's physical type with parquet-tools schema before defining the table
  3. For legacy epoch-double data, read as DOUBLE and cast in SQL
  4. 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

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


AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14). Data as JSON: /api/errors/9ac30cdde0d59ca2. Report an issue: GitHub.