Amazon DynamoDB 在智能湖仓架构中的实践

自 2012 年推出以来,已有数十万亚马逊云科技客户选择用 Amazon DynamoDB 处理关键任务的工作负载。Amazon DynamoDB 是一个非关系型数据库,允许您存储几乎无限量的数据,并以任何规模的单数毫秒级性能检索数据。

为了从这些数据中获得最大价值,客户必须依靠 Amazon Data Pipeline、Amazon EMR 或基于 Amazon DynamoDB 流的其他解决方案。这些解决方案通常需要构建具有高读取吞吐量的自定义应用程序,继而会产生高昂的维护和运营成本。

今天,我们将推出一项新功能,这项功能可使您将 Amazon DynamoDB 表数据导出 Amazon Simple Storage Service (S3)——无需编写代码。

它是 Amazon DynamoDB 的一项新的原生功能,可以以任何规模运行,无需管理服务器或集群,且该功能支持您跨亚马逊云科技区域和账户以秒级粒度将数据导出到过去 35 天的任何时间点。此外,它不会影响生产表的读取容量或可用性。

当您将数据以 Amazon DynamoDB JSON 或 Amazon Ion 格式导出到 Amazon S3 后,您即可使用 Amazon Athena、Amazon SageMaker 和 Amazon Lake Formation 等收藏夹工具查询或重新塑造它们。

在本文中,我将向您演示如何将 Amazon DynamoDB 表导出到 Amazon S3,然后使用标准 SQL 通过 Amazon Athena 进行查询。

将 Amazon DynamoDB 表导出到 Amazon S3 存储桶

导出过程依赖于 Amazon DynamoDB 在后台持续备份数据的能力。此功能称为连续备份:它支持时间点恢复 (PITR),并支持您将表恢复到过去 35 天内的任何时间点。

您可以通过点击 Streams and exports(流和导出)选项卡中的 Export to Amazon S3(导出到 Amazon S3)开始。

Amazon DynamoDB 在智能湖仓架构中的实践_第1张图片

除非您已启用连续备份,否则您必须在下一页中通过点击 Enable PITR(启用 PITR)来启用它们。

Amazon DynamoDB 在智能湖仓架构中的实践_第2张图片

目标 Amazon S3 存储桶中提供存储桶名称,例如 Amazon S3: //my-dynamodb-export-bucket。请记住,您的存储桶也可能位于其他账户或其他区域。

请随意查看其他设置,您可以在此处配置特定的时间点、输出格式和加密密钥。我将使用默认设置。

Amazon DynamoDB 在智能湖仓架构中的实践_第3张图片

现在,您可以通过点击Export(导出)来确认导出请求。

导出过程开始,您可以在 Streams and exports(流和导出)选项卡中监测其状态。

Amazon DynamoDB 在智能湖仓架构中的实践_第4张图片

导出过程完成后,您将在 Amazon S3 存储桶中找到一个新的 Amazon DynamoDB 文件夹以及与导出 ID 对应的子文件夹。

这就是该子文件夹的内容。

Amazon DynamoDB 在智能湖仓架构中的实践_第5张图片

您将发现两个清单文件,它们将支持您验证完整性和发现 data 子文件夹中 Amazon S3 对象的位置,而这些对象已为您自动压缩和加密。

如何通过 Amazon CLI 自动执行导出过程

如果您想自动执行导出过程,例如每周或每月创建一次新导出,则可以通过亚马逊云科技命令行界面 (Amazon CLI) 或亚马逊云科技开发工具包、调用 Amazon ExportTableToPointInTime API 来创建新的导出请求。

下面是使用 Amazon CLI 的示例。

Bash

aws dynamodb export-table-to-point-in-time \
    --table-arn TABLE_ARN \
    --s3-bucket BUCKET_NAME \
    --export-time 1596232100 \
    --s3-prefix demo_prefix \ 
    -export-format DYNAMODB_JSON
{
  "ExportDescription": {
    "ExportArn": "arn:aws:dynamodb:REGUIB:ACCOUNT_ID:table/TABLE_NAME/export/EXPORT_ID",
    "ExportStatus": "IN_PROGRESS",
    "StartTime": 1596232631.799,
    "TableArn": "arn:aws:dynamodb:REGUIB:ACCOUNT_ID:table/TABLE_NAME",
    "ExportTime": 1596232100.0,
    "S3Bucket": "BUCKET_NAME",
    "S3Prefix": "demo_prefix",
    "ExportFormat": "DYNAMODB_JSON"
  }
}

*左滑查看更多

