新闻详情

新闻详情

首页 / 资讯中心 / 详情

dlt 列名改写实战:用 add_map 替换列名中的特殊字符并控制入库列名

发布时间:2026/9/17 22:32:26来源:尧图网络
dlt 列名改写实战:用 add_map 替换列名中的特殊字符并控制入库列名
dlt 列名改写实战用 add_map 替换列名中的特殊字符并控制入库列名【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt本篇指南基于 dlt 官方文档 renaming_columns.md 展开讲解如何在数据加载到目标数据库之前通过resource.add_map()对数据项的字典键即列名做确定性改写例如把德语变元音umlaut替换为标准 ASCII 字符同时结合仓库源码剖析add_map的底层调用链MapItem转换步、管道插入位置、函数签名探测帮助读者理解“改写发生在 extract 阶段、命名规整发生在 normalize 阶段”这一关键分工。为什么需要在加载前改列名dlt 的数据源如流式 JSON中的键名可以是任意 Unicode 字符、任意长度和命名风格而目的地数据库对表名、列名有严格规则。默认snake_case命名约定会在 normalize 阶段把源标识符转成小写蛇形标识符其规则可以从 snake_case.py 中确认保留 ASCII 字母、数字和下划线其余所有字符替换为下划线非 ASCII 字符包括ä ö ü ß等变元音都会被替换掉将、*替换为x-替换为_替换为a|替换为l数字开头的名称前置_连续下划线合并为单个_末尾的下划线替换为x。也就是说如果直接把含Größe这样的列名交给 dlt 默认命名规整特殊字符会被“机械地”替换为下划线得到你无法控制、可读性差的列名如gr_e。正确做法是在 extract 阶段先自己把键名改写成期望的形式再交给 dlt 正常规整。这与 naming-convention.md 中“源标识符 vs 目的地标识符”的说明一致——dlt 在数据提取期间保留源未规整标识符在 normalize 阶段才翻译为目标命名空间你在 transformer 或 map/filter 函数里看到的是原始数据因此可以直接按键的原始拼写访问。完整示例把德语变元音替换为标准字符下面是原文档给出的完整可运行示例。它创建一个键名包含变元音的 dummy source再写一个递归改写字典键的函数并通过add_map挂到资源上。import dlt # create a dummy source with umlauts (special characters) in key names (um) dlt.source def dummy_source(prefix: str None): dlt.resource def dummy_data(): for _ in range(100): yield {fObjekt_{_}: {Größe: _, Äquivalenzprüfung: True}} return dummy_data(), def replace_umlauts_in_dict_keys(d): Replaces umlauts in dictionary keys with standard characters. umlaut_map {ä: ae, ö: oe, ü: ue, ß: ss, Ä: Ae, Ö: Oe, Ü: Ue} result {} for k, v in d.items(): new_key .join(umlaut_map.get(c, c) for c in k) if isinstance(v, dict): result[new_key] replace_umlauts_in_dict_keys(v) else: result[new_key] v return result # We can add the map function to the resource # 1. Create an instance of the source so you can edit it. source_instance dummy_source() # 2. Modify this source instances resource source_instance.dummy_data().add_map(replace_umlauts_in_dict_keys) # 3. Inspect your result for row in source_instance: print(row) # {Objekt_0: {Groesse: 0, Aequivalenzpruefung: True}} # ...三步操作的含义实例化 sourcedummy_source()返回一个 source 实例此时资源是可以被修改的修改资源source_instance.dummy_data()拿到资源句柄调用add_map(replace_umlauts_in_dict_keys)把改写函数插入该资源的处理管道检查结果迭代 source 即触发资源生成器与后续 map 步Größe变成Groesse、Äquivalenzprüfung变成Aequivalenzpruefung。改写函数本身是一个纯函数接收单条数据项字典按umlaut_map逐字符替换键名并对值为字典的嵌套层递归处理。注意它只改键、不改值这也是 map 函数应有的行为——返回的仍是可被 dlt 识别的数据项。源码级解析add_map 如何工作add_map把函数包装成 MapItem 挂进管道add_map定义在 resource.pydef add_map( self, item_map: ItemTransformFunc[TDataItem], insert_at: int None ) - Self: Adds mapping function defined in item_map to the resource pipe at position inserted_at item_map receives single data items, dlt will enumerate any lists of data items automatically ... if insert_at is None: self._pipe.append_step(MapItem(item_map)) else: self._pipe.insert_step(MapItem(item_map), insert_at) return self要点你传入的函数会被包装成一个MapItem步挂到资源的Pipe上方法返回self因此可以链式调用也可以像同目录文档 pseudonymizing_columns.md 中那样直接写成dummy_source().dummy_data.add_map(pseudonymize_name)一步完成insert_at参数默认为None控制 map 步插入管道的位置为None时追加到最后否则插入指定下标处。文档示例使用默认行为追加到末尾即可满足“最后统一改名”的需求文档字符串明确说明item_map接收单条数据项dlt 会自动展开enumerate批量列表数据项。MapItem自动处理列表与单条数据项真正执行映射的是 items_transform.py 中的MapItemclass MapItem(ItemTransform[TDataItem, Dict[str, Any]]): def __call__(self, item: TDataItems, meta: Any None) - Optional[TDataItems]: if isinstance(item, list): # preserve type of empty lists if len(item) 0: return item if self._f_meta: return [self._f_meta(i, meta) for i in item] else: return [self._f(i) for i in item] else: ... return self._f(item)可以看到 dlt 保证你的函数永远不会收到一个列表——批量数据会被逐项应用函数后再组装回列表空列表则原样保留。另外一个实用细节在基类ItemTransform.__init__items_transform.py中dlt 会用inspect.signature探测你的函数签名——一个参数的函数按“无 meta”方式调用两个参数的函数则会被额外传入 meta 参数。因此replace_umlauts_in_dict_keys(d)只需一个形参即可若你需要 dlt 的元信息例如表名提示可以声明两个参数。相关测试佐证add_map的行为在仓库测试中有覆盖例如 test_transform.py 中的res.add_map(pivot($.a))系列用例验证了 map 步对数据项的变换与错误处理传入不符合 pivot 要求的数据会抛出ResourceExtractionError说明挂在管道上的自定义函数在 extract 阶段立即生效并受 dlt 的错误体系保护。改写与命名规整的先后关系改写函数在extract阶段执行因此你操作的是“源标识符”dlt 随后在normalize阶段才应用命名约定。两者叠加的效果是源键名add_map 改写后snake_case 规整后入库列名GrößeGroessegroesseÄquivalenzprüfungAequivalenzpruefungaequivalenzpruefungObjekt_0Objekt_0未匹配到替换项原样objekt_0也就是说add_map让你精确控制特殊字符如何被替换ß → ss而不是变成_最终列名再由你选定的命名约定做小写化等统一处理。若目标库本身能安全处理变元音、或你只想切换整体命名风格如sql_ci_v1则不需要本文的改写手法而应参考 naming-convention.md 通过config.toml或环境变量SCHEMA__NAMING配置命名约定本文的add_map改写适合“键名本身需要语义化重命名”的场景。小结与延伸用source_instance.resource().add_map(fn)在 extract 阶段对数据项做确定性改名fn接收单条数据项、返回改写后的数据项dlt 自动展开批量数据add_map支持insert_at控制管道插入位置返回self可链式调用改名针对源标识符生效入库前仍会经过命名约定的统一规整因此最终列名 你的改写结果再经 snake_case或所选约定处理同一机制同样适用于 pseudonymizing_columns.md 中的 PII 伪匿名化等“逐项变换”场景可视为同一条MapItem管道的不同应用。【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Notepad--:批量查找替换、编码转换、文件对比,3 件事搞定日常文本编辑 2026/9/17 23:05:35

