跳到内容

错误消息

本页面详细介绍了用户最可能遇到的异常和相关错误消息,解释了它们的含义以及可以采取的解决措施(如果有的话)。

由于历史原因,术语 symbolstreamstream ID 可互换使用。

带有数字错误码的错误

注意

我们正在为所有面向用户的错误添加错误码。因此,随着错误码被添加到现有错误中,本节将会扩展。

内部错误

错误码 原因 解决方法
1000 传入了无效的日期范围。 ArcticDB 日期范围必须按升序排列。请确保请求的范围已排序。
1001 无效参数 传入了无效参数。此错误是内部错误,不应暴露给用户 - 请在 GitHub 仓库中创建问题。
1002 ArcticDB 内部断言失败。 此错误是内部错误,不应暴露给用户 - 请在 GitHub 仓库中创建问题。
1003 ArcticDB 遇到内部错误。 此错误是内部错误,不应暴露给用户 - 请在 GitHub 仓库中创建问题。
1004 在存储中发现不支持的配置 按照错误消息中的说明修复 Arctic 实例中的配置。

规范化错误

错误码 原因 解决方法
2000 尝试使用不兼容的对象类型更新或附加现有类型 NumPy 数组或 Pandas DataFrames 只能由匹配的类型进行修改。读取 symbol 的最新版本,并使用相应的类型进行更新/附加。
2001 输入类型无法转换为 ArcticDB 类型。 请确保所有输入类型与支持的 ArcticDB 类型 匹配。
2003 尝试写入不兼容的索引类型。 ArcticDB 仅支持定义的 Pandas 索引类型。请参阅文档以获取有关支持类型的更多信息。
2004 NumPy 附加操作试图改变前一版本的形状。 存储 NumPy 数组时,附加操作必须与前一版本具有相同的形状。

数据缺失错误

错误码 原因 解决方法
3000 请求了 symbol 的缺失版本。 请请求有效的版本 - 请参阅 list_versions 方法的文档以枚举现有版本。
3001 请求了一个来自不完整库且没有任何版本的 symbol,并且没有找到不完整的段。 将不完整数据附加到 symbol。

Schema 错误

错误码 原因 解决方法
4000 列的数量、类型或名称已更改。 在附加或更新前一版本时,请确保列的类型和顺序没有改变。此限制仅在 Dynamic Schema 禁用时适用 - 如果您需要更改列集,请在您的库上启用 Dynamic Schema 选项。
4001 指定的列不存在。 请指定有效的列 - 使用 get_description 方法查看给定 symbol 相关的所有列。
4002 提供的列类型不支持请求的操作。 并非所有列类型都支持某些操作,例如处理管道中对字符串列进行的算术运算 - 使用 get_description 方法查看与给定 symbol 相关的所有列及其类型。
4003 提供的 symbol 的索引类型不支持请求的操作。 并非所有索引类型都支持某些操作,例如使用字符串索引生成列统计信息 - 使用 get_description 方法查看与给定 symbol 相关的索引及其类型。
4004 经过 pickle 处理的数据不支持请求的操作。 经过 pickle 处理的数据不支持某些操作,例如 date_range 过滤。如果需要此类操作,必须确保数据是可规范化类型,以便可以使用 write 方法写入,并且不需要 write_pickle 方法。

存储错误

