2

ATTRIBUTE_NAME,ATTRIBUTE_VALUE,ID3 つの列 ( ) を含む csv ファイルを、各行が ( ) のフラット テーブルに変換しようとしていますID,Attribute1,Attribute2,Attribute3,....。そのようなテーブルのサンプルは、最後に提供されています。

Python、Perl、SQL のいずれでもかまいません。本当にありがとうございました。あなたの時間と努力に本当に感謝しています!

実際、私の質問はこの投稿と非常によく似ていますが、私の場合、属性の数がかなり多く (~300)、各 ID 間で一貫性がないため、各属性をハードコーディングすることは実用的な解決策ではない可能性があります。

私にとって、やりがいのある/難しい部分は次のとおりです。

  • 約 2 億 7000 万行の入力があり、入力テーブルの合計サイズは約 60 GB です。
  • 一部の単一の値 (文字列) にはコンマ ( ,) が含まれており、文字列全体が二重引用符 ( ") で囲まれているため、読者にそれが認識されます。たとえば"JPMORGAN CHASE BANK, NA, TX"、ID=53 の場合。
  • 属性のセットは、ID 間で同じではありません。たとえば、全体の属性の数は 8 ですが、ID=53、17、および 23 はそれぞれ 7、6、および 5 しかありません。string_countryID=17 はとの属性がないため、カンマの後にstring_address出力します。blank/nothing

入力属性値テーブルは次のようになります。この入力と出力の例では、3 つの ID があります。属性の数は、サーバーから属性を取得できるかどうかによって異なります。

ATTRIBUTE_NAME,ATTRIBUTE_VALUE,ID
num_integer,100,53
string_country,US (United States),53
string_address,FORT WORTH,53
num_double2,546.0,53
string_acc,My BankAcc,53
string_award,SILVER,53
string_bankname,"JPMORGAN CHASE BANK, NA, TX",53
num_integer,61,17
num_double,34.32,17
num_double2,200.541,17
string_acc,Your BankAcc,17
string_award,GOLD,17
string_bankname,CHASE BANK,17
num_integer,36,23
num_double,78.0,23
string_country,CA (Canada),23
string_address,VAN COUVER,23
string_acc,Her BankAcc,23

出力テーブルは次のようになります。(列内の属性の順序は固定されていません。アルファベット順または出現順でソートできます。)

ID,num_integer,num_double,string_country,string_address,num_double2,string_acc,string_award,string_bankname
53,100,,US (United States),FORT WORTH,546.0,My BankAcc,SILVER,"JPMORGAN CHASE BANK, NA, TX"
17,61,34.32,,,200.541,Your BankAcc,GOLD,CHASE BANK
23,36,78.0,CA (Canada),VAN COUVER,,Her BankAcc,,
4

2 に答える 2