4

これは、スプレッドシートからRDBMSにいつ移動するかについての他の質問にリンクされています

エクセルブックからRDBMSに移行することを決定したので、これが私が提案することです。

既存のデータは、ワークブックの2つのシートにまたがって大まかに構造化されています。最初のシートにはメインレコードが含まれています。2番目のシートでは、追加のデータを使用できます。

私のターゲットDBMSはmysqlですが、提案を受け付けています。

  1. RDBMSスキーマを定義する
  2. たとえば、データベースとインターフェイスするWebサービスを定義して、UIと移行の両方に同じものを使用できるようにします。
  3. 移行スクリプトを次のように定義します
    • スプレッドシートから関連する行の各グループを読み取ります
    • 検証/制約を適用する
    • Webサービスを使用してRDBMSに書き込みます
  4. スプレッドシートでマクロ/関数/モジュールを定義して、可能な場合は検証を実施します。これにより、新しいシステムが登場する間、既存のシステムを使用できるようになります。同時に、(私は願っています)移動が最終的に行われるときの移行の失敗を減らすでしょう。

どのような戦略に従いますか?

4

4 に答える 4

2

この質問には2つの側面があります。

データ移行

最初のステップは「RDBMSスキーマの定義」ですが、それをどこまで進めるのでしょうか。スプレッドシートは正規化されていないことで有名であるため、多くの重複があります。他の質問では、「データは大まかに構造化されており、明示的な制約はありません」と述べています。これを厳密に定義されたスキーマ(少なくとも3NF)に変換する場合は、クレンジングを行う必要があります。SQLはデータ操作に最適なツールです。

ワークシートごとに1つずつ、合計2つのステージングテーブルを作成することをお勧めします。スプレッドシートのデータを簡単にロードできるように、列をできるだけ緩く定義します(基本的には大きな文字列)。ステージングテーブルにデータをロードしたら、クエリを実行してデータ品質を評価できます。

  • 重複する主キーはいくつありますか?
  • いくつの異なるデータ形式?
  • ルックアップコードは何ですか?
  • 2番目のワークシートのすべての行の最初の行に親レコードがありますか?
  • コード形式、データ型などはどの程度一貫していますか?
  • 等々。

これらの調査により、実際のスキーマにデータを入力できるSQLを作成するための適切な基礎が得られます。

または、データが非常に絶望的であるため、2つのテーブルだけに固執することにした可能性があります。それはありそうもない結果だと思います(ほとんどのアプリケーションにはいくつかの基本的な構造があり、十分に深く掘り下げる必要があります)。

データの読み込み

最善の策は、スプレッドシートをCSV形式にエクスポートすることです。Excelには、これを行うためのウィザードがあります。(行うのではなくSave As...)それを使用します。スプレッドシートにフリーテキストが含まれている可能性がある場合は、カンマを含む文が含まれる可能性があるため、次のような本当に安全な区切り文字を選択してください。^^~

ほとんどのRDBMSツールには、CSVファイルからデータをインポートする機能があります。PostgresqlとMysqlはNGOにとって明らかなオプションです(コストが考慮事項だと思います)が、SQL ServerとOracleの両方が無料(制限されている場合)のExpressエディションで提供されます。SQLServerは明らかにExcelとの最適な統合を備えています。Oracleには、外部テーブルと呼ばれる優れた機能があり、データがCSVファイルに保持されるテーブルを定義できるため、ステージングテーブルが不要になります。

考慮すべきもう1つのことは、GoogleAppEngineです。これはRDBMSではなくBigTableを使用しますが、大まかに構造化されたデータに適している可能性があります。代替ソリューションとしてGoogleドキュメントについて言及されたので、それをお勧めします。GAEは無料であり(多かれ少なかれ、使用量が非常に寛大なしきい値を超えると課金を開始します)、他のNGOとのアプリ共有の問題を解決するため、魅力的なオプションです。明らかに、あなたの組織はグーグルが彼らのデータをホストすることについていくつかの不満を持っているかもしれません。それは彼らがどの分野で活動しているか、そして情報の機密性に依存します。

于 2010-03-07T11:25:34.063 に答える
1

もちろん、ターゲットDBと必要なテーブル構造を作成する必要があります。Webサービスをスキップして、.xlsを読み取り(POIライブラリを使用して)、データを検証してデータベースに保存するGroovyスクリプトを作成します。

私の見解では、より複雑なもの(Webサービス、GUI ...)は正当化されません。これらの種類のタスクは、パフォーマンスやコードベースのスケーラビリティなどが少ない一方で、簡潔で非常に柔軟であるため、スクリプトに非常に適しています。ここで問題の。うまくいくものができたら、数分または数時間で遭遇するさまざまなデータ異常を伴う将来のドキュメントにスクリプトを適応させることができます。

これはすべて、データが完全な順序ではなく、フィルタリングやクリーニングが必要であることを前提としています。

または、データと検証のルールがそれほど複雑でない場合は、Kettleなどの視覚的なデータ転送ツールを使用して良い結果を得ることができます。.xlsをソースとして定義し、データベーステーブルをテーブルとして定義し、いくつかの検証/必要に応じてルールをフィルタリングし、ロードプロセスをトリガーします。まったく痛みはありません。

于 2010-03-07T10:39:22.403 に答える
1

独自のツールを使用したい場合は、Googleスプレッドシートからデータベースに書き込むことができるSeekWellをチェックしてください。スキーマを定義したら、テーブルをシートに選択し、レコードを編集または挿入して、適切なアクション(更新、挿入など)のマークを付けます。更新のスケジュールを設定すれば完了です。詳しくはこちらをご覧ください。免責事項-私は共同創設者です。

お役に立てば幸いです。

于 2019-05-24T18:57:57.800 に答える
0

必要以上の作業をしている可能性があります。ExcelスプレッドシートはCVSまたはXMLファイルとして保存でき、多くのRDBMSクライアントはこれらのファイルをテーブルに直接インポートすることをサポートしています。

これにより、Webサービスラッパーと移行スクリプトの記述をスキップできます。データベースの制約は、インポート中に引き続き適切に適用されます。ただし、RDBMSデータモデルまたはスキーマがExcelスプレッドシートと大きく異なる場合は、もちろん、スクリプトまたはXSLTを介して変換を行う必要があります。

于 2010-03-07T10:35:01.277 に答える