对于 DynamoDB 的新手来说,学习曲线可能很艰难,因此我们开发了 DynamoDB Shell (ddbsh),这是一款适用于亚马逊 DynamoDB 的开源命令行接口。
ddbsh 的目标之一是为 DynamoDB 的新手提供一个简单直观的环境,使他们能够通过运行熟悉的类似 SQL 的命令开始使用。ddbsh 中的查询语言源自 SQL,具有特定于 DynamoDB 的扩展名。
例如,您可以使用 ddbsh 通过运行以下命令来创建表:
create table ddbsh_demo (id number) primary key (id hash);
你可以从
Hello DynamoDB shell 中快速了解 ddbsh ,并在 dynamodb-shell
入
门
中更深入地介绍创建和查询全局二级索引。
ddbsh Readme.md 文件包含
详细的命令用法和 示例。
这篇文章涵盖两个主题。首先,您将学习如何连接到 DynamoDB,然后连接到本地 DynamoDB。 然后,您将学习一种使用 SQL WHERE 子句筛选数据的方法。
要开始使用,请从
Github 上的 亚马逊云科技 实验室
下载 ddbsh 源代码, 然后按照说明进行
构建
。
连接到 亚马逊云科技 区域
ddbsh 使用 A
WS C++ 开发工具包
。 您可以按照
亚马逊云科技 命令行接口
的说明配置连接参数 。
要了解更多信息,请参阅配置 亚马逊云科技 CLI 的 环境变量
。
要连接到某个区域
- 查看 亚马逊云科技 配置文件中的默认区域、亚马逊云科技 访问密钥和 亚马逊云科技 密钥。 有关
文件
在操作系统上的确切位置,请参阅文档。该文档为
DynamoDB 本地 和 Dynamo DB
(
网络服务)提供了具体的指导。 您还可以使用 a
ws 配置
命令或设置环境变量来
确定如何连接到 DynamoDB
。
- 检查您是否能够使用 亚马逊云科技 CLI 连接到 DynamoDB。例如,你可以运行:a
- 解决所有错误。在运行前面的命令且没有任何错误后,您将能够连接到您的默认区域,如随后的交互式会话所示。
% ddbsh ddbsh-版本 0.2 us-east-1>
- 在提示符下,你可以运行命令。要查看命令列表,请运行 HELP 命令。命令以分号 (;) 结尾
us-east-1> help;HELP-在 ddbsh HELP 中提供帮助 [关键字 [关键字...]] [...]
在本地连接到 DynamoDB。
在开始此步骤之前,请确保您的 ddbsh 版本为 0.2 或更高版本,亚马逊云科技 SDK 版本为 1.11 或更高版本。
连接到 DynamoDB 本地
- 按照说明在
您的计算机上本地 安装 DynamoDB
。
- 在终端会话中,设置环境变量以连接到 DynamoDB 本地实例。
% 导出 aws_access_key_id= “fakemykeyID”% export aws_secret_accescret_key= “fakesecretAccessKey”% 导出 aws_default_region= “dynamodb-Local”
http://localhost:8000
- 在第二个终端会话中,在本地启动 DynamoDB。
% java-djava.Library.path=。/dynamod
Blocal_lib-jar DynamoDBLocal.jar
- 返回第一个终端会话。你应该能够使用类似于以下内容的 亚马逊云科技 CLI 命令在本地连接 DynamoDB:
% aws dynamodb--endpoint-url http://localhost:8000 list-tables {“tableNam
es”: []}
- 如果你能够做到这一点,那么你可以使用
ddb
sh 连接到本地实例。
% ddbsh ddbsh-版本 0.2 dynamodb-local (*) >
区域名称后方括号 (*) 中的星号表示正在使用非标准端点。您现在已连接到本地 DynamoDB。请注意,当连接到 DynamoDB 本地时,单元测试将无法成功。
使用 WHERE 子句筛选数据
您可以将 WHERE 子句与 SE LE
CT、U PDAT
E 、DE LE
TE 和 UPSER
T 一起使用。在 WH ER
E 子句中,可以包含多个可与逻辑 AND 和
逻辑 O R
连接的逻辑表达式 。此外,可以使用 NOT 运算符 否
定逻辑表达式。
支持以下逻辑表达式。
- 表单
属性 op 值
的逻辑比较, 其中 属性 是表属性, op 是 <、>、<=、>=、= 或! 之一=。
- 如果@@
项目中存在 attr,则 attribute_ex ists (attr)
的计算结果为真。
- 如果
attr 以前缀开头,则 begins_with(attr,前缀)
的 计算结果为真。
- 如果
attr 介 于提供的两个值之间,则值和值
之间的 attr 计算结果为真。
- 如果
attr 为指定类型,则属性类型(attr,类型)
的 计算结果为真。
考虑以下示例数据:
dynamodb-local (*)> select * from exprtest;
{a: 2, b: 2}
{a: 1, b: 2}
{a: 3, b: cooperate}
{a: 5, c: coffee}
{a: 4, b: coffee}
dynamodb-local (*)>
以下是一些示例查询:
dynamodb-local (*)> select * from exprtest where a > 3 and a < 5;
{a: 4, b: coffee}
dynamodb-local (*)> select * from exprtest where a between 2 and 5;
{a: 2, b: 2}
{a: 3, b: cooperate}
{a: 5, c: coffee}
{a: 4, b: coffee}
dynamodb-local (*)> select * from exprtest where begins_with(b, "co");
{a: 3, b: cooperate}
{a: 4, b: coffee}
dynamodb-local (*)> select * from exprtest where attribute_exists(c);
{a: 5, c: coffee}
dynamodb-local (*)> select * from exprtest where attribute_exists(c) and a != 3;
{a: 5, c: coffee}
dynamodb-local (*)> select * from exprtest where attribute_exists(c) or a = 3;
{a: 3, b: cooperate}
{a: 5, c: coffee}
dynamodb-local (*)> select * from exprtest where attribute_type(b, string);
{a: 3, b: cooperate}
{a: 4, b: coffee}
dynamodb-local (*)>
通过使用括号对项目进行分组,可以编写更复杂的查询。
dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or ( a = 5 and c = "coffee");
{a: 3, b: cooperate}
{a: 5, c: coffee}
{a: 4, b: coffee}
你可以使用 EXPLA I
N 命令来查看 ddbsh 将如何运行你的查询。
dynamodb-local (*)> explain select * from exprtest where attribute_type(b, string) or ( a = 5 and c = "coffee");
Scan({
"TableName": "exprtest",
"ReturnConsumedCapacity": "NONE",
"FilterExpression": "attribute_type(#apaa1, :vpaa1) OR (#apaa2 = :vpaa2 AND #apaa3 = :vpaa3)",
"ExpressionAttributeNames": {
"#apaa1": "b",
"#apaa2": "a",
"#apaa3": "c"
},
"ExpressionAttributeValues": {
":vpaa1": {
"S": "S"
},
":vpaa2": {
"N": "5"
},
":vpaa3": {
"S": "coffee"
}
},
"ConsistentRead": false
})
dynamodb-local (*)>
您也可以在 更新
中 使用 WHERE 子句。
dynamodb-local (*)> help update;
UPDATE - Update items in a table
UPDATE <name> SET <update_set> [where clause]
UPDATE <name> REMOVE <remove list> [where clause]
dynamodb-local (*)>
dynamodb-local (*)> update exprtest set b = 15 where a = 5;
UPDATE (0 read, 1 modified, 0 ccf)
dynamodb-local (*)> select * from exprtest where a = 5;
{a: 5, b: 15, c: coffee}
dynamodb-local (*)>
您可以删除一个属性。以下示例删除了属性 c
。
dynamodb-local (*)> update exprtest remove c where a = 5;
UPDATE (0 read, 1 modified, 0 ccf)
dynamodb-local (*)> select * from exprtest where a = 5;
{a: 5, b: 15}
dynamodb-local (*)>
清理
完成实验后,请记住删除您可能创建的所有表格,以避免产生费用。你可以使用 ddbsh 中的 D ROP TA
BL
E 来做到这一点。您可以前往启动 DynamoDB 的终端(第二个会话)在本地停止 DynamoDB,然后使用 Ctrl-C 将其关闭。
结论
所以,就是这样,使用 ddbsh
, 你可以从表中读取、修改或删除数据,还可以使用 WHERE 子句筛选对哪些项目进行操作,就像 在
标准 SQL 中一样。
我们从客户和潜在客户那里听说,他们需要能够帮助他们学习 DynamoDB API 的资源。我们正在尝试一些解决方案,比如 ddbsh 中的 EXPL A
I N 命令。如果您对此工具提供反馈,我们将不胜感激。我们可以在 ddbsh 中添加什么来使您更容易使用 DynamoDB?
如果您希望在 ddbsh 中实现某些特定功能或功能,请输入支持请求或直接发送电子邮件至 amrithie (at) amazon (dot) com 告诉我们。我们还在寻找有兴趣帮助扩展和维护 ddbsh 的贡献者。具体而言,如果您想提交拉取请求以使用户更容易安装和使用 ddbsh(例如通过提供打包脚本),我们将不胜感激。 已经提交了
为自制软件捐款的 拉取请求
。如有任何其他拉取请求,请随时通过 amrithie (at) amazon (dot) com 直接与我联系。
这是你们所有人的最后行动呼吁。如果你想要一个在 macOS 上安装 ddbsh 的自制解决方案,请通过分叉、加星和观看 ddbsh GitHub 存储库来帮助我们。对
自制存储库的拉取请求已提交
, 但是 ddbsh GitHub 存储库知名度不高。因此,
该请求目前已被阻止
。请帮助推动此请求向前推进。
作者简介
Amrith Kumar 是亚马逊网络服务的高级首席工程师,在亚马逊 DynamoDB 上工作。