错误消息¶
本页面详细介绍了用户最可能遇到的异常和相关错误消息,解释了它们的含义以及可以采取的解决措施(如果有的话)。
由于历史原因,术语 symbol
、stream
和 stream 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 请求了一个在存储中不存在的键。请确保您请求的是存在的 symbol 、snapshot 、version 或列统计信息。 |
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_symbols 和 versions 可选参数。 |
在这种情况下,只需单独指定 versions 。 |
需要活动版本错误¶
ArcticDB 中的少数操作要求 symbol 存在且至少有一个活动版本。当不满足此条件时,会发生这些错误。
所有这些错误的类型均为 arcticdb.exceptions.ArcticException
。
错误消息 | 原因 | 解决方法 |
---|---|---|
无法更新不存在的 stream <symbol> | 调用 update 方法时可选参数 upsert 默认或设置为 False ,但此 symbol 没有活动版本。 |
如果 symbol 预期有活动版本,则这是实际错误。否则,请将 upsert 设置为 True 。 |
日期范围相关错误¶
所有对 delete_data_in_range
和 update
的调用,以及使用 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