”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > ETL 管道的最佳 Python 库:初学者开发人员指南

ETL 管道的最佳 Python 库:初学者开发人员指南

发布于2024-11-03
浏览:882

Best Python Libraries for ETL Pipelines: A Beginners Developer

构建 ETL 管道感觉很像成为被选中的人 – 您将数据从 A 点移动到 B 点,将其转换为有用的东西,并且确保一切顺利进行。 Python 通过大量库为您提供支持,让您的工作变得更轻松 – 有点像有原力在您身边?️。在本指南中,我们将介绍一些最好的 Python 库,以帮助您赢得 ETL 战争。 ?

1. 提取:从源中提取数据

在数据提取方面,您需要合适的工具从不同来源(数据库、API、文件)提取数据。这就是乐趣的开始(提示欧比旺的声音)。以下是获取所需数据的首选库。

SQLAlchemy

从数据库中提取数据时,SQLAlchemy 是您值得信赖的光剑。它功能强大,可以毫不费力地处理多种数据库类型。

  • 优点
    • 支持多种数据库(PostgreSQL、MySQL、SQLite等)
    • 您可以轻松地在数据库之间切换
  • 例子
  from sqlalchemy import create_engine

  engine = create_engine('postgresql://user:password@localhost/dbname')
  connection = engine.connect()
  result = connection.execute("SELECT * FROM jedi_order")

熊猫

在处理 CSV、Excel、JSON 甚至 SQL 数据时,Pandas 是您的瑞士军刀?️。它快速且易于使用,非常适合从文件中提取数据。

  • 优点
    • 可以用一行代码加载各种文件格式的数据
    • 内存数据的出色性能
  • 例子
  import pandas as pd

  data = pd.read_csv('rebels_data.csv')

请求

对于处理 REST API,请求就像 R2-D2 – 它可靠、简单,并且无论如何都会为您提供所需的数据。

  • 优点
    • 使 HTTP 请求变得超级简单
    • 处理 API 身份验证、标头等
  • 例子
  import requests

  response = requests.get('https://api.example.com/data')
  data = response.json()

2. 转换:塑造数据

现在您已经提取了数据,是时候它转换成可用的东西。这个阶段就像是把原始秘银锻造成铠甲?️。让我们深入研究一些很棒的转换库。

熊猫

Pandas 在转换数据方面再次派上用场。无论是清洁、过滤还是聚合,它都会像隐形斗篷一样为您遮盖。

  • 优点
    • 大量用于数据操作的内置函数
    • 内存中转换的理想选择
  • 例子
  # Clean data by removing NaN values and filtering rows
  data_cleaned = data.dropna().query('age > 18')

达斯克

拥有大量数据集,甚至可以让死星看起来很小? Dask 允许您使用并行处理来处理大于内存的数据,而无需重写 Pandas 代码。 ?

  • 优点
    • 扩展以处理大型数据集
    • 分布式计算,但具有熟悉的类似 Pandas 的语法
  • 例子
  import dask.dataframe as dd

  df = dd.read_csv('huge_data.csv')
  result = df[df.age > 18].compute()

PySpark

对于大数据的绝地级转换,PySpark 就是最好的选择。它是分布式数据处理领域的卢克·天行者。 ?‍♂️

  • 优点
    • 大型数据集上闪电般的数据转换
    • 非常适合在大数据生态系统(Hadoop、Spark)中工作
  • 例子
  from pyspark.sql import SparkSession

  spark = SparkSession.builder.appName("ETL").getOrCreate()
  df = spark.read.csv('galaxy_data.csv', header=True, inferSchema=True)
  df_filtered = df.filter(df.age > 18)

3. 加载:将数据放在它所属的位置

最后,您已将数据转换为可用的内容。现在是时候将其加载到最终目的地了。无论是数据仓库、S3 存储桶还是数据库,都可以将其视为将一枚戒指交付给魔多?️ – 有了正确的工具,整个旅程就会变得更加轻松。

SQLAlchemy

