【问题标题】:AWS CLI dynamoDB How to pass a variable to get-item --key mapAWS CLI dynamoDB 如何将变量传递给 get-item --key map
【发布时间】:2019-02-21 18:36:19
【问题描述】:

我正在尝试遍历用户 ID 列表,以使用 AWS CLI 从 dynamoDB 表中检索记录。

// list.txt

abcdefghijklmnop1234567890123456
bbcdefghijklmnop1234567890123456
cbcdefghijklmnop1234567890123456
dbcdefghijklmnop1234567890123456
ebcdefghijklmnop1234567890123456

我运行了get-item aws 命令来检索单个记录:


$ aws dynamodb get-item --table-name "fake-table" --key '{"userId": {"S": "abcdefghijklmnop1234567890123456"}}'

它给了我想要的东西:

{
    "Item": {

        ...

        "userId": {
            "S": "abcdefghijklmnop1234567890123456"
        },

        "data": { ... }
    }
}

我现在正在尝试循环遍历 list.txt 以将每个 id 作为变量传递给 --key 选项,我理解它是一个映射并以 json 的形式。

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/get-item.html

我的脚本如下所示:

while read LINE
do
    echo "$LINE"
    (aws dynamodb get-item --table-name "fake-table" --key '{"userId": {"S": $LINE}}') >> output.txt
done < list.txt

它抛出了这个错误:

Error parsing parameter '--key': Invalid JSON: Expecting value: line 1 column 22 (char 21)
JSON received: {"userId": {"S": $$LINE}}
abcdefghijklmnop1234567890123456

我尝试格式化原始列表,以便将用户 ID 用单引号括起来并收到相同的错误。

  1. 如何将变量传递到地图中?

我还想扩展搜索以仅返回具有数据的 userId 的记录。

  1. 如何扩展我的 get-item 搜索以检查数据是否不等于 {}

我正在尝试在命令行中执行此操作来学习它。

我也打算在 node.js 中这样做。

【问题讨论】:

    标签: amazon-dynamodb command-line-interface aws-cli


    【解决方案1】:

    单引号会阻止您的 shell(我假设是 bash 或类似的)扩展 $LINE 变量。相反,他们将其保留为文字值。请参阅bash manual 中的引用部分。

    尝试将整个内容用双引号括起来,斜线转义那些需要格式化 JSON 值的内容:

    aws dynamodb get-item --table-name "fake-table" --key "{\"userId\": {\"S\": $LINE}}" >> output.txt
    

    【讨论】:

    • 非常感谢@MilanCermak :)
    【解决方案2】:
    1. 原来是@MilanCermak 指出的单引号。

    2. 循环的目的是从列表中提取相关的用户记录(总共 12,000 条),但每次查询数据库都非常耗时。提取所有 (550,000) 个 dynamoDB 记录并使用 python 脚本操作它们会更快。

    aws dynamodb scan --table-name "fake-table" \
      --projection-expression "userId" \
      --max-items 550000 --page-size 90 --region xx-xxx-1 \
      | python reformat_list.py > results.csv
    

    我喜欢这个问题 0_0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多