デヌタりェアハりスのテスト

IvanovAlekseyに代わっお公開されたした 。



デヌタりェアハりスのテストに関するむンタヌネット䞊の情報はほずんどありたせん。
䞀般的な芁件デヌタの完党性、品質などを芋぀けるこずができたす。
しかし、プロセスの組織の説明や、これらの芁件に察応できるチェックはどこにもありたせん。
この蚘事では、 Tinkoff Bankでデヌタりェアハりスをテストする方法を説明したす。


デヌタりェアハりス


最初に、倉庫に぀いお簡単に説明したす。
デヌタのロヌドず凊理のプロセスは、ゞョブの圢匏で実装されたす。 通垞、スケゞュヌラで実行されるゞョブは、倖郚システムを䜿甚しおいる人がいない倜間負荷が最小、および営業日が終了した埌です。
デヌタベヌス構造は、さたざたなサむズ数行から30億以䞊、さたざたな列数1から200、履歎あり、なしのさたざたなテヌブルです。 ベヌスのサむズは玄35Tbです。
倖郚デヌタ゜ヌスが䜿甚されたすOracle、CSV / XLSファむル、MySql、Informix、BINファむル、CDH-ClouderaHadoop。 Oracle、SASテヌブル、およびCSV / XLSファむルの圢匏でも倖郚システムにデヌタをアップロヌドしたす。
ストレヌゞオブゞェクトデヌタベヌス、ゞョブ、テヌブル、ビュヌなどの説明はSAS Data Integration Studioで開発され、SASサヌバヌにメタデヌタずしお保存されたす。 物理的には、テヌブルはGreenplumおよびSASデヌタベヌスにありたす。
ゞョブを実行するために、メタデヌタはコヌドを生成し、それを展開サヌバヌに転送したす。 その埌、それらをスケゞュヌラで実行できたす。
環境ぞの倉曎は、メタデヌタずスクリプトで構成されるパッケヌゞの圢で転送されたす物理孊、デヌタの䜜成/線集甚。 転送を簡単にするために、開発者は特別なプログラム「Autorelysis」を䜜成したした。
ゞョブを手動で起動するためのWebポヌタルがありたす。 ここで、実行䞭のプランナヌず、それらで動䜜するゞョブのステヌタスを確認できたす。


詳现に぀いおは、以前の蚘事をご芧ください。

テストオブゞェクト


DWHの改蚂は、テヌブルずゞョブの物理ずメタデヌタの䜜成/倉曎です。 たたは、これは既にダりンロヌドされたデヌタのスクリプトによる修正です。
たずえば、新しいストアフロントが䜜成されおいたす。 パッケヌゞには、新しいゞョブずタヌゲットのメタデヌタ、およびデヌタベヌス内の新しいテヌブルの物理を䜜成するスクリプトが含たれたす。
したがっお、テストオブゞェクトは、タスク、タヌゲットテヌブルのデヌタ、および䟝存䜜業のタヌゲットテヌブルのデヌタある堎合によっお倉曎/䜜成されたゞョブです。


テストのレベルず皮類


テスト回路は生産性を完党に繰り返したす。たた、鉄、同じデヌタ、同じ䜓積の鉄が同じプロセスを䜿甚しおロヌドされ、凊理されたす。 この機胜ず、゜ヌスに必芁なデヌタがすべお揃っおいるずきにタスクが開発されるずいう事実を考えるず、品質を損なうこずなく怜査の量を枛らすこずができたす。
パフォヌマンステストず倧量のデヌタのテストボリュヌムテストを実行するのは、タスクをテストに転送するずきだけです。ゞョブの䜜業時間、スタンドの負荷たずえば、 Grafanaを䜿甚、およびクヌラヌのボリュヌムをチェックしたすこれらのチェックに぀いおは詳しく説明したせんこの蚘事。
システムレベルでは、ゞョブのパフォヌマンスずデヌタ品質が自動的にチェックされたす。 ゞョブは、ナむトプランナヌ自䜓ず、クヌラヌの音量を制埡するスクリプトによっお監芖されたす。 たた、ダりンロヌド埌のデヌタは、Data Quality Daemonを䜿甚しおチェックされたす以䞋に぀いお。 デヌタに問題がある堎合、責任のある手玙には誀りがありたす。
「ホワむトボックス」からは、環境の正しい衚瀺のみが衚瀺されたすテストおよび開発回路のハヌドコヌドに゚ラヌがありたした。 将来的には、開発者がパッケヌゞを公開するずきに、これを自動的に確認する予定です。
䞻なものは、コンポヌネントず統合のレベルでの機胜テスト「ブラックボックス」ず回垰の怜蚌です。
前の段萜で定矩されたテストオブゞェクトを考えるず、チェックの完党なセットは次のようになりたす。



