乐趣区

关于存储: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)开始。

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

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

请随便查看其余设置,您能够在此处配置特定的工夫点、输入格局和加密密钥。我将应用默认设置。

当初,您能够通过点击Export(导出)来确认导出申请。

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

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

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

您将发现两个清单文件,它们将反对您验证完整性和发现 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 <id:struct<S:string>,
               name:struct<S:string>,
               coins:struct<N:string>
)
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;

您将取得一个后果集作为输入。

性能和老本注意事项

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

实现工夫取决于表的大小以及对立数据在表中的散布形式。大多数导出在 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 进行预测剖析等等。

扫描上方二维码即刻报名

退出移动版