Import

結構化 .TXT 數據到適當的 DBMS

  • April 2, 2019

我看到了多個.txt文件(每個文件都有自己的一組列),其中包含由某種類型的分隔符分隔的行(這在文件中是不同的)。每個.txt文件都有不同數量的列/名稱,它們的大小很大,有些被分成 100 MB 的塊。數據可能包含格式錯誤的行。

我的工作是將它們導入到滿足這些要求的適當 DBMS 中:

  • 導入速度應該不會太差。700m 行可以接受幾個小時
  • 導入應支持忽略格式錯誤的行
  • 查詢數據應支持模式匹配,如 SQL 中的 %m%
  • 讀操作比寫操作更重要。要求一旦導入所有內容,讀取時間應在毫秒內
  • 會有很多桌子。要求方便查詢所有表

我已經嘗試使用關係 DBMS(MySQL、PostgreSQL),但它們不支持跳過格式錯誤的行(這是一個大問題)。我試過 mongoDB,但有些數據包含雙引號,我不確定導入速度是否足夠好。

我最近什至嘗試使用 Cassandra,但它在模式匹配和多表查詢方面非常有限。

這項任務並不容易,我花了很多時間閱讀並嘗試自己找到解決方案。如果有人可以幫助我解決這個問題,我將不勝感激。

數據已經提取並給出,無法修改該過程。由於數據大小超出了手動編輯的限制,因此無法進行轉換。載入是我正在努力的步驟。我正在嘗試找到一個可以做這種事情的 DBMS。

我對 NoSQL DBMS 進行了很多思考,但它們並不能滿足所有要求。我認為諸如 PostgreSQL 之類的 SQL 會做到這一點,但我無法插入數據,因為它不支持跳過格式錯誤的行。

現在我想起來了,它是結構化數據而不是非結構化數據。所以它非常適合 SQL DBMS,但唯一的問題是數據包含一些格式錯誤的行,我需要相當好的導入速度。

格式文件中的兩行(使用者名:電子郵件):

  • 有效行:admin:email@hotmail.com
  • 格式錯誤的行(包含額外的列):admin:my:email@hotmail.com

當以前遇到類似的問題時,我最終

  1. 編寫一個預導入解析器 (c),它遍歷提取的數據並創建一個有效條目文件和一個格式錯誤的條目文件
  2. 使用導入嚮導將有效條目導入 Sql 伺服器,該嚮導用於為每種導入文件類型創建計劃作業
  3. 導入後,有幾個作業會進一步處理數據並複製到最終的最終使用者表中。

主要問題是辨識格式錯誤的數據並對其進行處理,並確保您盡可能對所有文件使用相同的模式。

您可以使用powershell 的文本(例如get-content、split、join)和csv(Import-csv、convertto-csv、export-csv 和數據表函式)來清理數據,它的免費powershell 支持正則表達式。

來自 sql server 的批量插入對於載入文本文件非常有用,而且速度非常快

通常,您會將 csv 載入到帶有文本 varchar(max) 列的載入表中,然後驗證並將載入表中的載入或拒絕載入到臨時表中,每個階段都執行清理操作(固定日期、轉換、格式化),如果您使用 nix 然後 awk 和 grep 可以正常工作,awk 是一個很棒的工具。

ETL 本身就是一門學科,將數據載入到 dbs 中存在許多問題

您還可以將每一行載入到單個大文本列中,例如 varchar(max) 作為 blob 並使用 sql 函式將數據拆分為列分隔表。

引用自:https://dba.stackexchange.com/questions/225609