SQLAlchemy 使将数据加载回数据库变得简单。有了它,您可以轻松地将数据插入关系数据库。

  • 优点
    • 适用于多个数据库
    • 支持批量插入
  • 例子
  data.to_sql('jedi_council', engine, index=False, if_exists='replace')

惊魂2

对于 PostgreSQL 数据库,psycopg2 是您最好的伴侣。它快速、高效,并且使复杂的 SQL 任务变得轻而易举。

  • 优点
    • 对 PostgreSQL 的本机支持
    • 支持交易
  • 例子
  import psycopg2

  conn = psycopg2.connect(dbname="star_wars", user="user", password="force123")
  cur = conn.cursor()
  cur.execute("INSERT INTO jedis (name, age) VALUES (%s, %s)", ('Luke', 30))
  conn.commit()

Boto3

如果您使用 S3 等 AWS 服务,Boto3 是将数据上传到云的首选工具。你会感觉就像甘道夫挥舞着它。 ☁️

  • 优点
    • 与 AWS 服务完全集成
    • 轻松从 S3 上传/下载
  • 例子
  import boto3

  s3 = boto3.client('s3')
  s3.upload_file('local_file.csv', 'mybucket', 'file.csv')

Google 云存储 (GCS) 客户端

对于使用 Google Cloud 的开发人员,GCS 客户端将帮助您轻松将数据加载到 Google Cloud Storage,就像 Boto3 与 AWS 一样。

  • 优点
    • 全面支持 Google Cloud
  • 例子
  from google.cloud import storage

  client = storage.Client()
  bucket = client.get_bucket('my_bucket')
  blob = bucket.blob('data.csv')
  blob.upload_from_filename('local_file.csv')

4. 编排:管理您的 ETL 管道

现在,如果没有一些编排,任何 ETL 管道都是不完整的。将此视为引导所有移动部件的力量⚙️ – 安排任务、监控并在出现问题时重试。

阿帕奇气流

如果您正在处理任何复杂的事情,Apache Airflow 就是您用于任务编排的 Yoda。有了它,您可以创建、安排和监控工作流程,确保所有 ETL 作业正常运行。

  • 优点
    • 强大的调度和任务管理
    • 用于跟踪工作流程的可视化界面
  • 例子
  from airflow import DAG
  from airflow.operators.python_operator import PythonOperator

  def extract_data():
      # Extraction logic
      pass

  dag = DAG('my_etl_pipeline', start_date=datetime(2023, 1, 1))
  task = PythonOperator(task_id='extract_task', python_callable=extract_data, dag=dag)

总结

构建 ETL 管道不必感觉像是在与 Darth Vader ⚔️ 作战。使用正确的工具,您可以自动化整个流程、高效转换数据并将其加载到最终目的地。无论您是处理小型数据集还是在大型分布式系统上工作,这些 Python 库都将帮助您构建与 One Ring 一样强大的 ETL 管道(但邪恶程度要低得多)。

愿 ETL 力量与你同在。

版本声明 本文转载于:https://dev.to/nicobistolfi/best-python-libraries-for-etl-pipelines-a-beginners-developers-guide-1ia1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-05-25
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    对于每个循环vs. iterator:collection traversal for-east loop 在Java 5中介绍的,for-east loop(也称为loop的增强型)是一个简洁的和易于阅读的概述,并且易于读取概述的概述。它在内部使用迭代器: list a = new arr...
    编程 发布于2025-05-25
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-25
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-05-25
  • MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    在两个条件下插入或更新或更新 solution:的答案在于mysql的插入中...在重复键更新语法上。如果不存在匹配行或更新现有行,则此功能强大的功能可以通过插入新行来进行有效的数据操作。如果违反了唯一的密钥约束。实现所需的行为,该表必须具有唯一的键定义(在这种情况下为'名称'...
    编程 发布于2025-05-25
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-05-25
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-05-25
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-05-25
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c 的函数时,接受成员函数指针的函数时,必须同时提供对象的指针,并提供指针和指针到函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此)和成员函数指针。这可以通过修改Menubutton :: SetButton()(如下所示:[&& && && &&华)...
    编程 发布于2025-05-25
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-05-25
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-05-25
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-05-25
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-05-25
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-05-25
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-05-25

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3