Skip to content

Latest commit

 

History

History
191 lines (113 loc) · 8.21 KB

building-your-first-etl-pipeline-with-bash.md

File metadata and controls

191 lines (113 loc) · 8.21 KB

使用 Bash 构建您的第一个 ETL 管道

原文:www.kdnuggets.com/building-your-first-etl-pipeline-with-bash

使用 Bash 构建第一个 ETL 管道

图片由作者提供 | Midjourney & Canva

介绍


我们的前三个课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升您的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持您的组织的 IT 工作


ETL,即提取、转换、加载,是一个必要的数据工程过程,涉及从各种来源提取数据,将其转换为可用的格式,并将其移至某个目的地,如数据库。ETL 管道自动化了这一过程,确保数据以一致和高效的方式处理,为数据分析、报告和机器学习等任务提供框架,并确保数据干净、可靠且可用。

Bash,缩写自 Bourne-Again Shell — 又名 Unix Shell — 是一个强大的工具,用于构建 ETL 管道,因其简洁性、灵活性和极广泛的适用性,因此是初学者和资深专家的绝佳选择。Bash 脚本可以自动化任务、移动文件和与命令行上的其他工具进行交互,这使它成为 ETL 工作的良好选择。此外,bash 在类 Unix 系统(如 Linux、BSD、macOS 等)中无处不在,因此在大多数这类系统上无需额外操作即可使用。

本文针对的是希望构建第一个 ETL 管道的初学者和实践数据科学家、数据工程师。假设读者具备基本的命令行理解,并旨在提供一个使用 bash 创建 ETL 管道的实用指南。文章的最终目标是引导读者完成构建基础 ETL 管道的过程,通过这篇文章,读者将能够了解如何实现一个从源提取数据、转换数据并将其加载到目标数据库的 ETL 管道。

设置您的环境

在开始之前,请确保您具备以下内容:

  • 一个基于 Unix 的系统(Linux 或 macOS)

  • Bash shell(通常在 Unix 系统上预装)

  • 基本的命令行操作理解

对于我们的 ETL 管道,我们将需要这些特定的命令行工具:

  • curl

  • jq

  • awk

  • sed

  • sqlite3

您可以使用系统的包管理器安装它们。在基于 Debian 的系统上,您可以使用apt-get

sudo apt-get install curl jq awk sed sqlite3

在 macOS 上,您可以使用brew

brew install curl jq awk sed sqlite3 

让我们为 ETL 项目设置一个专用目录。打开终端并运行:

mkdir ~/etl_project
cd ~/etl_project 

这会创建一个名为 etl_project 的新目录并进入该目录。

提取数据

数据可以来自各种来源,如 API、CSV 文件或数据库。在本教程中,我们将演示如何从公共 API 和 CSV 文件中提取数据。

让我们使用 curl 从公共 API 中获取数据。例如,我们将从一个提供样本数据的模拟 API 中提取数据。

# Fetching data from a public API
curl -o data.json "https://api.example.com/data"

这个命令将下载数据并保存为 data.json

我们也可以使用 curl 从远程服务器下载一个 CSV 文件。

# Downloading a CSV file
curl -o data.csv "https://example.com/data.csv"

这将把 CSV 文件保存为我们工作目录中的 data.csv

数据转换

数据转换是将原始数据转换为适合分析或存储的格式的必要步骤。这可能涉及解析 JSON、过滤 CSV 文件或清理文本数据。

jq 是一个处理 JSON 数据的强大工具。我们将使用它从 JSON 文件中提取特定字段。

# Parsing and extracting specific fields from JSON
jq '.data[] | {id, name, value}' data.json > transformed_data.json

这个命令从 JSON 数据中的每个条目中提取 idnamevalue 字段,并将结果保存到 transformed_data.json 中。

awk 是一个用于处理 CSV 文件的多功能工具。我们将使用它从我们的 CSV 文件中提取特定的列。

# Extracting specific columns from CSV
awk -F, '{print $1, $3}' data.csv > transformed_data.csv

这个命令从 data.csv 中提取第一列和第三列,并将它们保存到 transformed_data.csv

sed 是一个用于过滤和转换文本的流编辑器。我们可以用它来执行文本替换和清理数据。

# Replacing text in a file
sed 's/old_text/new_text/g' transformed_data.csv

这个命令将 transformed_data.csv 中的 old_text 替换为 new_text

加载数据

常见的数据加载目的地包括数据库和文件。对于本教程,我们将使用 SQLite,一种常用的轻量级数据库。

首先,让我们创建一个新的 SQLite 数据库和一个表来存储我们的数据。

# Creating a new SQLite database and table
sqlite3 etl_database.db "CREATE TABLE data (id INTEGER PRIMARY KEY, name TEXT, value REAL);"

这个命令创建一个名为 etl_database.db 的数据库文件,并创建一个名为 data 的表,该表有三列。

接下来,我们将把转换后的数据插入到 SQLite 数据库中。

# Inserting data into SQLite database
sqlite3 etl_database.db <<EOF
.mode csv
.import transformed_data.csv data
EOF

这段命令将模式设置为 CSV 并将 transformed_data.csv 导入到 data 表中。

我们可以通过查询数据库来验证数据是否正确插入。

# Querying the database
sqlite3 etl_database.db "SELECT * FROM data;"

这个命令检索 data 表中的所有行并显示它们。

最终思考

我们在使用 bash 构建 ETL 管道时涵盖了以下步骤,包括:

  1. 环境设置和工具安装

  2. 使用 curl 从公共 API 和 CSV 文件中提取数据

  3. 使用 jqawksed 进行数据转换

  4. 使用 sqlite3 在 SQLite 数据库中加载数据

Bash 是 ETL 的一个不错选择,因为它简单、灵活、自动化能力强,并且与其他 CLI 工具兼容。

为了进一步调查,可以考虑加入错误处理、通过 cron 调度管道,或学习更高级的 bash 概念。你也可以探索其他转换应用和方法,以提升你的管道技能。

尝试自己的 ETL 项目,将所学应用于更复杂的场景。幸运的话,这里的一些基本概念将成为你进行更复杂数据工程任务的良好起点。

Matthew Mayo (@mattmayo13) 拥有计算机科学硕士学位和数据挖掘研究生文凭。作为 KDnuggetsStatology 的主编,以及 Machine Learning Mastery 的特邀编辑,Matthew 旨在使复杂的数据科学概念变得易于理解。他的专业兴趣包括自然语言处理、语言模型、机器学习算法以及探索新兴的人工智能技术。他致力于在数据科学社区普及知识。Matthew 从 6 岁起就开始编程。

更多相关话题