AWS Glue Crawler - DynamoDB Export - 在架构而不是结构中获取属性名称

AWS Glue Crawler - DynamoDB Export - Get attribute names in schema instead of struct

我已经在从 dynamodb 导出的数据目录中定义了默认爬虫。我试图让它给我一个结构化的 table 而不是具有单列结构类型的 table 。我必须做什么才能在其中获取实际的列名?我已经尝试添加自定义分类器和不同的路径表达式,但似乎没有任何效果,而且我觉得我遗漏了一些非常明显的东西。

我在 glue 中使用爬虫构建器,它似乎没有提供太多定制。

这是默认搜寻器生成的 table 的架构:

这是我从 dynamo 导出的项目之一:

{
    "Item": {
        "the_url": {
            "S": "/2021/07/06/****redacted****.html"
        },
        "as_of_when": {
            "S": "2021-09-01"
        },
        "user_hashes": {
            "SS": [
                "****redacted*****"
            ]
        },
        "user_id_hashes": {
            "SS": [
                "u3MeXDcpQm0ACYuUv6TMrg=="
            ]
        },
        "accumulated_count": {
            "N": "1"
        },
        "today_count": {
            "N": "1"
        }
    }
}

Athena 解释 JSON 数据的方式意味着您的数据只有一列 Item。 Athena 没有任何机制可以将 JSON 对象的任意部分映射到列,它只能将顶级属性映射到列。

如果您希望对象的其他部分作为列,您将必须使用转换后的数据创建一个新的 table,或者创建一个将属性作为列的视图,例如

CREATE OR REPLACE VIEW attributes_as_top_level_columns AS
SELECT
  item.the_url.S AS the_url,
  CAST(item.as_of_when.S AS DATE) AS as_of_when,
  item.user_hashes.SS AS user_hashes,
  item.user_id_hashes.SS AS user_id_hashes,
  item.accumulated_count.N AS accumulated_count,
  item.today_count.N AS today_count
FROM items

在上面的示例中,我还展平了数据类型键(SSSN)并将日期字符串转换为日期。