apache/seatunnel · error · SalesforceConnectorException

INVALID_TABLE_PATH

INVALID_TABLE_PATH

Error message

table_path is required in tables_configs

What it means

Thrown by SalesforceSource.buildOneTableConfig when a tables_configs entry lacks table_path, or when table_path is not in 'database.ObjectName' form. It enforces the required composite path format used to derive database, object name, and SOQL.

Source

Thrown at seatunnel-connectors-v2/connector-salesforce/src/main/java/org/apache/seatunnel/connectors/seatunnel/salesforce/source/SalesforceSource.java:115

                    SalesforceConnectorErrorCode.DESCRIBE_OBJECT_FAILED,
                    "Failed to build Salesforce table configs",
                    e);
        }
    }

    private SalesforceTableConfig buildOneTableConfig(
            ReadonlyConfig tableConfig, SalesforceClient client) {
        String tablePath =
                tableConfig
                        .getOptional(SalesforceSourceOptions.TABLE_PATH)
                        .orElseThrow(
                                () ->
                                        new SalesforceConnectorException(
                                                SalesforceConnectorErrorCode.INVALID_TABLE_PATH,
                                                "table_path is required in tables_configs"));
        String[] parts = tablePath.split("\\.", 2);
        if (parts.length != 2 || StringUtils.isBlank(parts[1])) {
            throw new SalesforceConnectorException(
                    SalesforceConnectorErrorCode.INVALID_TABLE_PATH,
                    "table_path must be 'database.ObjectName', got: " + tablePath);
        }
        String database = parts[0];
        String objectName = parts[1];
        String soql = buildSoql(tableConfig, objectName);
        CatalogTable table = client.describeObject(database, objectName);
        return new SalesforceTableConfig(soql, objectName, table);
    }

    /**
     * Builds the SOQL the Bulk API job will run for one object. Always selects every
     * describe-discovered field via FIELDS(ALL) so the emitted rows stay positionally aligned with
     * the CatalogTable schema. An optional filter is appended verbatim as the WHERE clause.
     */
    private String buildSoql(ReadonlyConfig config, String objectName) {
        StringBuilder soql = new StringBuilder("SELECT FIELDS(ALL) FROM ").append(objectName);
        String filter = config.getOptional(SalesforceSourceOptions.FILTER).orElse(null);

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Add table_path to every tables_configs entry
  2. Format table_path as 'database.ObjectName', e.g. "default.Account"
  3. Fix entries with a missing object part after the dot (blank object name)

Example fix

// before
table_path = "Account"
// after
table_path = "default.Account"
Defensive patterns

Strategy: validation

Validate before calling

// pre-validate every entry
for (Map<String,Object> t : tablesConfigs) {
    String tp = (String) t.get("table_path");
    if (tp == null || !tp.matches("[^.]+\\.[^.]+")) {
        throw new IllegalArgumentException("table_path must be 'database.ObjectName': " + tp);
    }
}

Type guard

boolean isValidTablePath(String p) {
    return p != null && p.contains(".") && !p.endsWith(".") && !p.startsWith(".");
}

Prevention

When it happens

Trigger: A tables_configs entry missing the table_path key; table_path with no '.' separator; table_path like 'Account.' with a blank object name after the dot.

Common situations: Copy-pasting a config template that omits table_path; writing only the object name ('Account') without the database prefix; trailing dot from generated configs.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/2f8d843b39c003ea. Report an issue: GitHub.