错误码 原因 解决方法
5000 请求了缺失的键。 ArcticDB 请求了一个在存储中不存在的键。请确保您请求的是存在的 symbolsnapshotversion 或列统计信息。
5001 ArcticDB 正在尝试写入存储中已存在的键。 此错误是意外的 - 请确保没有其他工具向与 ArcticDB 相同的存储位置写入数据,以免发生冲突。
5002 正在操作的 symbol 不存在。 ArcticDB 请求了一个在存储中不存在的键。请确保 symbol 存在。
5003 没有执行此操作的权限。 请确保您有权限对给定的键执行请求的操作。
5010 LMDB 映射已满。 关闭并使用更大的映射大小重新打开您的 LMDB 支持的 Arctic 实例。例如,要使用 5GB 映射大小打开 /tmp/a/b/,请使用 adb.Arctic("lmdb:///tmp/a/b?map_size=5GB")。另请参阅 LMDB 文档
5011 发生意外的 LMDB 错误。例如:文件损坏、环境版本不匹配、页面类型不匹配等。 取决于失败类型。请参阅 LMDB: 返回码了解更多信息。
5020 发生意外的 S3 错误。例如:网络错误、服务不可用、限流失败等。 取决于失败类型。
5021 发生意外的 S3 错误,此错误可重试。 取决于失败类型。
5030 发生意外的 Azure 错误,带有给定的状态码和错误码。 取决于失败类型。请参阅 Azure Blob Storage 错误码文档了解更多信息。
5050 Mongo 未确认操作。这意味着 Mongo API 未确认操作是否成功。 重试运行之前的操作。
5051 发生带有给定错误码的意外 Mongo 错误。 取决于失败类型。请查看 MongoDB 错误码

排序错误

错误码 原因 解决方法
6000 此操作要求数据已排序。 请求的操作要求数据已排序。如果这是修改操作(如更新),请对输入数据进行排序。ArcticDB 依靠 Pandas 来检测数据是否已排序 - 您可以在输入 DataFrame 上调用 DataFrame.index.is_monotonic_increasing 方法,查看 Pandas 是否认为数据已排序。

用户输入错误

错误码 原因 解决方法
7000 用户提供的输入在某些方面无效。 解决方法将取决于不正确输入的性质,并在相关的错误消息中进行说明。
7001 输入应为有效的十进制字符串,但它不是有效的十进制字符串。 传入有效的十进制字符串。
7002 在 symbol 或库名称中发现了不支持的字符。 我们仅支持 ASCII 字符范围 32-127(包含),并且特别排除 <>*。请更改您的名称,使其只包含有效字符。如果您想绕过对 symbol 名称的此检查,可以定义一个名为 - ARCTICDB_VersionStore_NoStrictSymbolCheck_int=1 的环境变量
7003 库或 symbol 名称太长。 我们目前仅支持长度不超过 255 个字符的名称。请更改您的名称,使其长度不超过 255 个字符。

兼容性错误

错误码 原因 解决方法
8000 用于读取列统计信息的 ArcticDB 版本无法识别统计信息格式。 将 ArcticDB 更新到(至少)与用于创建列统计信息的版本相同。

不带数字错误码的错误

Pickle 错误

这些错误与数据经过 pickle 处理有关,这限制了可用的操作。在内部,经过 pickle 处理的 symbols 在 数据层 中存储为不透明的序列化二进制 blob。这种序列化对象中不维护索引或列信息,这与未经过 pickle 处理的数据不同,未经过 pickle 处理的数据将这些信息存储在 索引层 中。

此外,无法使用 ArcticDB API 部分读取/更新/附加数据,也无法将处理管道用于经过 pickle 处理的 symbols。

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
无法附加到经过 pickle 处理的数据

无法更新经过 pickle 处理的数据
使用 write_pickle 方法创建了一个 symbol,现在对该 symbol 调用了 append/update 方法。 经过 pickle 处理的数据无法附加或更新,原因如上所述,索引层缺少索引或列信息。如果需要附加操作,则必须使用 write 方法创建 symbol,因此 symbol 必须仅包含可规范化的数据类型。
无法删除经过 pickle 处理的数据的日期范围

无法对经过 pickle 处理的数据使用 head/tail/row_range,请改用 plain read

无法过滤经过 pickle 处理的数据

此 symbol 的数据经过 pickle 处理,不支持 date_range、row_range 或列查询
使用 write_pickle 方法创建了一个 symbol,现在对该 symbol 调用了 delete_data_in_range/head/tail/read 方法并带有 QueryBuilder argument 参数。 对于读取操作,解 pickle 本质上是 Python 层的过程。因此,任何与不带可选参数的 read 调用相比会减少返回给用户的数据量的操作都无法在 C++ 层执行,并且不会比调用 read 然后在 Python 中过滤结果更快。

快照错误

