使用ColdFusion和Miller转换TSV数据(命令行大显身手!)
内容提要
我们从多个供应商获得数据许可,并发现即使是相同规范的数据也不能一视同仁。例如,我们与两个不同的房地产交易标准(RETS)提供商合作,它们的实现略有不同。我们与西海岸的供应商合作了近20年,一直保持一致,没有遇到任何与数据相关的问题。然而,与位于东南部的新的RETS提供商合作时,偶尔会出现一个单一的邮政编码值包含ZIP+4而不是通用的5位数ZIP的问题。这在我们的长期供应商那里从未出现过问题,而这个变化导致了将数据批量导入到Microsoft SQL Server时出错。我正在探索是否可以通过命令行转换数据,并发现了Miller(BSD2;Linux/Mac/Windows)。Miller类似于awk、sed、cut、join和sort,用于处理以名称索引的数据,如CSV、TSV和表格化JSON。使用Miller,您可以使用命名字段而无需计算位置索引,使用熟悉的格式,如CSV、TSV、JSON、JSON Lines和位置索引。然后,您可以在运行时添加新字段,这些字段是现有字段的函数,删除字段,排序,统计聚合,漂亮打印等。Miller的语法并不太复杂,有一个专门用于标志、动词和函数的ReadTheDocs网站,并提供了一些常见问题和示例。简而言之,我需要:设置-I标志以原地处理文件,设置输入格式:--itsv,设置输出格式:--otsv,显式设置输出行分隔符:--ors'\r\n'(如果不设置,它会将Windows CR/LF转换为Linux LF),使用put命令转换现有列的数据:put'$PostalCode = substr($PostalCode,0
延伸解读
数据供应商差异带来的挑战
文章指出,即使遵循相同的RETS规范,不同供应商的实现也可能存在差异。长期合作的西海岸供应商数据一直稳定,而新的东南部供应商偶尔会在邮政编码字段中包含ZIP+4格式,导致批量导入SQL Server时出错。这提醒我们,在多数据源集成时,不能假设规范相同数据就完全一致,需要针对每个供应商的数据特点进行验证和清洗。
Miller工具在数据转换中的优势
Miller是一个命令行工具,类似于awk、sed、cut等,但专为处理CSV、TSV、JSON等名称索引数据设计。它允许使用命名字段而非位置索引,支持在运行时添加、删除、排序和聚合字段。对于需要快速转换TSV数据的场景,Miller提供了简洁的语法和丰富的文档,能够高效完成数据清洗任务,而无需编写复杂的脚本。
命令行转换的具体实现与性能
作者使用Miller的-I标志进行原地处理,指定输入输出格式为TSV,并显式设置行分隔符以保持Windows换行符。通过put命令截取邮政编码前5位。由于Miller要求在与文件相同的目录中执行,作者借助临时BAT文件切换目录并自删除。整个处理仅需约400毫秒,比用ColdFusion读取整个文件逐行分析再保存更便携且性能更优。
Q&A
Miller是什么工具,它的主要功能是什么?
Miller是一个用于处理以名称索引的数据的工具,类似于awk、sed、cut、join和sort,支持CSV、TSV和JSON等格式。
在使用Miller时,如何设置输入和输出格式?
使用Miller时,可以通过设置--itsv指定输入格式,设置--otsv指定输出格式。
为什么与东南部的RETS供应商合作时会出现邮政编码问题?
与东南部的RETS供应商合作时,偶尔会出现邮政编码值包含ZIP+4的问题,这在长期供应商那里从未出现过。
使用Miller进行数据处理的速度如何?
使用Miller进行数据处理的速度非常快,约为400毫秒。
如何在命令行中使用Miller进行原地处理?
在命令行中使用Miller进行原地处理时,需要设置-I标志,并确保在与文件相同的目录中执行。
Miller的语法复杂吗?
Miller的语法并不复杂,并且有专门的ReadTheDocs网站提供文档和示例。