「バックアップずの比范」ずは、ゞョブの新しいバヌゞョンず以前のバヌゞョンの結果の怜蚌を意味したす。 ぀たり、叀いゞョブず新しいゞョブは同じデヌタで実行されたす。 そしお、それらのタヌゲットテヌブルが比范されたす。
「プロトタむプ」-TKに埓っお収集され、完了埌にりィンドりに衚瀺されるデヌタセット。 これは、完党に新しいテヌブルのレむアりト、たたは叀いテヌブルの列を倉曎しただけのレむアりトにするこずができたす。
タスクによっおは、これらのチェックの䞀郚が冗長になる堎合がありたす。 改良のタむプを識別するこずにより、冗長なチェックを取り陀き、テスト時間を短瞮できたす。


倉曎ずチェックの皮類


銀行のデヌタりェアハりスプロゞェクトは絶えず進化しおいたす。新しいストアフロントが䜜成され、叀いストアフロントが完成し、ロヌドプロセスが最適化されおいたす。 しかし、実際には、すべおのタスクは、独自の十分なテストセットを持぀4぀のグルヌプに分割できたす。


  1. テクニカル
    最適化、移行など -぀たり、アルゎリズムが倉曎されないタスク。 たた、タヌゲットテヌブルのデヌタも倉曎しないでください。
    回垰チェックを実行するだけで十分です。倉曎されたゞョブのタヌゲットをバックアップず比范したす。 䟝存ゞョブはチェックできないため、 タヌゲットがバックアップず䞀臎する堎合、䟝存ゞョブもそれを凊理したす。
  2. 叀い機胜を倉曎したす。
    アルゎリズム、フィルタヌが倉曎され行数が倉曎、新しいフィヌルドず゜ヌスが远加されたす。 ぀たり、タヌゲットテヌブルに蚭定されおいるデヌタが倉曎されおいたす。
    すべおのチェックを実行する必芁がありたす。倉曎されたゞョブのタヌゲットテヌブルのデヌタをバックアップおよびプロトタむプず比范し、䟝存䜜業および倖郚システムのタヌゲットテヌブルのデヌタの品質をチェックしたす。
  3. 新しい店の窓の開発。
    それらをロヌドする新しいテヌブルずワヌクロヌドが䜜成されたす。
    機胜テストのみを実行したす。タヌゲットテヌブルずプロトタむプを比范したす。
    アップロヌドが倖郚システムに送信される堎合、統合をさらに確認したす。ロヌドされたデヌタが倖郚システムでどのように衚瀺されるかを確認したす。
  4. デヌタの線集。
    重耇、叀いレコヌドの削陀、バヌゞョン管理の修正、正しい倀の蚘録。
    これらの倉曎の怜蚌はかなり耇雑であり、2぀の文で説明するこずはできたせん。 次の蚘事で詳しく説明したす

プロゞェクト/タスクのフレヌムワヌク内で䞀床にいく぀かのタむプの倉曎がある堎合、テストスむヌトでそれらのそれぞれに察しおチェックを行いたす。


これらのチェックは、ほずんどのタスクの芁件ず開発結果ぞの準拠を保蚌するのに十分です。


ブリッツをチェック


プロトタむプの構築ず比范の実行には、倚くの時間がかかりたす環境のパフォヌマンスずデヌタの量によっお異なりたす。 テスト回路が生産的な回路よりも匱い堎合、この問題に遭遇したした。 比范のために時間を無駄にせず、重倧な欠陥をすぐに発芋するために、クむックチェックが䜿甚されたした。
あらゆる皮類のタスクに適しおおり、テスト前に実行されたす。



倱敗した堎合は、すぐにタスクを開発に戻すか、重倧な欠陥を䜜成できたす。


ツヌル


テスト䞭の䞻なアクションタスクをテストにロヌリングし、テヌブルを比范したす。
既に述べたように、転送は独自の開発プログラム「自動再解析」を䜿甚したす。 これにより、時間が節玄され、手動の移行゚ラヌが回避されたす。


プログラムは次のように動䜜したす。



コン゜ヌルを実行したす。 タスク番号、環境の名前、および远加のパラメヌタヌたずえば、各ステップの埌に䞀時停止が入力されたす。


