如何从Athena中查询DynamoDB嵌套元素

0

【以下的问题经过翻译处理】 我正在尝试在DynamoDB文档中提供的示例电影表上执行查询。我尝试了以下几种变体,但结果都是相同的语法错误。

可以在以下网址上找到数据样本: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.02.html

以下是Athena查询和输出。具体错误是:“无法解析列'lds。”info“。”release_date“'”

bash$ aws athena start-query-execution --query-string "select lds.\"info\".\"release_date\" from \"dynamodb\".\"default\".\"movies\" as lds where year = 1985" --region us-east-1 --work-group AmazonAthenaPreviewFunctionality
{
    "QueryExecutionId": "f1c21259-43ea-4c69-8c42-55ff70998953"
}
bash$ aws athena get-query-execution --query-execution-id f1c21259-43ea-4c69-8c42-55ff70998953
{
    "QueryExecution": {
        "QueryExecutionId": "f1c21259-43ea-4c69-8c42-55ff70998953",
        "Query": "select lds.\"info\".\"release_date\" from \"dynamodb\".\"default\".\"movies\" as lds where year = 1985",
        "StatementType": "DML",
        "ResultConfiguration": {
            "OutputLocation": "s3://<BUCKET-NAME>/results/f1c21259-43ea-4c69-8c42-55ff70998953.csv"
        },
        "QueryExecutionContext": {},
        "Status": {
            "State": "FAILED",
            "StateChangeReason": "SYNTAX_ERROR: line 1:8: Column 'lds.\"info\".\"release_date\"' cannot be resolved",
            "SubmissionDateTime": 1589221630.629,
            "CompletionDateTime": 1589221632.273
        },
        "Statistics": {
            "EngineExecutionTimeInMillis": 998,
            "DataScannedInBytes": 0,
            "TotalExecutionTimeInMillis": 1644,
            "QueryQueueTimeInMillis": 625,
            "ServiceProcessingTimeInMillis": 21
        },
        "WorkGroup": "AmazonAthenaPreviewFunctionality"
    }
}
profile picture
专家
已提问 5 个月前8 查看次数
1 回答
0

【以下的回答经过翻译处理】 您只是在表别名缺少双引号:

bash$ aws athena start-query-execution --query-string "select \"lds\".\"info\".\"release_date\" from \"dynamodb\".\"default\".\"movies\" as \"lds\" where year = 1985" --region us-east-1 --work-group AmazonAthenaPreviewFunctionality

您还应该检查表schema。您可以通过在Athena中执行此查询来执行此操作:

DESCRIBE dynamodb.default.movies

如果该schema中缺少您的列,则应:

  • 验证您的Glue目录:您可能已经创建了一个名为“movies”的表,该表具有不正确的schema。
  • 要么从Glue目录中删除该表,要么确保它使用正确的schema创建。

您的查询在我这里是能够工作的。我没有在Glue目录中定义表,因此连接器会推断出schema。

希望这能帮助您。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则