亚马逊Redshift 是一种云数据仓库服务,提供基于大规模并行处理(MPP)架构的高性能分析处理。构建和维护数据管道是所有企业面临的共同挑战。管理 SQL 文件、集成跨团队工作、整合所有软件工程原理以及导入外部实用程序可能是一项耗时的任务,需要复杂的设计和大量的准备工作。
DBT (DataBuildTool) 通过引入用于数据分析、转换和编排的结构良好的框架来提供这种机制。它还应用了一般软件工程原理,例如与 git 存储库集成、设置 干燥器 代码,添加功能测试用例,并包括外部库。这种机制允许开发人员专注于根据业务逻辑准备 SQL 文件,其余的由 dbt 负责。
在这篇文章中,我们研究了一种将 dbt 合并到 Amazon Redshift 中的最佳且经济高效的方法。我们用 亚马逊弹性 集装箱登记处 (Amazon ECR)来存储我们的 dbt Docker 镜像和 AWS 法门 作为 亚马逊弹性容器服务 (Amazon ECS) 任务来运行作业。
dbt 框架如何与 Amazon Redshift 配合使用?
dbt 有一个名为的 Amazon Redshift 适配器模块 DBT红移 这使其能够连接 Amazon Redshift 并与其配合使用。所有连接配置文件均在 dbt 中配置 profiles.yml
文件。在最佳环境中,我们将凭证存储在 AWS机密管理器 并取回它们。
以下代码显示了profile.yml的内容:
下图说明了dbt框架的关键组件:
主要组成部分如下:
- 型号 – 这些被编写为 SELECT 语句并保存为 .sql 文件。所有转换查询都可以写在这里,可以具体化为表或视图。根据配置,表刷新可以是完全刷新或增量刷新。 有关详细信息,请参阅 SQL 模型。
- 快照 – 这些工具 type-2 缓慢变化的维度 (SCD)在可变源表上。这些 SCD 标识表中的行如何随时间变化。
- 种子 – 这些是 dbt 项目中的 CSV 文件(通常位于种子目录中),dbt 可以将其加载到您的 数据仓库 使用
dbt seed
命令。 - 检测 – 这些是您对 dbt 项目中的模型和其他资源(例如源、种子和快照)所做的断言。当你跑步时
dbt test
,dbt 会告诉您项目中的每个测试是否通过或失败。 - 宏 – 这些是可以多次重用的代码片段。它们类似于其他编程语言中的“函数”,如果您发现自己在多个模型中重复代码,它们将非常有用。
这些组件存储为 .sql 文件并由 dbt CLI 命令。在运行期间,dbt 创建一个 有向无环图 (DAG) 基于 dbt 组件之间的内部参考。它使用 DAG 来相应地编排运行顺序.
可以在profiles.yml文件中创建多个配置文件,dbt可以在运行时使用它来定位不同的Redshift环境。 有关更多信息,请参阅 Redshift 设置.
解决方案概述
下图说明了我们的解决方案体系结构。
工作流包含以下步骤:
- 开源 dbt-redshift 连接器用于创建我们的 dbt 项目,包括所有必要的模型、快照、测试、宏和配置文件。
- 创建 Docker 映像并将其推送到 ECR 存储库。
- Docker 镜像由 Fargate 作为 ECS 任务运行,通过以下方式触发 AWS步骤功能。所有 Amazon Redshift 凭证都存储在 Secrets Manager 中,然后 ECS 任务使用它来连接 Amazon Redshift。
- 在运行期间,dbt 将所有模型、快照、测试和宏转换为 Amazon Redshift 兼容的 SQL 语句,并根据内部情况编排运行。 数据沿袭图 保持。这些 SQL 命令直接在 Redshift 集群上运行,因此工作负载会直接推送到 Amazon Redshift。
- 运行完成后,dbt 将创建一组 HTML 和 JSON 文件来托管 dbt 文档,它描述了数据目录、编译的 SQL 语句、数据沿袭图等。
先决条件
您应该具备以下先决条件:
- 很好地理解dbt原理和实现步骤。
- 具有用户角色权限的 AWS 账户,可以访问此解决方案中使用的 AWS 服务。
- Fargate 的安全组可从 Amazon ECS 访问 Redshift 集群和 Secrets Manager。
- 红移集群。创建说明请参考 创建集群.
- ECR 存储库:有关说明,请参阅 创建私有存储库
- 秘密管理员 包含用于连接到 Amazon Redshift 的所有凭证的密钥。这包括主机、端口、数据库名称、用户名和密码。欲了解更多信息,请参阅 创建 AWS Secrets Manager 数据库密钥.
- An 亚马逊简单存储 用于托管文档文件的 (Amazon S3) 存储桶。
创建一个dbt项目
我们使用 dbt CLI,因此所有命令都在命令行中运行。因此,如果尚未安装,请安装 pip。参考 安装 获取更多信息.
要创建 dbt 项目,请完成以下步骤:
- 安装依赖的dbt包:
pip install dbt-redshift
- 使用以下命令初始化 dbt 项目
dbt init <project_name>
命令,它会自动创建所有模板文件夹。 - 添加所有必需的 DBT 工件。
参考 dbt-redshift-etlpattern 存储库,其中包含参考 dbt 项目。有关建设项目的更多信息,请参阅 关于 dbt 项目.
在参考项目中,我们实现了以下功能:
- 使用增量模型的 SCD 类型 1
- 使用快照的 SCD 类型 2
- 种子查找文件
- 用于在项目中添加可重用代码的宏
- 用于分析入站数据的测试
Python 脚本已准备好从 Secrets Manager 获取访问 Amazon Redshift 所需的凭证。请参阅 导出_redshift_connection.py 文件中。
- 准备
run_dbt.sh
用于顺序运行 dbt 管道的脚本。该脚本放置在 dbt 项目的根文件夹中,如示例存储库中所示。
- 在dbt项目文件夹的父目录中创建一个Docker文件。此步骤构建要推送到 ECR 存储库的 dbt 项目的映像。
将映像上传到 Amazon ECR 并将其作为 ECS 任务运行
要将映像推送到 ECR 存储库,请完成以下步骤:
- 检索身份验证令牌并向注册表验证您的 Docker 客户端:
- 使用以下命令构建 Docker 映像:
- 构建完成后,标记您的图像,以便将其推送到存储库:
- 运行以下命令将映像推送到新创建的 AWS 存储库:
- 在 Amazon ECS 控制台上,使用 Fargate 作为基础设施选项创建一个集群。
- 根据需要提供您的 VPC 和子网。
- 创建集群后,创建一个 ECS 任务并将创建的 dbt 镜像分配为任务定义族。
- 在网络部分中,选择您的 VPC、子网和安全组以与 Amazon Redshift、Amazon S3 和 Secrets Manager 连接。
该任务将触发 run_dbt.sh
管道脚本并按顺序运行所有 dbt 命令。脚本完成后,我们可以在 Amazon Redshift 中看到结果以及推送到 Amazon S3 的文档文件。
- 您可以通过 Amazon S3 静态网站托管来托管文档。欲了解更多信息,请参阅 使用 Amazon S3 托管静态网站。
- 最后,您可以在 Step Functions 中将此任务作为 ECS 任务运行,以根据需要安排作业。欲了解更多信息,请参阅 使用 Step Functions 管理 Amazon ECS 或 Fargate 任务.
dbt-redshift-etlpattern 存储库现在拥有所需的所有代码示例。
在 AWS Fargate 中将 dbt 作业作为具有最低操作要求的 Amazon ECS 任务执行的成本约为 1.5 美元(成本_链接) 每月。
清理
完成以下步骤以清理您的资源:
- 删除ECS集群 你创造了。
- 删除 ECR 存储库 您创建用于存储图像文件。
- 删除 Redshift 集群 你创造了。
- 删除 Redshift Secret 存储在 Secrets Manager 中。
结论
本文介绍了通过在 Amazon ECS 中使用 Fargate 以经济高效的方式将 dbt 与 Amazon Redshift 结合使用的基本实现。我们通过示例项目描述了关键基础设施和配置设置。此架构可以帮助您利用 dbt 框架的优势来管理 Amazon Redshift 中的数据仓库平台。
有关 Amazon Redshift 内部运维的 dbt 宏和模型的更多信息,请参阅以下内容 GitHub回购。在后续文章中,我们将探讨您可以使用 Amazon Redshift 中的 dbt 框架实施的传统提取、转换和加载 (ETL) 模式。在您的帐户中测试此解决方案,并在评论中提供反馈或建议。
作者简介
塞沙德里·森塔马拉卡南 是位于英国伦敦的 AWS 专业服务团队的数据架构师。他在数据分析方面经验丰富,擅长与客户合作,专注于在 AWS 云中构建创新且可扩展的解决方案,以实现他们的业务目标。在业余时间,他喜欢与家人共度时光并参加运动。
穆罕默德·哈米(Mohamed Hamdy) 是位于英国伦敦的 AWS 专业服务部的高级大数据架构师。他在设计、领导和构建数据仓库和大数据平台方面拥有超过 15 年的经验。他帮助客户开发大数据和分析解决方案,以通过云采用之旅加速他们的业务成果。工作之余,穆罕默德喜欢旅行、跑步、游泳和打壁球。
- :具有
- :是
- :不是
- $UP
- 1
- 10
- 11
- 15 年
- 15%
- 7
- 8
- 90
- 970
- a
- 关于
- 加快
- ACCESS
- 访问
- 账号管理
- 横过
- 加
- 添加
- 采用
- 优点
- 所有类型
- 允许
- 已经
- 还
- Amazon
- 亚马逊网络服务
- an
- 分析
- 分析
- 分析
- 分析
- 和
- 适用
- 架构
- 保健
- 围绕
- AS
- 认证
- 认证
- 自动
- AWS
- AWS专业服务
- 基于
- 基本包
- BE
- 好处
- 之间
- 大
- 大数据运用
- 建立
- 建筑物
- 建立
- 商业
- by
- CAN
- 关心
- 例
- 检索目录
- 挑战
- 更改
- 改变
- 清洁
- 客户
- 云端技术
- 云采用
- 簇
- 码
- 注释
- 相当常见
- 编译
- 完成
- 复杂
- 兼容
- 组件
- 配置
- 配置
- 分享链接
- 连接
- 地都
- 安慰
- 容器
- 包含
- Contents
- 经济有效
- 覆盖
- 创建信息图
- 创建
- 创建
- 创建
- 资历
- 习俗
- 合作伙伴
- DAG
- data
- 数据分析
- 数据分析
- 数据仓库
- 数据仓库
- 数据库
- 默认
- 定义
- 依赖的
- 描述
- 设计
- 开发
- 开发
- 开发
- 不同
- 直接
- 码头工人
- 文件
- 不
- ,我们将参加
- 每
- 使
- 工程师
- 企业
- 环境
- 环境中
- 醚(ETH)
- 执行
- 体验
- 有经验
- 探索
- 外部
- 提取
- 非常
- 失败
- 家庭
- 特征
- 反馈
- 文件
- 档
- 找到最适合您的地方
- 专注焦点
- 聚焦
- 以下
- 如下
- 针对
- 骨架
- 止
- ,
- 实用
- 功能
- 其他咨询
- 生成
- 混帐
- 理想中
- 非常好
- 图形
- 团队
- 组的
- 有
- 有
- he
- 帮助
- 帮助
- 相关信息
- 高性能
- 他的
- 主持人
- 托管
- 创新中心
- HTML
- HTTPS
- 鉴定
- if
- 说明
- 图片
- 图片
- 实施
- 履行
- 实施
- 进口
- 输入
- in
- 其他
- 包括
- 包含
- 结合
- 增量
- 信息
- 基础设施
- 创新
- 安装
- 说明
- 整合
- 内部
- 成
- 介绍
- IT
- 工作
- 工作机会
- 旅程
- JSON
- 键
- 语言
- 最新
- 领导
- 库
- 喜欢
- 喜欢
- Line
- 加载
- 逻辑
- 登录
- 伦敦
- 看
- 很多
- 宏
- 维持
- 保养
- 使
- 管理
- 经理
- 管理的
- 大规模
- 机制
- 满足
- 最小
- 模型
- 模型
- 模块
- 穆罕默德
- 月
- 更多
- 多
- 姓名
- 命名
- 必要
- 工业网络
- 新
- 现在
- of
- 优惠精选
- on
- 打开
- 开放源码
- 操作
- 操作
- 最佳
- 附加选项
- or
- 管弦乐编曲
- 其他名称
- 我们的
- 结果
- 输出
- 学校以外
- 超过
- 简介
- 包
- 并行
- 通行证
- 密码
- 模式
- 为
- 允许
- 件
- 管道
- 放置
- 平台
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 播放
- 帖子
- 准备
- 准备
- 准备
- 先决条件
- 小学
- 原则
- 私立
- 处理
- 所以专业
- 本人简介
- 简介
- 代码编程
- 编程语言
- 项目
- 项目
- 提供
- 提供
- 推
- 蟒蛇
- 查询
- 参考
- 参考
- 注册处
- 知识库
- 要求
- 必须
- 岗位要求
- 需要
- 资源
- REST的
- 成果
- 可重复使用
- 角色
- 根
- 行
- 运行
- 运行
- 保存
- 可扩展性
- 始你
- 脚本
- 秒
- 秘密
- 部分
- 保安
- 看到
- 种子
- 种子
- 前辈
- 序列
- 服务
- 特色服务
- 集
- 设置
- 应该
- 如图
- 作品
- 简易
- 慢慢地
- 快照
- So
- 软件
- 软件工程
- 方案,
- 解决方案
- 来源
- 来源
- 专门
- 花费
- 运动
- SQL
- 个人陈述
- 声明
- 步
- 步骤
- 商店
- 存储
- 子网
- 随后
- 这样
- 游泳的
- 表
- 行李牌
- 采取
- 拍摄
- 目标
- 任务
- 任务
- 团队
- 展示
- 模板
- test
- 测试
- 这
- 其
- 他们
- 然后
- 因此
- 博曼
- 他们
- Free Introduction
- 通过
- 次
- 耗时的
- 时
- 至
- 象征
- 传统
- 改造
- 转型
- 触发
- 引发
- 类型
- 一般
- Uk
- 理解
- 使用
- 用过的
- 用户
- 使用
- 运用
- 公用事业
- 通过
- 查看
- 仓库保管
- 仓储服务
- 方法..
- we
- 卷筒纸
- Web服务
- 您的网站
- 井
- ,尤其是
- 这
- 而
- 维基百科上的数据
- 将
- 中
- 工作
- 工作流程
- 合作
- 将
- 书面
- 年
- 您
- 您一站式解决方案
- 你自己
- 和风网