2

1,100 万行の巨大なテキスト ファイルがあります。これを変更することはできませんが、使用可能な形式に処理できるようにしたいと考えています。基本的に次のように構成されています。

Field1 : Type of data
Field2 : Values 

ファイル内の製品の開始と終了を示す ### もあります (それでも、それが役立つかどうかはわかりません)。

データ内には、200,000 のユニークな製品とそれに関連するすべてのデータが含まれています。Field1 の値は繰り返され (例: PRODUCT、PRICE、DESCRIPTION)、値は製品の属性を識別するために異なります。タブ区切りファイルを Access にインポートし、SQL を使用して必要なデータ (すべての製品の完全なリスト) を取得しましたが、それをさらに処理して、すべてのパーツを 1 つの列としてリストし、続いて表示できると非常に便利です。価格、説明など

製品を引き出すために実行したクエリは次のとおりです。

select 
Field1, 
Field2 
from Index 
where Field1 = 'PRODUCT';

これにより、すべての製品のリストが表示されます

上記を拡張することが正しいアプローチになるとは確信していません(そして、構文を許してください。これまでのところ、SQLでbashを実行する必要がありました)

select 
Field1, 
Field2 
from Index 
where Field1 = 'PRODUCT'
and Field1 = 'PRICE';

(それが機能するようになった場合、それは機能しないと確信しています)私は、私が得るのとほぼ同じ立場になります

Product
Price
Product
Price
x200000

私がやりたいことは次のとおりです。

Product   Price    Description
11111      1.11     This is part 1
11112      1.12     This is part 2

同様の例を探しましたが、人々はより良​​い入力ファイルで作業することに慣れていると思います...ああ、私が見たものから、SSISが鍵になる可能性がありますか? 繰り返しますが、それで遊んだことはありませんが、まったく新しいものであり、SQL を介してこれが可能かどうかを確認したいと考えています。

どうもありがとう

例 :

###
PRODUCT A1000102
SHORT_DESC  SMALL COG
PRICE   1.15
RANDOM_ASSOCIATED   B
###
PRODUCT A1000103
SHORT_DESC  MEDIUM COG
PRICE   1.18
RANDOM_ASSOCIATED   B
ROTATION    YES
###
PRODUCT A1000104
SHORT_DESC  L COG
PRICE   1.15
RANDOM_ASSOCIATED   2
###
PRODUCT A1000105
SHORT_DESC  TITANIUM COG
PRICE   4.12
RANDOM_ASSOCIATED   B
###
PRODUCT A1000106
SHORT_DESC  SMALL TITANIUM COG
PRICE   1.15
RANDOM_ASSOCIATED   A
COLOUR  BLUE
###
PRODUCT A1000107
SHORT_DESC  SMALL COG
PRICE   1.15
RANDOM_ASSOCIATED   C
COUNTRY SWISS
###
PRODUCT A1000108
SHORT_DESC  SMALL COG
PRICE   1.15
RANDOM_ASSOCIATED   X
WEIGHT  9.54KG
###
4

1 に答える 1

0

これが私のアドバイスです。まず、一括挿入を使用してデータをSQLテーブルにロードします。次に、SQLクエリを使用して、セカンダリテーブルに適した形式でデータを抽出します。

なぜ私はこれを提案するのですか?

  1. 何らかの理由で元のデータの読み込み中にエラーが発生した場合は、それらを分離して修正できます。
  2. データを見た後でデータ構造に気が変わった場合は、クエリを変更するだけで変更できます。
  3. プロセスを繰り返す必要がある場合は、後で実行または変更するために、t-sqlステートメントですべてを保存できます。
  4. マルチプロセッサマシンを使用している場合、データベースはリソースを最大限に活用する必要があります。

ロードされたテーブルで行の順序を維持する必要がある場合は、ビューを使用してそれを行うことができます。次のようなテーブルを作成します。

create table DirtyData (
    DirtyData_id int identity(1,1),
    KeyNamevarchar(255),
    Value varchar(255)
);

create view v_DirtyData as
    select KeyName, Value
    from DirtyData;

次に、テーブルに直接挿入するのではなく、ビューに一括挿入します。IDは単調に割り当てられます。

于 2012-05-21T13:31:54.353 に答える