请求导出后,您必须等待 ExportStatus 变为“COMPLETED”。

Bash

aws dynamodb list-exports
{
    "ExportSummaries": [
        {
            "ExportArn": "arn:aws:dynamodb:REGION:ACCOUNT_ID:table/TABLE_NAME/export/EXPORT_ID",
            "ExportStatus": "COMPLETED"
        }
    ]
}

*左滑查看更多

使用 Amazon Athena 分析导出的数据

一旦数据安全地存储在 Amazon S3 存储桶中,您就可以使用 Amazon Athena 开始对其进行分析。

您将在 Amazon S3 存储桶中找到很多 gz 压缩对象,每个对象都包含拥有多个 JSON 对象的文本文件,每行一个对象。这些 JSON 对象与包装在 Item 字段中的 Amazon DynamoDB 项目相对应,并根据您选择的导出格式具有不同的结构。

在上面的导出过程中,我选择了 Amazon DynamoDB JSON,而示例表中的项目代表简单游戏的用户,因此典型对象如下所示。

JSON

{
  "Item": {
    "id": {
      "S": "my-unique-id"
    },
    "name": {
      "S": "Alex"
    },
    "coins": {
      "N": "100"
    }
  }
}

*左滑查看更多

在本示例中,name 是字符串,而 coins 是数字。

我建议使用 Amazon Glue 爬网程序自动发现数据的 Amazon Schema 并在 Amazon Glue 目录中创建虚拟表。

但是,您还可以使用 CREATE EXTERNAL TABLE 语句手动定义虚拟表。

SQL

CREATE EXTERNAL TABLE IF NOT EXISTS ddb_exported_table (
  Item struct ,
               name:struct,
               coins:struct
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://my-dynamodb-export-bucket/AWSDynamoDB/{EXPORT_ID}/data/'
TBLPROPERTIES ( 'has_encrypted_data'='true');

*左滑查看更多

现在,您可以使用常规 SQL 查询它,甚至可以使用 Create Table as Select (CTAS) 查询来定义新的虚拟表。

使用 Amazon DynamoDB JSON 格式时,您的查询如下所示。

SQL

SELECT
    Item.id.S as id,
    Item.name.S as name,
    Item.coins.N as coins
FROM ddb_exported_table
ORDER BY cast(coins as integer) DESC;

您将获得一个结果集作为输出。

Amazon DynamoDB 在智能湖仓架构中的实践_第6张图片

性能和成本注意事项

导出过程是无服务器的,它会自动扩展,而且比自定义表扫描解决方案快得多。

完成时间取决于表的大小以及统一数据在表中的分布方式。大多数导出在 30 分钟内完成。对于不超过 10GiB 的小型表,导出应该只需几分钟;对于 TB 级的超大表,可能需要几个小时。由于您不使用湖内数仓导出来进行实时分析,这应该不是问题。通常,湖内数仓用于大规模聚合数据并生成每日、每周或每月报告。因此,大多数情况下,在继续使用分析管道之前,您可以等待几分钟或几小时让导出过程完成。

由于这项新功能的无服务器性质,因此没有小时成本:您只需为导出到 Amazon S3 的 GB 数据付费,例如,在美国东部区域,每 GiB 的费用为 0.10 美元。

由于数据会导出至您自己的 Amazon S3 存储桶且连续备份是导出过程的先决条件,请记住,您将会产生与 Amazon DynamoDB PITR 备份和 Amazon S3 数据存储相关的额外费用。涉及的所有成本组成部分仅取决于您要导出的数据量。因此,总体成本很容易估计,且远低于构建具有高读取吞吐量和高昂维护成本的自定义解决方案的总体拥有成本。

现已推出

这项新功能现已在提供连续备份的所有亚马逊云科技区域推出。

您可以使用亚马逊云科技管理控制台、亚马逊云科技命令行界面 (Amazon CLI) 亚马逊云科技开发工具包提出导出请求。此功能可使开发人员、数据工程师和数据科学家轻松地从 Amazon DynamoDB 表中提取和分析数据,而无需为 ETL(提取、转换、加载)设计和构建昂贵的自定义应用程序。

您现在可以将内部分析工具连接到 Amazon DynamoDB 数据,利用 Amazon Athena 等服务进行临时分析、利用 Amazon QuickSight 进行数据探索和可视化、利用 Amazon Redshift 和 Amazon SageMaker 进行预测分析等等。

Amazon DynamoDB 在智能湖仓架构中的实践_第7张图片

扫描上方二维码即刻报名

你可能感兴趣的