

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

# Amazon Keyspaces 中的数据定义语言错误故障排除
<a name="troubleshooting.cql"></a>

创建资源时遇到问题？ 以下介绍一些常见问题以及如何解决这些问题。

## 数据定义语言错误
<a name="troubleshooting-cql"></a>

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

您可以在中监控新密钥空间和表的创建状态 AWS 管理控制台，这会指示密钥空间或表何时处于待处理状态或处于活动状态。您还可以通过查询系统架构表，以编程方式监控新的键空间或表的创建状态。当键空间或表准备就绪可供使用时，就会在系统架构中变为可见。

**注意**  
要使用优化密钥空间的创建 CloudFormation，您可以使用此实用程序将 CQL 脚本转换为 CloudFormation 模板。该工具可从[GitHub 存储库](https://github.com/aws/amazon-keyspaces-cql-to-cfn-converter)中获得。

**Topics**
+ [键空间创建错误](#troubleshooting.cql.keyspace)
+ [表创建错误](#troubleshooting.cql.table)
+ [我正在尝试使用 Amazon Keyspaces point-in-time 恢复 (PITR) 恢复表，但恢复失败了](#troubleshooting.cql.pitr)
+ [我正在尝试使用 INSERT/UPDATE 编辑自定义 Time to Live (TTL) 设置，但操作失败了](#troubleshooting.cql.ttl)
+ [超出列数](#troubleshooting.cql.upload)
+ [范围删除错误](#troubleshooting.cql.rangedelete)

### 我创建了一个新的键空间，但无法查看或访问它
<a name="troubleshooting.cql.keyspace"></a>

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

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

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

要检查新的键空间何时可供使用，推荐的设计模式是轮询 Amazon Keyspaces 系统架构表 (system\$1schema\$1mcs.\$1)。

有关更多信息，请参阅 [在 Amazon Keyspaces 中查看键空间的创建状态](keyspaces-create.md)。

### 我创建了一个新表，但无法查看或访问它
<a name="troubleshooting.cql.table"></a>

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

如果您尝试访问新创建的 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\$1schema\$1mcs.\$1)。

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

```
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)
```

有关更多信息，请参阅 [在 Amazon Keyspaces 中查看表的创建状态](tables-create.md)。

### 我正在尝试使用 Amazon Keyspaces point-in-time 恢复 (PITR) 恢复表，但恢复失败了
<a name="troubleshooting.cql.pitr"></a>

如果您正在尝试使用恢复 (PITR) point-in-time 恢复 Amazon Keyspaces 表，但看到还原过程开始但未成功完成，则可能没有为此特定表配置恢复过程所需的所有权限。

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

例如，如果您在 IAM 策略中使用条件密钥将源流量限制为特定端点或 IP 范围，则恢复操作会失败。要允许 Amazon Keyspaces 代表您的主体执行表恢复操作，必须在 IAM 策略中添加 `aws:ViaAWSService` 全局条件键。

有关恢复表所需的权限的更多信息，请参阅[为 Amazon Keyspaces PITR 配置还原表 IAM 权限](howitworks_restore_permissions.md)。

### 我正在尝试使用 INSERT/UPDATE 编辑自定义 Time to Live (TTL) 设置，但操作失败了
<a name="troubleshooting.cql.ttl"></a>

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

```
TTL is not yet supported.
```

要使用 `INSERT` 或 `UPDATE` 操作为行或列指定自定义 TTL 值，必须先为表启用 TTL。您可以使用 `ttl` 自定义属性为表启用 TTL。

有关为表启用自定义 TTL 设置的更多信息，请参阅[使用自定义生存时间（TTL）更新表](TTL-how-to-enable-custom-alter.md)。

### 我尝试将数据上传到 Amazon Keyspaces 表中，但收到超出列数的错误
<a name="troubleshooting.cql.upload"></a>

**您正在上传数据，但已超过可以同时更新的列数。**

当您的表架构超过 350 KB 的大小上限时，就会发生此错误。有关更多信息，请参阅 [Amazon Keyspaces（Apache Cassandra 兼容）限额](quotas.md)。

### 我尝试删除 Amazon Keyspaces 表中的数据，但删除范围失败了
<a name="troubleshooting.cql.rangedelete"></a>

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

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

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

有关更多信息，请参阅 [范围删除](functional-differences.md#functional-differences.range-delete)。

要删除单个分区中的 1,000 多行，请考虑以下选项。
+ 按分区删除 - 如果大部分分区的行数低于 1,000 行，则可以尝试按分区删除数据。如果分区包含的行数超过 1,000，则改为尝试按聚类列删除。
+ 按聚类列删除 - 如果模型包含多个聚类列，可以使用列层次结构来删除多行。聚类列是一种嵌套结构，通过对顶级列进行操作，可以删除许多行。
+ 按单行删除 - 您可以遍历行，并按其完整主键（分区列和聚类列）删除每行。
+ 最佳做法是考虑在分区之间拆分行 — 在 Amazon Keyspaces 中，我们建议您在表分区之间分配吞吐量。这样可以将数据和访问平均分配给物理资源，从而提供最佳吞吐量。有关更多信息，请参阅 [数据建模最佳实践：设计数据模型的建议](data-modeling.md)。

在为繁重的工作负载计划删除操作时，请考虑以下建议。
+ 使用 Amazon Keyspaces，分区可以包含几乎无限数量的行。这样，您就可以将分区扩展为比传统 Cassandra 指导值 100 MB 更“宽”的范围。随着时间的推移，时间序列或分类账的数据增长超过千兆字节的情况并不少见。
+ 有了 Amazon Keyspaces，当您需要对繁重的工作负载执行删除操作时，就无需考虑压缩策略或墓碑。您可以删除任意数量的数据而不会影响读取性能。