在创建和删除快照,或尝试从特定快照读取数据时可能遇到的错误。

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
名称为 <name> 的快照已存在 调用了 snapshot 方法,但已存在具有指定名称的快照。 必须先使用 delete_snapshot 删除旧快照。
无法创建已删除版本(s) 的快照... snapshot 方法提供了 versions 字典,但指定的 symbol-version 对中有一个不存在。 可以使用 list_versions 方法查看哪些 symbol 的哪些版本在哪些快照中。
skip_symbols 和 versions 只能设置其中一个 调用 snapshot 方法时同时设置了 skip_symbolsversions 可选参数。 在这种情况下,只需单独指定 versions

需要活动版本错误

ArcticDB 中的少数操作要求 symbol 存在且至少有一个活动版本。当不满足此条件时,会发生这些错误。

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
无法更新不存在的 stream <symbol> 调用 update 方法时可选参数 upsert 默认或设置为 False,但此 symbol 没有活动版本。 如果 symbol 预期有活动版本,则这是实际错误。否则,请将 upsert 设置为 True

所有对 delete_data_in_rangeupdate 的调用,以及使用 date_range 可选参数的 read 调用,都要求现有数据具有已排序的时间戳索引。ArcticDB 在写入时不会检查此条件。

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
无法将日期范围过滤应用于非时间戳索引的 symbol 调用 read 方法时指定了可选参数 date_range,但 symbol 没有时间戳索引。 无,date_range 参数在没有时间戳索引的情况下没有意义。
非连续行,在未排序数据上进行范围搜索?... 调用 read 方法时指定了可选参数 date_range,且 symbol 有时间戳索引,但它未排序。 要使用 date_range 参数进行 read 操作,用户必须在写入时确保数据在索引上已排序。
Delete in range 对于非时间序列索引将不会按预期工作 调用了 delete_data_in_range 方法,但 symbol 没有时间戳索引。 无,delete_data_in_range 方法在没有时间戳索引的情况下没有意义。

处理管道错误

由于 ArcticDB 仅为客户端性质,因此,在不与存储交互的情况下,无法知道应用于 LazyDataFrame 或使用 QueryBuilder 对象提供给 read 方法的处理操作对于给定的 symbol 是否有意义。特别是,我们不知道

  • 指定的列是否存在
  • 如果指定的列存在,其中数据的类型是什么

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
意外的列名称 为处理操作指定了一个此 symbol 不存在的列名称,并且该库已禁用动态 schema。 使用 get_description 方法确保处理操作中提供的列名称对于 symbol 存在。
为二元操作提供了非数字类型:<typename> 此类错误消息意味着在处理操作中提供了 ArcticDB 不支持的操作,例如将两个字符串列相加。 get_description 方法可用于检查列的类型。QueryBuilder API 文档中提供了支持操作的完整列表。
无法比较 <类型名 1> 与 <类型名 2>(可能是分类类型?) 如果 get_description 方法指示列是分类类型 (categorical),并且此分类类型用于存储字符串值,则与其它字符串的比较将失败并出现类似此处的错误消息。 ArcticDB 对分类类型 (Categorical) 的支持 非常有限,但将来可能会增加。

编码错误

这些错误应该非常罕见,但是存储中的编码可能会不时改变。虽然这些改变总是向后兼容的(新客户端总是可以读取旧数据),但它们可能不向前兼容,新客户端写入的数据可能无法被旧客户端读取

所有这些错误的类型均为 arcticdb.exceptions.ArcticException

错误消息 原因 解决方法
解码错误 压缩算法无法解码某列。 升级到更高版本的客户端。

异常层次结构

ArcticDB 异常暴露在 arcticdb.exceptions 中,并位于一个层次结构中

RuntimeError
└-- ArcticException
    |-- ArcticDbNotYetImplemented
    |-- MissingDataException
    |-- NoDataFoundException
    |-- NoSuchVersionException
    |-- NormalizationException
    |-- SchemaException
    |-- SortingException
    |   └-- UnsortedDataException
    |-- StorageException
    |   └-- LmdbMapFullError
    |   └-- PermissionException
    |   └-- DuplicateKeyException
    |-- StreamDescriptorMismatch
    └-- InternalException