当前位置: 首页 > 知识库问答 >
问题:

如何使用AWS CLI创建Dynamodb全局二级索引?

公冶智刚
2023-03-14

AWS CLI for Dynamodb创建表在创建全局二级索引时有点混乱。在CLI文档中,它表示全局二级索引可以用以下表达式(简写)表示:

IndexName=string,KeySchema=[{AttributeName=string,KeyType=string},{AttributeName=string,KeyType=string}],Projection={ProjectionType=string,NonKeyAttributes=[string,string]},ProvisionedThroughput={ReadCapacityUnits=long,WriteCapacityUnits=long} ...

我的解释是,我应该这样做

--global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput={ReadCapacityUnits=1,WriteCapacityUnits=1}

请注意,我在这里不包括KeySchema来推断复杂性。控制台显示以下错误:

Parameter validation failed:
Missing required parameter in GlobalSecondaryIndexes[0]: "KeySchema"
Unknown parameter in GlobalSecondaryIndexes[0]: "WriteCapacityUnits", must be one of: IndexName, KeySchema, Projection, ProvisionedThroughput
Invalid type for parameter GlobalSecondaryIndexes[0].ProvisionedThroughput, value: ReadCapacityUnits=1, type: <class 'str'>, valid types: <class 'dict'>

因此AWS CLI无法识别ProvisionedThroughput的映射表达式。我尝试了几种表达方式,但都没能成功。我也没有在谷歌上找到任何描述如何做的网页。

共有3个答案

景德海
2023-03-14

>

  • 在JSON文件中定义表结构,包括索引结构。使用以下命令创建模板结构<代码>aws dynamodb创建表--生成cli框架

    使用表定义输入jsonaws dynamodb create table--cli输入json运行cli命令file://path-to-yourtable-definition.json

  • 苏君昊
    2023-03-14

    通过阅读Github上的AWS CLI源代码,它可以解析双引号内容。所以在脚本中添加双引号解决了这个问题。有新的代码-

    --global-secondary-indexes IndexName=requesterIndex,Projection={ProjectionType=ALL},ProvisionedThroughput="{ReadCapacityUnits=${CURRENT_READUNIT},WriteCapacityUnits=${CURRENT_WRITEUNIT}}"
    
    黄磊
    2023-03-14

    这是我用来从命令行在aws文档中创建回复示例的cli调用。我在末尾使用的$EP可以在环境中设置为EP=“--endpoint url”http://localhost:8000“在本地dynamodb而不是aws上创建表格。

    aws dynamodb create-table --table-name Reply --attribute-definitions \
    AttributeName=Id,AttributeType=S AttributeName=ReplyDateTime,AttributeType=S \
    AttributeName=PostedBy,AttributeType=S AttributeName=Message,AttributeType=S \
    --key-schema AttributeName=Id,KeyType=HASH \
    AttributeName=ReplyDateTime,KeyType=RANGE --global-secondary-indexes \
    IndexName=PostedBy-Message-Index,KeySchema=["\
    {AttributeName=PostedBy,KeyType=HASH}","\
    {AttributeName=Message,KeyType=RANGE}"],Projection="{ProjectionType=INCLUDE \
    ,NonKeyAttributes=["ReplyDateTime"]}",ProvisionedThroughput="\
    {ReadCapacityUnits=10,WriteCapacityUnits=10}" --provisioned-throughput \
    ReadCapacityUnits=5,WriteCapacityUnits=4 $EP
    
     类似资料:
    • 我是AWS DynamoDB和nosql的新手,我对表创建有问题。 我试图创建一个名为的表,具有以下属性: 用户ID(HASH) OSType(范围) MSISDN IMSI 设备ID 我不仅需要通过查询表,还需要通过以下字段查询表: MSISDN 我的逻辑如下: 通过字段查询表 在阅读了有关LSI/GSI的手册后,我很难理解如何创建表和定义这些索引。 这是我尝试使用PHP AWS SDK创建表的

    • DynamoDB表已经创建并在生产中运行。根据当前用例,计划添加新的辅助全局索引。这可以通过AWS实现SDK,是否可以使用CloudForm脚本更新DynamoDB表。 任何帮助都将不胜感激。

    • 我有以下带有三个全局二级索引(GSI)的DyamoDB表 Id(主键)、user_id(GSI)、event_type(GSI)、product_id(GSI)、rate、create_date 我有以下三种查询模式: null null

    • 我仍然对本地二级索引的使用感到困惑。当需要LSI与GSI时,请给我具体的用例。 例如,“GenreAlbumTitle”索引应该是GSI还是LSI?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.Prim

    • 我在Dynamodb中有一个表,我试图通过命名全局二级索引来获取一个项目(使用),但我得到了错误: 我的问题是: 但后来我查看了get文档,它没有属性。所以我想也许我应该命名GSI而不是表名: 但后来我面对: 这意味着不被识别为全局表。所以我的问题是,拥有操作列表: 批量获取 批量写入 createSet 删除 得到 把 查询 扫描 更新 哪些支持GSI和LSI?此外,如果您想使用GSI检索一个特

    • 我正在DynamoDB中创建一个表和GSI,使用以下参数,如文档所示: 是表的主键,我使用作为GSI的主键。(为了简洁起见,我删除了一些不必要的配置参数) 我正在使用以下命令查询此表: 但我一直在犯错误: "一个或多个参数值无效:条件参数类型与模式类型不匹配" 在文档中,它指定主可以是或,并且您可以在字段中设置。我正在以的形式发送,不确定这里缺少了什么。 问题是在我创建表的方式上,还是在我查询表的