6

何らかの理由で、スプレッドシートに保存されている既存のデータを持っているクライアントがたくさんいます。多くの場合、各スプレッドシートには数千とまではいかなくても数百のアイテムがあり、クライアントに Web サイトからそれらを手動で入力するように依頼する (または、自分でそのようにインポートすることは絶対に禁じられています) ことは問題外です。通常、このデータは単にスプレッドシートの列をデータベースの列にマップするだけではありません。それは簡単すぎるでしょう。多くの場合、データベースに入る前にデータを操作する必要がある (データをコンマで分割する必要があるなど) か、データを複数のテーブルに分散する必要があります。または両方。

私がこの質問をしているのは、それを行うための多くの方法を知らないからではなく、必要以上に手間がかかると感じない方法に落ち着いていないからです。これまでのところ、私は次のすべてのアプローチをとってきました (そして、おそらく私が忘れてしまったものも多くあります):

  • Excelを使用してデータを変更するため、インポートが少し簡単になります
  • スプレッドシート全体を一時テーブルにインポートしてから SQL でインポートする
  • スクリプトを作成し、それを使用してデータをインポートする (私は VBScript、C#、そして今では Ruby を使用しています)

これまでのところ、スクリプトを使用するのが最も柔軟に見える方法でしたが、それでも少しぎこちなく感じます。私はこのタスクを十分に実行する必要があるため、作業を高速化するためだけに、このための小さな DSL を作成することさえ考えました。

しかし、それを行う前に、気になるのですが、もっと良い方法はありますか?

4

4 に答える 4

2

ええ..それはただひどいです。

私はスクリプトで行きます。また、別のテーブルの単一の行と一致する必要がある繰り返し列があるとします。私は合理的なマッチングを行い、スクリプトが処理できない行に遭遇してデータを移動した場合は、それをログに記録し、誰かに手動で実行させます。

于 2008-12-24T05:05:07.020 に答える
2

もちろん、これであなたを殺すのは小さな詳細ですが、一般的に、ExcelからデータをCSVとしてエクスポートし、ロールまたはスクリプトを使用して読み取り、必要に応じて変更して挿入することに成功しました. 私の環境の素晴らしさにもよりますが、スクリプト言語へのデータベース インターフェイスを使用して、SQL INSERT ステートメントをスクリプト ファイルに書き込むこともできます。

PythonRuby、およびPerlで使用できる優れた CSV パッケージがあります。

于 2008-12-24T05:06:08.843 に答える
2

可能であれば、境界を設定する必要があります。ファイルタイプ(Excel、csvなど)、列名、有効な値などを含む、予想されるデータで使用するためのテンプレートを提供する必要があります。ファイルを参照してアップロードできるようにする必要があります。あなたのページ/フォームで。

ファイルがアップロードされたら、検証とインポートを行う必要があります。これには、ADO.NET、ファイル ストリーム、DTS/SSIS、または Office Automation を使用できます (Microsoft スタックを使用している場合)。検証部分では、ユーザーが何を間違えたか、または変更する必要があるかを正確に伝える必要があります。これには、検証ページにデータグリッド内の実際のデータを含めることや、正確な行/列にエラーがある赤いラベルを提供することが含まれる場合があります。Office Automation を使用している場合は、正確なセル番号を指定できますが、Office PIA は首の痛みです。

検証が受け入れられると、好きなように情報をインポートできます。私はそれをステージング テーブルに配置し、ストアド プロシージャを使用してロードすることを好みますが、それは私だけです。オブジェクト モデルの使用を好む人もいますが、大量のデータがある場合、これは非常に遅くなる可能性があります。

これらのファイルを個人的に手動でロードして操作する必要がある場合は、ファイル間の共通性を見つけて、従うべき標準を考え出すことをお勧めします。それができたら、ユーザーが自分でできるようにするか、自分でもっと速くできるようにすることができます。

はい、これは大変な作業ですが、95% の確率で動作するプログラムがあれば、誰もが成功します。

これが自動化できない状況になる場合は、通常のステージング テーブルを用意し、SQL をインポートに使用する必要があります。データを 1 つのステージング テーブルにロードし、基本的な操作を行ってから、SQL が期待するステージング テーブルにデータをロードする必要があります。

私は非常に多くのインポートと ETL ツールを行ってきましたが、実際にそれを処理する簡単な方法はありません。唯一の方法は、合理的な標準を実際に考え出し、それに固執し、それに基づいてプログラムすることです。

于 2008-12-24T05:57:35.637 に答える
0

DSL がその方法です。

問題のドメイン モデルを作成します。セル、列、行、データベース テーブル、フィールドの分割、フィールドの結合、セルからデータベース列へのマッピングについて話しているので、これらが必要な概念です。さらに、(セルの) 範囲とシートが必要になるでしょう。

単純なビューでは、基になる数式ではなく、スプレッドシートの値のみが表示されます。スプレッドシートをタブ区切りのテキストとしてエクスポートすると、それにアクセスできます。数式にアクセスする必要がある場合は、XML スプレッドシートまたは Office XML 形式の xml 表現を使用することをお勧めします。

Excel で DSL を考え出すことができるかもしれません。これにより、より賢いユーザーがマッピング (の一部) を実行できるようになります。

于 2008-12-24T09:44:23.930 に答える