SQLSTATE 代码

Spark SQL 返回的大多数错误类都与一个 5 字符的 SQLSTATE 相关联。 SQLSTATE 是 SQL 标准中用于编码错误情况的方式,常被 JDBCODBC 和其他客户端 API 使用。

SQLSTATE 由两部分组成:一个两位字符的类,和一个三位字符的子类。 每个字符必须是数字 '0''9''A''Z'

虽然很多 SQLSTATE 值是由 SQL 标准规定的,但其他的是行业内常见的,特定于 Spark。

有关错误类的排序列表,请参见:Spark SQL 中的错误情况

Spark SQL 使用以下 SQLSTATE

0A:不支持的功能

SQLSTATE描述和发出错误类
0A000 不支持的功能
INVALID_PANDAS_UDF_PLACEMENT, STAR_GROUP_BY_POS, UNSUPPORTED_ARROWTYPE, UNSUPPORTED_DATATYPE, UNSUPPORTED_DESERIALIZER, UNSUPPORTED_FEATURE, UNSUPPORTED_GENERATOR, UNSUPPORTED_SUBQUERY_EXPRESSION_CATEGORY, UNSUPPORTED_TYPED_LITERAL

21:基数冲突

SQLSTATE描述和发出错误类
21000 基数冲突
SCALAR_SUBQUERY_TOO_MANY_ROWS

22:数据异常

SQLSTATE描述和发出错误类
22003 数值超出范围
ARITHMETIC_OVERFLOW, CAST_OVERFLOW, CAST_OVERFLOW_IN_TABLE_INSERT, DECIMAL_PRECISION_EXCEEDS_MAX_PRECISION, INVALID_INDEX_OF_ZERO, INCORRECT_END_OFFSET, INCORRECT_RAMP_UP_RATE, INVALID_ARRAY_INDEX, INVALID_ARRAY_INDEX_IN_ELEMENT_AT, NUMERIC_OUT_OF_SUPPORTED_RANGE, NUMERIC_VALUE_OUT_OF_RANGE
22007 无效的日期时间格式
CANNOT_PARSE_TIMESTAMP
22008 日期时间字段溢出
DATETIME_OVERFLOW
2200E 数组目标中的空值
NULL_MAP_KEY
22012 除以零
DIVIDE_BY_ZERO, INTERVAL_DIVIDED_BY_ZERO
22015 区间字段溢出
INTERVAL_ARITHMETIC_OVERFLOW
22018 用于转换的无效字符值
CANNOT_PARSE_DECIMAL, CAST_INVALID_INPUT, CONVERSION_INVALID_INPUT
22023 无效的参数值
INVALID_FRACTION_OF_SECOND, INVALID_PARAMETER_VALUE, SECOND_FUNCTION_ARGUMENT_NOT_INTEGER
22032 无效的 JSON 文本
INVALID_JSON_ROOT_FIELD, INVALID_JSON_SCHEMA_MAP_TYPE
2203G sql_json_item_cannot_be_cast_to_target_type
CANNOT_PARSE_JSON_FIELD
22546 例程参数的值无效。
CANNOT_DECODE_URL

23:完整性约束冲突

SQLSTATE描述和发出错误类
23505 违反由唯一索引或唯一约束施加的约束。
DUPLICATED_MAP_KEY, DUPLICATE_KEY

2B:仍然存在依赖的权限描述符

SQLSTATE描述和发出错误类
2BP01 dependent_objects_still_exist
SCHEMA_NOT_EMPTY

38:外部例程异常

SQLSTATE描述和发出错误类
38000 外部例程异常
FAILED_FUNCTION_CALL

39:外部例程调用异常

SQLSTATE描述和发出错误类
39000 外部例程调用异常
FAILED_EXECUTE_UDF

42:语法错误或访问规则冲突

