多くの人が共有する多数のSQLスクリプトを作成しています。これらのスクリプトは通常、スクリプトを特定の目的のためにわずかに編集し、その後変更されたスクリプトを使用してさらに分析するためのデータセットを生成します。大規模な分析指向のSQLスクリプトライブラリの設計パターン?
私はそのようなライブラリを構築し、整理する最善の方法に苦労しました。私は "signups_and_spend_by_week.sql"のようなファイルの長いリストを持つ単なるフォルダよりも構造が必要です。基本的に2つの相互関連の問題があります。
パラメータ化。日付とサンプルサイズのようなものは、比較的簡単に引き出して変数を作ることができますが、クエリの性質を変えるパラメータはどうでしょうか?たとえば、左結合を内結合に変更するとしますか? (b)2つのバージョンを作成して(ひいては深刻なDRY問題を引き起こす)、あるいは(c)これらの種類をより簡単に表現できる高位言語のプログラミング言語でクエリをラップすることは賢明ですか?たとえば、
q = "SELECT * FROM plants" if want_all: q = _q + "LEFT JOIN fruits ON fruits.plant_id = plants.id" else: q = _q + "INNER JOIN fruit ON fruits.plant_id = plants.id" run_query(q)
DRYなどです。私は同じパターンが絶えず現れており、より複雑なクエリの中間的なステップとして作成された類似または同一のビューを見つけることができます。私の考えは、これらの再利用可能なビットを分割し、必要に応じて呼び出すことです。しかし、私が心配しているのは、これがライブラリ全体に依存関係を作成し、 "基本"クエリに対する一見無害な変更が、誤って他の人のクエリを破る可能性があるということです。訓練だけでなく、適切な文書/ルール以外にも、自動化されたテストなどの妥協が可能ですか?