我收到了多个.txt文档(每个文档都有自己的一组列),其中包含用某种类型的分隔符分隔的行(这在文件中是不同的)。每个.txt文件有不同数量的列/名称,它们的大小很大,有些被分割成100 MB块。数据可能包含格式错误的行。
我的工作是将它们导入到符合这些要求的适当DBMS中:
我已经尝试过使用关系DBMS (MySQL,PostgreSQL),但它们不支持跳过格式错误的行(这是一个很大的问题)。我尝试过mongoDB,但是有些数据包含双引号,我不确定导入速度是否足够好。
我最近甚至尝试使用Cassandra,但它在模式匹配和多表查询方面非常有限。
这个任务并不容易,我花了很多时间阅读,并试图找到自己的解决方案。如果有人能帮我解决这个问题,我会非常感激的。
数据已被提取并给出,无法修改该进程。转换是不可能的,因为数据大小超出了手动编辑的限制。装货是我苦苦挣扎的一步。我想找一个能做这种事情的DBMS。
我对NoSQL数据库管理系统考虑了很多,但它们并不能满足所有的需求。我认为像PostgreSQL这样的SQL会做到这一点,但是我很难插入数据,因为它不支持跳过格式错误的行。
现在我来考虑一下,它比非结构化的数据更有结构化。因此,它非常适合SQL,但唯一的问题是数据包含一些格式错误的行,而我需要相当好的导入速度。
两行格式文件(用户名:电子邮件):
发布于 2018-12-23 21:34:47
当我以前遇到类似的问题时,我最后
主要问题是识别格式错误的数据并对其进行处理,并确保在可能的情况下对所有文件使用相同的模式。
发布于 2018-12-24 00:08:29
您可以使用powershell的文本(例如获取内容、拆分、连接)和csv (Import、转化法-csv、导出-csv和数据表函数)来清除其免费powershell支持的数据。
sql server中的大容量插入对于加载文本文件非常有用,而且非常快。
通常,您需要将csv加载到包含文本varchar(max)列的load表中,然后验证并将加载表加载或拒绝到暂存表中,每个阶段都执行清理操作(固定日期、转换、格式化),如果您正在使用nix,那么awk和grep将运行良好,awk是一个很好的工具。
ETL本身就是一门学科,将数据加载到dbs中存在许多问题。
您还可以将每一行加载到单个大型文本列中,例如varchar(max)作为blob,并使用sql函数将数据拆分到一个列分隔的表中。
https://dba.stackexchange.com/questions/225609
复制相似问题