SQLSTATE描述和发出错误类
42000 语法错误或访问规则冲突
AMBIGUOUS_REFERENCE_TO_FIELDS, INVALID_COLUMN_OR_FIELD_DATA_TYPE, INVALID_EXTRACT_BASE_FIELD_TYPE, INVALID_EXTRACT_FIELD_TYPE, INVALID_FIELD_NAME, INVALID_SET_SYNTAX, INVALID_SQL_SYNTAX, NON_PARTITION_COLUMN, NOT_NULL_CONSTRAINT_VIOLATION, NULLABLE_COLUMN_OR_FIELD, NULLABLE_ROW_ID_ATTRIBUTES
42601 字符、标记或子句无效或缺失。
IDENTIFIER_TOO_MANY_NAME_PARTS, INVALID_EXTRACT_FIELD, INVALID_FORMAT, PARSE_SYNTAX_ERROR, UNCLOSED_BRACKETED_COMMENT
42602 检测到名称中无效的字符。
INVALID_IDENTIFIER, INVALID_PROPERTY_KEY, INVALID_PROPERTY_VALUE
42604 检测到无效的数字或字符串常量。
EMPTY_JSON_FIELD_VALUE, INVALID_TYPED_LITERAL
42605 为标量函数指定的参数数量无效。
WRONG_NUM_ARGS
42607 聚合函数或 CONCAT 运算符的操作数无效。
NESTED_AGGREGATE_FUNCTION
42613 子句是互斥的。
INCOMPATIBLE_JOIN_TYPES, INVALID_LATERAL_JOIN_TYPE, NON_LAST_MATCHED_CLAUSE_OMIT_CONDITION, NON_LAST_NOT_MATCHED_BY_SOURCE_CLAUSE_OMIT_CONDITION, NON_LAST_NOT_MATCHED_BY_TARGET_CLAUSE_OMIT_CONDITION
42614 重复的关键字或子句无效。
REPEATED_CLAUSE
42617 语句字符串是空白或空的。
PARSE_EMPTY_STATEMENT
42702 由于名称重复,列引用不明确。
AMBIGUOUS_COLUMN_OR_FIELD, AMBIGUOUS_LATERAL_COLUMN_ALIAS
42703 检测到未定义的列或参数名称。
COLUMN_NOT_FOUND, UNRESOLVED_COLUMN, UNRESOLVED_FIELD, UNRESOLVED_MAP_KEY, UNRESOLVED_USING_COLUMN_FOR_JOIN
42704 检测到未定义的对象或约束名称。
AMBIGUOUS_REFERENCE, DEFAULT_DATABASE_NOT_EXISTS, FIELD_NOT_FOUND, INDEX_NOT_FOUND, SCHEMA_NOT_FOUND, UNRECOGNIZED_SQL_TYPE
42710 检测到重复的对象或约束名称。
CREATE_TABLE_COLUMN_OPTION_DUPLICATE, INDEX_ALREADY_EXISTS, LOCATION_ALREADY_EXISTS
42711 在对象定义或 ALTER TABLE 语句中检测到重复的列名。
COLUMN_ALREADY_EXISTS
42723 在定义它的 schema、module 或复合块中,已经存在具有相同签名的例程。
ROUTINE_ALREADY_EXISTS
42803 SELECT 或 HAVING 子句中的列引用无效,因为它不是分组列;或者 GROUP BY 子句中的列引用无效。
GROUPING_COLUMN_MISMATCH, GROUPING_ID_COLUMN_MISMATCH, MISSING_AGGREGATION, MISSING_GROUP_BY, UNRESOLVED_ALL_IN_GROUP_BY
42805 ORDER BY 子句中的整数没有标识结果表的列。
GROUP_BY_POS_OUT_OF_RANGE, ORDER_BY_POS_OUT_OF_RANGE
42809 标识的对象不是该语句应用的对象类型。
FORBIDDEN_OPERATION
42818 运算符或函数的操作数不兼容或不可比较。
INCOMPARABLE_PIVOT_COLUMN
42823 从仅允许一列的子查询返回多列。
INVALID_SUBQUERY_EXPRESSION
42825 UNION、INTERSECT、EXCEPT 或 VALUES 的行没有兼容的列。
CANNOT_MERGE_INCOMPATIBLE_DATA_TYPE, INCOMPATIBLE_COLUMN_TYPE
42826 UNION、INTERSECT、EXCEPT 或 VALUES 的行没有相同数量的列。
NUM_COLUMNS_MISMATCH
42846 不支持从源类型转换为目标类型。
CANNOT_CAST_DATATYPE
42883 找不到具有匹配签名的例程。
ROUTINE_NOT_FOUND, UNRESOLVED_ROUTINE
428C4 谓词运算符两侧的元素数量不一致。
UNPIVOT_VALUE_SIZE_MISMATCH
428EK 模式限定符无效。
TEMP_VIEW_NAME_TOO_MANY_NAME_PARTS
428FT 在 CREATE 或 ALTER 中指定的分区子句无效。
PARTITIONS_ALREADY_EXIST, PARTITIONS_NOT_FOUND
42903 聚合函数或 OLAP 函数的使用无效。
GROUP_BY_AGGREGATE, GROUP_BY_POS_AGGREGATE, INVALID_WHERE_CONDITION
429BB 不支持列、参数或 SQL 变量的数据类型。
CANNOT_RECOGNIZE_HIVE_TYPE
42K01 数据类型未完全指定
DATATYPE_MISSING_SIZE, INCOMPLETE_TYPE_DEFINITION
42K02 未找到数据源
DATA_SOURCE_NOT_FOUND
42K03 未找到文件
PATH_NOT_FOUND, RENAME_SRC_PATH_NOT_FOUND
42K04 文件重复
FAILED_RENAME_PATH, PATH_ALREADY_EXISTS
42K05 名称无效
INVALID_EMPTY_LOCATION, REQUIRES_SINGLE_PART_NAMESPACE
42K06 选项的类型无效
INVALID_OPTIONS
42K07 不是有效的模式文本
INVALID_SCHEMA
42K08 不是常量
NON_LITERAL_PIVOT_VALUES
42K09 数据类型不匹配
DATATYPE_MISMATCH, PIVOT_VALUE_DATA_TYPE_MISMATCH, UNEXPECTED_INPUT_TYPE, UNPIVOT_VALUE_DATA_TYPE_MISMATCH
42K0A UNPIVOT 子句无效
UNPIVOT_REQUIRES_ATTRIBUTES, UNPIVOT_REQUIRES_VALUE_COLUMNS
42K0B 旧版功能被阻止
INCONSISTENT_BEHAVIOR_CROSS_VERSION
42KD9 无法推断表模式。
UNABLE_TO_INFER_SCHEMA
42P01 undefined_table
TABLE_OR_VIEW_NOT_FOUND, VIEW_NOT_FOUND
42P02 undefined_parameter
UNBOUND_SQL_PARAMETER
42P06 duplicate_schema
SCHEMA_ALREADY_EXISTS
42P07 duplicate_table
TABLE_OR_VIEW_ALREADY_EXISTS, TEMP_TABLE_OR_VIEW_ALREADY_EXISTS, VIEW_ALREADY_EXISTS
42P20 windowing_error
UNSUPPORTED_EXPR_FOR_WINDOW

46: java ddl 1

SQLSTATE描述和发出错误类
46110 不支持的功能
CANNOT_MODIFY_CONFIG
46121 无效的列名
INVALID_COLUMN_NAME_AS_PATH

53: 资源不足

SQLSTATE描述和发出错误类
53200 out_of_memory
UNABLE_TO_ACQUIRE_MEMORY

54: 超过程序限制

SQLSTATE描述和发出错误类
54000 超过程序限制
GROUPING_SIZE_LIMIT_EXCEEDED, TOO_MANY_ARRAY_ELEMENTS

HY: CLI 特定条件

SQLSTATE描述和发出错误类
HY008 操作已取消
OPERATION_CANCELED

XX: 内部错误

SQLSTATE描述和发出错误类
XX000 内部错误
INTERNAL_ERROR

.. include:: /shared/replacements.md