资讯动态

dlt 自学课程指南:从零基础到高级数据工程师的两阶段实战路线

发布时间:2026/9/17 15:18:45 来源:尧图企业网站定制
dlt 自学课程指南从零基础到高级数据工程师的两阶段实战路线【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dltdltdata load tool是一个开源的 Python 数据加载库其官方为不同水平的开发者准备了两套自定进度的课程——dlt Fundamentals Course基础课程与dlt Advanced Course高级课程。本篇技术指南以仓库中的课程导览页为主体结合两门课程的完整教学 Notebook 与 dlt 核心源码系统梳理从“第一个 pipeline”到“生产级数据管道”的完整学习路径你将掌握 pipeline、resource、source、transformer 四大核心抽象学会分页、认证、配置与 secrets 管理理解写入策略与增量加载深入 Extract-Normalize-Load 三步底层原理并进阶到自定义源、自定义目标Reverse ETL、数据契约与性能优化。读完本文你既能按图索骥地学完课程也能将课程中的每项技术点对应到仓库源码中的具体实现。课程体系概览两阶段自定进度学习两门课程均采用“课时制 动手实验 作业认证”的结构每个 Lesson 都是一个可独立运行的 Notebook同时提供.ipynbGoogle Colab 兼容与.pyMarimo/Molab 兼容两种形态支持在浏览器中直接运行也支持下载到本地执行。课程定位课时数配套材料认证方式dlt Fundamentals Course零基础入门8 课docs/education/dlt-fundamentals-course/课后作业测验dlt Advanced Course有基础进阶9 课docs/education/dlt-advanced-course/高级认证作业仓库中所有教学 Notebook 均以 marimo 应用形式编写每个.py文件内是app.cell组成的交互式单元例如 lesson_1_quick_start.py 的开头以 PEP 723 内联脚本元数据声明了运行依赖# /// script # dependencies [ # dlt[duckdb], # numpy, # pandas, # sqlalchemy, # ] # ///说明根据 docs/education/README.md目录中的.py文件由.ipynb自动生成课程维护时只需编辑.ipynb再用make build-molabs重新生成.py。这保证了同一套课程在 Colab 与 Molab 两种环境下的体验一致。第一阶段dlt Fundamentals 基础课程8 课基础课程面向完全零基础的开发者覆盖从“什么是 dlt”到“管道元数据与状态”的全部核心概念学完后你将具备独立搭建常规数据管道的能力。Lesson 1快速上手Quick Start第一课的目标非常明确了解 dlt 是什么、跑通第一个管道、学会用三种方式探查已加载的数据。dlt 是什么课程给出了精确定位dlt 是一个开源 Python 库可从 REST API、SQL 数据库、云存储、Python 数据结构等广泛来源加载数据它提供轻量接口自动推断 schema 与数据类型、标准化数据、处理嵌套结构支持多种主流目标库destination与自定义目标支持 schema 演进、数据契约data contracts与增量加载可在任何能运行 Python 的环境中部署Airflow、Serverless 等。安装课程建议在虚拟环境中安装基础课程统一使用 DuckDB 作为教学目标库pip install dlt[duckdb]第一个管道使用三只宝可梦的字典列表作为玩具数据import dlt data [ {id: 1, name: bulbasaur, size: {weight: 6.9, height: 0.7}}, {id: 4, name: charmander, size: {weight: 8.5, height: 0.6}}, {id: 25, name: pikachu, size: {weight: 6, height: 0.4}}, ] pipeline dlt.pipeline( pipeline_namequick_start, destinationduckdb, dataset_namemydata, ) load_info pipeline.run(data, table_namepokemon) print(load_info)首次运行会自动扫描数据生成 schemadlt 将嵌套字典拍平为列、把嵌套列表拆分为子表sub-table最终在 DuckDB 中生成名为mydata的 schema内含pokemon表。这一“嵌套结构自动关系化”的行为对应仓库 dlt/common/normalizers/ 与 dlt/normalize/ 的实现。dlt.pipeline()的常用参数对应源码 dlt/pipeline/pipeline.py 中的Pipeline类pipeline_name管道名称用于追踪、监控以及恢复上次运行的 state 与数据结构缺省时使用当前 Python 文件名destination目标库名称也可在run()时传入dataset_name表集合可理解为关系库中的 schema缺省时等于管道名dev_mode设为True时每次创建管道都会在数据集名后追加时间戳生成全新数据集适合开发调试。run()方法的常用参数data首个参数可以是 dlt source、resource、生成器函数或任意 Iterator/Iterable如列表、map 结果write_disposition控制数据写入方式默认appendappend在表尾追加、replace用新数据整体替换旧数据、skip跳过加载、merge依据primary_key/merge_key提示去重合并table_name当表名无法从 resource 或生成器函数名推断时显式指定。三种数据探查方式这也是后续所有课程反复使用的技能原生 DuckDB 连接数据库文件以pipeline_name.duckdb形式落在工作目录duckdb.connect()后通过SET search_path指向数据集即可DESCRIBE查看表结构。除业务表外还能看到三张 dlt 专属表_dlt_loads、_dlt_pipeline_state、_dlt_versiondlt 的sql_client大多数目标甚至 filesystem都实现了SqlClientBase接口通过pipeline.sql_client()即可执行 SQLwith pipeline.sql_client() as client: with client.execute_query(SELECT * FROM pokemon) as cursor: data cursor.df()dlt datasetpipeline.dataset()返回关系型 dataset 对象可直接以表格属性方式取数并转成 DataFrame/PyArrow Tabledataset pipeline.dataset() dataset.pokemon.df()Lesson 2dlt 资源、源与 transformer第二课聚焦 dlt 最核心的三个抽象resource、source、transformer并演示如何把多种形态的数据字典列表、DataFrame、SQL 查询、REST API 响应装进同一个管道。Resource资源dlt.resource装饰的函数表示数据源内的一类逻辑数据分组通常同构、同源。相比直接run(list)把数据包装成 resource 是“更好的方式”因为后续的增量加载、数据契约等能力都挂在 resource 上。常用参数nameresource 名默认取被装饰函数名同时作为生成的表名table_name与 resource 名不同的表名write_disposition写入策略默认appendmax_table_nesting限制嵌套层级见下文。Source源dlt.source装饰的函数返回一个或多个 resource是“同一 API 的多个端点”这类场景的逻辑分组通常放在独立 Python 模块中并集中放置认证、分页与可选的数据转换代码。它的价值在于比分别运行各 resource 更高效、统一组织 schema 与代码、并开启并行化可能。示例from typing import Iterable from dlt.extract import DltResource dlt.source def all_data() - Iterable[DltResource]: return my_df, get_genome_data, get_pokemonTransformer转换器当需要在两个 resource 之间插入一步加工时例如先用 resource A 拿到宝可梦 ID 列表再逐个调用详情 API 补全信息使用dlt.transformer。它通过data_from参数接收上游 resource 的数据dlt.transformer(data_frommy_pokemons, table_namedetailed_info) def poke_details(items): for item in items: item_id item[id] response requests.get(fhttps://pokeapi.co/api/v2/pokemon/{item_id}) yield response.json()也可以直接用管道符my_pokemons | poke_details串联便于把 transformer 复用到多个 resource 上。相关实现见 dlt/extract/decorators.py 与 dlt/extract/pipe.py。控制嵌套层级默认 dlt 会对嵌套列表无限制地下钻生成子表。可通过max_table_nesting限制max_table_nesting0完全不生成嵌套表、不拍平字典嵌套数据以 JSON 表示max_table_nesting1只生成根表的子表子表内的嵌套数据以 JSON 表示。既可在dlt.source(max_table_nesting1)上统一设置也可逐 resource 设置dlt.resource(..., max_table_nesting1)。Lesson 3分页、认证与 dlt 配置第三课解决真实 API 场景中的三大问题一次只返回一页数据怎么办、API Key 放哪里、配置与密钥如何管理。分页GitHub 等 API 默认每页只返回约 30 条且通过响应头Link字段提供下一页地址。课程先演示用裸requests处理per_page/page参数与response.links的繁琐再引出 dlt 的RESTClientfrom dlt.sources.helpers.rest_client import RESTClient client RESTClient(base_urlhttps://api.github.com) for page in client.paginate(orgs/dlt-hub/events): print(page)分页类型可自动检测也可显式指定from dlt.sources.helpers.rest_client.paginators import HeaderLinkPaginator client RESTClient( base_urlhttps://api.github.com, paginatorHeaderLinkPaginator(), )认证课程反复强调“永远不要把 API Key 硬编码进代码”应使用环境变量、文件或 dlt 的secrets.toml。GitHub 场景使用 Bearer Tokenfrom dlt.sources.helpers.rest_client.auth import BearerTokenAuth client RESTClient( base_urlhttps://api.github.com, authBearerTokenAuth(tokenaccess_token), )dlt 配置与 secretsdlt 明确区分两类设置——configurations非敏感配置路径、主机、超时、API URL、性能参数与secrets敏感凭据密码、API Key、私钥。两者均可用三种方式设置环境变量代码内通过dlt.secrets/dlt.config配置文件secrets.toml/config.toml。注意secrets 可以放进dlt.secrets或secrets.toml但凭据不能放进dlt.config或config.toml因为 dlt 不会从 config 读取凭据。这一约束体现在仓库 dlt/common/configuration/ 的注入与解析机制中如 resolve.py。在 source 中启用自动凭据解析的惯用写法dlt.source def github_source(access_token: str dlt.secrets.value) - Iterable[DltResource]: ...Lesson 4使用 dlt 预构建的源与目标学会自建管道后第四课转向“开箱即用”能力dlt 提供大量经过验证verified的预构建源与目标。课程复习内容包括列出所有可用 verified sources初始化github_apiverified source探索内置rest_apisource探索内置sql_databasesource探索内置filesystemsource以及如何在不同目标之间切换——这正是 dlt 的价值点源与目标解耦同一份源代码只需改destination参数即可换库。仓库中对应实现见 dlt/sources/rest_api/、dlt/sources/sql_database/、dlt/sources/filesystem/ 以及 dlt/destinations/ 下覆盖 DuckDB、Postgres、BigQuery、Snowflake、ClickHouse、Databricks、Filesystem 等十余种目标的实现目录。Lesson 5写入策略Write Disposition与增量加载第五课是基础课程的重头戏彻底讲清数据“怎么写、写多少”的问题。三种写入策略在 resource 装饰器中声明也可在pipeline.run()时覆盖运行级优先级更高dlt.resource(write_dispositionappend) def my_resource(): ... yield data load_info pipeline.run(my_resource, write_dispositionreplace)Append默认向表尾追加新数据。反复运行会产生重复副本适用于“每天新增一批 JSON 日志文件”这类只增不改的场景Replace先删除旧数据、重建 schema 再整体载入新数据用于数据源整体刷新全量加载Merge基于primary_key和/或merge_key对已存在记录做去重/更新upsert。适用场景①记录频繁更新、希望反映最新状态而非制造重复②数据源偶发重复记录靠primary_key识别合并③处理缓慢变化维度SCD配合 scd2 策略保留历史。Merge 支持三种策略delete-insert默认、scd2、upsert。增量加载Incremental Loading只加载新增或变更的数据。课程以“只抓 2024 年后捕获的宝可梦”为例dlt.resource(namepokemon, write_dispositionappend) def incremental_pokemon( cursor_date: dlt.sources.incremental[str] dlt.sources.incremental( created_at, initial_value2024-01-01 ) ): yield created_datadlt.sources.incremental(created_at, initial_value2024-01-01)的含义是以created_at字段为游标、起始值为 2024-01-01。dlt 在每次运行后记住已处理的最大游标值后续运行自动跳过更早的记录——第二次运行同一管道时输出0 load package(s) were loaded。incremental实例暴露四个常用属性对应源码 dlt/common/incremental/ 与 dlt/extract/incremental/initial_value构造时传入的起始值恒等于2024-01-01start_value上次运行的updated_at最大值首次运行为initial_valuelast_value随每个产出 item/页实时更新的“最新值”首次产出前等于start_valueend_value回填backfill区间终点本课未使用。课程还演示了如何用这些属性写出更高效的请求——把游标值直接喂给 API 的since参数dlt.resource(nameissues, write_dispositionmerge, primary_keyid) def github_issues( cursor_date: dlt.sources.incremental[str] dlt.sources.incremental( updated_at, initial_value2024-12-01 ) ): params {since: cursor_date.last_value, status: open} for page in client.paginate(repos/dlt-hub/dlt/issues, paramsparams): yield page更新与去重组合拳把增量加载与 merge 结合即可实现“始终拿到最新且不重复的全量数据”。例子里 Pikachu 的updated_at更新为2024-12-23、体重变为 7.5 后再次运行Bulbasaur 与 Charmander 因updated_at未变被跳过_dlt_load_id保持不变只有 Pikachu 的记录被更新_dlt_load_id变化。apply_hints方式也可以不在装饰器里声明而是对已实例化的 resource 调用resource resource() resource.apply_hints(incrementaldlt.sources.incremental(updated_at))注意apply_hints添加增量提示后源仍会执行完整提取增量过滤发生在提取之后、加载之前。Lesson 6dlt 的工作原理Extract / Normalize / Load第六课揭开pipeline.run()的内部机制——整个加载过程分为Extract提取→ Normalize规范化→ Load加载三步且三步都可被单独调用pipeline.extract(data)、pipeline.normalize()、pipeline.load()后续课程的性能优化正是针对各阶段分别下手。仓库中对应源码目录为 dlt/extract/、dlt/normalize/、dlt/load/。Extract 阶段数据先进入内存缓冲默认5000 条写满后落盘为中间文件默认中间文件不轮转不设file_max_items时即使百万条也只有一个文件中间文件使用 dlt 自定义版本的JSONL格式。中间文件数量取决于 resource 数量与是否开启轮转。Normalize 阶段逐个处理提取文件同样经 5000 条内存缓冲后写出规范化中间文件此阶段会推断并计算与目标兼容的 schema——例如上例中检测到items表的一个id列int 类型并把嵌套列表拆分为子表items__nested。Load 阶段同一 source 的所有规范化文件合并为一个 load package 载入目标加载默认使用20 个线程并发每个线程加载一个文件加载前如必要会先执行 schema 迁移。进度监控dlt.pipeline(..., progresslog)可输出各阶段实时指标resource/文件计数、耗时、处理速率、内存与 CPU。dlt 内置 4 种进度监视器enlighten状态栏、tqdm最流行的 Notebook 进度条、alive_progress动态动画、log生产环境最适用可含内存/CPU 统计。中间文件格式Normalize 阶段的 loader 文件有四种格式均可通过loader_file_format在pipeline.run()、config.toml/secrets.toml的[normalize]段、环境变量如export NORMALIZE__LOADER_FILE_FORMATjsonl或dlt.resource(file_format...)中配置格式说明默认/支持目标要点JSONL每行一个 JSON 文档默认压缩BigQuery、Snowflake、Filesystemdatetime/date 存 ISO 字符串、decimal 存文本、binary 存 base64、HexBytes 存十六进制、complex 序列化为字符串Parquet列式存储需要pip install dlt[parquet]默认版本 2.4微秒级时间戳BigQuery、DuckDB、Snowflake、Filesystem、Athena、Databricks、Synapse按目标能力自动配置 decimal 精度/时间戳精度dlt 会给时间戳加 UTC 调整DuckDB 除外[normalize.data_writer]可配flavor、version、data_page_size、timestamp_timezone、coerce_timestamps等CSV逗号分隔、UNIX 换行、ISO 8601 日期、按需加引号pyarrow 或 Python stdlib 两种实现PostgreSQL、Filesystem、Snowflake可配delimiter、include_header、quotingquote_all/quote_neededinsert_values含 INSERT...VALUES 语句默认压缩DuckDB、PostgreSQL、Redshift默认Filesystem支持datetime/date 存 ISO 字符串、decimal 存文本Lesson 7检查与调整 Schema第七课的主题是“schema 自动生成但也可以手动掌控”。dlt 每次运行管道都会生成pipeline_name.schema.json通过export_schema_pathschemas/export可把 schema 以 YAML 形式导出。导出的 YAML 结构详见高级课程第七课的完整示例包含顶层元数据version、version_hash、engine_version、nametables每张表的columns列名、data_type、nullable、write_disposition、resource来源、parent子表父表等settingsdetections如iso_timestamp与default_hints_dlt_id、_dlt_root_id等系统列的 not_null/foreign_key/unique 提示normalizers命名约定如snake_case与 JSON 规范化模块previous_hashes历史版本哈希用于 schema 演进追踪。表 schema 的write_disposition提示决定了新数据如何写入列 schema 则含data_type、precision/scaledecimal、timestamp 等类型、is_variant以及基本提示nullable、primary_key、merge_key、foreign_key、root_key、unique与性能提示partition、cluster、sort各目标按自身能力解释例如 Redshift 用cluster定义分布、BigQuery 用其指定聚簇列、DuckDB/Postgres 建表时忽略。相关源码见 dlt/common/schema/schema.py 与 dlt/common/schema/typing.py。Lesson 8理解管道状态与元数据最后一课关注“关于管道自身的信息”。每次运行 dlt 都会产生元数据并持久化除业务数据外目标库中还存有_dlt_loads、_dlt_pipeline_state、_dlt_version三张系统表。课程探讨了 dlt state状态——可读可写的键值存储增量游标、resource 状态等都存放在其中以及load info与trace的能力边界。实现层面状态同步逻辑见 dlt/pipeline/state_sync.py运行追踪见 dlt/pipeline/trace.pypipeline.last_trace等对象。基础课程作业与认证完成 8 课后可通过课后作业测验检验所学通过后获得基础课程认证。第二阶段dlt Advanced 高级课程9 课高级课程面向有经验的用户目标是把技能提升到“生产级数据管道”自定义实现、进阶模式与性能优化。Lesson 1自定义源——REST API 与 RESTClient高级第一课回顾并深化两种构建 REST API 源的方式方式一低层装饰器 RESTClient命令式。课程以 GitHub API 为例把认证、分页全部封装进 sourcedlt.source def github_source(access_token: str dlt.secrets.value) - Iterable[DltResource]: client RESTClient( base_urlhttps://api.github.com, authBearerTokenAuth(tokenaccess_token), paginatorHeaderLinkPaginator(), ) dlt.resource def github_events() - Iterator[TDataItems]: for page in client.paginate(orgs/dlt-hub/events): yield page dlt.resource def github_stargazers() - Iterator[TDataItems]: for page in client.paginate(repos/dlt-hub/dlt/stargazers): yield page return (github_events, github_stargazers)方式二内置rest_apisource声明式。适合结构可预测的 API用字典配置即可同时声明客户端与多个资源甚至支持资源间参数解析resolve类型从issues资源的number字段取issue_numberfrom dlt.sources.rest_api import RESTAPIConfig, rest_api_source config: RESTAPIConfig { client: { base_url: https://api.github.com, auth: {token: dlt.secrets[access_token]}, paginator: header_link, }, resources: [ {name: issues, endpoint: {path: repos/dlt-hub/dlt/issues, params: {state: open}}}, { name: issue_comments, endpoint: { path: repos/dlt-hub/dlt/issues/{issue_number}/comments, params: {issue_number: {type: resolve, resource: issues, field: number}}, }, }, {name: contributors, endpoint: {path: repos/dlt-hub/dlt/contributors}}, ], } git_source rest_api_source(config)声明式配置的实现见 dlt/sources/rest_api/config_setup.py 与 dlt/sources/rest_api/ 目录。RESTClient 详解REST API source 的底层引擎见 dlt/sources/helpers/rest_client/初始化参数base_url根 URL、headers默认请求头如User-Agent、auth认证配置、paginator分页器实例、data_selectorJSONPath 选择器分页时用于从响应 JSON 抽取数据、session自定义 Requests session认证策略BearerTokenAuth、APIKeyAuth、HttpBasicAuth、OAuth2ClientCredentials特殊场景可继承AuthConfigBase或OAuth2ClientCredentials实现自定义认证分页器支持按Link响应头HeaderLinkPaginator、页码、游标、偏移等多种策略仓库 paginators.py 中均有实现。课程用 NewsAPI 做完整实战注册免费账号拿 API Key按查询参数apiKeyYOUR_API_KEY传递对/everything、/top-headlines、/sources三个端点分别建 resource用APIKeyAuth认证并处理articles/sources数组的 JSONPath 提取。Lesson 2自定义源——SQL 数据库本课使用内置sql_database连接任意 SQL 兼容数据库反射reflect表结构、编写查询适配器、选择性摄取数据。仓库对应实现见 dlt/sources/sql_database/含 helpers.py 的 schema 反射与 arrow_helpers.py 的 Arrow 转换支持测试见 tests/sources/sql_database/。Lesson 3自定义源——文件系统与云存储本课构建读取本地或远程文件S3、GCS、Azure的源。仓库内置filesystemsource 见 dlt/sources/filesystem/支持按文件类型CSV、JSONL、Parquet 等选择读取器配置位于 settings.py另有专门的增量glob游标支持。Lesson 4自定义目标——Reverse ETL本课讲解反向 ETL把 dlt 规范化后的数据发回Notion、Slack、Airtable 等 API或 Kafka/SQS 等消息队列。核心是dlt.destination装饰器——为每个规范化后的批次调用你定义的函数dlt.destination(batch_size5) def print_sink(items: TDataItems, table: TTableSchema) - None: print(f\nTable: {table[name]}) for item in items: print(item) pipeline dlt.pipeline(print_example, destinationprint_sink) pipeline.run(simple_data())关键机制批量batching默认batch_size为 10batch_size1时逐行调用适合不支持批量插入的 APIitems参数该批次的规范化数据行table参数告知批次所属表幂等与重试面向 API 目标时需考虑重试与幂等模式。课程完整实战为“Rfam 数据库 → Notion”在 Notion 建数据库与 Integration、配置secrets.toml[destination.notion]段的notion_auth与notion_page_id再实现自定义目标把数据写入 Notion 页面。dlt.destination的实现与批处理逻辑见 dlt/destinations/impl/destination/ 与 dlt/destinations/init.pydestination装饰器。Lesson 5加载前与加载后的数据转换本课明确“何时用哪种转换手段”加载前行级加工add_map逐行映射/富化、add_filter逐行过滤、dlt.transformer跨 resource 加工。这些方法定义在 dlt/extract/resource.py 与 dlt/extract/items_transform.py加载后表级加工基于目标库直接执行 SQL或使用 dlt 的 Ibis 支持见 dlt/helpers/ibis.py对已加载数据进行后续变换。Lesson 6写入策略进阶与技巧在基础课三种策略之上本课深入replace与merge的组合运用与 schema hintsprimary_key、merge_key和增量加载协同处理分区替换、按增量窗口合并等复杂场景。merge的三种策略delete-insert、scd2、upsert在目标实现层由各 destination 的 job client 支持相关测试见 tests/load/ 与 tests/dataset/test_relation_incremental.py。Lesson 7数据契约Data Contracts数据契约用于控制 schema 随时间如何演化可在表级、列级、数据类型级三层实施表级evolve允许新建表或freeze禁止任何表变更。示例dlt.resource(schema_contract{tables: evolve})可加载到新表new_users而{tables: freeze}下试图创建newest_users会失败列级evolve允许新增/修改列、freeze禁止列变更、discard_row跳过含新列的行保留符合 schema 的行、discard_value不丢整行只丢弃新列的值数据类型级对列数据类型的变更设置契约行为。此外本课完整复习了 schema 文件结构见上文基础课程第七课与 table/column schema 的全部属性、基本提示和性能提示。数据契约的实际校验流程见 dlt/common/schema/schema.py 的 schema 演进逻辑与 dlt/normalize/ 的验证环节。Lesson 8日志与追踪本课学习用日志logs、追踪trace与元数据监控管道的每一步——从提取到加载定位问题并分析性能。dlt 的追踪机制在 dlt/pipeline/trace.py 中定义pipeline.last_trace、LoadInfo、NormalizeInfo、ExtractInfo等JSON 结构化日志支持见 dlt/common/runtime/json_logging.py遥测与运行时初始化见 dlt/common/runtime/。Lesson 9性能优化最后一课聚焦大规模数据调整缓冲buffer大小、并行化 resource 提取、优化内存占用、缩短管道运行时间。课程对应的优化面包括提取阶段内存缓冲默认 5000 条、中间文件大小file_max_items与轮转规范化阶段loader_file_format的选择Parquet 相比 JSONL/CSV 通常更高效加载阶段默认 20 线程并发加载可按目标能力调整提取并行resource 级并行化能力见 dlt/extract/concurrency.py 与 dlt/common/runners/pool_runner.py。高级课程作业与认证完成 9 课后可挑战高级认证作业以检验综合能力。学习路径建议与仓库延伸阅读推荐学习路径按顺序先完成基础课程 8 课每课动手运行 Notebook 并完成课内 Exercise如“统计github_repos表列数”“为 pulls/comments 端点实现增量管道”等再进入高级课程。两门课程相互衔接高级第一课直接以基础课程第三课搭建的 GitHub source 为起点高级第七课引用基础第七课的 schema 导出结论形成完整闭环。想在本地运行课程课程.py文件是 marimo 应用安装marimo后直接运行即可获得交互式 Notebook 体验也可将.py转成.ipynb在 Jupyter/Colab 中使用。仓库内延伸阅读核心源码dlt/pipeline/pipeline.pyPipeline 与run实现、dlt/extract/resource.py 与 dlt/extract/source.pyresource/source、dlt/extract/decorators.pydlt.resource/dlt.source/dlt.transformer/dlt.destination装饰器增量与状态dlt/common/incremental/、dlt/extract/incremental/、dlt/pipeline/state_sync.pyHTTP 辅助层dlt/sources/helpers/rest_client/、dlt/sources/helpers/requests/预构建源与目标dlt/sources/、dlt/destinations/课程配套测试tests/sources/、tests/extract/test_incremental.py、tests/dataset/test_relation_incremental.py其他教程入口加载 API 数据、REST API 教程、SQL 数据库教程、文件系统教程。无论是刚接触数据工程的初学者还是想把手写 ETL 脚本升级为生产管道的工程师这套“基础 高级”课程体系都提供了可自定进度、可验证成果的完整进阶路径——而本文梳理的每一课技术点都能在仓库源码与测试中找到对应实现方便你在学习的同时深入底层。【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价