From 9b8c607626d891322a0de179a3b2b9d8ed0357b9 Mon Sep 17 00:00:00 2001 From: Flook Peter Date: Thu, 4 Jan 2024 14:24:19 +0800 Subject: [PATCH] Add in new section for report, add in alert configuration and external validation source pages, clean up package names to use updated path of io.github.datacatering, ensure all links point to repos in data-catering --- .../plugin/optimize/diagrams/slack_alert.png | Bin 0 -> 48750 bytes .cache/plugin/optimize/manifest.json | 3 +- .../basic_data_caterer_flow_medium.gif | Bin 0 -> 584686 bytes ..._level_flow-external-source-validation.svg | 3 + docs/diagrams/slack_alert.png | Bin 0 -> 178216 bytes docs/get-started/docker.md | 4 +- docs/index.md | 2 +- docs/setup/advanced.md | 6 +- docs/setup/configuration.md | 26 +- docs/setup/connection.md | 2 +- docs/setup/deployment.md | 8 +- docs/setup/guide/data-source/cassandra.md | 12 +- docs/setup/guide/data-source/http.md | 14 +- docs/setup/guide/data-source/kafka.md | 10 +- .../data-source/marquez-metadata-source.md | 10 +- .../guide/data-source/open-metadata-source.md | 14 +- docs/setup/guide/data-source/solace.md | 10 +- docs/setup/guide/index.md | 26 +- .../scenario/auto-generate-connection.md | 10 +- docs/setup/guide/scenario/batch-and-event.md | 10 +- docs/setup/guide/scenario/data-validation.md | 10 +- .../guide/scenario/delete-generated-data.md | 10 +- .../guide/scenario/first-data-generation.md | 10 +- .../guide/scenario/records-per-column.md | 10 +- docs/setup/report/alert.md | 33 + .../report.md => report/html-report.md} | 0 .../validation/external-source-validation.md | 83 + .../upstream-data-source-validation.md | 2 +- docs/use-case/roadmap.md | 36 +- mkdocs.yml | 5 +- site/404.html | 161 +- site/about/index.html | 161 +- .../basic_data_caterer_flow_medium.gif | Bin 0 -> 584686 bytes ..._level_flow-external-source-validation.svg | 3 + site/diagrams/slack_alert.png | Bin 0 -> 48750 bytes site/get-started/docker/index.html | 165 +- site/index.html | 163 +- site/legal/privacy-policy/index.html | 161 +- site/legal/terms-of-service/index.html | 161 +- site/search/search_index.json | 2 +- site/setup/advanced/index.html | 167 +- site/setup/configuration/index.html | 165 +- site/setup/connection/index.html | 163 +- site/setup/deployment/index.html | 169 +- site/setup/design/index.html | 161 +- site/setup/foreign-key/index.html | 167 +- site/setup/generator/count/index.html | 167 +- .../setup/generator/data-generator/index.html | 161 +- .../guide/data-source/cassandra/index.html | 173 +- site/setup/guide/data-source/http/index.html | 175 +- site/setup/guide/data-source/kafka/index.html | 171 +- .../marquez-metadata-source/index.html | 171 +- .../open-metadata-source/index.html | 175 +- .../setup/guide/data-source/solace/index.html | 171 +- site/setup/guide/index.html | 187 +- .../auto-generate-connection/index.html | 171 +- .../guide/scenario/batch-and-event/index.html | 171 +- .../guide/scenario/data-validation/index.html | 171 +- .../scenario/delete-generated-data/index.html | 171 +- .../scenario/first-data-generation/index.html | 171 +- .../scenario/records-per-column/index.html | 171 +- site/setup/index.html | 161 +- site/setup/report/alert/index.html | 2464 ++++++++++++++++ .../report => report/html-report}/index.html | 309 +- .../validation/basic-validation/index.html | 161 +- .../column-name-validation/index.html | 167 +- .../external-source-validation/index.html | 2558 +++++++++++++++++ .../validation/group-by-validation/index.html | 161 +- site/setup/validation/index.html | 167 +- .../index.html | 163 +- site/sitemap.xml | 96 +- site/sitemap.xml.gz | Bin 568 -> 589 bytes site/sponsor/index.html | 161 +- .../blog/shift-left-data-quality/index.html | 161 +- site/use-case/business-value/index.html | 161 +- site/use-case/comparison/index.html | 161 +- site/use-case/index.html | 161 +- site/use-case/roadmap/index.html | 167 +- 78 files changed, 10906 insertions(+), 1388 deletions(-) create mode 100644 .cache/plugin/optimize/diagrams/slack_alert.png create mode 100644 docs/diagrams/basic_data_caterer_flow_medium.gif create mode 100644 docs/diagrams/high_level_flow-external-source-validation.svg create mode 100644 docs/diagrams/slack_alert.png create mode 100644 docs/setup/report/alert.md rename docs/setup/{generator/report.md => report/html-report.md} (100%) create mode 100644 docs/setup/validation/external-source-validation.md create mode 100644 site/diagrams/basic_data_caterer_flow_medium.gif create mode 100644 site/diagrams/high_level_flow-external-source-validation.svg create mode 100644 site/diagrams/slack_alert.png create mode 100644 site/setup/report/alert/index.html rename site/setup/{generator/report => report/html-report}/index.html (95%) create mode 100644 site/setup/validation/external-source-validation/index.html diff --git a/.cache/plugin/optimize/diagrams/slack_alert.png b/.cache/plugin/optimize/diagrams/slack_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..eb10edcf90a094b378a0e094c71b8a88e2b2c059 GIT binary patch literal 48750 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 z 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 )1?B8t*nnTeIEK)&ZrMG3;xau^z@cwQXd9 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

t&G%r@ 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⋙bzY9nbau=KYe}WRpST)ir}~WEhsEw$ zUHnuShx{zDa5_XC0EOS1FAW3OK)*Pa#Br{s>KfqCm~vff*f{Z-`i(!m+jst14$-Z$ z;3oN8U0(t@GiYmU(ifmtkgq1e9{&=5dMn@HO@Qq``xWhRiQ6Tw?1N`>+sWsiE4uX1 z6e&dqRM)5(Ti|a!ZHXGTtum9B-pz3-0RqeJf)kx!aQl(voZJWibzK38D6rr~s+|cz&QgNWZmLTo6dYrA(szkx1M>&Fo^^I%{1tew#tE*9xlx?d>2 z>4&=VA-Kon@KFw(ZuGZ-Q`FN>Fo-WBXiwPc2T~h*JJje@<L9pP~=XNWE~JV3w-ScLNPQZ(r1AJiGUK z0~C)=Y0p$cP;JnpJd}5yNEJY-(t?=Rc2<)^+h7!CvTuUSqP72C^^t$>nDgM5W=<}@ z{Vr{u-|$xIIo${9In3Kbg(iCwK_WsB}g z7k<>?7h>Uqx12nsA%gweK?xKpX5|SXbhV}F{_M350a5`x892LjCh->-H57$_2vBV$ zQV~#DQ(;luZt{`|P_=HV98ds>Nn72sFHiEC8B2eC3Lc{UwEsL_pkZWoA;?x zU&PY@lKpeBu30k=rNs{`DhGZ(DSO;kM_bg@sRgr#P!t^X|AVNZZSx-D;FIzhj(x$H zGs1~`@6T8sf$^P;|H||4Vq!U6yj@A$-*X~3SWT3IW#D>F$o@k-&F`r^oP9W{Na*%% z@Na`9q<#~2?{)PUCYJ9lVg%;LOBG|XL{;^j)xdbv6mbPL_RK0Uak-FrKRcibDa@k( zx`|4+oQ#EjZL$#v7veMD8m8n+166=)07*_e26gcl6VN&x2~xNQQ>Fhejj0D3QP3s) zu*)6Pa#RX-1a@);ue~U0OJ3ki&%U(_J&}+K;5HRSLQ*KgAqn%P-IiD^@8yH(8H9E@E0k+?=6w;>`sWlGJ<)lj^C0@V^WCXS zou)Sn^Q)e9$2FX(8rpf?=3bC`+Z^rUqMbxE;wC=B0X@&15rrnJv{oYMyP)tP`I|7i zz+o3hj{2Alr9gcwS4Dj?%Y+isoR%xGlt9+(?&8y>1^^3dSJn9=G}jdmtTgpgUM9{GGCm@4+01Z+2y5Au@!cru2C{N6MzkuNLO&#v)Z znHJP%eNU;PakFn;LTSJksW4Z-Z5f^?zMr(jb za0|~62tDEVZGe2^eSvUy3kOX=^_O_vkH-AeK2r)Q543#hu4r`YBJGLdqAZaw`!%cx zz+yvLj&sc%#N9tbMBu$GF6<1dDvw4g%ght$5rw!gvv)xU7NUr`3fGQ6w7r0n=EFje z^)i&x%_pE?A6LNn^SABoFqx+R9bWX77H;2*PI%qY# zJy-F-@1s7vzuTd)eH*5;-?4>af1os4-eo14yc;b zPG(vAvHU50J`W1KDHvN{(-G|9xLYiu%H-A7{85Q7-0J;-bgJh#N&0uMc(M~qFCWr$ ze(!iZ7SGv1aDM8)+wF08O8!&7{bzO+4JYBXx+EQYubX~MMD$UAr5Z~8&nA{)A{Nta zc8gF-dCYy>00yZEeP9$my73d;VC8S0PtpK9*-*^Ha>3fHGg@IUl_A{ffCxDuYxI4k z)siyn)KU@moW(TB9kk-CE0dUXgjOHLq&w0q7M}2bX@9y}o%&x=FpR+ylcY!=peQfX z?Cimha4{-d%|c53rf8`M*^DFbV4MK0I70GU7bqN?gjufe@O_6ow?f~|gVvq?z~xP; zU|}%7C~RvB=(Ll$uK{1nQGSgNu9HP1sCB&vZSNI&=ir$|=dxM7jwaen%;Wyyr9x{P zfM(eT+;EA8S2F!-_dDP9TId?{e|x&AAc&Oc-|Y$wY51|AHpO5GW}?>hK3p>D}P(w|ipUgI?PLdQ~zcF<~A0B=bJopbz|%b4DW0#bAJM$449hc+_=i=LuF z51$Qc!=J90bKeNzM>_@Lr8rp)A!xxRw?wgiS@Zk8X>T6@pT~W{Dl6Sqq;ljx$dn{2 z?Z~FOnd@T{!W%GU<8ALayslxp5O4eBV?V{BA3i}rd|^5nT`oB918m-k5F1dd9Kh>H zZ_@>jp%Hotul+aQ)s{J*Z=~4G#d34(8hN}X!LHU zXT(FoTp+%oE6uQgQTQkCMf!^i&ElngUTa3Sx(oeBtdFRkgz5pQB0H%+(iq)*c|FcW zAdL9gDfZtNwLdxMZGO;jf+iTrQ|Fpr6#=qv(uZyTHYwp9-=6!s81w;y@In=vUw}1nud+ zlFNz;P_nYM4w?(fu5Mq+9JCHx^Rn&nTg(dF5Bd`SB>a5I@pbslR#;%f#Y)A)SCZSh z*#m*!<4O7azo*}o{`npHaH*?I?i=I3=ENzOyY}B8^Lv1;2*&wGE4t5%gi<-|cWny2 zU>peX%Ur31;4J$a({bC^#j;TXC_pVMBhhg65m7pBJ<&AiM9x|ZkaV;JYBOM-xW$sM zkxt~POlf3SpbK5|px}XRzt`{vQ+IdffJ(Ad9JIzhdQ-y7(S2kbMFDox5bx$|tE;o+ z5ik1{`NHd_`f&}ley=_Yf>g6+XyIpL$WD`WX$JPIPe~K6CWj1~N~rLHr&K#t!g(X8 zwqR?+jA-(r>!IylS$PQw8+yt&)?J*oNw;$%$LxZ4Ema;j&P;6e#oP2PT`l%X24WvEwo*?80w98EB z_EO`}ImRF5(fN=##oDPp5CG`|VQ?Q|WikKLJ^#J?4^|_1e5xl(Ffd6a4670~ za6(jxuB8A1?oKAstFaqOkR_gePDlHF%vZd4M>*!5j>xe9!WBhlxP(2ANn#JG0@f7d z_wgt+WG8nvm3fz@b@@v$kt>_qdv1&!#i)^z;m*vlAvZ{TH7=*C7Bdlo&SBe-DaxT3 z(?vD_t72`ruJy{oj@#&yldG@N!3g8dTE+C7J}z5F0xHUq@aTIKwpt~Qc)~HS0;=3f zfO~Fba7A=2clI-ReEUc6#fMdCQO73F{i1G%c3$8)0dyORn1HC9IGly*48u;|#z!F( zzN@YO1N(iWHloRq0JP@I?oddw%;+GbuG?wbTnp06JPlxH?*=8QHuYQ_%N!^wK8~&E zQtinm&-l3n6zoyreblm?55&m!jR7mHTz8?@QhLN^UJw-Ac;Q37+>@50@nlv#Achh%Uwf6C{bo1l(iET4X;I?GA%@dr=el7 zT!oLKBa37S7RXK}-UokY4s+Dxoq(W;KKKnke6Wd-*GRu{Yvwl_bU>z!u@|qZwsHcQ z+j*KL54R^Obyy0*I?uk%zjj}K)h+E2h1l>ycV0Z0t=>a-_Or1N%6$l=ec@ZWEEHyW zi1nWG`>X(9KMO^6GA9>|M{OukdX3y(RmK=S zp-#H$NkRgFU_a)^7HAek@-I<;RfrtZoUroB%?Bk0`#B65A`nVM$+!J%%kdZ>ogKf< zRe?=5thRPd=1DH?s7B(Zy?F{c2aFf|B(ZH+W7Ua%Q_g#ZI++z~=`~l@Q|77-cKozq zN1(hoh}-gQE^t-d{#CGzhr{IAW9Fi_XD*h0Yga=V3WYl?vEHWFjKXFX|4W$wFh*)} z1#T#BP$O7FE~+{+UlMeq*KM+XiVZS{wSYl3{vEfJx>|JS?U@mMIDBNmeGx7k(7N;M zZ*m{7F0Eg7uH~0B(FxL}HZYPD*+x*d4K_543Dmx9_$Al+1O6?`qM>6@#Jx(ThoaJ} z+w;R*>dV!*i?r^q#}@}(zvAYW& z3}2IJJ$}8iEa|x~alWOwN)gZTk^c zFOZK|0!icR0=_PXpkB!rTJ>>Fbqlmkw1o37UY(_0G(CE-6r}ZDJb!5+(S|o3l8sK}<>Y*KjP_KXtyd?qp!%7sbE&1DNR#V}kR4iX@EA`tRQA zzqj`L1920HQ^XFD>`^cx;*|3T7Qg~7-?Ws0W2Vtag+%1{^CkvlB;uISn3rs| zDMJ@X=h9c_%#WfSnX9EbF2MPn#MWac`>#i5_00l)emdQi87)n=NWGyNtL!uHAc%D1 zF`Yyto(Q4ObbH=io$O4#v>osH)$fH2B0c5Jx-dvS*zrx}TwV!}chEYwjZ9Z{pb|#; zwP`&=-N&O6zEEY)(I)<^${KmFn9Zt($vpB5tnsJqBw~rh>~;UD*qPBiAX_(z=06&o zio5bxn>WDbx+DoJIx;pkJJiz5(dR>QnCkNHYEo%S%loh-!WR*Sz@m3XBT@J0->h@t zYbV&*YK3Tg(j}a|x9lmI`UYUDE(K)OL(Qw(OF&l97lB4nSiX%?rGWCAio%ADkD}G6(Hr?~W zCP0?9OP#3f^U0oqI)7DkK#>Qwl7Hbj$|7hoPxmYID9Fz?ne+dd65LOi~9D=A&_Aw@%uJ%Q; zq05JTTed1&)A0b($)s0>`8A zf(Ox#vDe168>T4XB$lvFmD8eP`UHmAg!ut$tT|TJ1sb9wuDkPc>5dRhZ__-{@?;%p zaT|W(0g5@5bdUIo#K)h{)-E&U{NR?T-jmc5T~MGeblDBJCmSW50Qc7i{>X7-)` zpE<_h5pHSyFT9R?tuh*VucGenw@yUF){J!V^L?=hUN2dY_DXf`J&6H8!7d%#$tR>%vPF9ACu*13jH6fjAvQx@)Ge5L3X+g>cJmksx-Wy0& z*|Av|aNnW`o+5=&N&NsNH%av{M5^A9r2_CDF z$+*zlz^n(tD)bD4A+5vT`yuI*^7V<%TTT;6EFZcx8+NLD)dj{E9fQsk=24T?oB>iP z`ru+>wNVJfp1C^_d!Qqq8z5YgI#`GnmG7Rej*CzlWs>cXMplkU+{-p&EjjGjOh!h`I2CAB(VrKwqC7;NE7qFh zd{yAw%hd?rsnDEO4nCtvW(^fKHC7L9bu49t=SKAahC44w@1Z$McvbuzJv$HA9{4&xOeVB@E;XqDM#qRrh zCU=%gUe3qB@u!wLqj|8JX?EI6WP-VN1VL+F8b`}HY3codbG%f}>*2~MDB0eY$A=@= zFR+X^j+)@isGz;tQt9EZ_67^oiE9bCC?n&i)Ns1lS5)0bIr>=tc3j06$Mt)`8GR@5 zk8S9o3_H=7U?Ksk`KK$@7_}9_?*nlwTwrKLT*r?0N~P|>t(@W2gV~WNm<@pUETaq| zd$)t^u9ncOLKKCie9~3=POlfQ`v9EohjWP+g$}(1{;~Z;w7vEbhbix-LZV4BAY4jl zXVma+`}wEf39`@a-W3A==44~nl)&|)z7gM|- z`9$P>G$CnapSRZ-61{OCjc#1k^E)>3u6A2=Hs zsx+>S>I#5=-`?UoFaAE0tvl#nUpfA>@gl2v$O6aAM7CW2nI~h*^J^N|@h7k-07O8% z>%EZ&1ln4cLv|9`)F(V)5{CC_<2Wg2{al+j-@m}qc*TEtWLq2!xh)5F3VqUxfoKme z);6zys6rRhZ1fqIPgQa?-X_CL>^}0BQngAG zGWgX?Iozh7V_p*b@)x+cxGr(r4TL@q{d?J$fe7!s%GhXvE^Z!6U7G!YImi?Tt3PoRF}T03X#AKK@xHzfS23zpkR?} zDpx$u&xVjnxxIvko7I7II%?t92jrj{bix*W(QJmAO3cY&G34l*LI--uGbte7j=vHW za;r*o4hE_So#Et#<VQUFL z60<=KO~{)LF;x%B$B{*A*C&BZ>)o9XP7uV&N934Kmj$S}gceb94fBTSsCYD;VAB^hqnlxefx=PVC+}umP$R9V6JBYd6@lm2~70t^H9ctB8Ja_B8-98JX&?{rPQ&mqnVwfzP6<8P7^& zio0_|@Z{6hNN7dgzB`YH+xuWTmsr`;lCd`U?GeK5HP7R`g9^28G%a5bqA@%YN}I)Y zja`AjBp~nRyFL1LDEW&DkR}MuALGZ5Yi^KTaC zwqwgL)KU2{NALL=aZvs6p>=4x*2(Lh~t3N9Lkj_QPOcius zKMFnQ{FVG%i1lLu-0`#HeB(4C5+>fwjybso%n}#**XdM9gRWlW(xdsty^kOS1dxK$ zW?TodeIG5haEhEVOczq;u-IFBUqYK45qsV8wHl&Z?uMZIv1`y>Bu*aM3fviwyuImm z?;6(Ed~F4P!-<*jjU$lJf}C3zp&DJ+U;bS@h2Wu2ls|mDzFiuWG^HY$QIbMOUAn;dgD{T~PDb!{2uSi+AWeb|O0o6|OH%Pb$lru({CZbB17v zcfu?qDT!vCgC`V~aN4@dlC}EdQJp3h1G!&$Ca^)9kZmQ=CCoV`+}9!cvP}vmP_Mlo zOChMKk5MPNw2PzSnzx7Y#qq2~vHc&^N$5Ar^O9gWbje!uNKl1BwC6=$7-uR6r7&fG z4N_m4cxKXqo%|snT^_JOngzWdfK-pA$2Ar8wo@enMD@UxS`K}J~-QK&a)qs*ZNe8OhmG!q4$}4Sc59{YkIzgjh7-IbhHBp z#Sy0p^|$-M@dV_zJBbzKRA2wT$j`7gB^E-SQ_q)$;!4xm$KvTiSflW5YRjWYy+Etb z`)qWU@r;i(*W&nKwQNw{|D${jh+VjQEWtd9gIF~$odt0Gm>COSqtM9VdETtC)}|7` zNDoV5MovjB25O?|cJbH`-cPQ}2;Z>Rl<>o+9#Ba4iy2Ud=RD^UhJdRVWV~aq?DfB0 zQN}CSt4i!BxbIO9I^UKZ>G8)iZdjvn-8s{plm@xtt$%zyxL|C6D zu)@jbvem2P1+k2n?c5g1H1^v9(~Y{`%;`s*N}ah!^tEW%y1a4QwsGbbAL5T^${O-$ z!Txua3&yBFu>NoSTzMagb-*fHFtPH%>wqG_hz|2?4g%lrPHqFvc0r1?bsOddXy9H5 zu(=1%(Tl!78d~Y%jw23uHu7=acbp^CSPm0*#HTBs*$;-nhIz+V5Laz5)GH68d*o0T zBgLowvVdZP9n9wPnd2OiU9PJyBmQC`6I85QR0#Mr*GRRPfqoYt8uDaMDOTbjs&W35 zt?# z{YYGr>6O?+IY?Oym3nPC2*>OHrhr5+t!pIWx|8XMQ1vrN75=>Og`K>-HQNq>mq)G* zq>s*gg7(;0l;gRg(h=1@m&^`f`Rgj(!aF>-$fK1$&_WaM!`YC6JMmm9>y9~)^(pYf zg{DNi90jhniyFw>I}XX*=CsgM zjd*5hi2Aa1vOE9jl24>@UpftubM9g zM*WqqiJE}$d&?*BZ{J@}gn-tS352Vb8}9;RJre;P_p;R~VM!A@WV#(IrUzxYw5pVC zdxrH~TE;)*TH5gTEFi7~ruIB08YVzO^1E{-Q2gS2`@)e~W9A}Aj*xrm7_7n_N@tp{ z9g|Bj*y9_XtIw|$e6Hu^eC3>F;!m$WH*8=X$B^t{a>m)W<=r~`0g|dS3w|XxlW8ZF z+R*GSPwwRUj<2FB>xur>PLoqMzw>Frr7rG68wpI{#1GR*VHH+^-};BP?xNlY9_*99q!Y-~h#{fBwJd1n z9Pwgij|eO9+0@8Dsf)*63DO8hA(;KY{T*C2yFA%w8jbmD9tR4(qlLQ-*9%(n%2`bB z8h{^b@cMVw8P_GM>v%4l3eQ%)GM+Jv+s&yk2fKe=5+FP$2c<-qILieck!!$;2J*rf z1U_@MYhY8HjffYPk2))ClOAn}vG^2;<2#v5=-nBA>r6!y+J zA1W;3&%*_!;+t8OKy#v@7GAj&#FoC*m&-COb?uH4aj#~k&Cyl6Ijli)Yosve+_kS< z5yA^RFLY>dmsQk*YasRHDD(-HQBt2vPJo=Q8I_vPXIIu_7Oc_LIuVOna56cC`$W?$ zr;dGGFE8JZ|L}&6d1|y5ooD!zjEHxuvL(cZCyejgC!zEhKF|_&@EQ0|W${L}PS&Jj zKv-c#Wm~4DwYgXG=ILh)gaBsyz&uv(UNemKAM))f)Y1b|6`Zy#F+JZOI2`Yb%Ip&w z62)K!jG+~-IhHtvZbLFqyLfWMao_hZ5cFT#doq>5H|znC%I|8;g3PzfnEUC^hU8uX zXmptmskcovixyuSLl}jbh>d}>;AP{L)0xp z6~?-m!=U$*nUvvv(4*4Y^5rkemO(my?qOx$0o`%D^YGtygp%Z4pdKcPAYS&zEQEkm zz)-MU*njWH>%Z>^DZ{NpZL`y8JSFE+_SJ-gY6c2S?mMpwZUA8ktABfw2x>5tj#TIC z6rJU&QdBs1KwwL1GP^A=6)Q0Lg>+JD!(%W?GKpB{XuGdha1upzdYT`0+nbmCVF96`aErwR3p~-m7KHx9)ig-DSnc_njPo5 zYw3S|bp-mPLF~H{)?tacnyZc1C#PrP+ z9LAiSdUh$kpJ&l%fo>%5alfo%tyE(VD0-&=J?L*DLLdAZEZ_f?nGfo5881%`H!D@R zC6c@!b#FHCel!-V=6%fzNuJeMDsfHwI4oYjRVanU&Pp_+7alkP+c|+OkuhXwB^DRJ z!(TK)enk5@M#^Tc~|MxVf3j7-xe z#L3u>1wL3}inyGf()4*Tlc9O(A7iSe3;Qx7r}M*)$&sGvJliT}ICs#9l9hMX=rO%` zUa8t9@caK#!=!|13^nRRZw(&#k%a>^iOPXs<_~9UdHXvAryka}<=@|Po?0rpP| z&gk?T2Texwo!n`5q^!tm5BA(gD{`=~>K27hKvP;voy70yutiw$!#q427szAJg#b$f zligGDVsQ8Rxc=kkVY{ZoDDmt_$A0iu?*GTwd$_ax_xt0ms;xDG*n5xKqqT()Vvkrw zte8b9iYg^y6JnNHv1-()Sz5#_tzDzEHZ8SFTjZP1Irll|bME`T&hPgxB-izNyq}MG ztG6OJW?vjX794#m&c$I_Ne9-p!c3{R9!cBgyn6GFofqQe9o&LJs>U2LaX&u>))q@msG%aJn<1$FL>*RX7<_(M@)w^NY(V zC`VK2gv^hRf8NA%kILYUfY=xf8Wub-!uI|xsYs(iRjm^vjqv~`JB~~aD*q4{L)42Ju+4!w$pc<-2RAse`Q`AXhvT^R z9h0?qB!XBru2*yQ|K`>vD`D8rF;p4mMbT4AYm2Dd49wEk{d=os#x*knE2H?opACFh z=h;4oRvb0+t-z3d`(|IFFF_A=#q!kQSlIy)22qwF(}`u;@3XZ4DLAi`PG;rdQm^lX z2*hBh$-O6w-8m?RS=?qgaVcgX;kB@(PDTTVQkT^T&8X>Fi4TQ!=3HqJwhUrHCL;uc z=gUWB?lg&igdyeo`Q3&#c+pO=1A3j9oOcLpi|=Keyu>gP>fUW`-Dta7nL7C+*+wB? z2IjrwDF72mE$*?A)1kg{dGxO><_&jdYZE@DZNNh1Lq8i_ ztZh&0=tqk|^7swm@^^@I+J7&pRSH>jG=HEIhb1MY*5QeN9bs+0_fH+4Y#DL=`FYiN z-vz(l6>)y{g>%~BZP)LU-y2Mhkw4pmUqlfJgm6Vs9G$(erPkSYctSNP=oH1oc- zt(sNy_dJR#=Czd@WQ`SUY<6b#C4|cWfs)qd6#DvyEtx_4WEfM0wRww#oP1aQ&uURB ztL_|{=_H@*O>VXdym->9BjjyUg><)lO1(wro&UVtLeDRmB*)zHQcKtl8Oo4Tno3u; zqUPrlogNsI!ZM>T@C(mO*s?mOAG4Q`x{2oIO}F_LcexYDseP-zl_u=2$w^@&4S(lU z{ksoj@R;!u#l0k@->_N@K1jZJ#3IkMc#ACZzn_g3!Y+iWis;0fLxGbt3{IkKTo=H*C3#Hso&l^SaWf7E zV}1~e1h?uWVP0@SpEI%`KR;vCFAbs}19)ra{>o%4l_PM^)ZzM)YvTqn3NL7R;#3R(Y(^ohSCr(N%Od9TzuE%Pzy#Sc?j z8#(@4S3s5tIxG8HXN2h>Who(QkxUY}RnT5|@mN6Zer=j$`^wBc zztyL5M)v(8@=DZX`-fzs_CE1~>*=+Q=*$_MCO=V=#eIraAXjyap|+E5*!FsAv0}f# zwoJmi%A9;f6)}HJr;mPLQEe-_QmUuS`4PAwnwn`c>+;0Z_;TzZQ#`He=mI$hR3S~f z&R1_CkKKrf=zmDg%xebM9ugXA{*&bVN6i+!hykIef9djgKtGl`$)RVPAps{ zGFEVd6VFC;rmF86ZTKRd4&)`ZFY=D3J!5Uo-%^+W8)YYqH7%y~2YH(5EQ7(d*1+-;q33r@tVJ_=8n*!?m{dA>0_{~-2c)>4Xk z4jL)c&ot$|f9{|$Q0=R6b$)CV$N89SRh>O++X*E=;qq6tZ{;dV zJgaTRS!%XzHBoq>k{5NaT#?sGWfoPMBvyhdNz)iPUxVm%gz%+88JRZ-S?P9Xl+iNE zCByttXj!%+Qg}1RCCg(o7g1jIPu0E^&mrkQ=fWve6pamoHGk5Y+*!*05+y);Y#gqe z%;!{mB&TRAHlh65tVnD{ZrU?JC7Rt@i@^;Q(2|VX5y)qg&(w)^@?0^Y=Elcb3%3Mi zcw&)+CU1^v9h_*jKilS~>bd}om9PZ+wr%xdgf;+Mc{ld6L1EoDfK(gE_Uy#b%s|l<{@_qL{CL3nF^+ApM45 z8DIQyA?j87bwRO19Kg!^upj7Nb2z|e*1l)B)YZJF!5hYURB(WFnQULGW%C^&t0UpI zmfqqs8`;v?E^J>?;h!jo7Z#{-&>?64VwzymVg|!t8W*fWbpeHSdTMaA1E^oY(>R!C z!&>YahoY%)l2b$`j9#jB$1ESnGhxz)WRipUb*hMd3dlRRSX^MhzZMCY>x#`xXizyy zHM;`d%zpBbj=KJ<=8e;b&qcenro+RzJ%4HGv=i@#Zwo-u)dVaSsCQQGXZ=vA+#&|H zKO|CKjguT3c$}uCYEZE&DgSw`r)mE~XNGEm5cVD0pSi=MQHA}BFy{g= zymcJ3%(G$i2uEi#UaiSi9&s9{(bFdz512oh|GNBY;I1tO%i7P)iY1DvK0ioMaFzPJ zQ+D153q+-KdvNb?nPV_j?_>3cZ|}f~?&f^ucVX`(-{Ck(^Sc~>WYd$lr)bKfR{Q-? zSegBsCxO^|(Kkc-DPcWzE@ii+Mx9(%O*GhABrWrfKon~uqBqO?>`N>q~aS&pkk*&3!Si3_)-|t z-u-4%LeEo2$iY%)7&Y(R=Xy;7y@-a6sxsZAxz56Uo=1s{wH3v_L_w>{Bjahs!AR3A zX}$onW-wTRwhtn9dom1%x&_q}b1!V<@u{{CJ6J9UV^?t^7{S>^(|ou}1Yhfq(gZww zCwb%4LAcjeblG{~;J$G7!$?MCn7mP8Unob=%wl@2dyBEm7B|bOh)IXl@tdaKu&?dqhPif{4wYjo=$)vu_|Q=>?4 z!5pK=S^iRNH~=eA*DZx;o>2-^t~{f;JGTvKlV{uY{vSTFzHv zghUk9l4%o!oZ}^*pm<~Cme1CbxNa$xC4ophO4B8}E4k51jYDNYPtz&|@SBC+$J#TjFa4{k8Ccj> z_&(QU-?B>ZiV6ZyTNwMGw`^^CHuBu!JZHxI#w-%VG}RYCr5f}pe|(_o(mQLZTXmSa z4(7(iI-C98Mc%~Y64v^zv(@~1t+=k+um+C)dfYXo>Ept%|~0PS{zS#3Gwt4xi0Aaz}buvH5S8?S+r^PuSfTRSEL9 zdwZF|)QTS>VUHBBnx-x@le4n=I5gruga{!gP#qKNP8gFV!1f#>wny;AR4aLho|6dk zpIvLax57M9@%Ql&>5jWSkAj2&?SL#p4QgMxkgi|609fuV{&D@K19nT}tfMgOf>u{k z-Mc-{A5QNsvr@jcmYgZR>Nqa%=Gl4iT~R7(<%91(%3109WYb!+rHR8eczaGJbqC+d zrs?<6lW$RgD{ym>c>`O6c>8wEdH2H}?0<;ce{?LpcyMmnnW;BO(4;LY)7cN*mnbG` zKnXFwj<4uV2YKA&nF)QbcZ*k8Z>1kKAv6vltH_R|5)@M{{%~F-(`qor&nHrrs}sP} zUzJ4rjB=73M4^C2o!T@m8si_(virHdO^a%a5%Mv2iV7@|C!X;foBD6u35!XXrxK{TgCN1JU$)h!0knv3>N22LiLXC=c z1rd`#-X1@#T+&5HpK0W{pcys!4#=^o(LiG`Vd=W_v^r5`CAYNFi&g$`O`f;weBb!? zS%*IF@}OhxLPZ-VDZ#4;jAdj_Yp3XTF)3-)!(nL|I@*J; z2ZDSi){f1+oIZxKcU+a+wMJI8GjlAw!(ELe1$#5zr96;`%7xrdLpCQ&dq{}&6bDL2 z_YLj_SiAY466sd;Zl-_Nd=c^Dk8(RVQB;;Djy1u+Fpewo9H&vqU@WTfo_n6G@DY5Z z)b#I{Hu{>{HPkipe+CD;A%eZh1|(|7mVZ5kum?a+zHNKzRUZikN`-Bn(L}lo#Vs{qe64?Zve6OK8JDVn$VnRQSd` z;QNF&eE;!pKAl-(1vsO7wf)OitV3XApWjEsl3SZ72rQ z(epl{WF+j58OIkpea6(;YI)ofO=V7ODPGi6lCPk6zP4J$oXc1;ED!~ zG=eMYI)t!a!305Y$8p^S!efD}3UCyK;r7Ziswb7jiM)Ra#%$#ukm96~o$a+$ zh1H?8G(e;7zqz#kdA~wH)9jF8Lf1WI+5yB~ODObWR>{oFcMf1Q<)FdLGDt184cym# zM9wg19v=j@5L=D9$s*-6XH^kU=0jw{)+ommXJ$@o1_7FNY318z$PXeO8^yYi6{Ob1 z-j8hS=Qiiaf#8F3P4-&TB1|@_fSA)G*cvcq9o)YnDr=#+^bL?XWVK5oq|V>kQQdun8f6~<1gqz{u!IEGSprI+KpqmdChQf@;Zy7Pp6 zNB!+OD)ioO(hjQB<(XSVa{6?gs!2JxeW}`BawRKVvS)CpHR;r!A4|mIa>mRrrv>$$ zdhloFg^A*eyJ{$cTM-Tvw6_`j(Y=-d=V@3+N6_u8f7D9(Q#~6fjtXrIt2bsODu++|qI}^Y+#m}lcd=dMdZr|PlSf}sPmJNMZ4V%F} zKl^OfdOeug{8a}j6TByO5#ef#Y%>p@JI;(0+u+piON6Yd%O_Q)MkC)1O;x%SeTyHZ zNp7TIX*1(2Mb$ig&3vm=T@gqedcfKJ7qh|%b9(I0mDf!is!t~&J-Xcm|HohM(n1=)*6z99dZ$4^=(-{XIJrQzQcVq+Tjs?Ho-j>M72c7fty4 zLSCjTuWICK^ywy%@sl~>1W>>Af{V6O-yIHf0;|YuM2ON~DGNP}c(VrLm;^V1Uh=sd zlG<>Xqs4!wqaA5cr74xXMg6OwUvwM?NrOEm-9nig6zF!FKz=~{(Icr6lfzv({hKNY zwjbaB=SS|{7y;s_A^7h#0XPq_^NrlXZ|K}|#}6J{j8#Jdxz=gQDyBhs8dLYYOANL> z-1GTE$ClW1vWC{4Gd1LU`yN=$R=6h4ZK# zoUY=$7A@LG{fVXzKq4MXm;ucFM01n#aJq>rTi>xlq%`yGO+<9$Bd-sSoFAEr^e2|((-5%QO(W^MF`I( zM!9X-ASPwAyW4y%w%L+u6%yp!3hiUbRvFiJUXTmBfR`3#(YNRi&v*$@YEDAyp=ECC=O0%)p`!6V-$;P)s?>*{=-%^w zsw?hym+_K6|1q)gZbCgV*;2%4OVPBz<^*_VKO2dpD)!iwdIiovt#mI!6hD@}^XKSK zuxJ(6>&(yadQ>3zv$QQW=PD&j_UDRk3|=nT=lA2*3cY+C{1=xd^VUsVq}D}<((J>U zEVTjhsy9!p^Usf&S}I>eHm@vgTji(|t%AQkA>wJ{j3!^$`udDyo|vHaSZ=4P5!s_w zVwnRfSK?TsE4ek<++Zv5r169?B;XYFh{Y|!!MF}1L`xw&SFOB~-hQwgXlxTphK^lui zm*WIuv7@fEP}$t+X()HZO-3*-aGFj>SPo)7FP>K}?WS)FJcSJj>rSP$^HnSsR|8;91R&s_hD0;!hA@C&q3}EL+OP_5P z_gdSIgAw{?&dl)UY*o|gp-YvK?FN9$Nc{2`1G-BH`05HAW|}pvZ@#>fbi)S$PbH@Q zRiAQgzjGdA{Xw_1hg2rl4<#*KGmo;Qux`kv%Vt>b*Aw~WGQbrlb~MD7?R_*X^p9zK z!klm9FTtn@3fU%21=eO@1h*ioMU}qr>tXZA0nI#^6YTLvztk9RW4(#_=icK>F|<45 z`xour!n}g4V9SI<(C2$&ml=c3@dHxE?&Vd~wzB@-(V1S?jzrSTW?A4ZFuO!N8(0>R z^K;taM;AS5E25~(io;8dZcqim^}5O@sWXUUZGpK<&jE3ua%7e`90V-(pE$8J;q$@d zzyrL3Vc#QXr)|u{dnmK-cP4v(^`u*fDUK0;G(#UXMr4#0bHO3h&<{3k=R=bP*SHRh z9-o&C!gSP*`T!1`DnFqKqY)__w!?=%^@zk&24xs`AN-cM%N#j+^63Ho@_efve|2%D zCTQ&SkX)-Hx;`sJn;Sn7fBzl4nOJrG&OzP~w4{->aBPSD;XE#~2CJwg)DMU2ENtw z%OKSaH<8aU9doW`*QJ-`O=xN_d2BDg9a;>DQ*{T*;dJTqxKk3))*H=Wn zzFc&vW-*C|chRpaVGTBKtK-#PdxWL`?Qv@;WMI9Bc(9VCzh=LdYE@F9#@8^6n=vzO1 z*lUnr0(rbT|Lfu4+;u?;92LpdjB);(_r>|LpR~R(WY0)K6iDs$G&mD91`s|{cNn{JA`Ev`CTG=R%t z0T0l>rshB2$c`i<6}7^R+vZKN9iM9n`5Q0RmuS{DY51EF807oyIt4X0?;BFj;}(iE zXSS#W8KZsPZvsidubI(;DT^Lj63t9?Q7?-o6nAZtHY-hIJzf<(NN06mJqPLs>^;(1 zO7O;CXIME8QhX3P8Wu9S__$|7NuK-G6ufWndCB^#RHea!A#@H;ZYx%`$~ zwkZCX9)WvXS$xXne@7 zn8#=P1;a3$;sB3_9~_r_hkb;=ftBNY`Je=oTDl-EOhBA&s*ToNA(JRxWdtUYWmbVj zW+gDzR$0IqzFamBVSrMJQa%anwoSHEFv}NoiFcb9%T4_hB5=A?wL|Cz<&v8eObCTm zTt{v4<1>UAJm8b6=7rE~Il^feQW!3|&#PsotrPYV==!`(S1JoldFC*v%%j#F)|uh_ zwK7uQ7Wrqsp%~hBoYkS*-nwt&($jQ@im?YekKbBC|M_)eXgsWP6NALlF+15>4)Mveh`@$8#k}@c|*; zBFq~DY~tN=9DaPaeQUMgRrYS1+3r;?Devd}Udpi0vc61a1A#u5%@C<> zK=AJ2;J+YK%@*iJ&!~wBWluN_m^rzI&cY<(kB<)9X#$%2PS>+Z*O1&;48(ywYp@!l z`SY6%Z~f1LaiQXw30+)|cJsqjSvOt1fQ{?lJX>!;Wx-|1vTQRv!D}XL`YW55pg=G^ zc=j_j{-lQcV^%ZJm$53(Mz+$&JliyNy9-#!Q!l?@W7;)v<{W7eOOKuMCH`ScgLMh5 ze|aTWYo}zDOm9rt*eRYUteK&3j?ze)01X>K0t;t58cKm%gck7 zXs81ypDn{_Nt-TtMN%}hWP1+^z}pG&NcBEAFIJ1dKV_JOqy!(1OHV#*!6f z@;|(p!(Z@q2jn$5A@6QwO*2b@8Xi904=?;pmL(LaA?A3D)U6oOxn{gd z=Y=iCqjOgXdy$n&-Rip8OPB4=c*!HpkFF?i3xgDUKjCXbguP1*HX&% z*n_|qanLdfnVv3cr|;3Z!7!ma@2D}MNnT{r=JHk#*1SzPk8Qu(OnA?X-QZ+*{ydQr zry$orV>SCH!)L)azdFb$4BAWo^S49}BG*W>UGLtjn&2S2d5U%-Er+dvPj{fd?vy>Z zc0B!={piObc|_=zWxnz-c+b2(idjH4{+$(Aphq(9wO}sg+o{kGiCdYVH?M|)`x-y; zjk_q|rA+uC?%!yuq{I{W-M`zev#yB}`Y_=C2GNT9qW&x6k?`Lck28XW-{NqUVBue; zP2`^-xbMVyRsTXX=rchlx(Azw0}pKcWHLAV8-AG5A`pJOROcvm6ZOR8qqa7KrB~m#Vig z?vha$WbJEY!+OcmcmIPWFz1rz^2I@c<*0g3_l?D|wUOEe(+4ifa+Xu3{;MZYf^hV{ zfIV52$L4O;Y>!dHnSM@f-9Pe5tbHB z`CHHlN+B@!HTH(Y5LXoN(HvJCho<5RiaZtpk7Du+fyar|>8>V{)NXU57%gGEiP8yV zyh%!MUFW9~ALa;KPu+?xY3da5&Z*k+9#cre|8scuAGcP#n>nBVNs2L@317u?O{m2oh6sv9dj}Qis*pT19#*Yx)_;~BB-#)>r`w=@Y7`z-{2J~0vj47=OSId`q*GS` zfWyeI4j^bDS_LxjSh4roZTbA@`<|9DNA61em!sC=HiZwcx`?fkMV`d(jb5c~`@ew? zBK9Ul*Sh|NxT`tnrBc|H%u**O&IXw!D{O1fat6X+Buv?iZW)?b3ri6_CQ26U`7nmt z$=e0Nv5IjY3U1lM2zrW85BT?N^y_4XsimKgjUup?Y&B=^%9nK)TKkv+FObUaxW2HSZ{0I;ol0Y*)Hg-R4w@%I9q0o_s^4wD z%JbKHDsIc(MSshC(vfO_MEND;#=Z1yBheWOP3*FjxH!NuJ@_Bu?oGr3h3u?>)@#r> zY=U!|HY~~slkLHXS@kr3Wh$o{F<=N`Hhp-LWb&uO#LVl5mJt}M#hijX2GbvuHw9tX zl0;n?QEtt1SGlU5k+POphQ3|wouY+g>oVSKMPSLDDOv}PRX>qK$5@HOrlRY#r0*)r z1jGvuInJI==2Rvn$5JWZ4v~*?R;4G$d|uL;l?*X4_y2dX#~&6BXjOg)npiDPiOiaHd?8 z34}*GdI%&y!%Sus0x!ye-PR?KABrX3Ne#P(N<*^IaA)9XzrT*R`w?B1xV+JEn^_;N z^_%vGDY!GV3Spb$f<}JBl<6*rS{938_jKC%0+OXe>iN*+#wT1f?J4SA8LmmUq$Mor z^szwy4v>gl~Ox0p&gTVg*rsRDMH1+Hj!_=nwD{*%-1;6v2T#t@I3awN z6N_92g~4wQEXMV`S-+gSF?1utvqR~bmye_?-ws6;gvi7f1;0tTpSNqQAU`~8K%$6g z;>C*4e!fe>d*0L1#J8=R`*l`tu2(1^JMYOL^T$KFock1iiy-G-)?cZl@ zltS~5KyrZhG@qe_IAdZ)g?S+?zdK80W@7wpF!q}c`@y&V+rA0( z?;q5>m0V2VV3)Dss7n3O59wm@9P;%)F-$&Xcpx^IJh9&6ITzrGOV+m@(4z`gkmb%5 zAo*;yUaIV&r~l$f8q7`0^myU5>S@P;DVvNhexoDvQFE(Zr@tWMbKucTDA5<*i%Rq9 z54l#^3B2eIJl?Y^D+hG#uiPlrFM=zRLb~m%8np<)4o+jJTdYBM7xfkCWlhKmF+JYq zLh-r5oZNC+z)Oa#~H_$0r`D&;%1q27K$ElKd@TNf+ zcld0XRR6EF^#36U$?66;G>GXC9T^)4a>9Q)I(`yW8@A=Yc<0CXFW*B1np5Z%-5u%od_j(P&nefQluPG6 zE4u!|lZUn`o_lF~10m+0R`wDL9V1z)Y5tZ|px#_753uj9`uS1d0dvPUwSdPi9u}!j zGd-IA!wxQMGE|nt^+Cubd7G#5NBVIGa6jsFvh!>5+3Mm~G?*yKWkT4x_^P6r|3Yy1^tO}?<)=A4 z&6(W^?XTKeglyvHq=w?T{s8op>=c!lW5JAEg=e5g|DNYNUmw=7$eYoED|2zL_t~)3N3hwn2`;YYXSKR!rh*4kG-zP@#3oVgIZe|h#b?#|Wu zdiH~>U)vQ%655sT1OI?`1y62S9LpH0S%6KnX$_>U0MqRNVaR2;#oKygZ6Pv)g7*o1 zio@L0Fpc&vx&}O$4#$^5_UQ>Aw&N_vB{3NL#Z0>*oNROsd*`BR$WyZyGwS#<##ETw zO12Sm>F6ahHlc5L@Q6c?e9%hcx&Z|LA)1c6x=eyM+|j;~F}sQj>GptomKT1W-Bvc{ zo>`Sr*%sgg~ePqfQxAh-=C>a48-YM9k_AE z@5YGvi9!6g6>^HXs3lyA^R^Fu%JlFFC~m`-t~?bwuwoxlRrKryR@?>8)9d(aAKD9q zm2{wYhg}Ll{IyTcI%9|_d4&V4L@A~DqWH<}XWwu1kYv3I*g1MU_=o?^D8B(8!?EKQ zMR_-xxQpr3(Eji@t%e_fhg!)c>tnOq!K?Xur=iFBU#Th-2lYM#OY)1<^ytzPlwG+L^@gA8 z1RG`V9&@(+9yC*qHz}2Kd!kHUuq}4i=-QsPM3odV3*?k79=9dStO6CbWFcYn9Z*G6 z++bqvi*0kH6h*uvvkSE7tsUo=uLvcbv;!j5oZRUVjz;Ee{hZyOokcoVhQK8wFQzX_ zE5xo{TvQM2^6UntPpY8lB^ELvcDC1rG|x~IF=W$4CyidgI~Ik}Np#%Q zr^8)WsQNIU69(TEzPHi|51yE<-A}aBeaB~#_SCkuGafMNI6*mapmTC-m;0d}*}bIL zTx&UG(7JcILFD z3#Cx>bjmbLp+n%5SMeUdR{6oVLyQX3JJXccJ#5-Xp!WkXUjkhig4zxKo`-r)n8&QT z=Jsy@aHS_~|Hoybq6rT!l5yW79K1_NVAFo-KRT~BuL;A!F+7aoStG&X+8u$`2`-?- zeRZ8A>{RhzmFyJ!mesCegu_IeccGToq@;l=h#okGD6CqN*NXrUtbAacaYFcX=3F_( z3jbQ{x9q|^BGh~q0BNnWe{t6AJCcEZPy?35`X*=*$WN#lzMWX~_4?PhFly~TpPuW;m z&0E2Csqzy1za@-rl4^N0>m%~v!EtfR4MAm zqvJqTXht0$klv@AdG#d_>S(UB9VkmVa1~Gpgi`rd}ZwXz}Q_ zZYFfY#E{lMe@}ZqCJ_UgDSug)L0wI@q9NMhwTk?%IbWB4hKAkglv@pRiu-fKT9%^q z0VtVq#u#22_nTw)UjgtRJfw6G6M5i7%e;hnqsGdPLSyl|Fu$oRTaY<(=!r_SuL6YO zo=IUws0Bt>SLI0DRB5lB+=TabOih`rT@wv4`|~BsQNSH8yNOAG`U4 zr=VseY%DGqxS)x4zmvP2aJzU#S$@^!CxJyC{7*K!e8&^^fZXU)w}rtOc{5uRvk{CN zD0X`6Rn$iVVGyq{!|TGl!#9h*`q+ZKkoz7u@lcwHn)IFZ9l}8Ic2CMg%d#8s#A}84 zx<5I$CvDd>yO^eZ7p^uFi<7Uu-M@H7dA6vWP;%$(+VQm;Y+WZHju#iF3!>pJr%F6R z-HG^HZ~qVgu>R`zZtMQlpM(G8Asws?4b9%ufVSz(C9cR<=0j2%0a&te7xC-EAv8iw z;~Gi4Lo3WCG^LrTE`s+KbGh`lr!em60;=cadDc%#+u*Sf9^cUSla-Bftw0|5D-A=j zRY$Te#5a{;x-nh^>bY|BfSjt`LLvUCS>K28ai52|Y}j%}>I@Xl5Gn?N+V#>xRH3|v>*rv4gESWQ=yzP~%FBYwm>ZB;&tixwtawQ7Bk(;s(O zlOpgd#Z>ZBZi%k3M33Icb5Hp~!ci(HGLgiq&_)-J0vWF}XF>$}Wa1C^GgvjUZSTUR z^_TfFi6?Z0A7-m9Vkj{JQx0OJlWIYy5+T$|=!8-CG)C&(Y#J}v(TTPsSLhx1oPN1< z@~>B}ZuOuK)5bETRb8&P;_rXLZS+9QCHKX5K!dEnlU~7Ys;-yLZ<_yGAv;K_P~Hk< zs`n;;^x6(3R$z&zv9KI|fhFGFH8&lZcfz?`#thj}Jsyw#no;}BXrt}_^0MiQ)vZ3>pttS79l+i?|jqY&~<)3 z>%FOH^GyF{zld<1Zn<2%7Nh}}0DSH0S<}#qvK+srBho8ihWce^RzN~976#Q6O-*~E zR{Hwd0II2eRW`>@k#@{PbuN5H!U%)~&^19m&vVSvQj1xd#ZB7mw0I&3IoHNDi)i*R zlYIpl7}zx2WOv?pSwAH7@=l8s8h!WMZ48B3U$c%`s`?EBSDS_9ZjY8QT4*(iGg%8a zM(OE5JXp05R{7BM0^-v~;(CH`y?>`nB^V?fZJ&x6U1dz}GJNVl)j*5OVW z8Tk>dJbRZzJAtOl53sFvcM_OReAl5{Qu}I)@SOdtAOo_cwVqF9qx(Z!j_XeJI^AW3 zNjPg&UTWgd_g;Q|>fWn>unb&xS$aa1g7bI&oSYe4wxSc8GaxRl!Gf}QV8z=+pS zr}9=jY2a!w_q@*0h-60MXBXc5{jfipjcK6_f3u+%U1Pmg^KYTA_%8`g=R(0BPQbtt z>Rm>HXE2`NG~{jZFl+TCcsc%j@^P(!EtOzwg#8K37Ox$R`zJjXMjAFzYN0&^qu$WXMZk5b{WslE17cx;)rqo=w)JZ+4 zx&RPdC{=!<&`;;ReZNrIBVL6?S5ds5&@mq<)BMwO5GtnM|Jcg2dc`zi0+?{q#*Ymi zYOrcQ_Bg0j5y`*Kz^FKNqtP9qWgWGpk-lj7iR(PqRzX}lta)g=29-@ zD=gCa@X2)R>$80|!EC%(XrNh@Z`hYTIsEMo%Ou=*_Qh6u_vXo})$%hBgj*FDO9n!_ zbc0GfCAZI-TYN_Os zX6aV7k!AO2=l?Q?AVWV!QeC-ZYBJAfx)->Ah@F4ZKy$-B+NWxr)}tXE_f-X{)0AmS zUTzL7LX@1C$X;UI?6F|i3TsO&0s!@NQE@NiCi#u@$nEmLpBP0~1~H;T^;C|AOx)9( zVYU4I>FD~hF3-)X&PlMrLy=2&$4K^)Rx9Ds39Cu{=0XckVMbhk0GA zWfmDAncRbnyTgTq9NVGZD_Z{McoJ6M9?R2SR|m3~3K(i|{M)=!vBzZbfW8Z z7wU&$sSh>BeX`_fz>C;^anew+TyF9W`|O0QOQv~=7z44?_N6dpIIuabi>+Wi2f5r9 zyUT3!#rHa_;u1KgP0bF+YzRGO;@BxY!7ko==0x!>j(aB!xZkBT+)SL{JK0Y@LG{Vs zVms*sK1yi*V2r^Yk}y>{XP(yqRZgbx`6}QmMH=^DwiHfRv~e)+4L)@M%EnWRS@`N%0&9MP3kNOo^HTviyrf<MVykVR0SU}?7MmVd{cIuW!T{f0;tt5 znLKTp1S9Tc9eJ7tbP}4`Yo5v!h<;@(tT)Tx9EBXDa*@SSy&vG}FFNOn3wh0&rTbe} zsZ89xwS$%&Jg<8}u6 zq&oDKmzzxf=G6Ux?snCH#s|+gm0@?=Nnibx+lQ||%!xHDE8Wwke=-~HuChd^%Xsqp z_{D!qa3@7%_RxqJG(G8MJiixtp=OL5jdk&EF}x&K*F~Tz^Yw-rQL(k{-MsV>r!w)3 zVsdjux_c?-0d9`Pxud|$jC_AruDAqNZ9~(hmRDtNXGNoaC_!{>Gqyri>%)Z0w@DFd zQc0UCTQTXKT!BreJ5xI!X=U2A#sLrkCrLwpAs*28r!=xW6En0yu`E*{9no@OJtoo; z)^P+*(Q;|QyxUa4uz`>2wauu?2&7h$ur~F=o5$9vN%lHVib7m_smq}BbIpk@$;k9w zrvW0l$u?SzsZdWVkAMM5+@Ac9lA)!dHr=VqLCWBS$E`7$=kq5g{WMZFJaA3ZnH6I% zWWn_n_eIT-E0~^&zy4Ub9x4IgLSn8H(;jdKz+Y6JS$?;MdLV&$U4esLMj%^?I zc$6di@)5r5*8{WWF#XG9Wj*h;^2q&*AjYb1&^L4TF!sgYQ^ z7pU!zPg6&e6K1)h={SVG#sV!Xxub3{k`>3%*f7DPIemw?kwOsn5+pmpMG{Y1M+Q%j zO%W)KV@-i^Cvh!TIwq@==&ht`GJ5>qmV4LiEX-tv)}An6ED|4bvXOP^bL99;B$Sx$ zarYQFGq90F3s~6FLTW}I(wiFFOK4MsOn&66C!q%HA zy~x}DJmsht{-L6#kt>;LqLCwLdMlKL;r)8jEt870R!UD>{uEWTS4o?B2du6`sYG-m z{(Iy5l1`JnPKi|dNlN}UQej=bHqg(P`|ti?x&J2;^vywzpObfk5q(gN-~fGkpjp^i zo3M4GO6W!EP&&0N%!2h#plxvGa=#_Q<}}Vu4Drsu+QBJ?&@Pp_-jE)ka4fcYFSypl z6d^hId0fvQcik+wvumx&b!pgTC^FUBM+DNQ0z)|RF?6Ln5%wRzk*4$FggO(neR&@;=Og1BO>XBNx%-onp<^K_hCb^S~ReFXHiO$5ANvGkXl=y6Hiq}Qhn z#aV4fT#4;9QQvwbkcZX}7XMy*=T|+7%rJXAzJZsIw_EG+V(I=*%R!$XH~T3cB=rcY zDIbatEOs7@+<0;4xS#c{bJClS`YMEWfc;X`wNEJ*CyVc2hyUvh_#pE8nX>e_b6}6J z#g&`1p+eHboWVWu+mAIre4=y43}Or-X*x-lqO;-%tMiHuW>nWLV)H+QRExgAW=x758k|VHPb30u-=~kN7!5VMcub+yGnx+!_b{Wr=&Fm#yAK*Rkbbm~)JIOVIpuh*YCv)kmGh;Nw%h| zwUX`$2kWG){fVIzJ)Cb1Z^OkRL)x`hA*p$tRJQM8=qs%iMC`c2H$(!Q-Ug&isZ4)1 zlX%+w%02khcIRW>yItqE&aJ~?tg|&z+4U_n)Iiu8w*PBSrALx{c#>U_xMA1%BA!9m8X8nTm&?p;=&Pc??V1i=nE= zBg0U2{4$j2SXG5p2}Cz}#>r0@WFa`N{j)VI-FLEjG{#8R6f}rZixVhP9n%(NFwW%Q zGfBFA;PX?Rsdx9i??f2W`Zq+u^v|@XgTxSudJm?-OTMQ{foZPa5S`>QUgigFUOJBa>I1gJ6UMq4%e(9vule+b8SRm zY1@2%cLaVdHP81(poCc>&Ccw!6S0M};+5|Yxap!wBPEzC2C<_4tR*==dsiZZS20wBZfy*d z6D^IcVHv*clI=5~76*+J$0FaW8RNW`TISc!DX(nMjxgEjr_^E8xrwrA{YLt#Ne7f* zBL76T&UH$a@6dkp9Xu4<-F|qAA0(jjwt4&!0y7oInLpd-su$1dfIx*mieyzCA`~VQGv)GKkf5 z*&)x&5?tVsQ>*^AsxH(nFZpcyRwmBIsEK9gmVh>G{r=vFXUQv0>7 z#ougPfq^pwzXJR+whgRmzFHlmCp58(Z$Sx&^{poxLCkF|wICT=RJ5Nh&MvJiSE7Tv zRQuu=TERrNPIFz^vE1`d0Xd9W+JrsT06mu0xVgh=!x64ia^}dYG(2L(m+82~`cKYO zZ^@ph5R66q?z>fBwYfA_=zeu2XIVyZwPK{moJsoV^qKNjh)7@df#<&WzY@^@=?Gxg zK(YE!B`ou`rlf@pkIG&J4rWlb2g_#^Oz0c5mNrm*ccpF{9g@jrAjqv0C)*wKl4vh& zd$I%gKu`L*5?lZ+uXqwvFh=YbL+2t%AreFxp)$!H+m!B@v`3v|^CRgGIaWd+v%EyL3oFxNBlIqpK)HLcTsg|!tC}atWpmECb zzqhBHctcfYzZ1r{w~j(p4k_sehoWCW$8~o(>URZELdV@B_6jPLa>OnfTo#-|6u7db zH~Y+?_mOpMooqU*U!*ey=*?-=B-SnBT&3!{Y(?vNrhlp-GjWqkUuaOR-}|2H3oE^0 zXw}|*rf>hGm3HVwfx@|Dz3oKA=3uhBPMp}B19OB+dUgF<-t|Mr->skzg-fr_!?eTu z1oE$|6UO`tFNzO!YX8*{_})}DHc3T=FYgpW`2OIYzA*;${98a-7IYd<%t=2+XEGNL zKUq2T!!+^jMLDh?y&M0m0Uim6D-q)6PS^AJ8O?l|Nu_pdvgRPt+$p}MRWqy!R_5X$ zV7RwE3>J@PcIgK3enXGDG2u#2J0);ZkEB@NsyBYF)5xibA<;@TD$NSjk~>l6(zbCd zsO)osR6sl^mCgR@m>;ON2x2?TbmkvG`to(Z*J8Q){8uIgH+i?p!>zWDWjBY(@-I|! zAq1}%+xw$k!=oK$5hOX)Cf{Pm(NoV~iPI|%L`ztn&xbb|Eg=IJqHDzGse0$~I2X@2 zd2~jc7&wbpn%WI$R`lyklUWIS7G;vRtH5yqD!D_UF7iBWldzQ7ocE*7#-%+%)*417 zU4!%d86|rNQ?tj(c&O4nag^@k%eB(B)NY=mQTtw;7Gm{7MB{^}M}e+3Z)6Uo<=zN8 zaV%Mf>Kc^tH)4MBmmGaFIm>6q%0tzNcFpKjbElm{ax3RkI#Hf0qAoE>iTDs9^T} zD)RR;4w^6IQa^t=k_k(YdzBFv`SPDFgO+;$Y{Y5%pJv-XBhDTO7IVui7JaJqwpYUo zn*^>)VPW?o3}fbhuXxnnMBjd|7WwyA)3Q3eKRodNzEm*Hmo0!8_wl-q|<-} zc*?rh?bT@TN(Vg(^fwZ0b;SqSFbH|HK@Be6{E_)P;v^e-E=lz@iyf9RUP#3_WYF{k zEp_vY*8kWd>Qv`0rDoY~GwSZ!&55ap_*$m%kGr%BUcX`}>fzIc#Lo7Uo;w&&;5U(% zU_(;&^R(QAv#L%sd-!x zQh8t&Mh2rPiYHG_aDY?rA3DS^!H3J0IC6h(!MUH;?Sz0-csY`|T<9F*dHcF{(qvd9 zVChe;ux0B1j4fNS3`d#oQiz@MQt9U6_;Ky!;V1q0Dd z6kMp(trBg>QPh;eCw{VzMVf+q=k z`a7O^KO;4^vVvh&5b6XG{e~L66%wzu*s_o!j)aa#ZZ$gg9H4smyAJbIQA#hAa^49x z{M#0a;7G0pMpU$y#I_i;OH^(&w=y+MQk=*kO24F5jg?Y-eZRp{`R##8=mp-Sa(CBbIi$n)%8&Lu4p9Ol2R$#Ji*}Q4y#8nIIr?63GAFd z=^g~wS|!Hqx)6rv&61VyBoY+|YDy|1qRN+HgF`2k(*nmO-d%U|@y#TSkXB^VgmJqV zF5GA}VX&P9_EK)AwF0f6hd@9pWGD_^=%B~u#tLRP;MTrz$SIEj3L)@f&(4W-kOVn( zO!yoOsYx2E;_7{1ZoA-=^x64gfLNsyeAX`s%7Ktfi_GBAy5O|gT>uVK`?Db}GSq%9 z1CtX^L1}FecKQ*G7`0i1^hzm6wX=MF;#)uo9`}LT(qo2!6yzIi)JdDOR%m@|$g4=_ z1U)`&p9RX`j*H!1ul^o`K_81pDz>8F`kqzqbL>rKjd8 zJnP|iZ$bcP@*`TmQ{r_6`2cZV?!{DM!<=I)6UusUj)OOek1?v0!L79%GBb(N@l+Vf zBs8J0^X;&FOBZn`AAWggYSM?DOWI^}4L;GZ2aWdU%9BjU)TqWOuU8`mX~t~|zU&ai zxzEKi=JOeD28G7^MAUetZM+IQt9J9IA6D+c#iGP2WHz%1!F%s(^f(Ekv?vLizsHM# zg&u|&<7B-ozc1HmxT;T1UGRDhM85o`-avM?wi#I?dcCEst2zfdG1y}UuP3uZ8^kH~ za$W?9>*#2Q=6?*_Ye~J~gL!;tFWtzgjpECx`i9QQC^r#!&L;>irXeW44-#H7w3wXb zlt`jG5VRJmaMU!a{a8%knW#+f2qhU1%^x(dSs}R}3z}pZ$$I2Gp6s=Pn^W8>N)XLz zp-*37RQ9GDzrG!H`1xKw(&D|oO7>o290_esF}KcR+28Jyh)SyH! z4s?CuGLwIoJ@tLHy1mT{(GjVlGY+VJ3!X)ZYKJ^_2yazA5gOjR>J|D^!yk4-&E0;R z!oEgKr>>}#^*z+J$CAN3my`gMLG?y!a|Q99{JCiwM`SaT;m=&secv-^w}Z*;;m6J6 zJ&~uf_Qo|`dB-s?ZBmcA1OB<9y~dh7>hD?nr!l4qzux$N?Er2x7(mL^sZG5GRtgY7 zb+Yl+2TM^%1$$M#58>tOiPU^uGf_m=J8*pE2Dze9dS9lOsi^<^XCxb@~Ese_dm@E-31oPq?wi+>je; z$NVefM44h+Bq>0S>B@7v8}o2Vh}y_qqWbREHtkrFd}KoJb27`bIbYK$I8uQ_DrfoK zE6f)hkow9irO_giPiY_9oy|9S8-2v(BwN?#Gv)_dd#-=jU;|1KiML0aoF}%d%^kf9 zw^crj?Hia2S7c+w7G)lf>jd@5w%f=N=v4jrOVc-;_@)^Q+Sn^i90+LZ1s(}+rk>o2 zDO+@w(DGIcJ`Qh1Acd)$LoB&EkprA&Rcbqd4J2Wo$n_tr5fY1TpVM%i+aXqDS*U5K z?0MqnOak!hVoxxAP=-v(XMdg6OSU7a6 z$E2mwqIJ*A6xrTpXxHDLH6tg8O-79(3$;O}F9s`Iq(grMPHD8Yr_9Mmgw1r~7i7`AFA?N{8%WBH2NEzy|O zQRfpUHK3$!Xvv+5+f3&5msVYh&yBnvytbXIi|7i#7T~Su8>$FYzLUs;3iCM7`)9!q ziFwK(3Byl-3jVAF9w8IYPx{@=D@e2gMzYi!w9s=E_)dLzd;23zql{Cmbahi~LWa4+ z&IhT<>CX=d@&(aYd~df(K5dKFL249PPi%$i{-O1lice2edY|yGFKtWz0!Cp)IloS& z>I)ooA5lAHeJ8$eVW>vU7ysl!za9UX+E>#{k;X73{VcV%7R#*4aU+cW)ou7@!xX_# zMM)6>V~o1`>cIW8!HtnAlU_If=tm6wzFAM1n7YSprps%4xp>G+(GLpUuE;U*?6T-# zTm}kf(F1pGNxyqqEcP7KNxxHE^87v##;Pbj9U&+EPK-MV%X*!==OS<$ZjUol&MWcc z1N_6U<#(4K@RJL)n@CD&7)DrC%H-Fs#N=PnCU-n1jKBXA=*H%8y{r zM1+4yPX&hIT3v>4N^us>-X2lwRG_qoKF*tfpavC9XZCLQ$(@Ji^>r4~D#aLyv zSzqFGoGhXGysB-W^YN^Z6(aA@j@-naKpyUx(bC}RS|a!WN14N%S|!v7x8Y3Ra|P%M zIyX|Ki;-pvn*ezw(rWw7*BO6KDW!2{mPAxrD}K_(`+=g4V%Op*x;g&&;XF&!O;9$1 zA6ZF3Cq+4eY%&Z>nDNzG%vIthSIjLN{_v%AUr=>TxPGHOo4>@;7z5olvn94?N}c%Td(U9`(z_YR}~f zQ~3&`&QY%2qI$s+H-CKEg`{gXdf8Kv2bJUM+yQwgqY`U69=j_tV8NF?t`lU~hV_n_ z`AEzRKezPQNIfO;Ez|dX7YGNw2w6b2CwC0{csZ{0PZerm(PP2Lt%r|f)aq1g5`b$x zlVJ0YOBqz_1U#;TS=!@d!r;bkw8 zh9XcnzRFmx(OvJ!S*1F$YfDFKVQU2q+~Cyfp0~Zr=anD-zO(#8pY7OGfKGgyLVaSZ z0n^AHyg8UEgVq@R2^w=8W-Tm6Jp}){J}j-!xMKlhuTB^kqSq0@DZxmWCLcHBRi@F- zmv-@Y;|lyaAx6bM87u{-KRiV#b90amc!|%ERE|{4Uys=5-bD&X5kmu(ory#RtS?HzwN*G=3S~ZQI`%uxh zoK;K7$*Rqb0tE~#E%LYd`r#Zd!Jnr__1D~(f$)&?jjhZ(L51)kJNI9@B$FVz%4FW~;q4Sr zf*%h5+0AgbJOQDxzICHS^UeKN>XIQ5@%{ARc!7=?hlD@uDLL?H`2SyrhIo_zwJa_xSpD_uWOz2s16_c z(>A!!heiW_X(E#|@ZK8+(1vxp(m}E&2hr^PIyz{(D}c)|6xg?<`?LZuJn!U7AG7A{ zvOqlZ{NaXkk&>83c)(M!so!}PA(V#~hQd<>7uKM!c)5!-l3iuNt20!uOW(OzzS3ca zd|lFJ<=dkgWA;<40e1_JvuYfC#o&QVfL|qm9@Xy1#sazZlPl%b4&Ld6UxoRVpVLJY zj6Y8)lz!cvH}&aG&3{?fosys7^Yx%SLBYGd#3&{F7&$N*_8hmn)Gpb0Z&Fs7tq(iG z{vs6lXFKk%GD0&0Ip+RW6^rK*MlF9HD=wMy$;*ab`%F=5{3tbH1>88&eA@!*aA4fzW){U5Uzw$lfs#TIQa1WKkRf|dviRTNyKHqww@N3Uved_V6WU~7>|k4 zgf`K-!5iqmh(CbHNh9OfHD_zK-#i6Lp9~TiAqam39sx)`B|lh#D(wn>2e@^y;^Rs( z68-@_q|LV1#k~2D=OG3?KU1tCw%m!8o1klc=R}B5=BD^Z!!cOCv#Ph(vH-0=luvE?YYw&@T z@zrEtS}f`icGP4tS(h^bEfKKl9P{p;HR`G^7FGSn_Y3~-l=1I7OWBrVQf{6?9sL#p91Ple&xqYd zg*2Oh(jXZRs_91$)X3+hofnlb&{iff{;OZDpFSScX-J%}d5N%!=Bps)2JGx3kUAz@ z6#_R)8rlANZ}}$9mTA#YGlFyUQbu8Mat!NxF_F15&P8$a^V0 zY5?IJE|b@!W^38my1VzIYWxc@>F1@DB;(u}T6{2xP=w5I9QQ_jQsj8uVuKhjS(xaE zg%>dQT4q>oGS<+Se^;^KXFJ!om50XNAJ_`lL|zF%zF2l#@ZGn~L_11)LjD}H{5DMB z^K2Y;7`QDVd8;9%RpOxypR3L7S`andO}3ydqWWl%tnQLRZxjl)ihsF)=O-*i?VT56 z(ffk0GIqdGo0MdOZAO;NzqZzB=)wy@uX1KZ>KN? zeuZz_wHs8DI&T<0Avx*=e^gwxYr_wu-1J-Q%V3Jfimy# z2KU80x$N=Dv-2M0I>$8AKW2~&{ZJI}U6kAUF|G!kI&F<_f_{R7Biy`yLMQLJ--Xug zqI8K!pJD3Te;!Qs-6OqMaZm3*u3>*${IF#?4si5o;=jsrQg8n*%c0G$D{~m!GdZ*o z|5cWIiYNFh^1z$CMd8MAkQyq$pTvsA6&i6pc8AzfPp_zon$Fh zV>WJ_EF>)38evt7)?*!C|MDr)${FoR5-{mT!-5`BT^sT>I5_@!aP(t+Ue_wx7XS8} zt!>n6n-I% z=D1y(`Kgq$ytbreaVC0)t%Q*hOKogX)h<(*w)0nA78pt!kTyL^U)Nf|kp0St(A-3s z7tw5*be)>_?=1h&zPmAeiPD;yATQ~`OsA4c8mpx}o6motoHd_j(n3#Xtae|D#@;|l zR%S~P_*`u(n)T1Yb^@sh(a!%`!$$kF?8T#VD70|Fw4c)@nq7v~!PRT zSyXsTNuwZGE!F6{w9TYuC|=Ot>eLHln-3!~qYe3J zLk$22tuWHS0!a5}W;Da+fyRl!m!GB|;d@ewIRu&JG`T{m7aFDOd*=~wu;ZRS*Vjk@ z1g~_!r`z5PbJX-YWAd31`i?@lX}kZ*W^QxbbV=}YG-Kn>om4a7`n`B*1zFuO4l>#8 zjF{(P2Sr7pUPpDcEw{%_o!@T%mLUAShP5zOy^zOSP&OCyFc@Pzm;uy=$;1l!_JGQb+{3*tC73DAlpfHvvmCvK(552^8a1uaS$d zi%7ycrxEM#@<9djtOHUZvi_|YI|I$PW5xqUMP1p2S~L$N`oX$WhT0X+orsR(m1SDD z$$T-Ebxd4-BpL#CjC{AhjiRhhVHXjP#9%pTq7@rca*A(M!nHM zjnfn>v?hR2w%4J2e3;C)8|E^*G(B^+ZnOMa%G^a=f{LPLXIo=b< zs=y{Qa~?TuG8}1YDokb-I&y7^(#t~BDKkTLxL6WEqaW#oGb{0&c#QPtMI4K>OT!7r}u#b{B{^-bV;E_e&=wluaJj#5*m0AGJ_O!ez z&L^Xe4XrT7%w|vJ5Wm!R5-`U#bEMk(3tsU`mV}_}dVV32B0Ai`qOi^^fBX>DEObH1 zK#6*rZSt__VKpE~=0i?$e6>CPnC*P!hu80tt7WHUH{Y~!D z_Jd4pO`*#64w>v&vrVK0JbXL+B2L%o1WsB8{8)vof#Hu)2L7z%JdRb1V;^eM)CR?5 zZv7R|Datqe^Z^XHj-S^_S25}vonozil$)mdnK7xlsM&I`zvteqqX4sb&l3;YULFQ6 z0kI>Ea~v|iT&7cQfg{$lmg}tjJ;!kAdRx7YyuQCC zptwXj)rkw|Zb|M>;|#e2-VE3L1r5Vf z|3jNnv(QMYOTerNWgCtW(HOj6_}z8zl~PiLg~fsaU$#7Ybl|vc%QV)Fc+kf3+OEIL zhLFLd;Faq_cOsBhsEf{_sSiiwj&s%A-gyio>?&m*h~DonS50Bj?P)ujt21h}o#<)* zD+DDK{YInrwd<$rNvzO-^kbq76~qrW{9Qla+DSv!C|27O_m7!MV+}Eue7cL?t!4E+ z&RRN={kv!RjafhV*R>YA&9r=`-KA|_M9S}Px6HCjHma*xUYkDG(9JvY7sN5!Dxgp} z&`)0^Q5%+<9zby~hQ_XB(I*v&0ta9m6vUj?mIB0MadzuV46R|@ko_cj{!}@rCsvH1mC*#S z+6iIlTa{&9a{%^r24CUucUJ=-{2kS_2m6(kGB|mLCBNU|)|LrhrBrD?s|>C5@hgQC zRUYCRf~;iB}e)Vas)iV4ByP1I=%Thw>f%l zrg;CH`~@|qJq|S;DvNt0>a=JPCr3h&3y>L&5m-@@aC?o}{u0afu!2ZK^8;n!_c&gi z3KD@FMj^we4tRcZ%1+CSbdv*5a#n0@{1fRXi$xxlZtIX^q*eRrDjTKOlCmirL$S(~ ztVF(^iIij+weE33eZTOWR1Tb?JvUdro>62fZyb*zc#Pr;f~o2`H6MvG?~{UX$Iz`y z^}57e<{AG_n&Jz^dtU~@e%6qe8|GPV{mNiKcn<4!BF|~LJ7}hB%D;ylVh7OnH+fCW z-R;8qOOs5oD1dpJgA($KZpZUd78tyf&AJlEujKcunjH@%*SUSBaN1*H#03%5#u*jq z^Vep-%=igOF-;=s1Ab(d!!0@Cyjg5lZVke<`-MQX? z!vf6*`oU_5iOzDjU@|SxLOEr5PT)u1$usT9hTM5ViF?NiowL*a$S~@OJ-5g2A#N@d z$(5)laEYz)fVHURfP2ul8Z1t=N3ZGHRUE~#iA|oLd@48KlwlyD@qIzy#Wu>MiOQA@ zayFG@GsOvAsDp_%7~p#j^&Fct`cgN-Ot#GA36z^%Od4Hux2%5DnxaQ@8r*bGO!C7s zQ3}M*A@OCm>HPE`2o|HF2cSb_z3)NXCa`qfGSBov)IZM|hOuJk+<&*Q0r|1e#EOqG z{SN^Vyx(o> z*^Jy*EgTn7xfppfnRWZ7lhF{3wYCL=HeG4$5)AmnEV5pv2(!*~NmrxUm1n-NT;3BBMu%!|Kv z_^}B?%X3)TeYMdreF1Y&w@{lAbT+i3yio;e)8|yO>E7SiCD&&vxf~AVL>#V$2q<6c z38LOy*hrAvUChay8tl)?2@Cz4%+U5Zx0k+tL0^sy!I1EMNJWG5ab1N6hN?loyzo}ju`Zq8nT2@pYz35|ltah>UdS7g z|BKAnj%m0-vfj~J4VYkTO#w`Z?A=EbGpOzxChNj~l9YCEzx@anv^M6oWh&+VnW3#x zzmNwJ-aAV#;K^yDuDdZk@~ZAqaVBDz2|YOh+qN$2(n;MS_rhNINPnLWh}e3PWjERm(ugPj(Yt7qoy$gwY0jBCXQO@v z!z=Qs$gp6Vh`;=~3N4Pk#SJW)3V$AY9%H9@p#!vOORMCL$T^?d+afr?*yGvDf;$=d zi2^Zo&Q3k@p20P!RiBhiZ3+p7fw9%@M(Afn63gSGtr(8mnw>;OVfW9G;$$~FNebya zJ2<*5Je9AUvE;Kn;mfeY>O7y@|7!uc+r%=;R}G{~R@3J{;YQyG50IWs$|*1WiQQ}T zX?9)tWM%^{P@geav<)yr9p&lIG^RPn3Zjyy&SCp|bc{vJS_&5Ji?VkjTT%h&Mkg(XG*mct`KmaLl_a9dgG_f4X@7{+6lf ze!in4{x9e0&E0SV- zDw|S&R6DHEuR6wNy;&cgyld`1P;0nEJh2@nYj z{hXF6PSB0B{M5&MgBBdIMdOX)}1;f8l9m< z{e~wK29CWJv@O=m${$Q%Q%z=~pWUoV!z7}9ch=AM>K1K~Mp9`w3&!v}H~hZVbe2Z^ z&38CD-ItHT``mv++sGr9gtIv?a`AG028CO}uo~xIxAf9J%kodcrEM|PdUHM1G{?TQ z$gQRFPY4a?a&KsKA=a&XI8idg(MLr$X2;jpuNSQ2PJIl?RlLwD)#+~C8_R#>xiQ}T z`e3SDHDcrDl;u;004+kwyy26_Oo5{}$71uIeE#)xj|+otu!MxT_7F!0ahg(|DDjv} zcReFR$LVz6Yj<7-_t(r9b!f;`*CmsgGZ#X~so0MSac_?ZDtAOTn3+a}#O$ zIZ!P@?FP4k=<6@T8-}M$CMZP{mUdhB)4)01T$8@nEV(ZJ^)5N6urQZAR)}mtbl{@< zK}iq-Tw5A?m4qyQLDJ@09!KMGSdj?&*C#Uv3|vukjG=NVM)q;Kt6WnMZe+{P9=aPV zXpwN&O9ThZRmtveuX_QuF=h;Y2l7WY8Ljf-YhjxEpz5#+O3sr&q4qda*ap3LZpPh@ z5Qf*9{y*w6B6BDcGBc(x6Y~{v5ks7}^oXy)D*Iw40VWmrKpj8clQNw@ImeuS{d9ay zMxwLJjD0h*{EH5w`}d7HMm-u@!iv1OzXc}%1UZc^e7Ycs9~T(cL5uI(7FvWL$JJ5T z7r6Z)@s@_VXrw}W&kdvr`49*^?kis z3syOnDhrGn;n|3o#gIy`Mty7UeE0m0S$fNxyfkz@l~pfuBl?7ox0)oG_)>9DDQg=FUS8 zSpS)R#s=b5!V%W4{gb9AaZZ>^eos#RzS-091EE>_?~oD_c9WLpTG<23K zzx=)87KsB46Nq0*G1w0U3dDD<85M!VU9oT+LZVGa#b~|<*2Ikycmt9w^a@`@d14^s zz-(-5J5^mPl1>{5e)qd;G_|ECx5IZ>KG4t5+AUEt5eY2{0(?w-?>8);TV0<^O72!2 zu$hhr8&)-iWNiWF*tiQmG78m0k;zVDADl*Vzk2CptQGKZS}>>xCndI>IdRC+(|@N! zNX7r2WRr!Ay)hT|e`r{&BuY;;@O4<{0X@qa*LBx0>9Ih-XU3iLj;=wmi~OlKRuV$j znNE)%6^?p=q)4SFJbmWa7r*S6w1##0kf{}q2_8r&Q|fsuWEZcg)yh3MmV)`EQy)-NX?tk;&*guA>69h+GzqD$LqM&tovYciv0VBhH z9wAUzJ#+@<&7uA!Ye*Me8FZrgaKA?5`uC0YjmQ)zNG>=!_5`=8^jwXqu_eEtMroOVp08X?mjaJOs$4EnNeO?AR9K{ zk^ZS)qaxg!>lSsS7Ix-cRII`L7HW^6{5D#v&8*06DxIsCEI5~&jQfaxYp#y)_E#sL z*k}}QRhTYu0B9odRG}f#6Ad~|nsJKYs+kX-S)nl!AZ)rQ4LCq>YERx+y9TDL*9o*g zf7*MwKi?dSN$7j?#_nWxt_=Lr@=a)ToyXQd>SNj(ySZL|LY(v=Uqx}muhy()4 zBwsTP?HAs(Pa1Sn zkdMh>H`@aYaYFt$I@6^_$HTSY*2qts*h-^5(|h{!Nx3k4T0+b26~4K$@L)$CYGOz#${B%82FKY0rqynoe@bRq1@hRZuvHipDJLJLagE zJ?1O-iF^V_cxI@;-WhdC$zsQxNz+Z0nYrHw8Z$xJ8>7+8!4@i-_*}5eVwUwtM^f!% zYx0ie-RjB=HFVrNv?_NkV*fx`CF+e_WZ#k>$85^*Gp$ZXB9k~5m(M$KEvPMUzdh+RHw*3sTi0dw#*M$}V*M49OQ;xtfg#}Zs zxO|4|d2?i@iLWGgxJ}&{!5(9H4fANaw?fIjgcu$pu;05! z!Z{SO69;NS{w{{wPhAN`RoD9gi=arFtG%wsTm&J44x(qy=f!}?eJKd2?|w;*KFVgV z9tbBdR7?k3I4HcuHOg1fdMoPyD6yq=fNvF|tUjxMth2E-!#-@MdI;CpWKwafq-10Pf()9hyhx@c8!QL#gK0b=vIGQ;l| z*Q)hyVmHm8gfE5bhhv|35SI+kQ--4X_4=ciz&#hpMl~)5rG~kK{Lub}-(d!cZ1jeF zFQ`;sS)<~V)@TqCPA$<~6VB|~`D4b8;F!>doJ`2ovEYS)LgIcmevfq8ua0sHmjVi= zZTd7{11g^ha{ts%ev3oG5@TqO^SoV-}eN@*i1KBH9B<0V1naZtF1AZn%g(9}JTi)P9rbV;1Fvk@sJjHK@;llj*0KdWg<<=0AFH zNy}r&(t!!4Y4@zNDux;*(T5XWuGc)Nu~E3CoiLDyO2K`a+~MB-4lDFD!MeL@_dhHA z!FJ1&C8y0@_}&41E|@*vtk*o)47*|pDDUj$!z8SHy?PsRJxX}z%G@1Mdbcw~$beM% zb9>3I?kE&xkBPb1?p%pFrN+W4i9mlVGo=ol60(9cx#vm6e)*Y~CNQmH zxr*!aISw{li;~oFqzldq@V~rU9pI@7}!3>4hgvJI~WVXDDt)Y?p{duRxg#@nhqlQ1fmM8m9#kp)fxVv_GjD+{{?0%52cP_p2Rke9otWQRCfv=8k-~mQE9Yu9nPH=_xe? z`+Y<84J$}?>AaDE_BBxW0=0IUb_d4Ns)Bfc$GSRP;cCH*Z2&fJ_u(jz%WztmHccA_ zKV}F>&vh*+-9z_qC5*itEiHYKLyOFhlE0;Hh7abkXdVv4ZB#Usdaj4Gx-fF z2U(vzBY(uyI>Z7rM!(>(`aL(q|IeH=Ksl&8GAn@QabTq~z22d9T$6L$M$f|A*VRg2 zEjoSr9?3qVnxp9`GEDk{USyf)SpS63?VmRxNu!W0FQJ%xP<9uzIE`Q$cSj-I( zgG8={c~TNTNzFD403VB7dz)1)f$@ zzdM7Mql?+yZ}n}z8d2BA$gSKcp{s2QkSM_KR1nzoo1x58>Nd{6dx)HT&(%NjYxzCi!IUKt}GAwmiRewRyopl)@exWqccLkRDJxCI4DJe$e{T3 znVqzLNJ$u>1cxQQc%cHh=e-Z(d+o%n8$2SGENGomTpcCTJ(8X^>s;w%z)wr{53bVE zJ=S~iShmvt{!g|2L6>-w7%5{|!Ja_($YVa=wMruzt$_Vc)mlB0&1;0!l((YBu+lB; zbIhDWlMil{Vc>G}C;8aNPeE_YMh)7a8CnA>T1{>e(Hg8la#~`?^H51K%1?1M#xv$& zZxq6{B#vrc7r_QrjW1`Q9YvMv5p8@K>?q9z1&)1v*y>wXO!ptx#Fy`&R!M;D<5OSQ zdkcE0yUtK=vmW@4((l?1xDc6$GbIPQ4-hfg}&o;+^$2C;Nakn6JJdtEKPbe|8uh7IWI+$ zqAqABQF8I8WAYQ4q}?oj2H8vmSfPF=1F9gqtI1{iKU^i*S^56oZCOb|1vgu2a$<3F ziXLRUKxImwd83lutb|W$T?6NdYP*m+*SM|%H<*6+z&WrINBw8I8qOe3eH_IH$dMfO zr(h+0{|yAajSC8-|=wWkN$n7j|qo5^oiUB@Lwo?g;sMvI(971p?TuHv zEXRmrUM}aIQFrC33W4J9v*rhz;km<{`kdbhe%Sur9}y6#Jd<=FH&Xf^|J}+xu6uFV ze*3@u6o1pE*>}bhoUY6L{989PljxAT*lgA2b}Fv-n-*F%6wQ4aA2-~J($4UELK)#Y z?AVsY+6(waH0x4tE+xNl;mT`STEZUTafvO$8>(Vhy#2MjjK-txYW9z4PG^svYw zNQaklREAas`xUuvlMMR&uOGDDbIUTA^WCt^VFMP`VA6r@PZM@bFh40}$+#LM40fmD z!?C|GJ*lzowm*L1W2EttSvKOE)MAr+o?7qw^){&tBUP08;A)#>1N&cYQg5G8)$*E- z!#B>>sa(X-=KPp2VUk~lO&OCIfaAv3jhc}D8jVKxKW!n2cXtDr+v^L!CpXj`b<2Z@ zxwmD=Ay$!~CyR1TQ;u>jzt%X{M@j~uTJDEpyBUh;z<5?uBL2j!5DF~f(?#cP71ZB+ z{Sl+)T_g$-e=5qIrNkT_s_#MrUvki(q`sO|%~~JYQZ*-)U{B%%*HxwQ!(BO(wow`! znTq^@<;oh1!&{kPj_%Ld2LFfdiE{U{A!bjb=|fVa;W}uVrsHMF8X7s|@=+9cigSHd zZmuITXKq$LB;A!f2c?q?Da4-W~w#0w{!YC6_y?>TouvB0XXq~ zOlC!D+4h3@m1d3gO7VPV5{~jIa6{jHfG(_vs5;N`rJifEr<~s}vs?%32rDKOUhNv^ z0JrAB}mZVE=_PJK;O>H zoC)Xq&boKyCoBC{?Oj#7s-BYXiq09n3EtsfcJ1PP2xk-3_TRa%)avc9IRHpM4lD=l z^j;z24;|4gGzw9~z}xeTh7qv&+`+z&SfeD)Gz_q*b{X1M4J&c6-* za-B0ZuLQ{?N5vDW^!~weA$ip_P~AlW8OG=lBMcZ0EQd zw(UZ<4*49^#k~7@)U@^5_o$6KGZDHJ(WvCq>Q4G0d5Ac{d~XQ0vNiN2gOK@!Zk@RQ zm8>a5>6t1nK~*v21;+nZ6+5I73wwi4Rw>N)F(^RVSWyx&lCcZjF<5XuB-+mA%@NR7 zky)BqsUZ-g*hNj7R5+MG+V1=-H7g&FMTQAog1jbU%EyKrYeA1EQVxoaXSTJrlCI*{ zvR%=AKi$m(0z5JS%To(MujITHY^)uo1t9&=M-1171A!-i0m`O>(#gQ7SMC=hYNqQw ztn)4g)vDHjTH}d4TwYCMjuzAI=r9yd<29+3jx^Df?*)@m*>mw7GC!u|iiw5VEamk| z)j9>3_;Go(?JGSMi@mRWrV6BD`(+2tea?+^E8h6Nrpe&h`V1zsvr{5?OFan0l0#RGQ5o?IH1PO1RDxBb4S~+3h43S9l-SvVY$hvhK zn6+~THLAOR08_FBiY$TVDhwGe8lpPLVo&zpG)X)qL&|il2QhW+jDxNfbu-ALf&|c`hY_BHZ$&oRMo9`OP57+lBtSP6174k_ewi!qH|MA=JdfZ zNdO=&6~DsD0c+Mcr)rNni8I+^*U9m|l_bAlhZnD6elz#}dDC|G;cDMq&vPla=Lq%6CJ)7`Sd2zORNo4}wdEu|s6 z>?l+Bc&VbfD^JD=pmBU)SGk4Uf6|(6y2w_>79LwEL^>q>c7)Qm`rMo9gO+RqUG3gk zDOtiY$bic1eq7>i(ZXe%--DpuhYQ>PV#;fG`Fuh)M&4~qp}v}9hJ0w>VOn0P=4wtw z$)9u1*cJ7BPOpaBXx8F`mGU?}sM=%6$?kcr&N6gMQ1A=H-)cZEVhaB^gxl)~v$o>O zgR$8ce6y+&Tj9LfnLtSQGSVM=G;oaEhC{UH!N2`rum~dc_ZP29Ap@Et~GlRUX2hg2%Cb3-pm-H7x zgYi=W_uvWWDhKB_-lH@fj&dq>Ry+IFCip+*p}Kz+ z9X4`xLS3evYSocY&R}4QR7aUMIn70+9h=|QH@b`8pFW>q0&gn zEHxHO>q4iS+qpI1qk;uZnucc7PMV?1ceOwh+q6Sp!e7+$BOeGwQ`vN_VAqJbD_eDEuc0Y&kDU5oO%tg{wj0%&1&F$QN%P!6wNML}5?|8w3<-zQ z$oUnwj%UBXw-wr(RMj2L>{L}*Qy&GHQXt4WlO)&(jfa$Ip|V0JLKmL5EK$d{EIS4@ zoLd`cGK#Oo!0Ul8m3HE7MdQI^3pDq1mDGt&)sPG!iHD85O(?-qxu1-DN`0GFnxwdR zAX-$afl->7M~_jSes9K53G=+W7yl2`7t$}_p(erg1q6vi`cpwq2qKE(V(O=j_HdX- z!B8H|B8i{`c&zqeka2Yg2;l#N{tb~>GCb;IOzHXBpf#)#kwE4Ur2>!&GD4EUzT52x zLpaFLcxE)HumZ3kY2l#nDT1Lp?&oo}nhsGYf6Ic1V<8@-+?m`l|Azdxv;3Qm!GGz1 zv>|m!ovKuaoV>)szQx!O3P(ZlP_sVU{2bZOX!$_*O}Qa3``3&NCfx>AWI9Jt9orr0 zAj~!B5cN|7hGcfR*$0NRjp9rZb}TV4NL@7)y?wxEU!8m`Ga>RR`!;fcDj}Tf>r2_X znf53l)E*MKH*@_#;ZFk=V_b!^A>M<#gxXpKy#hw{gZDNZN3;>}Czu!a2^G?Lu#HbK zX;#)-K~h2CvBY+k3qd!cA+-A^l!HNZN*?+vXP4kV|C==_XqDu@ae%Q%Anao&`z$!Nq==_8V@t zl}jZS@#xZH5g`ACWwmEQtOt`fYuRvC0+&RC?Ag{pC1f)C$NdTBfOYt!XpQWJwQ&#I z5Eei2SLgozSU5>nKK5;eXwda$M`RtFZZ-P}&?W1fo^43kDgAs;&Fp0LCB9+D5V2R! zY6pY@r$xWOIer}J-I}z4_toJ-z1`Y)XS?SQ{8C36`@GKWn~U$?%cLf{I)8$}aCKj( zW*>ya;I|M6G&?TE1^@xd!` zt0(XTZ`C*bePOpJ;6!5v@ytjxXiB$>X*O}8-Lb#Oz3=XLL&$W+^bZ=Y_l09c6bx8j z2wCvPbL8C}aTYmP52!!o^e7V0B}LLh+iXl%JPI4B5^I zgRyh74wb4dG=>fpDyGdz{#M9GO)|FC5nNCU2 zce+1PPONJHHZltW{RoCu*Rf83gVvA~ArbKH7XmArsoW=>7QR8=uad~D0SeVuD}tMb zELNnSotW*^yE8yzP23Y&X9+?q)t1KX`QWU;MY`XR1NuZ9J}xCq}%JN zg9d0nt6Oli&Mm?{sC6@+PQp)Ck2*6M3NDlR_!K#5=8)g$r$=NI-kpUFMvFb= z7aoGh%_IG%`Z3Aab{Sohus@;mM=Ob!}=v0%$X(P6iF4%a~bdQSE&x`9lth-Iq2pby6vfCa1x&j5`klMOJfPdLh>)cx10cr3nUQdDdmHwp1TK^ICK%?CF|bq8rc(6DO)^p($TM3aKOeo& zqX-SKB|K=#7D)vs}(NT^Elb6|(FoPc)ZEp;pPOZkb#cPkRO7b!$1NP{`)8crAc* zzAGL4#z{9vhuuOpn%#NSPrIQ=GLoKHlEgNNQaoBDER9+=#Y(kC#-i@aaDCy-M-DOM z(&%YBz1a8I@8aZ|p~IfMF2E~e&=%v^lOp%AC6?Wu9@w?VPJ$ycwy>3#Qof!_r`^_Z z?KbgvV{DtBPufM*YQl_l zA?Fv`qf`w@)FxK$J!w(^Sa&nxU}(@dK{baov>{yjiQeqbDFMp$*gtl;w&GhhXt%=0 zW@(BkxRD9J(ylPyCQyuC@yw(`K1pLl{c#VwAw-3&zL5-rNigqnQy@(qoy*{X84cS* zODp04z{&P|(y%sq<|t!9)lVK;pzvG$ppFsh{RQ276VY%asH1#~ZYmOk!ERZ-@QG3^ z22;dP{}xmtmO?FM`@o}IBAI}ylorbHwoE>QLkG)kc*;yRhsD?9GLxNVB9}U4Tz+(l zW&+5{KN`xX!7%VayWVzXwDAM9cB?OX)~9xM2X|<>H z1Gnz?28)y2QsQ|>j%KVYtT1ejy<$b1bdRV z6b$-I#a{@*}{}q ztvMn>j?e`K!wQ~>8HTnQ8mTZe1ZzSN?^06HE6kFz9D^OYv`pwa05TB|05_ex&0|z~ zx-Q;jnFusivKF6pM=H~NZfep0zlLrlb9cS}VPYQ|EL;7<{`N%hHtFOLeP>tmyO67G7zo8KWQs85u zGMw&y3*!rtWvO5*)<_{!3P{~oVbTPu^+l7)L8p+`TlFMs#H5ky1sN9yUCk?yvjJUD z#&HQ0Ohimiz|nDdG1}aw{ZE)N?&xP5fm3am$4w*U-PTi)4x2w&HJLj?iHTRKz0TUZ zQhuVvYgWxje7>Rn8KYtAvHfc}IJKr;^X76CKU4hj_nU+1d_g&Y9yoVzI*AI_@S#?{ z;d3tn)<;KZA4qHzs?l|M0O+;J-Wps4FqVkwIL7}(BF$^6%5Ro|jhmFd{oQin{Ok;# z+{rD+FKo9ZSy>J42HmlWFw{r{``kj>Ghv@5(feLRa>E5;pSB`GAc(b0TZ-XY=ma~E zY!b=RMn7p;+MgU@>HOfjA>{pO*nlCNpl-x6Tws$ZVfoRlh@#XUYmC;pg|y-4zo@d=?f7y{FqZaoWj2UxO|t`W-f^*TrN|xHuDjIv*{K*aKu((tR0cuxjDeea z&(Y?Di4cH4cD!L7fzA5F)bNJQlnYfV-1jbj-SZQh?+?i@oZ(SRx&H+?5BP zprDkfe2Er@n_@E5}VesaOp6g zW2(z?WGmC<*!SDRm@=34L#_7|#>KEOD3w5);pGScYTOgyxe`No3&9v|!VH&AbVC36 zFjZ+PjCo`>GvRk33OpIA1W>_(F*EluJw`lPZzGabNG1JbI!U+`Nu0#sw=G(sx`Ra< zNsoG&WP74uONIn>`ow6pvW%gKnn$%Aezl_8x%hrWJj!@Ryr%uU`zZ}s2gWL|EQ6d@ z?+J^PqlGMc*r{Ejw3K&9m}!t4+KR-+Fh=XZh(QsU4_*qKjnl&Yk(HCx@MlD7;`nfp zNmadgcJ`kJ0o!(UN{%z?kza_m)8mPElB62o3}PJqJgNdQVBhajiOd>pg-ZND8pR9}hUHrOWkRaqypWt%6 z-B-*r4?0Q6S}jm1`z`M1r8RfHLM?I_5zYbs$D6jt?fY6fwGvq^%A>Nz^6pA#SL~H6 zRH_OT&qf~!wbqqdq*BUgzOy?Tw9twx?3Q|+IBa|lQ5eSs-<)WdPz>D@ zKWe^NOt9v6TxNdjY6<++J5iJ9Y?sm`;t_LQucrxWM+l!?^x-+GTaiVIy=F}l9+)_) z>+}T@fbzO_wig_Uk60v>_s_j!K)U>OP)u%`8ya`_eQoMeaMgr@M=J-Gg z_du+%KTEgq#{#yIaK^lMfC$FkE8>@EY%3V96T!HEMgyI3gPVjf1^1Rb`=yK82#BuWPgsL_3TO>%`K;g^Ctbe#ml6E08cPG`z%b-d&u#lni9XXXra5bX z$Pbm4rD(A`JZd&FNj2?2QQncw#1kGJoR|sB&@#_@R2pp&X1tx<>`zD>i`m#g*P2!V zccIFv?f?WU&)~Fvi$d;=%ETi0uY070D46(|h5dwXxWzW6<;tZ9G!}^2u>R3109Xe~ zWfFg`o61TU=&*EVXZkWLY3BU88}ur;Lfgnn?^H@~<>()`(g9WP-fmVVa@`aPCv0z2 zC|?u)OlT;P^#u!kD4GH{l%%yC3C$u8Wg1Te*bZk`SKXIYbYnF{HNopF<+^meo_XE0 z;6fvwXAt}yr+Kg5FgO5PUHJU56dP#-Ah18M-a+Op%S7`TqnJQ~u$ zZz)$m4d2y4f0d9uKv0)?x!7nBf*1cY_cXAWOsaiI+fC;3hg!bS>gko!Zbv>V?eX_E z&y|H%cq8`}KPg@D#TCf{vz<(5@wRqR7&0H!_Rgo6+ z?QWtZAr*^JB%6a#nImVgn=ppLg0W2o@CliEzw*5;pAE@4#V7+?dewabMY1geJrMMk zX_9tj*xT?!jjcC&dH!Hpf0GFTR^-sf!1{tp-tpiTltIB)3I{SVObp5wCKTCsCiv z^y*(S{XDdW`u4wMI~2xcE#@`_%Gic=rv(A5p00F+P>#h zty6ciN=7)F_WZBWct2X<4pvRD;fbaZ|c27Stm}7VzN3BlmweK_!TF$!dFpymh z;_uFjt*>axp^N6Mn;bPp>sm+NGdE5!oF zjv7pSh8G2!MK$+o8ry7(fTianyES!+OIAhu(K<9~D^+q|!Z42MRC?hs#R?@6uf2%- zV7;?a#W1<0(+APDo}+XtP_R1adA|5pN*)_<`3tO$K!xzi?@#6r#9*CBKx?^*gkvzo zqC>6E0Mdc9A_3c8pq2Hm|Uk;S%#NxPZib!M{_CKeen0HNkJK0E< z$QO%pGO(AAm+}aWS4W@k4P?^r29w%0*bir_Wx|&d;xbL=8Pt{uAYZe{#yJN@AL-6k zuSGabz3s^6q|z!tjX=ZYBcN9-U0^Uoh$zHNNO{HkBgwdm*2yxIC!8^n#6nR6`g5Zzl53zbL1bb#s2sn z_+$KlUMVB)Bj;wCzSr6AsUE8ft6~VSkxCoK!zM@?QA?0MFw$xkeo7poTvU^z({yui@%aIk{PZaTXGeaXyGzDx07y|c7S1IS%jqZ zEQhoT#oPb<3tT(-2h{rP`#0XcAsh&;8NZ;LG7*o#Wm8-p#w_agJ$dQ#LprHgI`9PJ zU5>Vk#ZU^3R8h58!lob)%hmDWmeqVB14hk9JhHxYJdXjhOKyaNez;U5GuV$0NI#vb znEo0L>C95KQY}588q5x!2~@AW7Ds+-x0Gkn?ma8Z<)BtU;ol|Z&CY08;^)+)0F4ne zf#mHboifg>hJ*SDqDOL#WeXpiQi_4LIPjmEgT4q@ zOvY5iqynL62!>%p#+hM%EFptwY73irPZENf;=|rqu?&z#NY-BFEN?i5O{T2FO0D>7 zK1^WR_JNZ1R54HB;wzt2dW8~vUq)00jgrZDQEyeaQ7ne(Dup=78ot@$@jQ{BEY6sE z>)}iZ@1m7OE_%6QQkLt>C`~4vGDJNhAmh!^LX$fupr0@aBsrA0LFw2r|6Z>l7N5*O zo)c_7_NSndB1wJG0kE7b%`lR!@!%P-xB7zlMc|8bv zYOn}kavvL&d>~yU!zycmh{K=}p^+{tK*UD=8&^Di5%B^B`tJoIJoNJq_|Jf||I45L zh82DRzJC7@4Sii8XL7&V_`@GDBylp7jQeBoAQ}(zCzRb$7)T!53nyknDX@1t{7C1U z((!L3u=F#MN+i;#T#J6BCs@j-!w4;s+`4RzMzh%IUfQ@(t7gCEr;KZ>ryeY!w~?el zQY{>hVlI@_zdPR$39$ZJW$=^r85_R|s`-Z?k>E%8bK(qT^ zy4s3k<7VYUIcuJr`y2N`IX=u%)eKnY*9wFuJN-dmL{WWdC8NnyC9~d~s+rQM50KF7 zF+R*q#SEf!A9KHzMsENL#JNEmV_V3b2+mNQE)me+_c%VqbdzA&;qv<6Yrpq# znP{@m#ngQ&S>ho?a40oTy=v~d^s7Q=$(kiq{@+#W=XM&M&R);OJAe}n>*9P^8 zvj)4H{nk9&Et{1pLXdE&yb>3Xo|8ef*t9em8AU){6W z1`G3B$$sDM`M>G{*+-3~dy~%>4wJLW2jG;D^ zCe8~voE6A~UZ123JG`;5J>-D?0W{mYjBNDXUn-O7(s3)oQ!k&F(L~u9|wmxgn z@xNnb7!BY+Q2e6x*6^JJBZNiJ^W!qF1Gu4TYbR}&*ANT)_={A%erp9sp$=7~dj31$ zV}Q-iQpM6Puh(*t9lS|^wZ!g)-Fo+H8V>)xOB?qXeBJRT`#4RFD$SMF54JVCkL@_R z@5*H8m{_C|@b!YEW2(YFG;$vVlVbu>Z#8&zb{>#e@J$`I=lNesUcnJPB7pP-f+!%oxMMh3 zO=X5gnk@IM01myK-eZCLlV#pYw$5PXNs!#ukcH) zGUizWiSLb|iiXBxn*L8USpHWH&d|_iJQZ_4yS%(WlCMxU>5hhB#hQ`EAQFj$5k#h@ znVjo3+ELC^mm1w*HH6sbhR7tY3i*>?8pp;Xo-pOd zW}uv}V?RB}xXZN#!KGT8cw-{MaIMZqNh@?hHjW|+Ju03JfYAzi!P8iqvm z6hk*fJ`jw7nf9T=(U{S_=_yPAU)6ZX2%`EZR+(rl7KAFM`cQgK#_GTc5gDtDOC3&z zad3Fam}t@O3NfUel{v+iHDnf>YY0;%{uU&wV2ffSM=YY(LGAOX^?I-S0}LkE?mosa zAEzuwxXzX4r@YcK`tD6>%nvQLm^>Q-@=4#HMuGP2S?re6UU| z{hUOuGcG`=QY;^bP8QuSjZ-dDNFEXV+{60yDf+)Y<@#ctm-yMIas@*UpD^7t-!Jn7 zp&`hYSUcy`n_P1|p|r-Y^Y~Kae!sYyG!=>N8@wyBJ~91j0-;B9yJIb@4eXLd&Y@@9 z9LwS4UA)YwFBi*^Ryx+FQ$Og9B-p7hmX}4W zAdZj38k3n!L1+dtZabrStVVeJHLjf1lGm@EV{+R?O4nK=RT5Eu=&Jn zw_=~8$b-%_pxAkQ@Q+5Rv$Vco9I2WM&e6R35;du_;sqHCx(c=VI4nL#66xqJj;sf6 z7k#D3E^0m;?PT+wCXAG)7(1thwm*Lh^lu_lUgWY7{X?XOY~xVrnQh=5f!FSg|7kxSbBAZ}0jnm!C zKr2!@IjF`u;fRrGtwRL(6+C!KSk|aOV zcjo%E{zl*9Mg4hfSYD`#Rt7u$y`Fdi?xct@rPU8y*(D`X2(a28ND|j zS%JBJam4q}9ns%sn(#sjcy{qOt(!8D?`L|Ty$^;A!~0+8V<6+q02A zv4i%ZXPV9EJgm-`XCiz0hKN)4hqw?4iYU&3?ea(@3WW#XMQy1_lLTRF^a9B7ndSa{ zo?b5?20j1Km?twlNnRW#`^pe=VdOh7%z}24cgw1%HVDo@fjQDD^)nMK*3&0 zFu0x;CI=G3C38etnf63L6vc6@Rb(<1;gp_;ua)TXGWl33w=~7S5e&6pU z=F=F|YZMDXpg=ayV9kH$|F}Q(vmCTG5RJnAZS3~FNmo1tr=q|}(yB}tDW>KRsieHF zC{!Dl4jJc-uR-@*Z{_dU$-1Kv4ba5B&hopm2$@X%WWUkKWD*CNk`Q7Y^riwL0#J!G zth#exCdw4_l8+Ia* zM}&%*Kn#i?SgqWtV89DZ^me%=F^?~vY?h%P@tf(pnAclKC0ggZ-3cgHQ-_{O(hwyGg1)zhTtjv~!K}EUNxZ@;^b7v55Q2Eu`4;6S7V}cofFiTULOe z``IXPx|}Uv(uZi4qTyDBxHE`g%*IZ-j-=lUJpMRMa6-}>Km?)a_fpwwb$Ptkaf|%4 ztmt!gZb6-qVj__^hX;<4axdeHe1vv7*s#$GW)q4q3Ls!nd@muSKz{IwFI9}i1qL(w zzWp%nV${A{?0H_;m*RVeR5Gt*+|?OEagHl+yDilCh;ifkO2xTv_`eUG1S)a}P>~q^ z`_Q4~Z4YRF%|_~Rc{z)uE_Grg5CJ}CNcH-d!{u;UATmvNzBc5ta|?_qN6l(8!iURK zD?ieba6glMQu9R9eP_Kma~6DyPCpUIo>av&bhzA~p;(xE*qmG>70dzwwnImw57vOw z@L0;B_gcBvkhzU`w5FVQ##d#BQj;_3r8$fCka4lA+OB)B5jyBnsuL-=b+##eV%qJ6 zOLcunH)SvC??t2OW`FJcCGdfR>$P^8;k)4?(zn~`%8iG?|C_n7f0=uPGH3mUqAzR_ zF%6qXg}gIj=aPXLAAOP6dh+SPtMOn5`Q383`+tx!m?Ul&ry;ol%EJ_v1~WVy!@r2i%Fd z)?BcFuGvo}$}d$NU!E>1$4eD!7OVIk2V6=&rwSOkysCV?+MNN}1hd>!t- zTniG8OJKQ%C1uaw3bec$c=>p0A{0?$M*Q66_$_{Q|IrxhmlH?=_$T>%A@CDZA-5+v ze1?kwkI`0RbKUU}4qLGbmXaEm62x=98zv302y&)?nesDz#!#}r$F0U`N+s(`w_P>* z#PXW_IUGys+p*%Na6E^{tlP`w*5s!5V5X{zbR|8oV;%F2oF4Bdov~8cd#3~8II_aD zknsBL)_RJsPty^J_zUXqAVBt8+W0Qw)) z(CPBO&Z6``p9(?zNkKBKv>_Dnh$BhOb4DQ%iO#l*y`NYt9Dql5zSRt(8Vb0(52{{J z*&Iy8qsepQeN!}+PN?!UCZ)PQmMUP97K?aEt(Z$=2Xz0Cr)}jTiJ(OiKJ_)} zd?J4UP+DVuB1y&UT)q|8W->~=ua2bc8{O9^K3~&@yURmi|93sI4@h&C$_cuKt1p=* zi*)jE>}(b8-fymF8hO{{9!`DS_#lUSNK)a!sNcZ77q4DjSN=WMgo3ey;janAxX&Z6 z-&}1#xf+{SS{MF>QGO{uHR=wyB%&~ zMlPFnNgn@D0i95lLbz2)C8KI24>hI-KbljDro7m<4q~*%x1^$Xf~)joQ|LRh#4jqB zMy|F-i}X>x&EQ{xH45Q5=lZKYt}CXU-QPWEVLNuG={Z!XeMsIEF7X~SnAJWu?dYSv z`qtTo{poYA+kve=0f=5QnN!H{;}@?_lF>wP;AP@(b?P-1aL5u>ZcH*Ix)JN z0`_Y)sVUQU)|ZzKBo*<{SNd*dhd5J(7%H-8X-ju1RB}Ps2SENCCE`IBNMg8pxk?3B z{JSw5eyIeog!|sPO^g%=*{thc3!Zyq-SU9TSp%;5{S}RhgD7edjqYo@sQ^8Mv@xlZ z3gJS(1S|{RYch^xp&mRM8@w!udTTL0@n{dLZ)1>1%W-{9qn@t{TME|;s+T*3nVxTV z7~b#k#-4piw)c(Slqw|93qFbjG3tJ_x?zMz=CT?NG@Kv|%=mOIwL4iXmkxLqrT#vI z8>lMI(Ea5e!hMs2I!SGz@Uyu;rB3ua0(V9qQ>@<r+Vn)W~=8jmAV+Qmk6plk5!7#*muaH#y8Dce}-SM?fPTQr$w$vi4& zFcqlp@9`L>R@zjvfnOnSu8znvY$a zF=at^*%L4QQ;^m}VH#xT^QZf3yo`+f`CSYYv}4lFHfX~L%Kuga2vi_qr2ZBN+U;@- zlh$y=8j-OZ^u_Lg#qmcb?kQu*Aap_7<%|<(N)0?dRgZhJ#v6^O_ib8Rb-gwYd|qjX zgi2KF0_HMwV^Aimjpla9RYQoY!~0*a4x_vs ztD(chgGkN(;Ehx6(-qIoOqZw^flSrwPpw~fds7g-f)1s~y1m$+{-E_drSV%>pc?a6 z0~a)Xj`lQN{>hj(82lunhN!UA6aBLB@!smIX;t7EGqSqp>rJtw#Zh4W)kzL#aEI3; z-_7ZAYaqCRt>lIYz^eC(&Sje>X%kU6A zC~X|@=-%yIVN}_*y{reQufD%K{-rVb|65}U{(ZdQ4<7j=63JPE(BW)Dpf%bJf#6XC z>eBJ`{&>jiaGVTTW8NUrz{h%t_eH{Cuo_QHcL`d&nOJ5`=C|l{B1v!#LCo6msh?w- z8m6eVRf*+ddA!f6dEReMXYuC47~D-*_XlZ#l8c7qXjs!}`xg0R8d>IpU(GM-GG0LY z9P!h`1+8Ot=JHTLFoq*@H5)-5=uC$C&%p{Q49_`*ObQjd zW$c2piBvp|7yyUfwM0IKQziLJrkcq_Fq4&`x%Nf*WD$oP45=-K)pQ9QG-r1(Q$7{+ z5F1=Ai(~gSmiPI4`y0`_`iF+k?*AZqqQ0;cd^q%MCIgY!Mv7LTU>5H@9R9Iee}L&SU1sRC+9Qvdhl z3bjh1ns9yYD+{f1DmB$v>9;>r>vVVlFI$r;baKf*n8qyvD_4?qSK=G9uF8$759MVo z78_~@%M^?#J(iLWRMVwo+5{giHfJ+qnfhKb;hW6#=i~!&WjHxhx&>It+;kTJ-5+uu zVZ!`VP4}xKFrAKUF5QgElWT$%cm+P3F7p^XT?>Nl`qRdB!3~y-1W3UyX_3vCVB;&V|k*TBVb_epg{i8^RPV-eVuyaB7ci21Kdap70 zT$>cDWItT{)wB~%e}CiK`~wwR?pvl#ve8aFG5_n2ijC&;oeGunJ8dmyY)`IuYL$Y6 zp-#E>IhVUjV=!A)@~u2&taSwjFstqJRSN?!8n%u5b|*H?5a^oEc7j^lE?Kh#yH4!F z_3`k5U4h{_D)Ue+Ga{DG46^f?+@X)0d|Ef-b06o=842za*_64<8| z?VV5F9PJ3v=E>EaeNJ)YeLcsgdGWIqIs`aZ;sx4%mdZX2t%1}lE-$r^SEG_sAsCwU z%Fhxt|Km)xu3s^7ShH?GwStTf+uBKAJQy2N!=8b;H4wNJ9`us;V+nf<yij>f3xqsQz3pc|mGJQR9A5=2f6wz5oW3^DUc% zsTTJ>5|4AF)cg;{Jg&hUe6eK3DFRY)M0>M4-HL~NajrC{b1f=fggd$Xqu*KTgL4NT z(ibv6^u`+UU4R+s42`^Uvv35e&OfVk6-7TBqFnGvc4^1A(*XBY+P&du$9d<0wa&Tv zydQEe984w!_y->M7I&5h6nC)bj=z2Xq<0O#*7~^!ywVGYyKm$4(3j|HiJA|2N#qF< zZpD>2eoZRCIi=Vf-U_f_Z4plYxIOQYm2Ko_h0AuHqu)M)JIw+izfJH%w4f&OL!!Oa zdS5^hSzs6IrnyGXjMR{AI65LhY}8vrTj&JG^e*A?;$b;|>jFZNir>Bi7S91vdqGjY2&PEjO{b4Ib0CgUkh*Mctl!X-S z`daSD%oGRQM=fd$fbXujp=c~4+o}Jr8xs24 zE>np3!b&0O?~R#=2aUgyW!@hxVv>Y}hmq_aYL-XC5b_ec!%-DG_vzoM+SE?7_!8!# z5_85*5eAX5#}iphXi50SQn!IGCkTt(A?opZ&5k*>id&;^aOpwVREdx@E{mD7wV4D+ zz*GC?mxIsjj1YIzXgb@aToe8?*AM2YwfR=3%WZF~V?U>9`OU_G!SaMwvN>>oa0C`W zlZ9lE#PSGwo}%pFWBb52AemM%fc>rC0PDeU${Ot>5!Nv{P*ynaVNu2*)0qXe_EBpW zOgI|rXVAkAj%Dg$&Q9pvVs|k341>Dm+}^}}%`PP6p7Rue@ToR#@$oh@_uB+ekyIgJ z&e4^AJ>BW7`tYvyZvK#w#v)r+XqG0&PtU?HbF35lHhtzB!a!wGS-3*L*{j+ z@cPCXen_mgSD540<-U#%o`y}5uBImMyyPpB%$@ZA$Ax`nhsUPX=TZ4ydfk|{84`d@#;$rd-3T5|CXvud6f_F4WFwd<8VhYM)SiS-T&e1 zE&Q7P+r@uHR76l>bV)agQVK{97!4bYZWt|HB7!hr#HdlDVU!>a>9PO;MI2oN=~Ps@ zw%wU%Rx}MMbyk=z*HV^3;MGEy18aBU2&0li47X3c9k7;pr zic0grJ>L2BGgsg2eq7K~%qWYJ|7T_E?tCey8UK>QogRwe)(8I92{yVc27yt}erd&W zHc33_FGMMl#aRT3eaL)g&TD18k64OWzR{z_@*WZbwC4IcS>*7%DK73obV9{kJo60!vtY8zGD|Ng z1{qLX6e6^vCOkZcxK#Bejg?dv^R?78O&Q_;XA=7UKP8T`D>=&z_VvL<GoD+B`$yiKK1vX_&aHN>e)Xk z*_Wi+>3rS2SViF)5l^>KWAY&`iSky!@#`h!7~(w(_Wq3`uEY=_oAXMi@2bfR^%VO} zhQ<9+{5tn_+a&pu^2n6@VsO>El_`u-B1Sj%sLCEZNHYbC(61|(5?@{7r+kr?{y
    3&e1|{A)|A}!RhT+@BTKa$heeAI?w)VUiM$L-<|j2q)}h^(JlMNV6p@aHK;p1 zHn>No*S+<%Wi5I1y)%1K{VH!j)u>&8ILSsyKR@hje*k~k3)@$no$!vs?%TTpO zf8%)%70%d_ig{C7g7s}>jXpi1wXKII1a`0hTx&l*NXr6ElaNyF1|)RAagINz(=kxy zXI@;r{VSr>LK6SPw=zAa0*e^=Lus9go}YToryE8s;Y_=|TVZ=b)4>EjZ#u297SI$X z#}7ZZFZ?xa>SjX^x~t=8m;CRYLHebPOQ3(u^#8jaejoWyH6^ziNlhu7iof*jiDPoEpA#HNnmbhOxPdW_( zM9gaKE0EpKBv1vuUT_ophI{2Fx6TLCaiz5K^?$7O^O?+foTl%se|h-_-=b&U%^&$k zfP>FYB|$^_uRBWU-vc9qq>L#1cUD={?zNx}!PKdDP^tx%u%0IwCEjFZ7m21@^BsE3 zx4U(OQdi#p7s1o{y*KNwhNIk`ZA*-tW_M!qK#@VReE8`Z31&e05gkwnhD7FGJ&v@j znU#R=UxGAKu?}sSMGd&65S_|1v^;8C3qv~e{%(^QR%|DI zqzYKJ)83XNOE(YNq<)(_^ibh7=!XnHVM)>m#*IB|PBk<+yLTH2IzMn)rBjMe;}r62_d=!Hj7ci9+xJm zz1J#32$Gl#{;z&)EF+b#39qF7B~(kxiPEHrd?*rH>dZg0Pp5N>o5b?G70YcXMqc7O z!ixleOSOq}CQ}0B4~1!%$l3&H@`ws#l`2LxZZz3uteS=>ucd0|d|lQ|aM6wGX13ayusWsCryJTPBoga?3{B&FU+d=D5PyfF~eezCOfhsrqA};(1`^I6eeQGUK~_# za=VDE?bLvsyGfe{_!^F=;8uuWaZ|}yLl~n%0p(5!x;2!Rxh1y(^6TEt2)pF_Zp5+| zzUI*Mv~NFU_<B1n8OCQvZ;B?LC3)jHWKE25{Hqx@C0(RPg5C znX?&}(n$YU+JAiti&b76k?{S3_bfg{_At-S?pMveg~H=+G)~oxb%bL|InIw#N|ZBr z|H+)y$-+C}JDAccdSN^)-P?T`(86E>L7a58O7kt;mw^9FUpLFEhMi|Yxb(w-YPyk> ze0_VI!``^k`~1M2#m{eGqlE|SK1*fBz7Af4^xL>uO=hAZf^AZ07K+{IyUhC8wNX>~ z;>210_wrl4BM0ikI9cSd0>+_aT3yV$5aCWz0A3*Ll&VA5ex6Sc(F_|~L_S8CZgI{= zV%*P$_HOIh6+h`X*^~3-S!rOnSbaYu{;VLVSYY$t#(YwydGbLg9P2T#l6!S!V)TGyA%udP``7$Qhw|ZWIDJ-=kEdGtp0| zMB?pYZW;?M#$0oW$H%f?TV0I3ZV}HN&*N9Mm>|^PWPuQC-dIY!*C(`0(yPa3nc;IV zU_{Dh4r2s))GCdN%jLFov&ZdKj>t5xKL#f9U00^mzblTCpT* z#A*nqnsNP(aW<3ZZ_LOeLp5mUDkcw%YB+~Zj~6g0wi#-B+f)le9|koUrP$BYyW~BO zZZovMBF#WA=`$d_oT5XS!nGxTH@%YBa&KZ zG-Ez=KS!-?z>Ucc`E+m-S6b?B3$xQDG9 z*A=2X689W2MY<8@@_y0^Sq-eXfji$J-j#w>buIiIy=OYn6g)P@$|<(3*LF(A_gWN?vmE& zdI%cfV0ZhE!Prs~X~m=DefX}fh&qWW`xoB1uaimKxyAd)yA)7Ov)X~i+$Wq(iC4Wd zM*fA;sv8riz&P}V0mMy(%ds*yE^_a$55e%|`bk1>NTdQ7kv9BPYJ0p2T?^!O>E9Hn zyPfTTV%{zqizNKipiWBP?7;MtvTV)nyH&UMa4I66X1mXP&bfOwd;SVssF~QIh!_|5 zh9qH^pvkOW{>v5E^WH)F^#y@<2*+)z6QuCBsX`{7LHdK=6}SK&SDUY$t1e&BOU(Dj zW}BDW(Nv1YI-bIIkszcav5}dsdIjpi<>ii#kh4l6$gm`ew>53=>b*N^VK7 zWN1=GfYVg{`AzLWF_3+nBH`(Nk%91y{@mw6M#n~=^T4V6$UAVMQYA94iP3nWlw)fI zA(Rwq&P^15g&J%*S?*uJ9=b6TlJLxBM47B1pj=1vN2^mBp>upxz9CK8N$pnYik<2$ zXCXdRi-!4~Y;u=rjN11EK$=ph0>d3Wz{AX`+^bnEs{$4>xvpk`w*vX%pg+xV#X$4$Uv}0Ov_PP6l5b6i8@1KssqyhuyB^ z0}}TDHNMYfSu{tz_Q#&uC(A$_*e^4}Ar|IWxhqY~QR5~rw<-$*>%Ga0Nup$vv9JnG z5f9F~)%OCdWi!pz39w`O>)J5&2{S9$xuaH-*JEQ3W;6hWvo3E4HK_Y>YU1tH6N9s~ zN^EM=Zo;15gw~zCin|uJ9UBFcoguN@t8x5PCEUBe5^*1l^%ynTkBYH(eSHlFz|3Ih z{eFASg$KFZrJ805OUoeDw;6F`s%Hyncs3jL z+_pV;|0WUmjurt(VWPB#22=!c-)c5)qTR9l9`hvhK-y!Q0e2!I3tq(ZFe@4B)2L0 zkIU)nyLh%Kuf;AH*>11J)X=wz@Ld_jt;1bTO$Yi8R9M_E4(%vG+W$haOO(-`O(rt~ z9d>`xE^9TQhhZ2_$*0%B8*gDShpx|iDLK6b@X}skNE)~t~O*(FR`u2A3{C4DX#_pDZ-44w}+{%C_>^H9(^AV!c zi(c@jH%yX$ z6HhrlKM{5q*leyWShw|W#Xt|Uo!PBji=(FbtL%cvh8T6!Z~TPh#N5<}mPB7C0i0sl z^|kEds7#OT<5;ue@5BpPYz)T(WLk?8@8prvq8K;u-(vNzLawN5*+k{$0JPZEMHp-- zg#$1frKcISrKdd(YhF<#D2(K!spEhgIhwx#{OanGPA+O3p#Z(?@NotK5Pk)~546UC ziw*owGt9+s3i~N8(e7}U;@jc?YHjO0CZVh}#nTM~K5^DGjAoEO>(8 zQ~x;Oj|Lyw<@dx)n#y`!C1Ol#(h6MMt>k``(?U67FMEg$1x}098eL^5sDr=1zGLHC z3)6a8*?X9Sy)%Aj-K3f}Bl0@g*Udbu(l|#M3VmXZx=WkvLMaYC%{wJXWF$tKPtu=Ub0x(ajCv}I(Vj+$2ans#01x~ z?F%(s=H@^WyB+Do7}v6^z&>shiu&Wp9y-S>IfU+7HmI@hxt6JnN~2^qeW5sF`=SF+ zZ<$R9XjxJU9%?l6$-pSkOPZ~x)z}+opvIJ-y}ySYeNAKL$Mot^0QJ`{2Nk;D2W-hM z!3pC2&mHOM@5~$4*PwoA+%0Q1GhDiu3>ft+nb@DdofkItIr=gxt=p~susPi4$_${$ z=LOr%B7w~@Bm3Kr0iOqls1efYKiy7GYrDBgLr zLHhK;OK*%Zld9Taj1=d&+&B9V|Lns?zIS*Ne+G6O)!PpxNGf%UY3!|i*1JO8d)kr! ztu4dGdyx(Jo75U(;uRf2d=@_=A7lr;m~J2eplo!!5T^UW*eZh#)TyAU2v$MSF)f)P zPGDML_t$)4)^!1FIF=L7yOssTM{0g*=64a|%Yz{mq6>7}{B+geGQFWpFMVp04ED|+ z04gmx`-$gR>bbgCZ@(ZHAJ6R|bCeLzb-bkY9w67eVKL7bXO3`gpZhbo_AB#3=N0;p zK)A&g&N2xul+s=K$jzzsh^l~y2b>7upy;1?OUf?C^)ckVvPh}S{dHJ5x5xrAzl}KC zqt0t5WqG4@()J2)d06-ItyVLs=7ApesB5=?cl@b4@N52|zWlEm)IIwp&kRyjJ$9c~mQO3B16CyUZ;mLaxHC=g@6Mt?1kL1lEsp)uu1{8}K@#)y8sTWUqR<1#fFiqaQZs3ARRG>?|+Ry3( ziWqe2B(*t@b`z`=CIetLe{fPUW=s5nnSg@$XOfNaRfp9kbIDiJjmKAUZh%n+(G5Zng>kmz!4o2Nc z7r3pabA~TLk_~ zqdR(~#9d0wIghrDqi)=&O(Ki#`Xp_}MjG(OU9e?5v4@Ev);-}9J|e0ls?hK^H$qHw zvePea&HT4B=mWfeo0hi^QIUc9LgKRx@--*88CM%SqIej$Ii{#oz`eAAcwE&ZJot}yW3}gv47^9b5Cogbt8=Y=;9G?PsWv95>x{IM z0+%~EL{c|x+6W*;M45$S%Md}tX2&$!L3Rwy=_Qk?S>v7LF0aq2e_pHTz4mSvS~DJgYY7kKrhB~y7EO(-B9=->af_8oWL8zym)wyV%q*&w0+w$*P{s%$g3 z&Q?&e;0&XVe)f<$WZ3Vz!#I}>fa5sz8B{O8?wR>z7d9{Ac%{A5Q6LGA*v}tlYsP_y zpG&w?n&Xhb)+{%TxW_4Im?V`2ElZME6PidK%%v!ee?Zt+j!>DXT29kqWN}E>mHFS{ zY5JAJdB%=;zXs18{ zH^PtDV-9TTnWMw^)2;9!mu&8X>d$Q6b|^SF35nHw5_(|{0WjM!b%qUQe4tLwPU`f?c}2=^8zQ+ zbwA&o*gjX>_eYt|Jv}8}!ZTspNbcP)qH{{uGsd5=?@rBHvNK3Cz#DwqoFz-yFGj6W zLwkG;fS*`Yy*LSd#!obU8=nmel-4<$a=M?)LWRfk*m8#CM|JC(h*Y}bP07x4nZ?H3 zEnB06)>^+F{>xt8mhfWSJxdr&r$z}e=+Pgw1p)f7OMSx6@(zTGf3xqPlt$0skh{ZmPVD1ws7cEo2~8pWHDda2W4h{iimT4!PCZ zW!>Tn5?`pFYa`LsP6fY3;?MbwpHmQAEu$~}S-%rW1)Q3DPAPMoA9E8VxA=nHrh@wg z;MuV~oHYo>e@Z8~?U8L80uhFD}cmw;2<$m_;v zbSQ^vmURweiE-taz$e_HtDtX$#99f$+&Z z7OxTZprd!Eh1MlkkF?w(dxMxv;P(L6Uk3$}yICzxP@03`3M*o6b`OIxZDJlW-fXzy zi#GCKU8B`>VOIRJL5h0%x$gE0ek*n}QgLidYE{us;7-|^$u|U(@JhZyJ5Xi}zSrmp z=8H`Bhso2uuK_*9_Ur|Wwv=4f%qsb>m5`nE4FQ#sKwWkvQTF@-g-=$Z5cIcw|4ucQ z^LQ+K+*31u^p}%(rC+Qq-zSJP9yVHj+(8GQJMQl=dZpQmgTX^l1spwo)o^GXAx1-R zYVGn!#Y9`+>JdaNnPfeGb#%PuQJc_GVYX=bB4V63Vf!lfnT_CYvDlCgc3;Yt}}&Hw@J2HMR;;+@y9>pM~Wne-I8|qN=W#R|gDu)8@Jl zY8&afERD^nIXkr59SmnbJJl;I`gy+b2y&MbByqjzksALviOTtW?N(VLb%WgZ#LF%) zwq)Vv{%03kH*?-TXS@vBl^Ihy8LC&`e_3?-?5O)7Rw#wko~h**e^T}v=one@3P)l!!pvi%~_IX>r|_fb14jMSD& z#q8dp1h@S&H;X*Ie&6Y191%wF2)WBYl*VNeG+X}1s5hh?)BKnsU7pT70}Z_coXxC6bEgIwfcOqKtfjhp;(Ia7jCIg% zfxVckr%l-9`dv_{3xnmZ%!og#Z8}+uZElhhRInL5)+2PYM!zv_{LqvrPiZ+angDF3l*eGcBK@4h%aD&3r{hbXB#ocvh7t#!7^RIGkwV$xRsa*zp^ zw&2BRaung1VMxuwd?VYIVQ9U?>?l@fDV{*VS88}P z;@BZU=Fe0a;=#2WOUQdmT22x2TOoXjsxq5S@%sN|KKi%P87{n*&f)A2+YU@!43h*hAi-MIz2u;t&u#o_9i0@QZEb9 ziW>>2F3oabo(b+DXVnucwU`uwhhPTAVj;f+g!1xih*KtcbkQr>C6$jKZOc#S_0$BC zdHul)U?|u=^A;O5TG_S7@_V`f(*iufAASaVVmVnl@_{QVH&L%0^w4w`hHiZ0ieq`r zY^_dM(HZSt3BkK9IlV5mum3#uqpP3Gbv6c@U#tQ&(Z_jK!UyJNAod>)GHKu~TCrWf zW-mW(Ao}Tqkuh_ylyDEH$~lE5Z)75EgN5%3Kyv-^aei2i%GCnxyS$oAKrHwZ*z<=< zV~$aNG6cjaw~&$Ri%k-NNJ$dc#)8>H!46_nuBJtn?ABHD!Mj!w>8~?-RgIc?D*=+& z<_m?~Zi175kCazY%#JT-a=W#daOe@!T<_0mf$89i>1Hdh$TBmpIV0?kVJj9Lm;U*A zdvaM@x5S97&X1~rEYG!4&hamn4_9z8wKFwFBaj;mHPI!MkNyBpufp%>g;#2&+rB<4 zZx4NQ7?4pNoqlTO5~(fp>leK#xMZWDfit|m#eYf~0>F*6TRv8j5`BqHw^#-NW^z`N ztrz6F(-zd+=8tvOs(8;dnti%|vvTLIoCtiV=Su^w5tmc8M~lwC$35mOFnG3SQiLQI zQr`Q0oAd&bc1A^^Og?irS~vas#nhxSRUeF7nJg{$gOpPA-{)NUmm)5e{I6)IBta?X z-@=K^z?jxwoN5ku@@|jg6sS~G52$OK@g<+60~VygJ1uTeoi41T-`M|pwl5r4Dj87q z`X5RWvLB{fPPG|A$!j}6z*+^A%(C<;`GK{tnvmn-9GKGet0t$3HxKZ@exz37lXqB+ zan)?glg0T&XIMr_De_mh*i{+Rd}EJ9N?o??O{IoF+s9H*N0&R&b*V?YI)uNDY6kDw zh%>a1EcaLH)+E8%%#*1Yo5vRDPaC*MLMeuv>VRuf@1+qzl=7g^s8)!Yp10tU&!ECf z+qG%(_BQ_)gi@Wj%lCFzrR3Q2RWD;iq=YtHqL2TLtdqnwWK*QC*)4m&ac79@iW z-Ftok(z0YO##U0m(SULJE33chf+Pa{CzbWKz$5YvC14JN25Kl+Rz7zBD=*_J)>s(a zAjKs4g!3w-U||4=DMHjVWm;CBk?zJgsprovaO?%$7fGu`qF}1e-&k6EXL@zg^ zt&^`bm*lfYFLxA!ae)>M9wkALme5s|idWy(nsx*llG*f{Ny5_fTz-uQ6R&W!*MuRM z9$Eo!Qq5byJ=bT?V2zBa_H-C|EIn(BJ_hDCWVNmQ5D2Ak>X#oBVH0fuml&nn1p5li zemFWV+mVMi9!@^N7XJo(9+AkdZDc#kc=8EuXl_+UD$$2OxE!7v^tTU^=?btx;9-x@-{3J2mOBNcu)$pnP&@LI1c7V?)`JVl%r++L2^s9$&-d$XJP3`U(i zwG@4K@HUa~XMKT?cqE!e*wHMxbjwhUuy;Fwu3zbhn&vr`)52x1avI9^-e)>I=~u7* zeGpc3DU=l7|EUxe=seQ5`xv?VQ^iy0ccBIxdky&J*n3o24M*rjKoHPIW1(Hz&rp#G zQ2G^K)1AXtYj2IIxJ3S`40@~`LvgLVu@{<+lv`FB?;hZQ0J!;pi5u3lZ$X26fsfH@Uv_8eQRy0C)NWFM>>jT0ch6x6baTR=x2M+^9cO+QsiS5!qRE>OQ08 zK7INl+Xikq>d9KzuS|b-l0~a?k=R!_rPPe?9K#!~H!+~Xy-LbQgQ)T*@Goe9LM6cq z8pk;nN4izqF$~@?`xkd)HWuRnpsB?d9EDXS2wwO`X%Js?KTo2hACx!t?iy?|S;16` z7r{noElp8p6sCy-3RIIM5&uW0ZDo;bqT<(fY?u?2_7E3sciLl^;gq6H1CrAK7+GGC z6!9pa zvM^&n%DieRw%XRX{Nlwmizm?)=H7gP#7wAgnBoY|J0l|S4lG;aYP!i$jIXf{8FqEv ztbRO9)GXdxbw|mh>q?%DY29iqH=638U#nPSkD?fsD#fW!RHXafEWU}F5I}2@n>Fu9 zRI-D3s{s(t4{N|L0`DVY@?o!YB4zCbrJ8z~*-BtQE;U%5P{InhCh3 z?dgTi*Ay*@n(OU~V*J_Nqp)LRQxe#GBQR|m_?nw=u{`Tj()&B5ztM})l)0m>+zJMr zzGmTolxl&Q7AuD2Lx{yF_Mop1KY72`2nBjV;@eQ(b~{UJb6)uPWHbbm|Fjm0{UMm; zkN1kra`COr#JX&M&^2avkkG?BXku*$g&h~Q-asd!#Jr( zJV_2_gw|997v-UQyrrbNvH`~U&B_r0SOB??PM*)a#d7YEtd-R6H-IsSAhlw<^HHzQ z7cAS$SpN*$L_Qft_|@X$ar=XerziT&q>*s$?dy}lHA=*v&yE@y7n}@xw--(FTUxmf z8S_GxlN1WyE}i|3tV)lRD~xoyko;gI_j>EUE~m@$w|2Yer=HwVPaqj%Iwz?e8ewE*sIVgm(`qO#p5#;c!GTQ@Oz2f@ z`%R+g>Af_kSrhi1IHSY)LzhVUjXj zoJFN)w)CKB+4svQ0}D0p80Zw~e=Aaonk1StJ@l{pg4Aq75}oJ783(+-vz%>DcwH!= zdgc?7BI&z4nsMj&jD-8nvd6;jWoZM+3tjMk+0P52r?`)4LT^~K6vxoYFfYbVGgNU$ zG26&3MqQB<;)%WaOsFJ*qp)=majjy5JD$;aV=0iMPmVWHE=$HSRw65>H2L073P;j6 z;G`stl;i(@z5zj-{DJi+F;mak`j!l>0tN)vl#t&w1oW>sHwvio44L!g5p%TXl?!qK zpDleAmNGzVtB`qHWa~bKTO?tUNgt@W+|E^nwaH+W$* zd*%?_MTVxVIW7ICqA2d{PXZaN>ri&QLS+`nW>peb3eS|sHI?#r(D_xZ^+MdI^rbeH zLfkCT&Cv%aO?J@;;7=uVrsYr9TM^e5-ceQ#vS{_dJhXbpK$hMeg4Uf0?O)TkXQFHs zOJ7;6JvvKqR>K(zC~+tnZ&_@aN^a>z&32{Rq-{{ZYw- z^2gAFUX@=sirw?C?&Z}^TA0wPvmMtPZw7L?!O1S{%}z?dtoG?#T}H|4tR5rbkqP@L zfi9+VF2+0WyUFo^-W-T)woGr5tb4t4H<8%;Ka%GoDyxkE6EL$clohk_vi4nsZ;N_Zc#0&Fuuq@pa2CR%k-V;kRmG zJolfw0tV-b2Iia&$;zyE%ah0NMt1Ja&=)D}$?7Yu{JQ0E{c-#P8b(N=FMUQh;$%d& zN6$T|BAiMEEi9i6W*0>wH$HP7{i-Zw;<%x4zKmCeOJ!3<2!mE1XenR%7YPS*$@l*X zX{+O1lCkDCn`)BWx5WwxK&Su-eMb3xcBN)m8I-zwMBr5 zSADK5{>sHGfN7L36-$Ga+(eliL|W8)sOwBQl0b+eGVL1dRT%Tf74G&;DuhL1dPV?) zHcltd)#b;Og9OamaBS)Uojv+Fld+XeQ;(Sxn!Ndj%e+PoQwYEmwivsdX2uQD!@pRJ zV~aj6iQx+qTuNAU(<(tM*G(;v9;%^BNwvKcrOHeV6w4_x6GCIgTL*JBE$;>YA=cvJSQK>`SS zjibxbG!acG-!xFhoZW5~&~6cLrKWVI2ovmTlyHl#i<#)`X?3?| ze}R&|s}*y3bw~5nt%JMv8xQ4us^L_Xg(ffX6X2Kd_xtog$|~|>tw0UW9|md|R93h0 z@71~T8`-KBgHH=|U~fet&d1GhtY%ZXJ>RW-p10fxGW}AXMt;v0Uhq-Y~ryRZTo3jYSn#fCbqeaho$+^ZO=rI`VSu6<>jtYuik+k~43e#qfsq5ykf>zvkw>VSK->8;#Y8fok;I)`e)K3~izdNiJ^8marPC{^grS z0ew_ZnOoB=I2T3&svb*hk>0O3SrEOxqZLqe{@0-g`wqhGm_G{V9#xhj$>e2T4dz=b z0`*>3=o25bfb*f)V;irw<~Od{rqqgIF*uq&O+%wkD%MS7y?T)gD!`2O`%Y~%)@V<( z(fSS!_wBqloZ+BMfl*1+_9w|Ix=uXTNX+<@x?zmOm=<{}?h5qWc61{$h+o(@R$01v zC$A1W{nAuxc@%k81)hXvt+Nht`Lz+h4qX-c{v1bpod2BpB5?RQl?+9}3u=PkVkFId zC`k^%QnmQvstxn^CJV^r5~ZZP%6A;)B4wTZTcxhqonRsrz_4jJm%KMvH?It?X#elx`n1W42)G zYv00^gQP%hg))lAP7A0y69bUecq$FLAY&HO(K0KRiLsIpbBi?X;F2_U129B7wFGaN z&GJmp*CL0z$J5U|;&qp^nHv%#VpSWY;cQZKC$z~(_K7*1$+PT3->7AAU-)=oh{d6q zS+Wsu&XRNk2zg^A9LOShQh{K1M*fK5Vl}3vg4z2%{p4+>J>3YAeJycj&B?LIpxG$1 z+WXs=eBm@Fq;helHX96sTJ_s(N!D?;x8#4He%K-HWGUlyn z>B#+wT~edRn&J1Caas{{(*iAfqV^q)r<^Wu@xGB>)V2Q6VmWU9d9-Ys@C?||oRtCO zrTw%KVw@lV2?@dEo*K@m9f1T3jNH`e4G8@~HC8J@@=~=EC5OgjK5vb)%0YU8vyE^TLcqC!o!JYODS?&`i?*4Z>`MikmJ6F z|LWi(mLLWvneF$6Tq(+be>?iAu>X#$$PqFAR!9*sXPFc6r!~W;>}1?W=`kFyL{YA~ z`?iNS3&aZh`v(8ZOYWp-{a@p6tNvf}@+72bSBGF)X>U050xcV}xMOt`vh*SmQUh-E z=2rqH9@K+tVLe*6p2D!RJ#k_j_y5^2U)2suJn-YkmSE?xe5`cPSC8rv3 zNiGRhIZN7X=2Sdo9ZJ=fA~WmTVtioHsORx9;Drut)nA!){=t3~fHl*1?J>_a+2OYe zQMgPFib+G+Mj}=3sZNvSYNS0;n!h5=J>NKi{}bYY+%HIdsL9LjGYS1dP3weJ^R|SX z&vLjwE5EbXIVK_rR`8_dyB@*=Z_u|2x9{$BDWKnU#Supv01+pwiy=3hH`(EUyD>DMkncTSD+jg}|7Wr6oZfs{%TPA3)fBtX;YqsZ_{{-}K|+w9^N<0!8uBoWTNIk3jj zPR8BLgeJ4cSa!h_=ql~&qg*U?`F)RYW%Gm=eF8qorh@_-Yrm~bxw*39x~6l-vS9}e z`SmXFVihXZY2Qh&h)}s7Kb;H{-6=5UzG5`m5G72bH{!9>exFCynE50Yc-<0hxM;Pg z$$!<=v>>E;fBl?2>3;juh(H-vpw*Q<9zpS z>k=>D2WGzb0b*-2$~-GXB^MA52PBu#eOK2vJ}y`%fgYaH^{b zWdJRNU2@;p@bP>(R9%5uy#OTQMMoW|Qn1gUBZ+f17PgmgF?LiU6*B@Th*OTP>;Snv z$Z5K|QawT75XlW`GN0hZe>neRQPFkEkgwt9rsa&0rBA>RG5c9-d`!!d; zz|&#gU1qxLTFb@=j}QLVI&?beUJi6_7-jTzd$W?OKgw>r&CqPUaTa^cI?}s0U3*!8 z%DX9)Tt370)YK&h7Mkx#p@|N7l_!?rx|t|O_WrkA)vV1=WWwin zgZU+c4D9StbeWT#phHs=zk{&b?{OtYjHa_TtT@lz=pVUGdR^c;Zg5~zcErHpOui>) zB;iLccovl9X~(!-F>YmZv)pg-Q?%mdY>6Hv8wOKXzyRuLJTw4BXnZV)Up{)pwoJLJ;p?^&<@QaunYKK_;6OIdJF+R7&BbbW_cc$sHobi})(Sj+E#o zj3Mivqo02H?`gPLPGM{-ieHEUKfB|Aa-$!ye1Z{26t6b6r>>^Y|E#Z>t;*d564BPu zHGMCS&hd%T^Ik{BcrN~ku^&Yf&`zC_ZniU8x6VJl>RG0d)IdlOMMEz>no4E^88kZ` zFdAKfTDud>V54Op%?__vjKes$7R29?(OQb*sAx4!5X&PSH1Rec7bB!5DD2~9{&idN zw<0@~L;ZkO-6)P0(m0`L00QV`TsJzQ$$Dg}O$UTb#L_|O>!b`pvUq}^{BxdR zFGRTNc*J{+T*y{w**&@OVLKq)YBNJ4;6lK~8=!%ruZcu8-0(zt0!HdjS1agVGnVKi z)nB<`imW;|23p1=JFG< zVDlzz!-!3dv^Qa1O(LGV6DVfWYWwq96XLh)lBQ%V4s|sKdikF^50Yo|4ROhVPu%a= zQ+a%pRB9RzTBST1)|M?B_xp?_Fy1sb8D;ov95BR?{FeFlVU_WI0{PUa5sQMf0i`R) zn5}q5mZlVz%5+-$etpgB_j@iC5UtJ7UwrA720$}>r^e+8BQ4s2b@Mqsdfi{G&=RLf zd5lJ{k(8vwkK1$cJg2m4W;PKR4CChhf}RY6Kn}=+UM)}C>}~hMIh7%E+qumMPOw|+ zY|O|=?)zlpxv_Mqrk#Ns4BQ4i9k))yj=km~bA<1O=SsCR65t|DXW&UJ@Q1{5^edD8 zJ4xcE@y||gy^16pv(3LzOu0Kxp@i67@F^jz741GFp0f4B39d@#*xS$VJi-xgwQ^sZ zH+arGl5+ZPU5P>^^*LYq_e)$cyrUua)b0cr5vAlx$t?O`a3g51o3*L})`q$Hbw4L% zmX|X#{{17+bjgAA5%|xwQc|aVZ}Go#zJmrS=L7#M=gSci|C#gS|C#esdmLyJ%|T8; z1gB!&&f)74QYZU@EZJ1VLKh{O+_weX!4KqMIW_2~^r}m$cV(>cW0_NB={+`&9auf+ zCtni#f#IOWsuE)%4NB5u*Q<}laG6zZxA+yaEHjM{Lcg<~T20VMc2t>M(MW3bE7Xi2MnH7$XK_!5wqraKD{Nhi#dJ$WW<+#%nUZk=ASkGVkyvkwBe#81V{ z>Gj)3(~4AadoX3ec+^ObU8Jq=zuhwa_l8;xWL!_hk2Yi&NjJSp3*@5}{-%*Fy<(i? zM?IaUh3{-)d2USIm=%HbBrgv45U)iOCF_ zM$h$LR@A(!nbzZUq3$yVTi~v5Ly=lA7Rh>4gPD0W2B6336T9{VcEh#ThaLR{Jni69 zaC7IakJq2nYFIo7?S064h_*y4=VbMlHZ#&yl6lRn!lf~@OvaL3fy}N}xu{RCu$_I? zF~Yg5H%C!!fl|-!cWK~2yO~P{s4Hw_v+t3OpGQ1=_|H%=pIK%}ye#WU|4Pb_hp!6n zV=WjR?Q?5v+hSQ>H-DcvZOfd`I>or!0vX!I3c}QYtC4s>My20bUWq_R(lLP zkEi2Ap6@b9D4qXdTOv2w=enh2_~(PXPuCY-KcT(7Z^2WYzbE2+z8?ttAr<34yij_a zu;seZ74tK$-tK^>@a^M^L9{`a>aVh!7a{8J&Z%GD`TLq_%OyKf5dX*N28mVFpSsu; zPR32h5WJ}X7sn|%?}9P&c;4n}aEmuuMx$fW%efXRuA{*QO~drZJ>Zi0s{uDC zJhBPm3%YOG7z|vf;{%FW)EXmsNM$-z%{y4AF6&>fRb?6I_WzHuw~UK>$-0HlA&>wG z1Z$*mcL?qdjk`mz#vy2EG=YOQ?(S~EonXN&!98i*HMrBab7t;L=AGxczxOjA=zrDT zRkhb%do7}+i(~BC+S*rWhgKIBnk7o-Zp>S!zo6~cci-<-4-1sN@ICd~cbKgtxmoH`ehDgqXGU2v;x4tVu!XDPSs7>|XM zi%0@5YrZIl)ExVA-?><%WwiAZu@Du^M;3`g9|&HSt&X&Y^)FtWsn1o1AkD+cRF_vB z#>^318F&6qhcvMW}=%Px(FNi7`$BQ+TUEqPF-?tnJ?j5=w`4DIF!OY72%+oEr%FL=5#auuPI5yO|D8PB8MCK zx-(&321RBXPeSn55GLVKX(31hGbl%1mb7tMT*kFgLy`5dAW_L8=F(AWfY08IaK*lN&aO!)XVALRcn$6yx2ha1udo5QgA z6EWo?&+4Cytscoa0^neb0KL*pWkeIyOgZkSS1-4BY}z4yyN4-_iJ-?_z?8V`q7Cm zr)#d!557WlDr8@j-?^oq|1d`6HsHUD@?V;J|5P35^Xp^yx9Y&5do=XkQKlRm=f2F=IT^vm%$XC7}LJWXR;zP3)D-!cOV%DW!df_=tN0&Sz!13a$E*r10 zbzuWRg9gWt&$nC`3?5`sszQTEkNOtdI}_viAFUa##Y*P0T=80mCv3~~C&BO!7ergy zgPU1`P2Q>{*HcBFcU%q(qNWvIO6E};!k^)F8L*8E-7bi>hAHfUjzppJHYC?+IxK}k z<(UdSg(|KJfsQ=u?cB8T^f5#E#I0V5A{c0qE^QCn5ORhc3J%1<*ke@ zw_|h)MUm1l3aueKZPFCo^$<^)6G^`QckzI2I3UAewK$`oyH2t9>M zKP17HPwmePS?R{k`a`ic$zTwpP7+d?b*U@xMb4A(fqwP=CDV?X?iMyw^S0kbN7jdQ zaI@8!b$h;PIVm3q>WEL?1&?LxpmS7k45XR7mrqHmyna(uEZguTmD!=(sIB0u@TbyI zotIkpu~-g_iv)7bB9z&Csr)@7^RnOdyX!UK`e~hCna?p8ZUKzwZB)lsBxwwOVK`KK ztC>zIz<%HgnL~%ZB?)8=!yf3CVA39(TD%+Unvx(gDPLg<#!rZTIw0l%VT9;d(-Gke z*im9fl#8heRGfXlPD?hiAeF?zz57RHTiU%Ri7N8nMM2vCFhYRfxc^I@9wUe%%Ij^8NGsS0a$nV0!V#iC_t(cT z5ioHZ7f_#6TR_bZAfi)soZ zoYl+7A4ngXwrsA35bUp4^dW|@4qaToHl%W~&t&YV%Qa;zBx~668Dy3x#NFAKUpjG1)hIrG z+#zu0_Jivr-(3Sfb=hRS&+)Zq*ff^P<6$-tbuR7Fb3qusMO>2`Z+d~lqJ+6?EZUw> zW#Ly9+D+3d@6Y*@GMgP;4lWRDFb8p{p3Hc4;9rioYa`dn0vY!%s^Zyfcj;a1q z15Zch*>dmdUj&RT`2H3mH{_ZrTRUdTW4}1yc42x`0WD>;6QN_3L-`Rboi}Td+(10= z?@9&F87-{nWwfzCx3GGEll4cL2_Y}f3k#)dh6OAW5vtpmcq9%UH9i|Tz^sMMVbhjj z-wY4FPZ5LuLb5ZXfRT*Jt@gawWNvqgoV8=mOy+hYnl4D0_BxtUTaYK~i}vxpdLd?CUw*32itPH zOF%z)d$ly+)wu-SMOVj3Sfe__q?_f*=tzS>+Ht`;=xtQ}*FztkeL^XsJReqIN{nI9 zAF-wWcBg86Eee@&Tw$^eeHYU%WT3O}#cOW_RUp~wCBVIkktL3jWpWG&vX*o290;hX zvE5#?CsWIdgT3>0|BxQ!xc|y%ko3FYVO~*gcZS|)qBBRE=_C!^?iLyOj0%Ni+?;u0 zbNLxrbs2$q{}h+jA-KzK>jJ(PKyis3*oK(mI|ryZCqCy_Q;dme(9@v+7s z(pgq6%L3+Rh`p8et>)teb~Z8Y7DEpzIdF-t727-~zzHVXygSr$vn~|Tzv~^^&>^>e zK$YxCebmy-V1Dd_`68YuX)M8Tgd--6W?H&HTXR}Kzuye@j-qWpKl{{>@*uZXw7YDw%K*c z{AffF-jJs-q0pyLmv=+;2$r@87mg1Rt4_0DZD*rG1IcmOZ zoaq5WNSV2xOt#6!jNl+HH3J<#xiHAV^Gg%P0voUb@4YC=-Bw32`}2JblNr zFVE|7nbWxRAm9L&%T2nCYM!$W)Lnn>4{yA1Agh3_ZxWGO$%plwGpT;T?8u?Owqx zDuwJWU??Fkw!r^M>A=+}a{ zEiKl939UkZXeM+AXNKVW7McZ9SjizodhYPRzZJH4ow(m*kdI_2qZe)=sxi+vWah*H zXl|NPyi=$&N+33YRQ1UTNV3wROjwSJn@nJl3eqG1sC5l1ptXTV(psjtu6bxA>w4Y3 z*0WB&P1JBr(iqW@Ny?wr__LTXMf?vYOKNG2v*C+c7-}w#!x7 zPzSIa%YLQI7Ijx#BGl(Dt#Db<+UrF*Ws!yc2(_gn+&a|<%im6eu^{=v4!qpmh+p|t zeJ37L6;`xj!+eZ5YDq@Mt<~(GoHKgR;5iW~;ovJ1x1rbqR?I0I&gdGU2r)Le z>@up^gGB06^{6;P2K3Y?Xh1ALx(3rC_B#epjH2Zc zgu;GG@g1oLz4@Jh;^HFIU&Kw`${#s9>rF@aHLC`gBX}y1h;czDnDAS$VWRdjL%eeI ziU+O}`6<4E6K}Sgc_NQLWD1&X=rz4bfPxQn)P|K#M)8t)m!?J=4h!tJ`)jvuNBejt z?0?EZp59M!>ib;pEXXFDLKSdRyiRMJ+8#`m#_;i+P!ukF`OV~Y%GHRu>f@O!^f1lk(>brp;{+M>z;_Dk@FO@eiX>EC?Qp~k!^S0a(BzA) z1&2jy+gViDFlas^P>DNY`EDV4XhrM!s)S5;_@ zS55VKbYg~)AOKIB<-OSqr3yyW<*G8WKI*#I)8<;DUtt-4tlu^Nr3$w{On2n1!y?0+ z2!11?LkaB9!?UGnrKgTMGIK8wgEpdQgx^!@Oi_n6($6BiW9O73Ns9<|llz>t!c_{_ z_{eqed1YSdsBV=O`Ete66^eWDScV3xiN?#a6r6^YP{Il0lVdd?MJf9JQ_oAosXikH zimnR@ZMZ|E(RZn3`z4YMp~;dY9A47TEW(oolb~9RE(1Ewl>#z`WbtTlCT54Yayjap z2n{A}GT58ebWHZLJFl;9sd^(;y79vdA>T1fM8=Ct3{#Jas7&A&07lC;SSUDmZ0|O7nC_aF zY24XsR+q1fV{Tc#yIq3H_0wcN`!(a8ck69C$3lm0Q=)3ejwgtlvac<=`4qFvSND(_^g=-46Lc79nS`=G#S-Q?8Q+QLx7up>ezs0PAe{5mA^b(Emc=j=}i zxh?8$n@L_5lAB`~DD+L+nzS6&`Zu5J@ZfQyopGb+5HHth2Q5 z)NrJF?m3OfQ>tc?O#Y=+y&!TAYW#$sbbga(58pRu57(2U!=l(4ZHvB^)J_cG+@NwB z38L4#%w(OL3p`ujX z5g!8IBpk0mB2E%(V1K|{?kB9kw=VngbU;PIcwXXYYk_1a2+O-ML&YdgHc{J{^lHd4 zT4ajcb^)UWC#*0n3E$R+v1uykQQd1zOghVQ+oV?fY8;X((u8fcM3f9x!|Hejl#mQY z;8+Ud>WniMTo~R6yQl^Zpon}Sk6aZit zc_tkTatr&6XIQx0x2WkEhhTX`a|V}bJ-zw2tPvuucHW zR>{NwwHc;tKz=UAGHth^sgzQ%%w*0!Tx;$&@vz5pXoy3z{|S{!qasVPdWXzw!Akf1u! z6qJl~2YbRVgrOK>Yg11NetHEPO_+1OuYB6XHkHi+&|rIkC@s|(kp`|*)q59{2YrW7 zJToYZU1%r77?NDSd;EDkXJB1|ogf=h8yXa1{gj6t;d>kBo+rmnR0npzSD;rnrSG{W zfJ*gqm>ag3xvTwke$=RI&h7|KP?V+Rg@w3u7Zp-ciQs^^oxCnrjTuCcXw577aflp$ z9$o4tD!5)mr+Te6$ZNCrScb;Awe}~7k>!D6HGXz5SS3b6-tWX~yX<9Wl)|*gWv=B4 z=i?o>uoJ{mml4tn89@A(B^d$fdm?j3GEBwSggADkMaRMA#c5UiK>Jd*e!Km$LW7cn zstU(DyUNaGcl+x4_Ij!SuEjr>Hxc#eC$$fDJ*HJ0WA*}NcxBaNZqOF?y=(;VB}9RU-eHQ zVj{CC<=hCgz5Pt$8FSM04L;QKEwbi4Y#ySF8}tD&0yY5E{{&!YtN0?zLrNZGkZ!-= z*MY{{*_M%O8+H8||B#`BVz!tkp_xohgmU$`U7${*P5ByLPX9^0& z1mHxV)S5~~ppav;+{P3QhQAhS;vRCj}pcBJA{ zbG6BTm=XSpg`7WLB4Xk0pDrc;s{FcqkRKTjd4IxsgZe@rBZ@hegur;_XkX>9@+Cqi zNq*_jZS{Ci34j#kBdr=7DS6QG^lR``!5MaEcwXb{T^evvGLez<9F=%da|c)X#`4*q zNwOrwO+}@VgB16~rKM0XR#-drguCdFUH_aT-e^AC*w zPK}?dB7v{ru=5wS-@6_05n7tGv3d5uZFNRaZwSjEO5SAhdlaFhK^ zTX>iQRairnQG2+6iij=8PFJ-+mWJ`+q&+ysm2x!u<4;nBSYQDPoo$<=xxc^10b8hg z$&n*Vh80P6o8jtIOT>Mla)r`7ip60gfDWXH3hj90%lnnQ25X=9C_7Gk`2@wr`;PXk@+z1QEGq8k9>CNkits{P{2;?M> z4RMmkZ8J%h9#4FEQL>=K2$~{3m{5`M*|IplD_)Vf&y@yEq6FltoS1yTLt|#6jH{B zn#yFr|AeB+O|Bks(xIH>;iYj}@P*T=yGMZViih&ypRtM2YIi#lV4^srKxI>fY+1OB zp#o0He6=YC6D=sxV$nmhq%$Jebx$=#dP9R|RGVTdk}9E-^)8x4y-8|Rg_XFeW-T2C zzLkk^wOh5R{hWuws8;^A$R${?X^87=vi##Hn5^8h92^1F{Dkk*xNbO1F46h0>q23f zLX;CO&FWG~B>kDw= zP_eDd_`Jo)gLNi;^>R`6J6>A;7iBmZTIBmKkq>wHNjNWk`o7Ss`8yGTiG5>so6$IG zg#%W^ZXkg<@8LiBawKrqbpaAZSoJW3n0>uG2)8N7goFyGA&gR6#C4q7OS&L844JWX z)%{srimb2v-gQjC!6MH@G}0dGWQk49@^wM&2?;v|dLCZ-tmPxpeHw96B4{~24A1Dp%$XGRQqLV^UUG%|0^1e(q z*;>ivCg8b6y|O@6I(e)pWc~R)>Y@(}v9;oM5W{-B5uhv|#&UC*KZGs9DqTJeQ0Z=? z!MLXAC7GV%duK+(QuiXi%%r49SW@ZpAqTTr^rJFAiv$)v^Pwaa4p)M5#w(KL?h!_z z-_f;yoU#AIp`wGh67q{X zMx;qIlE}!Ff2hNmuab?ua*DT9YseQ$=pV9a%gr$6aUH}4xQj2I{iKJ1&a?E*d_GSD zA@$CLvpErC41NA6$5GyuN!1Vh$fvWr&^noG1shGFGpeHQX4^{Rvs;WaR8-jVt}j{Z z(GUWC61rwzuKLJjuVTY*J(D0P^O=MZt6;4>*GMur6mNfTs*1xs@-c0F`+H0E$k?~G z=985#FWsp@6{f1o{qIwjw4ATIV%{XYP-QU6r352JzVCGRbMlUm>j&ZCv`u)m8c+EU z0=ZZ1xBk~-E9Ot^;|rHa%_~0StUC7(&n8ip#bW-@Q{c{ccc$Xe_ioCFujm6FrN^RI zGc2&rqHy^=E{;d8J9662xF?dx&8j%@5_H`c<*D}vT?m#Qi7ztFf--kV>AW#QmJ{dY zN6h52A(531&9^K?4-6A@*RK}WV>6WSH#~PJ<<_G@zS2)1?jCE>F!`$+RF@2_1X>Sd zUj1T7-z)lJ54Pl6Ir+tpe2XErqEnhM3mghc{;Nrg z6#n0DcQ$eq?G_R8z{V-0K^QpKZ=)_687yM@Wo%0#1n@)6BM%_HgFmR1&=W}`op8LD zho0`Jm1O`fXM3An_ zMUbM^y}QNSkW0Zf>&dj8wj4+&(?qbBwN^XQdEm50WfxQvu^dUAK1-Yo@-aX&^vr!c z>WM0vh;Y(RKN;qejAOtMuY@9l2HsC>{a#lG`t@eR`>?iYbLns@kL@3Nan$`O)KS~7 zfSff0{=V;d&ZjNk9Bp)Y0_HShyZ{FCz3X zV!=+PGVn!8avk@Aakr4T!t^|iJ`82izlC%rrLKwXWDQb9bR30bLJo*-RG*Qxf9IrP$O-ZUoTFxiNO z*h)SV5`i9`72J0*zZRM=l4_Cq0FhTq3yU6j3pu&vjV(L4m~WYyvd}P%>A<-mdEL5h?$5#W(B6*gOtHBz5KiTRIzzVaVO}|lPX$cV zA&)P8Z`B4*!vm`^3w?{k;io%Ydf>DFt~UOM)2}8^%Kr)TF5=N7 z=q<#-J_FjDb>A#x1)+f=tn_v|2K-Ry@NHV`DjZLi&7$37^vu7VJfJ*XN4s!OO)^BY z!M^QuIhLs2MoTWuhHCj&fM1WWwgj|Mbs$W&2%UA z1*b1-i<|U!XuX#|dJVC|Wdjq3ir)j0=;5ocFx{SVU~@>%!wb{AnwN$icsR zAl>Yg^?Jo8wK65mx{s$N+xp2RdBy!z07%LAuAa_HMtGAj4V) zU-p%C48&tCTq57bI4mIQIk8n#lKzsncE@`f&xj6uWfrFa0&2?#A|1M<$|POmOlVTt zI#{XP2ADip|dj2aFNkSGqiKbwk5NDS`D%GP9WW6l$QZnl^b6Ge((Es zBlsEFf4utd=QZNkfj*Hb;1RkYDo;XMP(^91IU=_O!f8-B3x*RYACtISaJCeZ@Lu#p zhSmM6^88y32wmCp1lAV7>ahGte`;4fjpT%u^~Pz* z5ZHXKwM+6C-v?r_k{1!!@mN*;Wj`^7a~|eN@nhC#KHbmi;qE|vW~*x?Dg zHDuPSnw2(5%R>2T71A2Kn`rCbZ9QXPi$cE^QJuxNrpXlGx%L(i4k0ytDPpCetpiBY z)PMW`*%J%Ip8WDEdidiJh7cvr{YM2@IziqGeL+e_BIleZ9STPV{}|!`_xe41L?aQH zSe1)K<|(d7b=m5OpfG>(p+B?iPM}5Ewpi3ySBPg1Jg(TApc{#!a(Ys-n`RiwXZ8`y zM7&Oh3y`Hch4tSstA|S(CBM>70MDlaI*>lvH5Gqtkd)bv6yj!GiszWOD&p5J`BCY! zxSzSp`wNJYr!(tw z_h0{}`gbFc-mJeDr0Wm(?fJhJ#50zn7m9^~87VhOi3n0+U?xKi^i}qZQ!s5X*A6o$sCQ_uwSv zIeXKZ55u5-TfHi^4mE;lqw@28oh~=llzuc%%8f{Ai3l>~&kZ&MzoQZV4{!JX$De*- z7@)sxxODyn4j|v7X_cx`h(TWxiAu}W=1BSy(4S?r)R;>|;E9CL+{A8(MZ!6Yg%@Hs zhXd$@nu7RUDSDG$Tl2Q>a+HjwBIK?!1)QnIlh{mv7^weVbi%*k5)?!f7XRa4nRX*! z7xb@uvDxAuZ%MW@hSbQr{O&HyzLrdw4*HSaTK1JzlgorZ-kl!2;GpUarZI6PXD{e6GjHhRdSkSI zx7{H8^X)&8p0EE}B~m^XV{qw`K%vI)4d#zAE#U^##8z1fCRc9Ze2Hzp%2@~WhR(aL*!nsTQ*gK2l` zkIw{tQj0|(WeI-MRX-4`lWaB?z8kk4jFjXvXkg?q9?xLksMPYl*w89`1HXh3Umwr; zirDV+eBvwqTEVM}ek_~zPT3!OeEYuqXGQ1uOKY~o(%2kPU-4o0D%;y?$+{Y;-fWWJ z#LjXSLm;s>h&yk;*F|_fd7RrV~`Feu)}qy zp=`7yDqGZM;=&d;EEd5egzwr0f;7H&#qQ5!2|+o?8s3w#qYKj~Y)oXHGGzCq#xQhz z*k6Ctq<1SB^V?z@(|Vx{8%ZTC7}%7@`J`73m!2YS;aZXP?;1PBA)ekAhuBwNwcW+c z3)sNl!4mb^OjnAm}$aeOjElIY{XXq(>>nyNTFjhtM|KGMA|s zwYxTXS_bjP>b582!A}J}sz@ZFkoImLWKT>4AX}d3kC!L3)qZarvJ|zG?1XK~!k;2M zv^POv`{g>vnD|+7-J&QLhYBbFF9dpif?CBKx;f_{rqu<^0?Z9&H+(W+x zlzrxudx%CrEB$na@K46M4_lJ|^O4v3?TwiIe*ZjWCX@>8Amq>hAP zQ-cg1qgqy_)}1)|re3XSxe1{cM$lgE7P|u#J-*iUYdX~|L7%6WOw$Ft8arBNR5BX7 z;>JrO7?(q}tL)xzgDYu;i2@0SH_#ATK+|i9G#U8t*BjOEty){2UQzeVySg^*1}Z^m zlLu-+AJHTO8Q*Vp#S&sG(CVp>c6h=ma1-CvQ0i0=yx6|ibv%{G-e(|q^*`P{+W(62 zCCn@A)P2+L5KL+X78`piiBNnl%nHOl4#Xfc2jHdtERc(N=9TwAf3_x;2yl>iDG*=y zC3%agi6ph2uKWFtC+L-+8cf1l^gkTh{~velzh51*f4~?2?ic)%f|Z9bPA64}WI!}! zpbxJwgHmHn2KQoPMXVi*8RO+sHM4GgtX>T++3vX(RyJMNHC4ca{ zZpi0z#sFDuV#o&zISMe9nVieya@9ZC^`l*uX{BkVm6PmhttwY4#d-7C;?XY_bGHVN zq-!(DCacUxvkLIAFP2;G&9S0$urD;KUN573iu?Ja$Vh}&#Sj9Ut0C)c;t9KAFv-uI z#m8Stty!(gVb|4;ID5Aq9nVg-$*Uv${^P-k=w(*c|MtFG6@$K_ z#t+hShVh4^-kMposN@gEpfgG~@HysoBs^0D3d=hi$@)AqanD?cTlo?~ItXx^bKR2n zM>gyEz<*9T8Xzc-)QFn6`87k0wEXR$D)qN;mS7|v&-c4({@S|RB#b}v7vl+xB)MNE zILOBE&o1kEtB_`Svsp4Zx@>kGMjI?S1j?FYHcz2CY1wJ)7gVc6j-jv+OK+*u`ux>y_Qf<{RCs zkm8339)^X1C=@txg=ckrMR;uwgqP{us+$pNOu9c>FCUo$pw2{JoVCtluzh{-?mmCX zrCc4D>_EI%+R@4TbYA3ft=g#$^)>1w`Lq(F=?~9ZY}=Pl3>Pyj$3$;rx=bGH418UE zNp(4W<=D9SO7G07D^MOv%6sp&&_=Mv_ti^Z*%Dx@xmceiZ)!;oe2;dk0q{in$c_2_ z;MGvFHo;w^rUDUI3(JJ(c1qryu$5Cu5oK#2Uz_CajMQMX@%g+v+iB7d>%d^z0&oaN zv!4Bg2#uPe5TIdQCdSMfpq6YjW9~|0d=bYSV%D6jeeeT3FJ~BzmxmBmw%ty%Sq5y2 z{r*J%JuT*2fmhYJ|9AT+yZttR3R*VoU`gF9GJI(p=dAuPgmpR+qAS}AK_mCJa2s9Z zPpKM!0QG+s)%$gRkhtJE#_uyE8Qgn2U$?=p3l{`fY(_FDgtEC{ej3s&nTXmLz^ETW zT^~wqCS0`NdzYx{k8Qrbxj#}Sn5-Ouex^Y(swV`s;gFyoLh6*t~=Zr%hO~pQu5~9P%p?dBV(Kx|6CQH zvJ58uo<=^#Y0f#~x!~HpP-Zk~A*jUfIuau!L-Xj9`!27{V*>))v(@Mi{q8=mv4ndr zTa-1zsogGgXco$11hG_DA{bTAN*ZGieR`v5Qix%`V(yyPJfjh*e3i!Bg)tENaSH~W zay&1)RMpQC9vWh}%6*XmhDTDZIC@aZq*=86$v>q;LOZK%gd7$+t+X+L2M)~?*&P*R zn@uJ2n=%W6TI@OSYf1>11<-3wsn}zBU z|Jz;i^qmtWvNr@<4P-BJ>QxRN@Ps#*8RV^*Z=DNqGLPcYqe05G>+A z8t-e#o!yb_4oy@ZSSGX z;$KO(1LTJ9){2SDyKdKU$rwL+f(#>_x!3L40T$Whw7z}h)Z7|}EmwrJS$;EUfK7E>mgsLy4ILfSM zWvL1Gv$6$N4!7Ok!+QJrh?6~AwiVPkj`Y>+!N%4x3Ed*Q@tF*#&6%m)W>*^eqK{!X zWFL6kGz+O1Hw}t2-S_uOa`$$p_a6f)u(TZONP?_E zr&69Z2nG*);Py{M!uP}=k>j`b*v!1q9U~MF;?h`E)P)m@T=a+1ccr3y93Yu>`N0Z; zk3DRZAk%AP6nt2;zm3_MERW=^I^X&CZQ zz`qj&sarrR5ic)@J$tZsCK-3pMMa+(8d9Yf?i|ZBOH9Sq_SX&ZKXTjB0k>qzGRiy< zR>apgg9HW&E=-8};9myZ-TP-t#}ZC&S|4w!ah6g!u7x|kYfp2<`4|gKhhdYAy?AUv z8pVnEGX3qNQTO}r^_H8@qHuqb@RUay?Q;$@6VVZ^5eYYEQzv~r*-cV$L}B{oSsckM z#z9&nZ4RlG)_-Tcr)^}fpk894F*Z98>hO)|X5P2EvYy1!{kB_9^R-d;6hN5q&lHHj zpD*TR%d8%<&*IkKBHE}4F-{wWQ4uK~HS(#c za3eIj>#6EnQQGx|i_V2=wirCjn)52o~{Yjop%0)IJzlGFqY51%okU z4gYB}xepV@GUsl|be9W?(Jhfjf3A`k5DpU*cn=#3Q-GUkc}Gmv1kgHV5$(v@OePhK zRXptM*e&LwR98sfscwszNDX72^Tfp|wF$qx)7pPQsbP%@m(Z@8ry1ai9BcWUe??9$ zCW66q%9BQC))>iVu3XVa6sf`?L@BD7xYadAtC~YLD?bbtvmR?uc^F?@m}x;F=z9hn zC}nP*`K;l(#j!qP4ay72`g!WSSe10s{p`nP>3F-4(J5p}f7tBx$E5kz_{1V`pJyfq z{-G=yb!l<68<0G?;=7;qvVxNz(5>WaO_ENC-E%%<%UShF^kj9fe?m+)+H>kqpaCK;C5PB;pjdZW2P+Alwsx-MIu$B$4~Tf4%|o zAFnV7BOi6&?7Xs;NT!0flF&}kO6am+(Dgr4m+x1BkGwiW!--+{m4GvLPfxG1W@^2V zq~+H+>`Id)w&EewVv?YJW{IyPpoS(5a(=PSx_ecz9O%XR6pZM@Nc4KTmp{BHm?mm? zrhgat{W`bLKgt|PL$b&&0rGURynI%N8)+Ew(wIp5Hb-O(mB?t=XYzGqt{c7VVTRz( z?n#$GauR}6gh+!zUC)96XtgWCnf+-xl_YPVF!HoUTG8{816w78EJp~!V{zZ7=QTJTK}U+$D&rS*c{2r z@h_kOYUS7DgP@+zjc?^R3ndchUiUBz?UD~B;^+cNZcmUUqcL^YXHs3vRO5+88u+eqkgV|&x`UmZ?DonC7^ z$R<@7g}otq68^mm;zRIK7!auE-;_=?lK&eG|N4c$Sa>o4`^fvuddG+|=79VZ2pI_!z1vl(JOSbnn{ z@o%SCVi`Ip7cWEZ{Ym)!+o~QJ<{*yNr=Rbn88trOBg7hfT=*)ggZ;38%E7S#&fjIB;B&rsY1Bd zc4I>w`0Fcrz6RLOv+b2HGFLCj;zk!eo}D9%Gu~iYeyz=C-|TpkjMq4Y0i^mxH41Of z;D+N5ogeD6g-@^O5HCMiTt{rQkV_u6J>K8IPpe2qg$Yj0hl|J^Pr9u$EX?IOD6F1i zT2MIN$`DeL(MAQvxyMtm1Ht7Cn<62a2!*)vnN`YD}|bu0$K7pKDnXjXc1VSnz| zj-q7)Y6jqMx98fnIS$UmDGow7`<5Q40A@977Fg^bX&YP>vz4_~bix|n#!_mT5Q50i zH622GQ5hem#q@wQDZ_9zjAL;Z)KXeCYxpY{feCJhB|Buat9cUzcs+r{9Sxj!Nlc@S zwdK3?Yb{K(>`LKTc21r`Ouf5y(DiDfZq>BHGmPuk+sH}NaVki*#<#nLDUNr0r6pB& z`yb#5x{~n(-|h~7991^I%Y5B%w(Nu3p`qhP)C7g1F0a(-&1K7l~l#%X7h4puc`5d78F?N7r z4)wJKNxsAventV~ePwIHd^Bj$C%;nXaG{a7qMxRe{;_e&!e@bi7wb?#QdbK5&jHNN zZZw?gaw-bW=Bdtw{r)Y^6j|If8K{yV5)q9M$P}1{eo9s@96J_;V=K*fW|#}0kswOFz`HeNU4}JW%#R=;Cb3aWHEP%{5Ly;^Yn$U#k|eK-yFTq zGge=f@DIw5xu&0I?kbfC&JT~de?HIp8CfE{BR}rFbe?_lwM6uK7(VWMcaEUxm5RSm zm&1ysA%`MU9!U0~XBukY2ElhtC6_nR zjlEq}Tyf;m_Y>vCFbhK+%k7^Zg~xI)O6gU$f1-SRg9!lFP>4q6)tseE29lIj3-r*X zSrK7(HcciukJy(G;`GZuN=4)ehcXxLN_22?*1k8`5FcYO@Q+lh!KH5B6#KB&gZX^8 zA+`tmU5*!{n5j;p?yj^Q$Gsko0&fgj+=h{%4b~pI1?e+19J8pTVO})pN;`lYEoCF! zmu2VLc9G=t2?JRNja@m*78&q(!|2QMd1!O4ITLn|4vvO1o+~RgwY&g}c~*R7gRq>- zr2@zV^;1~Yjk=#|+BYK{_q0pa|4=ym|8YTqrTkuSkg@2-=6vyey{C_$iT~mVX_gB! z)a4HNkjDC ze~ciEx`HO2Chq}PD+0#tV~=gO>`6<0OQ_{9nGi5}-7`OI76R3kFCW_1pY9=;26{H4 zAIs~DFw%{=m8poo;6A*_z13zT+?1eh$?BOS-teSj)h<{5-tZ~ zAtYth@X{fePN+neak3cxo7hlXyFN3*S5M}0VMT=TvScwfJh6dD9hwt#UT#f99?!7P zhr&bN(yH;now14hQIdM7IIw@o`qMe&{~yNQf-A1DTeD3H*TUTr2=49_?oM!mQ+RMq zfIYBKxb z{I9s5k~OUHk&@AE_0sW_O3Dv1)_BDCAb`&d78XS>u9gD2X7b2UXD6=hb}dn5yu;d8>l8>4m}U+Hg)w?wK)X@)AqRdJKprvHHZd{C;X zyLx&V^gxotMvVc)Ef?uv{S(y%*yb1)8;aRMrAQ?m!c|E=rTrre~Umae#4 zMm6wRmUm;!(Ekvr9-v%N)da>PFYhbNQmqs`?+td%fw@1T8I2u{HOJs9fS&x<#m%#EenojylMLom82iQZYbcuGmc{>R! zHdfwsqH#HNT&k871D;(tvX=tzui~~V2OXOL^4bRX$sm!1imm;tFD;2{2t|wep`349{(@ETEsFRB2~9gx`%e<9qWh9ukcp7OG1A7acLDi~FWk#2n?;8322w^SzP zJ`80+xloj_pe77FGMAvprzX7{mW@C!jtxLBqC%1%u5}8dnU2G-$83-b;%JcaW2jnOrnr{v(wfo8`ADF2dQC$KubraQcK{gf%ZOn|;aebGhB3L-SsI@Y zy8_n@B)^6)ME36o%ofeie2NglF}M}kkC8hUlBB79P$IrO#t)#pO2#&~(?T6blq1od z!(ep?4o%y@-LN^j)v&zpEf17B0NKFPhXLI^T@@AzsYvlZC8DyuuoUC@(x|X@6n#WM z5@W9>2ONq5R96z!~ll%J42WcTW z1%zH;sCSbu!qvdrM?TU(?z9NrRff)mH%fNongGc>xGC!**7V*Cuk*aG8~L_Tg?}8M z-%?89fdgHJJ_=jPD74opgA39&4@4rB`;5e?5ri#;(&r?jTiYF$``4Dt&k3p?smcR6Sqkma4N4F|X-xGEKP!^r0)V}1sS1y6mWbO>mUi8CIG*#UAJc%e% zZL@zuDG8@3#@=*$@}1wD*zpVOUP3At7~qk5=emL@lNvsZ?p7(cocJ zcd{X+b$p-I_hHNgvoUQ*>3}oyVcc4!F=J``fcM7(Y{Ds~G3!w2P;l*G(rdCY=WhH^ z^yy(L0JA9%N%=^Ebag0HDGZAF_tynPo$8@TO|Y6cl@;KWiTdqh;pd$ke>}Pjf&xW{ z+3?gbR74U5GGoGvx1an+MEWE7J>N<3oE!T`nrSRB@5Am05($#z^fZ!4U|ObHZzC1> zL0(N`JIz0CC;Kq`s9G5(WuYj9y5?TQJkukUDB)Zde zSv7>1e+#b8ff5a{`8`mp&(|M8>Ox{Jp{?CWm=O5x_S2>C7fPOBaNdG6+V*5D-)q*SvMt`dQCgMuxMcakXx1kFoF))@REX#1W z>DhX0Y%#N_-Ng?J_xu-XiVjygtAFffw0aQ-b#I5Wsp>mVcB0AEa)`AIrqs}1D>$j_ zNVN4f{~@T6-(G-wFa1><$5#(Imk3x$#o9yjw7SFzD3y}bwf_1P3n6C)dl7Xw$-ZAn z>?QBD|6HL&UJ^Vj*jx$!6sj4?xNh|6*NERVyI26@Lx^v3m!xJT(_m(8zbk>m&L`yh zWudtDil+^U3g7lZN!J5k(1CtidZAzg_Lf)kqF+m?&a#lu-V-Jb#etwp%Lw03>=Gq$ z4%(Be9d&5b!RN{}b?KlS+}kcNJN7V#^(i&PeZOeEsh66XI3EqL zlbHQ|FH+%-f*umLZUx>pE2ElNq-cQXR0Qh z{yea9&BNL)r7TR}L9#bnth?)pqXan2=RzVr9kJ*;cfmonY{b?4eoI1a+?iW zzrX0Ni)n@~w7BN2`ioQ_oO;%j?E6PG+X$69RPFkAjW$EmLn9r6V(ncYe$??2cEEa< z2P4mO95*re2Ewnx>Rb<3%?yk(RUO)0PH4?p?=-7;A^HyDu*Tw=tZuJ(Sb8pn_7T{i z;;MKQNtu$n`8T=H=Wxyx#~nD7A!#Cv2gIy^cO({B4#ON4Tdr6XpVrt;&T$CXD$Ain z=4s_u*&ssNk{r|Q@#QK}` z)cA^pH5B-y2`p$cFmQsP4$f@?YJBy1<$HO-6a%^P#m{`xIdG_WkpUgY{Ci?{ANk|b zIviZGKpUV6QV5I)r`%D()YgD#2Cw3zf)*k%n-6ykOF=3XX&|;Ci*lJED+Zxj9E+92 zbgYTpfg%P|Tk^3h>I|=gtLmy`43gNq*gwWMqi#q{)1x^^VOJrFFvXRaN32>Kj}$~& zIQ5|vk&RPps{-tk4jRu;{U~gL|6%d>Z6&gU)Liqd`B%(u%M?f* zEgroj)u9+(NGYgarPJVY{0=E8#ZLR$dtBAC?L zp0nXhlb}~%uMW5Ht(c|oKP6&6rGIGDg}TZ~<7pr7Jd51#M*nT_U;VhN>*lmG*s1|K z3K81S{_~ZIy59~3tqV4u3;H=Ja)|eVMdB_x12)3hVDMk3#OTrX;uZHAShZ@P%Sw)? zr}`Ou;_e>)I+;?HXofM{OUzvpT}xlPGN+pl|8x|yQX_Nl4$xC#oO?W>s{KI5 zi7wtagJ4z3)!Z*)uro~i@7pb{-qXZ+?wzm!R`Dm_mDaHLSNg+Tk`SneC5q1b=r>5? z)SfTOWr+Y9dqUHIiR3EvmjS-6bb}(83Q<+g7M8|G`+OW=L2{rI5}krxm;t&5W*<>; zpd;yOnajSYF^f}h%lnUCgKwDkyejB6(oBd_)7nO-g9u4+#>~q!2A;|anc!w*%sUGb zo6aQ|a0`IkRTpU0y2FyN=|cQyjR=` znO>9UQE`I*@!rHHb}1M3TOFWxFx-k9yL;9y;q(zw61+t0naL5Qn-0$xCsF%E*^D{H$Wi?a8?p%)iG9i| zjiAgZ5k4G=`)6NF``zRJf^&Vu`> zFcX0zgM^gcE1uPj^-=e_kSJf4pV0PG@VZ4Fa(ywVlPmcqt4}@x8(AT>y&!lz?;{D1 z8~`+`84f}r8JtI=9NVV38keFxSovgYOA?!2W|ekwEHALyK-{kt&$t>Es$Hj9bC1mKz$ zBVVmTF-O!5SmfAvkM>z%H_bBTHg#FcA)-GW4-EpQT7W3xCXa0%-or`KJJfzVRQ&xY zgJytJKP0GhDY1iLK?K}h6w5NjdM{RNdaL}8rCY`X%x_NANrVsptH-R12AIONq;NTM zM5*uxQO^11aM6R?{h8Cc0k;FeLOm?84?*2{h@|4so@y?lHq-2~w6_@eQ)T_5?=7fq z;SZ$V{~Nk3#p@7#8;>xCP>=!IzwjvB=V>OnWm}pnghBRiQ0F95qQ1%;rgJAmaMWLP zuXl}1RmIKD%S12(9j7b$Kv^EheJ{RF+rWLNO3ZZ8V7sc~C^H2`63G^BQ>JH%+ z=O{Bbd@l0dj;L+^T*zSREgUuUy`bo6`cOI-dGev2;8?zZLxP9yKD-8W)^x=bnN&I^ zKGc##62q*An%s|A9XhfiIR!gM=#}t9(}`M{hX1fK$oyQl{lT7$SyZx!bf|f3L(t6v z@rqc`8A>~LPoUX%R#qy{sUxK{x1iV>U)hZL-qT?9*h*@!%EQ)9Z_Mp8Da8nxvM}dw zi52X~^E@^kPTyK@swk(%Xi{)&3AfU|2}Vfg2hr2vu79cK|+cg zXM~vl0}YI@eN<=iGUdnfK6`BYI9TN>W9|8Xf2w`bbMh+Z>G?3o8(}(Blqebdvv^>Nuk$yV9OJaN zqDe~$+2cEATdYQv5V?^Hg^JUI1$m>P{=)KA!|2FMT^)vFY$3RpD7j{FV0?{SaX1-` z{uejOVclJxyihf^;>P4N3(@$4heMCe0*tO#Nnx`MR72YWr8W~ys&n9+oppJXN9zcU15H@E_#UIEeD~M2! zxul5$ND;v^1>!=T2!?2$K4I;42cms&WHk*!)V8*5bx4vFxq}){zO$AYWFcQP)wngz z-U2f72jN=ryvBhMILs&q%~+RF$azf^?}4{lCWuh>VsnT@7KF4;Ye$RBlMB1D zzyh1E@uKF-nDQPVebM9%;03#;*k%Xuet~oLl3_u0wN4EaftlFYw>k912^7IO!csUg zwGj!BI0##eKU{@l;qtokNBTMO_NJJ7flO-NIok1}emg+VJ`bmWMiDiBg@ZVc%z4~F zkzS`wwQmD!50J3HEOU}P0=y<`E!L@;QSSWqC6Zqkp|%3rh%>I>2Hu#md)w16E3LvP zyhJchi$kgmPv2l@Vu}->-pXRo!OsM!TVivmEfU4f+c)jF$cdg<5^`|BZu-W4Z2{ev zJqq7(Zt`0X201MxIwurbND^^K@J7WI!ov@Nv4dC?5e0B{M2gMLleo}V6(l&>dBG<# zoZ7g;mRsn^l2(M;oTOlmzA}4-MgC}A5tMM#+XMCzbB~L~uZ; z8=ZhAFE+!_ms=ATY3%=nIs8w&R{uZ8Yf1oVn=^4s)c-uTCDL=T`hJq1$$jfc8-2b4 zYK{Jv@*-UGH^>KW;r$CCTTZth;QQ+--}T219agYHHpv|ARHbgCt$P}q@ob>N%ggTF zlwEs?%mn7%{^zwW*Nd&eVkC^C_QuuuWYRLNJoWD{m)SzLYB&phVK91q+Vl8bWyBu> zeo|4U3`6xKLNO&yF0Ivhl9@$1lhrLQCzmOb)zwF0?$d8nd8y-;fKTIH=cm7qxniww zyBH#Cz-G{DW#Ui>>5p}j!0Dc{76c`XX3UAcxyJ^~`aHQXndB@Uuysg<*6SgJ$JVb^ae^b`%9tK=j z1zv`=W7K<#Tb6=`sVoB+<&mP(|~cgW%!PKRb-7Kx$)NoFY0Zo0vTH@gCG zV~8>nseB|Z3#G?qnn_1r0L#mJoom`-DW6dJErH^UfqkJ5s@zeJ0&giYNkYlP9F^NT zzh0{EKxl@@WrI2j2fjT2DBtF!T>pKcY0ezR^|t%|3vBn;9q>!gjKYAoggyfB9(5<} zY~1G*Y`NJ{QoH^k;-q1`L~BZnw4O2fBP{PKmJhH|SPVMzYCj5#MPAz!qebm!YH0NU zvwA|$ZHC1LV#@3~PI&EVwI|s*Bcz@f_r?X`9yF#E5g-jG&&KRl2BW zE(N+m_P``e2fNZdCv99a>B4m^jjp2E921QF_74cXPpdMbcToYI zV>HFaxt;h>J-r&f_*sfOf0 zs9$2Y!OO0L>^11SL-e=T!f`@cdJb_ynrQt*ibzA;aj6@Og421K$UkmtNZ@RpTasBx z7;{Uws0@OuAcU$KbP8zmjpM>=yQB1dQGHjtUQ)54y5q6CvUKS}bKz_`Xz(3P zWG55ZwVNA#PhpMbQD&PT5m%XhH9f{SpI#qg7hF7tUUQAZu!v@|W&|J@jzlmbnVE>& z*!LeN@S}qCx)3EgFU6z29N1y6+Vj=oF8tF(P>-*rh%b*_0Dh^t(%8_xZ+&gAv&3JY zE}Z>D5wmbgN%k`hY2y}XAaG)EnVB33Q(6|nGplmwKZWA>-}ln;GC^lQgw^fc0iTOw zjmQlNfomyDdgVvo@R-c%H@E4oqpK}cl&EF?z~cxlz(ve_KpvrJ>9`uG^t9jo{IjHt zRn$R3gnAScGkT%LEm|=;%uO!#3pLj3bRQGy_LO*V!!TbjHb();OzOcftKfmUd1t$M zy;cgVsdwpDH*^9F+y{x3KXRlG(@Zv(d`JJFyl~R?N>*QPw`PnF!&7mb~i3POl>z#amIlFqtxm zfoi-(W@$7%y`L5&xN?A%F`Ij57>)apq*#kHnt!lMhD_(d+x0n8C!%kPT)iQEG6_|L zZnaBqP=;-!e~MW(aSZTsMHWXx8%Uy;NB!#{SE3igFGT~>pFflp7@{IoDlwCRs6r|8 zfFzOxNcy%nPcL^Nt8=7|mv?V2E;eE#x*R+g=ruqm@FHtm!Hq@tY)-55IUBdeVy}N0eDT#Rj{~#FO5`K z-IJhNxS4KkQre}#0-7S+bVl(0|&^!rKeM-Sm1O!=~SVSzvlkUSxty|K;ramEvv~vX
    - ![Data Caterer generate and validate data flows](diagrams/high_level_flow-basic-flow.svg) + ![Data Caterer generate and validate data flows](diagrams/basic_data_caterer_flow_medium.gif)

    Simplify your data testing

    diff --git a/docs/setup/advanced.md b/docs/setup/advanced.md index 73ae0489..40237df4 100644 --- a/docs/setup/advanced.md +++ b/docs/setup/advanced.md @@ -65,9 +65,9 @@ You can alter the `status` column in the account data to only generate `open` ac and define a foreign key between Postgres and parquet to ensure the same `account_id` is being used. Then in the parquet task, define 1 to 10 transactions per `account_id` to be generated. -[Postgres account generation example task](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) -[Parquet transaction generation example task](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/file/parquet/parquet-transaction-task.yaml) -[Plan](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/plan/scenario-based.yaml) +[Postgres account generation example task](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) +[Parquet transaction generation example task](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/file/parquet/parquet-transaction-task.yaml) +[Plan](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/plan/scenario-based.yaml) ## Cloud storage diff --git a/docs/setup/configuration.md b/docs/setup/configuration.md index 32d57bac..0b5f08f1 100644 --- a/docs/setup/configuration.md +++ b/docs/setup/configuration.md @@ -5,24 +5,24 @@ metadata gets saved. These configurations are defined from within your Java or Scala class via `configuration` or for YAML file setup, `application.conf` file as seen -[**here**](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/application.conf). +[**here**](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/application.conf). ## Flags Flags are used to control which processes are executed when you run Data Caterer. -| Config | Default | Paid | Description | -|--------------------------------|---------|------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `enableGenerateData` | true | N | Enable/disable data generation | -| `enableCount` | true | N | Count the number of records generated. Can be disabled to improve performance | -| `enableFailOnError` | true | N | Whilst saving generated data, if there is an error, it will stop any further data from being generated | -| `enableSaveReports` | true | N | Enable/disable HTML reports summarising data generated, metadata of data generated (if `enableSinkMetadata` is enabled) and validation results (if `enableValidation` is enabled). Sample [**here**](generator/report.md) | -| `enableSinkMetadata` | true | N | Run data profiling for the generated data. Shown in HTML reports if `enableSaveSinkMetadata` is enabled | -| `enableValidation` | false | N | Run validations as described in plan. Results can be viewed from logs or from HTML report if `enableSaveSinkMetadata` is enabled. Sample [**here**](validation.md) | -| `enableGeneratePlanAndTasks` | false | Y | Enable/disable plan and task auto generation based off data source connections | -| `enableRecordTracking` | false | Y | Enable/disable which data records have been generated for any data source | -| `enableDeleteGeneratedRecords` | false | Y | Delete all generated records based off record tracking (if `enableRecordTracking` has been set to true) | -| `enableGenerateValidations` | false | Y | If enabled, it will generate validations based on the data sources defined. | +| Config | Default | Paid | Description | +|--------------------------------|---------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `enableGenerateData` | true | N | Enable/disable data generation | +| `enableCount` | true | N | Count the number of records generated. Can be disabled to improve performance | +| `enableFailOnError` | true | N | Whilst saving generated data, if there is an error, it will stop any further data from being generated | +| `enableSaveReports` | true | N | Enable/disable HTML reports summarising data generated, metadata of data generated (if `enableSinkMetadata` is enabled) and validation results (if `enableValidation` is enabled). Sample [**here**](report/html-report.md) | +| `enableSinkMetadata` | true | N | Run data profiling for the generated data. Shown in HTML reports if `enableSaveSinkMetadata` is enabled | +| `enableValidation` | false | N | Run validations as described in plan. Results can be viewed from logs or from HTML report if `enableSaveSinkMetadata` is enabled. Sample [**here**](validation.md) | +| `enableGeneratePlanAndTasks` | false | Y | Enable/disable plan and task auto generation based off data source connections | +| `enableRecordTracking` | false | Y | Enable/disable which data records have been generated for any data source | +| `enableDeleteGeneratedRecords` | false | Y | Delete all generated records based off record tracking (if `enableRecordTracking` has been set to true) | +| `enableGenerateValidations` | false | Y | If enabled, it will generate validations based on the data sources defined. | === "Java" diff --git a/docs/setup/connection.md b/docs/setup/connection.md index 1d6b482d..73f021dd 100644 --- a/docs/setup/connection.md +++ b/docs/setup/connection.md @@ -410,7 +410,7 @@ found [**here**](https://spark.apache.org/docs/latest/structured-streaming-kafka When defining your schema for pushing data to Kafka, it follows a specific top level schema. An example can be -found [**here**](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/kafka/kafka-account-task.yaml) +found [**here**](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/kafka/kafka-account-task.yaml) . You can define the key, value, headers, partition or topic by following the linked schema. ### JMS diff --git a/docs/setup/deployment.md b/docs/setup/deployment.md index d7d0bb9b..376302b2 100644 --- a/docs/setup/deployment.md +++ b/docs/setup/deployment.md @@ -8,7 +8,7 @@ Two main ways to deploy and run Data Caterer: ## Docker To package up your class along with the Data Caterer base image, you can follow -the [Dockerfile that is created for you here](https://github.com/pflooky/data-caterer-example/blob/main/Dockerfile). +the [Dockerfile that is created for you here](https://github.com/data-catering/data-caterer-example/blob/main/Dockerfile). Then you can run the following: @@ -19,13 +19,13 @@ docker build -t : . ## Helm -[Link to sample helm on GitHub here](https://github.com/pflooky/data-caterer-example/tree/main/helm/data-caterer) +[Link to sample helm on GitHub here](https://github.com/data-catering/data-caterer-example/tree/main/helm/data-caterer) Update -the [configuration](https://github.com/pflooky/data-caterer-example/blob/main/helm/data-caterer/templates/configuration.yaml) +the [configuration](https://github.com/data-catering/data-caterer-example/blob/main/helm/data-caterer/templates/configuration.yaml) to your own data connections and configuration or own image created from above. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git helm install data-caterer ./data-caterer-example/helm/data-caterer ``` diff --git a/docs/setup/guide/data-source/cassandra.md b/docs/setup/guide/data-source/cassandra.md index e08f824b..5a4a2bd9 100644 --- a/docs/setup/guide/data-source/cassandra.md +++ b/docs/setup/guide/data-source/cassandra.md @@ -20,7 +20,7 @@ for the tables you configure. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` If you already have a Cassandra instance running, you can skip to [this step](#plan-setup). @@ -59,15 +59,15 @@ metadata information about tables and columns from the below tables. Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedCassandraJavaPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedCassandraPlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedCassandraJavaPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedCassandraPlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; public class MyAdvancedCassandraJavaPlan extends PlanRun { } @@ -76,7 +76,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun class MyAdvancedCassandraPlan extends PlanRun { } @@ -124,7 +124,7 @@ defined under`docker/data/cql/customer.cql`. This table should already be setup [step](#cassandra-setup). We can check if the table is setup already via the following command: ```shell -docker exec host.docker.internal cqlsh -e 'describe account.accounts; describe account.account_status_history;' +docker exec docker-cassandraserver-1 cqlsh -e 'describe account.accounts; describe account.account_status_history;' ``` Here we should see some output that looks like the below. This tells us what schema we need to follow when generating diff --git a/docs/setup/guide/data-source/http.md b/docs/setup/guide/data-source/http.md index 993d2b0c..5042253a 100644 --- a/docs/setup/guide/data-source/http.md +++ b/docs/setup/guide/data-source/http.md @@ -25,7 +25,7 @@ Creating a data generator based on an [OpenAPI/Swagger](https://spec.openapis.or First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### HTTP Setup @@ -44,15 +44,15 @@ docker ps Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedHttpJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedHttpPlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedHttpJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedHttpPlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedHttpJavaPlanRun extends PlanRun { @@ -66,7 +66,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedHttpPlanRun extends PlanRun { @@ -266,7 +266,7 @@ want to alter this value, you can do so via the below configuration. The lowest === "Java" ```java - import com.github.pflooky.datacaterer.api.model.Constants; + import io.github.datacatering.datacaterer.api.model.Constants; ... var httpTask = http("my_http", Map.of(Constants.ROWS_PER_SECOND(), "1")) @@ -276,7 +276,7 @@ want to alter this value, you can do so via the below configuration. The lowest === "Scala" ```scala - import com.github.pflooky.datacaterer.api.model.Constants.ROWS_PER_SECOND + import io.github.datacatering.datacaterer.api.model.Constants.ROWS_PER_SECOND ... val httpTask = http("my_http", options = Map(ROWS_PER_SECOND -> "1")) diff --git a/docs/setup/guide/data-source/kafka.md b/docs/setup/guide/data-source/kafka.md index 094c5cc0..244d4937 100644 --- a/docs/setup/guide/data-source/kafka.md +++ b/docs/setup/guide/data-source/kafka.md @@ -20,7 +20,7 @@ for the topics you configure. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` If you already have a Kafka instance running, you can skip to [this step](#plan-setup). @@ -39,15 +39,15 @@ docker-compose up -d kafka Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedKafkaJavaPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedKafkaPlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedKafkaJavaPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedKafkaPlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; public class MyAdvancedKafkaJavaPlan extends PlanRun { } @@ -56,7 +56,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun class MyAdvancedKafkaPlan extends PlanRun { } diff --git a/docs/setup/guide/data-source/marquez-metadata-source.md b/docs/setup/guide/data-source/marquez-metadata-source.md index 658d97d7..c522c70b 100644 --- a/docs/setup/guide/data-source/marquez-metadata-source.md +++ b/docs/setup/guide/data-source/marquez-metadata-source.md @@ -19,7 +19,7 @@ follows [OpenLineage API](https://openlineage.io/)). First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Marquez Setup @@ -48,15 +48,15 @@ docker exec marquez-db psql -Upostgres -c 'CREATE DATABASE food_delivery' Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedMetadataSourceJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedMetadataSourcePlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedMetadataSourceJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedMetadataSourcePlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedMetadataSourceJavaPlanRun extends PlanRun { @@ -70,7 +70,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedMetadataSourcePlanRun extends PlanRun { diff --git a/docs/setup/guide/data-source/open-metadata-source.md b/docs/setup/guide/data-source/open-metadata-source.md index 833f2c95..b06f4f5a 100644 --- a/docs/setup/guide/data-source/open-metadata-source.md +++ b/docs/setup/guide/data-source/open-metadata-source.md @@ -19,7 +19,7 @@ in [OpenMetadata](https://github.com/open-metadata/OpenMetadata). First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### OpenMetadata Setup @@ -45,15 +45,15 @@ like below: Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedOpenMetadataSourcePlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedOpenMetadataSourcePlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedOpenMetadataSourceJavaPlanRun extends PlanRun { @@ -67,7 +67,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedOpenMetadataSourcePlanRun extends PlanRun { @@ -89,7 +89,7 @@ show how nested data types are handled and how we could customise it. === "Java" ```java - import com.github.pflooky.datacaterer.api.model.Constants; + import io.github.datacatering.datacaterer.api.model.Constants; ... var jsonTask = json("my_json", "/opt/app/data/json", Map.of("saveMode", "overwrite")) @@ -107,7 +107,7 @@ show how nested data types are handled and how we could customise it. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE} + import io.github.datacatering.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE} ... val jsonTask = json("my_json", "/opt/app/data/json", Map("saveMode" -> "overwrite")) diff --git a/docs/setup/guide/data-source/solace.md b/docs/setup/guide/data-source/solace.md index 2ddd2667..878118a6 100644 --- a/docs/setup/guide/data-source/solace.md +++ b/docs/setup/guide/data-source/solace.md @@ -27,7 +27,7 @@ for the queues/topics you configure. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` If you already have a Solace instance running, you can skip to [this step](#plan-setup). @@ -52,15 +52,15 @@ below. Notice there is 2 queues/topics created. If you do not see 2 created, try Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedSolaceJavaPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedSolacePlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedSolaceJavaPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedSolacePlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; public class MyAdvancedSolaceJavaPlan extends PlanRun { } @@ -69,7 +69,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun class MyAdvancedSolacePlan extends PlanRun { } diff --git a/docs/setup/guide/index.md b/docs/setup/guide/index.md index 27908e3d..d0d113e6 100644 --- a/docs/setup/guide/index.md +++ b/docs/setup/guide/index.md @@ -76,27 +76,27 @@ more steps. #### Foreign Keys -[Define foreign keys across data sources in your plan to ensure generated data can match](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/plan/foreign-key-example.yaml) -[Link to associated task 1](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/file/json/json-account-task.yaml) -[Link to associated task 2](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) +[Define foreign keys across data sources in your plan to ensure generated data can match](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/plan/foreign-key-example.yaml) +[Link to associated task 1](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/file/json/json-account-task.yaml) +[Link to associated task 2](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) ### Task | Data Source Type | Data Source | Sample Task | Notes | |------------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------| -| Database | Postgres | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) | | -| Database | MySQL | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/jdbc/mysql/mysql-account-task.yaml) | | -| Database | Cassandra | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/cassandra/cassandra-customer-task.yaml) | | -| File | CSV | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/file/csv/csv-transaction-task.yaml) | | -| File | JSON | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/file/json/json-account-task.yaml) | Contains nested schemas and use of SQL for generated values | -| File | Parquet | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/file/parquet/parquet-transaction-task.yaml) | Partition by year column | -| Kafka | Kafka | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/kafka/kafka-account-task.yaml) | Specific base schema to be used, define headers, key, value, etc. | -| JMS | Solace | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/jms/solace/jms-account-task.yaml) | JSON formatted message | -| HTTP | PUT | [Sample](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/task/http/http-account-task.yaml) | JSON formatted PUT body | +| Database | Postgres | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/jdbc/postgres/postgres-account-task.yaml) | | +| Database | MySQL | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/jdbc/mysql/mysql-account-task.yaml) | | +| Database | Cassandra | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/cassandra/cassandra-customer-task.yaml) | | +| File | CSV | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/file/csv/csv-transaction-task.yaml) | | +| File | JSON | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/file/json/json-account-task.yaml) | Contains nested schemas and use of SQL for generated values | +| File | Parquet | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/file/parquet/parquet-transaction-task.yaml) | Partition by year column | +| Kafka | Kafka | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/kafka/kafka-account-task.yaml) | Specific base schema to be used, define headers, key, value, etc. | +| JMS | Solace | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/jms/solace/jms-account-task.yaml) | JSON formatted message | +| HTTP | PUT | [Sample](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/task/http/http-account-task.yaml) | JSON formatted PUT body | ### Configuration -[Basic configuration](https://github.com/pflooky/data-caterer-example/blob/main/docker/data/custom/application.conf) +[Basic configuration](https://github.com/data-catering/data-caterer-example/blob/main/docker/data/custom/application.conf) ## Docker-compose diff --git a/docs/setup/guide/scenario/auto-generate-connection.md b/docs/setup/guide/scenario/auto-generate-connection.md index 2307d8ed..258968f6 100644 --- a/docs/setup/guide/scenario/auto-generate-connection.md +++ b/docs/setup/guide/scenario/auto-generate-connection.md @@ -18,22 +18,22 @@ Creating a data generator based on only a data connection to Postgres. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Plan Setup Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedAutomatedJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedAutomatedPlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedAutomatedJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedAutomatedPlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedAutomatedJavaPlanRun extends PlanRun { @@ -53,7 +53,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedAutomatedPlanRun extends PlanRun { diff --git a/docs/setup/guide/scenario/batch-and-event.md b/docs/setup/guide/scenario/batch-and-event.md index 06a54875..93daef02 100644 --- a/docs/setup/guide/scenario/batch-and-event.md +++ b/docs/setup/guide/scenario/batch-and-event.md @@ -18,7 +18,7 @@ Creating a data generator for Kafka topic with matching records in a CSV file. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Kafka Setup @@ -39,15 +39,15 @@ under`docker/data/kafka/setup_kafka.sh`. Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedBatchEventJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedBatchEventPlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedBatchEventJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedBatchEventPlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedBatchEventJavaPlanRun extends PlanRun { @@ -60,7 +60,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedBatchEventPlanRun extends PlanRun { diff --git a/docs/setup/guide/scenario/data-validation.md b/docs/setup/guide/scenario/data-validation.md index d197a2f9..5a1afa12 100644 --- a/docs/setup/guide/scenario/data-validation.md +++ b/docs/setup/guide/scenario/data-validation.md @@ -21,7 +21,7 @@ Creating a data validator for a JSON file. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Data Setup @@ -37,15 +37,15 @@ against. Run the below command and it will generate JSON files under `docker/sam Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyValidationJavaPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyValidationPlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyValidationJavaPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyValidationPlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyValidationJavaPlan extends PlanRun { @@ -65,7 +65,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyValidationPlan extends PlanRun { diff --git a/docs/setup/guide/scenario/delete-generated-data.md b/docs/setup/guide/scenario/delete-generated-data.md index af2d653c..67592c2e 100644 --- a/docs/setup/guide/scenario/delete-generated-data.md +++ b/docs/setup/guide/scenario/delete-generated-data.md @@ -18,22 +18,22 @@ Creating a data generator for Postgres and delete the generated data after using First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Plan Setup Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyAdvancedDeleteJavaPlanRun.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyAdvancedDeletePlanRun.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyAdvancedDeleteJavaPlanRun.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyAdvancedDeletePlanRun.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyAdvancedDeleteJavaPlanRun extends PlanRun { @@ -56,7 +56,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyAdvancedDeletePlanRun extends PlanRun { diff --git a/docs/setup/guide/scenario/first-data-generation.md b/docs/setup/guide/scenario/first-data-generation.md index ef539b6b..ae855975 100644 --- a/docs/setup/guide/scenario/first-data-generation.md +++ b/docs/setup/guide/scenario/first-data-generation.md @@ -21,22 +21,22 @@ Creating a data generator for a CSV file. First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Plan Setup Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyCsvPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyCsvPlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyCsvPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyCsvPlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; public class MyCsvJavaPlan extends PlanRun { } @@ -45,7 +45,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun class MyCsvPlan extends PlanRun { } diff --git a/docs/setup/guide/scenario/records-per-column.md b/docs/setup/guide/scenario/records-per-column.md index 492271bd..d2b40b44 100644 --- a/docs/setup/guide/scenario/records-per-column.md +++ b/docs/setup/guide/scenario/records-per-column.md @@ -14,22 +14,22 @@ Creating a data generator for a CSV file where there are multiple records per co First, we will clone the data-caterer-example repo which will already have the base project setup required. ```shell -git clone git@github.com:pflooky/data-caterer-example.git +git clone git@github.com:data-catering/data-caterer-example.git ``` ### Plan Setup Create a new Java or Scala class. -- Java: `src/main/java/com/github/pflooky/plan/MyMultipleRecordsPerColJavaPlan.java` -- Scala: `src/main/scala/com/github/pflooky/plan/MyMultipleRecordsPerColPlan.scala` +- Java: `src/main/java/io/github/datacatering/plan/MyMultipleRecordsPerColJavaPlan.java` +- Scala: `src/main/scala/io/github/datacatering/plan/MyMultipleRecordsPerColPlan.scala` Make sure your class extends `PlanRun`. === "Java" ```java - import com.github.pflooky.datacaterer.java.api.PlanRun; + import io.github.datacatering.datacaterer.java.api.PlanRun; ... public class MyMultipleRecordsPerColJavaPlan extends PlanRun { @@ -55,7 +55,7 @@ Make sure your class extends `PlanRun`. === "Scala" ```scala - import com.github.pflooky.datacaterer.api.PlanRun + import io.github.datacatering.datacaterer.api.PlanRun ... class MyMultipleRecordsPerColPlan extends PlanRun { diff --git a/docs/setup/report/alert.md b/docs/setup/report/alert.md new file mode 100644 index 00000000..0f7be3c8 --- /dev/null +++ b/docs/setup/report/alert.md @@ -0,0 +1,33 @@ +# Alert + +Alerts can be configured to help users receive feedback from their data testing results. Currently, Data Caterer +supports Slack for alerts. + +## Slack + +Define a [Slack token](https://api.slack.com/authentication/token-types) and one or more Slack channels that will +receive an alert like the below. + +![Slack alert sample](../../diagrams/slack_alert.png) + +=== "Java" + + ```java + var conf = configuration() + .slackAlertToken("abc123") //use appropriate Slack token (usually bot token) + .slackAlertChannels("#test-alerts", "#pre-prod-testing"); //define Slack channel(s) to receive alerts on + + execute(conf, ...); + ``` + +=== "Scala" + + ```scala + val conf = configuration + .slackAlertToken("abc123") //use appropriate Slack token (usually bot token) + .slackAlertChannels("#test-alerts", "#pre-prod-testing") //define Slack channel(s) to receive alerts on + + execute(conf, ...) + ``` + + diff --git a/docs/setup/generator/report.md b/docs/setup/report/html-report.md similarity index 100% rename from docs/setup/generator/report.md rename to docs/setup/report/html-report.md diff --git a/docs/setup/validation/external-source-validation.md b/docs/setup/validation/external-source-validation.md new file mode 100644 index 00000000..9b27fd0b --- /dev/null +++ b/docs/setup/validation/external-source-validation.md @@ -0,0 +1,83 @@ +--- +description: "Define data validations based on validations defined in external sources" +--- + +# External Source Validations + +Use validations that are defined in external sources such as Great Expectations or OpenMetadata. This allows you to +generate data for your upstream data sources and validate your pipelines based on the same rules that would be applied +in production. + +![Example flow with validations from external source](../../diagrams/high_level_flow-external-source-validation.svg) + +!!! example "Info" + + Retrieving data validations from an external source is a paid feature. Try the free trial [here](../../get-started/docker.md). + +## Supported Sources + +| Source | Support | +|---------------------------------------------------------------------------------------------------|-------------------------------------------| +| [OpenMetadata](https://docs.open-metadata.org/v1.2.x/connectors/ingestion/workflows/data-quality) | :white_check_mark: | +| [Great Expectations](https://greatexpectations.io/) | :white_check_mark: | +| [DBT Constraints](https://docs.getdbt.com/reference/resource-properties/constraints) | :octicons-x-circle-fill-12:{ .red-cross } | +| [SodaCL](https://docs.soda.io/soda-cl/soda-cl-overview.html) | :octicons-x-circle-fill-12:{ .red-cross } | +| [MonteCarlo](https://docs.getmontecarlo.com/docs/monitors-as-code) | :octicons-x-circle-fill-12:{ .red-cross } | + +## OpenMetadata + +Use data quality rules defined from OpenMetadata to execute over dataset. + +=== "Java" + + ```java + var jsonTask = json("my_json", "/opt/app/data/json") + .validations(metadataSource().openMetadata( + "http://host.docker.internal:8585/api", + Constants.OPEN_METADATA_AUTH_TYPE_OPEN_METADATA(), + Map.of( + Constants.OPEN_METADATA_JWT_TOKEN(), "abc123", + Constants.OPEN_METADATA_TABLE_FQN(), "sample_data.ecommerce_db.shopify.raw_customer" + ) + )); + + var conf = configuration().enableGenerateValidations(true); + ``` + +=== "Scala" + + ```scala + val jsonTask = json("my_json", "/opt/app/data/json") + .validations(metadataSource.openMetadata( + "http://host.docker.internal:8585/api", + OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, + Map( + OPEN_METADATA_JWT_TOKEN -> "abc123", //find under settings/bots/ingestion-bot/token + OPEN_METADATA_TABLE_FQN -> "sample_data.ecommerce_db.shopify.raw_customer" + ) + )) + + val conf = configuration.enableGenerateValidations(true) + ``` + +## Great Expectations + +Use data quality rules defined from OpenMetadata to execute over dataset. + +=== "Java" + + ```java + var jsonTask = json("my_json", "/opt/app/data/json") + .validations(metadataSource().greatExpectations("great-expectations/taxi-expectations.json"); + + var conf = configuration().enableGenerateValidations(true); + ``` + +=== "Scala" + + ```scala + val jsonTask = json("my_json", "/opt/app/data/json") + .validations(metadataSource.greatExpectations("great-expectations/taxi-expectations.json") + + val conf = configuration.enableGenerateValidations(true) + ``` diff --git a/docs/setup/validation/upstream-data-source-validation.md b/docs/setup/validation/upstream-data-source-validation.md index 4ccbcae2..73d12779 100644 --- a/docs/setup/validation/upstream-data-source-validation.md +++ b/docs/setup/validation/upstream-data-source-validation.md @@ -319,4 +319,4 @@ together by `account_id`. ) ``` -[Can check out a full example here for more details.](https://github.com/data-catering/data-caterer-example/blob/main/src/main/scala/com/github/pflooky/plan/ValidationPlanRun.scala) +[Can check out a full example here for more details.](https://github.com/data-catering/data-caterer-example/blob/main/src/main/scala/io/github/datacatering/plan/ValidationPlanRun.scala) diff --git a/docs/use-case/roadmap.md b/docs/use-case/roadmap.md index 90d460d6..8beda964 100644 --- a/docs/use-case/roadmap.md +++ b/docs/use-case/roadmap.md @@ -2,22 +2,22 @@ Items below summarise the roadmap of Data Caterer. As each task gets completed, it will be documented and linked. -| Feature | Description | Sub Tasks | -|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Data source support | Batch or real time data sources that can be added to Data Caterer. Support data sources that users want | - AWS, GCP and Azure related data services (:white_check_mark: [cloud storage](../setup/advanced.md#cloud-storage))
    - Deltalake
    - RabbitMQ
    - ActiveMQ
    - MongoDB
    - Elasticsearch
    - Snowflake
    - Databricks
    - Pulsar | -| Metadata discovery | Allow for schema and data profiling from external metadata sources | - :white_check_mark: [HTTP (OpenAPI spec)](../setup/guide/data-source/http.md)
    - JMS
    - Read from samples
    - :white_check_mark: [OpenLineage metadata (Marquez)](../setup/guide/data-source/marquez-metadata-source.md)
    - :white_check_mark: [OpenMetadata](../setup/guide/data-source/open-metadata-source.md)
    - ODCS (Open Data Contract Standard)
    - Amundsen
    - Datahub
    - Solace Event Portal
    - Airflow
    - DBT | -| Developer API | Scala/Java interface for developers/testers to create data generation and validation tasks | - :white_check_mark: [Scala](https://github.com/data-catering/data-caterer-example)
    - :white_check_mark: [Java](https://github.com/data-catering/data-caterer-example) | -| Report generation | Generate a report that summarises the data generation or validation results | - :white_check_mark: [Report for data generated and validation rules](../sample/report/html/index.html) | -| UI portal | Allow users to access a UI to input data generation or validation tasks. Also be able to view report results | - Metadata stored in database
    - Store data generation/validation run information in file/database | -| Integration with data validation tools | Derive data validation rules from existing data validation tools | - [Great Expectation](https://greatexpectations.io/)
    - [DBT constraints](https://docs.getdbt.com/reference/resource-properties/constraints)
    - [SodaCL](https://docs.soda.io/soda-cl/soda-cl-overview.html)
    - [MonteCarlo](https://docs.getmontecarlo.com/docs/monitors-as-code) | -| Data validation rule suggestions | Based on metadata, generate data validation rules appropriate for the dataset | - :white_check_mark: Suggest basic data validations (yet to document) | -| Wait conditions before data validation | Define certain conditions to be met before starting data validations | - :white_check_mark: [Webhook](../setup/validation.md#webhook)
    - :white_check_mark: [File exists](../setup/validation.md#file-exists)
    - :white_check_mark: [Data exists via SQL expression](../setup/validation.md#data-exists)
    - :white_check_mark: [Pause](../setup/validation.md#pause) | -| Validation types | Ability to define simple/complex data validations | - :white_check_mark: [Basic validations](../setup/validation/basic-validation.md)
    - :white_check_mark: [Aggregates](../setup/validation/group-by-validation.md) (sum of amount per account is > 500)
    - Ordering (transactions are ordered by date)
    - :white_check_mark: [Relationship](../setup/validation/upstream-data-source-validation.md) (at least one account entry in history table per account in accounts table)
    - Data profile (how close the generated data profile is compared to the expected data profile)
    - Column name (check column count, column names, ordering) | -| Data generation record count | Generate scenarios where there are one to many, many to many situations relating to record count. Also ability to cover all edge cases or scenarios | - Cover all possible cases (i.e. record for each combination of oneOf values, positive/negative values etc.)
    - Ability to override edge cases | -| Alerting | When tasks have completed, ability to define alerts based on certain conditions | - Slack
    - Email | -| Metadata enhancements | Based on data profiling or inference, can add to existing metadata | - PII detection (can integrate with [Presidio](https://microsoft.github.io/presidio/analyzer/))
    - Relationship detection across data sources
    - SQL generation
    - Ordering information | -| Data cleanup | Ability to clean up generated data | - :white_check_mark: [Clean up generated data](../setup/guide/scenario/delete-generated-data.md)
    - Clean up data in consumer data sinks
    - Clean up data from real time sources (i.e. DELETE HTTP endpoint, delete events in JMS) | -| Trial version | Trial version of the full app for users to test out all the features | - :white_check_mark: [Trial app to try out all features](../get-started/docker.md#paid-version-trial) | -| Code generation | Based on metadata or existing classes, code for data generation and validation could be generated | - Code generation
    - Schema generation from Scala/Java class | -| Real time response data validations | Ability to define data validations based on the response from real time data sources (e.g. HTTP response) | - HTTP response data validation | +| Feature | Description | Sub Tasks | +|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Data source support | Batch or real time data sources that can be added to Data Caterer. Support data sources that users want | - AWS, GCP and Azure related data services (:white_check_mark: [cloud storage](../setup/advanced.md#cloud-storage))
    - Deltalake
    - RabbitMQ
    - ActiveMQ
    - MongoDB
    - Elasticsearch
    - Snowflake
    - Databricks
    - Pulsar | +| Metadata discovery | Allow for schema and data profiling from external metadata sources | - :white_check_mark: [HTTP (OpenAPI spec)](../setup/guide/data-source/http.md)
    - JMS
    - Read from samples
    - :white_check_mark: [OpenLineage metadata (Marquez)](../setup/guide/data-source/marquez-metadata-source.md)
    - :white_check_mark: [OpenMetadata](../setup/guide/data-source/open-metadata-source.md)
    - ODCS (Open Data Contract Standard)
    - Amundsen
    - Datahub
    - Solace Event Portal
    - Airflow
    - DBT | +| Developer API | Scala/Java interface for developers/testers to create data generation and validation tasks | - :white_check_mark: [Scala](https://github.com/data-catering/data-caterer-example)
    - :white_check_mark: [Java](https://github.com/data-catering/data-caterer-example) | +| Report generation | Generate a report that summarises the data generation or validation results | - :white_check_mark: [Report for data generated and validation rules](../sample/report/html/index.html) | +| UI portal | Allow users to access a UI to input data generation or validation tasks. Also be able to view report results | - Metadata stored in database
    - Store data generation/validation run information in file/database | +| Integration with data validation tools | Derive data validation rules from existing data validation tools | - :white_check_mark: [Great Expectation](../setup/validation/external-source-validation.md#great-expectations)
    - [DBT constraints](https://docs.getdbt.com/reference/resource-properties/constraints)
    - [SodaCL](https://docs.soda.io/soda-cl/soda-cl-overview.html)
    - [MonteCarlo](https://docs.getmontecarlo.com/docs/monitors-as-code)
    - :white_check_mark: [OpenMetadata](../setup/validation/external-source-validation.md#openmetadata) | +| Data validation rule suggestions | Based on metadata, generate data validation rules appropriate for the dataset | - :white_check_mark: Suggest basic data validations (yet to document) | +| Wait conditions before data validation | Define certain conditions to be met before starting data validations | - :white_check_mark: [Webhook](../setup/validation.md#webhook)
    - :white_check_mark: [File exists](../setup/validation.md#file-exists)
    - :white_check_mark: [Data exists via SQL expression](../setup/validation.md#data-exists)
    - :white_check_mark: [Pause](../setup/validation.md#pause) | +| Validation types | Ability to define simple/complex data validations | - :white_check_mark: [Basic validations](../setup/validation/basic-validation.md)
    - :white_check_mark: [Aggregates](../setup/validation/group-by-validation.md) (sum of amount per account is > 500)
    - Ordering (transactions are ordered by date)
    - :white_check_mark: [Relationship](../setup/validation/upstream-data-source-validation.md) (at least one account entry in history table per account in accounts table)
    - Data profile (how close the generated data profile is compared to the expected data profile)
    - :white_check_mark: [Column name (check column count, column names, ordering)](../setup/validation/column-name-validation.md) | +| Data generation record count | Generate scenarios where there are one to many, many to many situations relating to record count. Also ability to cover all edge cases or scenarios | - Cover all possible cases (i.e. record for each combination of oneOf values, positive/negative values etc.)
    - Ability to override edge cases | +| Alerting | When tasks have completed, ability to define alerts based on certain conditions | - :white_check_mark: [Slack](../setup/report/alert.md#slack)
    - Email | +| Metadata enhancements | Based on data profiling or inference, can add to existing metadata | - PII detection (can integrate with [Presidio](https://microsoft.github.io/presidio/analyzer/))
    - Relationship detection across data sources
    - SQL generation
    - Ordering information | +| Data cleanup | Ability to clean up generated data | - :white_check_mark: [Clean up generated data](../setup/guide/scenario/delete-generated-data.md)
    - Clean up data in consumer data sinks
    - Clean up data from real time sources (i.e. DELETE HTTP endpoint, delete events in JMS) | +| Trial version | Trial version of the full app for users to test out all the features | - :white_check_mark: [Trial app to try out all features](../get-started/docker.md#paid-version-trial) | +| Code generation | Based on metadata or existing classes, code for data generation and validation could be generated | - Code generation
    - Schema generation from Scala/Java class | +| Real time response data validations | Ability to define data validations based on the response from real time data sources (e.g. HTTP response) | - HTTP response data validation | diff --git a/mkdocs.yml b/mkdocs.yml index a0585c8c..86b79b06 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -85,13 +85,16 @@ nav: - Generator: - Data Generator: 'setup/generator/data-generator.md' - Record Count: 'setup/generator/count.md' - - Report: 'setup/generator/report.md' - Validation: - 'setup/validation.md' - Basic: 'setup/validation/basic-validation.md' - Group by/Aggregate: 'setup/validation/group-by-validation.md' - Upstream: 'setup/validation/upstream-data-source-validation.md' - Column Names: 'setup/validation/column-name-validation.md' + - External Source: 'setup/validation/external-source-validation.md' + - Report: + - HTML Report: 'setup/report/html-report.md' + - Alert: 'setup/report/alert.md' - Foreign Keys: 'setup/foreign-key.md' - Deployment: 'setup/deployment.md' - Advanced: 'setup/advanced.md' diff --git a/site/404.html b/site/404.html index b06a6915..fe0db440 100644 --- a/site/404.html +++ b/site/404.html @@ -1232,32 +1232,6 @@ - - - - - -
  1. - - - - - - - Report - - - - - - - - -
  2. - - - - @@ -1445,6 +1419,141 @@ + + + + + +
  3. + + + + + + + External Source + + + + + + + + +
  4. + + + + + + + + + + + + + + + + + + + + + + + + + +
  5. + + + + + + + + + + diff --git a/site/about/index.html b/site/about/index.html index ff9b1dcf..f95c6dcd 100644 --- a/site/about/index.html +++ b/site/about/index.html @@ -1245,32 +1245,6 @@ - - - - - -
  6. - - - - - - - Report - - - - - - - - -
  7. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
  8. + + + + + + + External Source + + + + + + + + +
  9. + + + + + + + + + + + + + + + + + + + + + + + + + +
  10. + + + + + + + + + + diff --git a/site/diagrams/basic_data_caterer_flow_medium.gif b/site/diagrams/basic_data_caterer_flow_medium.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb2ac0e17a4edb35a1ce1e737370e24ec14643fb GIT binary patch literal 584686 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 z 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 )1?B8t*nnTeIEK)&ZrMG3;xau^z@cwQXd9 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

    t&G%r@ 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⋙bzY9nbau=KYe}WRpST)ir}~WEhsEw$ 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

      KeDdqKKTcEB|RhW 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 + +
      Data Source A
      Data Source A
      Data Source B
      Data Source B
      Data Caterer
      Data Caterer
      Data Storage C
      Data Storage C
      Data Caterer
      Data Caterer
      1. Generate
      1. Generate
      Data Consumer
      Data Consumer
      2. Consume
      2. Consu...
      Data Source D
      Data Source D
      5. Validate
      5. Validate
      3. Write
      3. Write
      Data Quality Source
      Data Quality Sour...
      4. Get Validations
      4. Get Validations
      Text is not SVG - cannot display
      \ No newline at end of file diff --git a/site/diagrams/slack_alert.png b/site/diagrams/slack_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..eb10edcf90a094b378a0e094c71b8a88e2b2c059 GIT binary patch literal 48750 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
      Uy9tIs&%gMck#2Yu8Z?Th`YpAl@Jp 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 - - - - - - - Report - - - - - - - - - - - - - @@ -1554,6 +1528,141 @@ + + + + + +

    1. + + + + + + + External Source + + + + + + + + +
    2. + + + + + + + + + + + + + + + + + + + + + + + + + +
    3. + + + + + + + + + + @@ -2079,7 +2188,7 @@

      Run Data Caterer

      Quick start

      Ensure you have docker installed and running.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       cd data-caterer-example && ./run.sh
       #check results under docker/sample/report/index.html folder
       
      @@ -2092,7 +2201,7 @@
    4. Join the Slack Data Catering Slack group here
    5. Get an API_KEY by using slash command /token in the Slack group (will only be visible to you)
    6. -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       cd data-caterer-example && export DATA_CATERING_API_KEY=<insert api key>
       ./run.sh
       
      diff --git a/site/index.html b/site/index.html index 8f2e83bd..fa2dab55 100644 --- a/site/index.html +++ b/site/index.html @@ -1320,32 +1320,6 @@ - - - - - -
    7. - - - - - - - Report - - - - - - - - -
    8. - - - - @@ -1533,6 +1507,141 @@ + + + + + +
    9. + + + + + + + External Source + + + + + + + + +
    10. + + + + + + + +
    11. + + + + + + + + + + + + + + + + + +
    12. + + + + + + + + + + @@ -2060,7 +2169,7 @@

      Data Caterer to ensure your systems have ingested it as expected, then clean up the data afterwards.

      -

      Data Caterer generate and validate data flows

      +

      Data Caterer generate and validate data flows

      Simplify your data testing

      diff --git a/site/legal/privacy-policy/index.html b/site/legal/privacy-policy/index.html index 79a71bd0..7b71f957 100644 --- a/site/legal/privacy-policy/index.html +++ b/site/legal/privacy-policy/index.html @@ -1245,32 +1245,6 @@ - - - - - -
    13. - - - - - - - Report - - - - - - - - -
    14. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
    15. + + + + + + + External Source + + + + + + + + +
    16. + + + + + + + +
    17. + + + + + + + + + + + + + + + + + +
    18. + + + + + + + + + + diff --git a/site/legal/terms-of-service/index.html b/site/legal/terms-of-service/index.html index 85fb1866..eb60ba9a 100644 --- a/site/legal/terms-of-service/index.html +++ b/site/legal/terms-of-service/index.html @@ -1245,32 +1245,6 @@ - - - - - -
    19. - - - - - - - Report - - - - - - - - -
    20. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
    21. + + + + + + + External Source + + + + + + + + +
    22. + + + + + + + + + + + + + + + + + + + + + + + + + +
    23. + + + + + + + + + + diff --git a/site/search/search_index.json b/site/search/search_index.json index a1ea8942..e6affd07 100644 --- a/site/search/search_index.json +++ b/site/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Home","text":"Data Caterer is a metadata-driven data generation and testing tool that aids in creating production-like data across both batch and event data systems. Run data validations to ensure your systems have ingested it as expected, then clean up the data afterwards. Simplify your data testing Take away the pain and complexity of your data landscape and let Data Caterer handle it

      Try now

      Data testing is difficult and fragmented
      • Data being sent via messages, HTTP requests or files and getting stored in databases, file systems, etc.
      • Maintaining and updating tests with the latest schemas and business definitions
      • Different testing tools for services, jobs or data sources
      • Complex relationships between datasets and fields
      • Different scenarios, permutations, combinations and edge cases to cover
      Current solutions only cover half the story
      • Specific testing frameworks that support one or limited number of data sources or transport protocols
      • Under utilizing metadata from data catalogs or metadata discovery services
      • Testing teams having difficulties understanding when failures occur
      • Integration tests relying on external teams/services
      • Manually generating data, or worse, copying/masking production data into lower environments
      • Observability pushes towards being reactive rather than proactive

      Try now

      What you need is a reliable tool that can handle changes to your data landscape

      With Data Caterer, you get:

      • Ability to connect to any type of data source: files, SQL or no-SQL databases, messaging systems, HTTP
      • Discover metadata from your existing infrastructure and services
      • Gain confidence that bugs do not propagate to production
      • Be proactive in ensuring changes do not affect other data producers or consumers
      • Configurability to run the way you want

      Try now

      "},{"location":"#tech-summary","title":"Tech Summary","text":"

      Use the Java, Scala API, or YAML files to help with setup or customisation that are all run via a Docker image. Want to get into details? Checkout the setup pages here to get code examples and guides that will take you through scenarios and data sources.

      Main features include:

      • Metadata discovery
      • Batch and event data generation
      • Maintain referential integrity across any dataset
      • Create custom data generation scenarios
      • Clean up generated data
      • Validate data
      • Suggest data validations

      Check other run configurations here.

      "},{"location":"#what-is-it","title":"What is it","text":"
      • Data generation and testing tool

        Generate production like data to be consumed and validated.

      • Designed for any data source

        We aim to support pushing data to any data source, in any format.

      • Low/no code solution

        Can use the tool via either Scala, Java or YAML. Connect to data or metadata sources to generate data and validate.

      • Developer productivity tool

        If you are a new developer or seasoned veteran, cut down on your feedback loop when developing with data.

      "},{"location":"#what-it-is-not","title":"What it is not","text":"
      • Metadata storage/platform

        You could store and use metadata within the data generation/validation tasks but is not the recommended approach. Rather, this metadata should be gathered from existing services who handle metadata on behalf of Data Caterer.

      • Data contract

        The focus of Data Caterer is on the data generation and testing, which can include details about how the data looks like and how it behaves. But it does not encompass all the additional metadata that comes with a data contract such as SLAs, security, etc.

      • Metrics from load testing

        Although millions of records can be generated, there are limited capabilities in terms of metric capturing.

      Try now

      Data Catering vs Other tools vs In-house

      Data Catering Other tools In-house Data flow Batch and events generation with validation Batch generation only or validation only Depends on architecture and design Time to results 1 day 1+ month to integrate, deploy and onboard 1+ month to build and deploy Solution Connect with your existing data ecosystem, automatic generation and validation Manual UI data entry or via SDK Depends on engineer(s) building it

      "},{"location":"about/","title":"About","text":"

      Hi, my name is Peter. I am a independent Software Developer, mainly focussing on data related services. My experience can be found on my LinkedIn.

      I have created Data Caterer to help serve individuals and companies with data generation and data testing. It is a complex area that has many edge cases or intricacies that are hard to summarise or turn into something actionable and repeatable. Through the use of metadata, Data Caterer can help simplify your data testing, simulating production environment data, aid in data debugging, or whatever your data use case may be.

      Given that it is going to save you and your team time and money, please help in considering financial support. This will help the product grow into a sustainable and feature-full service.

      "},{"location":"about/#contact","title":"Contact","text":"

      Please contact Peter Flook via Slack or via email peter.flook@data.catering if you have any questions or queries.

      "},{"location":"about/#terms-of-service","title":"Terms of service","text":"

      Terms of service can be found here.

      "},{"location":"about/#privacy-policy","title":"Privacy policy","text":"

      Privacy policy can be found here.

      "},{"location":"sponsor/","title":"Sponsor","text":"

      To have access to all the features of Data Caterer, you can subscribe according to your situation. You will not be charged by usage. As you continue to subscribe, you will have access to the latest version of Data Caterer as new bug fixes and features get published.

      This has been a passion project of mine where I have spent countless hours thinking of the idea, implementing, maintaining, documenting and updating it. I hope that it will help with developers and companies with their testing by saving time and effort, allowing you to focus on what is important. If you fall under this boat, please consider sponsorship to allow me to further maintain and upgrade the solution. Any contributions are much appreciated.

      Those who are wanting to use this project for open source applications, please contact me as I would be happy to contribute.

      This is inspired by the mkdocs-material project that follows the same model.

      "},{"location":"sponsor/#features","title":"Features","text":"
      • Metadata discovery
      • All data sources (see here for all data sources)
      • Batch and Event generation
      • Auto generation from data connections or metadata sources
      • Suggest data validations
      • Clean up generated data
      • Run as many times as you want, not charged by usage
      • Plus more to come
      "},{"location":"sponsor/#tiers","title":"Tiers","text":""},{"location":"sponsor/#manage-subscription","title":"Manage Subscription","text":"

      Manage via this link

      "},{"location":"sponsor/#contact","title":"Contact","text":"

      Please contact Peter Flook via Slack or via email peter.flook@data.catering if you have any questions or queries.

      "},{"location":"use-case/","title":"Use cases","text":""},{"location":"use-case/#replicate-production-in-lower-environment","title":"Replicate production in lower environment","text":"

      Having a stable and reliable test environment is a challenge for a number of companies, especially where teams are asynchronously deploying and testing changes at faster rates. Data Caterer can help alleviate these issues by doing the following:

      1. Generates data with the latest schema changes and production like field values
      2. Run as a job on a daily/regular basis to replicate production traffic or data flows
      3. Validate data to ensure your system runs as expected
      4. Clean up data to avoid build up of generated data

      "},{"location":"use-case/#local-development","title":"Local development","text":"

      Similar to the above, being able to replicate production like data in your local environment can be key to developing more reliable code as you can test directly against data in your local computer. This has a number of benefits including:

      1. Fewer assumptions or ambiguities when the developer codes
      2. Direct feedback loop in local computer rather than waiting for test environment for more reliable test data
      3. No domain expertise required to understand the data
      4. Easy for new developers to be onboarded and developing/testing code for jobs/services
      "},{"location":"use-case/#systemintegration-testing","title":"System/integration testing","text":"

      When working with third-party, external or internal data providers, it can be difficult to have all setup ready to produce reliable data that abides by relationship contracts between each of the systems. You have to rely on these data providers in order for you to run your tests which may not align to their priorities. With Data Caterer, you can generate the same data that they would produce, along with maintaining referential integrity across the data providers, so that you can run your tests without relying on their systems being up and reliable in their corresponding lower environments.

      "},{"location":"use-case/#scenario-testing","title":"Scenario testing","text":"

      If you want to set up particular data scenarios, you can customise the generated data to fit your scenario. Once the data gets generated and is consumed, you can also run validations to ensure your system has consumed the data correctly. These scenarios can be put together from existing tasks or data sources can be enabled/disabled based on your requirement. Built into Data Caterer and controlled via feature flags, is the ability to test edge cases based on the data type of the fields used for data generation (enableEdgeCases flag within <field>.generator.options, see more here).

      "},{"location":"use-case/#data-debugging","title":"Data debugging","text":"

      When data related issues occur in production, it may be difficult to replicate in a lower or local environment. It could be related to specific fields not containing expected results, size of data is too large or missing corresponding referenced data. This becomes key to resolving the issue as you can directly code against the exact data scenario and have confidence that your code changes will fix the problem. Data Caterer can be used to generate the appropriate data in whichever environment you want to test your changes against.

      "},{"location":"use-case/#data-profiling","title":"Data profiling","text":"

      When using Data Caterer with the feature flag enableGeneratePlanAndTasks enabled (see here), metadata relating all the fields defined in the data sources you have configured will be generated via data profiling. You can run this as a standalone job (can disable enableGenerateData) so that you can focus on the profile of the data you are utilising. This can be run against your production data sources to ensure the metadata can be used to accurately generate data in other environments. This is a key feature of Data Caterer as no direct production connections need to be maintained to generate data in other environments (which can lead to serious concerns about data security as seen here).

      "},{"location":"use-case/#schema-gathering","title":"Schema gathering","text":"

      When using Data Caterer with the feature flag enableGeneratePlanAndTasks enabled (see here), all schemas of the data sources defined will be tracked in a common format (as tasks). This data, along with the data profiling metadata, could then feed back into your schema registries to help keep them up to date with your system.

      "},{"location":"get-started/docker/","title":"Run Data Caterer","text":""},{"location":"get-started/docker/#quick-start","title":"Quick start","text":"

      Ensure you have docker installed and running.

      git clone git@github.com:pflooky/data-caterer-example.git\ncd data-caterer-example && ./run.sh\n#check results under docker/sample/report/index.html folder\n
      "},{"location":"get-started/docker/#report","title":"Report","text":"

      Check the report generated under docker/data/custom/report/index.html.

      Sample report can also be seen here

      "},{"location":"get-started/docker/#paid-version-trial","title":"Paid Version Trial","text":"

      30 day trial of the paid version can be accessed via these steps:

      1. Join the Slack Data Catering Slack group here
      2. Get an API_KEY by using slash command /token in the Slack group (will only be visible to you)
      3. git clone git@github.com:pflooky/data-caterer-example.git\ncd data-caterer-example && export DATA_CATERING_API_KEY=<insert api key>\n./run.sh\n

      If you want to check how long your trial has left, you can check back in the Slack group or type /token again.

      "},{"location":"get-started/docker/#guided-tour","title":"Guided tour","text":"

      Check out the starter guide here that will take your through step by step. You can also check the other guides here to see the other possibilities of what Data Caterer can achieve for you.

      "},{"location":"legal/privacy-policy/","title":"Privacy Policy","text":"

      Last updated September 25, 2023

      "},{"location":"legal/privacy-policy/#data-caterer-policy-on-privacy-of-customer-personal-information","title":"Data Caterer Policy on Privacy of Customer Personal Information","text":"

      Peter John Flook is committed to protecting the privacy and security of your personal information obtained by reason of your use of Data Caterer. This policy explains the types of customer personal information we collect, how it is used, and the steps we take to ensure your personal information is handled appropriately.

      "},{"location":"legal/privacy-policy/#who-is-peter-john-flook","title":"Who is Peter John Flook?","text":"

      For purposes of this Privacy Policy, \u201cPeter John Flook\u201d means Peter John Flook, the company developing and providing Data Caterer and related websites and services.

      "},{"location":"legal/privacy-policy/#what-is-personal-information","title":"What is personal information?","text":"

      Personal information is information that refers to an individual specifically and is recorded in any form. Personal information includes such things as age, income, date of birth, ethnic origin and credit records. Information about individuals contained in the following documents is not considered personal information:

      • public telephone directories, where the subscriber can refuse to be listed
      • professional and business directories available to the public
      • public registries and court records
      • other publicly available printed and electronic publications
      "},{"location":"legal/privacy-policy/#we-are-accountable-to-you","title":"We are accountable to you","text":"

      Peter John Flook is responsible for all personal information under its control. Our team is accountable for compliance with these privacy and security principles.

      "},{"location":"legal/privacy-policy/#we-let-you-know-why-we-collect-and-use-your-personal-information-and-get-your-consent","title":"We let you know why we collect and use your personal information and get your consent","text":"

      Peter John Flook identifies the purpose for which your personal information is collected and will be used or disclosed. If that purpose is not listed below we will do this before or at the time the information is actually being collected. You will be deemed to consent to our use of your personal information for the purpose of:

      • communicating with you generally
      • processing your purchases
      • processing and keeping track of transactions and reporting back to you
      • protecting against fraud or error
      • providing product and services requested by you
      • recommending products and services that Peter John Flook believes will be of interest and provide value to you
      • fulfilling any other purpose that would be reasonably apparent to the average person at the time we collect it from you

      Otherwise, Peter John Flook will obtain your express consent (by verbal, written or electronic agreement) to collect, use or disclose your personal information. You can change your consent preferences at any time by contacting Peter John Flook (please refer to the \u201cHow to contact us\u201d section below).

      "},{"location":"legal/privacy-policy/#we-limit-collection-of-your-personal-information","title":"We limit collection of your personal information","text":"

      Peter John Flook collects only the information required to provide products and services to you. Peter John Flook will collect personal information only by clear, fair and lawful means.

      We receive and store any information you enter on our website or give us in any other way. You can choose not to provide certain information, but then you might not be able to take advantage of many of our features.

      Peter John Flook does not receive or store personal content saved to your local device while using Data Caterer.

      We also receive and store certain types of information whenever you interact with us.

      "},{"location":"legal/privacy-policy/#information-provided-to-stripe","title":"Information provided to Stripe","text":"

      All purchases that are made through this site are processed securely and externally by Stripe. Unless you expressly consent otherwise, we do not see or have access to any personal information that you may provide to Stripe, other than information that is required in order to process your order and deliver your purchased items to you (eg, your name, email address and billing/postal address).

      "},{"location":"legal/privacy-policy/#we-limit-disclosure-and-retention-of-your-personal-information","title":"We limit disclosure and retention of your personal information","text":"

      Peter John Flook does not disclose personal information to any organization or person for any reason except the following:

      We employ other companies and individuals to perform functions on our behalf. Examples include fulfilling orders, delivering packages, sending postal mail and e-mail, removing repetitive information from customer lists, analyzing data, providing marketing assistance, processing credit card payments, and providing customer service. They have access to personal information needed to perform their functions, but may not use it for other purposes. We may use service providers located outside of Australia, and, if applicable, your personal information may be processed and stored in other countries and therefore may be subject to disclosure under the laws of those countries. As we continue to develop our business, we might sell or buy stores, subsidiaries, or business units. In such transactions, customer information generally is one of the transferred business assets but remains subject to the promises made in any pre-existing Privacy Notice (unless, of course, the customer consents otherwise). Also, in the unlikely event that Peter John Flook or substantially all of its assets are acquired, customer information of course will be one of the transferred assets. You are deemed to consent to disclosure of your personal information for those purposes. If your personal information is shared with third parties, those third parties are bound by appropriate agreements with Peter John Flook to secure and protect the confidentiality of your personal information.

      Peter John Flook retains your personal information only as long as it is required for our business relationship or as required by federal and provincial laws.

      "},{"location":"legal/privacy-policy/#we-keep-your-personal-information-up-to-date-and-accurate","title":"We keep your personal information up to date and accurate","text":"

      Peter John Flook keeps your personal information up to date, accurate and relevant for its intended use.

      You may request access to the personal information we have on record in order to review and amend the information, as appropriate. In circumstances where your personal information has been provided by a third party, we will refer you to that party (e.g. credit bureaus). To access your personal information, refer to the \u201cHow to contact us\u201d section below.

      "},{"location":"legal/privacy-policy/#the-security-of-your-personal-information-is-a-priority-for-peter-john-flook","title":"The security of your personal information is a priority for Peter John Flook","text":"

      We take steps to safeguard your personal information, regardless of the format in which it is held, including:

      physical security measures such as restricted access facilities and locked filing cabinets electronic security measures for computerized personal information such as password protection, database encryption and personal identification numbers. We work to protect the security of your information during transmission by using \u201cTransport Layer Security\u201d (TLS) protocol. organizational processes such as limiting access to your personal information to a selected group of individuals contractual obligations with third parties who need access to your personal information requiring them to protect and secure your personal information It\u2019s important for you to protect against unauthorized access to your password and your computer. Be sure to sign off when you\u2019ve finished using any shared computer.

      "},{"location":"legal/privacy-policy/#what-about-third-party-advertisers-and-links-to-other-websites","title":"What About Third-Party Advertisers and Links to Other Websites?","text":"

      Our site may include third-party advertising and links to other websites. We do not provide any personally identifiable customer information to these advertisers or third-party websites.

      These third-party websites and advertisers, or Internet advertising companies working on their behalf, sometimes use technology to send (or \u201cserve\u201d) the advertisements that appear on our website directly to your browser. They automatically receive your IP address when this happens. They may also use cookies, JavaScript, web beacons (also known as action tags or single-pixel gifs), and other technologies to measure the effectiveness of their ads and to personalize advertising content. We do not have access to or control over cookies or other features that they may use, and the information practices of these advertisers and third-party websites are not covered by this Privacy Notice. Please contact them directly for more information about their privacy practices. In addition, the Network Advertising Initiative offers useful information about Internet advertising companies (also called \u201cad networks\u201d or \u201cnetwork advertisers\u201d), including information about how to opt-out of their information collection. You can access the Network Advertising Initiative at http://www.networkadvertising.org.

      "},{"location":"legal/privacy-policy/#redirection-to-stripe","title":"Redirection to Stripe","text":"

      In particular, when you submit an order to us, you may be automatically redirected to Stripe in order to complete the required payment. The payment page that is provided by Stripe is not part of this site. As noted above, we are not privy to any of the bank account, credit card or other personal information that you may provide to Stripe, other than information that is required in order to process your order and deliver your purchased items to you (eg, your name, email address and billing/postal address). We recommend that you refer to Stripe\u2019s privacy statement if you would like more information about how Stripe collects and handles your personal information.

      "},{"location":"legal/privacy-policy/#we-are-open-about-our-privacy-and-security-policy","title":"We are open about our privacy and security policy","text":"

      We are committed to providing you with understandable and easily available information about our policy and practices related to management of your personal information. This policy and any related information is available at all times on our website, https://data.catering/about/ under Privacy or on request. To contact us, refer to the \u201cHow to contact us\u201d section below.

      "},{"location":"legal/privacy-policy/#we-provide-access-to-your-personal-information-stored-by-peter-john-flook","title":"We provide access to your personal information stored by Peter John Flook","text":"

      You can request access to your personal information stored by Peter John Flook. To contact us, refer to the \u201cHow to contact us\u201d section below. Upon receiving such a request, Peter John Flook will:

      inform you about what type of personal information we have on record or in our control, how it is used and to whom it may have been disclosed provide you with access to your information so you can review and verify the accuracy and completeness and request changes to the information make any necessary updates to your personal information We respond to your questions, concerns and complaints about privacy Peter John Flook responds in a timely manner to your questions, concerns and complaints about the privacy of your personal information and our privacy policies and procedures.

      "},{"location":"legal/privacy-policy/#how-to-contact-us","title":"How to contact us","text":"
      • by email at peter.flook@data.catering

      Our business changes constantly, and this privacy notice will change also. We may e-mail periodic reminders of our notices and conditions, unless you have instructed us not to, but you should check our website frequently to see recent changes. We are, however, committed to protecting your information and will never materially change our policies and practices to make them less protective of customer information collected in the past without the consent of affected customers.

      "},{"location":"legal/terms-of-service/","title":"Terms and Conditions","text":"

      Last updated: September 25, 2023

      Please read these terms and conditions carefully before using Our Service.

      "},{"location":"legal/terms-of-service/#interpretation-and-definitions","title":"Interpretation and Definitions","text":""},{"location":"legal/terms-of-service/#interpretation","title":"Interpretation","text":"

      The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

      "},{"location":"legal/terms-of-service/#definitions","title":"Definitions","text":"

      For the purposes of these Terms and Conditions:

      • Application means the software program provided by the Company downloaded by You on any electronic device, named Data Caterer
      • Application Store means the digital distribution service operated and developed by Docker Inc. (\u201cDocker\u201d) in which the Application has been downloaded.
      • Affiliate means an entity that controls, is controlled by or is under common control with a party, where \"control\" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.
      • Country refers to: New South Wales, Australia
      • Company (referred to as either \"the Company\", \"We\", \"Us\" or \"Our\" in this Agreement) refers to Peter John Flook ( ABN: 65153160916), 30 Anne William Drive, West Pennant Hills, 2125, NSW, Australia.
      • Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.
      • Service refers to the Application.
      • Terms and Conditions (also referred as \"Terms\") mean these Terms and Conditions that form the entire agreement between You and the Company regarding the use of the Service.
      • Third-party Social Media Service means any services or content (including data, information, products or services) provided by a third party that may be displayed, included or made available by the Service.
      • You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.
      "},{"location":"legal/terms-of-service/#acknowledgment","title":"Acknowledgment","text":"

      These are the Terms and Conditions governing the use of this Service and the agreement that operates between You and the Company. These Terms and Conditions set out the rights and obligations of all users regarding the use of the Service.

      Your access to and use of the Service is conditioned on Your acceptance of and compliance with these Terms and Conditions. These Terms and Conditions apply to all visitors, users and others who access or use the Service.

      By accessing or using the Service You agree to be bound by these Terms and Conditions. If You disagree with any part of these Terms and Conditions then You may not access the Service.

      You represent that you are over the age of 18. The Company does not permit those under 18 to use the Service.

      Your access to and use of the Service is also conditioned on Your acceptance of and compliance with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your personal information when You use the Application or the Website and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our Service.

      "},{"location":"legal/terms-of-service/#links-to-other-websites","title":"Links to Other Websites","text":"

      Our Service may contain links to third-party websites or services that are not owned or controlled by the Company.

      The Company has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party websites or services. You further acknowledge and agree that the Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such websites or services.

      We strongly advise You to read the terms and conditions and privacy policies of any third-party websites or services that You visit.

      "},{"location":"legal/terms-of-service/#termination","title":"Termination","text":"

      We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these Terms and Conditions.

      Upon termination, Your right to use the Service will cease immediately.

      "},{"location":"legal/terms-of-service/#limitation-of-liability","title":"Limitation of Liability","text":"

      Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of these Terms and Your exclusive remedy for all the foregoing shall be limited to the amount actually paid by You through the Service or 100 USD if You haven't purchased anything through the Service.

      To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Service, third-party software and/or third-party hardware used with the Service, or otherwise in connection with any provision of these Terms), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose.

      Some states do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states, each party's liability will be limited to the greatest extent permitted by law.

      "},{"location":"legal/terms-of-service/#as-is-and-as-available-disclaimer","title":"\"AS IS\" and \"AS AVAILABLE\" Disclaimer","text":"

      The Service is provided to You \"AS IS\" and \"AS AVAILABLE\" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its Affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Service, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Service will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected.

      Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Service, or the information, content, and materials or products included thereon; (ii) that the Service will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Service; or (iv) that the Service, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, time-bombs or other harmful components.

      Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law.

      "},{"location":"legal/terms-of-service/#governing-law","title":"Governing Law","text":"

      The laws of the Country, excluding its conflicts of law rules, shall govern this Terms and Your use of the Service. Your use of the Application may also be subject to other local, state, national, or international laws.

      "},{"location":"legal/terms-of-service/#disputes-resolution","title":"Disputes Resolution","text":"

      If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the Company.

      "},{"location":"legal/terms-of-service/#for-european-union-eu-users","title":"For European Union (EU) Users","text":"

      If You are a European Union consumer, you will benefit from any mandatory provisions of the law of the country in which you are resident in.

      "},{"location":"legal/terms-of-service/#united-states-legal-compliance","title":"United States Legal Compliance","text":"

      You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a \"terrorist supporting\" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.

      "},{"location":"legal/terms-of-service/#severability-and-waiver","title":"Severability and Waiver","text":""},{"location":"legal/terms-of-service/#severability","title":"Severability","text":"

      If any provision of these Terms is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect.

      "},{"location":"legal/terms-of-service/#waiver","title":"Waiver","text":"

      Except as provided herein, the failure to exercise a right or to require performance of an obligation under these Terms shall not affect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach.

      "},{"location":"legal/terms-of-service/#translation-interpretation","title":"Translation Interpretation","text":"

      These Terms and Conditions may have been translated if We have made them available to You on our Service. You agree that the original English text shall prevail in the case of a dispute.

      "},{"location":"legal/terms-of-service/#changes-to-these-terms-and-conditions","title":"Changes to These Terms and Conditions","text":"

      We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.

      By continuing to access or use Our Service after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the website and the Service.

      "},{"location":"legal/terms-of-service/#contact-us","title":"Contact Us","text":"

      If you have any questions about these Terms and Conditions, You can contact us:

      • By email: peter.flook@data.catering
      "},{"location":"setup/","title":"Setup","text":"

      All the configurations and customisation related to Data Caterer can be found under here.

      "},{"location":"setup/#guide","title":"Guide","text":"

      If you want a guided tour of using the Java or Scala API, you can follow one of the guides found here.

      "},{"location":"setup/#specific-configuration","title":"Specific Configuration","text":"
      • Configurations - Configurations relating to feature flags, folder pathways, metadata analysis
      • Connections - Explore the data source connections available
      • Generators - Choose and configure the type of generator you want used for fields
      • Validations - How to validate data to ensure your system is performing as expected
      • Foreign Keys - Define links between data elements across data sources
      • Deployment - Deploy Data Caterer as a job to your chosen environment
      • Advanced - Advanced usage of Data Caterer
      "},{"location":"setup/#high-level-run-configurations","title":"High Level Run Configurations","text":""},{"location":"setup/advanced/","title":"Advanced use cases","text":""},{"location":"setup/advanced/#special-data-formats","title":"Special data formats","text":"

      There are many options available for you to use when you have a scenario when data has to be a certain format.

      1. Create expression datafaker
        1. Can be used to create names, addresses, or anything that can be found under here
      2. Create regex
      "},{"location":"setup/advanced/#foreign-keys-across-data-sets","title":"Foreign keys across data sets","text":"

      Details for how you can configure foreign keys can be found here.

      "},{"location":"setup/advanced/#edge-cases","title":"Edge cases","text":"

      For each given data type, there are edge cases which can cause issues when your application processes the data. This can be controlled at a column level by including the following flag in the generator options:

      JavaScalaYAML
      field()\n.name(\"amount\")\n.type(DoubleType.instance())\n.enableEdgeCases(true)\n.edgeCaseProbability(0.1)\n
      field\n.name(\"amount\")\n.`type`(DoubleType)\n.enableEdgeCases(true)\n.edgeCaseProbability(0.1)\n
      fields:\n- name: \"amount\"\ntype: \"double\"\ngenerator:\ntype: \"random\"\noptions:\nenableEdgeCases: \"true\"\nedgeCaseProb: 0.1\n

      If you want to know all the possible edge cases for each data type, can check the documentation here.

      "},{"location":"setup/advanced/#scenario-testing","title":"Scenario testing","text":"

      You can create specific scenarios by adjusting the metadata found in the plan and tasks to your liking. For example, if you had two data sources, a Postgres database and a parquet file, and you wanted to save account data into Postgres and transactions related to those accounts into a parquet file. You can alter the status column in the account data to only generate open accounts and define a foreign key between Postgres and parquet to ensure the same account_id is being used. Then in the parquet task, define 1 to 10 transactions per account_id to be generated.

      Postgres account generation example task Parquet transaction generation example task Plan

      "},{"location":"setup/advanced/#cloud-storage","title":"Cloud storage","text":""},{"location":"setup/advanced/#data-source","title":"Data source","text":"

      If you want to save the file types CSV, JSON, Parquet or ORC into cloud storage, you can do so via adding extra configurations. Below is an example for S3.

      JavaScalaYAML
      var csvTask = csv(\"my_csv\", \"s3a://my-bucket/csv/accounts\")\n.schema(\nfield().name(\"account_id\"),\n...\n);\n\nvar s3Configuration = configuration()\n.runtimeConfig(Map.of(\n\"spark.hadoop.fs.s3a.directory.marker.retention\", \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\", \"true\",\n\"spark.hadoop.fs.defaultFS\", \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\", \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\", \"secret_key\"\n));\n\nexecute(s3Configuration, csvTask);\n
      val csvTask = csv(\"my_csv\", \"s3a://my-bucket/csv/accounts\")\n.schema(\nfield.name(\"account_id\"),\n...\n)\n\nval s3Configuration = configuration\n.runtimeConfig(Map(\n\"spark.hadoop.fs.s3a.directory.marker.retention\" -> \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" -> \"true\",\n\"spark.hadoop.fs.defaultFS\" -> \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" -> \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\" -> \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\" -> \"secret_key\"\n))\n\nexecute(s3Configuration, csvTask)\n
      folders {\ngeneratedPlanAndTaskFolderPath = \"s3a://my-bucket/data-caterer/generated\"\nplanFilePath = \"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\"\ntaskFolderPath = \"s3a://my-bucket/data-caterer/generated/task\"\n}\n\nruntime {\nconfig {\n...\n#S3\n\"spark.hadoop.fs.s3a.directory.marker.retention\" = \"keep\"\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" = \"true\"\n\"spark.hadoop.fs.defaultFS\" = \"s3a://my-bucket\"\n#can change to other credential providers as shown here\n#https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" = \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\"\n\"spark.hadoop.fs.s3a.access.key\" = \"access_key\"\n\"spark.hadoop.fs.s3a.secret.key\" = \"secret_key\"\n}\n}\n
      "},{"location":"setup/advanced/#storing-plantasks","title":"Storing plan/task(s)","text":"

      You can generate and store the plan/task files inside either AWS S3, Azure Blob Storage or Google GCS. This can be controlled via configuration set in the application.conf file where you can set something like the below:

      JavaScalaYAML
      configuration()\n.generatedReportsFolderPath(\"s3a://my-bucket/data-caterer/generated\")\n.planFilePath(\"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\")\n.taskFolderPath(\"s3a://my-bucket/data-caterer/generated/task\")\n.runtimeConfig(Map.of(\n\"spark.hadoop.fs.s3a.directory.marker.retention\", \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\", \"true\",\n\"spark.hadoop.fs.defaultFS\", \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\", \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\", \"secret_key\"\n));\n
      configuration\n.generatedReportsFolderPath(\"s3a://my-bucket/data-caterer/generated\")\n.planFilePath(\"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\")\n.taskFolderPath(\"s3a://my-bucket/data-caterer/generated/task\")\n.runtimeConfig(Map(\n\"spark.hadoop.fs.s3a.directory.marker.retention\" -> \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" -> \"true\",\n\"spark.hadoop.fs.defaultFS\" -> \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" -> \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\" -> \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\" -> \"secret_key\"\n))\n
      folders {\ngeneratedPlanAndTaskFolderPath = \"s3a://my-bucket/data-caterer/generated\"\nplanFilePath = \"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\"\ntaskFolderPath = \"s3a://my-bucket/data-caterer/generated/task\"\n}\n\nruntime {\nconfig {\n...\n#S3\n\"spark.hadoop.fs.s3a.directory.marker.retention\" = \"keep\"\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" = \"true\"\n\"spark.hadoop.fs.defaultFS\" = \"s3a://my-bucket\"\n#can change to other credential providers as shown here\n#https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" = \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\"\n\"spark.hadoop.fs.s3a.access.key\" = \"access_key\"\n\"spark.hadoop.fs.s3a.secret.key\" = \"secret_key\"\n}\n}\n
      "},{"location":"setup/configuration/","title":"Configuration","text":"

      A number of configurations can be made and customised within Data Caterer to help control what gets run and/or where any metadata gets saved.

      These configurations are defined from within your Java or Scala class via configuration or for YAML file setup, application.conf file as seen here.

      "},{"location":"setup/configuration/#flags","title":"Flags","text":"

      Flags are used to control which processes are executed when you run Data Caterer.

      Config Default Paid Description enableGenerateData true N Enable/disable data generation enableCount true N Count the number of records generated. Can be disabled to improve performance enableFailOnError true N Whilst saving generated data, if there is an error, it will stop any further data from being generated enableSaveReports true N Enable/disable HTML reports summarising data generated, metadata of data generated (if enableSinkMetadata is enabled) and validation results (if enableValidation is enabled). Sample here enableSinkMetadata true N Run data profiling for the generated data. Shown in HTML reports if enableSaveSinkMetadata is enabled enableValidation false N Run validations as described in plan. Results can be viewed from logs or from HTML report if enableSaveSinkMetadata is enabled. Sample here enableGeneratePlanAndTasks false Y Enable/disable plan and task auto generation based off data source connections enableRecordTracking false Y Enable/disable which data records have been generated for any data source enableDeleteGeneratedRecords false Y Delete all generated records based off record tracking (if enableRecordTracking has been set to true) enableGenerateValidations false Y If enabled, it will generate validations based on the data sources defined. JavaScalaapplication.conf
      configuration()\n.enableGenerateData(true)\n.enableCount(true)\n.enableFailOnError(true)\n.enableSaveReports(true)\n.enableSinkMetadata(true)\n.enableValidation(false)\n.enableGeneratePlanAndTasks(false)\n.enableRecordTracking(false)\n.enableDeleteGeneratedRecords(false)\n.enableGenerateValidations(false);\n
      configuration\n.enableGenerateData(true)\n.enableCount(true)\n.enableFailOnError(true)\n.enableSaveReports(true)\n.enableSinkMetadata(true)\n.enableValidation(false)\n.enableGeneratePlanAndTasks(false)\n.enableRecordTracking(false)\n.enableDeleteGeneratedRecords(false)\n.enableGenerateValidations(false)\n
      flags {\n  enableCount = false\n  enableCount = ${?ENABLE_COUNT}\n  enableGenerateData = true\n  enableGenerateData = ${?ENABLE_GENERATE_DATA}\n  enableFailOnError = true\n  enableFailOnError = ${?ENABLE_FAIL_ON_ERROR}\n  enableGeneratePlanAndTasks = false\n  enableGeneratePlanAndTasks = ${?ENABLE_GENERATE_PLAN_AND_TASKS}\n  enableRecordTracking = false\n  enableRecordTracking = ${?ENABLE_RECORD_TRACKING}\n  enableDeleteGeneratedRecords = false\n  enableDeleteGeneratedRecords = ${?ENABLE_DELETE_GENERATED_RECORDS}\n  enableGenerateValidations = false\n  enableGenerateValidations = ${?ENABLE_GENERATE_VALIDATIONS}\n}\n
      "},{"location":"setup/configuration/#folders","title":"Folders","text":"

      Depending on which flags are enabled, there are folders that get used to save metadata, store HTML reports or track the records generated.

      These folder pathways can be defined as a cloud storage pathway (i.e. s3a://my-bucket/task).

      Config Default Paid Description planFilePath /opt/app/plan/customer-create-plan.yaml N Plan file path to use when generating and/or validating data taskFolderPath /opt/app/task N Task folder path that contains all the task files (can have nested directories) validationFolderPath /opt/app/validation N Validation folder path that contains all the validation files (can have nested directories) generatedReportsFolderPath /opt/app/report N Where HTML reports get generated that contain information about data generated along with any validations performed generatedPlanAndTaskFolderPath /tmp Y Folder path where generated plan and task files will be saved recordTrackingFolderPath /opt/app/record-tracking Y Where record tracking parquet files get saved JavaScalaapplication.conf
      configuration()\n.planFilePath(\"/opt/app/custom/plan/postgres-plan.yaml\")\n.taskFolderPath(\"/opt/app/custom/task\")\n.validationFolderPath(\"/opt/app/custom/validation\")\n.generatedReportsFolderPath(\"/opt/app/custom/report\")\n.generatedPlanAndTaskFolderPath(\"/opt/app/custom/generated\")\n.recordTrackingFolderPath(\"/opt/app/custom/record-tracking\");\n
      configuration\n.planFilePath(\"/opt/app/custom/plan/postgres-plan.yaml\")\n.taskFolderPath(\"/opt/app/custom/task\")\n.validationFolderPath(\"/opt/app/custom/validation\")\n.generatedReportsFolderPath(\"/opt/app/custom/report\")\n.generatedPlanAndTaskFolderPath(\"/opt/app/custom/generated\")\n.recordTrackingFolderPath(\"/opt/app/custom/record-tracking\")\n
      folders {\n  planFilePath = \"/opt/app/custom/plan/postgres-plan.yaml\"\n  planFilePath = ${?PLAN_FILE_PATH}\n  taskFolderPath = \"/opt/app/custom/task\"\n  taskFolderPath = ${?TASK_FOLDER_PATH}\n  validationFolderPath = \"/opt/app/custom/validation\"\n  validationFolderPath = ${?VALIDATION_FOLDER_PATH}\n  generatedReportsFolderPath = \"/opt/app/custom/report\"\n  generatedReportsFolderPath = ${?GENERATED_REPORTS_FOLDER_PATH}\n  generatedPlanAndTaskFolderPath = \"/opt/app/custom/generated\"\n  generatedPlanAndTaskFolderPath = ${?GENERATED_PLAN_AND_TASK_FOLDER_PATH}\n  recordTrackingFolderPath = \"/opt/app/custom/record-tracking\"\n  recordTrackingFolderPath = ${?RECORD_TRACKING_FOLDER_PATH}\n}\n
      "},{"location":"setup/configuration/#metadata","title":"Metadata","text":"

      When metadata gets generated, there are some configurations that can be altered to help with performance or accuracy related issues. Metadata gets generated from two processes: 1) if enableGeneratePlanAndTasks or 2) if enableSinkMetadata are enabled.

      During the generation of plan and tasks, data profiling is used to create the metadata for each of the fields defined in the data source. You may face issues if the number of records in the data source is large as data profiling is an expensive task. Similarly, it can be expensive when analysing the generated data if the number of records generated is large.

      Config Default Paid Description numRecordsFromDataSource 10000 Y Number of records read in from the data source that could be used for data profiling numRecordsForAnalysis 10000 Y Number of records used for data profiling from the records gathered in numRecordsFromDataSource oneOfMinCount 1000 Y Minimum number of records required before considering if a field can be of type oneOf oneOfDistinctCountVsCountThreshold 0.2 Y Threshold ratio to determine if a field is of type oneOf (i.e. a field called status that only contains open or closed. Distinct count = 2, total count = 10, ratio = 2 / 10 = 0.2 therefore marked as oneOf) numGeneratedSamples 10 N Number of sample records from generated data to take. Shown in HTML report JavaScalaapplication.conf
      configuration()\n.numRecordsFromDataSourceForDataProfiling(10000)\n.numRecordsForAnalysisForDataProfiling(10000)\n.oneOfMinCount(1000)\n.oneOfDistinctCountVsCountThreshold(1000)\n.numGeneratedSamples(10);\n
      configuration\n.numRecordsFromDataSourceForDataProfiling(10000)\n.numRecordsForAnalysisForDataProfiling(10000)\n.oneOfMinCount(1000)\n.oneOfDistinctCountVsCountThreshold(1000)\n.numGeneratedSamples(10)\n
      metadata {\n  numRecordsFromDataSource = 10000\n  numRecordsForAnalysis = 10000\n  oneOfMinCount = 1000\n  oneOfDistinctCountVsCountThreshold = 0.2\n  numGeneratedSamples = 10\n}\n
      "},{"location":"setup/configuration/#generation","title":"Generation","text":"

      When generating data, you may have some limitations such as limited CPU or memory, large number of data sources, or data sources prone to failure under load. To help alleviate these issues or speed up performance, you can control the number of records that get generated in each batch.

      Config Default Paid Description numRecordsPerBatch 100000 N Number of records across all data sources to generate per batch numRecordsPerStep N Overrides the count defined in each step with this value if defined (i.e. if set to 1000, for each step, 1000 records will be generated) ScalaScalaapplication.conf
      configuration()\n.numRecordsPerBatch(100000)\n.numRecordsPerStep(1000);\n
      configuration\n.numRecordsPerBatch(100000)\n.numRecordsPerStep(1000)\n
      generation {\n  numRecordsPerBatch = 100000\n  numRecordsPerStep = 1000\n}\n
      "},{"location":"setup/configuration/#runtime","title":"Runtime","text":"

      Given Data Caterer uses Spark as the base framework for data processing, you can configure the job as to your specifications via configuration as seen here.

      JavaScalaapplication.conf
      configuration()\n.master(\"local[*]\")\n.runtimeConfig(Map.of(\"spark.driver.cores\", \"5\"))\n.addRuntimeConfig(\"spark.driver.memory\", \"10g\");\n
      configuration\n.master(\"local[*]\")\n.runtimeConfig(Map(\"spark.driver.cores\" -> \"5\"))\n.addRuntimeConfig(\"spark.driver.memory\" -> \"10g\")\n
      runtime {\n  master = \"local[*]\"\n  master = ${?DATA_CATERER_MASTER}\n  config {\n    \"spark.driver.cores\" = \"5\"\n    \"spark.driver.memory\" = \"10g\"\n  }\n}\n
      "},{"location":"setup/connection/","title":"Data Source Connections","text":"

      Details of all the connection configuration supported can be found in the below subsections for each type of connection.

      These configurations can be done via API or from configuration. Examples of both are shown for each data source below.

      "},{"location":"setup/connection/#supported-data-connections","title":"Supported Data Connections","text":"Data Source Type Data Source Sponsor Database Postgres, MySQL, Cassandra N File CSV, JSON, ORC, Parquet N Messaging Kafka, Solace Y HTTP REST API Y Metadata Marquez, OpenMetadata, OpenAPI/Swagger Y"},{"location":"setup/connection/#api","title":"API","text":"

      All connection details require a name. Depending on the data source, you can define additional options which may be used by the driver or connector for connecting to the data source.

      "},{"location":"setup/connection/#configuration-file","title":"Configuration file","text":"

      All connection details follow the same pattern.

      <connection format> {\n    <connection name> {\n        <key> = <value>\n    }\n}\n

      Overriding configuration

      When defining a configuration value that can be defined by a system property or environment variable at runtime, you can define that via the following:

      url = \"localhost\"\nurl = ${?POSTGRES_URL}\n

      The above defines that if there is a system property or environment variable named POSTGRES_URL, then that value will be used for the url, otherwise, it will default to localhost.

      "},{"location":"setup/connection/#data-sources","title":"Data sources","text":"

      To find examples of a task for each type of data source, please check out this page.

      "},{"location":"setup/connection/#file","title":"File","text":"

      Linked here is a list of generic options that can be included as part of your file data source configuration if required. Links to specific file type configurations can be found below.

      "},{"location":"setup/connection/#csv","title":"CSV","text":"JavaScalaapplication.conf
      csv(\"customer_transactions\", \"/data/customer/transaction\")\n
      csv(\"customer_transactions\", \"/data/customer/transaction\")\n
      csv {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?CSV_PATH}\n  }\n}\n

      Other available configuration for CSV can be found here

      "},{"location":"setup/connection/#json","title":"JSON","text":"JavaScalaapplication.conf
      json(\"customer_transactions\", \"/data/customer/transaction\")\n
      json(\"customer_transactions\", \"/data/customer/transaction\")\n
      json {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?JSON_PATH}\n  }\n}\n

      Other available configuration for JSON can be found here

      "},{"location":"setup/connection/#orc","title":"ORC","text":"JavaScalaapplication.conf
      orc(\"customer_transactions\", \"/data/customer/transaction\")\n
      orc(\"customer_transactions\", \"/data/customer/transaction\")\n
      orc {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?ORC_PATH}\n  }\n}\n

      Other available configuration for ORC can be found here

      "},{"location":"setup/connection/#parquet","title":"Parquet","text":"JavaScalaapplication.conf
      parquet(\"customer_transactions\", \"/data/customer/transaction\")\n
      parquet(\"customer_transactions\", \"/data/customer/transaction\")\n
      parquet {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?PARQUET_PATH}\n  }\n}\n

      Other available configuration for Parquet can be found here

      "},{"location":"setup/connection/#delta-not-supported-yet","title":"Delta (not supported yet)","text":"JavaScalaapplication.conf
      delta(\"customer_transactions\", \"/data/customer/transaction\")\n
      delta(\"customer_transactions\", \"/data/customer/transaction\")\n
      delta {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?DELTA_PATH}\n  }\n}\n
      "},{"location":"setup/connection/#rmdbs","title":"RMDBS","text":"

      Follows the same configuration used by Spark as found here. Sample can be found below

      JavaScalaapplication.conf
      postgres(\n\"customer_postgres\",                            #name\n\"jdbc:postgresql://localhost:5432/customer\",    #url\n\"postgres\",                                     #username\n\"postgres\"                                      #password\n)\n
      postgres(\n\"customer_postgres\",                            #name\n\"jdbc:postgresql://localhost:5432/customer\",    #url\n\"postgres\",                                     #username\n\"postgres\"                                      #password\n)\n
      jdbc {\n    customer_postgres {\n        url = \"jdbc:postgresql://localhost:5432/customer\"\n        url = ${?POSTGRES_URL}\n        user = \"postgres\"\n        user = ${?POSTGRES_USERNAME}\n        password = \"postgres\"\n        password = ${?POSTGRES_PASSWORD}\n        driver = \"org.postgresql.Driver\"\n    }\n}\n

      Ensure that the user has write permission, so it is able to save the table to the target tables.

      SQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO <user>;\n
      "},{"location":"setup/connection/#postgres","title":"Postgres","text":"

      Can see example API or Config definition for Postgres connection above.

      "},{"location":"setup/connection/#permissions","title":"Permissions","text":"

      Following permissions are required when generating plan and tasks:

      SQL Permission Statements
      GRANT SELECT ON information_schema.tables TO < user >;\nGRANT SELECT ON information_schema.columns TO < user >;\nGRANT SELECT ON information_schema.key_column_usage TO < user >;\nGRANT SELECT ON information_schema.table_constraints TO < user >;\nGRANT SELECT ON information_schema.constraint_column_usage TO < user >;\n
      "},{"location":"setup/connection/#mysql","title":"MySQL","text":"JavaScalaapplication.conf
      mysql(\n\"customer_mysql\",                       #name\n\"jdbc:mysql://localhost:3306/customer\", #url\n\"root\",                                 #username\n\"root\"                                  #password\n)\n
      mysql(\n\"customer_mysql\",                       #name\n\"jdbc:mysql://localhost:3306/customer\", #url\n\"root\",                                 #username\n\"root\"                                  #password\n)\n
      jdbc {\n    customer_mysql {\n        url = \"jdbc:mysql://localhost:3306/customer\"\n        user = \"root\"\n        password = \"root\"\n        driver = \"com.mysql.cj.jdbc.Driver\"\n    }\n}\n
      "},{"location":"setup/connection/#permissions_1","title":"Permissions","text":"

      Following permissions are required when generating plan and tasks:

      SQL Permission Statements
      GRANT SELECT ON information_schema.columns TO < user >;\nGRANT SELECT ON information_schema.statistics TO < user >;\nGRANT SELECT ON information_schema.key_column_usage TO < user >;\n
      "},{"location":"setup/connection/#cassandra","title":"Cassandra","text":"

      Follows same configuration as defined by the Spark Cassandra Connector as found here

      JavaScalaapplication.conf
      cassandra(\n\"customer_cassandra\",   #name\n\"localhost:9042\",       #url\n\"cassandra\",            #username\n\"cassandra\",            #password\nMap.of()                #optional additional connection options\n)\n
      cassandra(\n\"customer_cassandra\",   #name\n\"localhost:9042\",       #url\n\"cassandra\",            #username\n\"cassandra\",            #password\nMap()                #optional additional connection options\n)\n
      org.apache.spark.sql.cassandra {\n    customer_cassandra {\n        spark.cassandra.connection.host = \"localhost\"\n        spark.cassandra.connection.host = ${?CASSANDRA_HOST}\n        spark.cassandra.connection.port = \"9042\"\n        spark.cassandra.connection.port = ${?CASSANDRA_PORT}\n        spark.cassandra.auth.username = \"cassandra\"\n        spark.cassandra.auth.username = ${?CASSANDRA_USERNAME}\n        spark.cassandra.auth.password = \"cassandra\"\n        spark.cassandra.auth.password = ${?CASSANDRA_PASSWORD}\n    }\n}\n
      "},{"location":"setup/connection/#permissions_2","title":"Permissions","text":"

      Ensure that the user has write permission, so it is able to save the table to the target tables.

      CQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO <user>;\n

      Following permissions are required when enabling configuration.enableGeneratePlanAndTasks(true) as it will gather metadata information about tables and columns from the below tables.

      CQL Permission Statements
      GRANT SELECT ON system_schema.tables TO <user>;\nGRANT SELECT ON system_schema.columns TO <user>;\n
      "},{"location":"setup/connection/#kafka","title":"Kafka","text":"

      Define your Kafka bootstrap server to connect and send generated data to corresponding topics. Topic gets set at a step level. Further details can be found here

      JavaScalaapplication.conf
      kafka(\n\"customer_kafka\",   #name\n\"localhost:9092\"    #url\n)\n
      kafka(\n\"customer_kafka\",   #name\n\"localhost:9092\"    #url\n)\n
      kafka {\n    customer_kafka {\n        kafka.bootstrap.servers = \"localhost:9092\"\n        kafka.bootstrap.servers = ${?KAFKA_BOOTSTRAP_SERVERS}\n    }\n}\n

      When defining your schema for pushing data to Kafka, it follows a specific top level schema. An example can be found here . You can define the key, value, headers, partition or topic by following the linked schema.

      "},{"location":"setup/connection/#jms","title":"JMS","text":"

      Uses JNDI lookup to send messages to JMS queue. Ensure that the messaging system you are using has your queue/topic registered via JNDI otherwise a connection cannot be created.

      JavaScalaapplication.conf
      solace(\n\"customer_solace\",                                      #name\n\"smf://localhost:55554\",                                #url\n\"admin\",                                                #username\n\"admin\",                                                #password\n\"default\",                                              #vpn name\n\"/jms/cf/default\",                                      #connection factory\n\"com.solacesystems.jndi.SolJNDIInitialContextFactory\"   #initial context factory\n)\n
      solace(\n\"customer_solace\",                                      #name\n\"smf://localhost:55554\",                                #url\n\"admin\",                                                #username\n\"admin\",                                                #password\n\"default\",                                              #vpn name\n\"/jms/cf/default\",                                      #connection factory\n\"com.solacesystems.jndi.SolJNDIInitialContextFactory\"   #initial context factory\n)\n
      jms {\n    customer_solace {\n        initialContextFactory = \"com.solacesystems.jndi.SolJNDIInitialContextFactory\"\n        connectionFactory = \"/jms/cf/default\"\n        url = \"smf://localhost:55555\"\n        url = ${?SOLACE_URL}\n        user = \"admin\"\n        user = ${?SOLACE_USER}\n        password = \"admin\"\n        password = ${?SOLACE_PASSWORD}\n        vpnName = \"default\"\n        vpnName = ${?SOLACE_VPN}\n    }\n}\n
      "},{"location":"setup/connection/#http","title":"HTTP","text":"

      Define any username and/or password needed for the HTTP requests. The url is defined in the tasks to allow for generated data to be populated in the url.

      JavaScalaapplication.conf
      http(\n\"customer_api\", #name\n\"admin\",        #username\n\"admin\"         #password\n)\n
      http(\n\"customer_api\", #name\n\"admin\",        #username\n\"admin\"         #password\n)\n
      http {\n    customer_api {\n        user = \"admin\"\n        user = ${?HTTP_USER}\n        password = \"admin\"\n        password = ${?HTTP_PASSWORD}\n    }\n}\n
      "},{"location":"setup/deployment/","title":"Deployment","text":"

      Two main ways to deploy and run Data Caterer:

      • Docker
      • Helm
      "},{"location":"setup/deployment/#docker","title":"Docker","text":"

      To package up your class along with the Data Caterer base image, you can follow the Dockerfile that is created for you here.

      Then you can run the following:

      ./gradlew clean build\ndocker build -t <my_image_name>:<my_image_tag> .\n
      "},{"location":"setup/deployment/#helm","title":"Helm","text":"

      Link to sample helm on GitHub here

      Update the configuration to your own data connections and configuration or own image created from above.

      git clone git@github.com:pflooky/data-caterer-example.git\nhelm install data-caterer ./data-caterer-example/helm/data-caterer\n
      "},{"location":"setup/design/","title":"Design","text":"

      This document shows the thought process behind the design of Data Caterer to help give you insights as to how and why it was created to what it is today. Also, this serves as a reference for future design decisions which will get updated here and thus is a living document.

      "},{"location":"setup/design/#motivation","title":"Motivation","text":"

      The main difficulties that I faced as a developer and team lead relating to testing were:

      • Difficulty in testing with multiple data sources, both batch and real time
      • Reliance on other teams for stable environments or domain knowledge
      • Test environments with no reliable or consistent data flows
      • Complex data masking/anonymization solutions
      • Relying on production data (potential privacy and data breach issues)
      • Cost of data production issues can be very high
      • Unknown unknowns staying hidden until problems occur in production
      • Underutilised metadata
      "},{"location":"setup/design/#guiding-principles","title":"Guiding Principles","text":"

      These difficulties helped formed the basis of the principles for which Data Caterer should follow:

      • Data source agnostic: Connect to any batch or real time data sources for data generation or validation
      • Configurable: Run the application the way you want
      • Extensible: Allow for new innovations to seamlessly integrate with Data Caterer
      • Integrate with existing solutions: Utilise existing metadata to make it easy for users to use straight away
      • Secure: No production connections required, metadata based solution
      • Fast: Give developers fast feedback loops to encourage them to thoroughly test data flows
      "},{"location":"setup/design/#high-level-flow","title":"High level flow","text":"
      graph LR\n  subgraph userTasks [User Configuration]\n  dataGen[Data Generation]\n  dataValid[Data Validation]\n  runConf[Runtime Config]\n  end\n\n  subgraph dataProcessor [Processor]\n  dataCaterer[Data Caterer]\n  end\n\n  subgraph existingMetadata [Metadata]\n  metadataService[Metadata Services]\n  metadataDataSource[Data Sources]\n  end\n\n  subgraph output [Output]\n  outputDataSource[Data Sources]\n  report[Report]\n  end\n\n  dataGen --> dataCaterer\n  dataValid --> dataCaterer\n  runConf --> dataCaterer\n  direction TB\n  dataCaterer -.-> metadataService\n  dataCaterer -.-> metadataDataSource\n  direction LR\n  dataCaterer ---> outputDataSource\n  dataCaterer ---> report
      1. User Configuration
        1. Users define data generation, validation and runtime configuration
      2. Processor
        1. Engine will take user configuration to decide how to run
        2. User defined configuration merged with metadata from external sources
      3. Metadata
        1. Automatically retrieve schema, data profiling, relationship or validation rule metadata from data sources or metadata services
      4. Output
        1. Execute data generation and validation tasks on data sources
        2. Generate report summarising outcome
      "},{"location":"setup/foreign-key/","title":"Foreign Keys","text":"

      Foreign keys can be defined to represent the relationships between datasets where values are required to match for particular columns.

      "},{"location":"setup/foreign-key/#single-column","title":"Single column","text":"

      Define a column in one data source to match against another column. Below example shows a postgres data source with two tables, accounts and transactions that have a foreign key for account_id.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\n...\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, \"account_id\",\nList.of(Map.entry(postgresTxn, \"account_id\"))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nval postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\n...\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, \"account_id\",\nList(postgresTxn -> \"account_id\")\n)\n
      ---\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n- name: \"transactions\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"full_name\"\n---\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n\nsinkOptions:\nforeignKeys:\n\"postgres.accounts.account_id\":\n- \"postgres.transactions.account_id\"\n
      "},{"location":"setup/foreign-key/#multiple-columns","title":"Multiple columns","text":"

      You may have a scenario where multiple columns need to be aligned. From the same example, we want account_id and name from accounts to match with account_id and full_name to match in transactions respectively.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\n...\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(postgresTxn, List.of(\"account_id\", \"full_name\")))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nval postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\n...\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, List(\"account_id\", \"name\"),\nList(postgresTxn -> List(\"account_id\", \"full_name\"))\n)\n
      ---\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n- name: \"transactions\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"full_name\"\n---\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n\nsinkOptions:\nforeignKeys:\n\"my_postgres.accounts.account_id,name\":\n- \"my_postgres.transactions.account_id,full_name\"\n
      "},{"location":"setup/foreign-key/#nested-column","title":"Nested column","text":"

      Your schema structure can have nested fields which can also be referenced as foreign keys. But to do so, you need to create a proxy field that gets omitted from the final saved data.

      In the example below, the nested customer_details.name field inside the json task needs to match with name from postgres. A new field in the json called _txn_name is used as a temporary column to facilitate the foreign key definition.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar jsonTask = json(\"my_json\", \"/tmp/json\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").sql(\"_txn_name\"), #nested field will get value from '_txn_name'\n...\n),\nfield().name(\"_txn_name\").omit(true)       #value will not be included in output\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(jsonTask, List.of(\"account_id\", \"_txn_name\")))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nvar jsonTask = json(\"my_json\", \"/tmp/json\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").sql(\"_txn_name\"), #nested field will get value from '_txn_name'\n...\n), field.name(\"_txn_name\").omit(true)       #value will not be included in output\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, List(\"account_id\", \"name\"),\nList(jsonTask -> List(\"account_id\", \"_txn_name\"))\n)\n
      ---\n#postgres task yaml\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n---\n#json task yaml\nname: \"json_data\"\nsteps:\n- name: \"transactions\"\ntype: \"json\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"_txn_name\"\ngenerator:\noptions:\nomit: true\n- name: \"cusotmer_details\"\nschema:\nfields:\nname: \"name\"\ngenerator:\ntype: \"sql\"\noptions:\nsql: \"_txn_name\"\n\n---\n#plan yaml\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n- name: \"json_data\"\ndataSourceName: \"my_json\"\n\nsinkOptions:\nforeignKeys:\n\"my_postgres.accounts.account_id,name\":\n- \"my_json.transactions.account_id,_txn_name\"\n
      "},{"location":"setup/validation/","title":"Validations","text":"

      Validations can be used to run data checks after you have run the data generator or even as a standalone task. A report summarising the success or failure of the validations is produced and can be examined for further investigation.

      • Basic - Basic column level validations
      • Group by/Aggregate - Run aggregates over grouped data, then validate
      • Upstream data source - Ensure record values exist in datasets based on other data sources or data generated
      • [Data Profile (Coming soon)] - Score how close the data profile of generated data is against the target data profile
      "},{"location":"setup/validation/#define-validations","title":"Define Validations","text":"

      Full example validation can be found below. For more details, check out each of the subsections defined further below.

      JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validations(\nvalidation().col(\"amount\").lessThan(100),\nvalidation().col(\"year\").isEqual(2021).errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation().col(\"name\").matches(\"Peter .*\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)\n.validationWait(waitCondition().pause(1));\n\nvar conf = configuration().enableValidation(true);\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validations(\nvalidation.col(\"amount\").lessThan(100),\nvalidation.col(\"year\").isEqual(2021).errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation.col(\"name\").matches(\"Peter .*\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)  .validationWait(waitCondition.pause(1))\n\nval conf = configuration.enableValidation(true)\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"year == 2021\"\nerrorThreshold: 0.1   #equivalent to if error percentage is > 10%, then fail\n- expr: \"REGEXP_LIKE(name, 'Peter .*')\"\nerrorThreshold: 200   #equivalent to if number of errors is > 200, then fail\ndescription: \"Should be lots of Peters\"\nwaitCondition:\npauseInSeconds: 1\n
      "},{"location":"setup/validation/#wait-condition","title":"Wait Condition","text":"

      Once data has been generated, you may want to wait for a certain condition to be met before starting the data validations. This can be via:

      • Pause for seconds
      • When file is available
      • Data exists
      • Webhook
      "},{"location":"setup/validation/#pause","title":"Pause","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().pause(1));\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.pause(1))\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\npauseInSeconds: 1\n
      "},{"location":"setup/validation/#data-exists","title":"Data exists","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWaitDataExists(\"updated_date > DATE('2023-01-01')\");\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWaitDataExists(\"updated_date > DATE('2023-01-01')\")\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\ndataSourceName: \"transactions\"\noptions:\npath: \"/tmp/csv\"\nexpr: \"updated_date > DATE('2023-01-01')\"\n
      "},{"location":"setup/validation/#webhook","title":"Webhook","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"http://localhost:8080/finished\")); //by default, GET request successful when 200 status code\n\n//or\n\nvar csvTxnsWithStatusCodes = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"http://localhost:8080/finished\", \"GET\", 200, 202));  //successful if 200 or 202 status code\n\n//or\n\nvar csvTxnsWithExistingHttpConnection = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"my_http\", \"http://localhost:8080/finished\"));  //use connection configuration from existing 'my_http' connection definition\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"http://localhost:8080/finished\"))  //by default, GET request successful when 200 status code\n\n//or\n\nval csvTxnsWithStatusCodes = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"http://localhost:8080/finished\", \"GET\", 200, 202)) //successful if 200 or 202 status code\n\n//or\n\nval csvTxnsWithExistingHttpConnection = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"my_http\", \"http://localhost:8080/finished\")) //use connection configuration from existing 'my_http' connection definition\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\nurl: \"http://localhost:8080/finished\" #by default, GET request successful when 200 status code\n\n#or\n\n---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\nurl: \"http://localhost:8080/finished\"\nmethod: \"GET\"\nstatusCodes: [200, 202] #successful if 200 or 202 status code\n\n#or\n\n---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\ndataSourceName: \"my_http\" #use connection configuration from existing 'my_http' connection definition\nurl: \"http://localhost:8080/finished\"\n
      "},{"location":"setup/validation/#file-exists","title":"File exists","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().file(\"/tmp/json\"));\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition.file(\"/tmp/json\"))\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\npath: \"/tmp/json\"\n
      "},{"location":"setup/validation/#report","title":"Report","text":"

      Once run, it will produce a report like this.

      "},{"location":"setup/generator/count/","title":"Record Count","text":"

      There are options related to controlling the number of records generated that can help in generating the scenarios or data required.

      "},{"location":"setup/generator/count/#record-count_1","title":"Record Count","text":"

      Record count is the simplest as you define the total number of records you require for that particular step. For example, in the below step, it will generate 1000 records for the CSV file

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(1000);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(1000)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\n
      "},{"location":"setup/generator/count/#generated-count","title":"Generated Count","text":"

      As like most things in Data Caterer, the count can be generated based on some metadata. For example, if I wanted to generate between 1000 and 2000 records, I could define that by the below configuration:

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(generator().min(1000).max(2000));\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(generator.min(1000).max(2000))\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\ngenerator:\ntype: \"random\"\noptions:\nmin: 1000\nmax: 2000\n
      "},{"location":"setup/generator/count/#per-column-count","title":"Per Column Count","text":"

      When defining a per column count, this allows you to generate records \"per set of columns\". This means that for a given set of columns, it will generate a particular amount of records per combination of values for those columns.

      One example of this would be when generating transactions relating to a customer, a customer may be defined by columns account_id, name. A number of transactions would be generated per account_id, name.

      You can also use a combination of the above two methods to generate the number of records per column.

      "},{"location":"setup/generator/count/#records","title":"Records","text":"

      When defining a base number of records within the perColumn configuration, it translates to creating (count.records * count.recordsPerColumn) records. This is a fixed number of records that will be generated each time, with no variation between runs.

      In the example below, we have count.records = 1000 and count.recordsPerColumn = 2. Which means that 1000 * 2 = 2000 records will be generated in total.

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount()\n.records(1000)\n.recordsPerColumn(2, \"account_id\", \"name\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount\n.records(1000)\n.recordsPerColumn(2, \"account_id\", \"name\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\nperColumn:\nrecords: 2\ncolumnNames:\n- \"account_id\"\n- \"name\"\n
      "},{"location":"setup/generator/count/#generated","title":"Generated","text":"

      You can also define a generator for the count per column. This can be used in scenarios where you want a variable number of records per set of columns.

      In the example below, it will generate between (count.records * count.perColumnGenerator.generator.min) = (1000 * 1) = 1000 and (count.records * count.perColumnGenerator.generator.max) = (1000 * 2) = 2000 records.

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount()\n.records(1000)\n.recordsPerColumnGenerator(generator().min(1).max(2), \"account_id\", \"name\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount\n.records(1000)\n.recordsPerColumnGenerator(generator.min(1).max(2), \"account_id\", \"name\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\nperColumn:\ncolumnNames:\n- \"account_id\"\n- \"name\"\ngenerator:\ntype: \"random\"\noptions:\nmin: 1\nmax: 2\n
      "},{"location":"setup/generator/data-generator/","title":"Data Generators","text":""},{"location":"setup/generator/data-generator/#data-types","title":"Data Types","text":"

      Below is a list of all supported data types for generating data:

      Data Type Spark Data Type Options Description string StringType minLen, maxLen, expression, enableNull integer IntegerType min, max, stddev, mean long LongType min, max, stddev, mean short ShortType min, max, stddev, mean decimal(precision, scale) DecimalType(precision, scale) min, max, stddev, mean double DoubleType min, max, stddev, mean float FloatType min, max, stddev, mean date DateType min, max, enableNull timestamp TimestampType min, max, enableNull boolean BooleanType binary BinaryType minLen, maxLen, enableNull byte ByteType array ArrayType arrayMinLen, arrayMaxLen, arrayType _ StructType Implicitly supported when a schema is defined for a field"},{"location":"setup/generator/data-generator/#options","title":"Options","text":""},{"location":"setup/generator/data-generator/#all-data-types","title":"All data types","text":"

      Some options are available to use for all types of data generators. Below is the list along with example and descriptions:

      Option Default Example Description enableEdgeCase false enableEdgeCase: \"true\" Enable/disable generated data to contain edge cases based on the data type. For example, integer data type has edge cases of (Int.MaxValue, Int.MinValue and 0) edgeCaseProbability 0.0 edgeCaseProb: \"0.1\" Probability of generating a random edge case value if enableEdgeCase is true isUnique false isUnique: \"true\" Enable/disable generated data to be unique for that column. Errors will be thrown when it is unable to generate unique data seed seed: \"1\" Defines the random seed for generating data for that particular column. It will override any seed defined at a global level sql sql: \"CASE WHEN amount < 10 THEN true ELSE false END\" Define any SQL statement for generating that columns value. Computation occurs after all non-SQL fields are generated. This means any columns used in the SQL cannot be based on other SQL generated columns. Data type of generated value from SQL needs to match data type defined for the field"},{"location":"setup/generator/data-generator/#string","title":"String","text":"Option Default Example Description minLen 1 minLen: \"2\" Ensures that all generated strings have at least length minLen maxLen 10 maxLen: \"15\" Ensures that all generated strings have at most length maxLen expression expression: \"#{Name.name}\"expression:\"#{Address.city}/#{Demographic.maritalStatus}\" Will generate a string based on the faker expression provided. All possible faker expressions can be found here Expression has to be in format #{<faker expression name>} enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (\"\", \"\\n\", \"\\r\", \"\\t\", \" \", \"\\u0000\", \"\\ufff\", \"\u0130yi g\u00fcnler\", \"\u0421\u043f\u0430\u0441\u0438\u0431\u043e\", \"\u039a\u03b1\u03bb\u03b7\u03bc\u03ad\u03c1\u03b1\", \"\u0635\u0628\u0627\u062d \u0627\u0644\u062e\u064a\u0631\", \" F\u00f6rl\u00e5t\", \"\u4f60\u597d\u5417\", \"Nh\u00e0 v\u1ec7 sinh \u1edf \u0111\u00e2u\", \"\u3053\u3093\u306b\u3061\u306f\", \"\u0928\u092e\u0938\u094d\u0924\u0947\", \"\u0532\u0561\u0580\u0565\u0582\", \"\u0417\u0434\u0440\u0430\u0432\u0435\u0439\u0442\u0435\")

      "},{"location":"setup/generator/data-generator/#sample","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield()\n.name(\"name\")\n.type(StringType.instance())\n.expression(\"#{Name.name}\")\n.enableNull(true)\n.nullProbability(0.1)\n.minLength(4)\n.maxLength(20)\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield\n.name(\"name\")\n.`type`(StringType)\n.expression(\"#{Name.name}\")\n.enableNull(true)\n.nullProbability(0.1)\n.minLength(4)\n.maxLength(20)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\nschema:\nfields:\n- name: \"name\"\ntype: \"string\"\ngenerator:\noptions:\nexpression: \"#{Name.name}\"\nenableNull: true\nnullProb: 0.1\nminLength: 4\nmaxLength: 20\n
      "},{"location":"setup/generator/data-generator/#numeric","title":"Numeric","text":"

      For all the numeric data types, there are 4 options to choose from: min, max and maxValue. Generally speaking, you only need to define one of min or minValue, similarly with max or maxValue. The reason why there are 2 options for each is because of when metadata is automatically gathered, we gather the statistics of the observed min and max values. Also, it will attempt to gather any restriction on the min or max value as defined by the data source (i.e. max value as per database type).

      "},{"location":"setup/generator/data-generator/#integerlongshort","title":"Integer/Long/Short","text":"Option Default Example Description min 0 min: \"2\" Ensures that all generated values are greater than or equal to min max 1000 max: \"25\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data

      Edge cases Integer: (2147483647, -2147483648, 0) Edge cases Long: (9223372036854775807, -9223372036854775808, 0) Edge cases Short: (32767, -32768, 0)

      "},{"location":"setup/generator/data-generator/#sample_1","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"year\").type(IntegerType.instance()).min(2020).max(2023),\nfield().name(\"customer_id\").type(LongType.instance()),\nfield().name(\"customer_group\").type(ShortType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"year\").`type`(IntegerType).min(2020).max(2023),\nfield.name(\"customer_id\").`type`(LongType),\nfield.name(\"customer_group\").`type`(ShortType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"year\"\ntype: \"integer\"\ngenerator:\noptions:\nmin: 2020\nmax: 2023\n- name: \"customer_id\"\ntype: \"long\"\n- name: \"customer_group\"\ntype: \"short\"\n
      "},{"location":"setup/generator/data-generator/#decimal","title":"Decimal","text":"Option Default Example Description min 0 min: \"2\" Ensures that all generated values are greater than or equal to min max 1000 max: \"25\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data numericPrecision 10 precision: \"25\" The maximum number of digits numericScale 0 scale: \"25\" The number of digits on the right side of the decimal point (has to be less than or equal to precision)

      Edge cases Decimal: (9223372036854775807, -9223372036854775808, 0)

      "},{"location":"setup/generator/data-generator/#sample_2","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"balance\").type(DecimalType.instance()).numericPrecision(10).numericScale(5)\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"balance\").`type`(DecimalType).numericPrecision(10).numericScale(5)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"balance\"\ntype: \"decimal\"\ngenerator:\noptions:\nprecision: 10\nscale: 5\n
      "},{"location":"setup/generator/data-generator/#doublefloat","title":"Double/Float","text":"Option Default Example Description min 0.0 min: \"2.1\" Ensures that all generated values are greater than or equal to min max 1000.0 max: \"25.9\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data

      Edge cases Double: (+infinity, 1.7976931348623157e+308, 4.9e-324, 0.0, -0.0, -1.7976931348623157e+308, -infinity, NaN) Edge cases Float: (+infinity, 3.4028235e+38, 1.4e-45, 0.0, -0.0, -3.4028235e+38, -infinity, NaN)

      "},{"location":"setup/generator/data-generator/#sample_3","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"amount\").type(DoubleType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"amount\").`type`(DoubleType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"amount\"\ntype: \"double\"\n
      "},{"location":"setup/generator/data-generator/#date","title":"Date","text":"Option Default Example Description min now() - 365 days min: \"2023-01-31\" Ensures that all generated values are greater than or equal to min max now() max: \"2023-12-31\" Ensures that all generated values are less than or equal to max enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (0001-01-01, 1582-10-15, 1970-01-01, 9999-12-31) (reference)

      "},{"location":"setup/generator/data-generator/#sample_4","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"created_date\").type(DateType.instance()).min(java.sql.Date.valueOf(\"2020-01-01\"))\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"created_date\").`type`(DateType).min(java.sql.Date.valueOf(\"2020-01-01\"))\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"created_date\"\ntype: \"date\"\ngenerator:\noptions:\nmin: \"2020-01-01\"\n
      "},{"location":"setup/generator/data-generator/#timestamp","title":"Timestamp","text":"Option Default Example Description min now() - 365 days min: \"2023-01-31 23:10:10\" Ensures that all generated values are greater than or equal to min max now() max: \"2023-12-31 23:10:10\" Ensures that all generated values are less than or equal to max enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (0001-01-01 00:00:00, 1582-10-15 23:59:59, 1970-01-01 00:00:00, 9999-12-31 23:59:59)

      "},{"location":"setup/generator/data-generator/#sample_5","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"created_time\").type(TimestampType.instance()).min(java.sql.Timestamp.valueOf(\"2020-01-01 00:00:00\"))\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"created_time\").`type`(TimestampType).min(java.sql.Timestamp.valueOf(\"2020-01-01 00:00:00\"))\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"created_time\"\ntype: \"timestamp\"\ngenerator:\noptions:\nmin: \"2020-01-01 00:00:00\"\n
      "},{"location":"setup/generator/data-generator/#binary","title":"Binary","text":"Option Default Example Description minLen 1 minLen: \"2\" Ensures that all generated array of bytes have at least length minLen maxLen 20 maxLen: \"15\" Ensures that all generated array of bytes have at most length maxLen enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (\"\", \"\\n\", \"\\r\", \"\\t\", \" \", \"\\u0000\", \"\\ufff\", -128, 127)

      "},{"location":"setup/generator/data-generator/#sample_6","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"payload\").type(BinaryType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"payload\").`type`(BinaryType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"payload\"\ntype: \"binary\"\n
      "},{"location":"setup/generator/data-generator/#array","title":"Array","text":"Option Default Example Description arrayMinLen 0 arrayMinLen: \"2\" Ensures that all generated arrays have at least length arrayMinLen arrayMaxLen 5 arrayMaxLen: \"15\" Ensures that all generated arrays have at most length arrayMaxLen arrayType arrayType: \"double\" Inner data type of the array. Optional when using Java/Scala API. Allows for nested data types to be defined like struct enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true"},{"location":"setup/generator/data-generator/#sample_7","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"last_5_amounts\").type(ArrayType.instance()).arrayType(\"double\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"last_5_amounts\").`type`(ArrayType).arrayType(\"double\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"last_5_amounts\"\ntype: \"array<double>\"\n
      "},{"location":"setup/generator/report/","title":"Report","text":"

      Data Caterer can be configured to produce a report of the data generated to help users understand what was run, how much data was generated, where it was generated, validation results and any associated metadata.

      "},{"location":"setup/generator/report/#sample","title":"Sample","text":"

      Once run, it will produce a report like this.

      "},{"location":"setup/guide/","title":"Guides","text":"

      Below are a list of guides you can follow to create your data generation for your use case.

      For any of the paid tier guides, you can use the trial version fo the app to try it out. Details on how to get the trial can be found here.

      "},{"location":"setup/guide/#scenarios","title":"Scenarios","text":"
      • First Data Generation - If you are new, this is the place to start
      • Multiple Records Per Column Value - How you can generate multiple records per set of columns
      • Foreign Keys Across Data Sources - Generate matching values across generated data sets
      • Data Validations - Run data validations after generating data
      • Auto Generate From Data Connection - Automatically generating data from just defining data sources
      • Delete Generated Data - Delete the generated data whilst leaving other data
      • Generate Batch and Event Data - Generate matching batch and event data
      "},{"location":"setup/guide/#data-sources","title":"Data Sources","text":"
      • Files (CSV, JSON, ORC, Parquet) - Generate data for popular file formats
      • Postgres - JDBC Postgres tables
      • Cassandra - Cassandra tables
      • Kafka - Kafka topics
      • Solace - Solace messages
      • Marquez - Generate data based on metadata in Marquez
      • OpenMetadata - Generate data based on metadata in OpenMetadata
      • HTTP - HTTP requests
      • Files (Fixed width) - (Soon to document) A variant of CSV but with no separator
      • MySql - (Soon to document) JDBC MySql tables
      "},{"location":"setup/guide/#yaml-files","title":"YAML Files","text":""},{"location":"setup/guide/#base-concept","title":"Base Concept","text":"

      The execution of the data generator is based on the concept of plans and tasks. A plan represent the set of tasks that need to be executed, along with other information that spans across tasks, such as foreign keys between data sources. A task represent the component(s) of a data source and its associated metadata so that it understands what the data should look like and how many steps (sub data sources) there are (i.e. tables in a database, topics in Kafka). Tasks can define one or more steps.

      "},{"location":"setup/guide/#plan","title":"Plan","text":""},{"location":"setup/guide/#foreign-keys","title":"Foreign Keys","text":"

      Define foreign keys across data sources in your plan to ensure generated data can match Link to associated task 1 Link to associated task 2

      "},{"location":"setup/guide/#task","title":"Task","text":"Data Source Type Data Source Sample Task Notes Database Postgres Sample Database MySQL Sample Database Cassandra Sample File CSV Sample File JSON Sample Contains nested schemas and use of SQL for generated values File Parquet Sample Partition by year column Kafka Kafka Sample Specific base schema to be used, define headers, key, value, etc. JMS Solace Sample JSON formatted message HTTP PUT Sample JSON formatted PUT body"},{"location":"setup/guide/#configuration","title":"Configuration","text":"

      Basic configuration

      "},{"location":"setup/guide/#docker-compose","title":"Docker-compose","text":"

      To see how it runs against different data sources, you can run using docker-compose and set DATA_SOURCE like below

      ./gradlew build\ncd docker\nDATA_SOURCE=postgres docker-compose up -d datacaterer\n

      Can set it to one of the following:

      • postgres
      • mysql
      • cassandra
      • solace
      • kafka
      • http
      "},{"location":"setup/guide/data-source/cassandra/","title":"Cassandra","text":"

      Info

      Writing data to Cassandra is a paid feature. Try the free trial here.

      Creating a data generator for Cassandra. You will build a Docker image that will be able to populate data in Cassandra for the tables you configure.

      "},{"location":"setup/guide/data-source/cassandra/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Cassandra
      "},{"location":"setup/guide/data-source/cassandra/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n

      If you already have a Cassandra instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/cassandra/#cassandra-setup","title":"Cassandra Setup","text":"

      Next, let's make sure you have an instance of Cassandra up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d cassandra\n
      "},{"location":"setup/guide/data-source/cassandra/#permissions","title":"Permissions","text":"

      Let's make a new user that has the required permissions needed to push data into the Cassandra tables we want.

      CQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO data_caterer_user;\n

      Following permissions are required when enabling configuration.enableGeneratePlanAndTasks(true) as it will gather metadata information about tables and columns from the below tables.

      CQL Permission Statements
      GRANT SELECT ON system_schema.tables TO data_caterer_user;\nGRANT SELECT ON system_schema.columns TO data_caterer_user;\n
      "},{"location":"setup/guide/data-source/cassandra/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedCassandraJavaPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedCassandraPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedCassandraJavaPlan extends PlanRun {\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n\nclass MyAdvancedCassandraPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/cassandra/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Cassandra.

      JavaScala
      var accountTask = cassandra(\n\"customer_cassandra\",   //name\n\"localhost:9042\",       //url\n\"cassandra\",            //username\n\"cassandra\",            //password\nMap.of()                //optional additional connection options\n)\n

      Additional options such as SSL configuration, etc can be found here.

      val accountTask = cassandra(\n\"customer_cassandra\",   //name\n\"localhost:9042\",       //url\n\"cassandra\",            //username\n\"cassandra\",            //password\nMap()                   //optional additional connection options\n)\n

      Additional options such as SSL configuration, etc can be found here.

      "},{"location":"setup/guide/data-source/cassandra/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the account.accounts and account.account_status_history tables as defined underdocker/data/cql/customer.cql. This table should already be setup for you if you followed this step. We can check if the table is setup already via the following command:

      docker exec host.docker.internal cqlsh -e 'describe account.accounts; describe account.account_status_history;'\n

      Here we should see some output that looks like the below. This tells us what schema we need to follow when generating data. We need to define that alongside any metadata that is useful to add constraints on what are possible values the generated data should contain.

      CREATE TABLE account.accounts (\naccount_id text PRIMARY KEY,\n    amount double,\n    created_by text,\n    name text,\n    open_time timestamp,\n    status text\n)...\n\nCREATE TABLE account.account_status_history (\naccount_id text,\n    eod_date date,\n    status text,\n    updated_by text,\n    updated_time timestamp,\n    PRIMARY KEY (account_id, eod_date)\n)...\n

      Trimming the connection details to work with the docker-compose Cassandra, we have a base Cassandra connection to define the table and schema required. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType which corresponds to text in Cassandra.

      JavaScala
      {\nvar accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"created_by\"),\nfield().name(\"name\"),\nfield().name(\"open_time\").type(TimestampType.instance()),\nfield().name(\"status\")\n);\n}\n
      val accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"created_by\"),\nfield.name(\"name\"),\nfield.name(\"open_time\").`type`(TimestampType),\nfield.name(\"status\")\n)\n
      "},{"location":"setup/guide/data-source/cassandra/#field-metadata","title":"Field Metadata","text":"

      We could stop here and generate random data for the accounts table. But wouldn't it be more useful if we produced data that is closer to the structure of the data that would come in production? We can do this by defining various metadata that add guidelines that the data generator will understand when generating data.

      "},{"location":"setup/guide/data-source/cassandra/#account_id","title":"account_id","text":"

      account_id follows a particular pattern that where it starts with ACC and has 8 digits after it. This can be defined via a regex like below. Alongside, we also mention that it is the primary key to prompt ensure that unique values are generated.

      JavaScala
      field().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\n
      field.name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\n
      "},{"location":"setup/guide/data-source/cassandra/#amount","title":"amount","text":"

      amount the numbers shouldn't be too large, so we can define a min and max for the generated numbers to be between 1 and 1000.

      JavaScala
      field().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\n
      field.name(\"amount\").`type`(DoubleType).min(1).max(1000),\n
      "},{"location":"setup/guide/data-source/cassandra/#name","title":"name","text":"

      name is a string that also follows a certain pattern, so we could also define a regex but here we will choose to leverage the DataFaker library and create an expression to generate real looking name. All possible faker expressions can be found here

      JavaScala
      field().name(\"name\").expression(\"#{Name.name}\"),\n
      field.name(\"name\").expression(\"#{Name.name}\"),\n
      "},{"location":"setup/guide/data-source/cassandra/#open_time","title":"open_time","text":"

      open_time is a timestamp that we want to have a value greater than a specific date. We can define a min date by using java.sql.Date like below.

      JavaScala
      field().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      field.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      "},{"location":"setup/guide/data-source/cassandra/#status","title":"status","text":"

      status is a field that can only obtain one of four values, open, closed, suspended or pending.

      JavaScala
      field().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      field.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      "},{"location":"setup/guide/data-source/cassandra/#created_by","title":"created_by","text":"

      created_by is a field that is based on the status field where it follows the logic: if status is open or closed, then it is created_by eod else created_by event. This can be achieved by defining a SQL expression like below.

      JavaScala
      field().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n
      field.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n

      Putting it all the fields together, our class should now look like this.

      JavaScala
      var accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n
      val accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\").primaryKey(true),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n
      "},{"location":"setup/guide/data-source/cassandra/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations. We will also enable the unique check to ensure any unique fields will have unique values generated.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n
      "},{"location":"setup/guide/data-source/cassandra/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the accountTask, we have to call execute . So our full plan run will look like this.

      JavaScala
      public class MyAdvancedCassandraJavaPlan extends PlanRun {\n{\nvar accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, accountTask);\n}\n}\n
      class MyAdvancedCassandraPlan extends PlanRun {\nval accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\").primaryKey(true),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nexecute(config, accountTask)\n}\n
      "},{"location":"setup/guide/data-source/cassandra/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class MyAdvancedCassandraJavaPlan or MyAdvancedCassandraPlan\n#after completing\ndocker exec docker-cassandraserver-1 cqlsh -e 'select count(1) from account.accounts;select * from account.accounts limit 10;'\n

      Your output should look like this.

       count\n-------\n  1000\n\n(1 rows)\n\nWarnings :\nAggregation query used without partition key\n\n\n account_id  | amount    | created_by         | name                   | open_time                       | status\n-------------+-----------+--------------------+------------------------+---------------------------------+-----------\n ACC13554145 | 917.00418 | zb CVvbBTTzitjo5fK |          Jan Sanford I | 2023-06-21 21:50:10.463000+0000 | suspended\n ACC19154140 |  46.99177 |             VH88H9 |       Clyde Bailey PhD | 2023-07-18 11:33:03.675000+0000 |      open\n ACC50587836 |  774.9872 |         GENANwPm t |           Sang Monahan | 2023-03-21 00:16:53.308000+0000 |    closed\n ACC67619387 | 452.86706 |       5msTpcBLStTH |         Jewell Gerlach | 2022-10-18 19:13:07.606000+0000 | suspended\n ACC69889784 |  14.69298 |           WDmOh7NT |          Dale Schulist | 2022-10-25 12:10:52.239000+0000 | suspended\n ACC41977254 |  51.26492 |          J8jAKzvj2 |           Norma Nienow | 2023-08-19 18:54:39.195000+0000 | suspended\n ACC40932912 | 349.68067 |   SLcJgKZdLp5ALMyg | Vincenzo Considine III | 2023-05-16 00:22:45.991000+0000 |    closed\n ACC20642011 | 658.40713 |          clyZRD4fI |  Lannie McLaughlin DDS | 2023-05-11 23:14:30.249000+0000 |      open\n ACC74962085 | 970.98218 |       ZLETTSnj4NpD |          Ima Jerde DVM | 2023-05-07 10:01:56.218000+0000 |   pending\n ACC72848439 | 481.64267 |                 cc |        Kyla Deckow DDS | 2023-08-16 13:28:23.362000+0000 | suspended\n\n(10 rows)\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/data-source/http/","title":"HTTP Source","text":"

      Info

      Generating data based on OpenAPI/Swagger document and pushing to HTTP endpoint is a paid feature. Try the free trial here.

      Creating a data generator based on an OpenAPI/Swagger document.

      "},{"location":"setup/guide/data-source/http/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/http/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/http/#http-setup","title":"HTTP Setup","text":"

      We will be using the http-bin docker image to help simulate a service with HTTP endpoints.

      Start it via:

      cd docker\ndocker-compose up -d http\ndocker ps\n
      "},{"location":"setup/guide/data-source/http/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedHttpJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedHttpPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedHttpJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedHttpPlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/http/#schema","title":"Schema","text":"

      We can point the schema of a data source to a OpenAPI/Swagger document or URL. For this example, we will use the OpenAPI document found under docker/mount/http/petstore.json in the data-caterer-example repo. This is a simplified version of the original OpenAPI spec that can be found here.

      We have kept the following endpoints to test out:

      • GET /pets - get all pets
      • POST /pets - create a new pet
      • GET /pets/{id} - get a pet by id
      • DELETE /pets/{id} - delete a pet by id
      JavaScala
      var httpTask = http(\"my_http\")\n.schema(metadataSource().openApi(\"/opt/app/mount/http/petstore.json\"))\n.count(count().records(2));\n
      val httpTask = http(\"my_http\")\n.schema(metadataSource.openApi(\"/opt/app/mount/http/petstore.json\"))\n.count(count.records(2))\n

      The above defines that the schema will come from an OpenAPI document found on the pathway defined. It will then generate 2 requests per request method and endpoint combination.

      "},{"location":"setup/guide/data-source/http/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\n#after completing\ndocker logs -f docker-http-1\n

      It should look something like this.

      172.21.0.1 [06/Nov/2023:01:06:53 +0000] GET /anything/pets?tags%3DeXQxFUHVja+EYm%26limit%3D33895 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:53 +0000] GET /anything/pets?tags%3DSXaFvAqwYGF%26tags%3DjdNRFONA%26limit%3D40975 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:56 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:56 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:00 +0000] GET /anything/pets/kbH8D7rDuq HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:00 +0000] GET /anything/pets/REsa0tnu7dvekGDvxR HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:03 +0000] DELETE /anything/pets/EqrOr1dHFfKUjWb HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:03 +0000] DELETE /anything/pets/7WG7JHPaNxP HTTP/1.1 200 Host: host.docker.internal}\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      "},{"location":"setup/guide/data-source/http/#foreign-keys","title":"Foreign keys","text":"

      The four different requests that get sent could have the same id passed across to each of them if we define a foreign key relationship. This will make it more realistic to a real life scenario as pets get created and queried by a particular id value. We note that the id value is first used when a pet is created in the body of the POST request. Then it gets used as a path parameter in the DELETE and GET requests.

      To link them all together, we must follow a particular pattern when referring to request body, query parameter or path parameter columns.

      HTTP Type Column Prefix Example Request Body bodyContent bodyContent.id Path Parameter pathParam pathParamid Query Parameter queryParam queryParamid Header header headerContent_Type

      Also note, that when creating a foreign field definition for a HTTP data source, to refer to a specific endpoint and method, we have to follow the pattern of {http method}{http path}. For example, POST/pets. Let's apply this knowledge to link all the id values together.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\nforeignField(\"my_http\", \"POST/pets\", \"bodyContent.id\"),     //source of foreign key value\nforeignField(\"my_http\", \"DELETE/pets/{id}\", \"pathParamid\"),\nforeignField(\"my_http\", \"GET/pets/{id}\", \"pathParamid\")\n);\n\nexecute(myPlan, conf, httpTask);\n
      val myPlan = plan.addForeignKeyRelationship(\nforeignField(\"my_http\", \"POST/pets\", \"bodyContent.id\"),     //source of foreign key value\nforeignField(\"my_http\", \"DELETE/pets/{id}\", \"pathParamid\"),\nforeignField(\"my_http\", \"GET/pets/{id}\", \"pathParamid\")\n)\n\nexecute(myPlan, conf, httpTask)\n

      Let's test it out by running it again

      ./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\ndocker logs -f docker-http-1\n
      172.21.0.1 [06/Nov/2023:01:33:59 +0000] GET /anything/pets?limit%3D45971 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:00 +0000] GET /anything/pets?limit%3D62015 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:04 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:05 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:09 +0000] DELETE /anything/pets/5e HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:09 +0000] DELETE /anything/pets/IHPm2 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:14 +0000] GET /anything/pets/IHPm2 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:14 +0000] GET /anything/pets/5e HTTP/1.1 200 Host: host.docker.internal}\n

      Now we have the same id values being produced across the POST, DELETE and GET requests! What if we knew that the id values should follow a particular pattern?

      "},{"location":"setup/guide/data-source/http/#custom-metadata","title":"Custom metadata","text":"

      So given that we have defined a foreign key where the root of the foreign key values is from the POST request, we can update the metadata of the id column for the POST request and it will proliferate to the other endpoints as well. Given the id column is a nested column as noted in the foreign key, we can alter its metadata via the following:

      JavaScala
      var httpTask = http(\"my_http\")\n.schema(metadataSource().openApi(\"/opt/app/mount/http/petstore.json\"))\n.schema(field().name(\"bodyContent\").schema(field().name(\"id\").regex(\"ID[0-9]{8}\")))\n.count(count().records(2));\n
      val httpTask = http(\"my_http\")\n.schema(metadataSource.openApi(\"/opt/app/mount/http/petstore.json\"))\n.schema(field.name(\"bodyContent\").schema(field.name(\"id\").regex(\"ID[0-9]{8}\")))\n.count(count.records(2))\n

      We first get the column bodyContent, then get the nested schema and get the column id and add metadata stating that id should follow the patter ID[0-9]{8}.

      Let's try run again, and hopefully we should see some proper ID values.

      ./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\ndocker logs -f docker-http-1\n
      172.21.0.1 [06/Nov/2023:01:45:45 +0000] GET /anything/pets?tags%3D10fWnNoDz%26limit%3D66804 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:46 +0000] GET /anything/pets?tags%3DhyO6mI8LZUUpS HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:50 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:51 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:52 +0000] DELETE /anything/pets/ID55185420 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:52 +0000] DELETE /anything/pets/ID20618951 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:57 +0000] GET /anything/pets/ID55185420 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:57 +0000] GET /anything/pets/ID20618951 HTTP/1.1 200 Host: host.docker.internal}\n

      Great! Now we have replicated a production-like flow of HTTP requests.

      "},{"location":"setup/guide/data-source/http/#ordering","title":"Ordering","text":"

      If you wanted to change the ordering of the requests, you can alter the order from within the OpenAPI/Swagger document. This is particularly useful when you want to simulate the same flow that users would take when utilising your application (i.e. create account, query account, update account).

      "},{"location":"setup/guide/data-source/http/#rows-per-second","title":"Rows per second","text":"

      By default, Data Caterer will push requests per method and endpoint at a rate of around 5 requests per second. If you want to alter this value, you can do so via the below configuration. The lowest supported requests per second is 1.

      JavaScala
      import com.github.pflooky.datacaterer.api.model.Constants;\n\n...\nvar httpTask = http(\"my_http\", Map.of(Constants.ROWS_PER_SECOND(), \"1\"))\n...\n
      import com.github.pflooky.datacaterer.api.model.Constants.ROWS_PER_SECOND\n\n...\nval httpTask = http(\"my_http\", options = Map(ROWS_PER_SECOND -> \"1\"))\n...\n

      Check out the full example under AdvancedHttpPlanRun in the example repo.

      "},{"location":"setup/guide/data-source/kafka/","title":"Kafka","text":"

      Info

      Writing data to Kafka is a paid feature. Try the free trial here.

      Creating a data generator for Kafka. You will build a Docker image that will be able to populate data in kafka for the topics you configure.

      "},{"location":"setup/guide/data-source/kafka/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Kafka
      "},{"location":"setup/guide/data-source/kafka/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n

      If you already have a Kafka instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/kafka/#kafka-setup","title":"Kafka Setup","text":"

      Next, let's make sure you have an instance of Kafka up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d kafka\n
      "},{"location":"setup/guide/data-source/kafka/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedKafkaJavaPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedKafkaPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedKafkaJavaPlan extends PlanRun {\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n\nclass MyAdvancedKafkaPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/kafka/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Kafka.

      JavaScala
      var accountTask = kafka(\n\"my_kafka\",       //name\n\"localhost:9092\", //url\nMap.of()          //optional additional connection options\n);\n

      Additional options can be found here.

      val accountTask = kafka(\n\"my_kafka\",       //name\n\"localhost:9092\", //url\nMap()             //optional additional connection options\n)\n

      Additional options can be found here.

      "},{"location":"setup/guide/data-source/kafka/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the account-topic that is already defined underdocker/data/kafka/setup_kafka.sh. This topic should already be setup for you if you followed this step. We can check if the topic is set up already via the following command:

      docker exec docker-kafkaserver-1 kafka-topics --bootstrap-server localhost:9092 --list\n

      Trimming the connection details to work with the docker-compose Kafka, we have a base Kafka connection to define the topic we will publish to. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      {\nvar kafkaTask = kafka(\"my_kafka\", \"kafkaserver:29092\")\n.topic(\"account-topic\")\n.schema(\nfield().name(\"key\").sql(\"content.account_id\"),\nfield().name(\"value\").sql(\"TO_JSON(content)\"),\n//field().name(\"partition\").type(IntegerType.instance()),  can define partition here\nfield().name(\"headers\")\n.type(ArrayType.instance())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n),\nfield().name(\"content\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"year\").type(IntegerType.instance()),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n),\nfield().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n),\nfield().name(\"tmp_year\").sql(\"content.year\").omit(true),\nfield().name(\"tmp_name\").sql(\"content.details.name\").omit(true)\n)\n}\n
      val kafkaTask = kafka(\"my_kafka\", \"kafkaserver:29092\")\n.topic(\"account-topic\")\n.schema(\nfield.name(\"key\").sql(\"content.account_id\"),\nfield.name(\"value\").sql(\"TO_JSON(content)\"),\n//field.name(\"partition\").type(IntegerType),  can define partition here\nfield.name(\"headers\")\n.`type`(ArrayType)\n.sql(\n\"\"\"ARRAY(\n          |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n          |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n          |)\"\"\".stripMargin\n),\nfield.name(\"content\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"year\").`type`(IntegerType).min(2021).max(2023),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n),\nfield.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n),\nfield.name(\"tmp_year\").sql(\"content.year\").omit(true),\nfield.name(\"tmp_name\").sql(\"content.details.name\").omit(true)\n)\n
      "},{"location":"setup/guide/data-source/kafka/#fields","title":"Fields","text":"

      The schema defined for Kafka has a format that needs to be followed as noted above. Specifically, the required fields are: - value

      Whilst, the other fields are optional: - key - partition - headers

      "},{"location":"setup/guide/data-source/kafka/#headers","title":"headers","text":"

      headers follows a particular pattern that where it is of type array<struct<key: string,value: binary>>. To be able to generate data for this data type, we need to use an SQL expression like the one below. You will notice that in the value part, it refers to content.account_id where content is another field defined at the top level of the schema. This allows you to reference other values that have already been generated.

      JavaScala
      field().name(\"headers\")\n.type(ArrayType.instance())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n)\n
      field.name(\"headers\")\n.`type`(ArrayType)\n.sql(\n\"\"\"ARRAY(\n      |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n      |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n      |)\"\"\".stripMargin\n)\n
      "},{"location":"setup/guide/data-source/kafka/#transactions","title":"transactions","text":"

      transactions is an array that contains an inner structure of txn_date and amount. The size of the array generated can be controlled via arrayMinLength and arrayMaxLength.

      JavaScala
      field().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n
      field.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n
      "},{"location":"setup/guide/data-source/kafka/#details","title":"details","text":"

      details is another example of a nested schema structure where it also has a nested structure itself in updated_by. One thing to note here is the first_txn_date field has a reference to the content.transactions array where it will sort the array by txn_date and get the first element.

      JavaScala
      field().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n)\n
      field.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n)\n
      "},{"location":"setup/guide/data-source/kafka/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n
      "},{"location":"setup/guide/data-source/kafka/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the kafkaTask, we have to call execute .

      "},{"location":"setup/guide/data-source/kafka/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class AdvancedKafkaJavaPlanRun or AdvancedKafkaPlanRun\n#after completing\ndocker exec docker-kafkaserver-1 kafka-console-consumer --bootstrap-server localhost:9092 --topic account-topic --from-beginning\n

      Your output should look like this.

      {\"account_id\":\"ACC56292178\",\"year\":2022,\"amount\":18338.627721151555,\"details\":{\"name\":\"Isaias Reilly\",\"first_txn_date\":\"2021-01-22\",\"updated_by\":{\"user\":\"FgYXbKDWdhHVc3\",\"time\":\"2022-12-30T13:49:07.309Z\"}},\"transactions\":[{\"txn_date\":\"2021-01-22\",\"amount\":30556.52125487579},{\"txn_date\":\"2021-10-29\",\"amount\":39372.302259554635},{\"txn_date\":\"2021-10-29\",\"amount\":61887.31389495968}]}\n{\"account_id\":\"ACC37729457\",\"year\":2022,\"amount\":96885.31758764731,\"details\":{\"name\":\"Randell Witting\",\"first_txn_date\":\"2021-06-30\",\"updated_by\":{\"user\":\"HCKYEBHN8AJ3TB\",\"time\":\"2022-12-02T02:05:01.144Z\"}},\"transactions\":[{\"txn_date\":\"2021-06-30\",\"amount\":98042.09647765031},{\"txn_date\":\"2021-10-06\",\"amount\":41191.43564742036},{\"txn_date\":\"2021-11-16\",\"amount\":78852.08184809204},{\"txn_date\":\"2021-10-09\",\"amount\":13747.157653571106}]}\n{\"account_id\":\"ACC23127317\",\"year\":2023,\"amount\":81164.49304198896,\"details\":{\"name\":\"Jed Wisozk\",\"updated_by\":{\"user\":\"9MBFZZ\",\"time\":\"2023-07-12T05:56:52.397Z\"}},\"transactions\":[]}\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/","title":"Metadata Source","text":"

      Info

      Generating data based on an external metadata source is a paid feature. Try the free trial here.

      Creating a data generator for Postgres tables and CSV file based on metadata stored in Marquez ( follows OpenLineage API).

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#marquez-setup","title":"Marquez Setup","text":"

      You can follow the README found here to help with setting up Marquez in your local environment. This comes with an instance of Postgres which we will also be using as a data store for generated data.

      The command that was run for this example to help with setup of dummy data was ./docker/up.sh -a 5001 -m 5002 --seed.

      Check that the following url shows some data like below once you click on food_delivery from the ns drop down in the top right corner.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#postgres-setup","title":"Postgres Setup","text":"

      Since we will also be using the Marquez Postgres instance as a data source, we will set up a separate database to store the generated data in via:

      docker exec marquez-db psql -Upostgres -c 'CREATE DATABASE food_delivery'\n
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedMetadataSourceJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedMetadataSourceJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedMetadataSourcePlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#schema","title":"Schema","text":"

      We can point the schema of a data source to our Marquez instance. For the Postgres data source, we will point to a namespace, which in Marquez or OpenLineage, represents a set of datasets. For the CSV data source, we will point to a specific namespace and dataset.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#single-schema","title":"Single Schema","text":"JavaScala
      var csvTask = csv(\"my_csv\", \"/tmp/data/csv\", Map.of(\"saveMode\", \"overwrite\", \"header\", \"true\"))\n.schema(metadataSource().marquez(\"http://localhost:5001\", \"food_delivery\", \"public.delivery_7_days\"))\n.count(count().records(10));\n
      val csvTask = csv(\"my_csv\", \"/tmp/data/csv\", Map(\"saveMode\" -> \"overwrite\", \"header\" -> \"true\"))\n.schema(metadataSource.marquez(\"http://localhost:5001\", \"food_delivery\", \"public.delivery_7_days\"))\n.count(count.records(10))\n

      The above defines that the schema will come from Marquez, which is a type of metadata source that contains information about schemas. Specifically, it points to the food_delivery namespace and public.categories dataset to retrieve the schema information from.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#multiple-schemas","title":"Multiple Schemas","text":"JavaScala
      var postgresTask = postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/food_delivery\", \"postgres\", \"password\", Map.of())\n.schema(metadataSource().marquez(\"http://host.docker.internal:5001\", \"food_delivery\"))\n.count(count().records(10));\n
      val postgresTask = postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/food_delivery\", \"postgres\", \"password\")\n.schema(metadataSource.marquez(\"http://host.docker.internal:5001\", \"food_delivery\"))\n.count(count.records(10))\n

      We now have pointed this Postgres instance to produce multiple schemas that are defined under the food_delivery namespace. Also note that we are using database food_delivery in Postgres to push our generated data to, and we have set the number of records per sub data source (in this case, per table) to be 10.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\n#after completing\ndocker exec marquez-db psql -Upostgres -d food_delivery -c 'SELECT * FROM public.delivery_7_days'\n

      It should look something like this.

       order_id |     order_placed_on     |   order_dispatched_on   |   order_delivered_on    |         customer_email         |                     customer_address                     | menu_id | restaurant_id |                        restaurant_address\n   | menu_item_id | category_id | discount_id | city_id | driver_id\n----------+-------------------------+-------------------------+-------------------------+--------------------------------+----------------------------------------------------------+---------+---------------+---------------------------------------------------------------\n---+--------------+-------------+-------------+---------+-----------\n    38736 | 2023-02-05 06:05:23.755 | 2023-09-08 04:29:10.878 | 2023-09-03 23:58:34.285 | april.skiles@hotmail.com       | 5018 Lang Dam, Gaylordfurt, MO 35172                     |   59841 |         30971 | Suite 439 51366 Bartoletti Plains, West Lashawndamouth, CA 242\n42 |        55697 |       36370 |       21574 |   88022 |     16569\n4376 | 2022-12-19 14:39:53.442 | 2023-08-30 07:40:06.948 | 2023-03-15 20:38:26.11  | adelina.balistreri@hotmail.com | Apt. 340 9146 Novella Motorway, East Troyhaven, UT 34773 |   66195 |         42765 | Suite 670 8956 Rob Fork, Rennershire, CA 04524\n|        26516 |       81335 |       87615 |   27433 |     45649\n11083 | 2022-10-30 12:46:38.692 | 2023-06-02 13:05:52.493 | 2022-11-27 18:38:07.873 | johnny.gleason@gmail.com       | Apt. 385 99701 Lemke Place, New Irvin, RI 73305          |   66427 |         44438 | 1309 Danny Cape, Weimanntown, AL 15865\n|        41686 |       36508 |       34498 |   24191 |     92405\n58759 | 2023-07-26 14:32:30.883 | 2022-12-25 11:04:08.561 | 2023-04-21 17:43:05.86  | isabelle.ohara@hotmail.com     | 2225 Evie Lane, South Ardella, SD 90805                  |   27106 |         25287 | Suite 678 3731 Dovie Park, Port Luigi, ID 08250\n|        94205 |       66207 |       81051 |   52553 |     27483\n

      You can also try query some other tables. Let's also check what is in the CSV file.

      $ head docker/sample/csv/part-0000*\nmenu_item_id,category_id,discount_id,city_id,driver_id,order_id,order_placed_on,order_dispatched_on,order_delivered_on,customer_email,customer_address,menu_id,restaurant_id,restaurant_address\n72248,37098,80135,45888,5036,11090,2023-09-20T05:33:08.036+08:00,2023-05-16T23:10:57.119+08:00,2023-05-01T22:02:23.272+08:00,demetrice.rohan@hotmail.com,\"406 Harmony Rue, Wisozkburgh, MD 12282\",33762,9042,\"Apt. 751 0796 Ellan Flats, Lake Chetville, WI 81957\"\n41644,40029,48565,83373,89919,58359,2023-04-18T06:28:26.194+08:00,2022-10-15T18:17:48.998+08:00,2023-02-06T17:02:04.104+08:00,joannie.okuneva@yahoo.com,\"Suite 889 022 Susan Lane, Zemlakport, OR 56996\",27467,6216,\"Suite 016 286 Derick Grove, Dooleytown, NY 14664\"\n49299,53699,79675,40821,61764,72234,2023-07-16T21:33:48.739+08:00,2023-02-14T21:23:10.265+08:00,2023-09-18T02:08:51.433+08:00,ina.heller@yahoo.com,\"Suite 600 86844 Heller Island, New Celestinestad, DE 42622\",48002,12462,\"5418 Okuneva Mountain, East Blairchester, MN 04060\"\n83197,86141,11085,29944,81164,65382,2023-01-20T06:08:25.981+08:00,2023-01-11T13:24:32.968+08:00,2023-09-09T02:30:16.890+08:00,lakisha.bashirian@yahoo.com,\"Suite 938 534 Theodore Lock, Port Caitlynland, LA 67308\",69109,47727,\"4464 Stewart Tunnel, Marguritemouth, AR 56791\"\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      What if we wanted the same records in Postgres public.delivery_7_days to also show up in the CSV file? That's where we can use a foreign key definition.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#foreign-key","title":"Foreign Key","text":"

      We can take a look at the report (under docker/sample/report/index.html) to see what we need to do to create the foreign key. From the overview, you should see under Tasks there is a my_postgres task which has food_delivery_public.delivery_7_days as a step. Click on the link for food_delivery_public.delivery_7_days and it will take us to a page where we can find out about the columns used in this table. Click on the Fields button on the far right to see.

      We can copy all of a subset of fields that we want matched across the CSV file and Postgres. For this example, we will take all the fields.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\npostgresTask, List.of(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList.of(Map.entry(csvTask, List.of(\"account_number\", \"year\", \"name\", \"payload\")))\n);\n\nvar conf = ...\n\nexecute(myPlan, conf, postgresTask, csvTask);\n
      val foreignCols = List(\"order_id\", \"order_placed_on\", \"order_dispatched_on\", \"order_delivered_on\", \"customer_email\",\n\"customer_address\", \"menu_id\", \"restaurant_id\", \"restaurant_address\", \"menu_item_id\", \"category_id\", \"discount_id\",\n\"city_id\", \"driver_id\")\n\nval myPlan = plan.addForeignKeyRelationships(\ncsvTask, foreignCols,\nList(foreignField(postgresTask, \"food_delivery_public.delivery_7_days\", foreignCols))\n)\n\nval conf = ...\n\nexecute(myPlan, conf, postgresTask, csvTask)\n

      Notice how we have defined the csvTask and foreignCols as the main foreign key but for postgresTask, we had to define it as a foreignField. This is because postgresTask has multiple tables within it, and we only want to define our foreign key with respect to the public.delivery_7_days table. We use the step name (can be seen from the report) to specify the table to target.

      To test this out, we will truncate the public.delivery_7_days table in Postgres first, and then try run again.

      docker exec marquez-db psql -Upostgres -d food_delivery -c 'TRUNCATE public.delivery_7_days'\n./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\ndocker exec marquez-db psql -Upostgres -d food_delivery -c 'SELECT * FROM public.delivery_7_days'\n
       order_id |     order_placed_on     |   order_dispatched_on   |   order_delivered_on    |        customer_email        |\ncustomer_address                     | menu_id | restaurant_id |                   restaurant_address                   | menu\n_item_id | category_id | discount_id | city_id | driver_id\n----------+-------------------------+-------------------------+-------------------------+------------------------------+-------------\n--------------------------------------------+---------+---------------+--------------------------------------------------------+-----\n---------+-------------+-------------+---------+-----------\n    53333 | 2022-10-15 08:40:23.394 | 2023-01-23 09:42:48.397 | 2023-08-12 08:50:52.397 | normand.aufderhar@gmail.com  | Apt. 036 449\n27 Wilderman Forge, Marvinchester, CT 15952 |   40412 |         70130 | Suite 146 98176 Schaden Village, Grahammouth, SD 12354 |\n90141 |       44210 |       83966 |   78614 |     77449\n

      Let's grab the first email from the Postgres table and check whether the same record exists in the CSV file.

      $ cat docker/sample/csv/part-0000* | grep normand.aufderhar\n90141,44210,83966,78614,77449,53333,2022-10-15T08:40:23.394+08:00,2023-01-23T09:42:48.397+08:00,2023-08-12T08:50:52.397+08:00,normand.aufderhar@gmail.com,\"Apt. 036 44927 Wilderman Forge, Marvinchester, CT 15952\",40412,70130,\"Suite 146 98176 Schaden Village, Grahammouth, SD 12354\"\n

      Great! Now we have the ability to get schema information from an external source, add our own foreign keys and generate data.

      Check out the full example under AdvancedMetadataSourcePlanRun in the example repo.

      "},{"location":"setup/guide/data-source/open-metadata-source/","title":"OpenMetadata Source","text":"

      Info

      Generating data based on an external metadata source is a paid feature. Try the free trial here.

      Creating a data generator for a JSON file based on metadata stored in OpenMetadata.

      "},{"location":"setup/guide/data-source/open-metadata-source/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/open-metadata-source/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/open-metadata-source/#openmetadata-setup","title":"OpenMetadata Setup","text":"

      You can follow the local docker setup found here to help with setting up OpenMetadata in your local environment.

      If that page becomes outdated or the link doesn't work, below are the commands I used to run it:

      mkdir openmetadata-docker && cd openmetadata-docker\ncurl -sL https://github.com/open-metadata/OpenMetadata/releases/download/1.2.0-release/docker-compose.yml > docker-compose.yml\ndocker compose -f docker-compose.yml up --detach\n

      Check that the following url works and login with admin:admin. Then you should see some data like below:

      "},{"location":"setup/guide/data-source/open-metadata-source/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedOpenMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedOpenMetadataSourceJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedOpenMetadataSourcePlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/open-metadata-source/#schema","title":"Schema","text":"

      We can point the schema of a data source to our OpenMetadata instance. We will use a JSON data source so that we can show how nested data types are handled and how we could customise it.

      "},{"location":"setup/guide/data-source/open-metadata-source/#single-schema","title":"Single Schema","text":"JavaScala
      import com.github.pflooky.datacaterer.api.model.Constants;\n...\n\nvar jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map.of(\"saveMode\", \"overwrite\"))\n.schema(metadataSource().openMetadataJava(\n\"http://localhost:8585/api\",                                                              //url\nConstants.OPEN_METADATA_AUTH_TYPE_OPEN_METADATA(),                                        //auth type\nMap.of(                                                                                   //additional options (including auth options)\nConstants.OPEN_METADATA_JWT_TOKEN(), \"abc123\",                                        //get from settings/bots/ingestion-bot\nConstants.OPEN_METADATA_TABLE_FQN(), \"sample_data.ecommerce_db.shopify.raw_customer\"  //table fully qualified name\n)\n))\n.count(count().records(10));\n
      import com.github.pflooky.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE}\n...\n\nval jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map(\"saveMode\" -> \"overwrite\"))\n.schema(metadataSource.openMetadata(\n\"http://localhost:8585/api\",                                                  //url\nOPEN_METADATA_AUTH_TYPE_OPEN_METADATA,                                        //auth type\nMap(                                                                          //additional options (including auth options)\nOPEN_METADATA_JWT_TOKEN -> \"abc123\",                                        //get from settings/bots/ingestion-bot\nOPEN_METADATA_TABLE_FQN -> \"sample_data.ecommerce_db.shopify.raw_customer\"  //table fully qualified name\n)\n))\n.count(count.records(10))\n

      The above defines that the schema will come from OpenMetadata, which is a type of metadata source that contains information about schemas. Specifically, it points to the sample_data.ecommerce_db.shopify.raw_customer table. You can check out the schema here to see what it looks like.

      "},{"location":"setup/guide/data-source/open-metadata-source/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedOpenMetadataSourceJavaPlanRun or MyAdvancedOpenMetadataSourcePlanRun\n#after completing\ncat docker/sample/json/part-00000-*\n

      It should look something like this.

      {\n\"comments\": \"Mh6jqpD5e4M\",\n\"creditcard\": \"6771839575926717\",\n\"membership\": \"Za3wCQUl9E  EJj712\",\n\"orders\": [\n{\n\"product_id\": \"Aa6NG0hxfHVq\",\n\"price\": 16139,\n\"onsale\": false,\n\"tax\": 58134,\n\"weight\": 40734,\n\"others\": 45813,\n\"vendor\": \"Kh\"\n},\n{\n\"product_id\": \"zbHBY \",\n\"price\": 17903,\n\"onsale\": false,\n\"tax\": 39526,\n\"weight\": 9346,\n\"others\": 52035,\n\"vendor\": \"jbkbnXAa\"\n},\n{\n\"product_id\": \"5qs3gakppd7Nw5\",\n\"price\": 48731,\n\"onsale\": true,\n\"tax\": 81105,\n\"weight\": 2004,\n\"others\": 20465,\n\"vendor\": \"nozCDMSXRPH Ev\"\n},\n{\n\"product_id\": \"CA6h17ANRwvb\",\n\"price\": 62102,\n\"onsale\": true,\n\"tax\": 96601,\n\"weight\": 78849,\n\"others\": 79453,\n\"vendor\": \" ihVXEJz7E2EFS\"\n}\n],\n\"platform\": \"GLt9\",\n\"preference\": {\n\"key\": \"nmPmsPjg C\",\n\"value\": true\n},\n\"shipping_address\": [\n{\n\"name\": \"Loren Bechtelar\",\n\"street_address\": \"Suite 526 293 Rohan Road, Wunschshire, NE 25532\",\n\"city\": \"South Norrisland\",\n\"postcode\": \"56863\"\n}\n],\n\"shipping_date\": \"2022-11-03\",\n\"transaction_date\": \"2023-02-01\",\n\"customer\": {\n\"username\": \"lance.murphy\",\n\"name\": \"Zane Brakus DVM\",\n\"sex\": \"7HcAaPiO\",\n\"address\": \"594 Loida Haven, Gilland, MA 26071\",\n\"mail\": \"Un3fhbvK2rEbenIYdnq\",\n\"birthdate\": \"2023-01-31\"\n}\n}\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      "},{"location":"setup/guide/data-source/open-metadata-source/#custom-metadata","title":"Custom metadata","text":"

      We can see from the data generated, that it isn't quite what we want. The metadata is not sufficient for us to produce production-like data yet. Let's try to add some enhancements to it.

      Let's make the platform field a choice field that can only be a set of certain values and the nested field customer.sex is also from a predefined set of values.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map.of(\"saveMode\", \"overwrite\"))\n.schema(\nmetadata...\n))\n.schema(\nfield().name(\"platform\").oneOf(\"website\", \"mobile\"),\nfield().name(\"customer\").schema(field().name(\"sex\").oneOf(\"M\", \"F\", \"O\"))\n)\n.count(count().records(10));\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map(\"saveMode\" -> \"overwrite\"))\n.schema(\nmetadata...\n))\n.schema(\nfield.name(\"platform\").oneOf(\"website\", \"mobile\"),\nfield.name(\"customer\").schema(field.name(\"sex\").oneOf(\"M\", \"F\", \"O\"))\n)\n.count(count.records(10))\n

      Let's test it out by running it again

      ./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\ncat docker/sample/json/part-00000-*\n
      {\n\"comments\": \"vqbPUm\",\n\"creditcard\": \"6304867705548636\",\n\"membership\": \"GZ1xOnpZSUOKN\",\n\"orders\": [\n{\n\"product_id\": \"rgOokDAv\",\n\"price\": 77367,\n\"onsale\": false,\n\"tax\": 61742,\n\"weight\": 87855,\n\"others\": 26857,\n\"vendor\": \"04XHR64ImMr9T\"\n}\n],\n\"platform\": \"mobile\",\n\"preference\": {\n\"key\": \"IB5vNdWka\",\n\"value\": true\n},\n\"shipping_address\": [\n{\n\"name\": \"Isiah Bins\",\n\"street_address\": \"36512 Ross Spurs, Hillhaven, IA 18760\",\n\"city\": \"Averymouth\",\n\"postcode\": \"75818\"\n},\n{\n\"name\": \"Scott Prohaska\",\n\"street_address\": \"26573 Haley Ports, Dariusland, MS 90642\",\n\"city\": \"Ashantimouth\",\n\"postcode\": \"31792\"\n},\n{\n\"name\": \"Rudolf Stamm\",\n\"street_address\": \"Suite 878 0516 Danica Path, New Christiaport, ID 10525\",\n\"city\": \"Doreathaport\",\n\"postcode\": \"62497\"\n}\n],\n\"shipping_date\": \"2023-08-24\",\n\"transaction_date\": \"2023-02-01\",\n\"customer\": {\n\"username\": \"jolie.cremin\",\n\"name\": \"Fay Klein\",\n\"sex\": \"O\",\n\"address\": \"Apt. 174 5084 Volkman Creek, Hillborough, PA 61959\",\n\"mail\": \"BiTmzb7\",\n\"birthdate\": \"2023-04-07\"\n}\n}\n

      Great! Now we have the ability to get schema information from an external source, add our own metadata and generate data.

      "},{"location":"setup/guide/data-source/open-metadata-source/#data-validation","title":"Data validation","text":"

      Another aspect of OpenMetadata that can be leveraged is the definition of data quality rules. These rules can be incorporated into your Data Caterer job as well by enabling data validations via enableGenerateValidations in configuration.

      JavaScala
      var conf = configuration().enableGeneratePlanAndTasks(true)\n.enableGenerateValidations(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(conf, jsonTask);\n
      val conf = configuration.enableGeneratePlanAndTasks(true)\n.enableGenerateValidations(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(conf, jsonTask)\n

      Check out the full example under AdvancedOpenMetadataSourcePlanRun in the example repo.

      "},{"location":"setup/guide/data-source/solace/","title":"Solace","text":"

      Info

      Writing data to Solace is a paid feature. Try the free trial here.

      Creating a data generator for Solace. You will build a Docker image that will be able to populate data in Solace for the queues/topics you configure.

      "},{"location":"setup/guide/data-source/solace/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Solace
      "},{"location":"setup/guide/data-source/solace/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n

      If you already have a Solace instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/solace/#solace-setup","title":"Solace Setup","text":"

      Next, let's make sure you have an instance of Solace up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d solace\n

      Open up localhost:8080 and login with admin:admin and check there is the default VPN like below. Notice there is 2 queues/topics created. If you do not see 2 created, try to run the script found under docker/data/solace/setup_solace.sh and change the host to localhost.

      "},{"location":"setup/guide/data-source/solace/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedSolaceJavaPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedSolacePlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedSolaceJavaPlan extends PlanRun {\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n\nclass MyAdvancedSolacePlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/solace/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Solace.

      JavaScala
      var accountTask = solace(\n\"my_solace\",                        //name\n\"smf://host.docker.internal:55554\", //url\nMap.of()                            //optional additional connection options\n);\n

      Additional connection options can be found here.

      val accountTask = solace(\n\"my_solace\",                        //name\n\"smf://host.docker.internal:55554\", //url\nMap()                               //optional additional connection options\n)\n

      Additional connection options can be found here.

      "},{"location":"setup/guide/data-source/solace/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the rest_test_queue or rest_test_topic that is already created for us from this step.

      Trimming the connection details to work with the docker-compose Solace, we have a base Solace connection to define the JNDI destination we will publish to. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      {\nvar solaceTask = solace(\"my_solace\", \"smf://host.docker.internal:55554\")\n.destination(\"/JNDI/Q/rest_test_queue\")\n.schema(\nfield().name(\"value\").sql(\"TO_JSON(content)\"),\n//field().name(\"partition\").type(IntegerType.instance()),   //can define message JMS priority here\nfield().name(\"headers\")                                     //set message properties via headers field\n.type(HeaderType.getType())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n),\nfield().name(\"content\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"year\").type(IntegerType.instance()).min(2021).max(2023),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n),\nfield().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n)\n)\n.count(count().records(10));\n}\n
      val solaceTask = solace(\"my_solace\", \"smf://host.docker.internal:55554\")\n.destination(\"/JNDI/Q/rest_test_queue\")\n.schema(\nfield.name(\"value\").sql(\"TO_JSON(content)\"),\n//field.name(\"partition\").`type`(IntegerType),  //can define message JMS priority here\nfield.name(\"headers\")                           //set message properties via headers field\n.`type`(HeaderType.getType)\n.sql(\n\"\"\"ARRAY(\n          |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n          |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n          |)\"\"\".stripMargin\n),\nfield.name(\"content\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"year\").`type`(IntegerType).min(2021).max(2023),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n),\nfield.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n),\n).count(count.records(10))\n
      "},{"location":"setup/guide/data-source/solace/#fields","title":"Fields","text":"

      The schema defined for Solace has a format that needs to be followed as noted above. Specifically, the required fields are:

      • value

      Whilst, the other fields are optional:

      • partition - refers to JMS priority of the message
      • headers - refers to JMS message properties
      "},{"location":"setup/guide/data-source/solace/#headers","title":"headers","text":"

      headers follows a particular pattern that where it is of type HeaderType.getType which behind the scenes, translates toarray<struct<key: string,value: binary>>. To be able to generate data for this data type, we need to use an SQL expression like the one below. You will notice that in thevalue part, it refers to content.account_id where content is another field defined at the top level of the schema. This allows you to reference other values that have already been generated.

      JavaScala
      field().name(\"headers\")\n.type(HeaderType.getType())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n)\n
      field.name(\"headers\")\n.`type`(HeaderType.getType)\n.sql(\n\"\"\"ARRAY(\n      |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n      |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n      |)\"\"\".stripMargin\n)\n
      "},{"location":"setup/guide/data-source/solace/#transactions","title":"transactions","text":"

      transactions is an array that contains an inner structure of txn_date and amount. The size of the array generated can be controlled via arrayMinLength and arrayMaxLength.

      JavaScala
      field().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n
      field.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n
      "},{"location":"setup/guide/data-source/solace/#details","title":"details","text":"

      details is another example of a nested schema structure where it also has a nested structure itself in updated_by. One thing to note here is the first_txn_date field has a reference to the content.transactions array where it will sort the array by txn_date and get the first element.

      JavaScala
      field().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n)\n
      field.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n)\n
      "},{"location":"setup/guide/data-source/solace/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n
      "},{"location":"setup/guide/data-source/solace/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the kafkaTask, we have to call execute.

      "},{"location":"setup/guide/data-source/solace/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class AdvancedSolaceJavaPlanRun or AdvancedSolacePlanRun\n#after completing, check http://localhost:8080 from browser\n

      Your output should look like this.

      Unfortunately, there is no easy way to see the message content. You can check the message content from your application or service that consumes these messages.

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed. Or view the sample report found here.

      "},{"location":"setup/guide/scenario/auto-generate-connection/","title":"Auto Generate From Data Connection","text":"

      Info

      Auto data generation from data connection is a paid feature. Try the free trial here.

      Creating a data generator based on only a data connection to Postgres.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/auto-generate-connection/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/auto-generate-connection/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedAutomatedJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedAutomatedPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedAutomatedJavaPlanRun extends PlanRun {\n{\nvar autoRun = configuration()\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (3)\n.enableUniqueCheck(true)                                                          (4)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(autoRun);\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedAutomatedPlanRun extends PlanRun {\n\nval autoRun = configuration\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (3)\n.enableUniqueCheck(true)                                                          (4)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(configuration = autoRun)\n}\n

      In the above code, we note the following:

      1. Data source configuration to a Postgres data source called my_postgres
      2. We have enabled the flag enableGeneratePlanAndTasks which tells Data Caterer to go to my_postgres and generate data for all the tables found under the database customer (which is defined in the connection string).
      3. The config generatedPlanAndTaskFolderPath defines where the metadata that is gathered from my_postgres should be saved at so that we could re-use it later.
      4. enableUniqueCheck is set to true to ensure that generated data is unique based on primary key or foreign key definitions.

      Note

      Unique check will only ensure generated data is unique. Any existing data in your data source is not taken into account, so generated data may fail to insert depending on the data source restrictions

      "},{"location":"setup/guide/scenario/auto-generate-connection/#postgres-setup","title":"Postgres Setup","text":"

      If you don't have your own Postgres up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d postgres\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c '\\dt+ account.*'\n

      This will create the tables found under docker/data/sql/postgres/customer.sql. You can change this file to contain your own tables. We can see there are 4 tables created for us, accounts, balances, transactions and mapping.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedAutomatedJavaPlanRun or MyAdvancedAutomatedPlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1;'\n

      It should look something like this.

         id   | account_number  | account_status | created_by | created_by_fixed_length | customer_id_int | customer_id_smallint | customer_id_bigint |   customer_id_decimal    | customer_id_real | customer_id_double | open_date  |     open_timestamp      | last_opened_time |                                                           payload_bytes\n--------+-----------------+----------------+------------+-------------------------+-----------------+----------------------+--------------------+--------------------------+------------------+--------------------+------------+-------------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------\n 100414 | 5uROOVOUyQUbubN | h3H            | SfA0eZJcTm | CuRw                    |              13 |                   42 |               6041 | 76987.745612542900000000 |         91866.78 |  66400.37433202339 | 2023-03-05 | 2023-08-14 11:33:11.343 | 23:58:01.736     | \\x604d315d4547616e6a233050415373317274736f5e682d516132524f3d23233c37463463322f342d34376d597e665d6b3d395b4238284028622b7d6d2b4f5042\n(1 row)\n

      The data that gets inserted will follow the foreign keys that are defined within Postgres and also ensure the insertion order is correct.

      Also check the HTML report that gets generated under docker/sample/report/index.html. You can see a summary of what was generated along with other metadata.

      You can now look to play around with other tables or data sources and auto generate for them.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/auto-generate-connection/#learn-from-existing-data","title":"Learn From Existing Data","text":"

      If you have any existing data within your data source, Data Caterer will gather metadata about the existing data to help guide it when generating new data. There are configurations that can help tune the metadata analysis found here.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#filter-out-schematables","title":"Filter Out Schema/Tables","text":"

      As part of your connection definition, you can define any schemas and/or tables your don't want to generate data for. In the example below, it will not generate any data for any tables under the history and audit schemas. Also, any table with the name balances or transactions in any schema will also not have data generated.

      JavaScala
      var autoRun = configuration()\n.postgres(\n\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\",\nMap.of(\n\"filterOutSchema\", \"history, audit\",\n\"filterOutTable\", \"balances, transactions\")\n)\n)\n
      val autoRun = configuration\n.postgres(\n\"my_postgres\",\n\"jdbc:postgresql://host.docker.internal:5432/customer\",\nMap(\n\"filterOutSchema\" -> \"history, audit\",\n\"filterOutTable\" -> \"balances, transactions\")\n)\n)\n
      "},{"location":"setup/guide/scenario/auto-generate-connection/#define-record-count","title":"Define record count","text":"

      You can control the record count per sub data source via numRecordsPerStep.

      JavaScala
      var autoRun = configuration()\n...\n.numRecordsPerStep(100)\n\nexecute(autoRun)\n
      val autoRun = configuration\n...\n.numRecordsPerStep(100)\n\nexecute(configuration = autoRun)\n
      "},{"location":"setup/guide/scenario/batch-and-event/","title":"Generate Batch and Event Data","text":"

      Info

      Generating event data is a paid feature. Try the free trial here.

      Creating a data generator for Kafka topic with matching records in a CSV file.

      "},{"location":"setup/guide/scenario/batch-and-event/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/batch-and-event/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/batch-and-event/#kafka-setup","title":"Kafka Setup","text":"

      If you don't have your own Kafka up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d kafka\ndocker exec docker-kafkaserver-1 kafka-topics --bootstrap-server localhost:9092 --list\n

      Let's create a task for inserting data into the account-topic that is already defined underdocker/data/kafka/setup_kafka.sh.

      "},{"location":"setup/guide/scenario/batch-and-event/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedBatchEventJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedBatchEventPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedBatchEventJavaPlanRun extends PlanRun {\n{\nvar kafkaTask = new AdvancedKafkaJavaPlanRun().getKafkaTask();\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedBatchEventPlanRun extends PlanRun {\nval kafkaTask = new AdvancedKafkaPlanRun().kafkaTask\n}\n

      We will borrow the Kafka task that is already defined under the class AdvancedKafkaPlanRun or AdvancedKafkaJavaPlanRun. You can go through the Kafka guide here for more details.

      "},{"location":"setup/guide/scenario/batch-and-event/#schema","title":"Schema","text":"

      Let us set up the corresponding schema for the CSV file where we want to match the values that are generated for the Kafka messages.

      JavaScala
      var kafkaTask = new AdvancedKafkaJavaPlanRun().getKafkaTask();\n\nvar csvTask = csv(\"my_csv\", \"/opt/app/data/csv/account\")\n.schema(\nfield().name(\"account_number\"),\nfield().name(\"year\"),\nfield().name(\"name\"),\nfield().name(\"payload\")\n);\n
      val kafkaTask = new AdvancedKafkaPlanRun().kafkaTask\n\nval csvTask = csv(\"my_csv\", \"/opt/app/data/csv/account\")\n.schema(\nfield.name(\"account_number\"),\nfield.name(\"year\"),\nfield.name(\"name\"),\nfield.name(\"payload\")\n)\n

      This is a simple schema where we want to use the values and metadata that is already defined in the kafkaTask to determine what the data will look like for the CSV file. Even if we defined some metadata here, it would be overridden when we define our foreign key relationships.

      "},{"location":"setup/guide/scenario/batch-and-event/#foreign-keys","title":"Foreign Keys","text":"

      From the above CSV schema, we see note the following against the Kafka schema:

      • account_number in CSV needs to match with the account_id in Kafka
        • We see that account_id is referred to in the key column as field.name(\"key\").sql(\"content.account_id\")
      • year needs to match with content.year in Kafka, which is a nested field
        • We can only do foreign key relationships with top level fields, not nested fields. So we define a new column called tmp_year which will not appear in the final output for the Kafka messages but is used as an intermediate step field.name(\"tmp_year\").sql(\"content.year\").omit(true)
      • name needs to match with content.details.name in Kafka, also a nested field
        • Using the same logic as above, we define a temporary column called tmp_name which will take the value of the nested field but will be omitted field.name(\"tmp_name\").sql(\"content.details.name\").omit(true)
      • payload represents the whole JSON message sent to Kafka, which matches to value column

      Our foreign keys are therefore defined like below. Order is important when defining the list of columns. The index needs to match with the corresponding column in the other data source.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\nkafkaTask, List.of(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList.of(Map.entry(csvTask, List.of(\"account_number\", \"year\", \"name\", \"payload\")))\n);\n\nvar conf = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(myPlan, conf, kafkaTask, csvTask);\n
      val myPlan = plan.addForeignKeyRelationship(\nkafkaTask, List(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList(csvTask -> List(\"account_number\", \"year\", \"name\", \"payload\"))\n)\n\nval conf = configuration.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(myPlan, conf, kafkaTask, csvTask)\n
      "},{"location":"setup/guide/scenario/batch-and-event/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedBatchEventJavaPlanRun or MyAdvancedBatchEventPlanRun\n#after completing\ndocker exec docker-kafkaserver-1 kafka-console-consumer --bootstrap-server localhost:9092 --topic account-topic --from-beginning\n

      It should look something like this.

      {\"account_id\":\"ACC03093143\",\"year\":2023,\"amount\":87990.37196728592,\"details\":{\"name\":\"Nadine Heidenreich Jr.\",\"first_txn_date\":\"2021-11-09\",\"updated_by\":{\"user\":\"YfEyJCe8ohrl0j IfyT\",\"time\":\"2022-09-26T20:47:53.404Z\"}},\"transactions\":[{\"txn_date\":\"2021-11-09\",\"amount\":97073.7914706189}]}\n{\"account_id\":\"ACC08764544\",\"year\":2021,\"amount\":28675.58758765888,\"details\":{\"name\":\"Delila Beer\",\"first_txn_date\":\"2021-05-19\",\"updated_by\":{\"user\":\"IzB5ksXu\",\"time\":\"2023-01-26T20:47:26.389Z\"}},\"transactions\":[{\"txn_date\":\"2021-10-01\",\"amount\":80995.23818711648},{\"txn_date\":\"2021-05-19\",\"amount\":92572.40049217848},{\"txn_date\":\"2021-12-11\",\"amount\":99398.79832225188}]}\n{\"account_id\":\"ACC62505420\",\"year\":2023,\"amount\":96125.3125884202,\"details\":{\"name\":\"Shawn Goodwin\",\"updated_by\":{\"user\":\"F3dqIvYp2pFtena4\",\"time\":\"2023-02-11T04:38:29.832Z\"}},\"transactions\":[]}\n

      Let's also check if there is a corresponding record in the CSV file.

      $ cat docker/sample/csv/account/part-0000* | grep ACC03093143\nACC03093143,2023,Nadine Heidenreich Jr.,\"{\\\"account_id\\\":\\\"ACC03093143\\\",\\\"year\\\":2023,\\\"amount\\\":87990.37196728592,\\\"details\\\":{\\\"name\\\":\\\"Nadine Heidenreich Jr.\\\",\\\"first_txn_date\\\":\\\"2021-11-09\\\",\\\"updated_by\\\":{\\\"user\\\":\\\"YfEyJCe8ohrl0j IfyT\\\",\\\"time\\\":\\\"2022-09-26T20:47:53.404Z\\\"}},\\\"transactions\\\":[{\\\"txn_date\\\":\\\"2021-11-09\\\",\\\"amount\\\":97073.7914706189}]}\"\n

      Great! The account, year, name and payload look to all match up.

      "},{"location":"setup/guide/scenario/batch-and-event/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/batch-and-event/#order-of-execution","title":"Order of execution","text":"

      You may notice that the events are generated first, then the CSV file. This is because as part of the execute function, we passed in the kafkaTask first, before the csvTask. You can change the order of execution by passing in csvTask before kafkaTask into the execute function.

      "},{"location":"setup/guide/scenario/data-validation/","title":"Data Validations","text":"

      Creating a data validator for a JSON file.

      "},{"location":"setup/guide/scenario/data-validation/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/data-validation/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/data-validation/#data-setup","title":"Data Setup","text":"

      To aid in showing the functionality of data validations, we will first generate some data that our validations will run against. Run the below command and it will generate JSON files under docker/sample/json folder.

      ./run.sh JsonPlan\n
      "},{"location":"setup/guide/scenario/data-validation/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyValidationJavaPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyValidationPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyValidationJavaPlan extends PlanRun {\n{\nvar jsonTask = json(\"my_json\", \"/opt/app/data/json\");\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false);\n\nexecute(config, jsonTask);\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyValidationPlan extends PlanRun {\nval jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false)\n\nexecute(config, jsonTask)\n}\n

      As noted above, we create a JSON task that points to where the JSON data has been created at folder /opt/app/data/json . We also note that enableValidation is set to true and enableGenerateData to false to tell Data Catering, we only want to validate data.

      "},{"location":"setup/guide/scenario/data-validation/#validations","title":"Validations","text":"

      For reference, the schema in which we will be validating against looks like the below.

      .schema(\nfield.name(\"account_id\"),\n  field.name(\"year\").`type`(IntegerType),\n  field.name(\"balance\").`type`(DoubleType),\n  field.name(\"date\").`type`(DateType),\n  field.name(\"status\"),\n  field.name(\"update_history\").`type`(ArrayType)\n.schema(\nfield.name(\"updated_time\").`type`(TimestampType),\n      field.name(\"status\").oneOf(\"open\", \"closed\", \"pending\", \"suspended\"),\n    ),\n  field.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\n      field.name(\"age\").`type`(IntegerType),\n      field.name(\"city\").expression(\"#{Address.city}\")\n)\n)\n
      "},{"location":"setup/guide/scenario/data-validation/#basic-validation","title":"Basic Validation","text":"

      Let's say our goal is to validate the customer_details.name field to ensure it conforms to the regex pattern [A-Z][a-z]+ [A-Z][a-z]+. Given the diversity in naming conventions across cultures and countries, variations such as middle names, suffixes, prefixes, or language-specific differences are tolerated to a certain extent. The validation considers an acceptable error threshold before marking it as failed.

      "},{"location":"setup/guide/scenario/data-validation/#validation-criteria","title":"Validation Criteria","text":"
      • Field to Validate: customer_details.name
      • Regex Pattern: [A-Z][a-z]+ [A-Z][a-z]+
      • Error Tolerance: If more than 10% do not match the regex, then fail.
      "},{"location":"setup/guide/scenario/data-validation/#considerations","title":"Considerations","text":"
      • Customisation
        • Adjust the regex pattern and error threshold based on your specific data schema and validation requirements.
        • For the full list of types of basic validations that can be used, check this page.
      • Understanding Tolerance
        • Be mindful of the error threshold, as it directly influences what percentage of deviations from the pattern is acceptable.
      JavaScala
      validation().col(\"customer_details.name\")\n.matches(\"[A-Z][a-z]+ [A-Z][a-z]+\")\n.errorThreshold(0.1)                                      //<=10% failure rate is acceptable\n.description(\"Names generally follow the same pattern\"),  //description to add context in report or other developers\n
      validation.col(\"customer_details.name\")\n.matches(\"[A-Z][a-z]+ [A-Z][a-z]+\")\n.errorThreshold(0.1)                                      //<=10% failure rate is acceptable\n.description(\"Names generally follow the same pattern\"),  //description to add context in report or other developers\n
      "},{"location":"setup/guide/scenario/data-validation/#custom-validation","title":"Custom Validation","text":"

      There will be situation where you have a complex data setup and require you own custom logic to use for data validation. You can achieve this via setting your own SQL expression that returns a boolean value. An example is seen below where we want to check the array update_history, that each entry has updated_time greater than a certain timestamp.

      JavaScala
      validation().expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\n
      validation.expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\n

      If you want to know what other SQL function are available for you to use, check this page.

      "},{"location":"setup/guide/scenario/data-validation/#group-by-validation","title":"Group By Validation","text":"

      There are scenarios where you want to validate against grouped values or the whole dataset via aggregations. An example would be validating that each customer's transactions sum is greater than 0.

      "},{"location":"setup/guide/scenario/data-validation/#validation-criteria_1","title":"Validation Criteria","text":"

      Line 1: validation.groupBy().count().isEqual(100)

      • Method Chaining
        • groupBy(): Group by whole dataset.
        • count(): Counts the number of dataset elements.
        • isEqual(100): Checks if the count is equal to 100.
      • Validation Rule
        • This line ensures that the count of the total dataset is exactly 100.

      Line 2: validation.groupBy(\"account_id\").max(\"balance\").lessThan(900)

      • Method Chaining
        • groupBy(\"account_id\"): Groups the data based on the account_id field.
        • max(\"balance\"): Calculates the maximum value of the balance field within each group.
        • lessThan(900): Checks if the maximum balance in each group is less than 900.
      • Validation Rule
        • This line ensures that, for each group identified by account_id the maximum balance is less than 900.
      "},{"location":"setup/guide/scenario/data-validation/#considerations_1","title":"Considerations","text":"
      • Adjust the errorThreshold or validation to your specification scenario. The full list of types of validations can be found here.
      • For the full list of types of group by validations that can be used, check this page.
      JavaScala
      validation().groupBy().count().isEqual(100),\nvalidation().groupBy(\"account_id\").max(\"balance\").lessThan(900)\n
      validation.groupBy().count().isEqual(100),\nvalidation.groupBy(\"account_id\").max(\"balance\").lessThan(900)\n
      "},{"location":"setup/guide/scenario/data-validation/#sample-validation","title":"Sample Validation","text":"

      To try cover the majority of validation cases, the below has been created.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(\nvalidation().col(\"customer_details.name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.1).description(\"Names generally follow the same pattern\"),\nvalidation().col(\"date\").isNotNull().errorThreshold(10),\nvalidation().col(\"balance\").greaterThan(500),\nvalidation().expr(\"YEAR(date) == year\"),\nvalidation().col(\"status\").in(\"open\", \"closed\", \"pending\").errorThreshold(0.2).description(\"Could be new status introduced\"),\nvalidation().col(\"customer_details.age\").greaterThan(18),\nvalidation().expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\nvalidation().col(\"update_history\").greaterThanSize(2),\nvalidation().unique(\"account_id\"),\nvalidation().groupBy().count().isEqual(1000),\nvalidation().groupBy(\"account_id\").max(\"balance\").lessThan(900)\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false);\n\nexecute(config, jsonTask);\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(\nvalidation.col(\"customer_details.name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.1).description(\"Names generally follow the same pattern\"),\nvalidation.col(\"date\").isNotNull.errorThreshold(10),\nvalidation.col(\"balance\").greaterThan(500),\nvalidation.expr(\"YEAR(date) == year\"),\nvalidation.col(\"status\").in(\"open\", \"closed\", \"pending\").errorThreshold(0.2).description(\"Could be new status introduced\"),\nvalidation.col(\"customer_details.age\").greaterThan(18),\nvalidation.expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\nvalidation.col(\"update_history\").greaterThanSize(2),\nvalidation.unique(\"account_id\"),\nvalidation.groupBy().count().isEqual(1000),\nvalidation.groupBy(\"account_id\").max(\"balance\").lessThan(900)\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false)\n\nexecute(config, jsonTask)\n
      "},{"location":"setup/guide/scenario/data-validation/#run","title":"Run","text":"

      Let's try run.

      ./run.sh\n#input class MyValidationJavaPlan or MyValidationPlan\n#after completing, check report at docker/sample/report/index.html\n

      It should look something like this.

      Check the full example at ValidationPlanRun inside the examples repo.

      "},{"location":"setup/guide/scenario/delete-generated-data/","title":"Delete Generated Data","text":"

      Info

      Delete generated data is a paid feature. Try the free trial here.

      Creating a data generator for Postgres and delete the generated data after using it.

      "},{"location":"setup/guide/scenario/delete-generated-data/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/delete-generated-data/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/delete-generated-data/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedDeleteJavaPlanRun.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedDeletePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedDeleteJavaPlanRun extends PlanRun {\n{\nvar autoRun = configuration()\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.enableRecordTracking(true)                                                       (3)\n.enableDeleteGeneratedRecords(false)                                              (4)\n.enableUniqueCheck(true)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (5)\n.recordTrackingFolderPath(\"/opt/app/data/recordTracking\")                         (6)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(autoRun);\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedDeletePlanRun extends PlanRun {\n\nval autoRun = configuration\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.enableRecordTracking(true)                                                       (3)\n.enableDeleteGeneratedRecords(false)                                              (4)\n.enableUniqueCheck(true)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (5)\n.recordTrackingFolderPath(\"/opt/app/data/recordTracking\")                         (6)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(configuration = autoRun)\n}\n

      In the above code we note the following:

      1. We have defined a Postgres connection called my_postgres
      2. enableGeneratePlanAndTasks is enabled to auto generate data for all tables under customer database
      3. enableRecordTracking is enabled to ensure that all generated records are tracked. This will get used when we want to delete data afterwards
      4. enableDeleteGeneratedRecords is disabled for now. We want to see the generated data first and delete sometime after
      5. generatedPlanAndTaskFolderPath is the folder path where we saved the metadata we have gathered from my_postgres
      6. recordTrackingFolderPath is the folder path where record tracking is maintained. We need to persist this data to ensure it is still available when we want to delete data
      "},{"location":"setup/guide/scenario/delete-generated-data/#postgres-setup","title":"Postgres Setup","text":"

      If you don't have your own Postgres up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d postgres\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c '\\dt+ account.*'\n

      This will create the tables found under docker/data/sql/postgres/customer.sql. You can change this file to contain your own tables. We can see there are 4 tables created for us, accounts, balances, transactions and mapping.

      "},{"location":"setup/guide/scenario/delete-generated-data/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedDeleteJavaPlanRun or MyAdvancedDeletePlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1'\n

      It should look something like this.

         id   | account_number  | account_status | created_by | created_by_fixed_length | customer_id_int | customer_id_smallint | customer_id_bigint |   customer_id_decimal    | customer_id_real | customer_id_double | open_date  |     open_timestamp      | last_opened_time |                                                           payload_bytes\n--------+-----------------+----------------+------------+-------------------------+-----------------+----------------------+--------------------+--------------------------+------------------+--------------------+------------+-------------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------\n 100414 | 5uROOVOUyQUbubN | h3H            | SfA0eZJcTm | CuRw                    |              13 |                   42 |               6041 | 76987.745612542900000000 |         91866.78 |  66400.37433202339 | 2023-03-05 | 2023-08-14 11:33:11.343 | 23:58:01.736     | \\x604d315d4547616e6a233050415373317274736f5e682d516132524f3d23233c37463463322f342d34376d597e665d6b3d395b4238284028622b7d6d2b4f5042\n(1 row)\n

      The data that gets inserted will follow the foreign keys that are defined within Postgres and also ensure the insertion order is correct.

      Check the number of records via:

      docker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select count(1) from account.accounts'\n#open report under docker/sample/report/index.html\n
      "},{"location":"setup/guide/scenario/delete-generated-data/#delete","title":"Delete","text":"

      We are now at a stage where we want to delete the data that was generated. All we need to do is flip two flags.

      .enableDeleteGeneratedRecords(true)\n.enableGenerateData(false)  //we need to explicitly disable generating data\n

      Enable delete generated records and disable generating data.

      Before we run again, let us insert a record manually to see if that data will survive after running the job to delete the generated data.

      docker exec docker-postgresserver-1 psql -Upostgres -d customer -c \"insert into account.accounts (account_number) values ('my_account_number')\"\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c \"select count(1) from account.accounts\"\n

      We now should have 1001 records in our account.accounts table. Let's delete the generated data now.

      ./run.sh\n#input class MyAdvancedDeleteJavaPlanRun or MyAdvancedDeletePlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1'\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select count(1) from account.accounts'\n

      You should see that only 1 record is left, the one that we manually inserted. Great, now we can generate data reliably and also be able to clean it up.

      "},{"location":"setup/guide/scenario/delete-generated-data/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/delete-generated-data/#one-class-for-generating-another-for-deleting","title":"One class for generating, another for deleting?","text":"

      Yes, this is possible. There are two requirements: - the connection names used need to be the same across both classes - recordTrackingFolderPath needs to be set to the same value

      "},{"location":"setup/guide/scenario/delete-generated-data/#define-record-count","title":"Define record count","text":"

      You can control the record count per sub data source via numRecordsPerStep.

      JavaScala
      var autoRun = configuration()\n...\n.numRecordsPerStep(100)\n\nexecute(autoRun)\n
      val autoRun = configuration\n...\n.numRecordsPerStep(100)\n\nexecute(configuration = autoRun)\n
      "},{"location":"setup/guide/scenario/first-data-generation/","title":"First Data Generation","text":"

      Creating a data generator for a CSV file.

      "},{"location":"setup/guide/scenario/first-data-generation/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/first-data-generation/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/first-data-generation/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyCsvPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyCsvPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n\npublic class MyCsvJavaPlan extends PlanRun {\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n\nclass MyCsvPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/scenario/first-data-generation/#connection-configuration","title":"Connection Configuration","text":"

      When dealing with CSV files, we need to define a path for our generated CSV files to be saved at, along with any other high level configurations.

      JavaScala
      csv(\n\"customer_accounts\",              //name\n\"/opt/app/data/customer/account\", //path\nMap.of(\"header\", \"true\")          //optional additional options\n)\n

      Other additional options for CSV can be found here

      csv(\n\"customer_accounts\",              //name\n\"/opt/app/data/customer/account\", //path\nMap(\"header\" -> \"true\")           //optional additional options\n)\n

      Other additional options for CSV can be found here

      "},{"location":"setup/guide/scenario/first-data-generation/#schema","title":"Schema","text":"

      Our CSV file that we generate should adhere to a defined schema where we can also define data types.

      Let's define each field along with their corresponding data type. You will notice that the string fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"balance\").type(DoubleType.instance()),\nfield().name(\"created_by\"),\nfield().name(\"name\"),\nfield().name(\"open_time\").type(TimestampType.instance()),\nfield().name(\"status\")\n);\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"balance\").`type`(DoubleType),\nfield.name(\"created_by\"),\nfield.name(\"name\"),\nfield.name(\"open_time\").`type`(TimestampType),\nfield.name(\"status\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#field-metadata","title":"Field Metadata","text":"

      We could stop here and generate random data for the accounts table. But wouldn't it be more useful if we produced data that is closer to the structure of the data that would come in production? We can do this by defining various metadata attributes that add guidelines that the data generator will understand when generating data.

      "},{"location":"setup/guide/scenario/first-data-generation/#account_id","title":"account_id","text":"
      • account_id follows a particular pattern that where it starts with ACC and has 8 digits after it. This can be defined via a regex like below. Alongside, we also mention that values are unique ensure that unique values are generated.
      JavaScala
      field().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\n
      field.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#balance","title":"balance","text":"
      • balance let's make the numbers not too large, so we can define a min and max for the generated numbers to be between 1 and 1000.
      JavaScala
      field().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\n
      field.name(\"balance\").`type`(DoubleType).min(1).max(1000),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#name","title":"name","text":"
      • name is a string that also follows a certain pattern, so we could also define a regex but here we will choose to leverage the DataFaker library and create an expression to generate real looking name. All possible faker expressions can be found here
      JavaScala
      field().name(\"name\").expression(\"#{Name.name}\"),\n
      field.name(\"name\").expression(\"#{Name.name}\"),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#open_time","title":"open_time","text":"
      • open_time is a timestamp that we want to have a value greater than a specific date. We can define a min date by using java.sql.Date like below.
      JavaScala
      field().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      field.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#status","title":"status","text":"
      • status is a field that can only obtain one of four values, open, closed, suspended or pending.
      JavaScala
      field().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      field.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      "},{"location":"setup/guide/scenario/first-data-generation/#created_by","title":"created_by","text":"
      • created_by is a field that is based on the status field where it follows the logic: if status is open or closed, then it is created_by eod else created_by event. This can be achieved by defining a SQL expression like below.
      JavaScala
      field().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n
      field.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n

      Putting it all the fields together, our class should now look like this.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#record-count","title":"Record Count","text":"

      We only want to generate 100 records, so that we can see what the output looks like. This is controlled at the accountTask level like below. If you want to generate more records, set it to the value you want.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().records(100));\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.records(100))\n
      "},{"location":"setup/guide/scenario/first-data-generation/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations. We will also enable the unique check to ensure any unique fields will have unique values generated.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the accountTask, we have to call execute . So our full plan run will look like this.

      JavaScala
      public class MyCsvJavaPlan extends PlanRun {\n{\nvar accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, accountTask);\n}\n}\n
      class MyCsvPlan extends PlanRun {\n\nval accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nexecute(config, accountTask)\n}\n
      "},{"location":"setup/guide/scenario/first-data-generation/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class MyCsvJavaPlan or MyCsvPlan\n#after completing\nhead docker/sample/customer/account/part-00000*\n

      Your output should look like this.

      account_id,balance,created_by,name,open_time,status\nACC06192462,853.9843359645766,eod,Hoyt Kertzmann MD,2023-07-22T11:17:01.713Z,closed\nACC15350419,632.5969895326234,eod,Dr. Claude White,2022-12-13T21:57:56.840Z,open\nACC25134369,592.0958847218986,eod,Fabian Rolfson,2023-04-26T04:54:41.068Z,open\nACC48021786,656.6413439322964,eod,Dewayne Stroman,2023-05-17T06:31:27.603Z,open\nACC26705211,447.2850352884595,event,Garrett Funk,2023-07-14T03:50:22.746Z,pending\nACC03150585,750.4568929015996,event,Natisha Reichel,2023-04-11T11:13:10.080Z,suspended\nACC29834210,686.4257811608622,event,Gisele Ondricka,2022-11-15T22:09:41.172Z,suspended\nACC39373863,583.5110618128994,event,Thaddeus Ortiz,2022-09-30T06:33:57.193Z,suspended\nACC39405798,989.2623959059525,eod,Shelby Reinger,2022-10-23T17:29:17.564Z,open\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/scenario/first-data-generation/#join-with-another-csv","title":"Join With Another CSV","text":"

      Now that we have generated some accounts, let's also try to generate a set of transactions for those accounts in CSV format as well. The transactions could be in any other format, but to keep this simple, we will continue using CSV.

      We can define our schema the same way along with any additional metadata.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n);\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"date\").`type`(DateType).sql(\"DATE(time)\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#records-per-column","title":"Records Per Column","text":"

      Usually, for a given account_id, full_name, there should be multiple records for it as we want to simulate a customer having multiple transactions. We can achieve this through defining the number of records to generate in the count function.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumn(5, \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumn(5, \"account_id\", \"full_name\"))\n
      "},{"location":"setup/guide/scenario/first-data-generation/#random-records-per-column","title":"Random Records Per Column","text":"

      Above, you will notice that we are generating 5 records per account_id, full_name. This is okay but still not quite reflective of the real world. Sometimes, people have accounts with no transactions in them, or they could have many. We can accommodate for this via defining a random number of records per column.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n

      Here we set the minimum number of records per column to be 0 and the maximum to 5.

      "},{"location":"setup/guide/scenario/first-data-generation/#foreign-key","title":"Foreign Key","text":"

      In this scenario, we want to match the account_id in account to match the same column values in transaction. We also want to match name in account to full_name in transaction. This can be done via plan configuration like below.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\naccountTask, List.of(\"account_id\", \"name\"), //the task and columns we want linked\nList.of(Map.entry(transactionTask, List.of(\"account_id\", \"full_name\"))) //list of other tasks and their respective column names we want matched\n);\n
      val myPlan = plan.addForeignKeyRelationship(\naccountTask, List(\"account_id\", \"name\"),  //the task and columns we want linked\nList(transactionTask -> List(\"account_id\", \"full_name\"))  //list of other tasks and their respective column names we want matched\n)\n

      Now, stitching it all together for the execute function, our final plan should look like this.

      JavaScala
      public class MyCsvJavaPlan extends PlanRun {\n{\nvar accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n.count(count().records(100));\n\nvar transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nvar myPlan = plan().addForeignKeyRelationship(\naccountTask, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(transactionTask, List.of(\"account_id\", \"full_name\")))\n);\n\nexecute(myPlan, config, accountTask, transactionTask);\n}\n}\n
      class MyCsvPlan extends PlanRun {\n\nval accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n.count(count.records(100))\n\nval transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"date\").`type`(DateType).sql(\"DATE(time)\")\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nval myPlan = plan.addForeignKeyRelationship(\naccountTask, List(\"account_id\", \"name\"),\nList(transactionTask -> List(\"account_id\", \"full_name\"))\n)\n\nexecute(myPlan, config, accountTask, transactionTask)\n}\n

      Let's try run again.

      #clean up old data\nrm -rf docker/sample/customer/account\n./run.sh\n#input class MyCsvJavaPlan or MyCsvPlan\n#after completing, let's pick an account and check the transactions for that account\naccount=$(tail -1 docker/sample/customer/account/part-00000* | awk -F \",\" '{print $1 \",\" $4}')\necho $account\ncat docker/sample/customer/transaction/part-00000* | grep $account\n

      It should look something like this.

      ACC29117767,Willodean Sauer\nACC29117767,Willodean Sauer,84.99145871948083,2023-05-14T09:55:51.439Z,2023-05-14\nACC29117767,Willodean Sauer,58.89345733567232,2022-11-22T07:38:20.143Z,2022-11-22\n

      Congratulations! You have now made a data generator that has simulated a real world data scenario. You can check the DocumentationJavaPlanRun.java or DocumentationPlanRun.scala files as well to check that your plan is the same.

      We can now look to consume this CSV data from a job or service. Usually, once we have consumed the data, we would also want to check and validate that our consumer has correctly ingested the data.

      "},{"location":"setup/guide/scenario/first-data-generation/#validate","title":"Validate","text":"

      In this scenario, our consumer will read in the CSV file, do some transformations, and then save the data to Postgres. Let's try to configure data validations for the data that gets pushed into Postgres.

      "},{"location":"setup/guide/scenario/first-data-generation/#postgres-setup","title":"Postgres setup","text":"

      First, we define our connection properties for Postgres. You can check out the full options available here.

      JavaScala
      var postgresValidateTask = postgres(\n\"my_postgres\",                                          //connection name\n\"jdbc:postgresql://host.docker.internal:5432/customer\", //url\n\"postgres\",                                             //username\n\"password\"                                              //password\n).table(\"account\", \"transactions\");\n
      val postgresValidateTask = postgres(\n\"my_postgres\",                                          //connection name\n\"jdbc:postgresql://host.docker.internal:5432/customer\", //url\n\"postgres\",                                             //username\n\"password\"                                              //password\n).table(\"account\", \"transactions\")\n

      We can connect and access the data inside the table account.transactions. Now to define our data validations.

      "},{"location":"setup/guide/scenario/first-data-generation/#validations","title":"Validations","text":"

      For full information about validation options and configurations, check here. Below, we have an example that should give you a good understanding of what validations are possible.

      JavaScala
      var postgresValidateTask = postgres(...)\n.table(\"account\", \"transactions\")\n.validations(\nvalidation().col(\"account_id\").isNotNull(),\nvalidation().col(\"name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.2).description(\"Some names have different formats\"),\nvalidation().col(\"balance\").greaterThanOrEqual(0).errorThreshold(10).description(\"Account can have negative balance if overdraft\"),\nvalidation().expr(\"CASE WHEN status == 'closed' THEN isNotNull(close_date) ELSE isNull(close_date) END\"),\nvalidation().unique(\"account_id\", \"name\"),\nvalidation().groupBy(\"account_id\", \"name\").max(\"login_retry\").lessThan(10)\n);\n
      val postgresValidateTask = postgres(...)\n.table(\"account\", \"transactions\")\n.validations(\nvalidation.col(\"account_id\").isNotNull,\nvalidation.col(\"name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.2).description(\"Some names have different formats\"),\nvalidation.col(\"balance\").greaterThanOrEqual(0).errorThreshold(10).description(\"Account can have negative balance if overdraft\"),\nvalidation.expr(\"CASE WHEN status == 'closed' THEN isNotNull(close_date) ELSE isNull(close_date) END\"),\nvalidation.unique(\"account_id\", \"name\"),\nvalidation.groupBy(\"account_id\", \"name\").max(\"login_retry\").lessThan(10)\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#name_1","title":"name","text":"

      For all values in the name column, we check if they match the regex [A-Z][a-z]+ [A-Z][a-z]+. As we know in the real world, names do not always follow the same pattern, so we allow for an errorThreshold before marking the validation as failed. Here, we define the errorThreshold to be 0.2, which means, if the error percentage is greater than 20%, then fail the validation. We also append on a helpful description so other developers/users can understand the context of the validation.

      "},{"location":"setup/guide/scenario/first-data-generation/#balance_1","title":"balance","text":"

      We check that all balance values are greater than or equal to 0. This time, we have a slightly different errorThreshold as it is set to 10, which means, if the number of errors is greater than 10, then fail the validation.

      "},{"location":"setup/guide/scenario/first-data-generation/#expr","title":"expr","text":"

      Sometimes, we may need to include the values of multiple columns to validate a certain condition. This is where we can use expr to define a SQL expression that returns a boolean. In this scenario, we are checking if the status column has value closed, then the close_date should be not null, otherwise, close_date is null.

      "},{"location":"setup/guide/scenario/first-data-generation/#unique","title":"unique","text":"

      We check whether the combination of account_id and name are unique within the dataset. You can define one or more columns for unique validations.

      "},{"location":"setup/guide/scenario/first-data-generation/#groupby","title":"groupBy","text":"

      There may be some business rule that states the number of login_retry should be less than 10 for each account. We can check this via a group by validation where we group by the account_id, name, take the maximum value for login_retry per account_id,name combination, then check if it is less than 10.

      You can now look to play around with other configurations or data sources to meet your needs. Also, make sure to explore the docs further as it can guide you on what can be configured.

      "},{"location":"setup/guide/scenario/records-per-column/","title":"Multiple Records Per Column","text":"

      Creating a data generator for a CSV file where there are multiple records per column values.

      "},{"location":"setup/guide/scenario/records-per-column/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/records-per-column/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:pflooky/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/records-per-column/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/com/github/pflooky/plan/MyMultipleRecordsPerColJavaPlan.java
      • Scala: src/main/scala/com/github/pflooky/plan/MyMultipleRecordsPerColPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import com.github.pflooky.datacaterer.java.api.PlanRun;\n...\n\npublic class MyMultipleRecordsPerColJavaPlan extends PlanRun {\n{\nvar transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, transactionTask);\n}\n}\n
      import com.github.pflooky.datacaterer.api.PlanRun\n...\n\nclass MyMultipleRecordsPerColPlan extends PlanRun {\n\nval transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"), field.name(\"full_name\").expression(\"#{Name.name}\"), field.name(\"amount\").`type`(DoubleType.instance).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType.instance).min(java.sql.Date.valueOf(\"2022-01-01\")), field.name(\"date\").`type`(DateType.instance).sql(\"DATE(time)\")\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(config, transactionTask)\n}\n
      "},{"location":"setup/guide/scenario/records-per-column/#record-count","title":"Record Count","text":"

      By default, tasks will generate 1000 records. You can alter this value via the count configuration which can be applied to individual tasks. For example, in Scala, csv(...).count(count.records(100)) to generate only 100 records.

      "},{"location":"setup/guide/scenario/records-per-column/#records-per-column","title":"Records Per Column","text":"

      In this scenario, for a given account_id, full_name, there should be multiple records for it as we want to simulate a customer having multiple transactions. We can achieve this through defining the number of records to generate in the count function.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumn(5, \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumn(5, \"account_id\", \"full_name\"))\n

      This will generate 1000 * 5 = 5000 records as the default number of records is set (1000) and per account_id, full_name from the initial 1000 records, 5 records will be generated.

      "},{"location":"setup/guide/scenario/records-per-column/#random-records-per-column","title":"Random Records Per Column","text":"

      Generating 5 records per column is okay but still not quite reflective of the real world. Sometimes, people have accounts with no transactions in them, or they could have many. We can accommodate for this via defining a random number of records per column.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n

      Here we set the minimum number of records per column to be 0 and the maximum to 5. This will follow a uniform distribution so the average number of records per account is 2.5. We could also define other metadata, just like we did with fields, when defining the generator. For example, we could set standardDeviation and mean for the number of records generated per column to follow a normal distribution.

      "},{"location":"setup/guide/scenario/records-per-column/#run","title":"Run","text":"

      Let's try run.

      #clean up old data\nrm -rf docker/sample/customer/account\n./run.sh\n#input class MyMultipleRecordsPerColJavaPlan or MyMultipleRecordsPerColPlan\n#after completing\nhead docker/sample/customer/transaction/part-00000*\n

      It should look something like this.

      ACC29117767,Willodean Sauer\nACC29117767,Willodean Sauer,84.99145871948083,2023-05-14T09:55:51.439Z,2023-05-14\nACC29117767,Willodean Sauer,58.89345733567232,2022-11-22T07:38:20.143Z,2022-11-22\n

      You can now look to play around with other count configurations found here.

      "},{"location":"setup/validation/basic-validation/","title":"Basic Validations","text":"

      Run validations on a column to ensure the values adhere to your requirement. Can be set to complex validation logic via SQL expression as well if needed (see here).

      "},{"location":"setup/validation/basic-validation/#equal","title":"Equal","text":"

      Ensure all data in column is equal to certain value. Value can be of any data type. Can use isEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"year\").isEqual(2021),\nvalidation().col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      validation.col(\"year\").isEqual(2021),\nvalidation.col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"year == 2021\"\n
      "},{"location":"setup/validation/basic-validation/#not-equal","title":"Not Equal","text":"

      Ensure all data in column is not equal to certain value. Value can be of any data type. Can use isNotEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"year\").isNotEqual(2021),\nvalidation().col(\"year\").isNotEqualCol(\"YEAR(date)\"),\n
      validation.col(\"year\").isNotEqual(2021)\nvalidation.col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"year != 2021\"\n
      "},{"location":"setup/validation/basic-validation/#null","title":"Null","text":"

      Ensure all data in column is null.

      JavaScalaYAML
      validation().col(\"year\").isNull()\n
      validation.col(\"year\").isNull\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ISNULL(year)\"\n
      "},{"location":"setup/validation/basic-validation/#not-null","title":"Not Null","text":"

      Ensure all data in column is not null.

      JavaScalaYAML
      validation().col(\"year\").isNotNull()\n
      validation.col(\"year\").isNotNull\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ISNOTNULL(year)\"\n
      "},{"location":"setup/validation/basic-validation/#contains","title":"Contains","text":"

      Ensure all data in column is contains certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"name\").contains(\"peter\")\n
      validation.col(\"name\").contains(\"peter\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"CONTAINS(name, 'peter')\"\n
      "},{"location":"setup/validation/basic-validation/#not-contains","title":"Not Contains","text":"

      Ensure all data in column does not contain certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"name\").notContains(\"peter\")\n
      validation.col(\"name\").notContains(\"peter\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!CONTAINS(name, 'peter')\"\n
      "},{"location":"setup/validation/basic-validation/#unique","title":"Unique","text":"

      Ensure all data in column is unique.

      JavaScalaYAML
      validation().unique(\"account_id\", \"name\")\n
      validation.unique(\"account_id\", \"name\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- unique: [\"account_id\", \"name\"]\n
      "},{"location":"setup/validation/basic-validation/#less-than","title":"Less Than","text":"

      Ensure all data in column is less than certain value. Can use lessThanCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").lessThan(100),\nvalidation().col(\"amount\").lessThanCol(\"balance + 1\"),\n
      validation.col(\"amount\").lessThan(100),\nvalidation.col(\"amount\").lessThanCol(\"balance + 1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"amount < balance + 1\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-or-equal","title":"Less Than Or Equal","text":"

      Ensure all data in column is less than or equal to certain value. Can use lessThanOrEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").lessThanOrEqual(100),\nvalidation().col(\"amount\").lessThanOrEqualCol(\"balance + 1\"),\n
      validation.col(\"amount\").lessThanOrEqual(100),\nvalidation.col(\"amount\").lessThanCol(\"balance + 1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount <= 100\"\n- expr: \"amount <= balance + 1\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than","title":"Greater Than","text":"

      Ensure all data in column is greater than certain value. Can use greaterThanCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").greaterThan(100),\nvalidation().col(\"amount\").greaterThanCol(\"balance\"),\n
      validation.col(\"amount\").greaterThan(100),\nvalidation.col(\"amount\").greaterThanCol(\"balance\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount > 100\"\n- expr: \"amount > balance\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-or-equal","title":"Greater Than Or Equal","text":"

      Ensure all data in column is greater than or equal to certain value. Can use greaterThanOrEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").greaterThanOrEqual(100),\nvalidation().col(\"amount\").greaterThanOrEqualCol(\"balance\"),\n
      validation.col(\"amount\").greaterThanOrEqual(100),\nvalidation.col(\"amount\").greaterThanOrEqualCol(\"balance\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount >= 100\"\n- expr: \"amount >= balance\"\n
      "},{"location":"setup/validation/basic-validation/#between","title":"Between","text":"

      Ensure all data in column is between two values. Can use betweenCol to define SQL expression that references other columns.

      JavaScalaYAML
      validation().col(\"amount\").between(100, 200),\nvalidation().col(\"amount\").betweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      validation.col(\"amount\").between(100, 200),\nvalidation.col(\"amount\").betweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount BETWEEN 100 AND 200\"\n- expr: \"amount BETWEEN balance * 0.9 AND balance * 1.1\"\n
      "},{"location":"setup/validation/basic-validation/#not-between","title":"Not Between","text":"

      Ensure all data in column is not between two values. Can use notBetweenCol to define SQL expression that references other columns.

      JavaScalaYAML
      validation().col(\"amount\").notBetween(100, 200),\nvalidation().col(\"amount\").notBetweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      validation.col(\"amount\").notBetween(100, 200)\nvalidation.col(\"amount\").notBetweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount NOT BETWEEN 100 AND 200\"\n- expr: \"amount NOT BETWEEN balance * 0.9 AND balance * 1.1\"\n
      "},{"location":"setup/validation/basic-validation/#in","title":"In","text":"

      Ensure all data in column is in set of defined values.

      JavaScalaYAML
      validation().col(\"status\").in(\"open\", \"closed\")\n
      validation.col(\"status\").in(\"open\", \"closed\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"status IN ('open', 'closed')\"\n
      "},{"location":"setup/validation/basic-validation/#matches","title":"Matches","text":"

      Ensure all data in column matches certain regex expression.

      JavaScalaYAML
      validation().col(\"account_id\").matches(\"ACC[0-9]{8}\")\n
      validation.col(\"account_id\").matches(\"ACC[0-9]{8}\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"REGEXP(account_id, ACC[0-9]{8})\"\n
      "},{"location":"setup/validation/basic-validation/#not-matches","title":"Not Matches","text":"

      Ensure all data in column does not match certain regex expression.

      JavaScalaYAML
      validation().col(\"account_id\").notMatches(\"^acc.*\")\n
      validation.col(\"account_id\").notMatches(\"^acc.*\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!REGEXP(account_id, '^acc.*')\"\n
      "},{"location":"setup/validation/basic-validation/#starts-with","title":"Starts With","text":"

      Ensure all data in column starts with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").startsWith(\"ACC\")\n
      validation.col(\"account_id\").startsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"STARTSWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#not-starts-with","title":"Not Starts With","text":"

      Ensure all data in column does not start with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").notStartsWith(\"ACC\")\n
      validation.col(\"account_id\").notStartsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!STARTSWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#ends-with","title":"Ends With","text":"

      Ensure all data in column ends with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").endsWith(\"ACC\")\n
      validation.col(\"account_id\").endsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ENDWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#not-ends-with","title":"Not Ends With","text":"

      Ensure all data in column does not end with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").notEndsWith(\"ACC\")\n
      validation.col(\"account_id\").notEndsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!ENDWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#size","title":"Size","text":"

      Ensure all data in column has certain size. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").size(5)\n
      validation.col(\"transactions\").size(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions, 5)\"\n
      "},{"location":"setup/validation/basic-validation/#not-size","title":"Not Size","text":"

      Ensure all data in column does not have certain size. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").notSize(5)\n
      validation.col(\"transactions\").notSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) != 5\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-size","title":"Less Than Size","text":"

      Ensure all data in column has size less than certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").lessThanSize(5)\n
      validation.col(\"transactions\").lessThanSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) < 5\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-or-equal-size","title":"Less Than Or Equal Size","text":"

      Ensure all data in column has size less than or equal to certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").lessThanOrEqualSize(5)\n
      validation.col(\"transactions\").lessThanOrEqualSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) <= 5\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-size","title":"Greater Than Size","text":"

      Ensure all data in column has size greater than certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").greaterThanSize(5)\n
      validation.col(\"transactions\").greaterThanSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) > 5\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-or-equal-size","title":"Greater Than Or Equal Size","text":"

      Ensure all data in column has size greater than or equal to certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").greaterThanOrEqualSize(5)\n
      validation.col(\"transactions\").greaterThanOrEqualSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) >= 5\"\n
      "},{"location":"setup/validation/basic-validation/#luhn-check","title":"Luhn Check","text":"

      Ensure all data in column passes luhn check. Luhn check is used to validate credit card numbers and certain identification numbers (see here for more details).

      JavaScalaYAML
      validation().col(\"credit_card\").luhnCheck()\n
      validation.col(\"credit_card\").luhnCheck\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"LUHN_CHECK(credit_card)\"\n
      "},{"location":"setup/validation/basic-validation/#has-type","title":"Has Type","text":"

      Ensure all data in column has certain data type.

      JavaScalaYAML
      validation().col(\"id\").hasType(\"string\")\n
      validation.col(\"id\").hasType(\"string\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"TYPEOF(id) == 'string'\"\n
      "},{"location":"setup/validation/basic-validation/#expression","title":"Expression","text":"

      Ensure all data in column adheres to SQL expression defined that returns back a boolean. You can define complex logic in here that could combine multiple columns.

      For example, CASE WHEN status == 'open' THEN balance > 0 ELSE balance == 0 END would check all rows with status open to have balance greater than 0, otherwise, check the balance is 0.

      JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validations(\nvalidation().expr(\"amount < 100\"),\nvalidation().expr(\"year == 2021\").errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation().expr(\"REGEXP_LIKE(name, 'Peter .*')\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n);\n\nvar conf = configuration().enableValidation(true);\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validations(\nvalidation.expr(\"amount < 100\"),\nvalidation.expr(\"year == 2021\").errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation.expr(\"REGEXP_LIKE(name, 'Peter .*')\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)\n\nval conf = configuration.enableValidation(true)\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"year == 2021\"\nerrorThreshold: 0.1   #equivalent to if error percentage is > 10%, then fail\n- expr: \"REGEXP_LIKE(name, 'Peter .*')\"\nerrorThreshold: 200   #equivalent to if number of errors is > 200, then fail\ndescription: \"Should be lots of Peters\"\n\n#enableValidation inside application.conf\n
      "},{"location":"setup/validation/column-name-validation/","title":"Column Name Validations","text":"

      Run validations on the column names to check for column name count of existence of column names.

      "},{"location":"setup/validation/column-name-validation/#count-equal","title":"Count Equal","text":"

      Ensure column name count is equal to certain number.

      JavaScala
      validation().columnNames().countEqual(3)\n
      validation.columnNames.countEqual(3)\n
      "},{"location":"setup/validation/column-name-validation/#not-equal","title":"Not Equal","text":"

      Ensure column name count is between two numbers.

      JavaScala
      validation().columnNames().countBetween(10, 12)\n
      validation.columnNames.countBetween(10, 12)\n
      "},{"location":"setup/validation/column-name-validation/#match-order","title":"Match Order","text":"

      Ensure all column names match particular ordering and is complete.

      JavaScala
      validation().columnNames().matchOrder(\"account_id\", \"amount\", \"name\")\n
      validation.columnNames.matchOrder(\"account_id\", \"amount\", \"name\")\n
      "},{"location":"setup/validation/column-name-validation/#match-set","title":"Match Set","text":"

      Ensure column names contains set of expected names. Order is not checked.

      JavaScala
      validation().columnNames().matchSet(\"account_id\", \"first_name\")\n
      validation.columnNames.matchSet(\"account_id\", \"first_name\")\n
      "},{"location":"setup/validation/group-by-validation/","title":"Group By Validation","text":"

      If you want to run aggregations based on a particular set of columns or just the whole dataset, you can do so via group by validations. An example would be checking that the sum of amount is less than 1000 per account_id, year. The validations applied can be one of the validations from the basic validation set found here.

      "},{"location":"setup/validation/group-by-validation/#record-count","title":"Record count","text":"

      Check the number of records across the whole dataset.

      JavaScala
      validation().groupBy().count().lessThan(1000)\n
      validation.groupBy().count().lessThan(1000)\n
      "},{"location":"setup/validation/group-by-validation/#record-count-per-group","title":"Record count per group","text":"

      Check the number of records for each group.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").count().lessThan(10)\n
      validation.groupBy(\"account_id\", \"year\").count().lessThan(10)\n
      "},{"location":"setup/validation/group-by-validation/#sum","title":"Sum","text":"

      Check the sum of a columns values for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").sum(\"amount\").lessThan(1000)\n
      validation.groupBy(\"account_id\", \"year\").sum(\"amount\").lessThan(1000)\n
      "},{"location":"setup/validation/group-by-validation/#count","title":"Count","text":"

      Check the count for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").count(\"amount\").lessThan(10)\n
      validation.groupBy(\"account_id\", \"year\").count(\"amount\").lessThan(10)\n
      "},{"location":"setup/validation/group-by-validation/#min","title":"Min","text":"

      Check the min for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").min(\"amount\").greaterThan(0)\n
      validation.groupBy(\"account_id\", \"year\").min(\"amount\").greaterThan(0)\n
      "},{"location":"setup/validation/group-by-validation/#max","title":"Max","text":"

      Check the max for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").max(\"amount\").lessThanOrEqual(100)\n
      validation.groupBy(\"account_id\", \"year\").max(\"amount\").lessThanOrEqual(100)\n
      "},{"location":"setup/validation/group-by-validation/#average","title":"Average","text":"

      Check the average for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").avg(\"amount\").between(40, 60)\n
      validation.groupBy(\"account_id\", \"year\").avg(\"amount\").between(40, 60)\n
      "},{"location":"setup/validation/group-by-validation/#standard-deviation","title":"Standard deviation","text":"

      Check the standard deviation for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").stddev(\"amount\").between(0.5, 0.6)\n
      validation.groupBy(\"account_id\", \"year\").stddev(\"amount\").between(0.5, 0.6)\n
      "},{"location":"setup/validation/upstream-data-source-validation/","title":"Upstream Data Source Validation","text":"

      If you want to run data validations based on data generated or data from another data source, you can use the upstream data source validations. An example would be generating a Parquet file that gets ingested by a job and inserted into Postgres. The validations can then check for each account_id generated in the Parquet, it exists in account_number column in Postgres. The validations can be chained with basic and group by validations or even other upstream data sources, to cover any complex validations.

      "},{"location":"setup/validation/upstream-data-source-validation/#basic-join","title":"Basic join","text":"

      Join across datasets by particular columns. Then run validations on the joined dataset. You will notice that the data source name is appended onto the column names when joined (i.e. my_first_json_customer_details), to ensure column names do not clash and make it obvious which columns are being validated.

      In the below example, we check that the for the same account_id, then customer_details.name in the my_first_json dataset should equal to the name column in the my_second_json.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)                   //upstream data generation task is `firstJsonTask`\n.joinColumns(\"account_id\")                               //use `account_id` column in both datasets to join corresponding records (outer join by default)\n.withValidation(\nvalidation().col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")                                  //validate the name in `my_second_json` is equal to `customer_details.name` in `my_first_json` when the `account_id` matches\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)                   //upstream data generation task is `firstJsonTask`\n.joinColumns(\"account_id\")                             //use `account_id` column in both datasets to join corresponding records (outer join by default)\n.withValidation(\nvalidation.col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")                                //validate the name in `my_second_json` is equal to `customer_details.name` in `my_first_json` when the `account_id` matches\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#join-expression","title":"Join expression","text":"

      Define join expression to link two datasets together. This can be any SQL expression that returns a boolean value. Useful in situations where join is based on transformations or complex logic.

      In the below example, we have to use CONCAT SQL function to combine 'ACC' and account_number to join with account_id column in my_first_json dataset.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinExpr(\"my_first_json_account_id == CONCAT('ACC', account_number)\")  //generic SQL expression that returns a boolean\n.withValidation(\nvalidation().col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)\n.joinExpr(\"my_first_json_account_id == CONCAT('ACC', account_number)\")  //generic SQL expression that returns a boolean\n.withValidation(\nvalidation.col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#different-join-type","title":"Different join type","text":"

      By default, an outer join is used to gather columns from both datasets together for validation. But there may be scenarios where you want to control the join type.

      Possible join types include:

      • inner
      • outer, full, fullouter, full_outer
      • leftouter, left, left_outer
      • rightouter, right, right_outer
      • leftsemi, left_semi, semi
      • leftanti, left_anti, anti
      • cross

      In the example below, we do an anti join by column account_id and check if there are no records. This essentially checks that all account_id's from my_second_json exist in my_first_json. The second validation also does something similar but does an outer join (by default) and checks that the joined dataset has 30 records.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.joinType(\"anti\")\n.withValidation(validation().count().isEqual(0)),\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation().count().isEqual(30))\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.joinType(\"anti\")\n.withValidation(validation.count().isEqual(0)),\nvalidation.upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation.count().isEqual(30))\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#join-then-group-by-validation","title":"Join then group by validation","text":"

      We can apply aggregate or group by validations to the resulting joined dataset as the withValidation method accepts any type of validation.

      Here we group by account_id, my_first_json_balance to check that when the amount field is summed up per group, it is between 0.8 and 1.2 times the balance.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"balance\").type(DoubleType.instance()).min(10).max(1000),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation().groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"balance\").`type`(DoubleType).min(10).max(1000),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation.groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#chained-validations","title":"Chained validations","text":"

      Given that the withValidation method accepts any other type of validation, you can chain other upstream data sources with it. Here we will show a third upstream data source being checked to ensure 30 records exists after joining them together by account_id.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"balance\").type(DoubleType.instance()).min(10).max(1000),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n)\n.count(count().records(10));\n\nvar thirdJsonTask = json(\"my_third_json\", \"/tmp/data/third_json\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"amount\").type(IntegerType.instance()).min(1).max(100),\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n.count(count().records(10));\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(\nvalidation().upstreamData(thirdJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation().count().isEqual(30))\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"balance\").`type`(DoubleType).min(10).max(1000),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n.count(count.records(10))\n\nval thirdJsonTask = json(\"my_third_json\", \"/tmp/data/third_json\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"amount\").`type`(IntegerType).min(1).max(100),\nfield.name(\"name\").expression(\"#{Name.name}\"),\n)\n.count(count.records(10))\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation.groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n),\n)\n

      Can check out a full example here for more details.

      "},{"location":"use-case/business-value/","title":"Business Value","text":"

      Below is a list of the business related benefits from using Data Caterer which may be applicable for your use case.

      Problem Data Caterer Solution Resources Effects Reliable test data creation - Profile existing data- Create scenarios- Generate data Software Engineers, QA, Testers Cost reduction in labor, more time spent on development, more bugs caught before production Faster development cycles - Generate data in local, test, UAT, pre-prod- Run different scenarios Software Engineers, QA, Testers More defects caught in lower environments, features pushed to production faster, common framework used across all environments Data compliance - Profiling existing data- Generate based on metadata- No complex masking- No production data used in lower environments Audit and compliance No chance for production data breaches Storage costs - Delete generated data- Test specific scenarios Infrastructure Lower data storage costs, less time spent on data management and clean up Schema evolution - Create metadata from data sources- Generate data based off fresh metadata Software Engineers, QA, Testers Less time spent altering tests due to schema changes, ease of use between environments and application versions"},{"location":"use-case/comparison/","title":"Comparison to similar tools","text":"

      I have tried to include all the companies found in the list here from Mostly AI blog post and used information that is publicly available.

      The companies/products not shown below either have:

      • a website with insufficient information about the technology side of data generation/validation
      • no/little documentation
      • don't have a free, no sign-up version of their app to use
      "},{"location":"use-case/comparison/#data-generation","title":"Data Generation","text":"Tool Description Cost Pros Cons Data Catering Scala based data generation and validation tool via metadata Check all prices here, all in AUD$15 per month individual$200 per month <100 employees$500 per month 100-1,000 employees$2,000 per month >1,000 employees Data generation and validation Batch and event generation Maintain referential integrity Scala/Java SDK Customisable scenarios and validations Open core Metadata driven Report generation Use validation rules from existing tools Data clean up No UI No load testing metrics No alerting No validation of real time data sources Clearbox AI Python based data generation tool via ML Unclear Python SDK UI interface Detect private data Report generation Batch data only No data clean up Limited/no documentation Curiosity Software Platform solution for test data management Unclear Extensive documentation Generate data based off test cases UI interface Web/API/UI/mobile testing No quick start No SDK Many components that may not be required No event generation support DataCebo Synthetic Data Vault Python based data generation tool via ML Unclear Python SDK Report generation Data quality checks Business logic constraints No data connection support No data clean up No foreign key support Datafaker Realistic data generation library Free SDK for many languages Simple, easy to use Extensible Open source Generate realistic values No data connection support No data clean up No validation No foreign key support DBLDatagen Python based data generation tool Free Python SDK Open source Good documentation Customisable scenarios Customisable column generation Generate from existing data/schemas Plugin third-party libraries Limited support if issues Code required No data clean up No data validation Gatling HTTP API load testing tool Free (Open Source)Gatling Enterprise, usage based, starts from \u20ac89 per month, 1 user, 6.25 hours of testing Kotlin, Java & Scala SDK Widely used Open source Clear documentation Extensive testing/validation support Customisable scenarios Report generation Only supports HTTP, JMS and JDBC No data clean up Data feeders not based off metadata Gretel Python based data generation tool via ML Usage based, starts from $295 per month, $2.20 per credit, assumed USD CLI & Python SDK UI interface Training and re-use of models Detect private data Customisable scenarios Batch data only No relationships between data sources Only simple foreign key relations defined No data clean up Charge by usage Howso Python based data generation tool via ML Unclear Python SDK Playground to try Open source library Customisable scenarios No support for data sources No data validation No data clean up Mostly AI Python based data generation tool via ML Usage based, Enterprise 1 user, 100 columns, 100K rows $3,100 per month, assumed USD Report generation Non-technical users can use UI Customisable scenarios Charge by usage Batch data only No data clean up Confusing use of 'smart select' for multiple foreign keys Limited custom column generation logic Multiple deployment components No SDK Octopize Python based data generation tool via ML Unclear Python & R SDK Report generation API for metadata Customisable scenarios Input data source is only CSV Multiple manual steps before starting Quickstart is not a quickstart Documentation lacks code examples Synthesized Python based data generation tool via ML Unclear CLI & Python SDK API for metadata IDE setup Data quality checks Not sure what is SDK & TDK Charge by usage No report of what was generated No relationships between data sources Tonic Platform solution for generating data Unclear UI interface Good documentation Detect private data Support for encrypted columns Report generation Alerting Batch data only Multiple deployment components No relationships between data sources No data validation No data clean up No SDK (only API) Difficult to embed complex business logic YData Python based data generation tool via ML. Platform solution as well Unclear Python SDK Open source Detect private data Compare datasets Report generation No data connection support Batch data only No data clean up Separate data generation and data validation No foreign key support"},{"location":"use-case/comparison/#use-of-ml-models","title":"Use of ML models","text":"

      You may notice that the majority of data generators use machine learning (ML) models to learn from your existing datasets to generate new data. Below are some pros and cons to the approach.

      Pros

      • Simple setup
      • Ability to reproduce complex logic
      • Flexible to accept all types of data

      Cons

      • Long time for model learning
      • Black box of logic
      • Maintain, store and update of ML models
      • Restriction on input data lengths
      • May not maintain referential integrity
      • Require deeper understanding of ML models for fine-tuning
      • Accuracy may be worse than non-ML models
      "},{"location":"use-case/roadmap/","title":"Roadmap","text":"

      Items below summarise the roadmap of Data Caterer. As each task gets completed, it will be documented and linked.

      Feature Description Sub Tasks Data source support Batch or real time data sources that can be added to Data Caterer. Support data sources that users want - AWS, GCP and Azure related data services ( cloud storage)- Deltalake- RabbitMQ- ActiveMQ- MongoDB- Elasticsearch- Snowflake- Databricks- Pulsar Metadata discovery Allow for schema and data profiling from external metadata sources - HTTP (OpenAPI spec)- JMS- Read from samples- OpenLineage metadata (Marquez)- OpenMetadata- ODCS (Open Data Contract Standard)- Amundsen- Datahub- Solace Event Portal- Airflow- DBT Developer API Scala/Java interface for developers/testers to create data generation and validation tasks - Scala- Java Report generation Generate a report that summarises the data generation or validation results - Report for data generated and validation rules UI portal Allow users to access a UI to input data generation or validation tasks. Also be able to view report results - Metadata stored in database- Store data generation/validation run information in file/database Integration with data validation tools Derive data validation rules from existing data validation tools - Great Expectation- DBT constraints- SodaCL- MonteCarlo Data validation rule suggestions Based on metadata, generate data validation rules appropriate for the dataset - Suggest basic data validations (yet to document) Wait conditions before data validation Define certain conditions to be met before starting data validations - Webhook- File exists- Data exists via SQL expression- Pause Validation types Ability to define simple/complex data validations - Basic validations- Aggregates (sum of amount per account is > 500)- Ordering (transactions are ordered by date)- Relationship (at least one account entry in history table per account in accounts table)- Data profile (how close the generated data profile is compared to the expected data profile)- Column name (check column count, column names, ordering) Data generation record count Generate scenarios where there are one to many, many to many situations relating to record count. Also ability to cover all edge cases or scenarios - Cover all possible cases (i.e. record for each combination of oneOf values, positive/negative values etc.)- Ability to override edge cases Alerting When tasks have completed, ability to define alerts based on certain conditions - Slack- Email Metadata enhancements Based on data profiling or inference, can add to existing metadata - PII detection (can integrate with Presidio)- Relationship detection across data sources- SQL generation- Ordering information Data cleanup Ability to clean up generated data - Clean up generated data- Clean up data in consumer data sinks- Clean up data from real time sources (i.e. DELETE HTTP endpoint, delete events in JMS) Trial version Trial version of the full app for users to test out all the features - Trial app to try out all features Code generation Based on metadata or existing classes, code for data generation and validation could be generated - Code generation- Schema generation from Scala/Java class Real time response data validations Ability to define data validations based on the response from real time data sources (e.g. HTTP response) - HTTP response data validation"},{"location":"use-case/blog/shift-left-data-quality/","title":"Shifting Data Quality Left with Data Catering","text":""},{"location":"use-case/blog/shift-left-data-quality/#empowering-proactive-data-management","title":"Empowering Proactive Data Management","text":"

      In the ever-evolving landscape of data-driven decision-making, ensuring data quality is non-negotiable. Traditionally, data quality has been a concern addressed late in the development lifecycle, often leading to reactive measures and increased costs. However, a paradigm shift is underway with the adoption of a \"shift left\" approach, placing data quality at the forefront of the development process.

      "},{"location":"use-case/blog/shift-left-data-quality/#today","title":"Today","text":"
      graph LR\n  subgraph badQualityData[<b>Manually generated data, limited data scenarios, fragmented testing tools</b>]\n  local[<b>Local</b>\\nManual test, unit test]\n  dev[<b>Dev</b>\\nManual test, integration test]\n  stg[<b>Staging</b>\\nSanity checks]\n  end\n\n  subgraph qualityData[<b>Reliable data, the true test</b>]\n  prod[<b>Production</b>\\nData quality checks, monitoring, observaibility]\n  end\n\n  style badQualityData fill:#d9534f,fill-opacity:0.7\n  style qualityData fill:#5cb85c,fill-opacity:0.7\n\n  local --> dev\n  dev --> stg\n  stg --> prod
      "},{"location":"use-case/blog/shift-left-data-quality/#with-data-caterer","title":"With Data Caterer","text":"
      graph LR\n  subgraph qualityData[<b>Reliable data anywhere, common testing tool across all data sources</b>]\n  direction LR\n  local[<b>Local</b>\\nManual test, unit test]\n  dev[<b>Dev</b>\\nManual test, integration test]\n  stg[<b>Staging</b>\\nSanity checks]\n  prod[<b>Production</b>\\nData quality checks, monitoring, observaibility]\n  end\n\n  style qualityData fill:#5cb85c,fill-opacity:0.7\n\n  local --> dev\n  dev --> stg\n  stg --> prod
      "},{"location":"use-case/blog/shift-left-data-quality/#understanding-the-shift-left-approach","title":"Understanding the Shift Left Approach","text":"

      \"Shift left\" is a philosophy that advocates for addressing tasks and concerns earlier in the development lifecycle. Applied to data quality, it means tackling data issues as early as possible, ideally during the development and testing phases. This approach aims to catch data anomalies, inaccuracies, or inconsistencies before they propagate through the system, reducing the likelihood of downstream errors.

      "},{"location":"use-case/blog/shift-left-data-quality/#data-caterer-the-catalyst-for-shifting-left","title":"Data Caterer: The Catalyst for Shifting Left","text":"

      Enter Data Caterer, a metadata-driven data generation and validation tool designed to empower organizations in shifting data quality left. By incorporating Data Caterer into the early stages of development, teams can proactively test complex data flows, validate data sources, and ensure data quality before it reaches downstream processes.

      "},{"location":"use-case/blog/shift-left-data-quality/#key-advantages-of-shifting-data-quality-left-with-data-caterer","title":"Key Advantages of Shifting Data Quality Left with Data Caterer","text":"
      1. Early Issue Detection
        • Identify data quality issues early in the development process, reducing the risk of errors downstream.
      2. Proactive Validation
        • Create production-like data scenarios, validate sources and complex flows with simplicity, promoting proactive data quality.
      3. Efficient Testing Across Sources
        • Seamlessly test data across various sources, including databases, file formats, HTTP, and messaging, all within your local laptop or development environment.
        • Fast feedback loop to motivate developers to ensure thorough testing of data consumers.
      4. Integration with Development Pipelines
        • Easily integrate Data Caterer as a task in your development pipelines, ensuring that data quality is a continuous consideration rather than an isolated event.
      5. Integration with Existing Metadata
        • By harnessing the power of existing metadata from data catalogs, schema registries, or other data validation tools, Data Caterer streamlines the process, automating the generation and validation of your data effortlessly.
      6. Improved Collaboration
        • Facilitate collaboration between developers, testers, and data professionals by providing a common platform for early data validation.
      "},{"location":"use-case/blog/shift-left-data-quality/#realizing-the-vision-of-proactive-data-quality","title":"Realizing the Vision of Proactive Data Quality","text":"

      As organizations strive for excellence in their data-driven endeavors, the shift left approach with Data Caterer becomes a strategic imperative. By instilling a proactive data quality culture, teams can minimize the risk of costly errors, enhance the reliability of their data, and streamline the entire development lifecycle.

      In conclusion, the marriage of the shift left philosophy and Data Caterer brings forth a new era of data management, where data quality is not just a final checkpoint but an integral part of every development milestone. Embrace the shift left approach with Data Caterer and empower your teams to build robust, high-quality data solutions from the very beginning.

      Shift Left, Validate Early, and Accelerate with Data Caterer.

      "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Home","text":"Data Caterer is a metadata-driven data generation and testing tool that aids in creating production-like data across both batch and event data systems. Run data validations to ensure your systems have ingested it as expected, then clean up the data afterwards. Simplify your data testing Take away the pain and complexity of your data landscape and let Data Caterer handle it

      Try now

      Data testing is difficult and fragmented
      • Data being sent via messages, HTTP requests or files and getting stored in databases, file systems, etc.
      • Maintaining and updating tests with the latest schemas and business definitions
      • Different testing tools for services, jobs or data sources
      • Complex relationships between datasets and fields
      • Different scenarios, permutations, combinations and edge cases to cover
      Current solutions only cover half the story
      • Specific testing frameworks that support one or limited number of data sources or transport protocols
      • Under utilizing metadata from data catalogs or metadata discovery services
      • Testing teams having difficulties understanding when failures occur
      • Integration tests relying on external teams/services
      • Manually generating data, or worse, copying/masking production data into lower environments
      • Observability pushes towards being reactive rather than proactive

      Try now

      What you need is a reliable tool that can handle changes to your data landscape

      With Data Caterer, you get:

      • Ability to connect to any type of data source: files, SQL or no-SQL databases, messaging systems, HTTP
      • Discover metadata from your existing infrastructure and services
      • Gain confidence that bugs do not propagate to production
      • Be proactive in ensuring changes do not affect other data producers or consumers
      • Configurability to run the way you want

      Try now

      "},{"location":"#tech-summary","title":"Tech Summary","text":"

      Use the Java, Scala API, or YAML files to help with setup or customisation that are all run via a Docker image. Want to get into details? Checkout the setup pages here to get code examples and guides that will take you through scenarios and data sources.

      Main features include:

      • Metadata discovery
      • Batch and event data generation
      • Maintain referential integrity across any dataset
      • Create custom data generation scenarios
      • Clean up generated data
      • Validate data
      • Suggest data validations

      Check other run configurations here.

      "},{"location":"#what-is-it","title":"What is it","text":"
      • Data generation and testing tool

        Generate production like data to be consumed and validated.

      • Designed for any data source

        We aim to support pushing data to any data source, in any format.

      • Low/no code solution

        Can use the tool via either Scala, Java or YAML. Connect to data or metadata sources to generate data and validate.

      • Developer productivity tool

        If you are a new developer or seasoned veteran, cut down on your feedback loop when developing with data.

      "},{"location":"#what-it-is-not","title":"What it is not","text":"
      • Metadata storage/platform

        You could store and use metadata within the data generation/validation tasks but is not the recommended approach. Rather, this metadata should be gathered from existing services who handle metadata on behalf of Data Caterer.

      • Data contract

        The focus of Data Caterer is on the data generation and testing, which can include details about how the data looks like and how it behaves. But it does not encompass all the additional metadata that comes with a data contract such as SLAs, security, etc.

      • Metrics from load testing

        Although millions of records can be generated, there are limited capabilities in terms of metric capturing.

      Try now

      Data Catering vs Other tools vs In-house

      Data Catering Other tools In-house Data flow Batch and events generation with validation Batch generation only or validation only Depends on architecture and design Time to results 1 day 1+ month to integrate, deploy and onboard 1+ month to build and deploy Solution Connect with your existing data ecosystem, automatic generation and validation Manual UI data entry or via SDK Depends on engineer(s) building it

      "},{"location":"about/","title":"About","text":"

      Hi, my name is Peter. I am a independent Software Developer, mainly focussing on data related services. My experience can be found on my LinkedIn.

      I have created Data Caterer to help serve individuals and companies with data generation and data testing. It is a complex area that has many edge cases or intricacies that are hard to summarise or turn into something actionable and repeatable. Through the use of metadata, Data Caterer can help simplify your data testing, simulating production environment data, aid in data debugging, or whatever your data use case may be.

      Given that it is going to save you and your team time and money, please help in considering financial support. This will help the product grow into a sustainable and feature-full service.

      "},{"location":"about/#contact","title":"Contact","text":"

      Please contact Peter Flook via Slack or via email peter.flook@data.catering if you have any questions or queries.

      "},{"location":"about/#terms-of-service","title":"Terms of service","text":"

      Terms of service can be found here.

      "},{"location":"about/#privacy-policy","title":"Privacy policy","text":"

      Privacy policy can be found here.

      "},{"location":"sponsor/","title":"Sponsor","text":"

      To have access to all the features of Data Caterer, you can subscribe according to your situation. You will not be charged by usage. As you continue to subscribe, you will have access to the latest version of Data Caterer as new bug fixes and features get published.

      This has been a passion project of mine where I have spent countless hours thinking of the idea, implementing, maintaining, documenting and updating it. I hope that it will help with developers and companies with their testing by saving time and effort, allowing you to focus on what is important. If you fall under this boat, please consider sponsorship to allow me to further maintain and upgrade the solution. Any contributions are much appreciated.

      Those who are wanting to use this project for open source applications, please contact me as I would be happy to contribute.

      This is inspired by the mkdocs-material project that follows the same model.

      "},{"location":"sponsor/#features","title":"Features","text":"
      • Metadata discovery
      • All data sources (see here for all data sources)
      • Batch and Event generation
      • Auto generation from data connections or metadata sources
      • Suggest data validations
      • Clean up generated data
      • Run as many times as you want, not charged by usage
      • Plus more to come
      "},{"location":"sponsor/#tiers","title":"Tiers","text":""},{"location":"sponsor/#manage-subscription","title":"Manage Subscription","text":"

      Manage via this link

      "},{"location":"sponsor/#contact","title":"Contact","text":"

      Please contact Peter Flook via Slack or via email peter.flook@data.catering if you have any questions or queries.

      "},{"location":"use-case/","title":"Use cases","text":""},{"location":"use-case/#replicate-production-in-lower-environment","title":"Replicate production in lower environment","text":"

      Having a stable and reliable test environment is a challenge for a number of companies, especially where teams are asynchronously deploying and testing changes at faster rates. Data Caterer can help alleviate these issues by doing the following:

      1. Generates data with the latest schema changes and production like field values
      2. Run as a job on a daily/regular basis to replicate production traffic or data flows
      3. Validate data to ensure your system runs as expected
      4. Clean up data to avoid build up of generated data

      "},{"location":"use-case/#local-development","title":"Local development","text":"

      Similar to the above, being able to replicate production like data in your local environment can be key to developing more reliable code as you can test directly against data in your local computer. This has a number of benefits including:

      1. Fewer assumptions or ambiguities when the developer codes
      2. Direct feedback loop in local computer rather than waiting for test environment for more reliable test data
      3. No domain expertise required to understand the data
      4. Easy for new developers to be onboarded and developing/testing code for jobs/services
      "},{"location":"use-case/#systemintegration-testing","title":"System/integration testing","text":"

      When working with third-party, external or internal data providers, it can be difficult to have all setup ready to produce reliable data that abides by relationship contracts between each of the systems. You have to rely on these data providers in order for you to run your tests which may not align to their priorities. With Data Caterer, you can generate the same data that they would produce, along with maintaining referential integrity across the data providers, so that you can run your tests without relying on their systems being up and reliable in their corresponding lower environments.

      "},{"location":"use-case/#scenario-testing","title":"Scenario testing","text":"

      If you want to set up particular data scenarios, you can customise the generated data to fit your scenario. Once the data gets generated and is consumed, you can also run validations to ensure your system has consumed the data correctly. These scenarios can be put together from existing tasks or data sources can be enabled/disabled based on your requirement. Built into Data Caterer and controlled via feature flags, is the ability to test edge cases based on the data type of the fields used for data generation (enableEdgeCases flag within <field>.generator.options, see more here).

      "},{"location":"use-case/#data-debugging","title":"Data debugging","text":"

      When data related issues occur in production, it may be difficult to replicate in a lower or local environment. It could be related to specific fields not containing expected results, size of data is too large or missing corresponding referenced data. This becomes key to resolving the issue as you can directly code against the exact data scenario and have confidence that your code changes will fix the problem. Data Caterer can be used to generate the appropriate data in whichever environment you want to test your changes against.

      "},{"location":"use-case/#data-profiling","title":"Data profiling","text":"

      When using Data Caterer with the feature flag enableGeneratePlanAndTasks enabled (see here), metadata relating all the fields defined in the data sources you have configured will be generated via data profiling. You can run this as a standalone job (can disable enableGenerateData) so that you can focus on the profile of the data you are utilising. This can be run against your production data sources to ensure the metadata can be used to accurately generate data in other environments. This is a key feature of Data Caterer as no direct production connections need to be maintained to generate data in other environments (which can lead to serious concerns about data security as seen here).

      "},{"location":"use-case/#schema-gathering","title":"Schema gathering","text":"

      When using Data Caterer with the feature flag enableGeneratePlanAndTasks enabled (see here), all schemas of the data sources defined will be tracked in a common format (as tasks). This data, along with the data profiling metadata, could then feed back into your schema registries to help keep them up to date with your system.

      "},{"location":"get-started/docker/","title":"Run Data Caterer","text":""},{"location":"get-started/docker/#quick-start","title":"Quick start","text":"

      Ensure you have docker installed and running.

      git clone git@github.com:data-catering/data-caterer-example.git\ncd data-caterer-example && ./run.sh\n#check results under docker/sample/report/index.html folder\n
      "},{"location":"get-started/docker/#report","title":"Report","text":"

      Check the report generated under docker/data/custom/report/index.html.

      Sample report can also be seen here

      "},{"location":"get-started/docker/#paid-version-trial","title":"Paid Version Trial","text":"

      30 day trial of the paid version can be accessed via these steps:

      1. Join the Slack Data Catering Slack group here
      2. Get an API_KEY by using slash command /token in the Slack group (will only be visible to you)
      3. git clone git@github.com:data-catering/data-caterer-example.git\ncd data-caterer-example && export DATA_CATERING_API_KEY=<insert api key>\n./run.sh\n

      If you want to check how long your trial has left, you can check back in the Slack group or type /token again.

      "},{"location":"get-started/docker/#guided-tour","title":"Guided tour","text":"

      Check out the starter guide here that will take your through step by step. You can also check the other guides here to see the other possibilities of what Data Caterer can achieve for you.

      "},{"location":"legal/privacy-policy/","title":"Privacy Policy","text":"

      Last updated September 25, 2023

      "},{"location":"legal/privacy-policy/#data-caterer-policy-on-privacy-of-customer-personal-information","title":"Data Caterer Policy on Privacy of Customer Personal Information","text":"

      Peter John Flook is committed to protecting the privacy and security of your personal information obtained by reason of your use of Data Caterer. This policy explains the types of customer personal information we collect, how it is used, and the steps we take to ensure your personal information is handled appropriately.

      "},{"location":"legal/privacy-policy/#who-is-peter-john-flook","title":"Who is Peter John Flook?","text":"

      For purposes of this Privacy Policy, \u201cPeter John Flook\u201d means Peter John Flook, the company developing and providing Data Caterer and related websites and services.

      "},{"location":"legal/privacy-policy/#what-is-personal-information","title":"What is personal information?","text":"

      Personal information is information that refers to an individual specifically and is recorded in any form. Personal information includes such things as age, income, date of birth, ethnic origin and credit records. Information about individuals contained in the following documents is not considered personal information:

      • public telephone directories, where the subscriber can refuse to be listed
      • professional and business directories available to the public
      • public registries and court records
      • other publicly available printed and electronic publications
      "},{"location":"legal/privacy-policy/#we-are-accountable-to-you","title":"We are accountable to you","text":"

      Peter John Flook is responsible for all personal information under its control. Our team is accountable for compliance with these privacy and security principles.

      "},{"location":"legal/privacy-policy/#we-let-you-know-why-we-collect-and-use-your-personal-information-and-get-your-consent","title":"We let you know why we collect and use your personal information and get your consent","text":"

      Peter John Flook identifies the purpose for which your personal information is collected and will be used or disclosed. If that purpose is not listed below we will do this before or at the time the information is actually being collected. You will be deemed to consent to our use of your personal information for the purpose of:

      • communicating with you generally
      • processing your purchases
      • processing and keeping track of transactions and reporting back to you
      • protecting against fraud or error
      • providing product and services requested by you
      • recommending products and services that Peter John Flook believes will be of interest and provide value to you
      • fulfilling any other purpose that would be reasonably apparent to the average person at the time we collect it from you

      Otherwise, Peter John Flook will obtain your express consent (by verbal, written or electronic agreement) to collect, use or disclose your personal information. You can change your consent preferences at any time by contacting Peter John Flook (please refer to the \u201cHow to contact us\u201d section below).

      "},{"location":"legal/privacy-policy/#we-limit-collection-of-your-personal-information","title":"We limit collection of your personal information","text":"

      Peter John Flook collects only the information required to provide products and services to you. Peter John Flook will collect personal information only by clear, fair and lawful means.

      We receive and store any information you enter on our website or give us in any other way. You can choose not to provide certain information, but then you might not be able to take advantage of many of our features.

      Peter John Flook does not receive or store personal content saved to your local device while using Data Caterer.

      We also receive and store certain types of information whenever you interact with us.

      "},{"location":"legal/privacy-policy/#information-provided-to-stripe","title":"Information provided to Stripe","text":"

      All purchases that are made through this site are processed securely and externally by Stripe. Unless you expressly consent otherwise, we do not see or have access to any personal information that you may provide to Stripe, other than information that is required in order to process your order and deliver your purchased items to you (eg, your name, email address and billing/postal address).

      "},{"location":"legal/privacy-policy/#we-limit-disclosure-and-retention-of-your-personal-information","title":"We limit disclosure and retention of your personal information","text":"

      Peter John Flook does not disclose personal information to any organization or person for any reason except the following:

      We employ other companies and individuals to perform functions on our behalf. Examples include fulfilling orders, delivering packages, sending postal mail and e-mail, removing repetitive information from customer lists, analyzing data, providing marketing assistance, processing credit card payments, and providing customer service. They have access to personal information needed to perform their functions, but may not use it for other purposes. We may use service providers located outside of Australia, and, if applicable, your personal information may be processed and stored in other countries and therefore may be subject to disclosure under the laws of those countries. As we continue to develop our business, we might sell or buy stores, subsidiaries, or business units. In such transactions, customer information generally is one of the transferred business assets but remains subject to the promises made in any pre-existing Privacy Notice (unless, of course, the customer consents otherwise). Also, in the unlikely event that Peter John Flook or substantially all of its assets are acquired, customer information of course will be one of the transferred assets. You are deemed to consent to disclosure of your personal information for those purposes. If your personal information is shared with third parties, those third parties are bound by appropriate agreements with Peter John Flook to secure and protect the confidentiality of your personal information.

      Peter John Flook retains your personal information only as long as it is required for our business relationship or as required by federal and provincial laws.

      "},{"location":"legal/privacy-policy/#we-keep-your-personal-information-up-to-date-and-accurate","title":"We keep your personal information up to date and accurate","text":"

      Peter John Flook keeps your personal information up to date, accurate and relevant for its intended use.

      You may request access to the personal information we have on record in order to review and amend the information, as appropriate. In circumstances where your personal information has been provided by a third party, we will refer you to that party (e.g. credit bureaus). To access your personal information, refer to the \u201cHow to contact us\u201d section below.

      "},{"location":"legal/privacy-policy/#the-security-of-your-personal-information-is-a-priority-for-peter-john-flook","title":"The security of your personal information is a priority for Peter John Flook","text":"

      We take steps to safeguard your personal information, regardless of the format in which it is held, including:

      physical security measures such as restricted access facilities and locked filing cabinets electronic security measures for computerized personal information such as password protection, database encryption and personal identification numbers. We work to protect the security of your information during transmission by using \u201cTransport Layer Security\u201d (TLS) protocol. organizational processes such as limiting access to your personal information to a selected group of individuals contractual obligations with third parties who need access to your personal information requiring them to protect and secure your personal information It\u2019s important for you to protect against unauthorized access to your password and your computer. Be sure to sign off when you\u2019ve finished using any shared computer.

      "},{"location":"legal/privacy-policy/#what-about-third-party-advertisers-and-links-to-other-websites","title":"What About Third-Party Advertisers and Links to Other Websites?","text":"

      Our site may include third-party advertising and links to other websites. We do not provide any personally identifiable customer information to these advertisers or third-party websites.

      These third-party websites and advertisers, or Internet advertising companies working on their behalf, sometimes use technology to send (or \u201cserve\u201d) the advertisements that appear on our website directly to your browser. They automatically receive your IP address when this happens. They may also use cookies, JavaScript, web beacons (also known as action tags or single-pixel gifs), and other technologies to measure the effectiveness of their ads and to personalize advertising content. We do not have access to or control over cookies or other features that they may use, and the information practices of these advertisers and third-party websites are not covered by this Privacy Notice. Please contact them directly for more information about their privacy practices. In addition, the Network Advertising Initiative offers useful information about Internet advertising companies (also called \u201cad networks\u201d or \u201cnetwork advertisers\u201d), including information about how to opt-out of their information collection. You can access the Network Advertising Initiative at http://www.networkadvertising.org.

      "},{"location":"legal/privacy-policy/#redirection-to-stripe","title":"Redirection to Stripe","text":"

      In particular, when you submit an order to us, you may be automatically redirected to Stripe in order to complete the required payment. The payment page that is provided by Stripe is not part of this site. As noted above, we are not privy to any of the bank account, credit card or other personal information that you may provide to Stripe, other than information that is required in order to process your order and deliver your purchased items to you (eg, your name, email address and billing/postal address). We recommend that you refer to Stripe\u2019s privacy statement if you would like more information about how Stripe collects and handles your personal information.

      "},{"location":"legal/privacy-policy/#we-are-open-about-our-privacy-and-security-policy","title":"We are open about our privacy and security policy","text":"

      We are committed to providing you with understandable and easily available information about our policy and practices related to management of your personal information. This policy and any related information is available at all times on our website, https://data.catering/about/ under Privacy or on request. To contact us, refer to the \u201cHow to contact us\u201d section below.

      "},{"location":"legal/privacy-policy/#we-provide-access-to-your-personal-information-stored-by-peter-john-flook","title":"We provide access to your personal information stored by Peter John Flook","text":"

      You can request access to your personal information stored by Peter John Flook. To contact us, refer to the \u201cHow to contact us\u201d section below. Upon receiving such a request, Peter John Flook will:

      inform you about what type of personal information we have on record or in our control, how it is used and to whom it may have been disclosed provide you with access to your information so you can review and verify the accuracy and completeness and request changes to the information make any necessary updates to your personal information We respond to your questions, concerns and complaints about privacy Peter John Flook responds in a timely manner to your questions, concerns and complaints about the privacy of your personal information and our privacy policies and procedures.

      "},{"location":"legal/privacy-policy/#how-to-contact-us","title":"How to contact us","text":"
      • by email at peter.flook@data.catering

      Our business changes constantly, and this privacy notice will change also. We may e-mail periodic reminders of our notices and conditions, unless you have instructed us not to, but you should check our website frequently to see recent changes. We are, however, committed to protecting your information and will never materially change our policies and practices to make them less protective of customer information collected in the past without the consent of affected customers.

      "},{"location":"legal/terms-of-service/","title":"Terms and Conditions","text":"

      Last updated: September 25, 2023

      Please read these terms and conditions carefully before using Our Service.

      "},{"location":"legal/terms-of-service/#interpretation-and-definitions","title":"Interpretation and Definitions","text":""},{"location":"legal/terms-of-service/#interpretation","title":"Interpretation","text":"

      The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

      "},{"location":"legal/terms-of-service/#definitions","title":"Definitions","text":"

      For the purposes of these Terms and Conditions:

      • Application means the software program provided by the Company downloaded by You on any electronic device, named Data Caterer
      • Application Store means the digital distribution service operated and developed by Docker Inc. (\u201cDocker\u201d) in which the Application has been downloaded.
      • Affiliate means an entity that controls, is controlled by or is under common control with a party, where \"control\" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.
      • Country refers to: New South Wales, Australia
      • Company (referred to as either \"the Company\", \"We\", \"Us\" or \"Our\" in this Agreement) refers to Peter John Flook ( ABN: 65153160916), 30 Anne William Drive, West Pennant Hills, 2125, NSW, Australia.
      • Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.
      • Service refers to the Application.
      • Terms and Conditions (also referred as \"Terms\") mean these Terms and Conditions that form the entire agreement between You and the Company regarding the use of the Service.
      • Third-party Social Media Service means any services or content (including data, information, products or services) provided by a third party that may be displayed, included or made available by the Service.
      • You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.
      "},{"location":"legal/terms-of-service/#acknowledgment","title":"Acknowledgment","text":"

      These are the Terms and Conditions governing the use of this Service and the agreement that operates between You and the Company. These Terms and Conditions set out the rights and obligations of all users regarding the use of the Service.

      Your access to and use of the Service is conditioned on Your acceptance of and compliance with these Terms and Conditions. These Terms and Conditions apply to all visitors, users and others who access or use the Service.

      By accessing or using the Service You agree to be bound by these Terms and Conditions. If You disagree with any part of these Terms and Conditions then You may not access the Service.

      You represent that you are over the age of 18. The Company does not permit those under 18 to use the Service.

      Your access to and use of the Service is also conditioned on Your acceptance of and compliance with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your personal information when You use the Application or the Website and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our Service.

      "},{"location":"legal/terms-of-service/#links-to-other-websites","title":"Links to Other Websites","text":"

      Our Service may contain links to third-party websites or services that are not owned or controlled by the Company.

      The Company has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party websites or services. You further acknowledge and agree that the Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such websites or services.

      We strongly advise You to read the terms and conditions and privacy policies of any third-party websites or services that You visit.

      "},{"location":"legal/terms-of-service/#termination","title":"Termination","text":"

      We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these Terms and Conditions.

      Upon termination, Your right to use the Service will cease immediately.

      "},{"location":"legal/terms-of-service/#limitation-of-liability","title":"Limitation of Liability","text":"

      Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of these Terms and Your exclusive remedy for all the foregoing shall be limited to the amount actually paid by You through the Service or 100 USD if You haven't purchased anything through the Service.

      To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Service, third-party software and/or third-party hardware used with the Service, or otherwise in connection with any provision of these Terms), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose.

      Some states do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states, each party's liability will be limited to the greatest extent permitted by law.

      "},{"location":"legal/terms-of-service/#as-is-and-as-available-disclaimer","title":"\"AS IS\" and \"AS AVAILABLE\" Disclaimer","text":"

      The Service is provided to You \"AS IS\" and \"AS AVAILABLE\" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its Affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Service, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Service will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected.

      Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Service, or the information, content, and materials or products included thereon; (ii) that the Service will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Service; or (iv) that the Service, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, time-bombs or other harmful components.

      Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law.

      "},{"location":"legal/terms-of-service/#governing-law","title":"Governing Law","text":"

      The laws of the Country, excluding its conflicts of law rules, shall govern this Terms and Your use of the Service. Your use of the Application may also be subject to other local, state, national, or international laws.

      "},{"location":"legal/terms-of-service/#disputes-resolution","title":"Disputes Resolution","text":"

      If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the Company.

      "},{"location":"legal/terms-of-service/#for-european-union-eu-users","title":"For European Union (EU) Users","text":"

      If You are a European Union consumer, you will benefit from any mandatory provisions of the law of the country in which you are resident in.

      "},{"location":"legal/terms-of-service/#united-states-legal-compliance","title":"United States Legal Compliance","text":"

      You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a \"terrorist supporting\" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.

      "},{"location":"legal/terms-of-service/#severability-and-waiver","title":"Severability and Waiver","text":""},{"location":"legal/terms-of-service/#severability","title":"Severability","text":"

      If any provision of these Terms is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect.

      "},{"location":"legal/terms-of-service/#waiver","title":"Waiver","text":"

      Except as provided herein, the failure to exercise a right or to require performance of an obligation under these Terms shall not affect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach.

      "},{"location":"legal/terms-of-service/#translation-interpretation","title":"Translation Interpretation","text":"

      These Terms and Conditions may have been translated if We have made them available to You on our Service. You agree that the original English text shall prevail in the case of a dispute.

      "},{"location":"legal/terms-of-service/#changes-to-these-terms-and-conditions","title":"Changes to These Terms and Conditions","text":"

      We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.

      By continuing to access or use Our Service after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the website and the Service.

      "},{"location":"legal/terms-of-service/#contact-us","title":"Contact Us","text":"

      If you have any questions about these Terms and Conditions, You can contact us:

      • By email: peter.flook@data.catering
      "},{"location":"setup/","title":"Setup","text":"

      All the configurations and customisation related to Data Caterer can be found under here.

      "},{"location":"setup/#guide","title":"Guide","text":"

      If you want a guided tour of using the Java or Scala API, you can follow one of the guides found here.

      "},{"location":"setup/#specific-configuration","title":"Specific Configuration","text":"
      • Configurations - Configurations relating to feature flags, folder pathways, metadata analysis
      • Connections - Explore the data source connections available
      • Generators - Choose and configure the type of generator you want used for fields
      • Validations - How to validate data to ensure your system is performing as expected
      • Foreign Keys - Define links between data elements across data sources
      • Deployment - Deploy Data Caterer as a job to your chosen environment
      • Advanced - Advanced usage of Data Caterer
      "},{"location":"setup/#high-level-run-configurations","title":"High Level Run Configurations","text":""},{"location":"setup/advanced/","title":"Advanced use cases","text":""},{"location":"setup/advanced/#special-data-formats","title":"Special data formats","text":"

      There are many options available for you to use when you have a scenario when data has to be a certain format.

      1. Create expression datafaker
        1. Can be used to create names, addresses, or anything that can be found under here
      2. Create regex
      "},{"location":"setup/advanced/#foreign-keys-across-data-sets","title":"Foreign keys across data sets","text":"

      Details for how you can configure foreign keys can be found here.

      "},{"location":"setup/advanced/#edge-cases","title":"Edge cases","text":"

      For each given data type, there are edge cases which can cause issues when your application processes the data. This can be controlled at a column level by including the following flag in the generator options:

      JavaScalaYAML
      field()\n.name(\"amount\")\n.type(DoubleType.instance())\n.enableEdgeCases(true)\n.edgeCaseProbability(0.1)\n
      field\n.name(\"amount\")\n.`type`(DoubleType)\n.enableEdgeCases(true)\n.edgeCaseProbability(0.1)\n
      fields:\n- name: \"amount\"\ntype: \"double\"\ngenerator:\ntype: \"random\"\noptions:\nenableEdgeCases: \"true\"\nedgeCaseProb: 0.1\n

      If you want to know all the possible edge cases for each data type, can check the documentation here.

      "},{"location":"setup/advanced/#scenario-testing","title":"Scenario testing","text":"

      You can create specific scenarios by adjusting the metadata found in the plan and tasks to your liking. For example, if you had two data sources, a Postgres database and a parquet file, and you wanted to save account data into Postgres and transactions related to those accounts into a parquet file. You can alter the status column in the account data to only generate open accounts and define a foreign key between Postgres and parquet to ensure the same account_id is being used. Then in the parquet task, define 1 to 10 transactions per account_id to be generated.

      Postgres account generation example task Parquet transaction generation example task Plan

      "},{"location":"setup/advanced/#cloud-storage","title":"Cloud storage","text":""},{"location":"setup/advanced/#data-source","title":"Data source","text":"

      If you want to save the file types CSV, JSON, Parquet or ORC into cloud storage, you can do so via adding extra configurations. Below is an example for S3.

      JavaScalaYAML
      var csvTask = csv(\"my_csv\", \"s3a://my-bucket/csv/accounts\")\n.schema(\nfield().name(\"account_id\"),\n...\n);\n\nvar s3Configuration = configuration()\n.runtimeConfig(Map.of(\n\"spark.hadoop.fs.s3a.directory.marker.retention\", \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\", \"true\",\n\"spark.hadoop.fs.defaultFS\", \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\", \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\", \"secret_key\"\n));\n\nexecute(s3Configuration, csvTask);\n
      val csvTask = csv(\"my_csv\", \"s3a://my-bucket/csv/accounts\")\n.schema(\nfield.name(\"account_id\"),\n...\n)\n\nval s3Configuration = configuration\n.runtimeConfig(Map(\n\"spark.hadoop.fs.s3a.directory.marker.retention\" -> \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" -> \"true\",\n\"spark.hadoop.fs.defaultFS\" -> \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" -> \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\" -> \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\" -> \"secret_key\"\n))\n\nexecute(s3Configuration, csvTask)\n
      folders {\ngeneratedPlanAndTaskFolderPath = \"s3a://my-bucket/data-caterer/generated\"\nplanFilePath = \"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\"\ntaskFolderPath = \"s3a://my-bucket/data-caterer/generated/task\"\n}\n\nruntime {\nconfig {\n...\n#S3\n\"spark.hadoop.fs.s3a.directory.marker.retention\" = \"keep\"\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" = \"true\"\n\"spark.hadoop.fs.defaultFS\" = \"s3a://my-bucket\"\n#can change to other credential providers as shown here\n#https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" = \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\"\n\"spark.hadoop.fs.s3a.access.key\" = \"access_key\"\n\"spark.hadoop.fs.s3a.secret.key\" = \"secret_key\"\n}\n}\n
      "},{"location":"setup/advanced/#storing-plantasks","title":"Storing plan/task(s)","text":"

      You can generate and store the plan/task files inside either AWS S3, Azure Blob Storage or Google GCS. This can be controlled via configuration set in the application.conf file where you can set something like the below:

      JavaScalaYAML
      configuration()\n.generatedReportsFolderPath(\"s3a://my-bucket/data-caterer/generated\")\n.planFilePath(\"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\")\n.taskFolderPath(\"s3a://my-bucket/data-caterer/generated/task\")\n.runtimeConfig(Map.of(\n\"spark.hadoop.fs.s3a.directory.marker.retention\", \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\", \"true\",\n\"spark.hadoop.fs.defaultFS\", \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\", \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\", \"secret_key\"\n));\n
      configuration\n.generatedReportsFolderPath(\"s3a://my-bucket/data-caterer/generated\")\n.planFilePath(\"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\")\n.taskFolderPath(\"s3a://my-bucket/data-caterer/generated/task\")\n.runtimeConfig(Map(\n\"spark.hadoop.fs.s3a.directory.marker.retention\" -> \"keep\",\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" -> \"true\",\n\"spark.hadoop.fs.defaultFS\" -> \"s3a://my-bucket\",\n//can change to other credential providers as shown here\n//https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" -> \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\",\n\"spark.hadoop.fs.s3a.access.key\" -> \"access_key\",\n\"spark.hadoop.fs.s3a.secret.key\" -> \"secret_key\"\n))\n
      folders {\ngeneratedPlanAndTaskFolderPath = \"s3a://my-bucket/data-caterer/generated\"\nplanFilePath = \"s3a://my-bucket/data-caterer/generated/plan/customer-create-plan.yaml\"\ntaskFolderPath = \"s3a://my-bucket/data-caterer/generated/task\"\n}\n\nruntime {\nconfig {\n...\n#S3\n\"spark.hadoop.fs.s3a.directory.marker.retention\" = \"keep\"\n\"spark.hadoop.fs.s3a.bucket.all.committer.magic.enabled\" = \"true\"\n\"spark.hadoop.fs.defaultFS\" = \"s3a://my-bucket\"\n#can change to other credential providers as shown here\n#https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html#Changing_Authentication_Providers\n\"spark.hadoop.fs.s3a.aws.credentials.provider\" = \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\"\n\"spark.hadoop.fs.s3a.access.key\" = \"access_key\"\n\"spark.hadoop.fs.s3a.secret.key\" = \"secret_key\"\n}\n}\n
      "},{"location":"setup/configuration/","title":"Configuration","text":"

      A number of configurations can be made and customised within Data Caterer to help control what gets run and/or where any metadata gets saved.

      These configurations are defined from within your Java or Scala class via configuration or for YAML file setup, application.conf file as seen here.

      "},{"location":"setup/configuration/#flags","title":"Flags","text":"

      Flags are used to control which processes are executed when you run Data Caterer.

      Config Default Paid Description enableGenerateData true N Enable/disable data generation enableCount true N Count the number of records generated. Can be disabled to improve performance enableFailOnError true N Whilst saving generated data, if there is an error, it will stop any further data from being generated enableSaveReports true N Enable/disable HTML reports summarising data generated, metadata of data generated (if enableSinkMetadata is enabled) and validation results (if enableValidation is enabled). Sample here enableSinkMetadata true N Run data profiling for the generated data. Shown in HTML reports if enableSaveSinkMetadata is enabled enableValidation false N Run validations as described in plan. Results can be viewed from logs or from HTML report if enableSaveSinkMetadata is enabled. Sample here enableGeneratePlanAndTasks false Y Enable/disable plan and task auto generation based off data source connections enableRecordTracking false Y Enable/disable which data records have been generated for any data source enableDeleteGeneratedRecords false Y Delete all generated records based off record tracking (if enableRecordTracking has been set to true) enableGenerateValidations false Y If enabled, it will generate validations based on the data sources defined. JavaScalaapplication.conf
      configuration()\n.enableGenerateData(true)\n.enableCount(true)\n.enableFailOnError(true)\n.enableSaveReports(true)\n.enableSinkMetadata(true)\n.enableValidation(false)\n.enableGeneratePlanAndTasks(false)\n.enableRecordTracking(false)\n.enableDeleteGeneratedRecords(false)\n.enableGenerateValidations(false);\n
      configuration\n.enableGenerateData(true)\n.enableCount(true)\n.enableFailOnError(true)\n.enableSaveReports(true)\n.enableSinkMetadata(true)\n.enableValidation(false)\n.enableGeneratePlanAndTasks(false)\n.enableRecordTracking(false)\n.enableDeleteGeneratedRecords(false)\n.enableGenerateValidations(false)\n
      flags {\n  enableCount = false\n  enableCount = ${?ENABLE_COUNT}\n  enableGenerateData = true\n  enableGenerateData = ${?ENABLE_GENERATE_DATA}\n  enableFailOnError = true\n  enableFailOnError = ${?ENABLE_FAIL_ON_ERROR}\n  enableGeneratePlanAndTasks = false\n  enableGeneratePlanAndTasks = ${?ENABLE_GENERATE_PLAN_AND_TASKS}\n  enableRecordTracking = false\n  enableRecordTracking = ${?ENABLE_RECORD_TRACKING}\n  enableDeleteGeneratedRecords = false\n  enableDeleteGeneratedRecords = ${?ENABLE_DELETE_GENERATED_RECORDS}\n  enableGenerateValidations = false\n  enableGenerateValidations = ${?ENABLE_GENERATE_VALIDATIONS}\n}\n
      "},{"location":"setup/configuration/#folders","title":"Folders","text":"

      Depending on which flags are enabled, there are folders that get used to save metadata, store HTML reports or track the records generated.

      These folder pathways can be defined as a cloud storage pathway (i.e. s3a://my-bucket/task).

      Config Default Paid Description planFilePath /opt/app/plan/customer-create-plan.yaml N Plan file path to use when generating and/or validating data taskFolderPath /opt/app/task N Task folder path that contains all the task files (can have nested directories) validationFolderPath /opt/app/validation N Validation folder path that contains all the validation files (can have nested directories) generatedReportsFolderPath /opt/app/report N Where HTML reports get generated that contain information about data generated along with any validations performed generatedPlanAndTaskFolderPath /tmp Y Folder path where generated plan and task files will be saved recordTrackingFolderPath /opt/app/record-tracking Y Where record tracking parquet files get saved JavaScalaapplication.conf
      configuration()\n.planFilePath(\"/opt/app/custom/plan/postgres-plan.yaml\")\n.taskFolderPath(\"/opt/app/custom/task\")\n.validationFolderPath(\"/opt/app/custom/validation\")\n.generatedReportsFolderPath(\"/opt/app/custom/report\")\n.generatedPlanAndTaskFolderPath(\"/opt/app/custom/generated\")\n.recordTrackingFolderPath(\"/opt/app/custom/record-tracking\");\n
      configuration\n.planFilePath(\"/opt/app/custom/plan/postgres-plan.yaml\")\n.taskFolderPath(\"/opt/app/custom/task\")\n.validationFolderPath(\"/opt/app/custom/validation\")\n.generatedReportsFolderPath(\"/opt/app/custom/report\")\n.generatedPlanAndTaskFolderPath(\"/opt/app/custom/generated\")\n.recordTrackingFolderPath(\"/opt/app/custom/record-tracking\")\n
      folders {\n  planFilePath = \"/opt/app/custom/plan/postgres-plan.yaml\"\n  planFilePath = ${?PLAN_FILE_PATH}\n  taskFolderPath = \"/opt/app/custom/task\"\n  taskFolderPath = ${?TASK_FOLDER_PATH}\n  validationFolderPath = \"/opt/app/custom/validation\"\n  validationFolderPath = ${?VALIDATION_FOLDER_PATH}\n  generatedReportsFolderPath = \"/opt/app/custom/report\"\n  generatedReportsFolderPath = ${?GENERATED_REPORTS_FOLDER_PATH}\n  generatedPlanAndTaskFolderPath = \"/opt/app/custom/generated\"\n  generatedPlanAndTaskFolderPath = ${?GENERATED_PLAN_AND_TASK_FOLDER_PATH}\n  recordTrackingFolderPath = \"/opt/app/custom/record-tracking\"\n  recordTrackingFolderPath = ${?RECORD_TRACKING_FOLDER_PATH}\n}\n
      "},{"location":"setup/configuration/#metadata","title":"Metadata","text":"

      When metadata gets generated, there are some configurations that can be altered to help with performance or accuracy related issues. Metadata gets generated from two processes: 1) if enableGeneratePlanAndTasks or 2) if enableSinkMetadata are enabled.

      During the generation of plan and tasks, data profiling is used to create the metadata for each of the fields defined in the data source. You may face issues if the number of records in the data source is large as data profiling is an expensive task. Similarly, it can be expensive when analysing the generated data if the number of records generated is large.

      Config Default Paid Description numRecordsFromDataSource 10000 Y Number of records read in from the data source that could be used for data profiling numRecordsForAnalysis 10000 Y Number of records used for data profiling from the records gathered in numRecordsFromDataSource oneOfMinCount 1000 Y Minimum number of records required before considering if a field can be of type oneOf oneOfDistinctCountVsCountThreshold 0.2 Y Threshold ratio to determine if a field is of type oneOf (i.e. a field called status that only contains open or closed. Distinct count = 2, total count = 10, ratio = 2 / 10 = 0.2 therefore marked as oneOf) numGeneratedSamples 10 N Number of sample records from generated data to take. Shown in HTML report JavaScalaapplication.conf
      configuration()\n.numRecordsFromDataSourceForDataProfiling(10000)\n.numRecordsForAnalysisForDataProfiling(10000)\n.oneOfMinCount(1000)\n.oneOfDistinctCountVsCountThreshold(1000)\n.numGeneratedSamples(10);\n
      configuration\n.numRecordsFromDataSourceForDataProfiling(10000)\n.numRecordsForAnalysisForDataProfiling(10000)\n.oneOfMinCount(1000)\n.oneOfDistinctCountVsCountThreshold(1000)\n.numGeneratedSamples(10)\n
      metadata {\n  numRecordsFromDataSource = 10000\n  numRecordsForAnalysis = 10000\n  oneOfMinCount = 1000\n  oneOfDistinctCountVsCountThreshold = 0.2\n  numGeneratedSamples = 10\n}\n
      "},{"location":"setup/configuration/#generation","title":"Generation","text":"

      When generating data, you may have some limitations such as limited CPU or memory, large number of data sources, or data sources prone to failure under load. To help alleviate these issues or speed up performance, you can control the number of records that get generated in each batch.

      Config Default Paid Description numRecordsPerBatch 100000 N Number of records across all data sources to generate per batch numRecordsPerStep N Overrides the count defined in each step with this value if defined (i.e. if set to 1000, for each step, 1000 records will be generated) ScalaScalaapplication.conf
      configuration()\n.numRecordsPerBatch(100000)\n.numRecordsPerStep(1000);\n
      configuration\n.numRecordsPerBatch(100000)\n.numRecordsPerStep(1000)\n
      generation {\n  numRecordsPerBatch = 100000\n  numRecordsPerStep = 1000\n}\n
      "},{"location":"setup/configuration/#runtime","title":"Runtime","text":"

      Given Data Caterer uses Spark as the base framework for data processing, you can configure the job as to your specifications via configuration as seen here.

      JavaScalaapplication.conf
      configuration()\n.master(\"local[*]\")\n.runtimeConfig(Map.of(\"spark.driver.cores\", \"5\"))\n.addRuntimeConfig(\"spark.driver.memory\", \"10g\");\n
      configuration\n.master(\"local[*]\")\n.runtimeConfig(Map(\"spark.driver.cores\" -> \"5\"))\n.addRuntimeConfig(\"spark.driver.memory\" -> \"10g\")\n
      runtime {\n  master = \"local[*]\"\n  master = ${?DATA_CATERER_MASTER}\n  config {\n    \"spark.driver.cores\" = \"5\"\n    \"spark.driver.memory\" = \"10g\"\n  }\n}\n
      "},{"location":"setup/connection/","title":"Data Source Connections","text":"

      Details of all the connection configuration supported can be found in the below subsections for each type of connection.

      These configurations can be done via API or from configuration. Examples of both are shown for each data source below.

      "},{"location":"setup/connection/#supported-data-connections","title":"Supported Data Connections","text":"Data Source Type Data Source Sponsor Database Postgres, MySQL, Cassandra N File CSV, JSON, ORC, Parquet N Messaging Kafka, Solace Y HTTP REST API Y Metadata Marquez, OpenMetadata, OpenAPI/Swagger Y"},{"location":"setup/connection/#api","title":"API","text":"

      All connection details require a name. Depending on the data source, you can define additional options which may be used by the driver or connector for connecting to the data source.

      "},{"location":"setup/connection/#configuration-file","title":"Configuration file","text":"

      All connection details follow the same pattern.

      <connection format> {\n    <connection name> {\n        <key> = <value>\n    }\n}\n

      Overriding configuration

      When defining a configuration value that can be defined by a system property or environment variable at runtime, you can define that via the following:

      url = \"localhost\"\nurl = ${?POSTGRES_URL}\n

      The above defines that if there is a system property or environment variable named POSTGRES_URL, then that value will be used for the url, otherwise, it will default to localhost.

      "},{"location":"setup/connection/#data-sources","title":"Data sources","text":"

      To find examples of a task for each type of data source, please check out this page.

      "},{"location":"setup/connection/#file","title":"File","text":"

      Linked here is a list of generic options that can be included as part of your file data source configuration if required. Links to specific file type configurations can be found below.

      "},{"location":"setup/connection/#csv","title":"CSV","text":"JavaScalaapplication.conf
      csv(\"customer_transactions\", \"/data/customer/transaction\")\n
      csv(\"customer_transactions\", \"/data/customer/transaction\")\n
      csv {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?CSV_PATH}\n  }\n}\n

      Other available configuration for CSV can be found here

      "},{"location":"setup/connection/#json","title":"JSON","text":"JavaScalaapplication.conf
      json(\"customer_transactions\", \"/data/customer/transaction\")\n
      json(\"customer_transactions\", \"/data/customer/transaction\")\n
      json {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?JSON_PATH}\n  }\n}\n

      Other available configuration for JSON can be found here

      "},{"location":"setup/connection/#orc","title":"ORC","text":"JavaScalaapplication.conf
      orc(\"customer_transactions\", \"/data/customer/transaction\")\n
      orc(\"customer_transactions\", \"/data/customer/transaction\")\n
      orc {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?ORC_PATH}\n  }\n}\n

      Other available configuration for ORC can be found here

      "},{"location":"setup/connection/#parquet","title":"Parquet","text":"JavaScalaapplication.conf
      parquet(\"customer_transactions\", \"/data/customer/transaction\")\n
      parquet(\"customer_transactions\", \"/data/customer/transaction\")\n
      parquet {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?PARQUET_PATH}\n  }\n}\n

      Other available configuration for Parquet can be found here

      "},{"location":"setup/connection/#delta-not-supported-yet","title":"Delta (not supported yet)","text":"JavaScalaapplication.conf
      delta(\"customer_transactions\", \"/data/customer/transaction\")\n
      delta(\"customer_transactions\", \"/data/customer/transaction\")\n
      delta {\n  customer_transactions {\n    path = \"/data/customer/transaction\"\n    path = ${?DELTA_PATH}\n  }\n}\n
      "},{"location":"setup/connection/#rmdbs","title":"RMDBS","text":"

      Follows the same configuration used by Spark as found here. Sample can be found below

      JavaScalaapplication.conf
      postgres(\n\"customer_postgres\",                            #name\n\"jdbc:postgresql://localhost:5432/customer\",    #url\n\"postgres\",                                     #username\n\"postgres\"                                      #password\n)\n
      postgres(\n\"customer_postgres\",                            #name\n\"jdbc:postgresql://localhost:5432/customer\",    #url\n\"postgres\",                                     #username\n\"postgres\"                                      #password\n)\n
      jdbc {\n    customer_postgres {\n        url = \"jdbc:postgresql://localhost:5432/customer\"\n        url = ${?POSTGRES_URL}\n        user = \"postgres\"\n        user = ${?POSTGRES_USERNAME}\n        password = \"postgres\"\n        password = ${?POSTGRES_PASSWORD}\n        driver = \"org.postgresql.Driver\"\n    }\n}\n

      Ensure that the user has write permission, so it is able to save the table to the target tables.

      SQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO <user>;\n
      "},{"location":"setup/connection/#postgres","title":"Postgres","text":"

      Can see example API or Config definition for Postgres connection above.

      "},{"location":"setup/connection/#permissions","title":"Permissions","text":"

      Following permissions are required when generating plan and tasks:

      SQL Permission Statements
      GRANT SELECT ON information_schema.tables TO < user >;\nGRANT SELECT ON information_schema.columns TO < user >;\nGRANT SELECT ON information_schema.key_column_usage TO < user >;\nGRANT SELECT ON information_schema.table_constraints TO < user >;\nGRANT SELECT ON information_schema.constraint_column_usage TO < user >;\n
      "},{"location":"setup/connection/#mysql","title":"MySQL","text":"JavaScalaapplication.conf
      mysql(\n\"customer_mysql\",                       #name\n\"jdbc:mysql://localhost:3306/customer\", #url\n\"root\",                                 #username\n\"root\"                                  #password\n)\n
      mysql(\n\"customer_mysql\",                       #name\n\"jdbc:mysql://localhost:3306/customer\", #url\n\"root\",                                 #username\n\"root\"                                  #password\n)\n
      jdbc {\n    customer_mysql {\n        url = \"jdbc:mysql://localhost:3306/customer\"\n        user = \"root\"\n        password = \"root\"\n        driver = \"com.mysql.cj.jdbc.Driver\"\n    }\n}\n
      "},{"location":"setup/connection/#permissions_1","title":"Permissions","text":"

      Following permissions are required when generating plan and tasks:

      SQL Permission Statements
      GRANT SELECT ON information_schema.columns TO < user >;\nGRANT SELECT ON information_schema.statistics TO < user >;\nGRANT SELECT ON information_schema.key_column_usage TO < user >;\n
      "},{"location":"setup/connection/#cassandra","title":"Cassandra","text":"

      Follows same configuration as defined by the Spark Cassandra Connector as found here

      JavaScalaapplication.conf
      cassandra(\n\"customer_cassandra\",   #name\n\"localhost:9042\",       #url\n\"cassandra\",            #username\n\"cassandra\",            #password\nMap.of()                #optional additional connection options\n)\n
      cassandra(\n\"customer_cassandra\",   #name\n\"localhost:9042\",       #url\n\"cassandra\",            #username\n\"cassandra\",            #password\nMap()                #optional additional connection options\n)\n
      org.apache.spark.sql.cassandra {\n    customer_cassandra {\n        spark.cassandra.connection.host = \"localhost\"\n        spark.cassandra.connection.host = ${?CASSANDRA_HOST}\n        spark.cassandra.connection.port = \"9042\"\n        spark.cassandra.connection.port = ${?CASSANDRA_PORT}\n        spark.cassandra.auth.username = \"cassandra\"\n        spark.cassandra.auth.username = ${?CASSANDRA_USERNAME}\n        spark.cassandra.auth.password = \"cassandra\"\n        spark.cassandra.auth.password = ${?CASSANDRA_PASSWORD}\n    }\n}\n
      "},{"location":"setup/connection/#permissions_2","title":"Permissions","text":"

      Ensure that the user has write permission, so it is able to save the table to the target tables.

      CQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO <user>;\n

      Following permissions are required when enabling configuration.enableGeneratePlanAndTasks(true) as it will gather metadata information about tables and columns from the below tables.

      CQL Permission Statements
      GRANT SELECT ON system_schema.tables TO <user>;\nGRANT SELECT ON system_schema.columns TO <user>;\n
      "},{"location":"setup/connection/#kafka","title":"Kafka","text":"

      Define your Kafka bootstrap server to connect and send generated data to corresponding topics. Topic gets set at a step level. Further details can be found here

      JavaScalaapplication.conf
      kafka(\n\"customer_kafka\",   #name\n\"localhost:9092\"    #url\n)\n
      kafka(\n\"customer_kafka\",   #name\n\"localhost:9092\"    #url\n)\n
      kafka {\n    customer_kafka {\n        kafka.bootstrap.servers = \"localhost:9092\"\n        kafka.bootstrap.servers = ${?KAFKA_BOOTSTRAP_SERVERS}\n    }\n}\n

      When defining your schema for pushing data to Kafka, it follows a specific top level schema. An example can be found here . You can define the key, value, headers, partition or topic by following the linked schema.

      "},{"location":"setup/connection/#jms","title":"JMS","text":"

      Uses JNDI lookup to send messages to JMS queue. Ensure that the messaging system you are using has your queue/topic registered via JNDI otherwise a connection cannot be created.

      JavaScalaapplication.conf
      solace(\n\"customer_solace\",                                      #name\n\"smf://localhost:55554\",                                #url\n\"admin\",                                                #username\n\"admin\",                                                #password\n\"default\",                                              #vpn name\n\"/jms/cf/default\",                                      #connection factory\n\"com.solacesystems.jndi.SolJNDIInitialContextFactory\"   #initial context factory\n)\n
      solace(\n\"customer_solace\",                                      #name\n\"smf://localhost:55554\",                                #url\n\"admin\",                                                #username\n\"admin\",                                                #password\n\"default\",                                              #vpn name\n\"/jms/cf/default\",                                      #connection factory\n\"com.solacesystems.jndi.SolJNDIInitialContextFactory\"   #initial context factory\n)\n
      jms {\n    customer_solace {\n        initialContextFactory = \"com.solacesystems.jndi.SolJNDIInitialContextFactory\"\n        connectionFactory = \"/jms/cf/default\"\n        url = \"smf://localhost:55555\"\n        url = ${?SOLACE_URL}\n        user = \"admin\"\n        user = ${?SOLACE_USER}\n        password = \"admin\"\n        password = ${?SOLACE_PASSWORD}\n        vpnName = \"default\"\n        vpnName = ${?SOLACE_VPN}\n    }\n}\n
      "},{"location":"setup/connection/#http","title":"HTTP","text":"

      Define any username and/or password needed for the HTTP requests. The url is defined in the tasks to allow for generated data to be populated in the url.

      JavaScalaapplication.conf
      http(\n\"customer_api\", #name\n\"admin\",        #username\n\"admin\"         #password\n)\n
      http(\n\"customer_api\", #name\n\"admin\",        #username\n\"admin\"         #password\n)\n
      http {\n    customer_api {\n        user = \"admin\"\n        user = ${?HTTP_USER}\n        password = \"admin\"\n        password = ${?HTTP_PASSWORD}\n    }\n}\n
      "},{"location":"setup/deployment/","title":"Deployment","text":"

      Two main ways to deploy and run Data Caterer:

      • Docker
      • Helm
      "},{"location":"setup/deployment/#docker","title":"Docker","text":"

      To package up your class along with the Data Caterer base image, you can follow the Dockerfile that is created for you here.

      Then you can run the following:

      ./gradlew clean build\ndocker build -t <my_image_name>:<my_image_tag> .\n
      "},{"location":"setup/deployment/#helm","title":"Helm","text":"

      Link to sample helm on GitHub here

      Update the configuration to your own data connections and configuration or own image created from above.

      git clone git@github.com:data-catering/data-caterer-example.git\nhelm install data-caterer ./data-caterer-example/helm/data-caterer\n
      "},{"location":"setup/design/","title":"Design","text":"

      This document shows the thought process behind the design of Data Caterer to help give you insights as to how and why it was created to what it is today. Also, this serves as a reference for future design decisions which will get updated here and thus is a living document.

      "},{"location":"setup/design/#motivation","title":"Motivation","text":"

      The main difficulties that I faced as a developer and team lead relating to testing were:

      • Difficulty in testing with multiple data sources, both batch and real time
      • Reliance on other teams for stable environments or domain knowledge
      • Test environments with no reliable or consistent data flows
      • Complex data masking/anonymization solutions
      • Relying on production data (potential privacy and data breach issues)
      • Cost of data production issues can be very high
      • Unknown unknowns staying hidden until problems occur in production
      • Underutilised metadata
      "},{"location":"setup/design/#guiding-principles","title":"Guiding Principles","text":"

      These difficulties helped formed the basis of the principles for which Data Caterer should follow:

      • Data source agnostic: Connect to any batch or real time data sources for data generation or validation
      • Configurable: Run the application the way you want
      • Extensible: Allow for new innovations to seamlessly integrate with Data Caterer
      • Integrate with existing solutions: Utilise existing metadata to make it easy for users to use straight away
      • Secure: No production connections required, metadata based solution
      • Fast: Give developers fast feedback loops to encourage them to thoroughly test data flows
      "},{"location":"setup/design/#high-level-flow","title":"High level flow","text":"
      graph LR\n  subgraph userTasks [User Configuration]\n  dataGen[Data Generation]\n  dataValid[Data Validation]\n  runConf[Runtime Config]\n  end\n\n  subgraph dataProcessor [Processor]\n  dataCaterer[Data Caterer]\n  end\n\n  subgraph existingMetadata [Metadata]\n  metadataService[Metadata Services]\n  metadataDataSource[Data Sources]\n  end\n\n  subgraph output [Output]\n  outputDataSource[Data Sources]\n  report[Report]\n  end\n\n  dataGen --> dataCaterer\n  dataValid --> dataCaterer\n  runConf --> dataCaterer\n  direction TB\n  dataCaterer -.-> metadataService\n  dataCaterer -.-> metadataDataSource\n  direction LR\n  dataCaterer ---> outputDataSource\n  dataCaterer ---> report
      1. User Configuration
        1. Users define data generation, validation and runtime configuration
      2. Processor
        1. Engine will take user configuration to decide how to run
        2. User defined configuration merged with metadata from external sources
      3. Metadata
        1. Automatically retrieve schema, data profiling, relationship or validation rule metadata from data sources or metadata services
      4. Output
        1. Execute data generation and validation tasks on data sources
        2. Generate report summarising outcome
      "},{"location":"setup/foreign-key/","title":"Foreign Keys","text":"

      Foreign keys can be defined to represent the relationships between datasets where values are required to match for particular columns.

      "},{"location":"setup/foreign-key/#single-column","title":"Single column","text":"

      Define a column in one data source to match against another column. Below example shows a postgres data source with two tables, accounts and transactions that have a foreign key for account_id.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\n...\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, \"account_id\",\nList.of(Map.entry(postgresTxn, \"account_id\"))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nval postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\n...\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, \"account_id\",\nList(postgresTxn -> \"account_id\")\n)\n
      ---\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n- name: \"transactions\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"full_name\"\n---\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n\nsinkOptions:\nforeignKeys:\n\"postgres.accounts.account_id\":\n- \"postgres.transactions.account_id\"\n
      "},{"location":"setup/foreign-key/#multiple-columns","title":"Multiple columns","text":"

      You may have a scenario where multiple columns need to be aligned. From the same example, we want account_id and name from accounts to match with account_id and full_name to match in transactions respectively.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\n...\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(postgresTxn, List.of(\"account_id\", \"full_name\")))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nval postgresTxn = postgres(postgresAcc)\n.table(\"public.transactions\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\n...\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, List(\"account_id\", \"name\"),\nList(postgresTxn -> List(\"account_id\", \"full_name\"))\n)\n
      ---\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n- name: \"transactions\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"full_name\"\n---\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n\nsinkOptions:\nforeignKeys:\n\"my_postgres.accounts.account_id,name\":\n- \"my_postgres.transactions.account_id,full_name\"\n
      "},{"location":"setup/foreign-key/#nested-column","title":"Nested column","text":"

      Your schema structure can have nested fields which can also be referenced as foreign keys. But to do so, you need to create a proxy field that gets omitted from the final saved data.

      In the example below, the nested customer_details.name field inside the json task needs to match with name from postgres. A new field in the json called _txn_name is used as a temporary column to facilitate the foreign key definition.

      JavaScalaYAML
      var postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\n...\n);\nvar jsonTask = json(\"my_json\", \"/tmp/json\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").sql(\"_txn_name\"), #nested field will get value from '_txn_name'\n...\n),\nfield().name(\"_txn_name\").omit(true)       #value will not be included in output\n);\n\nplan().addForeignKeyRelationship(\npostgresAcc, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(jsonTask, List.of(\"account_id\", \"_txn_name\")))\n);\n
      val postgresAcc = postgres(\"my_postgres\", \"jdbc:...\")\n.table(\"public.accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\n...\n)\nvar jsonTask = json(\"my_json\", \"/tmp/json\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").sql(\"_txn_name\"), #nested field will get value from '_txn_name'\n...\n), field.name(\"_txn_name\").omit(true)       #value will not be included in output\n)\n\nplan.addForeignKeyRelationship(\npostgresAcc, List(\"account_id\", \"name\"),\nList(jsonTask -> List(\"account_id\", \"_txn_name\"))\n)\n
      ---\n#postgres task yaml\nname: \"postgres_data\"\nsteps:\n- name: \"accounts\"\ntype: \"postgres\"\noptions:\ndbtable: \"account.accounts\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"name\"\n---\n#json task yaml\nname: \"json_data\"\nsteps:\n- name: \"transactions\"\ntype: \"json\"\noptions:\ndbtable: \"account.transactions\"\nschema:\nfields:\n- name: \"account_id\"\n- name: \"_txn_name\"\ngenerator:\noptions:\nomit: true\n- name: \"cusotmer_details\"\nschema:\nfields:\nname: \"name\"\ngenerator:\ntype: \"sql\"\noptions:\nsql: \"_txn_name\"\n\n---\n#plan yaml\nname: \"customer_create_plan\"\ndescription: \"Create customers in JDBC\"\ntasks:\n- name: \"postgres_data\"\ndataSourceName: \"my_postgres\"\n- name: \"json_data\"\ndataSourceName: \"my_json\"\n\nsinkOptions:\nforeignKeys:\n\"my_postgres.accounts.account_id,name\":\n- \"my_json.transactions.account_id,_txn_name\"\n
      "},{"location":"setup/validation/","title":"Validations","text":"

      Validations can be used to run data checks after you have run the data generator or even as a standalone task. A report summarising the success or failure of the validations is produced and can be examined for further investigation.

      • Basic - Basic column level validations
      • Group by/Aggregate - Run aggregates over grouped data, then validate
      • Upstream data source - Ensure record values exist in datasets based on other data sources or data generated
      • [Data Profile (Coming soon)] - Score how close the data profile of generated data is against the target data profile
      "},{"location":"setup/validation/#define-validations","title":"Define Validations","text":"

      Full example validation can be found below. For more details, check out each of the subsections defined further below.

      JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validations(\nvalidation().col(\"amount\").lessThan(100),\nvalidation().col(\"year\").isEqual(2021).errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation().col(\"name\").matches(\"Peter .*\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)\n.validationWait(waitCondition().pause(1));\n\nvar conf = configuration().enableValidation(true);\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validations(\nvalidation.col(\"amount\").lessThan(100),\nvalidation.col(\"year\").isEqual(2021).errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation.col(\"name\").matches(\"Peter .*\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)  .validationWait(waitCondition.pause(1))\n\nval conf = configuration.enableValidation(true)\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"year == 2021\"\nerrorThreshold: 0.1   #equivalent to if error percentage is > 10%, then fail\n- expr: \"REGEXP_LIKE(name, 'Peter .*')\"\nerrorThreshold: 200   #equivalent to if number of errors is > 200, then fail\ndescription: \"Should be lots of Peters\"\nwaitCondition:\npauseInSeconds: 1\n
      "},{"location":"setup/validation/#wait-condition","title":"Wait Condition","text":"

      Once data has been generated, you may want to wait for a certain condition to be met before starting the data validations. This can be via:

      • Pause for seconds
      • When file is available
      • Data exists
      • Webhook
      "},{"location":"setup/validation/#pause","title":"Pause","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().pause(1));\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.pause(1))\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\npauseInSeconds: 1\n
      "},{"location":"setup/validation/#data-exists","title":"Data exists","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWaitDataExists(\"updated_date > DATE('2023-01-01')\");\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWaitDataExists(\"updated_date > DATE('2023-01-01')\")\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\ndataSourceName: \"transactions\"\noptions:\npath: \"/tmp/csv\"\nexpr: \"updated_date > DATE('2023-01-01')\"\n
      "},{"location":"setup/validation/#webhook","title":"Webhook","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"http://localhost:8080/finished\")); //by default, GET request successful when 200 status code\n\n//or\n\nvar csvTxnsWithStatusCodes = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"http://localhost:8080/finished\", \"GET\", 200, 202));  //successful if 200 or 202 status code\n\n//or\n\nvar csvTxnsWithExistingHttpConnection = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().webhook(\"my_http\", \"http://localhost:8080/finished\"));  //use connection configuration from existing 'my_http' connection definition\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"http://localhost:8080/finished\"))  //by default, GET request successful when 200 status code\n\n//or\n\nval csvTxnsWithStatusCodes = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"http://localhost:8080/finished\", \"GET\", 200, 202)) //successful if 200 or 202 status code\n\n//or\n\nval csvTxnsWithExistingHttpConnection = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validationWait(waitCondition.webhook(\"my_http\", \"http://localhost:8080/finished\")) //use connection configuration from existing 'my_http' connection definition\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\nurl: \"http://localhost:8080/finished\" #by default, GET request successful when 200 status code\n\n#or\n\n---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\nurl: \"http://localhost:8080/finished\"\nmethod: \"GET\"\nstatusCodes: [200, 202] #successful if 200 or 202 status code\n\n#or\n\n---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\ndataSourceName: \"my_http\" #use connection configuration from existing 'my_http' connection definition\nurl: \"http://localhost:8080/finished\"\n
      "},{"location":"setup/validation/#file-exists","title":"File exists","text":"JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition().file(\"/tmp/json\"));\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validationWait(waitCondition.file(\"/tmp/json\"))\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nwaitCondition:\npath: \"/tmp/json\"\n
      "},{"location":"setup/validation/#report","title":"Report","text":"

      Once run, it will produce a report like this.

      "},{"location":"setup/generator/count/","title":"Record Count","text":"

      There are options related to controlling the number of records generated that can help in generating the scenarios or data required.

      "},{"location":"setup/generator/count/#record-count_1","title":"Record Count","text":"

      Record count is the simplest as you define the total number of records you require for that particular step. For example, in the below step, it will generate 1000 records for the CSV file

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(1000);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(1000)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\n
      "},{"location":"setup/generator/count/#generated-count","title":"Generated Count","text":"

      As like most things in Data Caterer, the count can be generated based on some metadata. For example, if I wanted to generate between 1000 and 2000 records, I could define that by the below configuration:

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(generator().min(1000).max(2000));\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(generator.min(1000).max(2000))\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\ngenerator:\ntype: \"random\"\noptions:\nmin: 1000\nmax: 2000\n
      "},{"location":"setup/generator/count/#per-column-count","title":"Per Column Count","text":"

      When defining a per column count, this allows you to generate records \"per set of columns\". This means that for a given set of columns, it will generate a particular amount of records per combination of values for those columns.

      One example of this would be when generating transactions relating to a customer, a customer may be defined by columns account_id, name. A number of transactions would be generated per account_id, name.

      You can also use a combination of the above two methods to generate the number of records per column.

      "},{"location":"setup/generator/count/#records","title":"Records","text":"

      When defining a base number of records within the perColumn configuration, it translates to creating (count.records * count.recordsPerColumn) records. This is a fixed number of records that will be generated each time, with no variation between runs.

      In the example below, we have count.records = 1000 and count.recordsPerColumn = 2. Which means that 1000 * 2 = 2000 records will be generated in total.

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount()\n.records(1000)\n.recordsPerColumn(2, \"account_id\", \"name\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount\n.records(1000)\n.recordsPerColumn(2, \"account_id\", \"name\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\nperColumn:\nrecords: 2\ncolumnNames:\n- \"account_id\"\n- \"name\"\n
      "},{"location":"setup/generator/count/#generated","title":"Generated","text":"

      You can also define a generator for the count per column. This can be used in scenarios where you want a variable number of records per set of columns.

      In the example below, it will generate between (count.records * count.perColumnGenerator.generator.min) = (1000 * 1) = 1000 and (count.records * count.perColumnGenerator.generator.max) = (1000 * 2) = 2000 records.

      JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount()\n.records(1000)\n.recordsPerColumnGenerator(generator().min(1).max(2), \"account_id\", \"name\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.count(\ncount\n.records(1000)\n.recordsPerColumnGenerator(generator.min(1).max(2), \"account_id\", \"name\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\ncount:\nrecords: 1000\nperColumn:\ncolumnNames:\n- \"account_id\"\n- \"name\"\ngenerator:\ntype: \"random\"\noptions:\nmin: 1\nmax: 2\n
      "},{"location":"setup/generator/data-generator/","title":"Data Generators","text":""},{"location":"setup/generator/data-generator/#data-types","title":"Data Types","text":"

      Below is a list of all supported data types for generating data:

      Data Type Spark Data Type Options Description string StringType minLen, maxLen, expression, enableNull integer IntegerType min, max, stddev, mean long LongType min, max, stddev, mean short ShortType min, max, stddev, mean decimal(precision, scale) DecimalType(precision, scale) min, max, stddev, mean double DoubleType min, max, stddev, mean float FloatType min, max, stddev, mean date DateType min, max, enableNull timestamp TimestampType min, max, enableNull boolean BooleanType binary BinaryType minLen, maxLen, enableNull byte ByteType array ArrayType arrayMinLen, arrayMaxLen, arrayType _ StructType Implicitly supported when a schema is defined for a field"},{"location":"setup/generator/data-generator/#options","title":"Options","text":""},{"location":"setup/generator/data-generator/#all-data-types","title":"All data types","text":"

      Some options are available to use for all types of data generators. Below is the list along with example and descriptions:

      Option Default Example Description enableEdgeCase false enableEdgeCase: \"true\" Enable/disable generated data to contain edge cases based on the data type. For example, integer data type has edge cases of (Int.MaxValue, Int.MinValue and 0) edgeCaseProbability 0.0 edgeCaseProb: \"0.1\" Probability of generating a random edge case value if enableEdgeCase is true isUnique false isUnique: \"true\" Enable/disable generated data to be unique for that column. Errors will be thrown when it is unable to generate unique data seed seed: \"1\" Defines the random seed for generating data for that particular column. It will override any seed defined at a global level sql sql: \"CASE WHEN amount < 10 THEN true ELSE false END\" Define any SQL statement for generating that columns value. Computation occurs after all non-SQL fields are generated. This means any columns used in the SQL cannot be based on other SQL generated columns. Data type of generated value from SQL needs to match data type defined for the field"},{"location":"setup/generator/data-generator/#string","title":"String","text":"Option Default Example Description minLen 1 minLen: \"2\" Ensures that all generated strings have at least length minLen maxLen 10 maxLen: \"15\" Ensures that all generated strings have at most length maxLen expression expression: \"#{Name.name}\"expression:\"#{Address.city}/#{Demographic.maritalStatus}\" Will generate a string based on the faker expression provided. All possible faker expressions can be found here Expression has to be in format #{<faker expression name>} enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (\"\", \"\\n\", \"\\r\", \"\\t\", \" \", \"\\u0000\", \"\\ufff\", \"\u0130yi g\u00fcnler\", \"\u0421\u043f\u0430\u0441\u0438\u0431\u043e\", \"\u039a\u03b1\u03bb\u03b7\u03bc\u03ad\u03c1\u03b1\", \"\u0635\u0628\u0627\u062d \u0627\u0644\u062e\u064a\u0631\", \" F\u00f6rl\u00e5t\", \"\u4f60\u597d\u5417\", \"Nh\u00e0 v\u1ec7 sinh \u1edf \u0111\u00e2u\", \"\u3053\u3093\u306b\u3061\u306f\", \"\u0928\u092e\u0938\u094d\u0924\u0947\", \"\u0532\u0561\u0580\u0565\u0582\", \"\u0417\u0434\u0440\u0430\u0432\u0435\u0439\u0442\u0435\")

      "},{"location":"setup/generator/data-generator/#sample","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield()\n.name(\"name\")\n.type(StringType.instance())\n.expression(\"#{Name.name}\")\n.enableNull(true)\n.nullProbability(0.1)\n.minLength(4)\n.maxLength(20)\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield\n.name(\"name\")\n.`type`(StringType)\n.expression(\"#{Name.name}\")\n.enableNull(true)\n.nullProbability(0.1)\n.minLength(4)\n.maxLength(20)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\ntype: \"csv\"\noptions:\npath: \"app/src/test/resources/sample/csv/transactions\"\nschema:\nfields:\n- name: \"name\"\ntype: \"string\"\ngenerator:\noptions:\nexpression: \"#{Name.name}\"\nenableNull: true\nnullProb: 0.1\nminLength: 4\nmaxLength: 20\n
      "},{"location":"setup/generator/data-generator/#numeric","title":"Numeric","text":"

      For all the numeric data types, there are 4 options to choose from: min, max and maxValue. Generally speaking, you only need to define one of min or minValue, similarly with max or maxValue. The reason why there are 2 options for each is because of when metadata is automatically gathered, we gather the statistics of the observed min and max values. Also, it will attempt to gather any restriction on the min or max value as defined by the data source (i.e. max value as per database type).

      "},{"location":"setup/generator/data-generator/#integerlongshort","title":"Integer/Long/Short","text":"Option Default Example Description min 0 min: \"2\" Ensures that all generated values are greater than or equal to min max 1000 max: \"25\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data

      Edge cases Integer: (2147483647, -2147483648, 0) Edge cases Long: (9223372036854775807, -9223372036854775808, 0) Edge cases Short: (32767, -32768, 0)

      "},{"location":"setup/generator/data-generator/#sample_1","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"year\").type(IntegerType.instance()).min(2020).max(2023),\nfield().name(\"customer_id\").type(LongType.instance()),\nfield().name(\"customer_group\").type(ShortType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"year\").`type`(IntegerType).min(2020).max(2023),\nfield.name(\"customer_id\").`type`(LongType),\nfield.name(\"customer_group\").`type`(ShortType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"year\"\ntype: \"integer\"\ngenerator:\noptions:\nmin: 2020\nmax: 2023\n- name: \"customer_id\"\ntype: \"long\"\n- name: \"customer_group\"\ntype: \"short\"\n
      "},{"location":"setup/generator/data-generator/#decimal","title":"Decimal","text":"Option Default Example Description min 0 min: \"2\" Ensures that all generated values are greater than or equal to min max 1000 max: \"25\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data numericPrecision 10 precision: \"25\" The maximum number of digits numericScale 0 scale: \"25\" The number of digits on the right side of the decimal point (has to be less than or equal to precision)

      Edge cases Decimal: (9223372036854775807, -9223372036854775808, 0)

      "},{"location":"setup/generator/data-generator/#sample_2","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"balance\").type(DecimalType.instance()).numericPrecision(10).numericScale(5)\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"balance\").`type`(DecimalType).numericPrecision(10).numericScale(5)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"balance\"\ntype: \"decimal\"\ngenerator:\noptions:\nprecision: 10\nscale: 5\n
      "},{"location":"setup/generator/data-generator/#doublefloat","title":"Double/Float","text":"Option Default Example Description min 0.0 min: \"2.1\" Ensures that all generated values are greater than or equal to min max 1000.0 max: \"25.9\" Ensures that all generated values are less than or equal to max stddev 1.0 stddev: \"2.0\" Standard deviation for normal distributed data mean max - min mean: \"5.0\" Mean for normal distributed data

      Edge cases Double: (+infinity, 1.7976931348623157e+308, 4.9e-324, 0.0, -0.0, -1.7976931348623157e+308, -infinity, NaN) Edge cases Float: (+infinity, 3.4028235e+38, 1.4e-45, 0.0, -0.0, -3.4028235e+38, -infinity, NaN)

      "},{"location":"setup/generator/data-generator/#sample_3","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"amount\").type(DoubleType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"amount\").`type`(DoubleType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"amount\"\ntype: \"double\"\n
      "},{"location":"setup/generator/data-generator/#date","title":"Date","text":"Option Default Example Description min now() - 365 days min: \"2023-01-31\" Ensures that all generated values are greater than or equal to min max now() max: \"2023-12-31\" Ensures that all generated values are less than or equal to max enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (0001-01-01, 1582-10-15, 1970-01-01, 9999-12-31) (reference)

      "},{"location":"setup/generator/data-generator/#sample_4","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"created_date\").type(DateType.instance()).min(java.sql.Date.valueOf(\"2020-01-01\"))\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"created_date\").`type`(DateType).min(java.sql.Date.valueOf(\"2020-01-01\"))\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"created_date\"\ntype: \"date\"\ngenerator:\noptions:\nmin: \"2020-01-01\"\n
      "},{"location":"setup/generator/data-generator/#timestamp","title":"Timestamp","text":"Option Default Example Description min now() - 365 days min: \"2023-01-31 23:10:10\" Ensures that all generated values are greater than or equal to min max now() max: \"2023-12-31 23:10:10\" Ensures that all generated values are less than or equal to max enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (0001-01-01 00:00:00, 1582-10-15 23:59:59, 1970-01-01 00:00:00, 9999-12-31 23:59:59)

      "},{"location":"setup/generator/data-generator/#sample_5","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"created_time\").type(TimestampType.instance()).min(java.sql.Timestamp.valueOf(\"2020-01-01 00:00:00\"))\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"created_time\").`type`(TimestampType).min(java.sql.Timestamp.valueOf(\"2020-01-01 00:00:00\"))\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"created_time\"\ntype: \"timestamp\"\ngenerator:\noptions:\nmin: \"2020-01-01 00:00:00\"\n
      "},{"location":"setup/generator/data-generator/#binary","title":"Binary","text":"Option Default Example Description minLen 1 minLen: \"2\" Ensures that all generated array of bytes have at least length minLen maxLen 20 maxLen: \"15\" Ensures that all generated array of bytes have at most length maxLen enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true

      Edge cases: (\"\", \"\\n\", \"\\r\", \"\\t\", \" \", \"\\u0000\", \"\\ufff\", -128, 127)

      "},{"location":"setup/generator/data-generator/#sample_6","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"payload\").type(BinaryType.instance())\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"payload\").`type`(BinaryType)\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"payload\"\ntype: \"binary\"\n
      "},{"location":"setup/generator/data-generator/#array","title":"Array","text":"Option Default Example Description arrayMinLen 0 arrayMinLen: \"2\" Ensures that all generated arrays have at least length arrayMinLen arrayMaxLen 5 arrayMaxLen: \"15\" Ensures that all generated arrays have at most length arrayMaxLen arrayType arrayType: \"double\" Inner data type of the array. Optional when using Java/Scala API. Allows for nested data types to be defined like struct enableNull false enableNull: \"true\" Enable/disable null values being generated nullProbability 0.0 nullProb: \"0.1\" Probability to generate null values if enableNull is true"},{"location":"setup/generator/data-generator/#sample_7","title":"Sample","text":"JavaScalaYAML
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield().name(\"last_5_amounts\").type(ArrayType.instance()).arrayType(\"double\")\n);\n
      csv(\"transactions\", \"app/src/test/resources/sample/csv/transactions\")\n.schema(\nfield.name(\"last_5_amounts\").`type`(ArrayType).arrayType(\"double\")\n)\n
      name: \"csv_file\"\nsteps:\n- name: \"transactions\"\n...\nschema:\nfields:\n- name: \"last_5_amounts\"\ntype: \"array<double>\"\n
      "},{"location":"setup/guide/","title":"Guides","text":"

      Below are a list of guides you can follow to create your data generation for your use case.

      For any of the paid tier guides, you can use the trial version fo the app to try it out. Details on how to get the trial can be found here.

      "},{"location":"setup/guide/#scenarios","title":"Scenarios","text":"
      • First Data Generation - If you are new, this is the place to start
      • Multiple Records Per Column Value - How you can generate multiple records per set of columns
      • Foreign Keys Across Data Sources - Generate matching values across generated data sets
      • Data Validations - Run data validations after generating data
      • Auto Generate From Data Connection - Automatically generating data from just defining data sources
      • Delete Generated Data - Delete the generated data whilst leaving other data
      • Generate Batch and Event Data - Generate matching batch and event data
      "},{"location":"setup/guide/#data-sources","title":"Data Sources","text":"
      • Files (CSV, JSON, ORC, Parquet) - Generate data for popular file formats
      • Postgres - JDBC Postgres tables
      • Cassandra - Cassandra tables
      • Kafka - Kafka topics
      • Solace - Solace messages
      • Marquez - Generate data based on metadata in Marquez
      • OpenMetadata - Generate data based on metadata in OpenMetadata
      • HTTP - HTTP requests
      • Files (Fixed width) - (Soon to document) A variant of CSV but with no separator
      • MySql - (Soon to document) JDBC MySql tables
      "},{"location":"setup/guide/#yaml-files","title":"YAML Files","text":""},{"location":"setup/guide/#base-concept","title":"Base Concept","text":"

      The execution of the data generator is based on the concept of plans and tasks. A plan represent the set of tasks that need to be executed, along with other information that spans across tasks, such as foreign keys between data sources. A task represent the component(s) of a data source and its associated metadata so that it understands what the data should look like and how many steps (sub data sources) there are (i.e. tables in a database, topics in Kafka). Tasks can define one or more steps.

      "},{"location":"setup/guide/#plan","title":"Plan","text":""},{"location":"setup/guide/#foreign-keys","title":"Foreign Keys","text":"

      Define foreign keys across data sources in your plan to ensure generated data can match Link to associated task 1 Link to associated task 2

      "},{"location":"setup/guide/#task","title":"Task","text":"Data Source Type Data Source Sample Task Notes Database Postgres Sample Database MySQL Sample Database Cassandra Sample File CSV Sample File JSON Sample Contains nested schemas and use of SQL for generated values File Parquet Sample Partition by year column Kafka Kafka Sample Specific base schema to be used, define headers, key, value, etc. JMS Solace Sample JSON formatted message HTTP PUT Sample JSON formatted PUT body"},{"location":"setup/guide/#configuration","title":"Configuration","text":"

      Basic configuration

      "},{"location":"setup/guide/#docker-compose","title":"Docker-compose","text":"

      To see how it runs against different data sources, you can run using docker-compose and set DATA_SOURCE like below

      ./gradlew build\ncd docker\nDATA_SOURCE=postgres docker-compose up -d datacaterer\n

      Can set it to one of the following:

      • postgres
      • mysql
      • cassandra
      • solace
      • kafka
      • http
      "},{"location":"setup/guide/data-source/cassandra/","title":"Cassandra","text":"

      Info

      Writing data to Cassandra is a paid feature. Try the free trial here.

      Creating a data generator for Cassandra. You will build a Docker image that will be able to populate data in Cassandra for the tables you configure.

      "},{"location":"setup/guide/data-source/cassandra/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Cassandra
      "},{"location":"setup/guide/data-source/cassandra/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n

      If you already have a Cassandra instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/cassandra/#cassandra-setup","title":"Cassandra Setup","text":"

      Next, let's make sure you have an instance of Cassandra up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d cassandra\n
      "},{"location":"setup/guide/data-source/cassandra/#permissions","title":"Permissions","text":"

      Let's make a new user that has the required permissions needed to push data into the Cassandra tables we want.

      CQL Permission Statements
      GRANT INSERT ON <schema>.<table> TO data_caterer_user;\n

      Following permissions are required when enabling configuration.enableGeneratePlanAndTasks(true) as it will gather metadata information about tables and columns from the below tables.

      CQL Permission Statements
      GRANT SELECT ON system_schema.tables TO data_caterer_user;\nGRANT SELECT ON system_schema.columns TO data_caterer_user;\n
      "},{"location":"setup/guide/data-source/cassandra/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedCassandraJavaPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedCassandraPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedCassandraJavaPlan extends PlanRun {\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n\nclass MyAdvancedCassandraPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/cassandra/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Cassandra.

      JavaScala
      var accountTask = cassandra(\n\"customer_cassandra\",   //name\n\"localhost:9042\",       //url\n\"cassandra\",            //username\n\"cassandra\",            //password\nMap.of()                //optional additional connection options\n)\n

      Additional options such as SSL configuration, etc can be found here.

      val accountTask = cassandra(\n\"customer_cassandra\",   //name\n\"localhost:9042\",       //url\n\"cassandra\",            //username\n\"cassandra\",            //password\nMap()                   //optional additional connection options\n)\n

      Additional options such as SSL configuration, etc can be found here.

      "},{"location":"setup/guide/data-source/cassandra/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the account.accounts and account.account_status_history tables as defined underdocker/data/cql/customer.cql. This table should already be setup for you if you followed this step. We can check if the table is setup already via the following command:

      docker exec docker-cassandraserver-1 cqlsh -e 'describe account.accounts; describe account.account_status_history;'\n

      Here we should see some output that looks like the below. This tells us what schema we need to follow when generating data. We need to define that alongside any metadata that is useful to add constraints on what are possible values the generated data should contain.

      CREATE TABLE account.accounts (\naccount_id text PRIMARY KEY,\n    amount double,\n    created_by text,\n    name text,\n    open_time timestamp,\n    status text\n)...\n\nCREATE TABLE account.account_status_history (\naccount_id text,\n    eod_date date,\n    status text,\n    updated_by text,\n    updated_time timestamp,\n    PRIMARY KEY (account_id, eod_date)\n)...\n

      Trimming the connection details to work with the docker-compose Cassandra, we have a base Cassandra connection to define the table and schema required. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType which corresponds to text in Cassandra.

      JavaScala
      {\nvar accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"created_by\"),\nfield().name(\"name\"),\nfield().name(\"open_time\").type(TimestampType.instance()),\nfield().name(\"status\")\n);\n}\n
      val accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"created_by\"),\nfield.name(\"name\"),\nfield.name(\"open_time\").`type`(TimestampType),\nfield.name(\"status\")\n)\n
      "},{"location":"setup/guide/data-source/cassandra/#field-metadata","title":"Field Metadata","text":"

      We could stop here and generate random data for the accounts table. But wouldn't it be more useful if we produced data that is closer to the structure of the data that would come in production? We can do this by defining various metadata that add guidelines that the data generator will understand when generating data.

      "},{"location":"setup/guide/data-source/cassandra/#account_id","title":"account_id","text":"

      account_id follows a particular pattern that where it starts with ACC and has 8 digits after it. This can be defined via a regex like below. Alongside, we also mention that it is the primary key to prompt ensure that unique values are generated.

      JavaScala
      field().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\n
      field.name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\n
      "},{"location":"setup/guide/data-source/cassandra/#amount","title":"amount","text":"

      amount the numbers shouldn't be too large, so we can define a min and max for the generated numbers to be between 1 and 1000.

      JavaScala
      field().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\n
      field.name(\"amount\").`type`(DoubleType).min(1).max(1000),\n
      "},{"location":"setup/guide/data-source/cassandra/#name","title":"name","text":"

      name is a string that also follows a certain pattern, so we could also define a regex but here we will choose to leverage the DataFaker library and create an expression to generate real looking name. All possible faker expressions can be found here

      JavaScala
      field().name(\"name\").expression(\"#{Name.name}\"),\n
      field.name(\"name\").expression(\"#{Name.name}\"),\n
      "},{"location":"setup/guide/data-source/cassandra/#open_time","title":"open_time","text":"

      open_time is a timestamp that we want to have a value greater than a specific date. We can define a min date by using java.sql.Date like below.

      JavaScala
      field().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      field.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      "},{"location":"setup/guide/data-source/cassandra/#status","title":"status","text":"

      status is a field that can only obtain one of four values, open, closed, suspended or pending.

      JavaScala
      field().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      field.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      "},{"location":"setup/guide/data-source/cassandra/#created_by","title":"created_by","text":"

      created_by is a field that is based on the status field where it follows the logic: if status is open or closed, then it is created_by eod else created_by event. This can be achieved by defining a SQL expression like below.

      JavaScala
      field().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n
      field.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n

      Putting it all the fields together, our class should now look like this.

      JavaScala
      var accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n
      val accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\").primaryKey(true),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n
      "},{"location":"setup/guide/data-source/cassandra/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations. We will also enable the unique check to ensure any unique fields will have unique values generated.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n
      "},{"location":"setup/guide/data-source/cassandra/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the accountTask, we have to call execute . So our full plan run will look like this.

      JavaScala
      public class MyAdvancedCassandraJavaPlan extends PlanRun {\n{\nvar accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").primaryKey(true),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, accountTask);\n}\n}\n
      class MyAdvancedCassandraPlan extends PlanRun {\nval accountTask = cassandra(\"customer_cassandra\", \"host.docker.internal:9042\")\n.table(\"account\", \"accounts\")\n.schema(\nfield.name(\"account_id\").primaryKey(true),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nexecute(config, accountTask)\n}\n
      "},{"location":"setup/guide/data-source/cassandra/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class MyAdvancedCassandraJavaPlan or MyAdvancedCassandraPlan\n#after completing\ndocker exec docker-cassandraserver-1 cqlsh -e 'select count(1) from account.accounts;select * from account.accounts limit 10;'\n

      Your output should look like this.

       count\n-------\n  1000\n\n(1 rows)\n\nWarnings :\nAggregation query used without partition key\n\n\n account_id  | amount    | created_by         | name                   | open_time                       | status\n-------------+-----------+--------------------+------------------------+---------------------------------+-----------\n ACC13554145 | 917.00418 | zb CVvbBTTzitjo5fK |          Jan Sanford I | 2023-06-21 21:50:10.463000+0000 | suspended\n ACC19154140 |  46.99177 |             VH88H9 |       Clyde Bailey PhD | 2023-07-18 11:33:03.675000+0000 |      open\n ACC50587836 |  774.9872 |         GENANwPm t |           Sang Monahan | 2023-03-21 00:16:53.308000+0000 |    closed\n ACC67619387 | 452.86706 |       5msTpcBLStTH |         Jewell Gerlach | 2022-10-18 19:13:07.606000+0000 | suspended\n ACC69889784 |  14.69298 |           WDmOh7NT |          Dale Schulist | 2022-10-25 12:10:52.239000+0000 | suspended\n ACC41977254 |  51.26492 |          J8jAKzvj2 |           Norma Nienow | 2023-08-19 18:54:39.195000+0000 | suspended\n ACC40932912 | 349.68067 |   SLcJgKZdLp5ALMyg | Vincenzo Considine III | 2023-05-16 00:22:45.991000+0000 |    closed\n ACC20642011 | 658.40713 |          clyZRD4fI |  Lannie McLaughlin DDS | 2023-05-11 23:14:30.249000+0000 |      open\n ACC74962085 | 970.98218 |       ZLETTSnj4NpD |          Ima Jerde DVM | 2023-05-07 10:01:56.218000+0000 |   pending\n ACC72848439 | 481.64267 |                 cc |        Kyla Deckow DDS | 2023-08-16 13:28:23.362000+0000 | suspended\n\n(10 rows)\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/data-source/http/","title":"HTTP Source","text":"

      Info

      Generating data based on OpenAPI/Swagger document and pushing to HTTP endpoint is a paid feature. Try the free trial here.

      Creating a data generator based on an OpenAPI/Swagger document.

      "},{"location":"setup/guide/data-source/http/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/http/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/http/#http-setup","title":"HTTP Setup","text":"

      We will be using the http-bin docker image to help simulate a service with HTTP endpoints.

      Start it via:

      cd docker\ndocker-compose up -d http\ndocker ps\n
      "},{"location":"setup/guide/data-source/http/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedHttpJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedHttpPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedHttpJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedHttpPlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/http/#schema","title":"Schema","text":"

      We can point the schema of a data source to a OpenAPI/Swagger document or URL. For this example, we will use the OpenAPI document found under docker/mount/http/petstore.json in the data-caterer-example repo. This is a simplified version of the original OpenAPI spec that can be found here.

      We have kept the following endpoints to test out:

      • GET /pets - get all pets
      • POST /pets - create a new pet
      • GET /pets/{id} - get a pet by id
      • DELETE /pets/{id} - delete a pet by id
      JavaScala
      var httpTask = http(\"my_http\")\n.schema(metadataSource().openApi(\"/opt/app/mount/http/petstore.json\"))\n.count(count().records(2));\n
      val httpTask = http(\"my_http\")\n.schema(metadataSource.openApi(\"/opt/app/mount/http/petstore.json\"))\n.count(count.records(2))\n

      The above defines that the schema will come from an OpenAPI document found on the pathway defined. It will then generate 2 requests per request method and endpoint combination.

      "},{"location":"setup/guide/data-source/http/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\n#after completing\ndocker logs -f docker-http-1\n

      It should look something like this.

      172.21.0.1 [06/Nov/2023:01:06:53 +0000] GET /anything/pets?tags%3DeXQxFUHVja+EYm%26limit%3D33895 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:53 +0000] GET /anything/pets?tags%3DSXaFvAqwYGF%26tags%3DjdNRFONA%26limit%3D40975 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:56 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:06:56 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:00 +0000] GET /anything/pets/kbH8D7rDuq HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:00 +0000] GET /anything/pets/REsa0tnu7dvekGDvxR HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:03 +0000] DELETE /anything/pets/EqrOr1dHFfKUjWb HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:07:03 +0000] DELETE /anything/pets/7WG7JHPaNxP HTTP/1.1 200 Host: host.docker.internal}\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      "},{"location":"setup/guide/data-source/http/#foreign-keys","title":"Foreign keys","text":"

      The four different requests that get sent could have the same id passed across to each of them if we define a foreign key relationship. This will make it more realistic to a real life scenario as pets get created and queried by a particular id value. We note that the id value is first used when a pet is created in the body of the POST request. Then it gets used as a path parameter in the DELETE and GET requests.

      To link them all together, we must follow a particular pattern when referring to request body, query parameter or path parameter columns.

      HTTP Type Column Prefix Example Request Body bodyContent bodyContent.id Path Parameter pathParam pathParamid Query Parameter queryParam queryParamid Header header headerContent_Type

      Also note, that when creating a foreign field definition for a HTTP data source, to refer to a specific endpoint and method, we have to follow the pattern of {http method}{http path}. For example, POST/pets. Let's apply this knowledge to link all the id values together.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\nforeignField(\"my_http\", \"POST/pets\", \"bodyContent.id\"),     //source of foreign key value\nforeignField(\"my_http\", \"DELETE/pets/{id}\", \"pathParamid\"),\nforeignField(\"my_http\", \"GET/pets/{id}\", \"pathParamid\")\n);\n\nexecute(myPlan, conf, httpTask);\n
      val myPlan = plan.addForeignKeyRelationship(\nforeignField(\"my_http\", \"POST/pets\", \"bodyContent.id\"),     //source of foreign key value\nforeignField(\"my_http\", \"DELETE/pets/{id}\", \"pathParamid\"),\nforeignField(\"my_http\", \"GET/pets/{id}\", \"pathParamid\")\n)\n\nexecute(myPlan, conf, httpTask)\n

      Let's test it out by running it again

      ./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\ndocker logs -f docker-http-1\n
      172.21.0.1 [06/Nov/2023:01:33:59 +0000] GET /anything/pets?limit%3D45971 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:00 +0000] GET /anything/pets?limit%3D62015 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:04 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:05 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:09 +0000] DELETE /anything/pets/5e HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:09 +0000] DELETE /anything/pets/IHPm2 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:14 +0000] GET /anything/pets/IHPm2 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:34:14 +0000] GET /anything/pets/5e HTTP/1.1 200 Host: host.docker.internal}\n

      Now we have the same id values being produced across the POST, DELETE and GET requests! What if we knew that the id values should follow a particular pattern?

      "},{"location":"setup/guide/data-source/http/#custom-metadata","title":"Custom metadata","text":"

      So given that we have defined a foreign key where the root of the foreign key values is from the POST request, we can update the metadata of the id column for the POST request and it will proliferate to the other endpoints as well. Given the id column is a nested column as noted in the foreign key, we can alter its metadata via the following:

      JavaScala
      var httpTask = http(\"my_http\")\n.schema(metadataSource().openApi(\"/opt/app/mount/http/petstore.json\"))\n.schema(field().name(\"bodyContent\").schema(field().name(\"id\").regex(\"ID[0-9]{8}\")))\n.count(count().records(2));\n
      val httpTask = http(\"my_http\")\n.schema(metadataSource.openApi(\"/opt/app/mount/http/petstore.json\"))\n.schema(field.name(\"bodyContent\").schema(field.name(\"id\").regex(\"ID[0-9]{8}\")))\n.count(count.records(2))\n

      We first get the column bodyContent, then get the nested schema and get the column id and add metadata stating that id should follow the patter ID[0-9]{8}.

      Let's try run again, and hopefully we should see some proper ID values.

      ./run.sh\n#input class MyAdvancedHttpJavaPlanRun or MyAdvancedHttpPlanRun\ndocker logs -f docker-http-1\n
      172.21.0.1 [06/Nov/2023:01:45:45 +0000] GET /anything/pets?tags%3D10fWnNoDz%26limit%3D66804 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:46 +0000] GET /anything/pets?tags%3DhyO6mI8LZUUpS HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:50 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:51 +0000] POST /anything/pets HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:52 +0000] DELETE /anything/pets/ID55185420 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:52 +0000] DELETE /anything/pets/ID20618951 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:57 +0000] GET /anything/pets/ID55185420 HTTP/1.1 200 Host: host.docker.internal}\n172.21.0.1 [06/Nov/2023:01:45:57 +0000] GET /anything/pets/ID20618951 HTTP/1.1 200 Host: host.docker.internal}\n

      Great! Now we have replicated a production-like flow of HTTP requests.

      "},{"location":"setup/guide/data-source/http/#ordering","title":"Ordering","text":"

      If you wanted to change the ordering of the requests, you can alter the order from within the OpenAPI/Swagger document. This is particularly useful when you want to simulate the same flow that users would take when utilising your application (i.e. create account, query account, update account).

      "},{"location":"setup/guide/data-source/http/#rows-per-second","title":"Rows per second","text":"

      By default, Data Caterer will push requests per method and endpoint at a rate of around 5 requests per second. If you want to alter this value, you can do so via the below configuration. The lowest supported requests per second is 1.

      JavaScala
      import io.github.datacatering.datacaterer.api.model.Constants;\n\n...\nvar httpTask = http(\"my_http\", Map.of(Constants.ROWS_PER_SECOND(), \"1\"))\n...\n
      import io.github.datacatering.datacaterer.api.model.Constants.ROWS_PER_SECOND\n\n...\nval httpTask = http(\"my_http\", options = Map(ROWS_PER_SECOND -> \"1\"))\n...\n

      Check out the full example under AdvancedHttpPlanRun in the example repo.

      "},{"location":"setup/guide/data-source/kafka/","title":"Kafka","text":"

      Info

      Writing data to Kafka is a paid feature. Try the free trial here.

      Creating a data generator for Kafka. You will build a Docker image that will be able to populate data in kafka for the topics you configure.

      "},{"location":"setup/guide/data-source/kafka/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Kafka
      "},{"location":"setup/guide/data-source/kafka/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n

      If you already have a Kafka instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/kafka/#kafka-setup","title":"Kafka Setup","text":"

      Next, let's make sure you have an instance of Kafka up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d kafka\n
      "},{"location":"setup/guide/data-source/kafka/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedKafkaJavaPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedKafkaPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedKafkaJavaPlan extends PlanRun {\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n\nclass MyAdvancedKafkaPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/kafka/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Kafka.

      JavaScala
      var accountTask = kafka(\n\"my_kafka\",       //name\n\"localhost:9092\", //url\nMap.of()          //optional additional connection options\n);\n

      Additional options can be found here.

      val accountTask = kafka(\n\"my_kafka\",       //name\n\"localhost:9092\", //url\nMap()             //optional additional connection options\n)\n

      Additional options can be found here.

      "},{"location":"setup/guide/data-source/kafka/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the account-topic that is already defined underdocker/data/kafka/setup_kafka.sh. This topic should already be setup for you if you followed this step. We can check if the topic is set up already via the following command:

      docker exec docker-kafkaserver-1 kafka-topics --bootstrap-server localhost:9092 --list\n

      Trimming the connection details to work with the docker-compose Kafka, we have a base Kafka connection to define the topic we will publish to. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      {\nvar kafkaTask = kafka(\"my_kafka\", \"kafkaserver:29092\")\n.topic(\"account-topic\")\n.schema(\nfield().name(\"key\").sql(\"content.account_id\"),\nfield().name(\"value\").sql(\"TO_JSON(content)\"),\n//field().name(\"partition\").type(IntegerType.instance()),  can define partition here\nfield().name(\"headers\")\n.type(ArrayType.instance())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n),\nfield().name(\"content\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"year\").type(IntegerType.instance()),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n),\nfield().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n),\nfield().name(\"tmp_year\").sql(\"content.year\").omit(true),\nfield().name(\"tmp_name\").sql(\"content.details.name\").omit(true)\n)\n}\n
      val kafkaTask = kafka(\"my_kafka\", \"kafkaserver:29092\")\n.topic(\"account-topic\")\n.schema(\nfield.name(\"key\").sql(\"content.account_id\"),\nfield.name(\"value\").sql(\"TO_JSON(content)\"),\n//field.name(\"partition\").type(IntegerType),  can define partition here\nfield.name(\"headers\")\n.`type`(ArrayType)\n.sql(\n\"\"\"ARRAY(\n          |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n          |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n          |)\"\"\".stripMargin\n),\nfield.name(\"content\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"year\").`type`(IntegerType).min(2021).max(2023),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n),\nfield.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n),\nfield.name(\"tmp_year\").sql(\"content.year\").omit(true),\nfield.name(\"tmp_name\").sql(\"content.details.name\").omit(true)\n)\n
      "},{"location":"setup/guide/data-source/kafka/#fields","title":"Fields","text":"

      The schema defined for Kafka has a format that needs to be followed as noted above. Specifically, the required fields are: - value

      Whilst, the other fields are optional: - key - partition - headers

      "},{"location":"setup/guide/data-source/kafka/#headers","title":"headers","text":"

      headers follows a particular pattern that where it is of type array<struct<key: string,value: binary>>. To be able to generate data for this data type, we need to use an SQL expression like the one below. You will notice that in the value part, it refers to content.account_id where content is another field defined at the top level of the schema. This allows you to reference other values that have already been generated.

      JavaScala
      field().name(\"headers\")\n.type(ArrayType.instance())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n)\n
      field.name(\"headers\")\n.`type`(ArrayType)\n.sql(\n\"\"\"ARRAY(\n      |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n      |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n      |)\"\"\".stripMargin\n)\n
      "},{"location":"setup/guide/data-source/kafka/#transactions","title":"transactions","text":"

      transactions is an array that contains an inner structure of txn_date and amount. The size of the array generated can be controlled via arrayMinLength and arrayMaxLength.

      JavaScala
      field().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n
      field.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n
      "},{"location":"setup/guide/data-source/kafka/#details","title":"details","text":"

      details is another example of a nested schema structure where it also has a nested structure itself in updated_by. One thing to note here is the first_txn_date field has a reference to the content.transactions array where it will sort the array by txn_date and get the first element.

      JavaScala
      field().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n)\n
      field.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n)\n
      "},{"location":"setup/guide/data-source/kafka/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n
      "},{"location":"setup/guide/data-source/kafka/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the kafkaTask, we have to call execute .

      "},{"location":"setup/guide/data-source/kafka/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class AdvancedKafkaJavaPlanRun or AdvancedKafkaPlanRun\n#after completing\ndocker exec docker-kafkaserver-1 kafka-console-consumer --bootstrap-server localhost:9092 --topic account-topic --from-beginning\n

      Your output should look like this.

      {\"account_id\":\"ACC56292178\",\"year\":2022,\"amount\":18338.627721151555,\"details\":{\"name\":\"Isaias Reilly\",\"first_txn_date\":\"2021-01-22\",\"updated_by\":{\"user\":\"FgYXbKDWdhHVc3\",\"time\":\"2022-12-30T13:49:07.309Z\"}},\"transactions\":[{\"txn_date\":\"2021-01-22\",\"amount\":30556.52125487579},{\"txn_date\":\"2021-10-29\",\"amount\":39372.302259554635},{\"txn_date\":\"2021-10-29\",\"amount\":61887.31389495968}]}\n{\"account_id\":\"ACC37729457\",\"year\":2022,\"amount\":96885.31758764731,\"details\":{\"name\":\"Randell Witting\",\"first_txn_date\":\"2021-06-30\",\"updated_by\":{\"user\":\"HCKYEBHN8AJ3TB\",\"time\":\"2022-12-02T02:05:01.144Z\"}},\"transactions\":[{\"txn_date\":\"2021-06-30\",\"amount\":98042.09647765031},{\"txn_date\":\"2021-10-06\",\"amount\":41191.43564742036},{\"txn_date\":\"2021-11-16\",\"amount\":78852.08184809204},{\"txn_date\":\"2021-10-09\",\"amount\":13747.157653571106}]}\n{\"account_id\":\"ACC23127317\",\"year\":2023,\"amount\":81164.49304198896,\"details\":{\"name\":\"Jed Wisozk\",\"updated_by\":{\"user\":\"9MBFZZ\",\"time\":\"2023-07-12T05:56:52.397Z\"}},\"transactions\":[]}\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/","title":"Metadata Source","text":"

      Info

      Generating data based on an external metadata source is a paid feature. Try the free trial here.

      Creating a data generator for Postgres tables and CSV file based on metadata stored in Marquez ( follows OpenLineage API).

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#marquez-setup","title":"Marquez Setup","text":"

      You can follow the README found here to help with setting up Marquez in your local environment. This comes with an instance of Postgres which we will also be using as a data store for generated data.

      The command that was run for this example to help with setup of dummy data was ./docker/up.sh -a 5001 -m 5002 --seed.

      Check that the following url shows some data like below once you click on food_delivery from the ns drop down in the top right corner.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#postgres-setup","title":"Postgres Setup","text":"

      Since we will also be using the Marquez Postgres instance as a data source, we will set up a separate database to store the generated data in via:

      docker exec marquez-db psql -Upostgres -c 'CREATE DATABASE food_delivery'\n
      "},{"location":"setup/guide/data-source/marquez-metadata-source/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedMetadataSourceJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedMetadataSourceJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedMetadataSourcePlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#schema","title":"Schema","text":"

      We can point the schema of a data source to our Marquez instance. For the Postgres data source, we will point to a namespace, which in Marquez or OpenLineage, represents a set of datasets. For the CSV data source, we will point to a specific namespace and dataset.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#single-schema","title":"Single Schema","text":"JavaScala
      var csvTask = csv(\"my_csv\", \"/tmp/data/csv\", Map.of(\"saveMode\", \"overwrite\", \"header\", \"true\"))\n.schema(metadataSource().marquez(\"http://localhost:5001\", \"food_delivery\", \"public.delivery_7_days\"))\n.count(count().records(10));\n
      val csvTask = csv(\"my_csv\", \"/tmp/data/csv\", Map(\"saveMode\" -> \"overwrite\", \"header\" -> \"true\"))\n.schema(metadataSource.marquez(\"http://localhost:5001\", \"food_delivery\", \"public.delivery_7_days\"))\n.count(count.records(10))\n

      The above defines that the schema will come from Marquez, which is a type of metadata source that contains information about schemas. Specifically, it points to the food_delivery namespace and public.categories dataset to retrieve the schema information from.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#multiple-schemas","title":"Multiple Schemas","text":"JavaScala
      var postgresTask = postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/food_delivery\", \"postgres\", \"password\", Map.of())\n.schema(metadataSource().marquez(\"http://host.docker.internal:5001\", \"food_delivery\"))\n.count(count().records(10));\n
      val postgresTask = postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/food_delivery\", \"postgres\", \"password\")\n.schema(metadataSource.marquez(\"http://host.docker.internal:5001\", \"food_delivery\"))\n.count(count.records(10))\n

      We now have pointed this Postgres instance to produce multiple schemas that are defined under the food_delivery namespace. Also note that we are using database food_delivery in Postgres to push our generated data to, and we have set the number of records per sub data source (in this case, per table) to be 10.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\n#after completing\ndocker exec marquez-db psql -Upostgres -d food_delivery -c 'SELECT * FROM public.delivery_7_days'\n

      It should look something like this.

       order_id |     order_placed_on     |   order_dispatched_on   |   order_delivered_on    |         customer_email         |                     customer_address                     | menu_id | restaurant_id |                        restaurant_address\n   | menu_item_id | category_id | discount_id | city_id | driver_id\n----------+-------------------------+-------------------------+-------------------------+--------------------------------+----------------------------------------------------------+---------+---------------+---------------------------------------------------------------\n---+--------------+-------------+-------------+---------+-----------\n    38736 | 2023-02-05 06:05:23.755 | 2023-09-08 04:29:10.878 | 2023-09-03 23:58:34.285 | april.skiles@hotmail.com       | 5018 Lang Dam, Gaylordfurt, MO 35172                     |   59841 |         30971 | Suite 439 51366 Bartoletti Plains, West Lashawndamouth, CA 242\n42 |        55697 |       36370 |       21574 |   88022 |     16569\n4376 | 2022-12-19 14:39:53.442 | 2023-08-30 07:40:06.948 | 2023-03-15 20:38:26.11  | adelina.balistreri@hotmail.com | Apt. 340 9146 Novella Motorway, East Troyhaven, UT 34773 |   66195 |         42765 | Suite 670 8956 Rob Fork, Rennershire, CA 04524\n|        26516 |       81335 |       87615 |   27433 |     45649\n11083 | 2022-10-30 12:46:38.692 | 2023-06-02 13:05:52.493 | 2022-11-27 18:38:07.873 | johnny.gleason@gmail.com       | Apt. 385 99701 Lemke Place, New Irvin, RI 73305          |   66427 |         44438 | 1309 Danny Cape, Weimanntown, AL 15865\n|        41686 |       36508 |       34498 |   24191 |     92405\n58759 | 2023-07-26 14:32:30.883 | 2022-12-25 11:04:08.561 | 2023-04-21 17:43:05.86  | isabelle.ohara@hotmail.com     | 2225 Evie Lane, South Ardella, SD 90805                  |   27106 |         25287 | Suite 678 3731 Dovie Park, Port Luigi, ID 08250\n|        94205 |       66207 |       81051 |   52553 |     27483\n

      You can also try query some other tables. Let's also check what is in the CSV file.

      $ head docker/sample/csv/part-0000*\nmenu_item_id,category_id,discount_id,city_id,driver_id,order_id,order_placed_on,order_dispatched_on,order_delivered_on,customer_email,customer_address,menu_id,restaurant_id,restaurant_address\n72248,37098,80135,45888,5036,11090,2023-09-20T05:33:08.036+08:00,2023-05-16T23:10:57.119+08:00,2023-05-01T22:02:23.272+08:00,demetrice.rohan@hotmail.com,\"406 Harmony Rue, Wisozkburgh, MD 12282\",33762,9042,\"Apt. 751 0796 Ellan Flats, Lake Chetville, WI 81957\"\n41644,40029,48565,83373,89919,58359,2023-04-18T06:28:26.194+08:00,2022-10-15T18:17:48.998+08:00,2023-02-06T17:02:04.104+08:00,joannie.okuneva@yahoo.com,\"Suite 889 022 Susan Lane, Zemlakport, OR 56996\",27467,6216,\"Suite 016 286 Derick Grove, Dooleytown, NY 14664\"\n49299,53699,79675,40821,61764,72234,2023-07-16T21:33:48.739+08:00,2023-02-14T21:23:10.265+08:00,2023-09-18T02:08:51.433+08:00,ina.heller@yahoo.com,\"Suite 600 86844 Heller Island, New Celestinestad, DE 42622\",48002,12462,\"5418 Okuneva Mountain, East Blairchester, MN 04060\"\n83197,86141,11085,29944,81164,65382,2023-01-20T06:08:25.981+08:00,2023-01-11T13:24:32.968+08:00,2023-09-09T02:30:16.890+08:00,lakisha.bashirian@yahoo.com,\"Suite 938 534 Theodore Lock, Port Caitlynland, LA 67308\",69109,47727,\"4464 Stewart Tunnel, Marguritemouth, AR 56791\"\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      What if we wanted the same records in Postgres public.delivery_7_days to also show up in the CSV file? That's where we can use a foreign key definition.

      "},{"location":"setup/guide/data-source/marquez-metadata-source/#foreign-key","title":"Foreign Key","text":"

      We can take a look at the report (under docker/sample/report/index.html) to see what we need to do to create the foreign key. From the overview, you should see under Tasks there is a my_postgres task which has food_delivery_public.delivery_7_days as a step. Click on the link for food_delivery_public.delivery_7_days and it will take us to a page where we can find out about the columns used in this table. Click on the Fields button on the far right to see.

      We can copy all of a subset of fields that we want matched across the CSV file and Postgres. For this example, we will take all the fields.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\npostgresTask, List.of(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList.of(Map.entry(csvTask, List.of(\"account_number\", \"year\", \"name\", \"payload\")))\n);\n\nvar conf = ...\n\nexecute(myPlan, conf, postgresTask, csvTask);\n
      val foreignCols = List(\"order_id\", \"order_placed_on\", \"order_dispatched_on\", \"order_delivered_on\", \"customer_email\",\n\"customer_address\", \"menu_id\", \"restaurant_id\", \"restaurant_address\", \"menu_item_id\", \"category_id\", \"discount_id\",\n\"city_id\", \"driver_id\")\n\nval myPlan = plan.addForeignKeyRelationships(\ncsvTask, foreignCols,\nList(foreignField(postgresTask, \"food_delivery_public.delivery_7_days\", foreignCols))\n)\n\nval conf = ...\n\nexecute(myPlan, conf, postgresTask, csvTask)\n

      Notice how we have defined the csvTask and foreignCols as the main foreign key but for postgresTask, we had to define it as a foreignField. This is because postgresTask has multiple tables within it, and we only want to define our foreign key with respect to the public.delivery_7_days table. We use the step name (can be seen from the report) to specify the table to target.

      To test this out, we will truncate the public.delivery_7_days table in Postgres first, and then try run again.

      docker exec marquez-db psql -Upostgres -d food_delivery -c 'TRUNCATE public.delivery_7_days'\n./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\ndocker exec marquez-db psql -Upostgres -d food_delivery -c 'SELECT * FROM public.delivery_7_days'\n
       order_id |     order_placed_on     |   order_dispatched_on   |   order_delivered_on    |        customer_email        |\ncustomer_address                     | menu_id | restaurant_id |                   restaurant_address                   | menu\n_item_id | category_id | discount_id | city_id | driver_id\n----------+-------------------------+-------------------------+-------------------------+------------------------------+-------------\n--------------------------------------------+---------+---------------+--------------------------------------------------------+-----\n---------+-------------+-------------+---------+-----------\n    53333 | 2022-10-15 08:40:23.394 | 2023-01-23 09:42:48.397 | 2023-08-12 08:50:52.397 | normand.aufderhar@gmail.com  | Apt. 036 449\n27 Wilderman Forge, Marvinchester, CT 15952 |   40412 |         70130 | Suite 146 98176 Schaden Village, Grahammouth, SD 12354 |\n90141 |       44210 |       83966 |   78614 |     77449\n

      Let's grab the first email from the Postgres table and check whether the same record exists in the CSV file.

      $ cat docker/sample/csv/part-0000* | grep normand.aufderhar\n90141,44210,83966,78614,77449,53333,2022-10-15T08:40:23.394+08:00,2023-01-23T09:42:48.397+08:00,2023-08-12T08:50:52.397+08:00,normand.aufderhar@gmail.com,\"Apt. 036 44927 Wilderman Forge, Marvinchester, CT 15952\",40412,70130,\"Suite 146 98176 Schaden Village, Grahammouth, SD 12354\"\n

      Great! Now we have the ability to get schema information from an external source, add our own foreign keys and generate data.

      Check out the full example under AdvancedMetadataSourcePlanRun in the example repo.

      "},{"location":"setup/guide/data-source/open-metadata-source/","title":"OpenMetadata Source","text":"

      Info

      Generating data based on an external metadata source is a paid feature. Try the free trial here.

      Creating a data generator for a JSON file based on metadata stored in OpenMetadata.

      "},{"location":"setup/guide/data-source/open-metadata-source/#requirements","title":"Requirements","text":"
      • 10 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/data-source/open-metadata-source/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/data-source/open-metadata-source/#openmetadata-setup","title":"OpenMetadata Setup","text":"

      You can follow the local docker setup found here to help with setting up OpenMetadata in your local environment.

      If that page becomes outdated or the link doesn't work, below are the commands I used to run it:

      mkdir openmetadata-docker && cd openmetadata-docker\ncurl -sL https://github.com/open-metadata/OpenMetadata/releases/download/1.2.0-release/docker-compose.yml > docker-compose.yml\ndocker compose -f docker-compose.yml up --detach\n

      Check that the following url works and login with admin:admin. Then you should see some data like below:

      "},{"location":"setup/guide/data-source/open-metadata-source/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedOpenMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedOpenMetadataSourceJavaPlanRun extends PlanRun {\n{\nvar conf = configuration().enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedOpenMetadataSourcePlanRun extends PlanRun {\nval conf = configuration.enableGeneratePlanAndTasks(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n}\n

      We will enable generate plan and tasks so that we can read from external sources for metadata and save the reports under a folder we can easily access.

      "},{"location":"setup/guide/data-source/open-metadata-source/#schema","title":"Schema","text":"

      We can point the schema of a data source to our OpenMetadata instance. We will use a JSON data source so that we can show how nested data types are handled and how we could customise it.

      "},{"location":"setup/guide/data-source/open-metadata-source/#single-schema","title":"Single Schema","text":"JavaScala
      import io.github.datacatering.datacaterer.api.model.Constants;\n...\n\nvar jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map.of(\"saveMode\", \"overwrite\"))\n.schema(metadataSource().openMetadataJava(\n\"http://localhost:8585/api\",                                                              //url\nConstants.OPEN_METADATA_AUTH_TYPE_OPEN_METADATA(),                                        //auth type\nMap.of(                                                                                   //additional options (including auth options)\nConstants.OPEN_METADATA_JWT_TOKEN(), \"abc123\",                                        //get from settings/bots/ingestion-bot\nConstants.OPEN_METADATA_TABLE_FQN(), \"sample_data.ecommerce_db.shopify.raw_customer\"  //table fully qualified name\n)\n))\n.count(count().records(10));\n
      import io.github.datacatering.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE}\n...\n\nval jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map(\"saveMode\" -> \"overwrite\"))\n.schema(metadataSource.openMetadata(\n\"http://localhost:8585/api\",                                                  //url\nOPEN_METADATA_AUTH_TYPE_OPEN_METADATA,                                        //auth type\nMap(                                                                          //additional options (including auth options)\nOPEN_METADATA_JWT_TOKEN -> \"abc123\",                                        //get from settings/bots/ingestion-bot\nOPEN_METADATA_TABLE_FQN -> \"sample_data.ecommerce_db.shopify.raw_customer\"  //table fully qualified name\n)\n))\n.count(count.records(10))\n

      The above defines that the schema will come from OpenMetadata, which is a type of metadata source that contains information about schemas. Specifically, it points to the sample_data.ecommerce_db.shopify.raw_customer table. You can check out the schema here to see what it looks like.

      "},{"location":"setup/guide/data-source/open-metadata-source/#run","title":"Run","text":"

      Let's try run and see what happens.

      cd ..\n./run.sh\n#input class MyAdvancedOpenMetadataSourceJavaPlanRun or MyAdvancedOpenMetadataSourcePlanRun\n#after completing\ncat docker/sample/json/part-00000-*\n

      It should look something like this.

      {\n\"comments\": \"Mh6jqpD5e4M\",\n\"creditcard\": \"6771839575926717\",\n\"membership\": \"Za3wCQUl9E  EJj712\",\n\"orders\": [\n{\n\"product_id\": \"Aa6NG0hxfHVq\",\n\"price\": 16139,\n\"onsale\": false,\n\"tax\": 58134,\n\"weight\": 40734,\n\"others\": 45813,\n\"vendor\": \"Kh\"\n},\n{\n\"product_id\": \"zbHBY \",\n\"price\": 17903,\n\"onsale\": false,\n\"tax\": 39526,\n\"weight\": 9346,\n\"others\": 52035,\n\"vendor\": \"jbkbnXAa\"\n},\n{\n\"product_id\": \"5qs3gakppd7Nw5\",\n\"price\": 48731,\n\"onsale\": true,\n\"tax\": 81105,\n\"weight\": 2004,\n\"others\": 20465,\n\"vendor\": \"nozCDMSXRPH Ev\"\n},\n{\n\"product_id\": \"CA6h17ANRwvb\",\n\"price\": 62102,\n\"onsale\": true,\n\"tax\": 96601,\n\"weight\": 78849,\n\"others\": 79453,\n\"vendor\": \" ihVXEJz7E2EFS\"\n}\n],\n\"platform\": \"GLt9\",\n\"preference\": {\n\"key\": \"nmPmsPjg C\",\n\"value\": true\n},\n\"shipping_address\": [\n{\n\"name\": \"Loren Bechtelar\",\n\"street_address\": \"Suite 526 293 Rohan Road, Wunschshire, NE 25532\",\n\"city\": \"South Norrisland\",\n\"postcode\": \"56863\"\n}\n],\n\"shipping_date\": \"2022-11-03\",\n\"transaction_date\": \"2023-02-01\",\n\"customer\": {\n\"username\": \"lance.murphy\",\n\"name\": \"Zane Brakus DVM\",\n\"sex\": \"7HcAaPiO\",\n\"address\": \"594 Loida Haven, Gilland, MA 26071\",\n\"mail\": \"Un3fhbvK2rEbenIYdnq\",\n\"birthdate\": \"2023-01-31\"\n}\n}\n

      Looks like we have some data now. But we can do better and add some enhancements to it.

      "},{"location":"setup/guide/data-source/open-metadata-source/#custom-metadata","title":"Custom metadata","text":"

      We can see from the data generated, that it isn't quite what we want. The metadata is not sufficient for us to produce production-like data yet. Let's try to add some enhancements to it.

      Let's make the platform field a choice field that can only be a set of certain values and the nested field customer.sex is also from a predefined set of values.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map.of(\"saveMode\", \"overwrite\"))\n.schema(\nmetadata...\n))\n.schema(\nfield().name(\"platform\").oneOf(\"website\", \"mobile\"),\nfield().name(\"customer\").schema(field().name(\"sex\").oneOf(\"M\", \"F\", \"O\"))\n)\n.count(count().records(10));\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\", Map(\"saveMode\" -> \"overwrite\"))\n.schema(\nmetadata...\n))\n.schema(\nfield.name(\"platform\").oneOf(\"website\", \"mobile\"),\nfield.name(\"customer\").schema(field.name(\"sex\").oneOf(\"M\", \"F\", \"O\"))\n)\n.count(count.records(10))\n

      Let's test it out by running it again

      ./run.sh\n#input class MyAdvancedMetadataSourceJavaPlanRun or MyAdvancedMetadataSourcePlanRun\ncat docker/sample/json/part-00000-*\n
      {\n\"comments\": \"vqbPUm\",\n\"creditcard\": \"6304867705548636\",\n\"membership\": \"GZ1xOnpZSUOKN\",\n\"orders\": [\n{\n\"product_id\": \"rgOokDAv\",\n\"price\": 77367,\n\"onsale\": false,\n\"tax\": 61742,\n\"weight\": 87855,\n\"others\": 26857,\n\"vendor\": \"04XHR64ImMr9T\"\n}\n],\n\"platform\": \"mobile\",\n\"preference\": {\n\"key\": \"IB5vNdWka\",\n\"value\": true\n},\n\"shipping_address\": [\n{\n\"name\": \"Isiah Bins\",\n\"street_address\": \"36512 Ross Spurs, Hillhaven, IA 18760\",\n\"city\": \"Averymouth\",\n\"postcode\": \"75818\"\n},\n{\n\"name\": \"Scott Prohaska\",\n\"street_address\": \"26573 Haley Ports, Dariusland, MS 90642\",\n\"city\": \"Ashantimouth\",\n\"postcode\": \"31792\"\n},\n{\n\"name\": \"Rudolf Stamm\",\n\"street_address\": \"Suite 878 0516 Danica Path, New Christiaport, ID 10525\",\n\"city\": \"Doreathaport\",\n\"postcode\": \"62497\"\n}\n],\n\"shipping_date\": \"2023-08-24\",\n\"transaction_date\": \"2023-02-01\",\n\"customer\": {\n\"username\": \"jolie.cremin\",\n\"name\": \"Fay Klein\",\n\"sex\": \"O\",\n\"address\": \"Apt. 174 5084 Volkman Creek, Hillborough, PA 61959\",\n\"mail\": \"BiTmzb7\",\n\"birthdate\": \"2023-04-07\"\n}\n}\n

      Great! Now we have the ability to get schema information from an external source, add our own metadata and generate data.

      "},{"location":"setup/guide/data-source/open-metadata-source/#data-validation","title":"Data validation","text":"

      Another aspect of OpenMetadata that can be leveraged is the definition of data quality rules. These rules can be incorporated into your Data Caterer job as well by enabling data validations via enableGenerateValidations in configuration.

      JavaScala
      var conf = configuration().enableGeneratePlanAndTasks(true)\n.enableGenerateValidations(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(conf, jsonTask);\n
      val conf = configuration.enableGeneratePlanAndTasks(true)\n.enableGenerateValidations(true)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(conf, jsonTask)\n

      Check out the full example under AdvancedOpenMetadataSourcePlanRun in the example repo.

      "},{"location":"setup/guide/data-source/solace/","title":"Solace","text":"

      Info

      Writing data to Solace is a paid feature. Try the free trial here.

      Creating a data generator for Solace. You will build a Docker image that will be able to populate data in Solace for the queues/topics you configure.

      "},{"location":"setup/guide/data-source/solace/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      • Solace
      "},{"location":"setup/guide/data-source/solace/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n

      If you already have a Solace instance running, you can skip to this step.

      "},{"location":"setup/guide/data-source/solace/#solace-setup","title":"Solace Setup","text":"

      Next, let's make sure you have an instance of Solace up and running in your local environment. This will make it easy for us to iterate and check our changes.

      cd docker\ndocker-compose up -d solace\n

      Open up localhost:8080 and login with admin:admin and check there is the default VPN like below. Notice there is 2 queues/topics created. If you do not see 2 created, try to run the script found under docker/data/solace/setup_solace.sh and change the host to localhost.

      "},{"location":"setup/guide/data-source/solace/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedSolaceJavaPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedSolacePlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n\npublic class MyAdvancedSolaceJavaPlan extends PlanRun {\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n\nclass MyAdvancedSolacePlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/data-source/solace/#connection-configuration","title":"Connection Configuration","text":"

      Within our class, we can start by defining the connection properties to connect to Solace.

      JavaScala
      var accountTask = solace(\n\"my_solace\",                        //name\n\"smf://host.docker.internal:55554\", //url\nMap.of()                            //optional additional connection options\n);\n

      Additional connection options can be found here.

      val accountTask = solace(\n\"my_solace\",                        //name\n\"smf://host.docker.internal:55554\", //url\nMap()                               //optional additional connection options\n)\n

      Additional connection options can be found here.

      "},{"location":"setup/guide/data-source/solace/#schema","title":"Schema","text":"

      Let's create a task for inserting data into the rest_test_queue or rest_test_topic that is already created for us from this step.

      Trimming the connection details to work with the docker-compose Solace, we have a base Solace connection to define the JNDI destination we will publish to. Let's define each field along with their corresponding data type. You will notice that the text fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      {\nvar solaceTask = solace(\"my_solace\", \"smf://host.docker.internal:55554\")\n.destination(\"/JNDI/Q/rest_test_queue\")\n.schema(\nfield().name(\"value\").sql(\"TO_JSON(content)\"),\n//field().name(\"partition\").type(IntegerType.instance()),   //can define message JMS priority here\nfield().name(\"headers\")                                     //set message properties via headers field\n.type(HeaderType.getType())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n),\nfield().name(\"content\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"year\").type(IntegerType.instance()).min(2021).max(2023),\nfield().name(\"amount\").type(DoubleType.instance()),\nfield().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n),\nfield().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n)\n)\n.count(count().records(10));\n}\n
      val solaceTask = solace(\"my_solace\", \"smf://host.docker.internal:55554\")\n.destination(\"/JNDI/Q/rest_test_queue\")\n.schema(\nfield.name(\"value\").sql(\"TO_JSON(content)\"),\n//field.name(\"partition\").`type`(IntegerType),  //can define message JMS priority here\nfield.name(\"headers\")                           //set message properties via headers field\n.`type`(HeaderType.getType)\n.sql(\n\"\"\"ARRAY(\n          |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n          |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n          |)\"\"\".stripMargin\n),\nfield.name(\"content\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"year\").`type`(IntegerType).min(2021).max(2023),\nfield.name(\"amount\").`type`(DoubleType),\nfield.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n),\nfield.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n),\n).count(count.records(10))\n
      "},{"location":"setup/guide/data-source/solace/#fields","title":"Fields","text":"

      The schema defined for Solace has a format that needs to be followed as noted above. Specifically, the required fields are:

      • value

      Whilst, the other fields are optional:

      • partition - refers to JMS priority of the message
      • headers - refers to JMS message properties
      "},{"location":"setup/guide/data-source/solace/#headers","title":"headers","text":"

      headers follows a particular pattern that where it is of type HeaderType.getType which behind the scenes, translates toarray<struct<key: string,value: binary>>. To be able to generate data for this data type, we need to use an SQL expression like the one below. You will notice that in thevalue part, it refers to content.account_id where content is another field defined at the top level of the schema. This allows you to reference other values that have already been generated.

      JavaScala
      field().name(\"headers\")\n.type(HeaderType.getType())\n.sql(\n\"ARRAY(\" +\n\"NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\" +\n\"NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\" +\n\")\"\n)\n
      field.name(\"headers\")\n.`type`(HeaderType.getType)\n.sql(\n\"\"\"ARRAY(\n      |  NAMED_STRUCT('key', 'account-id', 'value', TO_BINARY(content.account_id, 'utf-8')),\n      |  NAMED_STRUCT('key', 'updated', 'value', TO_BINARY(content.details.updated_by.time, 'utf-8'))\n      |)\"\"\".stripMargin\n)\n
      "},{"location":"setup/guide/data-source/solace/#transactions","title":"transactions","text":"

      transactions is an array that contains an inner structure of txn_date and amount. The size of the array generated can be controlled via arrayMinLength and arrayMaxLength.

      JavaScala
      field().name(\"transactions\").type(ArrayType.instance())\n.schema(\nfield().name(\"txn_date\").type(DateType.instance()).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield().name(\"amount\").type(DoubleType.instance())\n)\n
      field.name(\"transactions\").`type`(ArrayType)\n.schema(\nfield.name(\"txn_date\").`type`(DateType).min(Date.valueOf(\"2021-01-01\")).max(\"2021-12-31\"),\nfield.name(\"amount\").`type`(DoubleType),\n)\n
      "},{"location":"setup/guide/data-source/solace/#details","title":"details","text":"

      details is another example of a nested schema structure where it also has a nested structure itself in updated_by. One thing to note here is the first_txn_date field has a reference to the content.transactions array where it will sort the array by txn_date and get the first element.

      JavaScala
      field().name(\"details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"first_txn_date\").type(DateType.instance()).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield().name(\"updated_by\")\n.schema(\nfield().name(\"user\"),\nfield().name(\"time\").type(TimestampType.instance())\n)\n)\n
      field.name(\"details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"first_txn_date\").`type`(DateType).sql(\"ELEMENT_AT(SORT_ARRAY(content.transactions.txn_date), 1)\"),\nfield.name(\"updated_by\")\n.schema(\nfield.name(\"user\"),\nfield.name(\"time\").`type`(TimestampType),\n),\n)\n
      "},{"location":"setup/guide/data-source/solace/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n
      "},{"location":"setup/guide/data-source/solace/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the kafkaTask, we have to call execute.

      "},{"location":"setup/guide/data-source/solace/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class AdvancedSolaceJavaPlanRun or AdvancedSolacePlanRun\n#after completing, check http://localhost:8080 from browser\n

      Your output should look like this.

      Unfortunately, there is no easy way to see the message content. You can check the message content from your application or service that consumes these messages.

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed. Or view the sample report found here.

      "},{"location":"setup/guide/scenario/auto-generate-connection/","title":"Auto Generate From Data Connection","text":"

      Info

      Auto data generation from data connection is a paid feature. Try the free trial here.

      Creating a data generator based on only a data connection to Postgres.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/auto-generate-connection/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/auto-generate-connection/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedAutomatedJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedAutomatedPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedAutomatedJavaPlanRun extends PlanRun {\n{\nvar autoRun = configuration()\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (3)\n.enableUniqueCheck(true)                                                          (4)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(autoRun);\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedAutomatedPlanRun extends PlanRun {\n\nval autoRun = configuration\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (3)\n.enableUniqueCheck(true)                                                          (4)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(configuration = autoRun)\n}\n

      In the above code, we note the following:

      1. Data source configuration to a Postgres data source called my_postgres
      2. We have enabled the flag enableGeneratePlanAndTasks which tells Data Caterer to go to my_postgres and generate data for all the tables found under the database customer (which is defined in the connection string).
      3. The config generatedPlanAndTaskFolderPath defines where the metadata that is gathered from my_postgres should be saved at so that we could re-use it later.
      4. enableUniqueCheck is set to true to ensure that generated data is unique based on primary key or foreign key definitions.

      Note

      Unique check will only ensure generated data is unique. Any existing data in your data source is not taken into account, so generated data may fail to insert depending on the data source restrictions

      "},{"location":"setup/guide/scenario/auto-generate-connection/#postgres-setup","title":"Postgres Setup","text":"

      If you don't have your own Postgres up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d postgres\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c '\\dt+ account.*'\n

      This will create the tables found under docker/data/sql/postgres/customer.sql. You can change this file to contain your own tables. We can see there are 4 tables created for us, accounts, balances, transactions and mapping.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedAutomatedJavaPlanRun or MyAdvancedAutomatedPlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1;'\n

      It should look something like this.

         id   | account_number  | account_status | created_by | created_by_fixed_length | customer_id_int | customer_id_smallint | customer_id_bigint |   customer_id_decimal    | customer_id_real | customer_id_double | open_date  |     open_timestamp      | last_opened_time |                                                           payload_bytes\n--------+-----------------+----------------+------------+-------------------------+-----------------+----------------------+--------------------+--------------------------+------------------+--------------------+------------+-------------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------\n 100414 | 5uROOVOUyQUbubN | h3H            | SfA0eZJcTm | CuRw                    |              13 |                   42 |               6041 | 76987.745612542900000000 |         91866.78 |  66400.37433202339 | 2023-03-05 | 2023-08-14 11:33:11.343 | 23:58:01.736     | \\x604d315d4547616e6a233050415373317274736f5e682d516132524f3d23233c37463463322f342d34376d597e665d6b3d395b4238284028622b7d6d2b4f5042\n(1 row)\n

      The data that gets inserted will follow the foreign keys that are defined within Postgres and also ensure the insertion order is correct.

      Also check the HTML report that gets generated under docker/sample/report/index.html. You can see a summary of what was generated along with other metadata.

      You can now look to play around with other tables or data sources and auto generate for them.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/auto-generate-connection/#learn-from-existing-data","title":"Learn From Existing Data","text":"

      If you have any existing data within your data source, Data Caterer will gather metadata about the existing data to help guide it when generating new data. There are configurations that can help tune the metadata analysis found here.

      "},{"location":"setup/guide/scenario/auto-generate-connection/#filter-out-schematables","title":"Filter Out Schema/Tables","text":"

      As part of your connection definition, you can define any schemas and/or tables your don't want to generate data for. In the example below, it will not generate any data for any tables under the history and audit schemas. Also, any table with the name balances or transactions in any schema will also not have data generated.

      JavaScala
      var autoRun = configuration()\n.postgres(\n\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\",\nMap.of(\n\"filterOutSchema\", \"history, audit\",\n\"filterOutTable\", \"balances, transactions\")\n)\n)\n
      val autoRun = configuration\n.postgres(\n\"my_postgres\",\n\"jdbc:postgresql://host.docker.internal:5432/customer\",\nMap(\n\"filterOutSchema\" -> \"history, audit\",\n\"filterOutTable\" -> \"balances, transactions\")\n)\n)\n
      "},{"location":"setup/guide/scenario/auto-generate-connection/#define-record-count","title":"Define record count","text":"

      You can control the record count per sub data source via numRecordsPerStep.

      JavaScala
      var autoRun = configuration()\n...\n.numRecordsPerStep(100)\n\nexecute(autoRun)\n
      val autoRun = configuration\n...\n.numRecordsPerStep(100)\n\nexecute(configuration = autoRun)\n
      "},{"location":"setup/guide/scenario/batch-and-event/","title":"Generate Batch and Event Data","text":"

      Info

      Generating event data is a paid feature. Try the free trial here.

      Creating a data generator for Kafka topic with matching records in a CSV file.

      "},{"location":"setup/guide/scenario/batch-and-event/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/batch-and-event/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/batch-and-event/#kafka-setup","title":"Kafka Setup","text":"

      If you don't have your own Kafka up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d kafka\ndocker exec docker-kafkaserver-1 kafka-topics --bootstrap-server localhost:9092 --list\n

      Let's create a task for inserting data into the account-topic that is already defined underdocker/data/kafka/setup_kafka.sh.

      "},{"location":"setup/guide/scenario/batch-and-event/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedBatchEventJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedBatchEventPlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedBatchEventJavaPlanRun extends PlanRun {\n{\nvar kafkaTask = new AdvancedKafkaJavaPlanRun().getKafkaTask();\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedBatchEventPlanRun extends PlanRun {\nval kafkaTask = new AdvancedKafkaPlanRun().kafkaTask\n}\n

      We will borrow the Kafka task that is already defined under the class AdvancedKafkaPlanRun or AdvancedKafkaJavaPlanRun. You can go through the Kafka guide here for more details.

      "},{"location":"setup/guide/scenario/batch-and-event/#schema","title":"Schema","text":"

      Let us set up the corresponding schema for the CSV file where we want to match the values that are generated for the Kafka messages.

      JavaScala
      var kafkaTask = new AdvancedKafkaJavaPlanRun().getKafkaTask();\n\nvar csvTask = csv(\"my_csv\", \"/opt/app/data/csv/account\")\n.schema(\nfield().name(\"account_number\"),\nfield().name(\"year\"),\nfield().name(\"name\"),\nfield().name(\"payload\")\n);\n
      val kafkaTask = new AdvancedKafkaPlanRun().kafkaTask\n\nval csvTask = csv(\"my_csv\", \"/opt/app/data/csv/account\")\n.schema(\nfield.name(\"account_number\"),\nfield.name(\"year\"),\nfield.name(\"name\"),\nfield.name(\"payload\")\n)\n

      This is a simple schema where we want to use the values and metadata that is already defined in the kafkaTask to determine what the data will look like for the CSV file. Even if we defined some metadata here, it would be overridden when we define our foreign key relationships.

      "},{"location":"setup/guide/scenario/batch-and-event/#foreign-keys","title":"Foreign Keys","text":"

      From the above CSV schema, we see note the following against the Kafka schema:

      • account_number in CSV needs to match with the account_id in Kafka
        • We see that account_id is referred to in the key column as field.name(\"key\").sql(\"content.account_id\")
      • year needs to match with content.year in Kafka, which is a nested field
        • We can only do foreign key relationships with top level fields, not nested fields. So we define a new column called tmp_year which will not appear in the final output for the Kafka messages but is used as an intermediate step field.name(\"tmp_year\").sql(\"content.year\").omit(true)
      • name needs to match with content.details.name in Kafka, also a nested field
        • Using the same logic as above, we define a temporary column called tmp_name which will take the value of the nested field but will be omitted field.name(\"tmp_name\").sql(\"content.details.name\").omit(true)
      • payload represents the whole JSON message sent to Kafka, which matches to value column

      Our foreign keys are therefore defined like below. Order is important when defining the list of columns. The index needs to match with the corresponding column in the other data source.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\nkafkaTask, List.of(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList.of(Map.entry(csvTask, List.of(\"account_number\", \"year\", \"name\", \"payload\")))\n);\n\nvar conf = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(myPlan, conf, kafkaTask, csvTask);\n
      val myPlan = plan.addForeignKeyRelationship(\nkafkaTask, List(\"key\", \"tmp_year\", \"tmp_name\", \"value\"),\nList(csvTask -> List(\"account_number\", \"year\", \"name\", \"payload\"))\n)\n\nval conf = configuration.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(myPlan, conf, kafkaTask, csvTask)\n
      "},{"location":"setup/guide/scenario/batch-and-event/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedBatchEventJavaPlanRun or MyAdvancedBatchEventPlanRun\n#after completing\ndocker exec docker-kafkaserver-1 kafka-console-consumer --bootstrap-server localhost:9092 --topic account-topic --from-beginning\n

      It should look something like this.

      {\"account_id\":\"ACC03093143\",\"year\":2023,\"amount\":87990.37196728592,\"details\":{\"name\":\"Nadine Heidenreich Jr.\",\"first_txn_date\":\"2021-11-09\",\"updated_by\":{\"user\":\"YfEyJCe8ohrl0j IfyT\",\"time\":\"2022-09-26T20:47:53.404Z\"}},\"transactions\":[{\"txn_date\":\"2021-11-09\",\"amount\":97073.7914706189}]}\n{\"account_id\":\"ACC08764544\",\"year\":2021,\"amount\":28675.58758765888,\"details\":{\"name\":\"Delila Beer\",\"first_txn_date\":\"2021-05-19\",\"updated_by\":{\"user\":\"IzB5ksXu\",\"time\":\"2023-01-26T20:47:26.389Z\"}},\"transactions\":[{\"txn_date\":\"2021-10-01\",\"amount\":80995.23818711648},{\"txn_date\":\"2021-05-19\",\"amount\":92572.40049217848},{\"txn_date\":\"2021-12-11\",\"amount\":99398.79832225188}]}\n{\"account_id\":\"ACC62505420\",\"year\":2023,\"amount\":96125.3125884202,\"details\":{\"name\":\"Shawn Goodwin\",\"updated_by\":{\"user\":\"F3dqIvYp2pFtena4\",\"time\":\"2023-02-11T04:38:29.832Z\"}},\"transactions\":[]}\n

      Let's also check if there is a corresponding record in the CSV file.

      $ cat docker/sample/csv/account/part-0000* | grep ACC03093143\nACC03093143,2023,Nadine Heidenreich Jr.,\"{\\\"account_id\\\":\\\"ACC03093143\\\",\\\"year\\\":2023,\\\"amount\\\":87990.37196728592,\\\"details\\\":{\\\"name\\\":\\\"Nadine Heidenreich Jr.\\\",\\\"first_txn_date\\\":\\\"2021-11-09\\\",\\\"updated_by\\\":{\\\"user\\\":\\\"YfEyJCe8ohrl0j IfyT\\\",\\\"time\\\":\\\"2022-09-26T20:47:53.404Z\\\"}},\\\"transactions\\\":[{\\\"txn_date\\\":\\\"2021-11-09\\\",\\\"amount\\\":97073.7914706189}]}\"\n

      Great! The account, year, name and payload look to all match up.

      "},{"location":"setup/guide/scenario/batch-and-event/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/batch-and-event/#order-of-execution","title":"Order of execution","text":"

      You may notice that the events are generated first, then the CSV file. This is because as part of the execute function, we passed in the kafkaTask first, before the csvTask. You can change the order of execution by passing in csvTask before kafkaTask into the execute function.

      "},{"location":"setup/guide/scenario/data-validation/","title":"Data Validations","text":"

      Creating a data validator for a JSON file.

      "},{"location":"setup/guide/scenario/data-validation/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/data-validation/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/data-validation/#data-setup","title":"Data Setup","text":"

      To aid in showing the functionality of data validations, we will first generate some data that our validations will run against. Run the below command and it will generate JSON files under docker/sample/json folder.

      ./run.sh JsonPlan\n
      "},{"location":"setup/guide/scenario/data-validation/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyValidationJavaPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyValidationPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyValidationJavaPlan extends PlanRun {\n{\nvar jsonTask = json(\"my_json\", \"/opt/app/data/json\");\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false);\n\nexecute(config, jsonTask);\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyValidationPlan extends PlanRun {\nval jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false)\n\nexecute(config, jsonTask)\n}\n

      As noted above, we create a JSON task that points to where the JSON data has been created at folder /opt/app/data/json . We also note that enableValidation is set to true and enableGenerateData to false to tell Data Catering, we only want to validate data.

      "},{"location":"setup/guide/scenario/data-validation/#validations","title":"Validations","text":"

      For reference, the schema in which we will be validating against looks like the below.

      .schema(\nfield.name(\"account_id\"),\n  field.name(\"year\").`type`(IntegerType),\n  field.name(\"balance\").`type`(DoubleType),\n  field.name(\"date\").`type`(DateType),\n  field.name(\"status\"),\n  field.name(\"update_history\").`type`(ArrayType)\n.schema(\nfield.name(\"updated_time\").`type`(TimestampType),\n      field.name(\"status\").oneOf(\"open\", \"closed\", \"pending\", \"suspended\"),\n    ),\n  field.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\"),\n      field.name(\"age\").`type`(IntegerType),\n      field.name(\"city\").expression(\"#{Address.city}\")\n)\n)\n
      "},{"location":"setup/guide/scenario/data-validation/#basic-validation","title":"Basic Validation","text":"

      Let's say our goal is to validate the customer_details.name field to ensure it conforms to the regex pattern [A-Z][a-z]+ [A-Z][a-z]+. Given the diversity in naming conventions across cultures and countries, variations such as middle names, suffixes, prefixes, or language-specific differences are tolerated to a certain extent. The validation considers an acceptable error threshold before marking it as failed.

      "},{"location":"setup/guide/scenario/data-validation/#validation-criteria","title":"Validation Criteria","text":"
      • Field to Validate: customer_details.name
      • Regex Pattern: [A-Z][a-z]+ [A-Z][a-z]+
      • Error Tolerance: If more than 10% do not match the regex, then fail.
      "},{"location":"setup/guide/scenario/data-validation/#considerations","title":"Considerations","text":"
      • Customisation
        • Adjust the regex pattern and error threshold based on your specific data schema and validation requirements.
        • For the full list of types of basic validations that can be used, check this page.
      • Understanding Tolerance
        • Be mindful of the error threshold, as it directly influences what percentage of deviations from the pattern is acceptable.
      JavaScala
      validation().col(\"customer_details.name\")\n.matches(\"[A-Z][a-z]+ [A-Z][a-z]+\")\n.errorThreshold(0.1)                                      //<=10% failure rate is acceptable\n.description(\"Names generally follow the same pattern\"),  //description to add context in report or other developers\n
      validation.col(\"customer_details.name\")\n.matches(\"[A-Z][a-z]+ [A-Z][a-z]+\")\n.errorThreshold(0.1)                                      //<=10% failure rate is acceptable\n.description(\"Names generally follow the same pattern\"),  //description to add context in report or other developers\n
      "},{"location":"setup/guide/scenario/data-validation/#custom-validation","title":"Custom Validation","text":"

      There will be situation where you have a complex data setup and require you own custom logic to use for data validation. You can achieve this via setting your own SQL expression that returns a boolean value. An example is seen below where we want to check the array update_history, that each entry has updated_time greater than a certain timestamp.

      JavaScala
      validation().expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\n
      validation.expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\n

      If you want to know what other SQL function are available for you to use, check this page.

      "},{"location":"setup/guide/scenario/data-validation/#group-by-validation","title":"Group By Validation","text":"

      There are scenarios where you want to validate against grouped values or the whole dataset via aggregations. An example would be validating that each customer's transactions sum is greater than 0.

      "},{"location":"setup/guide/scenario/data-validation/#validation-criteria_1","title":"Validation Criteria","text":"

      Line 1: validation.groupBy().count().isEqual(100)

      • Method Chaining
        • groupBy(): Group by whole dataset.
        • count(): Counts the number of dataset elements.
        • isEqual(100): Checks if the count is equal to 100.
      • Validation Rule
        • This line ensures that the count of the total dataset is exactly 100.

      Line 2: validation.groupBy(\"account_id\").max(\"balance\").lessThan(900)

      • Method Chaining
        • groupBy(\"account_id\"): Groups the data based on the account_id field.
        • max(\"balance\"): Calculates the maximum value of the balance field within each group.
        • lessThan(900): Checks if the maximum balance in each group is less than 900.
      • Validation Rule
        • This line ensures that, for each group identified by account_id the maximum balance is less than 900.
      "},{"location":"setup/guide/scenario/data-validation/#considerations_1","title":"Considerations","text":"
      • Adjust the errorThreshold or validation to your specification scenario. The full list of types of validations can be found here.
      • For the full list of types of group by validations that can be used, check this page.
      JavaScala
      validation().groupBy().count().isEqual(100),\nvalidation().groupBy(\"account_id\").max(\"balance\").lessThan(900)\n
      validation.groupBy().count().isEqual(100),\nvalidation.groupBy(\"account_id\").max(\"balance\").lessThan(900)\n
      "},{"location":"setup/guide/scenario/data-validation/#sample-validation","title":"Sample Validation","text":"

      To try cover the majority of validation cases, the below has been created.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(\nvalidation().col(\"customer_details.name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.1).description(\"Names generally follow the same pattern\"),\nvalidation().col(\"date\").isNotNull().errorThreshold(10),\nvalidation().col(\"balance\").greaterThan(500),\nvalidation().expr(\"YEAR(date) == year\"),\nvalidation().col(\"status\").in(\"open\", \"closed\", \"pending\").errorThreshold(0.2).description(\"Could be new status introduced\"),\nvalidation().col(\"customer_details.age\").greaterThan(18),\nvalidation().expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\nvalidation().col(\"update_history\").greaterThanSize(2),\nvalidation().unique(\"account_id\"),\nvalidation().groupBy().count().isEqual(1000),\nvalidation().groupBy(\"account_id\").max(\"balance\").lessThan(900)\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false);\n\nexecute(config, jsonTask);\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(\nvalidation.col(\"customer_details.name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.1).description(\"Names generally follow the same pattern\"),\nvalidation.col(\"date\").isNotNull.errorThreshold(10),\nvalidation.col(\"balance\").greaterThan(500),\nvalidation.expr(\"YEAR(date) == year\"),\nvalidation.col(\"status\").in(\"open\", \"closed\", \"pending\").errorThreshold(0.2).description(\"Could be new status introduced\"),\nvalidation.col(\"customer_details.age\").greaterThan(18),\nvalidation.expr(\"FORALL(update_history, x -> x.updated_time > TIMESTAMP('2022-01-01 00:00:00'))\"),\nvalidation.col(\"update_history\").greaterThanSize(2),\nvalidation.unique(\"account_id\"),\nvalidation.groupBy().count().isEqual(1000),\nvalidation.groupBy(\"account_id\").max(\"balance\").lessThan(900)\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableValidation(true)\n.enableGenerateData(false)\n\nexecute(config, jsonTask)\n
      "},{"location":"setup/guide/scenario/data-validation/#run","title":"Run","text":"

      Let's try run.

      ./run.sh\n#input class MyValidationJavaPlan or MyValidationPlan\n#after completing, check report at docker/sample/report/index.html\n

      It should look something like this.

      Check the full example at ValidationPlanRun inside the examples repo.

      "},{"location":"setup/guide/scenario/delete-generated-data/","title":"Delete Generated Data","text":"

      Info

      Delete generated data is a paid feature. Try the free trial here.

      Creating a data generator for Postgres and delete the generated data after using it.

      "},{"location":"setup/guide/scenario/delete-generated-data/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/delete-generated-data/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/delete-generated-data/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedDeleteJavaPlanRun.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedDeletePlanRun.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyAdvancedDeleteJavaPlanRun extends PlanRun {\n{\nvar autoRun = configuration()\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.enableRecordTracking(true)                                                       (3)\n.enableDeleteGeneratedRecords(false)                                              (4)\n.enableUniqueCheck(true)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (5)\n.recordTrackingFolderPath(\"/opt/app/data/recordTracking\")                         (6)\n.generatedReportsFolderPath(\"/opt/app/data/report\");\n\nexecute(autoRun);\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyAdvancedDeletePlanRun extends PlanRun {\n\nval autoRun = configuration\n.postgres(\"my_postgres\", \"jdbc:postgresql://host.docker.internal:5432/customer\")  (1)\n.enableGeneratePlanAndTasks(true)                                                 (2)\n.enableRecordTracking(true)                                                       (3)\n.enableDeleteGeneratedRecords(false)                                              (4)\n.enableUniqueCheck(true)\n.generatedPlanAndTaskFolderPath(\"/opt/app/data/generated\")                        (5)\n.recordTrackingFolderPath(\"/opt/app/data/recordTracking\")                         (6)\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(configuration = autoRun)\n}\n

      In the above code we note the following:

      1. We have defined a Postgres connection called my_postgres
      2. enableGeneratePlanAndTasks is enabled to auto generate data for all tables under customer database
      3. enableRecordTracking is enabled to ensure that all generated records are tracked. This will get used when we want to delete data afterwards
      4. enableDeleteGeneratedRecords is disabled for now. We want to see the generated data first and delete sometime after
      5. generatedPlanAndTaskFolderPath is the folder path where we saved the metadata we have gathered from my_postgres
      6. recordTrackingFolderPath is the folder path where record tracking is maintained. We need to persist this data to ensure it is still available when we want to delete data
      "},{"location":"setup/guide/scenario/delete-generated-data/#postgres-setup","title":"Postgres Setup","text":"

      If you don't have your own Postgres up and running, you can set up and run an instance configured in the docker folder via.

      cd docker\ndocker-compose up -d postgres\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c '\\dt+ account.*'\n

      This will create the tables found under docker/data/sql/postgres/customer.sql. You can change this file to contain your own tables. We can see there are 4 tables created for us, accounts, balances, transactions and mapping.

      "},{"location":"setup/guide/scenario/delete-generated-data/#run","title":"Run","text":"

      Let's try run.

      cd ..\n./run.sh\n#input class MyAdvancedDeleteJavaPlanRun or MyAdvancedDeletePlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1'\n

      It should look something like this.

         id   | account_number  | account_status | created_by | created_by_fixed_length | customer_id_int | customer_id_smallint | customer_id_bigint |   customer_id_decimal    | customer_id_real | customer_id_double | open_date  |     open_timestamp      | last_opened_time |                                                           payload_bytes\n--------+-----------------+----------------+------------+-------------------------+-----------------+----------------------+--------------------+--------------------------+------------------+--------------------+------------+-------------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------\n 100414 | 5uROOVOUyQUbubN | h3H            | SfA0eZJcTm | CuRw                    |              13 |                   42 |               6041 | 76987.745612542900000000 |         91866.78 |  66400.37433202339 | 2023-03-05 | 2023-08-14 11:33:11.343 | 23:58:01.736     | \\x604d315d4547616e6a233050415373317274736f5e682d516132524f3d23233c37463463322f342d34376d597e665d6b3d395b4238284028622b7d6d2b4f5042\n(1 row)\n

      The data that gets inserted will follow the foreign keys that are defined within Postgres and also ensure the insertion order is correct.

      Check the number of records via:

      docker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select count(1) from account.accounts'\n#open report under docker/sample/report/index.html\n
      "},{"location":"setup/guide/scenario/delete-generated-data/#delete","title":"Delete","text":"

      We are now at a stage where we want to delete the data that was generated. All we need to do is flip two flags.

      .enableDeleteGeneratedRecords(true)\n.enableGenerateData(false)  //we need to explicitly disable generating data\n

      Enable delete generated records and disable generating data.

      Before we run again, let us insert a record manually to see if that data will survive after running the job to delete the generated data.

      docker exec docker-postgresserver-1 psql -Upostgres -d customer -c \"insert into account.accounts (account_number) values ('my_account_number')\"\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c \"select count(1) from account.accounts\"\n

      We now should have 1001 records in our account.accounts table. Let's delete the generated data now.

      ./run.sh\n#input class MyAdvancedDeleteJavaPlanRun or MyAdvancedDeletePlanRun\n#after completing\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select * from account.accounts limit 1'\ndocker exec docker-postgresserver-1 psql -Upostgres -d customer -c 'select count(1) from account.accounts'\n

      You should see that only 1 record is left, the one that we manually inserted. Great, now we can generate data reliably and also be able to clean it up.

      "},{"location":"setup/guide/scenario/delete-generated-data/#additional-topics","title":"Additional Topics","text":""},{"location":"setup/guide/scenario/delete-generated-data/#one-class-for-generating-another-for-deleting","title":"One class for generating, another for deleting?","text":"

      Yes, this is possible. There are two requirements: - the connection names used need to be the same across both classes - recordTrackingFolderPath needs to be set to the same value

      "},{"location":"setup/guide/scenario/delete-generated-data/#define-record-count","title":"Define record count","text":"

      You can control the record count per sub data source via numRecordsPerStep.

      JavaScala
      var autoRun = configuration()\n...\n.numRecordsPerStep(100)\n\nexecute(autoRun)\n
      val autoRun = configuration\n...\n.numRecordsPerStep(100)\n\nexecute(configuration = autoRun)\n
      "},{"location":"setup/guide/scenario/first-data-generation/","title":"First Data Generation","text":"

      Creating a data generator for a CSV file.

      "},{"location":"setup/guide/scenario/first-data-generation/#requirements","title":"Requirements","text":"
      • 20 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/first-data-generation/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/first-data-generation/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyCsvPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyCsvPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n\npublic class MyCsvJavaPlan extends PlanRun {\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n\nclass MyCsvPlan extends PlanRun {\n}\n

      This class defines where we need to define all of our configurations for generating data. There are helper variables and methods defined to make it simple and easy to use.

      "},{"location":"setup/guide/scenario/first-data-generation/#connection-configuration","title":"Connection Configuration","text":"

      When dealing with CSV files, we need to define a path for our generated CSV files to be saved at, along with any other high level configurations.

      JavaScala
      csv(\n\"customer_accounts\",              //name\n\"/opt/app/data/customer/account\", //path\nMap.of(\"header\", \"true\")          //optional additional options\n)\n

      Other additional options for CSV can be found here

      csv(\n\"customer_accounts\",              //name\n\"/opt/app/data/customer/account\", //path\nMap(\"header\" -> \"true\")           //optional additional options\n)\n

      Other additional options for CSV can be found here

      "},{"location":"setup/guide/scenario/first-data-generation/#schema","title":"Schema","text":"

      Our CSV file that we generate should adhere to a defined schema where we can also define data types.

      Let's define each field along with their corresponding data type. You will notice that the string fields do not have a data type defined. This is because the default data type is StringType.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"balance\").type(DoubleType.instance()),\nfield().name(\"created_by\"),\nfield().name(\"name\"),\nfield().name(\"open_time\").type(TimestampType.instance()),\nfield().name(\"status\")\n);\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"balance\").`type`(DoubleType),\nfield.name(\"created_by\"),\nfield.name(\"name\"),\nfield.name(\"open_time\").`type`(TimestampType),\nfield.name(\"status\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#field-metadata","title":"Field Metadata","text":"

      We could stop here and generate random data for the accounts table. But wouldn't it be more useful if we produced data that is closer to the structure of the data that would come in production? We can do this by defining various metadata attributes that add guidelines that the data generator will understand when generating data.

      "},{"location":"setup/guide/scenario/first-data-generation/#account_id","title":"account_id","text":"
      • account_id follows a particular pattern that where it starts with ACC and has 8 digits after it. This can be defined via a regex like below. Alongside, we also mention that values are unique ensure that unique values are generated.
      JavaScala
      field().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\n
      field.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#balance","title":"balance","text":"
      • balance let's make the numbers not too large, so we can define a min and max for the generated numbers to be between 1 and 1000.
      JavaScala
      field().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\n
      field.name(\"balance\").`type`(DoubleType).min(1).max(1000),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#name","title":"name","text":"
      • name is a string that also follows a certain pattern, so we could also define a regex but here we will choose to leverage the DataFaker library and create an expression to generate real looking name. All possible faker expressions can be found here
      JavaScala
      field().name(\"name\").expression(\"#{Name.name}\"),\n
      field.name(\"name\").expression(\"#{Name.name}\"),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#open_time","title":"open_time","text":"
      • open_time is a timestamp that we want to have a value greater than a specific date. We can define a min date by using java.sql.Date like below.
      JavaScala
      field().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      field.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\n
      "},{"location":"setup/guide/scenario/first-data-generation/#status","title":"status","text":"
      • status is a field that can only obtain one of four values, open, closed, suspended or pending.
      JavaScala
      field().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      field.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n
      "},{"location":"setup/guide/scenario/first-data-generation/#created_by","title":"created_by","text":"
      • created_by is a field that is based on the status field where it follows the logic: if status is open or closed, then it is created_by eod else created_by event. This can be achieved by defining a SQL expression like below.
      JavaScala
      field().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n
      field.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\n

      Putting it all the fields together, our class should now look like this.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#record-count","title":"Record Count","text":"

      We only want to generate 100 records, so that we can see what the output looks like. This is controlled at the accountTask level like below. If you want to generate more records, set it to the value you want.

      JavaScala
      var accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().records(100));\n
      val accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.records(100))\n
      "},{"location":"setup/guide/scenario/first-data-generation/#additional-configurations","title":"Additional Configurations","text":"

      At the end of data generation, a report gets generated that summarises the actions it performed. We can control the output folder of that report via configurations. We will also enable the unique check to ensure any unique fields will have unique values generated.

      JavaScala
      var config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n
      val config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#execute","title":"Execute","text":"

      To tell Data Caterer that we want to run with the configurations along with the accountTask, we have to call execute . So our full plan run will look like this.

      JavaScala
      public class MyCsvJavaPlan extends PlanRun {\n{\nvar accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, accountTask);\n}\n}\n
      class MyCsvPlan extends PlanRun {\n\nval accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nexecute(config, accountTask)\n}\n
      "},{"location":"setup/guide/scenario/first-data-generation/#run","title":"Run","text":"

      Now we can run via the script ./run.sh that is in the top level directory of the data-caterer-example to run the class we just created.

      ./run.sh\n#input class MyCsvJavaPlan or MyCsvPlan\n#after completing\nhead docker/sample/customer/account/part-00000*\n

      Your output should look like this.

      account_id,balance,created_by,name,open_time,status\nACC06192462,853.9843359645766,eod,Hoyt Kertzmann MD,2023-07-22T11:17:01.713Z,closed\nACC15350419,632.5969895326234,eod,Dr. Claude White,2022-12-13T21:57:56.840Z,open\nACC25134369,592.0958847218986,eod,Fabian Rolfson,2023-04-26T04:54:41.068Z,open\nACC48021786,656.6413439322964,eod,Dewayne Stroman,2023-05-17T06:31:27.603Z,open\nACC26705211,447.2850352884595,event,Garrett Funk,2023-07-14T03:50:22.746Z,pending\nACC03150585,750.4568929015996,event,Natisha Reichel,2023-04-11T11:13:10.080Z,suspended\nACC29834210,686.4257811608622,event,Gisele Ondricka,2022-11-15T22:09:41.172Z,suspended\nACC39373863,583.5110618128994,event,Thaddeus Ortiz,2022-09-30T06:33:57.193Z,suspended\nACC39405798,989.2623959059525,eod,Shelby Reinger,2022-10-23T17:29:17.564Z,open\n

      Also check the HTML report, found at docker/sample/report/index.html, that gets generated to get an overview of what was executed.

      "},{"location":"setup/guide/scenario/first-data-generation/#join-with-another-csv","title":"Join With Another CSV","text":"

      Now that we have generated some accounts, let's also try to generate a set of transactions for those accounts in CSV format as well. The transactions could be in any other format, but to keep this simple, we will continue using CSV.

      We can define our schema the same way along with any additional metadata.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n);\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"full_name\"),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"date\").`type`(DateType).sql(\"DATE(time)\")\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#records-per-column","title":"Records Per Column","text":"

      Usually, for a given account_id, full_name, there should be multiple records for it as we want to simulate a customer having multiple transactions. We can achieve this through defining the number of records to generate in the count function.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumn(5, \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumn(5, \"account_id\", \"full_name\"))\n
      "},{"location":"setup/guide/scenario/first-data-generation/#random-records-per-column","title":"Random Records Per Column","text":"

      Above, you will notice that we are generating 5 records per account_id, full_name. This is okay but still not quite reflective of the real world. Sometimes, people have accounts with no transactions in them, or they could have many. We can accommodate for this via defining a random number of records per column.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n

      Here we set the minimum number of records per column to be 0 and the maximum to 5.

      "},{"location":"setup/guide/scenario/first-data-generation/#foreign-key","title":"Foreign Key","text":"

      In this scenario, we want to match the account_id in account to match the same column values in transaction. We also want to match name in account to full_name in transaction. This can be done via plan configuration like below.

      JavaScala
      var myPlan = plan().addForeignKeyRelationship(\naccountTask, List.of(\"account_id\", \"name\"), //the task and columns we want linked\nList.of(Map.entry(transactionTask, List.of(\"account_id\", \"full_name\"))) //list of other tasks and their respective column names we want matched\n);\n
      val myPlan = plan.addForeignKeyRelationship(\naccountTask, List(\"account_id\", \"name\"),  //the task and columns we want linked\nList(transactionTask -> List(\"account_id\", \"full_name\"))  //list of other tasks and their respective column names we want matched\n)\n

      Now, stitching it all together for the execute function, our final plan should look like this.

      JavaScala
      public class MyCsvJavaPlan extends PlanRun {\n{\nvar accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield().name(\"balance\").type(DoubleType.instance()).min(1).max(1000),\nfield().name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield().name(\"name\").expression(\"#{Name.name}\"),\nfield().name(\"open_time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n.count(count().records(100));\n\nvar transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nvar myPlan = plan().addForeignKeyRelationship(\naccountTask, List.of(\"account_id\", \"name\"),\nList.of(Map.entry(transactionTask, List.of(\"account_id\", \"full_name\")))\n);\n\nexecute(myPlan, config, accountTask, transactionTask);\n}\n}\n
      class MyCsvPlan extends PlanRun {\n\nval accountTask = csv(\"customer_accounts\", \"/opt/app/data/customer/account\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\").unique(true),\nfield.name(\"balance\").`type`(DoubleType).min(1).max(1000),\nfield.name(\"created_by\").sql(\"CASE WHEN status IN ('open', 'closed') THEN 'eod' ELSE 'event' END\"),\nfield.name(\"name\").expression(\"#{Name.name}\"),\nfield.name(\"open_time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"status\").oneOf(\"open\", \"closed\", \"suspended\", \"pending\")\n)\n.count(count.records(100))\n\nval transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"name\"),\nfield.name(\"amount\").`type`(DoubleType).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield.name(\"date\").`type`(DateType).sql(\"DATE(time)\")\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true)\n\nval myPlan = plan.addForeignKeyRelationship(\naccountTask, List(\"account_id\", \"name\"),\nList(transactionTask -> List(\"account_id\", \"full_name\"))\n)\n\nexecute(myPlan, config, accountTask, transactionTask)\n}\n

      Let's try run again.

      #clean up old data\nrm -rf docker/sample/customer/account\n./run.sh\n#input class MyCsvJavaPlan or MyCsvPlan\n#after completing, let's pick an account and check the transactions for that account\naccount=$(tail -1 docker/sample/customer/account/part-00000* | awk -F \",\" '{print $1 \",\" $4}')\necho $account\ncat docker/sample/customer/transaction/part-00000* | grep $account\n

      It should look something like this.

      ACC29117767,Willodean Sauer\nACC29117767,Willodean Sauer,84.99145871948083,2023-05-14T09:55:51.439Z,2023-05-14\nACC29117767,Willodean Sauer,58.89345733567232,2022-11-22T07:38:20.143Z,2022-11-22\n

      Congratulations! You have now made a data generator that has simulated a real world data scenario. You can check the DocumentationJavaPlanRun.java or DocumentationPlanRun.scala files as well to check that your plan is the same.

      We can now look to consume this CSV data from a job or service. Usually, once we have consumed the data, we would also want to check and validate that our consumer has correctly ingested the data.

      "},{"location":"setup/guide/scenario/first-data-generation/#validate","title":"Validate","text":"

      In this scenario, our consumer will read in the CSV file, do some transformations, and then save the data to Postgres. Let's try to configure data validations for the data that gets pushed into Postgres.

      "},{"location":"setup/guide/scenario/first-data-generation/#postgres-setup","title":"Postgres setup","text":"

      First, we define our connection properties for Postgres. You can check out the full options available here.

      JavaScala
      var postgresValidateTask = postgres(\n\"my_postgres\",                                          //connection name\n\"jdbc:postgresql://host.docker.internal:5432/customer\", //url\n\"postgres\",                                             //username\n\"password\"                                              //password\n).table(\"account\", \"transactions\");\n
      val postgresValidateTask = postgres(\n\"my_postgres\",                                          //connection name\n\"jdbc:postgresql://host.docker.internal:5432/customer\", //url\n\"postgres\",                                             //username\n\"password\"                                              //password\n).table(\"account\", \"transactions\")\n

      We can connect and access the data inside the table account.transactions. Now to define our data validations.

      "},{"location":"setup/guide/scenario/first-data-generation/#validations","title":"Validations","text":"

      For full information about validation options and configurations, check here. Below, we have an example that should give you a good understanding of what validations are possible.

      JavaScala
      var postgresValidateTask = postgres(...)\n.table(\"account\", \"transactions\")\n.validations(\nvalidation().col(\"account_id\").isNotNull(),\nvalidation().col(\"name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.2).description(\"Some names have different formats\"),\nvalidation().col(\"balance\").greaterThanOrEqual(0).errorThreshold(10).description(\"Account can have negative balance if overdraft\"),\nvalidation().expr(\"CASE WHEN status == 'closed' THEN isNotNull(close_date) ELSE isNull(close_date) END\"),\nvalidation().unique(\"account_id\", \"name\"),\nvalidation().groupBy(\"account_id\", \"name\").max(\"login_retry\").lessThan(10)\n);\n
      val postgresValidateTask = postgres(...)\n.table(\"account\", \"transactions\")\n.validations(\nvalidation.col(\"account_id\").isNotNull,\nvalidation.col(\"name\").matches(\"[A-Z][a-z]+ [A-Z][a-z]+\").errorThreshold(0.2).description(\"Some names have different formats\"),\nvalidation.col(\"balance\").greaterThanOrEqual(0).errorThreshold(10).description(\"Account can have negative balance if overdraft\"),\nvalidation.expr(\"CASE WHEN status == 'closed' THEN isNotNull(close_date) ELSE isNull(close_date) END\"),\nvalidation.unique(\"account_id\", \"name\"),\nvalidation.groupBy(\"account_id\", \"name\").max(\"login_retry\").lessThan(10)\n)\n
      "},{"location":"setup/guide/scenario/first-data-generation/#name_1","title":"name","text":"

      For all values in the name column, we check if they match the regex [A-Z][a-z]+ [A-Z][a-z]+. As we know in the real world, names do not always follow the same pattern, so we allow for an errorThreshold before marking the validation as failed. Here, we define the errorThreshold to be 0.2, which means, if the error percentage is greater than 20%, then fail the validation. We also append on a helpful description so other developers/users can understand the context of the validation.

      "},{"location":"setup/guide/scenario/first-data-generation/#balance_1","title":"balance","text":"

      We check that all balance values are greater than or equal to 0. This time, we have a slightly different errorThreshold as it is set to 10, which means, if the number of errors is greater than 10, then fail the validation.

      "},{"location":"setup/guide/scenario/first-data-generation/#expr","title":"expr","text":"

      Sometimes, we may need to include the values of multiple columns to validate a certain condition. This is where we can use expr to define a SQL expression that returns a boolean. In this scenario, we are checking if the status column has value closed, then the close_date should be not null, otherwise, close_date is null.

      "},{"location":"setup/guide/scenario/first-data-generation/#unique","title":"unique","text":"

      We check whether the combination of account_id and name are unique within the dataset. You can define one or more columns for unique validations.

      "},{"location":"setup/guide/scenario/first-data-generation/#groupby","title":"groupBy","text":"

      There may be some business rule that states the number of login_retry should be less than 10 for each account. We can check this via a group by validation where we group by the account_id, name, take the maximum value for login_retry per account_id,name combination, then check if it is less than 10.

      You can now look to play around with other configurations or data sources to meet your needs. Also, make sure to explore the docs further as it can guide you on what can be configured.

      "},{"location":"setup/guide/scenario/records-per-column/","title":"Multiple Records Per Column","text":"

      Creating a data generator for a CSV file where there are multiple records per column values.

      "},{"location":"setup/guide/scenario/records-per-column/#requirements","title":"Requirements","text":"
      • 5 minutes
      • Git
      • Gradle
      • Docker
      "},{"location":"setup/guide/scenario/records-per-column/#get-started","title":"Get Started","text":"

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      git clone git@github.com:data-catering/data-caterer-example.git\n
      "},{"location":"setup/guide/scenario/records-per-column/#plan-setup","title":"Plan Setup","text":"

      Create a new Java or Scala class.

      • Java: src/main/java/io/github/datacatering/plan/MyMultipleRecordsPerColJavaPlan.java
      • Scala: src/main/scala/io/github/datacatering/plan/MyMultipleRecordsPerColPlan.scala

      Make sure your class extends PlanRun.

      JavaScala
      import io.github.datacatering.datacaterer.java.api.PlanRun;\n...\n\npublic class MyMultipleRecordsPerColJavaPlan extends PlanRun {\n{\nvar transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"full_name\"),\nfield().name(\"amount\").type(DoubleType.instance()).min(1).max(100),\nfield().name(\"time\").type(TimestampType.instance()).min(java.sql.Date.valueOf(\"2022-01-01\")),\nfield().name(\"date\").type(DateType.instance()).sql(\"DATE(time)\")\n);\n\nvar config = configuration()\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n.enableUniqueCheck(true);\n\nexecute(config, transactionTask);\n}\n}\n
      import io.github.datacatering.datacaterer.api.PlanRun\n...\n\nclass MyMultipleRecordsPerColPlan extends PlanRun {\n\nval transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"), field.name(\"full_name\").expression(\"#{Name.name}\"), field.name(\"amount\").`type`(DoubleType.instance).min(1).max(100),\nfield.name(\"time\").`type`(TimestampType.instance).min(java.sql.Date.valueOf(\"2022-01-01\")), field.name(\"date\").`type`(DateType.instance).sql(\"DATE(time)\")\n)\n\nval config = configuration\n.generatedReportsFolderPath(\"/opt/app/data/report\")\n\nexecute(config, transactionTask)\n}\n
      "},{"location":"setup/guide/scenario/records-per-column/#record-count","title":"Record Count","text":"

      By default, tasks will generate 1000 records. You can alter this value via the count configuration which can be applied to individual tasks. For example, in Scala, csv(...).count(count.records(100)) to generate only 100 records.

      "},{"location":"setup/guide/scenario/records-per-column/#records-per-column","title":"Records Per Column","text":"

      In this scenario, for a given account_id, full_name, there should be multiple records for it as we want to simulate a customer having multiple transactions. We can achieve this through defining the number of records to generate in the count function.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumn(5, \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumn(5, \"account_id\", \"full_name\"))\n

      This will generate 1000 * 5 = 5000 records as the default number of records is set (1000) and per account_id, full_name from the initial 1000 records, 5 records will be generated.

      "},{"location":"setup/guide/scenario/records-per-column/#random-records-per-column","title":"Random Records Per Column","text":"

      Generating 5 records per column is okay but still not quite reflective of the real world. Sometimes, people have accounts with no transactions in them, or they could have many. We can accommodate for this via defining a random number of records per column.

      JavaScala
      var transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map.of(\"header\", \"true\"))\n.schema(\n...\n)\n.count(count().recordsPerColumnGenerator(generator().min(0).max(5), \"account_id\", \"full_name\"));\n
      val transactionTask = csv(\"customer_transactions\", \"/opt/app/data/customer/transaction\", Map(\"header\" -> \"true\"))\n.schema(\n...\n)\n.count(count.recordsPerColumnGenerator(generator.min(0).max(5), \"account_id\", \"full_name\"))\n

      Here we set the minimum number of records per column to be 0 and the maximum to 5. This will follow a uniform distribution so the average number of records per account is 2.5. We could also define other metadata, just like we did with fields, when defining the generator. For example, we could set standardDeviation and mean for the number of records generated per column to follow a normal distribution.

      "},{"location":"setup/guide/scenario/records-per-column/#run","title":"Run","text":"

      Let's try run.

      #clean up old data\nrm -rf docker/sample/customer/account\n./run.sh\n#input class MyMultipleRecordsPerColJavaPlan or MyMultipleRecordsPerColPlan\n#after completing\nhead docker/sample/customer/transaction/part-00000*\n

      It should look something like this.

      ACC29117767,Willodean Sauer\nACC29117767,Willodean Sauer,84.99145871948083,2023-05-14T09:55:51.439Z,2023-05-14\nACC29117767,Willodean Sauer,58.89345733567232,2022-11-22T07:38:20.143Z,2022-11-22\n

      You can now look to play around with other count configurations found here.

      "},{"location":"setup/report/alert/","title":"Alert","text":"

      Alerts can be configured to help users receive feedback from their data testing results. Currently, Data Caterer supports Slack for alerts.

      "},{"location":"setup/report/alert/#slack","title":"Slack","text":"

      Define a Slack token and one or more Slack channels that will receive an alert like the below.

      JavaScala
      var conf = configuration()\n.slackAlertToken(\"abc123\")                                //use appropriate Slack token (usually bot token)\n.slackAlertChannels(\"#test-alerts\", \"#pre-prod-testing\"); //define Slack channel(s) to receive alerts on\n\nexecute(conf, ...);\n
      val conf = configuration\n.slackAlertToken(\"abc123\")                                //use appropriate Slack token (usually bot token)\n.slackAlertChannels(\"#test-alerts\", \"#pre-prod-testing\")  //define Slack channel(s) to receive alerts on\n\nexecute(conf, ...)\n
      "},{"location":"setup/report/html-report/","title":"Report","text":"

      Data Caterer can be configured to produce a report of the data generated to help users understand what was run, how much data was generated, where it was generated, validation results and any associated metadata.

      "},{"location":"setup/report/html-report/#sample","title":"Sample","text":"

      Once run, it will produce a report like this.

      "},{"location":"setup/validation/basic-validation/","title":"Basic Validations","text":"

      Run validations on a column to ensure the values adhere to your requirement. Can be set to complex validation logic via SQL expression as well if needed (see here).

      "},{"location":"setup/validation/basic-validation/#equal","title":"Equal","text":"

      Ensure all data in column is equal to certain value. Value can be of any data type. Can use isEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"year\").isEqual(2021),\nvalidation().col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      validation.col(\"year\").isEqual(2021),\nvalidation.col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"year == 2021\"\n
      "},{"location":"setup/validation/basic-validation/#not-equal","title":"Not Equal","text":"

      Ensure all data in column is not equal to certain value. Value can be of any data type. Can use isNotEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"year\").isNotEqual(2021),\nvalidation().col(\"year\").isNotEqualCol(\"YEAR(date)\"),\n
      validation.col(\"year\").isNotEqual(2021)\nvalidation.col(\"year\").isEqualCol(\"YEAR(date)\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"year != 2021\"\n
      "},{"location":"setup/validation/basic-validation/#null","title":"Null","text":"

      Ensure all data in column is null.

      JavaScalaYAML
      validation().col(\"year\").isNull()\n
      validation.col(\"year\").isNull\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ISNULL(year)\"\n
      "},{"location":"setup/validation/basic-validation/#not-null","title":"Not Null","text":"

      Ensure all data in column is not null.

      JavaScalaYAML
      validation().col(\"year\").isNotNull()\n
      validation.col(\"year\").isNotNull\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ISNOTNULL(year)\"\n
      "},{"location":"setup/validation/basic-validation/#contains","title":"Contains","text":"

      Ensure all data in column is contains certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"name\").contains(\"peter\")\n
      validation.col(\"name\").contains(\"peter\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"CONTAINS(name, 'peter')\"\n
      "},{"location":"setup/validation/basic-validation/#not-contains","title":"Not Contains","text":"

      Ensure all data in column does not contain certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"name\").notContains(\"peter\")\n
      validation.col(\"name\").notContains(\"peter\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!CONTAINS(name, 'peter')\"\n
      "},{"location":"setup/validation/basic-validation/#unique","title":"Unique","text":"

      Ensure all data in column is unique.

      JavaScalaYAML
      validation().unique(\"account_id\", \"name\")\n
      validation.unique(\"account_id\", \"name\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- unique: [\"account_id\", \"name\"]\n
      "},{"location":"setup/validation/basic-validation/#less-than","title":"Less Than","text":"

      Ensure all data in column is less than certain value. Can use lessThanCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").lessThan(100),\nvalidation().col(\"amount\").lessThanCol(\"balance + 1\"),\n
      validation.col(\"amount\").lessThan(100),\nvalidation.col(\"amount\").lessThanCol(\"balance + 1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"amount < balance + 1\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-or-equal","title":"Less Than Or Equal","text":"

      Ensure all data in column is less than or equal to certain value. Can use lessThanOrEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").lessThanOrEqual(100),\nvalidation().col(\"amount\").lessThanOrEqualCol(\"balance + 1\"),\n
      validation.col(\"amount\").lessThanOrEqual(100),\nvalidation.col(\"amount\").lessThanCol(\"balance + 1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount <= 100\"\n- expr: \"amount <= balance + 1\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than","title":"Greater Than","text":"

      Ensure all data in column is greater than certain value. Can use greaterThanCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").greaterThan(100),\nvalidation().col(\"amount\").greaterThanCol(\"balance\"),\n
      validation.col(\"amount\").greaterThan(100),\nvalidation.col(\"amount\").greaterThanCol(\"balance\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount > 100\"\n- expr: \"amount > balance\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-or-equal","title":"Greater Than Or Equal","text":"

      Ensure all data in column is greater than or equal to certain value. Can use greaterThanOrEqualCol to define SQL expression that can reference other columns.

      JavaScalaYAML
      validation().col(\"amount\").greaterThanOrEqual(100),\nvalidation().col(\"amount\").greaterThanOrEqualCol(\"balance\"),\n
      validation.col(\"amount\").greaterThanOrEqual(100),\nvalidation.col(\"amount\").greaterThanOrEqualCol(\"balance\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount >= 100\"\n- expr: \"amount >= balance\"\n
      "},{"location":"setup/validation/basic-validation/#between","title":"Between","text":"

      Ensure all data in column is between two values. Can use betweenCol to define SQL expression that references other columns.

      JavaScalaYAML
      validation().col(\"amount\").between(100, 200),\nvalidation().col(\"amount\").betweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      validation.col(\"amount\").between(100, 200),\nvalidation.col(\"amount\").betweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount BETWEEN 100 AND 200\"\n- expr: \"amount BETWEEN balance * 0.9 AND balance * 1.1\"\n
      "},{"location":"setup/validation/basic-validation/#not-between","title":"Not Between","text":"

      Ensure all data in column is not between two values. Can use notBetweenCol to define SQL expression that references other columns.

      JavaScalaYAML
      validation().col(\"amount\").notBetween(100, 200),\nvalidation().col(\"amount\").notBetweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      validation.col(\"amount\").notBetween(100, 200)\nvalidation.col(\"amount\").notBetweenCol(\"balance * 0.9\", \"balance * 1.1\"),\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"amount NOT BETWEEN 100 AND 200\"\n- expr: \"amount NOT BETWEEN balance * 0.9 AND balance * 1.1\"\n
      "},{"location":"setup/validation/basic-validation/#in","title":"In","text":"

      Ensure all data in column is in set of defined values.

      JavaScalaYAML
      validation().col(\"status\").in(\"open\", \"closed\")\n
      validation.col(\"status\").in(\"open\", \"closed\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"status IN ('open', 'closed')\"\n
      "},{"location":"setup/validation/basic-validation/#matches","title":"Matches","text":"

      Ensure all data in column matches certain regex expression.

      JavaScalaYAML
      validation().col(\"account_id\").matches(\"ACC[0-9]{8}\")\n
      validation.col(\"account_id\").matches(\"ACC[0-9]{8}\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"REGEXP(account_id, ACC[0-9]{8})\"\n
      "},{"location":"setup/validation/basic-validation/#not-matches","title":"Not Matches","text":"

      Ensure all data in column does not match certain regex expression.

      JavaScalaYAML
      validation().col(\"account_id\").notMatches(\"^acc.*\")\n
      validation.col(\"account_id\").notMatches(\"^acc.*\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!REGEXP(account_id, '^acc.*')\"\n
      "},{"location":"setup/validation/basic-validation/#starts-with","title":"Starts With","text":"

      Ensure all data in column starts with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").startsWith(\"ACC\")\n
      validation.col(\"account_id\").startsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"STARTSWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#not-starts-with","title":"Not Starts With","text":"

      Ensure all data in column does not start with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").notStartsWith(\"ACC\")\n
      validation.col(\"account_id\").notStartsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!STARTSWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#ends-with","title":"Ends With","text":"

      Ensure all data in column ends with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").endsWith(\"ACC\")\n
      validation.col(\"account_id\").endsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"ENDWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#not-ends-with","title":"Not Ends With","text":"

      Ensure all data in column does not end with certain string. Column has to have type string.

      JavaScalaYAML
      validation().col(\"account_id\").notEndsWith(\"ACC\")\n
      validation.col(\"account_id\").notEndsWith(\"ACC\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"!ENDWITH(account_id, 'ACC')\"\n
      "},{"location":"setup/validation/basic-validation/#size","title":"Size","text":"

      Ensure all data in column has certain size. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").size(5)\n
      validation.col(\"transactions\").size(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions, 5)\"\n
      "},{"location":"setup/validation/basic-validation/#not-size","title":"Not Size","text":"

      Ensure all data in column does not have certain size. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").notSize(5)\n
      validation.col(\"transactions\").notSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) != 5\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-size","title":"Less Than Size","text":"

      Ensure all data in column has size less than certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").lessThanSize(5)\n
      validation.col(\"transactions\").lessThanSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) < 5\"\n
      "},{"location":"setup/validation/basic-validation/#less-than-or-equal-size","title":"Less Than Or Equal Size","text":"

      Ensure all data in column has size less than or equal to certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").lessThanOrEqualSize(5)\n
      validation.col(\"transactions\").lessThanOrEqualSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) <= 5\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-size","title":"Greater Than Size","text":"

      Ensure all data in column has size greater than certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").greaterThanSize(5)\n
      validation.col(\"transactions\").greaterThanSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) > 5\"\n
      "},{"location":"setup/validation/basic-validation/#greater-than-or-equal-size","title":"Greater Than Or Equal Size","text":"

      Ensure all data in column has size greater than or equal to certain value. Column has to have type array or map.

      JavaScalaYAML
      validation().col(\"transactions\").greaterThanOrEqualSize(5)\n
      validation.col(\"transactions\").greaterThanOrEqualSize(5)\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"SIZE(transactions) >= 5\"\n
      "},{"location":"setup/validation/basic-validation/#luhn-check","title":"Luhn Check","text":"

      Ensure all data in column passes luhn check. Luhn check is used to validate credit card numbers and certain identification numbers (see here for more details).

      JavaScalaYAML
      validation().col(\"credit_card\").luhnCheck()\n
      validation.col(\"credit_card\").luhnCheck\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"LUHN_CHECK(credit_card)\"\n
      "},{"location":"setup/validation/basic-validation/#has-type","title":"Has Type","text":"

      Ensure all data in column has certain data type.

      JavaScalaYAML
      validation().col(\"id\").hasType(\"string\")\n
      validation.col(\"id\").hasType(\"string\")\n
      ---\nname: \"account_checks\"\ndataSources:\n...\nvalidations:\n- expr: \"TYPEOF(id) == 'string'\"\n
      "},{"location":"setup/validation/basic-validation/#expression","title":"Expression","text":"

      Ensure all data in column adheres to SQL expression defined that returns back a boolean. You can define complex logic in here that could combine multiple columns.

      For example, CASE WHEN status == 'open' THEN balance > 0 ELSE balance == 0 END would check all rows with status open to have balance greater than 0, otherwise, check the balance is 0.

      JavaScalaYAML
      var csvTxns = csv(\"transactions\", \"/tmp/csv\", Map.of(\"header\", \"true\"))\n.validations(\nvalidation().expr(\"amount < 100\"),\nvalidation().expr(\"year == 2021\").errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation().expr(\"REGEXP_LIKE(name, 'Peter .*')\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n);\n\nvar conf = configuration().enableValidation(true);\n
      val csvTxns = csv(\"transactions\", \"/tmp/csv\", Map(\"header\" -> \"true\"))\n.validations(\nvalidation.expr(\"amount < 100\"),\nvalidation.expr(\"year == 2021\").errorThreshold(0.1),  //equivalent to if error percentage is > 10%, then fail\nvalidation.expr(\"REGEXP_LIKE(name, 'Peter .*')\").errorThreshold(200)  //equivalent to if number of errors is > 200, then fail\n)\n\nval conf = configuration.enableValidation(true)\n
      ---\nname: \"account_checks\"\ndataSources:\ntransactions:\noptions:\npath: \"/tmp/csv\"\nvalidations:\n- expr: \"amount < 100\"\n- expr: \"year == 2021\"\nerrorThreshold: 0.1   #equivalent to if error percentage is > 10%, then fail\n- expr: \"REGEXP_LIKE(name, 'Peter .*')\"\nerrorThreshold: 200   #equivalent to if number of errors is > 200, then fail\ndescription: \"Should be lots of Peters\"\n\n#enableValidation inside application.conf\n
      "},{"location":"setup/validation/column-name-validation/","title":"Column Name Validations","text":"

      Run validations on the column names to check for column name count of existence of column names.

      "},{"location":"setup/validation/column-name-validation/#count-equal","title":"Count Equal","text":"

      Ensure column name count is equal to certain number.

      JavaScala
      validation().columnNames().countEqual(3)\n
      validation.columnNames.countEqual(3)\n
      "},{"location":"setup/validation/column-name-validation/#not-equal","title":"Not Equal","text":"

      Ensure column name count is between two numbers.

      JavaScala
      validation().columnNames().countBetween(10, 12)\n
      validation.columnNames.countBetween(10, 12)\n
      "},{"location":"setup/validation/column-name-validation/#match-order","title":"Match Order","text":"

      Ensure all column names match particular ordering and is complete.

      JavaScala
      validation().columnNames().matchOrder(\"account_id\", \"amount\", \"name\")\n
      validation.columnNames.matchOrder(\"account_id\", \"amount\", \"name\")\n
      "},{"location":"setup/validation/column-name-validation/#match-set","title":"Match Set","text":"

      Ensure column names contains set of expected names. Order is not checked.

      JavaScala
      validation().columnNames().matchSet(\"account_id\", \"first_name\")\n
      validation.columnNames.matchSet(\"account_id\", \"first_name\")\n
      "},{"location":"setup/validation/external-source-validation/","title":"External Source Validations","text":"

      Use validations that are defined in external sources such as Great Expectations or OpenMetadata. This allows you to generate data for your upstream data sources and validate your pipelines based on the same rules that would be applied in production.

      Info

      Retrieving data validations from an external source is a paid feature. Try the free trial here.

      "},{"location":"setup/validation/external-source-validation/#supported-sources","title":"Supported Sources","text":"Source Support OpenMetadata Great Expectations DBT Constraints SodaCL MonteCarlo"},{"location":"setup/validation/external-source-validation/#openmetadata","title":"OpenMetadata","text":"

      Use data quality rules defined from OpenMetadata to execute over dataset.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(metadataSource().openMetadata(\n\"http://host.docker.internal:8585/api\",\nConstants.OPEN_METADATA_AUTH_TYPE_OPEN_METADATA(),\nMap.of(\nConstants.OPEN_METADATA_JWT_TOKEN(), \"abc123\",\nConstants.OPEN_METADATA_TABLE_FQN(), \"sample_data.ecommerce_db.shopify.raw_customer\"\n)\n));\n\nvar conf = configuration().enableGenerateValidations(true);\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(metadataSource.openMetadata(\n\"http://host.docker.internal:8585/api\",\nOPEN_METADATA_AUTH_TYPE_OPEN_METADATA,\nMap(\nOPEN_METADATA_JWT_TOKEN -> \"abc123\", //find under settings/bots/ingestion-bot/token\nOPEN_METADATA_TABLE_FQN -> \"sample_data.ecommerce_db.shopify.raw_customer\"\n)\n))\n\nval conf = configuration.enableGenerateValidations(true)\n
      "},{"location":"setup/validation/external-source-validation/#great-expectations","title":"Great Expectations","text":"

      Use data quality rules defined from OpenMetadata to execute over dataset.

      JavaScala
      var jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(metadataSource().greatExpectations(\"great-expectations/taxi-expectations.json\");\n\nvar conf = configuration().enableGenerateValidations(true);\n
      val jsonTask = json(\"my_json\", \"/opt/app/data/json\")\n.validations(metadataSource.greatExpectations(\"great-expectations/taxi-expectations.json\")\n\nval conf = configuration.enableGenerateValidations(true)\n
      "},{"location":"setup/validation/group-by-validation/","title":"Group By Validation","text":"

      If you want to run aggregations based on a particular set of columns or just the whole dataset, you can do so via group by validations. An example would be checking that the sum of amount is less than 1000 per account_id, year. The validations applied can be one of the validations from the basic validation set found here.

      "},{"location":"setup/validation/group-by-validation/#record-count","title":"Record count","text":"

      Check the number of records across the whole dataset.

      JavaScala
      validation().groupBy().count().lessThan(1000)\n
      validation.groupBy().count().lessThan(1000)\n
      "},{"location":"setup/validation/group-by-validation/#record-count-per-group","title":"Record count per group","text":"

      Check the number of records for each group.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").count().lessThan(10)\n
      validation.groupBy(\"account_id\", \"year\").count().lessThan(10)\n
      "},{"location":"setup/validation/group-by-validation/#sum","title":"Sum","text":"

      Check the sum of a columns values for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").sum(\"amount\").lessThan(1000)\n
      validation.groupBy(\"account_id\", \"year\").sum(\"amount\").lessThan(1000)\n
      "},{"location":"setup/validation/group-by-validation/#count","title":"Count","text":"

      Check the count for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").count(\"amount\").lessThan(10)\n
      validation.groupBy(\"account_id\", \"year\").count(\"amount\").lessThan(10)\n
      "},{"location":"setup/validation/group-by-validation/#min","title":"Min","text":"

      Check the min for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").min(\"amount\").greaterThan(0)\n
      validation.groupBy(\"account_id\", \"year\").min(\"amount\").greaterThan(0)\n
      "},{"location":"setup/validation/group-by-validation/#max","title":"Max","text":"

      Check the max for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").max(\"amount\").lessThanOrEqual(100)\n
      validation.groupBy(\"account_id\", \"year\").max(\"amount\").lessThanOrEqual(100)\n
      "},{"location":"setup/validation/group-by-validation/#average","title":"Average","text":"

      Check the average for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").avg(\"amount\").between(40, 60)\n
      validation.groupBy(\"account_id\", \"year\").avg(\"amount\").between(40, 60)\n
      "},{"location":"setup/validation/group-by-validation/#standard-deviation","title":"Standard deviation","text":"

      Check the standard deviation for each group adheres to validation.

      JavaScala
      validation().groupBy(\"account_id\", \"year\").stddev(\"amount\").between(0.5, 0.6)\n
      validation.groupBy(\"account_id\", \"year\").stddev(\"amount\").between(0.5, 0.6)\n
      "},{"location":"setup/validation/upstream-data-source-validation/","title":"Upstream Data Source Validation","text":"

      If you want to run data validations based on data generated or data from another data source, you can use the upstream data source validations. An example would be generating a Parquet file that gets ingested by a job and inserted into Postgres. The validations can then check for each account_id generated in the Parquet, it exists in account_number column in Postgres. The validations can be chained with basic and group by validations or even other upstream data sources, to cover any complex validations.

      "},{"location":"setup/validation/upstream-data-source-validation/#basic-join","title":"Basic join","text":"

      Join across datasets by particular columns. Then run validations on the joined dataset. You will notice that the data source name is appended onto the column names when joined (i.e. my_first_json_customer_details), to ensure column names do not clash and make it obvious which columns are being validated.

      In the below example, we check that the for the same account_id, then customer_details.name in the my_first_json dataset should equal to the name column in the my_second_json.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)                   //upstream data generation task is `firstJsonTask`\n.joinColumns(\"account_id\")                               //use `account_id` column in both datasets to join corresponding records (outer join by default)\n.withValidation(\nvalidation().col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")                                  //validate the name in `my_second_json` is equal to `customer_details.name` in `my_first_json` when the `account_id` matches\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)                   //upstream data generation task is `firstJsonTask`\n.joinColumns(\"account_id\")                             //use `account_id` column in both datasets to join corresponding records (outer join by default)\n.withValidation(\nvalidation.col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")                                //validate the name in `my_second_json` is equal to `customer_details.name` in `my_first_json` when the `account_id` matches\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#join-expression","title":"Join expression","text":"

      Define join expression to link two datasets together. This can be any SQL expression that returns a boolean value. Useful in situations where join is based on transformations or complex logic.

      In the below example, we have to use CONCAT SQL function to combine 'ACC' and account_number to join with account_id column in my_first_json dataset.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinExpr(\"my_first_json_account_id == CONCAT('ACC', account_number)\")  //generic SQL expression that returns a boolean\n.withValidation(\nvalidation().col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)\n.joinExpr(\"my_first_json_account_id == CONCAT('ACC', account_number)\")  //generic SQL expression that returns a boolean\n.withValidation(\nvalidation.col(\"my_first_json_customer_details.name\")\n.isEqualCol(\"name\")\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#different-join-type","title":"Different join type","text":"

      By default, an outer join is used to gather columns from both datasets together for validation. But there may be scenarios where you want to control the join type.

      Possible join types include:

      • inner
      • outer, full, fullouter, full_outer
      • leftouter, left, left_outer
      • rightouter, right, right_outer
      • leftsemi, left_semi, semi
      • leftanti, left_anti, anti
      • cross

      In the example below, we do an anti join by column account_id and check if there are no records. This essentially checks that all account_id's from my_second_json exist in my_first_json. The second validation also does something similar but does an outer join (by default) and checks that the joined dataset has 30 records.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.joinType(\"anti\")\n.withValidation(validation().count().isEqual(0)),\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation().count().isEqual(30))\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.joinType(\"anti\")\n.withValidation(validation.count().isEqual(0)),\nvalidation.upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation.count().isEqual(30))\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#join-then-group-by-validation","title":"Join then group by validation","text":"

      We can apply aggregate or group by validations to the resulting joined dataset as the withValidation method accepts any type of validation.

      Here we group by account_id, my_first_json_balance to check that when the amount field is summed up per group, it is between 0.8 and 1.2 times the balance.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"balance\").type(DoubleType.instance()).min(10).max(1000),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n);\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation().groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"balance\").`type`(DoubleType).min(10).max(1000),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation.groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n)\n)\n
      "},{"location":"setup/validation/upstream-data-source-validation/#chained-validations","title":"Chained validations","text":"

      Given that the withValidation method accepts any other type of validation, you can chain other upstream data sources with it. Here we will show a third upstream data source being checked to ensure 30 records exists after joining them together by account_id.

      JavaScala
      var firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield().name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield().name(\"balance\").type(DoubleType.instance()).min(10).max(1000),\nfield().name(\"customer_details\")\n.schema(\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n)\n.count(count().records(10));\n\nvar thirdJsonTask = json(\"my_third_json\", \"/tmp/data/third_json\")\n.schema(\nfield().name(\"account_id\"),\nfield().name(\"amount\").type(IntegerType.instance()).min(1).max(100),\nfield().name(\"name\").expression(\"#{Name.name}\")\n)\n.count(count().records(10));\n\nvar secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation().upstreamData(firstJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(\nvalidation().upstreamData(thirdJsonTask)\n.joinColumns(\"account_id\")\n.withValidation(validation().count().isEqual(30))\n)\n);\n
      val firstJsonTask = json(\"my_first_json\", \"/tmp/data/first_json\")\n.schema(\nfield.name(\"account_id\").regex(\"ACC[0-9]{8}\"),\nfield.name(\"balance\").`type`(DoubleType).min(10).max(1000),\nfield.name(\"customer_details\")\n.schema(\nfield.name(\"name\").expression(\"#{Name.name}\")\n)\n)\n.count(count.records(10))\n\nval thirdJsonTask = json(\"my_third_json\", \"/tmp/data/third_json\")\n.schema(\nfield.name(\"account_id\"),\nfield.name(\"amount\").`type`(IntegerType).min(1).max(100),\nfield.name(\"name\").expression(\"#{Name.name}\"),\n)\n.count(count.records(10))\n\nval secondJsonTask = json(\"my_second_json\", \"/tmp/data/second_json\")\n.validations(\nvalidation.upstreamData(firstJsonTask).joinColumns(\"account_id\")\n.withValidation(\nvalidation.groupBy(\"account_id\", \"my_first_json_balance\")\n.sum(\"amount\")\n.betweenCol(\"my_first_json_balance * 0.8\", \"my_first_json_balance * 1.2\")\n),\n)\n

      Can check out a full example here for more details.

      "},{"location":"use-case/business-value/","title":"Business Value","text":"

      Below is a list of the business related benefits from using Data Caterer which may be applicable for your use case.

      Problem Data Caterer Solution Resources Effects Reliable test data creation - Profile existing data- Create scenarios- Generate data Software Engineers, QA, Testers Cost reduction in labor, more time spent on development, more bugs caught before production Faster development cycles - Generate data in local, test, UAT, pre-prod- Run different scenarios Software Engineers, QA, Testers More defects caught in lower environments, features pushed to production faster, common framework used across all environments Data compliance - Profiling existing data- Generate based on metadata- No complex masking- No production data used in lower environments Audit and compliance No chance for production data breaches Storage costs - Delete generated data- Test specific scenarios Infrastructure Lower data storage costs, less time spent on data management and clean up Schema evolution - Create metadata from data sources- Generate data based off fresh metadata Software Engineers, QA, Testers Less time spent altering tests due to schema changes, ease of use between environments and application versions"},{"location":"use-case/comparison/","title":"Comparison to similar tools","text":"

      I have tried to include all the companies found in the list here from Mostly AI blog post and used information that is publicly available.

      The companies/products not shown below either have:

      • a website with insufficient information about the technology side of data generation/validation
      • no/little documentation
      • don't have a free, no sign-up version of their app to use
      "},{"location":"use-case/comparison/#data-generation","title":"Data Generation","text":"Tool Description Cost Pros Cons Data Catering Scala based data generation and validation tool via metadata Check all prices here, all in AUD$15 per month individual$200 per month <100 employees$500 per month 100-1,000 employees$2,000 per month >1,000 employees Data generation and validation Batch and event generation Maintain referential integrity Scala/Java SDK Customisable scenarios and validations Open core Metadata driven Report generation Use validation rules from existing tools Data clean up No UI No load testing metrics No alerting No validation of real time data sources Clearbox AI Python based data generation tool via ML Unclear Python SDK UI interface Detect private data Report generation Batch data only No data clean up Limited/no documentation Curiosity Software Platform solution for test data management Unclear Extensive documentation Generate data based off test cases UI interface Web/API/UI/mobile testing No quick start No SDK Many components that may not be required No event generation support DataCebo Synthetic Data Vault Python based data generation tool via ML Unclear Python SDK Report generation Data quality checks Business logic constraints No data connection support No data clean up No foreign key support Datafaker Realistic data generation library Free SDK for many languages Simple, easy to use Extensible Open source Generate realistic values No data connection support No data clean up No validation No foreign key support DBLDatagen Python based data generation tool Free Python SDK Open source Good documentation Customisable scenarios Customisable column generation Generate from existing data/schemas Plugin third-party libraries Limited support if issues Code required No data clean up No data validation Gatling HTTP API load testing tool Free (Open Source)Gatling Enterprise, usage based, starts from \u20ac89 per month, 1 user, 6.25 hours of testing Kotlin, Java & Scala SDK Widely used Open source Clear documentation Extensive testing/validation support Customisable scenarios Report generation Only supports HTTP, JMS and JDBC No data clean up Data feeders not based off metadata Gretel Python based data generation tool via ML Usage based, starts from $295 per month, $2.20 per credit, assumed USD CLI & Python SDK UI interface Training and re-use of models Detect private data Customisable scenarios Batch data only No relationships between data sources Only simple foreign key relations defined No data clean up Charge by usage Howso Python based data generation tool via ML Unclear Python SDK Playground to try Open source library Customisable scenarios No support for data sources No data validation No data clean up Mostly AI Python based data generation tool via ML Usage based, Enterprise 1 user, 100 columns, 100K rows $3,100 per month, assumed USD Report generation Non-technical users can use UI Customisable scenarios Charge by usage Batch data only No data clean up Confusing use of 'smart select' for multiple foreign keys Limited custom column generation logic Multiple deployment components No SDK Octopize Python based data generation tool via ML Unclear Python & R SDK Report generation API for metadata Customisable scenarios Input data source is only CSV Multiple manual steps before starting Quickstart is not a quickstart Documentation lacks code examples Synthesized Python based data generation tool via ML Unclear CLI & Python SDK API for metadata IDE setup Data quality checks Not sure what is SDK & TDK Charge by usage No report of what was generated No relationships between data sources Tonic Platform solution for generating data Unclear UI interface Good documentation Detect private data Support for encrypted columns Report generation Alerting Batch data only Multiple deployment components No relationships between data sources No data validation No data clean up No SDK (only API) Difficult to embed complex business logic YData Python based data generation tool via ML. Platform solution as well Unclear Python SDK Open source Detect private data Compare datasets Report generation No data connection support Batch data only No data clean up Separate data generation and data validation No foreign key support"},{"location":"use-case/comparison/#use-of-ml-models","title":"Use of ML models","text":"

      You may notice that the majority of data generators use machine learning (ML) models to learn from your existing datasets to generate new data. Below are some pros and cons to the approach.

      Pros

      • Simple setup
      • Ability to reproduce complex logic
      • Flexible to accept all types of data

      Cons

      • Long time for model learning
      • Black box of logic
      • Maintain, store and update of ML models
      • Restriction on input data lengths
      • May not maintain referential integrity
      • Require deeper understanding of ML models for fine-tuning
      • Accuracy may be worse than non-ML models
      "},{"location":"use-case/roadmap/","title":"Roadmap","text":"

      Items below summarise the roadmap of Data Caterer. As each task gets completed, it will be documented and linked.

      Feature Description Sub Tasks Data source support Batch or real time data sources that can be added to Data Caterer. Support data sources that users want - AWS, GCP and Azure related data services ( cloud storage)- Deltalake- RabbitMQ- ActiveMQ- MongoDB- Elasticsearch- Snowflake- Databricks- Pulsar Metadata discovery Allow for schema and data profiling from external metadata sources - HTTP (OpenAPI spec)- JMS- Read from samples- OpenLineage metadata (Marquez)- OpenMetadata- ODCS (Open Data Contract Standard)- Amundsen- Datahub- Solace Event Portal- Airflow- DBT Developer API Scala/Java interface for developers/testers to create data generation and validation tasks - Scala- Java Report generation Generate a report that summarises the data generation or validation results - Report for data generated and validation rules UI portal Allow users to access a UI to input data generation or validation tasks. Also be able to view report results - Metadata stored in database- Store data generation/validation run information in file/database Integration with data validation tools Derive data validation rules from existing data validation tools - Great Expectation- DBT constraints- SodaCL- MonteCarlo- OpenMetadata Data validation rule suggestions Based on metadata, generate data validation rules appropriate for the dataset - Suggest basic data validations (yet to document) Wait conditions before data validation Define certain conditions to be met before starting data validations - Webhook- File exists- Data exists via SQL expression- Pause Validation types Ability to define simple/complex data validations - Basic validations- Aggregates (sum of amount per account is > 500)- Ordering (transactions are ordered by date)- Relationship (at least one account entry in history table per account in accounts table)- Data profile (how close the generated data profile is compared to the expected data profile)- Column name (check column count, column names, ordering) Data generation record count Generate scenarios where there are one to many, many to many situations relating to record count. Also ability to cover all edge cases or scenarios - Cover all possible cases (i.e. record for each combination of oneOf values, positive/negative values etc.)- Ability to override edge cases Alerting When tasks have completed, ability to define alerts based on certain conditions - Slack- Email Metadata enhancements Based on data profiling or inference, can add to existing metadata - PII detection (can integrate with Presidio)- Relationship detection across data sources- SQL generation- Ordering information Data cleanup Ability to clean up generated data - Clean up generated data- Clean up data in consumer data sinks- Clean up data from real time sources (i.e. DELETE HTTP endpoint, delete events in JMS) Trial version Trial version of the full app for users to test out all the features - Trial app to try out all features Code generation Based on metadata or existing classes, code for data generation and validation could be generated - Code generation- Schema generation from Scala/Java class Real time response data validations Ability to define data validations based on the response from real time data sources (e.g. HTTP response) - HTTP response data validation"},{"location":"use-case/blog/shift-left-data-quality/","title":"Shifting Data Quality Left with Data Catering","text":""},{"location":"use-case/blog/shift-left-data-quality/#empowering-proactive-data-management","title":"Empowering Proactive Data Management","text":"

      In the ever-evolving landscape of data-driven decision-making, ensuring data quality is non-negotiable. Traditionally, data quality has been a concern addressed late in the development lifecycle, often leading to reactive measures and increased costs. However, a paradigm shift is underway with the adoption of a \"shift left\" approach, placing data quality at the forefront of the development process.

      "},{"location":"use-case/blog/shift-left-data-quality/#today","title":"Today","text":"
      graph LR\n  subgraph badQualityData[<b>Manually generated data, limited data scenarios, fragmented testing tools</b>]\n  local[<b>Local</b>\\nManual test, unit test]\n  dev[<b>Dev</b>\\nManual test, integration test]\n  stg[<b>Staging</b>\\nSanity checks]\n  end\n\n  subgraph qualityData[<b>Reliable data, the true test</b>]\n  prod[<b>Production</b>\\nData quality checks, monitoring, observaibility]\n  end\n\n  style badQualityData fill:#d9534f,fill-opacity:0.7\n  style qualityData fill:#5cb85c,fill-opacity:0.7\n\n  local --> dev\n  dev --> stg\n  stg --> prod
      "},{"location":"use-case/blog/shift-left-data-quality/#with-data-caterer","title":"With Data Caterer","text":"
      graph LR\n  subgraph qualityData[<b>Reliable data anywhere, common testing tool across all data sources</b>]\n  direction LR\n  local[<b>Local</b>\\nManual test, unit test]\n  dev[<b>Dev</b>\\nManual test, integration test]\n  stg[<b>Staging</b>\\nSanity checks]\n  prod[<b>Production</b>\\nData quality checks, monitoring, observaibility]\n  end\n\n  style qualityData fill:#5cb85c,fill-opacity:0.7\n\n  local --> dev\n  dev --> stg\n  stg --> prod
      "},{"location":"use-case/blog/shift-left-data-quality/#understanding-the-shift-left-approach","title":"Understanding the Shift Left Approach","text":"

      \"Shift left\" is a philosophy that advocates for addressing tasks and concerns earlier in the development lifecycle. Applied to data quality, it means tackling data issues as early as possible, ideally during the development and testing phases. This approach aims to catch data anomalies, inaccuracies, or inconsistencies before they propagate through the system, reducing the likelihood of downstream errors.

      "},{"location":"use-case/blog/shift-left-data-quality/#data-caterer-the-catalyst-for-shifting-left","title":"Data Caterer: The Catalyst for Shifting Left","text":"

      Enter Data Caterer, a metadata-driven data generation and validation tool designed to empower organizations in shifting data quality left. By incorporating Data Caterer into the early stages of development, teams can proactively test complex data flows, validate data sources, and ensure data quality before it reaches downstream processes.

      "},{"location":"use-case/blog/shift-left-data-quality/#key-advantages-of-shifting-data-quality-left-with-data-caterer","title":"Key Advantages of Shifting Data Quality Left with Data Caterer","text":"
      1. Early Issue Detection
        • Identify data quality issues early in the development process, reducing the risk of errors downstream.
      2. Proactive Validation
        • Create production-like data scenarios, validate sources and complex flows with simplicity, promoting proactive data quality.
      3. Efficient Testing Across Sources
        • Seamlessly test data across various sources, including databases, file formats, HTTP, and messaging, all within your local laptop or development environment.
        • Fast feedback loop to motivate developers to ensure thorough testing of data consumers.
      4. Integration with Development Pipelines
        • Easily integrate Data Caterer as a task in your development pipelines, ensuring that data quality is a continuous consideration rather than an isolated event.
      5. Integration with Existing Metadata
        • By harnessing the power of existing metadata from data catalogs, schema registries, or other data validation tools, Data Caterer streamlines the process, automating the generation and validation of your data effortlessly.
      6. Improved Collaboration
        • Facilitate collaboration between developers, testers, and data professionals by providing a common platform for early data validation.
      "},{"location":"use-case/blog/shift-left-data-quality/#realizing-the-vision-of-proactive-data-quality","title":"Realizing the Vision of Proactive Data Quality","text":"

      As organizations strive for excellence in their data-driven endeavors, the shift left approach with Data Caterer becomes a strategic imperative. By instilling a proactive data quality culture, teams can minimize the risk of costly errors, enhance the reliability of their data, and streamline the entire development lifecycle.

      In conclusion, the marriage of the shift left philosophy and Data Caterer brings forth a new era of data management, where data quality is not just a final checkpoint but an integral part of every development milestone. Embrace the shift left approach with Data Caterer and empower your teams to build robust, high-quality data solutions from the very beginning.

      Shift Left, Validate Early, and Accelerate with Data Caterer.

      "}]} \ No newline at end of file diff --git a/site/setup/advanced/index.html b/site/setup/advanced/index.html index 887fdbda..d4bf7740 100644 --- a/site/setup/advanced/index.html +++ b/site/setup/advanced/index.html @@ -1247,32 +1247,6 @@ - - - - - -
    24. - - - - - - - Report - - - - - - - - -
    25. - - - - @@ -1460,6 +1434,141 @@ + + + + + +
    26. + + + + + + + External Source + + + + + + + + +
    27. + + + + + + + + + + + + + + + + + + + + + + + + + +
    28. + + + + + + + + + + @@ -2206,9 +2315,9 @@

      Scenario testing

      You can alter the status column in the account data to only generate open accounts and define a foreign key between Postgres and parquet to ensure the same account_id is being used.
      Then in the parquet task, define 1 to 10 transactions per account_id to be generated.

      -

      Postgres account generation example task
      -Parquet transaction generation example task
      -Plan

      +

      Postgres account generation example task
      +Parquet transaction generation example task
      +Plan

      Cloud storage

      Data source

      If you want to save the file types CSV, JSON, Parquet or ORC into cloud storage, you can do so via adding extra diff --git a/site/setup/configuration/index.html b/site/setup/configuration/index.html index 30dd7b6a..40eadfbf 100644 --- a/site/setup/configuration/index.html +++ b/site/setup/configuration/index.html @@ -1348,32 +1348,6 @@ - - - - - -

    29. - - - - - - - Report - - - - - - - - -
    30. - - - - @@ -1561,6 +1535,141 @@ + + + + + +
    31. + + + + + + + External Source + + + + + + + + +
    32. + + + + + + + + + + + + + + + + + + + + + + + + + +
    33. + + + + + + + + + + @@ -2126,7 +2235,7 @@

      Configuration

      metadata gets saved.

      These configurations are defined from within your Java or Scala class via configuration or for YAML file setup, application.conf file as seen -here.

      +here.

      Flags

      Flags are used to control which processes are executed when you run Data Caterer.

      @@ -2161,7 +2270,7 @@

      Flags

      - + diff --git a/site/setup/connection/index.html b/site/setup/connection/index.html index 6a5a7bdb..24fdfd47 100644 --- a/site/setup/connection/index.html +++ b/site/setup/connection/index.html @@ -1555,32 +1555,6 @@ - - - - - -
    34. - - - - - - - Report - - - - - - - - -
    35. - - - - @@ -1768,6 +1742,141 @@ + + + + + +
    36. + + + + + + + External Source + + + + + + + + +
    37. + + + + + + + + + + + + + + + + + + + + + + + + + +
    38. + + + + + + + + + + @@ -2702,7 +2811,7 @@

      Kafka

      When defining your schema for pushing data to Kafka, it follows a specific top level schema.
      An example can be -found here +found here . You can define the key, value, headers, partition or topic by following the linked schema.

      JMS

      Uses JNDI lookup to send messages to JMS queue. Ensure that the messaging system you are using has your queue/topic diff --git a/site/setup/deployment/index.html b/site/setup/deployment/index.html index c56f3952..76d7acde 100644 --- a/site/setup/deployment/index.html +++ b/site/setup/deployment/index.html @@ -1247,32 +1247,6 @@ - - - - - -

    39. - - - - - - - Report - - - - - - - - -
    40. - - - - @@ -1460,6 +1434,141 @@ + + + + + +
    41. + + + + + + + External Source + + + + + + + + +
    42. + + + + + + + + + + + + + + + + + + + + + + + + + +
    43. + + + + + + + + + + @@ -2096,17 +2205,17 @@

      Deployment

      Docker

      To package up your class along with the Data Caterer base image, you can follow -the Dockerfile that is created for you here.

      +the Dockerfile that is created for you here.

      Then you can run the following:

      ./gradlew clean build
       docker build -t <my_image_name>:<my_image_tag> .
       

      Helm

      -

      Link to sample helm on GitHub here

      +

      Link to sample helm on GitHub here

      Update -the configuration +the configuration to your own data connections and configuration or own image created from above.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       helm install data-caterer ./data-caterer-example/helm/data-caterer
       
      diff --git a/site/setup/design/index.html b/site/setup/design/index.html index 2255d8eb..fddb7a4e 100644 --- a/site/setup/design/index.html +++ b/site/setup/design/index.html @@ -1326,32 +1326,6 @@ - - - - - -
    44. - - - - - - - Report - - - - - - - - -
    45. - - - - @@ -1539,6 +1513,141 @@ + + + + + +
    46. + + + + + + + External Source + + + + + + + + +
    47. + + + + + + + +
    48. + + + + + + + + + + + + + + + + + +
    49. + + + + + + + + + + diff --git a/site/setup/foreign-key/index.html b/site/setup/foreign-key/index.html index a2bde2da..d3f3e277 100644 --- a/site/setup/foreign-key/index.html +++ b/site/setup/foreign-key/index.html @@ -11,7 +11,7 @@ - + @@ -1247,32 +1247,6 @@ - - - - - -
    50. - - - - - - - Report - - - - - - - - -
    51. - - - - @@ -1460,6 +1434,141 @@ + + + + + +
    52. + + + + + + + External Source + + + + + + + + +
    53. + + + + + + + + + + + + + + + + + + + + + + + + + +
    54. + + + + + + + + + + @@ -2418,7 +2527,7 @@

      Nested column

      @@ -1569,6 +1543,141 @@ + + + + + +
    55. + + + + + + + External Source + + + + + + + + +
    56. + + + + + + + + + + + + + + + + + + + + + + + + + +
    57. + + + + + + + + + + @@ -2354,13 +2463,13 @@

      Generated

      - +
    58. - - - - - - - Report - - - - - - - - -
    59. - - - - @@ -1788,6 +1762,141 @@ + + + + + +
    60. + + + + + + + External Source + + + + + + + + +
    61. + + + + + + + + + + + + + + + + + + + + + + + + + +
    62. + + + + + + + + + + diff --git a/site/setup/guide/data-source/cassandra/index.html b/site/setup/guide/data-source/cassandra/index.html index 45513c27..1b79f11e 100644 --- a/site/setup/guide/data-source/cassandra/index.html +++ b/site/setup/guide/data-source/cassandra/index.html @@ -1508,32 +1508,6 @@ - - - - - -
    63. - - - - - - - Report - - - - - - - - -
    64. - - - - @@ -1721,6 +1695,141 @@ + + + + + +
    65. + + + + + + + External Source + + + + + + + + +
    66. + + + + + + + + + + + + + + + + + + + + + + + + + +
    67. + + + + + + + + + + @@ -2332,7 +2441,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      If you already have a Cassandra instance running, you can skip to this step.

      Cassandra Setup

      @@ -2359,21 +2468,21 @@

      Permissions

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedCassandraJavaPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedCassandraPlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedCassandraJavaPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedCassandraPlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       
       public class MyAdvancedCassandraJavaPlan extends PlanRun {
       }
       
      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       
       class MyAdvancedCassandraPlan extends PlanRun {
       }
      @@ -2415,7 +2524,7 @@ 

      Schema

      Let's create a task for inserting data into the account.accounts and account.account_status_history tables as defined underdocker/data/cql/customer.cql. This table should already be setup for you if you followed this step. We can check if the table is setup already via the following command:

      -
      docker exec host.docker.internal cqlsh -e 'describe account.accounts; describe account.account_status_history;'
      +
      docker exec docker-cassandraserver-1 cqlsh -e 'describe account.accounts; describe account.account_status_history;'
       

      Here we should see some output that looks like the below. This tells us what schema we need to follow when generating data. We need to define that alongside any metadata that is useful to add constraints on what are possible values the diff --git a/site/setup/guide/data-source/http/index.html b/site/setup/guide/data-source/http/index.html index 51477ed4..d988ecb3 100644 --- a/site/setup/guide/data-source/http/index.html +++ b/site/setup/guide/data-source/http/index.html @@ -1421,32 +1421,6 @@ - - - - - -

    68. - - - - - - - Report - - - - - - - - -
    69. - - - - @@ -1634,6 +1608,141 @@ + + + + + +
    70. + + + + + + + External Source + + + + + + + + +
    71. + + + + + + + +
    72. + + + + + + + + + + + + + + + + + +
    73. + + + + + + + + + + @@ -2244,7 +2353,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      HTTP Setup

      We will be using the http-bin docker image to help simulate a service with HTTP endpoints.

      @@ -2256,14 +2365,14 @@

      HTTP Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedHttpJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedHttpPlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedHttpJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedHttpPlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedHttpJavaPlanRun extends PlanRun {
      @@ -2275,7 +2384,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedHttpPlanRun extends PlanRun {
      @@ -2466,7 +2575,7 @@ 

      Rows per second

      -
      import com.github.pflooky.datacaterer.api.model.Constants;
      +
      import io.github.datacatering.datacaterer.api.model.Constants;
       
       ...
       var httpTask = http("my_http", Map.of(Constants.ROWS_PER_SECOND(), "1"))
      @@ -2474,7 +2583,7 @@ 

      Rows per second

      -
      import com.github.pflooky.datacaterer.api.model.Constants.ROWS_PER_SECOND
      +
      import io.github.datacatering.datacaterer.api.model.Constants.ROWS_PER_SECOND
       
       ...
       val httpTask = http("my_http", options = Map(ROWS_PER_SECOND -> "1"))
      diff --git a/site/setup/guide/data-source/kafka/index.html b/site/setup/guide/data-source/kafka/index.html
      index 19277533..6e453a55 100644
      --- a/site/setup/guide/data-source/kafka/index.html
      +++ b/site/setup/guide/data-source/kafka/index.html
      @@ -1458,32 +1458,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    74. - - - - - - - Report - - - - - - - - -
    75. - - - - @@ -1671,6 +1645,141 @@ + + + + + +
    76. + + + + + + + External Source + + + + + + + + +
    77. + + + + + + + +
    78. + + + + + + + + + + + + + + + + + +
    79. + + + + + + + + + + @@ -2282,7 +2391,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      If you already have a Kafka instance running, you can skip to this step.

      Kafka Setup

      @@ -2294,21 +2403,21 @@

      Kafka Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedKafkaJavaPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedKafkaPlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedKafkaJavaPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedKafkaPlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       
       public class MyAdvancedKafkaJavaPlan extends PlanRun {
       }
       
      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       
       class MyAdvancedKafkaPlan extends PlanRun {
       }
      diff --git a/site/setup/guide/data-source/marquez-metadata-source/index.html b/site/setup/guide/data-source/marquez-metadata-source/index.html
      index 6a6ab013..bed5fcfc 100644
      --- a/site/setup/guide/data-source/marquez-metadata-source/index.html
      +++ b/site/setup/guide/data-source/marquez-metadata-source/index.html
      @@ -1431,32 +1431,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    80. - - - - - - - Report - - - - - - - - -
    81. - - - - @@ -1644,6 +1618,141 @@ + + + + + +
    82. + + + + + + + External Source + + + + + + + + +
    83. + + + + + + + +
    84. + + + + + + + + + + + + + + + + + +
    85. + + + + + + + + + + @@ -2254,7 +2363,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Marquez Setup

      You can follow the README found here to help with setting up Marquez in @@ -2272,14 +2381,14 @@

      Postgres Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedMetadataSourceJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedMetadataSourcePlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedMetadataSourceJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedMetadataSourceJavaPlanRun extends PlanRun {
      @@ -2291,7 +2400,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedMetadataSourcePlanRun extends PlanRun {
      diff --git a/site/setup/guide/data-source/open-metadata-source/index.html b/site/setup/guide/data-source/open-metadata-source/index.html
      index 3f6e5a62..5a880ba1 100644
      --- a/site/setup/guide/data-source/open-metadata-source/index.html
      +++ b/site/setup/guide/data-source/open-metadata-source/index.html
      @@ -1414,32 +1414,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    86. - - - - - - - Report - - - - - - - - -
    87. - - - - @@ -1627,6 +1601,141 @@ + + + + + +
    88. + + + + + + + External Source + + + + + + + + +
    89. + + + + + + + +
    90. + + + + + + + + + + + + + + + + + +
    91. + + + + + + + + + + @@ -2237,7 +2346,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      OpenMetadata Setup

      You can follow the local docker setup found @@ -2254,14 +2363,14 @@

      OpenMetadata Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedOpenMetadataSourcePlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedOpenMetadataSourceJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedOpenMetadataSourcePlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedOpenMetadataSourceJavaPlanRun extends PlanRun {
      @@ -2273,7 +2382,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedOpenMetadataSourcePlanRun extends PlanRun {
      @@ -2293,7 +2402,7 @@ 
      Single Schema
      -
      import com.github.pflooky.datacaterer.api.model.Constants;
      +
      import io.github.datacatering.datacaterer.api.model.Constants;
       ...
       
       var jsonTask = json("my_json", "/opt/app/data/json", Map.of("saveMode", "overwrite"))
      @@ -2309,7 +2418,7 @@ 
      Single Schema
      -
      import com.github.pflooky.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE}
      +
      import io.github.datacatering.datacaterer.api.model.Constants.{OPEN_METADATA_AUTH_TYPE_OPEN_METADATA, OPEN_METADATA_JWT_TOKEN, OPEN_METADATA_TABLE_FQN, SAVE_MODE}
       ...
       
       val jsonTask = json("my_json", "/opt/app/data/json", Map("saveMode" -> "overwrite"))
      diff --git a/site/setup/guide/data-source/solace/index.html b/site/setup/guide/data-source/solace/index.html
      index 41e54b2a..46ddce1d 100644
      --- a/site/setup/guide/data-source/solace/index.html
      +++ b/site/setup/guide/data-source/solace/index.html
      @@ -1460,32 +1460,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    92. - - - - - - - Report - - - - - - - - -
    93. - - - - @@ -1673,6 +1647,141 @@ + + + + + +
    94. + + + + + + + External Source + + + + + + + + +
    95. + + + + + + + +
    96. + + + + + + + + + + + + + + + + + +
    97. + + + + + + + + + + @@ -2285,7 +2394,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      If you already have a Solace instance running, you can skip to this step.

      Solace Setup

      @@ -2301,21 +2410,21 @@

      Solace Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedSolaceJavaPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedSolacePlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedSolaceJavaPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedSolacePlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       
       public class MyAdvancedSolaceJavaPlan extends PlanRun {
       }
       
      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       
       class MyAdvancedSolacePlan extends PlanRun {
       }
      diff --git a/site/setup/guide/index.html b/site/setup/guide/index.html
      index b31e9473..e33431ed 100644
      --- a/site/setup/guide/index.html
      +++ b/site/setup/guide/index.html
      @@ -1408,32 +1408,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    98. - - - - - - - Report - - - - - - - - -
    99. - - - - @@ -1621,6 +1595,141 @@ + + + + + +
    100. + + + + + + + External Source + + + + + + + + +
    101. + + + + + + + +
    102. + + + + + + + + + + + + + + + + + +
    103. + + + + + + + + + + @@ -2240,9 +2349,9 @@

      Base Concept

      more steps.

      Plan

      Foreign Keys

      -

      Define foreign keys across data sources in your plan to ensure generated data can match
      -Link to associated task 1
      -Link to associated task 2

      +

      Define foreign keys across data sources in your plan to ensure generated data can match
      +Link to associated task 1
      +Link to associated task 2

      Task

    104. enableSaveReports true NEnable/disable HTML reports summarising data generated, metadata of data generated (if enableSinkMetadata is enabled) and validation results (if enableValidation is enabled). Sample hereEnable/disable HTML reports summarising data generated, metadata of data generated (if enableSinkMetadata is enabled) and validation results (if enableValidation is enabled). Sample here
      enableSinkMetadata
      @@ -2257,61 +2366,61 @@

      Task

      - + - + - + - + - + - + - + - + - +
      Database PostgresSampleSample
      Database MySQLSampleSample
      Database CassandraSampleSample
      File CSVSampleSample
      File JSONSampleSample Contains nested schemas and use of SQL for generated values
      File ParquetSampleSample Partition by year column
      Kafka KafkaSampleSample Specific base schema to be used, define headers, key, value, etc.
      JMS SolaceSampleSample JSON formatted message
      HTTP PUTSampleSample JSON formatted PUT body

      Configuration

      -

      Basic configuration

      +

      Basic configuration

      Docker-compose

      To see how it runs against different data sources, you can run using docker-compose and set DATA_SOURCE like below

      ./gradlew build
      diff --git a/site/setup/guide/scenario/auto-generate-connection/index.html b/site/setup/guide/scenario/auto-generate-connection/index.html
      index afede919..25835f4a 100644
      --- a/site/setup/guide/scenario/auto-generate-connection/index.html
      +++ b/site/setup/guide/scenario/auto-generate-connection/index.html
      @@ -1408,32 +1408,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    105. - - - - - - - Report - - - - - - - - -
    106. - - - - @@ -1621,6 +1595,141 @@ + + + + + +
    107. + + + + + + + External Source + + + + + + + + +
    108. + + + + + + + +
    109. + + + + + + + + + + + + + + + + + +
    110. + + + + + + + + + + @@ -2230,19 +2339,19 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedAutomatedJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedAutomatedPlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedAutomatedJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedAutomatedPlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedAutomatedJavaPlanRun extends PlanRun {
      @@ -2260,7 +2369,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedAutomatedPlanRun extends PlanRun {
      diff --git a/site/setup/guide/scenario/batch-and-event/index.html b/site/setup/guide/scenario/batch-and-event/index.html
      index 3f6161bf..12351f9d 100644
      --- a/site/setup/guide/scenario/batch-and-event/index.html
      +++ b/site/setup/guide/scenario/batch-and-event/index.html
      @@ -1414,32 +1414,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    111. - - - - - - - Report - - - - - - - - -
    112. - - - - @@ -1627,6 +1601,141 @@ + + + + + +
    113. + + + + + + + External Source + + + + + + + + +
    114. + + + + + + + +
    115. + + + + + + + + + + + + + + + + + +
    116. + + + + + + + + + + @@ -2236,7 +2345,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Kafka Setup

      If you don't have your own Kafka up and running, you can set up and run an instance configured in the docker @@ -2250,14 +2359,14 @@

      Kafka Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedBatchEventJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedBatchEventPlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedBatchEventJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedBatchEventPlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedBatchEventJavaPlanRun extends PlanRun {
      @@ -2268,7 +2377,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedBatchEventPlanRun extends PlanRun {
      diff --git a/site/setup/guide/scenario/data-validation/index.html b/site/setup/guide/scenario/data-validation/index.html
      index 19f05d6d..d76f3149 100644
      --- a/site/setup/guide/scenario/data-validation/index.html
      +++ b/site/setup/guide/scenario/data-validation/index.html
      @@ -1477,32 +1477,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    117. - - - - - - - Report - - - - - - - - -
    118. - - - - @@ -1690,6 +1664,141 @@ + + + + + +
    119. + + + + + + + External Source + + + + + + + + +
    120. + + + + + + + +
    121. + + + + + + + + + + + + + + + + + +
    122. + + + + + + + + + + @@ -2296,7 +2405,7 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Data Setup

      To aid in showing the functionality of data validations, we will first generate some data that our validations will run @@ -2306,14 +2415,14 @@

      Data Setup

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyValidationJavaPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyValidationPlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyValidationJavaPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyValidationPlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyValidationJavaPlan extends PlanRun {
      @@ -2331,7 +2440,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyValidationPlan extends PlanRun {
      diff --git a/site/setup/guide/scenario/delete-generated-data/index.html b/site/setup/guide/scenario/delete-generated-data/index.html
      index 351688c8..5c839739 100644
      --- a/site/setup/guide/scenario/delete-generated-data/index.html
      +++ b/site/setup/guide/scenario/delete-generated-data/index.html
      @@ -1408,32 +1408,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    123. - - - - - - - Report - - - - - - - - -
    124. - - - - @@ -1621,6 +1595,141 @@ + + + + + +
    125. + + + + + + + External Source + + + + + + + + +
    126. + + + + + + + +
    127. + + + + + + + + + + + + + + + + + +
    128. + + + + + + + + + + @@ -2230,19 +2339,19 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyAdvancedDeleteJavaPlanRun.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyAdvancedDeletePlanRun.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyAdvancedDeleteJavaPlanRun.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyAdvancedDeletePlanRun.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyAdvancedDeleteJavaPlanRun extends PlanRun {
      @@ -2263,7 +2372,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyAdvancedDeletePlanRun extends PlanRun {
      diff --git a/site/setup/guide/scenario/first-data-generation/index.html b/site/setup/guide/scenario/first-data-generation/index.html
      index 8d278fda..98dd4eda 100644
      --- a/site/setup/guide/scenario/first-data-generation/index.html
      +++ b/site/setup/guide/scenario/first-data-generation/index.html
      @@ -1649,32 +1649,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    129. - - - - - - - Report - - - - - - - - -
    130. - - - - @@ -1862,6 +1836,141 @@ + + + + + +
    131. + + + + + + + External Source + + + + + + + + +
    132. + + + + + + + +
    133. + + + + + + + + + + + + + + + + + +
    134. + + + + + + + + + + @@ -2468,26 +2577,26 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyCsvPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyCsvPlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyCsvPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyCsvPlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       
       public class MyCsvJavaPlan extends PlanRun {
       }
       
      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       
       class MyCsvPlan extends PlanRun {
       }
      diff --git a/site/setup/guide/scenario/records-per-column/index.html b/site/setup/guide/scenario/records-per-column/index.html
      index 37dc84d5..a6858f0e 100644
      --- a/site/setup/guide/scenario/records-per-column/index.html
      +++ b/site/setup/guide/scenario/records-per-column/index.html
      @@ -1386,32 +1386,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    135. - - - - - - - Report - - - - - - - - -
    136. - - - - @@ -1599,6 +1573,141 @@ + + + + + +
    137. + + + + + + + External Source + + + + + + + + +
    138. + + + + + + + +
    139. + + + + + + + + + + + + + + + + + +
    140. + + + + + + + + + + @@ -2204,19 +2313,19 @@

      Requirements

      Get Started

      First, we will clone the data-caterer-example repo which will already have the base project setup required.

      -
      git clone git@github.com:pflooky/data-caterer-example.git
      +
      git clone git@github.com:data-catering/data-caterer-example.git
       

      Plan Setup

      Create a new Java or Scala class.

        -
      • Java: src/main/java/com/github/pflooky/plan/MyMultipleRecordsPerColJavaPlan.java
      • -
      • Scala: src/main/scala/com/github/pflooky/plan/MyMultipleRecordsPerColPlan.scala
      • +
      • Java: src/main/java/io/github/datacatering/plan/MyMultipleRecordsPerColJavaPlan.java
      • +
      • Scala: src/main/scala/io/github/datacatering/plan/MyMultipleRecordsPerColPlan.scala

      Make sure your class extends PlanRun.

      -
      import com.github.pflooky.datacaterer.java.api.PlanRun;
      +
      import io.github.datacatering.datacaterer.java.api.PlanRun;
       ...
       
       public class MyMultipleRecordsPerColJavaPlan extends PlanRun {
      @@ -2240,7 +2349,7 @@ 

      Plan Setup

      -
      import com.github.pflooky.datacaterer.api.PlanRun
      +
      import io.github.datacatering.datacaterer.api.PlanRun
       ...
       
       class MyMultipleRecordsPerColPlan extends PlanRun {
      diff --git a/site/setup/index.html b/site/setup/index.html
      index eba7b5d3..c2eb281d 100644
      --- a/site/setup/index.html
      +++ b/site/setup/index.html
      @@ -1326,32 +1326,6 @@
       
                     
                   
      -              
      -                
      -  
      -  
      -  
      -    
    141. - - - - - - - Report - - - - - - - - -
    142. - - - - @@ -1539,6 +1513,141 @@ + + + + + +
    143. + + + + + + + External Source + + + + + + + + +
    144. + + + + + + + +
    145. + + + + + + + + + + + + + + + + + +
    146. + + + + + + + + + + diff --git a/site/setup/report/alert/index.html b/site/setup/report/alert/index.html new file mode 100644 index 00000000..efabe77c --- /dev/null +++ b/site/setup/report/alert/index.html @@ -0,0 +1,2464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alert - Data Catering + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + +
      + + +
      + +
      + + + + + + + + + +
      +
      + + + +
      +
      +
      + + + + + + + + + +
      +
      +
      + + + + +
      + + + + + + + + + + + +
      + + + + + + + +

      Alert

      +

      Alerts can be configured to help users receive feedback from their data testing results. Currently, Data Caterer +supports Slack for alerts.

      +

      Slack

      +

      Define a Slack token and one or more Slack channels that will +receive an alert like the below.

      +

      Slack alert sample

      +
      +
      +
      +
      var conf = configuration()
      +    .slackAlertToken("abc123")                                //use appropriate Slack token (usually bot token)
      +    .slackAlertChannels("#test-alerts", "#pre-prod-testing"); //define Slack channel(s) to receive alerts on
      +
      +execute(conf, ...);
      +
      +
      +
      +
      val conf = configuration
      +  .slackAlertToken("abc123")                                //use appropriate Slack token (usually bot token)
      +  .slackAlertChannels("#test-alerts", "#pre-prod-testing")  //define Slack channel(s) to receive alerts on
      +
      +execute(conf, ...)
      +
      +
      +
      +
      + + + + + + + + + +
      +
      + + + + + +
      + + + +
      + + + +
      +
      +
      +
      + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/site/setup/generator/report/index.html b/site/setup/report/html-report/index.html similarity index 95% rename from site/setup/generator/report/index.html rename to site/setup/report/html-report/index.html index 8ec44bd0..4308cbb8 100644 --- a/site/setup/generator/report/index.html +++ b/site/setup/report/html-report/index.html @@ -8,13 +8,13 @@ - + - + - + @@ -25,7 +25,7 @@ - Report - Data Catering + HTML Report - Data Catering @@ -121,7 +121,7 @@
      - Report + HTML Report
      @@ -1150,8 +1150,6 @@ - - @@ -1161,12 +1159,12 @@ -
    147. +
    148. - + -
    149. + + + + - - -
    150. + + + + + - + +
    151. - - - + + + + - +
    152. @@ -1345,29 +1361,14 @@ - - - - - - - - -
    153. - - - - - +
    154. + - - - -
    155. - - + + + + + + + + -
    156. - + + + + + + + + + +
    157. + + + + + + + + + @@ -1827,6 +1801,141 @@ + + + + + +
    158. + + + + + + + External Source + + + + + + + + +
    159. + + + + + + + + + + + + + + + + + + + + + + + + + +
    160. + + + + + + + + + + diff --git a/site/setup/validation/column-name-validation/index.html b/site/setup/validation/column-name-validation/index.html index c46a9f94..54dd47d6 100644 --- a/site/setup/validation/column-name-validation/index.html +++ b/site/setup/validation/column-name-validation/index.html @@ -16,7 +16,7 @@ - + @@ -1249,32 +1249,6 @@ - - - - - -
    161. - - - - - - - Report - - - - - - - - -
    162. - - - - @@ -1554,6 +1528,141 @@ + + + + + +
    163. + + + + + + + External Source + + + + + + + + +
    164. + + + + + + + + + + + + + + + + + + + + + + + + + +
    165. + + + + + + + + + + @@ -2242,13 +2351,13 @@

      Match Set

      - +
    166. - - - - - - - Report - - - - - - - - -
    167. - - - - @@ -1596,6 +1570,141 @@ + + + + + +
    168. + + + + + + + External Source + + + + + + + + +
    169. + + + + + + + + + + + + + + + + + + + + + + + + + +
    170. + + + + + + + + + + diff --git a/site/setup/validation/index.html b/site/setup/validation/index.html index f43533f9..634cc7d7 100644 --- a/site/setup/validation/index.html +++ b/site/setup/validation/index.html @@ -11,7 +11,7 @@ - + @@ -1247,32 +1247,6 @@ - - - - - -
    171. - - - - - - - Report - - - - - - - - -
    172. - - - - @@ -1591,6 +1565,141 @@ + + + + + +
    173. + + + + + + + External Source + + + + + + + + +
    174. + + + + + + + + + + + + + + + + + + + + + + + + + +
    175. + + + + + + + + + + @@ -2423,7 +2532,7 @@

      Report

      @@ -1565,6 +1539,141 @@ + + + + + +
    176. + + + + + + + External Source + + + + + + + + +
    177. + + + + + + + + + + + + + + + + + + + + + + + + + +
    178. + + + + + + + + + + @@ -2441,7 +2550,7 @@

      Chained validations

      -

      Can check out a full example here for more details.

      +

      Can check out a full example here for more details.

      diff --git a/site/sitemap.xml b/site/sitemap.xml index 77155b69..ceeb98d9 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -2,197 +2,207 @@ https://data.catering/ - 2023-12-04 + 2024-01-04 daily https://data.catering/about/ - 2023-12-04 + 2024-01-04 daily https://data.catering/sponsor/ - 2023-12-04 + 2024-01-04 daily https://data.catering/use-case/ - 2023-12-04 + 2024-01-04 daily https://data.catering/get-started/docker/ - 2023-12-04 + 2024-01-04 daily https://data.catering/legal/privacy-policy/ - 2023-12-04 + 2024-01-04 daily https://data.catering/legal/terms-of-service/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/advanced/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/configuration/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/connection/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/deployment/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/design/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/foreign-key/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/validation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/generator/count/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/generator/data-generator/ - 2023-12-04 - daily - - - https://data.catering/setup/generator/report/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/cassandra/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/http/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/kafka/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/marquez-metadata-source/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/open-metadata-source/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/data-source/solace/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/auto-generate-connection/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/batch-and-event/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/data-validation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/delete-generated-data/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/first-data-generation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/guide/scenario/records-per-column/ - 2023-12-04 + 2024-01-04 + daily + + + https://data.catering/setup/report/alert/ + 2024-01-04 + daily + + + https://data.catering/setup/report/html-report/ + 2024-01-04 daily https://data.catering/setup/validation/basic-validation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/validation/column-name-validation/ - 2023-12-04 + 2024-01-04 + daily + + + https://data.catering/setup/validation/external-source-validation/ + 2024-01-04 daily https://data.catering/setup/validation/group-by-validation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/setup/validation/upstream-data-source-validation/ - 2023-12-04 + 2024-01-04 daily https://data.catering/use-case/business-value/ - 2023-12-04 + 2024-01-04 daily https://data.catering/use-case/comparison/ - 2023-12-04 + 2024-01-04 daily https://data.catering/use-case/roadmap/ - 2023-12-04 + 2024-01-04 daily https://data.catering/use-case/blog/shift-left-data-quality/ - 2023-12-04 + 2024-01-04 daily \ No newline at end of file diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz index acd9da6e2e23d89cdce4a1ac5e06c812471280c0..c2cbe76ad56efa9a1952f4ad31e6bf9da340f3e3 100644 GIT binary patch literal 589 zcmV-T0LcsyDtcZInZr>VW??Ss?eP3=L7Oji} z+-lddiR8B9DAI=UP+;YtAh(a&jUD@@svu<`zkOOiJ)8BTSwA`>I zAzn6iBDpcx4~T!qfgRPN4N5X4A=ZXf1&sqiZCpJTBL%pix1QVq)mbiL57A~0CvX>& zDF%1Z$=Di$80w55pMq02*KL)mStk_u6C~GsP$iwC)P=q>l(rM7MNH`Q@_EdWE(4~b zl}|#i)OH;)HaK&@i%!53#NZVNM~?|x@V2bLQPt{!pO9m(`E2T>t-+&aw5t(?Dz|;O zC0+u_Gt32e)Se6L0lLF%3_AcHEB-M97MRLsf=?OKT-k*p=%y8i2{@32TIhWNZpSv| zsnr+w9Tc}WZMideQk!mlVZQo_`YhrLGe&IQ@$M$xjPJ~XybCPFOtXx+*qqT3dodZg zg=MURQf$UdTr5Q7qMC4DhG_0}?MI6pNO0;`i3#7$LrsDK=Y)-KttUaeZ`^Z2@0n^g zyUU!IYnH+YgP9~tiupe-vUgQNLXnZRqFPKxLvDMAD7GXM`0 literal 568 zcmV-80>}LyiwFqFJZ)tH|8r?{Wo=<_E_iKh0M(hnlG`8*K=1n%8Q%%nw1>8ncyId! z?FT3zJ4`Sl2%M&0Uz}ujJ$ve@BXhA4GJYc@B;(!7@4>G|OzbG^o9FeWSz$0_UFi4C zub;2#Tl3OB?Mm{Dc~zAI@0(-J@rTxz%Vo_j;{cJ@lzPqPSUapALcLjkZ`!9-ZPNtz zyIb3NGVL@A*J&(dSR2Tg>Pz)bPh)dc;5?9Rx0~%3^}JP^uT|wCo2i*2gdV$u=hlMr z*PWh8?hN`J;@@%LKqX6q;z)rhNy93P$^fG@t{$`E3@M}4mdpvoSJ(!doe{Uzb(bnpCKT8af~h_zlFm@*TwfC8nhC@r1~hW{EJjb)0YjF` z$F3J@yN(i8ICa9SOu!Mmvx0-8$AC3>YgJ&VNcF%E$Z1r4bcNFv^a~B(QZr4 zR8p-LYI(>IY=Wf#PufdiJwbO`j9~{z=YoIKfEniUh2T@fuvB&?53*_5V1VREL&@}( zChEtf@B;7?`~k8#s=D1N9K{xepO|lcBEHu7#Ec%Rcf7fYRns$zAn#n_tmd`QQf!{k zP_nEdrW%&M3_*O^egJkxyl>C=?sioH23!($pQuE2xGssgM9v9eP_sNKnE(Bx^-$Oa zWS&?Hip4ZE#JX*;U`r+fJN>f|yV9Pj-yU6;mB;RpG|r{EX#Ni;CbvtCn)WZz$YiuJ G8UO$Xa~c!? diff --git a/site/sponsor/index.html b/site/sponsor/index.html index 6996cdd9..f2869eac 100644 --- a/site/sponsor/index.html +++ b/site/sponsor/index.html @@ -1243,32 +1243,6 @@ - - - - - -
    179. - - - - - - - Report - - - - - - - - -
    180. - - - - @@ -1456,6 +1430,141 @@ + + + + + +
    181. + + + + + + + External Source + + + + + + + + +
    182. + + + + + + + + + + + + + + + + + + + + + + + + + +
    183. + + + + + + + + + + diff --git a/site/use-case/blog/shift-left-data-quality/index.html b/site/use-case/blog/shift-left-data-quality/index.html index 83044e45..1c1a4f26 100644 --- a/site/use-case/blog/shift-left-data-quality/index.html +++ b/site/use-case/blog/shift-left-data-quality/index.html @@ -1247,32 +1247,6 @@ - - - - - -
    184. - - - - - - - Report - - - - - - - - -
    185. - - - - @@ -1460,6 +1434,141 @@ + + + + + +
    186. + + + + + + + External Source + + + + + + + + +
    187. + + + + + + + + + + + + + + + + + + + + + + + + + +
    188. + + + + + + + + + + diff --git a/site/use-case/business-value/index.html b/site/use-case/business-value/index.html index 3cd4bdce..6f7f9b4c 100644 --- a/site/use-case/business-value/index.html +++ b/site/use-case/business-value/index.html @@ -1245,32 +1245,6 @@ - - - - - -
    189. - - - - - - - Report - - - - - - - - -
    190. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
    191. + + + + + + + External Source + + + + + + + + +
    192. + + + + + + + + + + + + + + + + + + + + + + + + + +
    193. + + + + + + + + + + diff --git a/site/use-case/comparison/index.html b/site/use-case/comparison/index.html index abc87a07..19b7b41d 100644 --- a/site/use-case/comparison/index.html +++ b/site/use-case/comparison/index.html @@ -1247,32 +1247,6 @@ - - - - - -
    194. - - - - - - - Report - - - - - - - - -
    195. - - - - @@ -1460,6 +1434,141 @@ + + + + + +
    196. + + + + + + + External Source + + + + + + + + +
    197. + + + + + + + + + + + + + + + + + + + + + + + + + +
    198. + + + + + + + + + + diff --git a/site/use-case/index.html b/site/use-case/index.html index 7b7031ba..00305f63 100644 --- a/site/use-case/index.html +++ b/site/use-case/index.html @@ -1245,32 +1245,6 @@ - - - - - -
    199. - - - - - - - Report - - - - - - - - -
    200. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
    201. + + + + + + + External Source + + + + + + + + +
    202. + + + + + + + + + + + + + + + + + + + + + + + + + +
    203. + + + + + + + + + + diff --git a/site/use-case/roadmap/index.html b/site/use-case/roadmap/index.html index d74c149a..06755ec8 100644 --- a/site/use-case/roadmap/index.html +++ b/site/use-case/roadmap/index.html @@ -1245,32 +1245,6 @@ - - - - - -
    204. - - - - - - - Report - - - - - - - - -
    205. - - - - @@ -1458,6 +1432,141 @@ + + + + + +
    206. + + + + + + + External Source + + + + + + + + +
    207. + + + + + + + + + + + + + + + + + + + + + + + + + +
    208. + + + + + + + + + + @@ -2069,7 +2178,7 @@

      Roadmap

      Integration with data validation tools Derive data validation rules from existing data validation tools -- Great Expectation
      - DBT constraints
      - SodaCL
      - MonteCarlo +- ✅ Great Expectation
      - DBT constraints
      - SodaCL
      - MonteCarlo
      - ✅ OpenMetadata Data validation rule suggestions @@ -2084,7 +2193,7 @@

      Roadmap

      Validation types Ability to define simple/complex data validations -- ✅ Basic validations
      - ✅ Aggregates (sum of amount per account is > 500)
      - Ordering (transactions are ordered by date)
      - ✅ Relationship (at least one account entry in history table per account in accounts table)
      - Data profile (how close the generated data profile is compared to the expected data profile)
      - Column name (check column count, column names, ordering) +- ✅ Basic validations
      - ✅ Aggregates (sum of amount per account is > 500)
      - Ordering (transactions are ordered by date)
      - ✅ Relationship (at least one account entry in history table per account in accounts table)
      - Data profile (how close the generated data profile is compared to the expected data profile)
      - ✅ Column name (check column count, column names, ordering) Data generation record count @@ -2094,7 +2203,7 @@

      Roadmap

      Alerting When tasks have completed, ability to define alerts based on certain conditions -- Slack
      - Email +- ✅ Slack
      - Email Metadata enhancements
  11. KeDdqKKTcEB|RhW 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 + +
    Data Source A
    Data Source A
    Data Source B
    Data Source B
    Data Caterer
    Data Caterer
    Data Storage C
    Data Storage C
    Data Caterer
    Data Caterer
    1. Generate
    1. Generate
    Data Consumer
    Data Consumer
    2. Consume
    2. Consu...
    Data Source D
    Data Source D
    5. Validate
    5. Validate
    3. Write
    3. Write
    Data Quality Source
    Data Quality Sour...
    4. Get Validations
    4. Get Validations
    Text is not SVG - cannot display
    \ No newline at end of file diff --git a/docs/diagrams/slack_alert.png b/docs/diagrams/slack_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..89fee8c51402ee83ad45054826929026b41e7bd3 GIT binary patch literal 178216 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 z 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%0DvIc699i+Y4%r&@5TA+($B)`MR5k6SWFNow~y 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 Wa?P_zUpWVSloixpls ./run.sh diff --git a/docs/index.md b/docs/index.md index 000732b4..29d1ba11 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,7 +8,7 @@ testing tool that aids in creating production-like data across both batch and ev to ensure your systems have ingested it as expected, then clean up the data afterwards.