Notepad--:批量查找替换、编码转换、文件对比,3 件事搞定日常文本编辑

Notepad--:批量查找替换、编码转换、文件对比,3 件事搞定日常文本编辑 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trend…

阅读更多 →
人工智能、技术创新与新质生产力:可计算指标与Python分析管线 2026/9/17 23:05:35

人工智能、技术创新与新质生产力:可计算指标与Python分析管线

简介:围绕人工智能、技术创新与新质生产力三者关系展开的系统性研究文档,适合科技政策研究者、产业分析人员以及关注新质生产力议题的高校师生阅读。文档以1个docx文件呈现,压缩包约127KB,涵盖两条互为补充的论述主线:…

阅读更多 →
OpenMed LangChain与LlamaIndex集成:带隐私过滤的RAG管道搭建指南 2026/9/17 23:05:35

OpenMed LangChain与LlamaIndex集成:带隐私过滤的RAG管道搭建指南

OpenMed LangChain与LlamaIndex集成:带隐私过滤的RAG管道搭建指南 【免费下载链接】openmed Local-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no c…

阅读更多 →
DeepChat CUA macOS 分发完整性:Gatekeeper 首装失败根因与 fail-closed 签名、Mach-O 契约修复 2026/9/17 23:05:35

DeepChat CUA macOS 分发完整性:Gatekeeper 首装失败根因与 fail-closed 签名、Mach-O 契约修复

DeepChat CUA macOS 分发完整性:Gatekeeper 首装失败根因与 fail-closed 签名、Mach-O 契约修复 【免费下载链接】deepchat 🐬DeepChat - A smart assistant that connects powerful AI to your personal world 项目地址: https://gitcode.com/GitHub_Trending/de…

阅读更多 →
NVIDIA cuOpt落地AGV调度:31台车实战经验与避坑指南 2026/9/17 23:05:35

NVIDIA cuOpt落地AGV调度:31台车实战经验与避坑指南

做AGV调度的人,十个里有九个都在跟“任务排给谁、先跑哪条线、在哪个路口等谁”这三个问题较劲。我们团队在某个制造业工厂里管着30多台AGV/AMR,高峰期每天上千个搬运任务,之前靠规则加人工干预,天天被打爆。后来我们把NVIDIA cuO…

阅读更多 →
车载激光雷达测距精度、点云质量与互干扰台架试验方法 2026/9/17 23:02:35

车载激光雷达测距精度、点云质量与互干扰台架试验方法

简介:《2024 车载激光雷达性能要求及试验方法》标准征求意见稿的 PDF 文档,面向自动驾驶感知算法、车载传感器与整车测试工程师,以及需要对照标准开展验证的研发与质量团队。它整理了车载激光雷达从点云测距能力、距离精度与准度、角度精度与…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