-6

プロセスの分析に役立つツールや方法、または何か他のものはありますか? プロセスには約 15 のステップが含まれ、各ジョブ ステップは 1 つの SQL スクリプトで表されます。私はテラデータで働いています。

これが私の問題です。同僚が SQL スクリプトの 1 つを変更しました。この変更により、いくつかの新しい行が追加されました。問題は、追加された行がプロセスの最後に最終レポートに表示されないことです。

このプロセス (15 個の SQL スクリプト) 内には多くのテーブル、結合、フィルタリングがあるため、すべてのプロセスを把握して、最終レポートでこれらの行が欠落している理由を見つけることができません。

したがって、「行が欠落している理由」という質問に対する答えを見つけるために何をすべきかについて、ソフトウェア、方法、またはあなたの側からの提案はありますか。

4

2 に答える 2

3

発生している変更を確認するために実行される各 SQL ステートメントをデバッグするために使用できる一連の揮発性テーブルをスクリプトに導入することをお勧めします。揮発性テーブルはユーザーのスプール領域内に作成されるため、これらのテーブルを作成するために永続的な領域や別のデータベースでの追加の権限を DBA チームに依頼する必要はありません。

揮発性テーブルを配置したら、揮発性テーブルのクエリを開始し、スプレッドシートで結果を比較して、あるステップまたはスクリプトから次のステップまたはスクリプトに発生する変更を追跡できます。データ型、NULL と NOT NULL、および JOIN 条件に特に注意してください。データ型のわずかな違いが原因で、何かが等値条件に失敗し、レコードが削除される場合があります。

編集: EXPLAIN プランを見て、オプティマイザーが OUTER JOIN として記述されているものを取得して INNER JOIN に変換しているかどうかを確認しましたか? ロジックに OUTER JOIN がある場合は、OUTER JOIN に参加しているテーブルで修飾する方法に注意する必要があります。条件を WHERE 句に配置すると、オプティマイザーが結合を INNER JOIN として書き直す場合があります。これにより、記述した JOIN に応じて、行が JOIN の LEFT または RIGHT 側からはみ出す可能性があります。

Teradata には Visual Explain ツールがありますが、あまり役に立ちません。Oracle と SQL Server が作成できるものは、クエリ ツールに組み込まれているため、より直感的に使用できることがわかりました。Visual Explain では、QCD データベースをロードしてから、ツールをそのデータベースに向ける必要があります。せいぜい私には面倒です。EXPLAIN プランを追跡する方が簡単だと思います。あなたのマイレージは異なる場合があります。

于 2012-07-27T13:23:17.147 に答える
2

まず、行が欠落していることをどうやって知るのでしょうか? これは深刻な問題です。プロセスを理解していない場合、そもそも期待される出力にどのように自信を持てますか? その時点から調べて、行が欠落していると確信している理由を理解すれば、逆方向の理解につながるはずです。

複雑すぎて理解できない SQL を簡単にリバース エンジニアリングできる魔法のツールはありません。

同僚による変更前後の動作があるため、変更前後のすべての中間テーブルのスナップショットを作成します。

次に、単純に行を比較して、違いを確認します。

おそらく、中間テーブルのある時点で、前と後の間で逸脱が開始または停止します。そのスクリプトは明らかに最初の犯人です。

希望通りの出力になるまで繰り返します。

于 2012-07-27T15:21:42.340 に答える