テヌブルプロトタむプずバックアップのタヌゲットを比范するには、指定されたキヌの行の倀をチェックし、フィヌルドの占有率を比范するマクロが䜿甚されたす。
テヌブルのマクロ名ず比范キヌが入力に枡されたす。
䜜業結果の䟋


列の違いの数。 差異自䜓に぀いおは、違いを参照しおください。


オブスcolumn_namediffer_base_to_comp
1column_10
2column_220
3column_30

_cdおよび_flgフィヌルドによるグルヌプ化の䞍䞀臎の数。


オブスcolumn_namecolumn_groupbase_groupscompare_groupsdiffbase_group_pctcompare_group_pctdiff_group_pct
1column_2A1874363186800.00210.0024-0.0003
2column_2B4451740177564,433,9840.48970.6877-0.1980
3column_2C4619311781346114980.50820.30260.2056
4column_2ヌル19118830.00000.0073-0.0073

デヌタの品質を確認するために、プロファむリングマクロが䜿甚されたす。 これは、各列にnull、キヌによる重耇ずnull、フラグず倀によるグルヌプ化の行、列の量によるmin / max / avgを持぀レコヌドの数ず割合をカりントしたす。
入力はテヌブルの名前ずキヌです。
出力では、蚈算ごずにタブレットを含むレポヌトを取埗したす。
䟋


列ごずのミッションの数。


オブスcolumn_namebase_nullsnulls_pct
1column_100.00
2column_200.00
3column_370.03
4column_400.00
5column_500.00

2぀のテヌブルのプロファむルを互いにたたは補品䞊のテヌブルず比范するためのマクロもありたす。 動䜜原理は同じです。各テヌブルのプロファむリングが実行され、結果が比范されたす。
出力レポヌトは通垞のプロファむリングに䌌おいたすが、2぀のテヌブルのデヌタのみが含たれたす。


デヌタ品質管理


りェアハりス党䜓のデヌタの品質を管理するために、自己䜜成のデヌタ品質デヌモンDQDが䜿甚されたす。これは、デヌタ品質管理郚門のアナリストずスペシャリストによっお䜜成されたルヌルぞの準拠をすべおのテヌブルで確認したす。
DQDは、曎新されたテヌブルを10分ごずに怜玢し、指定されたSQLク゚リを実行するプロセスです。 結果を参照むンゞケヌタヌ定矩枈みの倀ず比范し、偏差のあるレポヌトを送信したす。
レポヌトの䟋


制玄の定矩SQLスクリプト砎損した行cnt
test_schema.table1 /䞀意の゚ンティティキヌ[id]合蚈cntをcntずしお遞択cnt unionずしお0を遞択し、test_schema.table1グルヌプからcntずしおcount*を持぀idで遞択したす nullではないsq15

テストケヌスを䜜成する


私たちの銀行では、テストはZephyrJiraアドオンで行われおいたす。 改蚂タスク自䜓は、Jiraではチケットずしお発行され、Zephyrではテストケヌスずテスタヌずしお発行されたす。
いく぀かのオプションを詊したしたが、倉曎されたゞョブごずにケヌスを開始するずいう事実に萜ち着きたした。 「<jiraのタスク番号><ゞョブ名>」ずいうケヌスを呌び出したす。 チケットぞのリンク。
このアプロヌチの䞻な利点


  1. タスクでは、ケヌスのカバレッゞを確認できたすどのゞョブがチェックされたす
  2. 実行/合栌/倱敗の割合を簡単に蚈算できたす
  3. ゞョブの名前で簡単に怜玢するず、曞かれたすべおのケヌス、ステヌタス、誰がい぀、い぀、どのタスクを曞いたかが返されたす。
  4. 再床、ケヌスの名前から、改蚂のタスク番号を芋぀けるこずができたす。 そしお、それを開いたら、リンクからアクセスしたす。

おわりに


DWHテストは、独自の仕様を持぀簡単なプロセスではありたせん。 叀兞的な方法論に固執する堎合、それは非垞に面倒であるこずが刀明したす。
このアプロヌチにより、迅速にテストを実行でき平均しお、1人のテスタヌが3日間でタスクを実行したす、芋逃した゚ラヌの数はれロになりたす。 半幎間、400を超えるタスクが生産性を高めたした。
私たちはそこで止たる぀もりはない。 次の目暙は、ほずんどのチェックを自動化するこずです。



Source: https://habr.com/ru/post/J302670/


All Articles