Amazon Keyspaces 中的数据定义语言疑难解答 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Keyspaces 中的数据定义语言疑难解答

创建资源时遇到问题? 以下解决方案。

数据定义语言错误

Amazon Keyspaces 异步执行数据定义语言 (DDL) 操作,例如,创建和删除密钥空间和表。如果应用程序在资源准备就绪之前尝试使用该资源,则操作将失败。

您可以在中监视新密钥空间和表格的创建状态Amazon Web Services Management Console,它表示密钥空间或表何时处于待处理状态或活动状态。您还可以通过查询系统架构表,以编程方式监控新密钥空间或表的创建状态。当密钥空间或表准备就绪可供使用时,它将在系统架构中变为可见。

注意

要优化密钥空间的创建,请使用Amazon CloudFormation,您可以使用此实用程序将 CQL 脚本转换为 CloudFormation 模板。该工具可执行下列操作GitHub 知识库

我创建了一个新的密钥空间,但我无法查看或访问它

您的应用程序在尝试访问新的密钥空间时收到了错误。

如果您尝试访问新创建的 Amazon Keyspaces 密钥空间,但该密钥空间仍在异步创建中,则会出现错误。以下错误就是一个示例。

InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured keyspace mykeyspace"

检查新密钥空间何时可供使用的推荐设计模式是轮询 Amazon Keyspaces 系统架构表 (system_schema_mcs.*)。

有关更多信息,请参阅在亚马逊密钥空间中创建密钥空间

我创建了一个新表,但我无法查看或访问它

您的应用程序在尝试访问新表时收到了错误。

如果您尝试访问新创建的 Amazon Keyspaces 表,但该表仍在异步创建中,则会出现错误。例如,尝试查询一个尚不可用的表会失败,并显示unconfigured table错误。

InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table mykeyspace.mytable"

正在尝试以下表格sync_table()失败了KeyError

KeyError: 'mytable'

检查新表何时可供使用的推荐设计模式是轮询 Amazon Keyspaces 系统架构表 (system_schema_mcs.*)。

这是正在创建的表的输出示例。

user-at-123@cqlsh:system_schema_mcs> select table_name,status from system_schema_mcs.tables where keyspace_name='example_keyspace' and table_name='example_table'; table_name | status ------------+---------- example_table | CREATING (1 rows)

这是处于活动状态的表的输出示例。

user-at-123@cqlsh:system_schema_mcs> select table_name,status from system_schema_mcs.tables where keyspace_name='example_keyspace' and table_name='example_table'; table_name | status ------------+---------- example_table | ACTIVE (1 rows)

有关更多信息,请参阅在亚马逊Keyspaces 中创建表

我正在尝试使用 Amazon Keyspaces 恢复表 point-in-time 恢复 (PITR),但恢复失败

如果您尝试以下的 point-in-time recovery (PITR),当你看到恢复过程开始但未成功完成时,你可能没有为此特定表配置恢复过程所需的所有必需权限。

除了用户权限外,Amazon Keyspaces 可能还需要权限才能在还原过程中代表您的委托人执行操作。如果表使用客户托管密钥加密,或者您使用的是限制传入流量的 IAM 策略,则会出现这种情况。

例如,如果您在 IAM 策略中使用条件密钥将源流量限制到特定的终端节点或 IP 范围,则还原操作将失败。要允许 Amazon Keyspaces 代表您的委托人执行表恢复操作,您必须添加一个aws:ViaAWSServiceIAM 策略中的全局条件密钥。

有关恢复表的权限的更多信息,请参见还原表所需的权限

我正在尝试使用 INSERT/UPDATE 来编辑自定义的生存时间 (TTL) 设置,但操作失败了

如果您尝试插入或更新自定义 TTL 值,则操作可能会失败并出现以下错误。

TTL is not yet supported.

使用为行或列指定自定义 TTL 值INSERT要么UPDATE操作时,必须先为该表启用 TTL。您可以使用为表启用 TTLttl自定义属性。

有关为表格启用自定义 TTL 设置的更多信息,请参阅如何使用自定义属性启用生存活时间 (TL)

我正在尝试将数据上传到我的 Amazon Keyspaces 表中,但出现了超出列数的错误

您正在上传数据,并且已超过可以同时更新的列数。

当您的表架构超过 350 KB 的最大大小时,就会发生此错误。有关更多信息,请参阅亚马逊密钥空间配额(适用于 Apache Cassandra)

我正在尝试删除我的 Amazon Keyspaces 表中的数据,但该范围的删除失败了

您正在尝试通过分区键删除数据,但收到范围删除错误。

当您尝试在一次删除操作中删除 1,000 多行时,就会发生此错误。

Range delete requests are limited by the amount of items that can be deleted in a single range.

有关更多信息,请参阅范围删除

要在单个分区中删除 1,000 多行,请考虑以下选项。

  • 按分区删除-如果大多数分区在 1,000 行以下,则可以尝试按分区删除数据。如果分区包含的行数超过 1,000 行,请改为尝试按群集列删除。

  • 按聚类列删除-如果您的模型包含多个聚类列,则可以使用列层次结构来删除多行。聚类列是一种嵌套结构,您可以通过对顶级列进行操作来删除许多行。

  • 按单行删除-您可以遍历行并按其完整主键(分区列和聚类列)删除每行。

  • 作为最佳实践,可以考虑在分区之间拆分行 — 在 Amazon Keyspaces 中,我们建议您在表分区之间分配吞吐量。这样可以在物理资源之间均匀分配数据和访问权限,从而提供最佳吞吐量。有关更多信息,请参阅在亚马逊 Keyspaces 中制定数据建模(适用于 Apache Cassandra)

在计划对繁重的工作负载执行删除操作时,还要考虑以下建议。

  • 使用 Amazon Keyspaces,分区可以包含几乎无限数量的行。这使您可以将分区缩放比传统的 Cassandra 指南的 100 MB “更宽”。随着时间的推移,时间序列或账本的数据增长超过一千兆字节的情况并不少见。

  • 有了 Amazon Keyspaces,当您必须对繁重的工作负载执行删除操作时,无需考虑压缩策略或墓碑。您可以根据需要删除任意数量的数据,而不会影响读取性能。