From 75b6be6555ff5eca4b640e41b97cef3f13830033 Mon Sep 17 00:00:00 2001 From: old-tom <892955278@qq.com> Date: Thu, 27 Apr 2023 16:27:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2023-04-23.md | 0 Snipaste_2023-03-28_09-21-51.png | Bin 0 -> 43469 bytes Snipaste_2023-04-01_17-47-48 1.png | Bin 0 -> 20405 bytes Snipaste_2023-04-01_17-47-48.png | Bin 0 -> 47097 bytes work常用/CQL 常用语句.md | 15 ++ work常用/Linux命令.md | 118 +++++++++++++ work常用/Oracle常用.md | 159 ++++++++++++++++++ work常用/SqlServer常用.md | 147 ++++++++++++++++ work常用/docker 命令.md | 2 + work常用/java 并发任务编排.md | 1 + work常用/pip 命令.md | 5 + work常用/常用linux命令.md | 107 ------------ 工作日志/ATD/202303/2023-03-27.md | 3 + 工作日志/ATD/202303/2023-03-28.md | 10 ++ 工作日志/ATD/202303/2023-03-29.md | 11 ++ 工作日志/ATD/202303/2023-03-30.md | 9 + 工作日志/ATD/202303/2023-03-31.md | 10 ++ 工作日志/ATD/202304/2023-04-03.md | 45 +++++ 工作日志/ATD/202304/2023-04-04.md | 12 ++ 工作日志/ATD/202304/2023-04-06.md | 8 + 工作日志/ATD/202304/2023-04-07.md | 9 + 工作日志/ATD/202304/2023-04-10.md | 18 ++ 工作日志/ATD/202304/2023-04-11.md | 17 ++ 工作日志/ATD/202304/2023-04-12.md | 66 ++++++++ 工作日志/ATD/202304/2023-04-13.md | 9 + 工作日志/ATD/202304/2023-04-14.md | 9 + 工作日志/ATD/202304/2023-04-15.md | 4 + 工作日志/ATD/202304/2023-04-17.md | 11 ++ 工作日志/ATD/202304/2023-04-18.md | 9 + 工作日志/ATD/202304/2023-04-19.md | 9 + 工作日志/ATD/202304/2023-04-20.md | 13 ++ 工作日志/ATD/202304/2023-04-21.md | 7 + 工作日志/ATD/202304/2023-04-23.md | 9 + 工作日志/ATD/202304/2023-04-24.md | 9 + 工作日志/ATD/202304/2023-04-25.md | 12 ++ 工作日志/ATD/202304/2023-04-26.md | 7 + 工作日志/ATD/202304/2023-04-27.md | 7 + 工作日志/ATD/环境/项目地址.md | 48 ++++++ 开发计划/tiny-datahub/开发计划.md | 17 ++ .../中间件/redis/spring-boot-redis.md | 149 ++++++++++++++++ .../DataX-web/在linux上安装.md | 6 + .../数据同步/DataX/在Linux上安装.md | 14 ++ 未命名 1.canvas | 4 + 本机环境/WSL/WSL 桥接网络.md | 51 ++++++ 本机环境/开发环境.md | 10 +- 45 files changed, 1078 insertions(+), 108 deletions(-) create mode 100644 2023-04-23.md create mode 100644 Snipaste_2023-03-28_09-21-51.png create mode 100644 Snipaste_2023-04-01_17-47-48 1.png create mode 100644 Snipaste_2023-04-01_17-47-48.png create mode 100644 work常用/CQL 常用语句.md create mode 100644 work常用/Oracle常用.md create mode 100644 work常用/SqlServer常用.md create mode 100644 work常用/java 并发任务编排.md create mode 100644 work常用/pip 命令.md delete mode 100644 work常用/常用linux命令.md create mode 100644 工作日志/ATD/202303/2023-03-27.md create mode 100644 工作日志/ATD/202303/2023-03-28.md create mode 100644 工作日志/ATD/202303/2023-03-29.md create mode 100644 工作日志/ATD/202303/2023-03-30.md create mode 100644 工作日志/ATD/202303/2023-03-31.md create mode 100644 工作日志/ATD/202304/2023-04-03.md create mode 100644 工作日志/ATD/202304/2023-04-04.md create mode 100644 工作日志/ATD/202304/2023-04-06.md create mode 100644 工作日志/ATD/202304/2023-04-07.md create mode 100644 工作日志/ATD/202304/2023-04-10.md create mode 100644 工作日志/ATD/202304/2023-04-11.md create mode 100644 工作日志/ATD/202304/2023-04-12.md create mode 100644 工作日志/ATD/202304/2023-04-13.md create mode 100644 工作日志/ATD/202304/2023-04-14.md create mode 100644 工作日志/ATD/202304/2023-04-15.md create mode 100644 工作日志/ATD/202304/2023-04-17.md create mode 100644 工作日志/ATD/202304/2023-04-18.md create mode 100644 工作日志/ATD/202304/2023-04-19.md create mode 100644 工作日志/ATD/202304/2023-04-20.md create mode 100644 工作日志/ATD/202304/2023-04-21.md create mode 100644 工作日志/ATD/202304/2023-04-23.md create mode 100644 工作日志/ATD/202304/2023-04-24.md create mode 100644 工作日志/ATD/202304/2023-04-25.md create mode 100644 工作日志/ATD/202304/2023-04-26.md create mode 100644 工作日志/ATD/202304/2023-04-27.md create mode 100644 工作日志/ATD/环境/项目地址.md create mode 100644 开发计划/tiny-datahub/开发计划.md create mode 100644 日常学习/中间件/redis/spring-boot-redis.md create mode 100644 日常学习/数据同步/DataX-web/在linux上安装.md create mode 100644 日常学习/数据同步/DataX/在Linux上安装.md create mode 100644 未命名 1.canvas create mode 100644 本机环境/WSL/WSL 桥接网络.md diff --git a/2023-04-23.md b/2023-04-23.md new file mode 100644 index 0000000..e69de29 diff --git a/Snipaste_2023-03-28_09-21-51.png b/Snipaste_2023-03-28_09-21-51.png new file mode 100644 index 0000000000000000000000000000000000000000..4b65766a568ab8387b78c3ff5b83a4f228dc0be5 GIT binary patch literal 43469 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 literal 0 HcmV?d00001 diff --git a/Snipaste_2023-04-01_17-47-48 1.png b/Snipaste_2023-04-01_17-47-48 1.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ea422b9ec030697b81cd2989716195b364b3d1 GIT binary patch literal 20405 zcmdqJc{r5)`#(IbiXyTlQIdU$Bs6Ft`)=$@2_ad>K4_Dj?7PVb*|U`0lr?*{kS%1- zGM4N-=eR$g@AmsW-@l*Znd9hgZjG7idSBQ3JYU;6{;J9{XGs}I5eURtIaw)n1md_j zJg+}>6#m;!&m;?fowk$JbwnVj(8NDSM$DOA;fIuHX&tnNtvTA|k%JjR!^YC?kt5p7 zkgk0gfw+v2le(+vnz%6RZLQ%_eQQ%?Q|-(5qiu|NGp!TTO$H>`XO5FavB5ln7RcKAd{td95a$@iK6@4TqI zY$6&hwtyB>auG{vM~huLbCTP=U@jR&_u|fFD*wn)Hu^K^XOT=DHEU;+1(`zGsr;o< zJ0CZO@MyR zq0DcFbB7!b@XkcSZ8*TNurO7Qx~nv+!zs9+S_Y(FN>-MA>+2_W*CLu$7M3;SgRj57 zccuGy?o#{l1a9p-o*%wDJ-_&SH#bW;Ew12TktjRodb1V8W9~~ytC{MyPp`rq^qZr8 z7QHx%m&A5xGZde~4Bw5O92ptW$WTVD4JjoEQ+E0?dvPRxJLs%5;vc7l!_j#dJsz#e z)!W_uxT z-C`TY${8lBdRJ((;iB!IpPyQ`GahE0e@Oa)bhP8n&`-n(#7Mi z?mpgc=O4cvpFDYz>shXy zU;-h)W6R=&3tmyO%r|Y$KPuDX!HLxwQ(f9uqEX7y70wIsI1a`S*E6~;O9ofBcIyM_ zg7rU_lq8(Q)GcObHK!gyQmw3F4=P)AGkIEY5sdXtXtbY!3>)wQy_+RKeZHr}MapYb{&y}vEE%ky-4D5R z+m9onDYhYyRgOwy)+(%JvM%p}%8!8-e!QX-++HkyRZ%x1nm7W~*I4#)^-DyGzdI$7 zpy2K6939INH{V-%=breYQ3F3nPfxcNPN*H@*rmw6WIg7@t9@>gI>6EZDhZqug+Mn;{?AZ0yC73VAwoD_h=YWcVHn%FN76Nx7m? zolgTV!>n*chYpoHaieY%a;z>2TmM45@`KN7j=b=(MkL1nag-((&6$&KUsC?QG(Ug- zyrH3Ch0D^E{TU{YGPv-TMWTJj3O?*=X0Olpoevvb;=eIuYKqL|XWY+PdfE#M5P87x z+d(u$Uq=EzhjdLu==hC-8YjY8QIykU${9uF?4-#0cJre82}1qe z3LNMcmmiGwWYdKk>+Aj=iOTH8+R7Q-Y0b2BD$kpCC}WVJ zcGD^B@=tonVL=$yZ9fG^%J4m0okE0&wyJD~%K-sQxb=Vk{x)x(v1u8dFKT=>Om?Qc zy&$0U22-d<)rdOH7e$t^Q&D zkYUyLedO1lJ$(3XRiN9_EY6o}y@?%ru9G{zvL>Rg9V=;Uc-vt1X-hOO>PbydXz2N{ z!G+J8Wqmcm(ORY;V^&B}N>Uf8EuMCiB(U zJf5VIyS=^r=FJ;d(|4_B0C%=MK7rZhILT~M(EsM_#a*w1g~5{PL_}?iJj3no;o(c6 zjrHe6@8WlNu{CS2=2lh$jhy&s%9p7x1(KPxN08C+K}S=_d8v*TdiODzo^lv~kB-*n z?$#=_EawVwrqF2zQ5Gv38wtm$p!F?nr?nwmVxtm#tzN2;#3|DX}l6#Q{Iu*{j_R5h0VO6A)#tI)=yeQRJ z!Zv-qH%Vez*4u9{QNIy4czh?El{{EPYiz^dxM*LVVbOp!f93MaetV^E(yPY{4Gx0) z=&#`bnd*hlk{RbMGaQ+_d<^zurIlWhd2s31>5X*4ar-V~A`9FIr49 zv#dxdTsv5i02w4IL=Wiv~ET|Z$@-Wp^}?UMQNKsrKa z>MH&OZ8)nOfLXe)9d&h5G*_jazM6g7S}G_gsGoyHM%<~wJgrQ#tD=-x;5#E3q{4~B zPF*`1*l^NkaJ8AxX(5!PtR1%bRIgS5&~>$iVBGJaV=S=q&zyWE9rKDuvslt>%HOPL zz*NvOE6BiHNwMJGHOjd3y;vqLjSr*@(BXlRytwmAMsmB8jKA^=H#sk z4?F7d4t)Z7Y&;<@B*WxKSMjRL~!kzMR)ohp7yWX76KE|AtB`Xee(oY#SPeUECA7eB#f(O zeB>m&1vK8TdHEd2Cr_3zzXz#5JWvX^UO&7ZtDJG{#hp$s+L41xl)(?WPfkk4NU>1* zOVQ@o65m(VrG=L8X=i8WynkJ_=Z<=2Bw-(*sbQazi`FwMEBU^4ml3zd>DAt}uXA?S zg@uHA`uYGb=Sp_YuV-a31lB8VxDcVHmg|AWRfgc^LW8+ZQ^A4JQGOeDBvVGW?piQ( z!f@8$kPs@^F>hJrkifp8xV0;d^6fp8x`TL$SNzUZomPPN?TMo2Nqt^^{k67MJi2sC zB2qbntfbG$vwgXC7EONkEX|0m^+$`_m^LpHlY2wwPaRjR3TJKVR~C$81YYv#v6!eZ z=g*QF=OB+1jsVwAS0qzlJv2CMcf!au6smU2E;EL&nVRXhLmBMpHK=|K^svw?O?zLy zJojVY@^A29mHS!YV(Z~?d&!G0row)rVW8-VlVSb`g_rB+aEg(GKm(3SPWZMnZ~Xf8 zj*z61(XFAO(YsE(lMz!LERDQSIRUKrnH11tbsw-$N~?(hYqzFoTd-wS9S_ zEGrv3dke*7dS9}8DXJXQ;{qh@PNz@4YKYkJ-1#dP{+r-Rs!}bwDy4W~Tn8607I@+p zT8u_|c78tlaRO))W4GkP-{1Eo=L~RIn^D7$+A?t2ml=e!(p-{Mqn3`I#7KBUqYF__ zRG!}7+X38da)MXt_r^{{lc{jRWM|YNH~ziu?qt{}#2Y1l;^-0G=U4D2>N!$fPc&wz07>7Z?x|Q{eS>-Eql#Dc`?+JB9T>`RcA*xO`g7+S=OkZ-L~C zT9&i{YSR8fCg^YFuSh7Y;)PW*`pWZsYafN2gxdc!XxpJIaoEOty;nPstvAQ8BD#d~ zQp-Q|ls9S2uV(vi13!XNnuSuSyKaV*gey}sfPIB<`3yy-eY7Oy&4;l>B@a>TXCG*v zD3w@RQc}_1 z+DX$a)yDyqwPV-4jE1Ov^QDA@gjgji0O_s>rymhRaJyn0%+05k$7Y{&0R}UW)`vgVpEc^i1*ra*VfkVY&L`y$rwwL@N`F`iz!Ky2w&)A z!gs62L!bMaffD56;=)5a!LMj+Y^0C zWC3UuohA3lxadbYypN1bI{4hX^7!M|$870W!tMcov2ZK!_xH!CC}wm!rdKcbd=fP- z7lS)|{zvZW&fY3DQ)Ib0W`B1pFE1}SIT=?l;D4T-{E`@}T=?kH(&8c$Gcys%W6=35 zM)@&h58%WeH<66^pv7`68N9bKDj@BQJJBY~#_$CnHky>=hIOEnols_4Sn$dTV7;{`L(aAyfJ24?PXR7yV~|)uKx7oKQ2L7cac3E8b( zz9vdhIEB*h6Jx0i?7@*)uUf;K-uKPljFw4APR^U0%%Q({5!T5dFBgz>hH{da(;PI8 znYlTj`9!VIroIDYs}Oxs?M_b3HH~FgBrMasKS4Zw=)I{Rr&a@?1NLBP7@!U}5;{VWkRD>@k&<~iC zw!AD`gbCUQdsAH86AEVm8^x$@{!b#LL8!_EQhj1pXl^lT2%M&5f)EaUkk6wIKfRG-(VCw@HemHNdm#%IaN zooRn*n06;=y#(6#R*}tZJyeS2>qcz)8QmovB-4g_Rb_0sG)R+D@8{iFsWN9Kxo86G zgK8yirgxtUW0eb&eXac#>AjEXdQyncA)p;IGRkuq3y)x&BIx&x+2Hhvp53;#l*yrNCP2L>Dv}0aDZ8#zu5=Yj>U$W zKQ4$p_1d-WO`lT!qPjZ|tpZyFP=O!V@pX3;O5AbkOlYqr0Y{coRVB_4{2;YciY0|Z zUIMGaN|k0(DaE2D;`3)R##qAc*B!AWCMKqk2ShT%Sd^KiCv8+cxbVZNitm`l*N4}W zlpT-X77^+1>ucNyEbIf3DvZ^iWX6ioTHr_Rzm95-h-`r4#IUD!&LFE^+rO=wUr+Cz zRX;sB32PZY#~;)5^4FbfjN}>Wnbp-2Uc+2Q#ViKZ)>c+o+AIGmUeqFIU7ZZCG z2O?NN!}pw0^el*c9g_|>i3c~@<_v50E-3xx(;qy|WP$bjg#$cTgCFWHu@SSuyngBr z8+tHC&L1&M$Xh5jvb5d!>(cW_sH2Z^o4U(qqF2@PTe`=xT9#~u!er~l?EE}4%ae7k z?57hv=>4UB6yTEZZA8yT+PY1HB;mR4@ZJ~7hb@`~d9_P_&&#bI?CZ#m>ULRAl zxyy7vENE}MOGa0|ubOS=n)9czF*hg?VkBRE!W9r?f4#Po>>eGQ&krUc-L%k_pHH8@*!r&_}(-bD)a-j zFWquHJ>8Prx3=_ax>7<;&cq_YRX*3giQ>viW=u`L`md7m#Xtoj82M7;AwN#bbdr;S z{T$#$K(da)<7lyKa)NxKk^%x(dQT_0SXus-(~jvN`!#!2 zPMwtsYS1hiTJEZQp~?%rzuaKVbXzi>XK3r*HazkC!DowkW#M;Wwkr0<(LLJ*Nq0t=d_v08WkVSpBjDG@bj|*!PtC1OJs+J`)JEjNA z95aS(*l~(%j{CcADAauM`FamCGrSe@GrZ&fur{ z@M5>sshy3b)#-0CUK4^9n%0>nEP~Ij%5{xYc?=E?ws?DgU>ZfG{2is{9-UqpbVVi~ z;x~ZbGcy*QPQJmC13qov$9t z$dFKO?Rk;I&3e|iwmh$-xEPF~6_Yt~-_$O|)r2+&ETG%jGE7cR@m*)ojQ2l%9I)P< z0P!%uCiBp3sf%{5*h`Bs62olTrKNzlNTjBCOqoGD{X{RW94;Pbk@taD#c*=VWY*@A z+#3x!mM$TsU2o$O8$%IB+64c{`RSGbdiaQj3Wz9MWQJ2i`9DK>F=wu@NCeaFNK2jd z`0;^5K2tO=3Q#=oBoxZ2ok9R!zv^b+O>eEUyZ?~^pFK|V^gyX##gh*o+&zm~ZM)^q z5vN$a)}`QuKY*s4RxO-<>tk7&ZuolxzQ(%>mn8qSK3~6n#XZ6KOTElr1LTD3LuOrV z5j5r*o6sEl+Bu5`>a&T9h=>TlEsrAQg1j#)oGqfyxAY-`=sE&Lhd(J`=&C6)@cS|X zjI{{o>yPon*}D$3&NN4Hk4q;hPpf!uYg7zZyDW_aupA*oG{mIx8CB}6+eXnidKn>9 zu%AB*vuscDd+QE+=V=>zMjiNq+k@3#-ok*uqDl?!&k6y$+sf%7qWXN^W3%h|=n@uR znzrlJJK0afmn_@MwG=8zV)Yx#UT#$*Z-Vu~jY$BpDz25^i$I1SH5Q>a83ww3M+#tZ zf@2HzV0SugJCSnqQ{No32hDd{mK^TAZa7l zx-W_#k&05FuwaTpu$&0$UY#vo=x8!0g_PzO7eB91CmXbA|Gby-mXjiZ{eeRGdrQ41 z#K&}*<8;91)$RHG`EnzAPLR`?c!4hgc?=DWSyJ)#_J-Gd`GTN4d*%$<*?A=@OOwlK zs`UcMG=eLyzP@9X151@`t0=zB+r+isp4aTp^ zrl}8=JRAHRC!9y9kayZ1%Ee%(hs@XKdZpGfB=_WmDjX)|_a}mHjc}|U)WGFi?g1-e zD_P7d9iggutRCcmJ8F?2=Tmj|^z{7x{XWX-n*=t$s0dWg?g^1Aw1I@BTN&Q4B6^~i z#TY|IC|1t>I|~4Pr1*v9v6z;$d3Roc2V7BILcv8Ao205pCTx+A?(p8<68tq5iJuO6 z%8xvYZjHFs#-5rd(z&MTRhdwxT>IEGSS%q18fI_+cU>~2yq~+JaWv1&%q%Zo$F{a% zA71C^dgtrwtMqAQv)BpDws9so(4Cs6S7AjaJvNd1KXUa=E*kc^1?`mRpgkF-lA_|Wl6_V4m>r|2!~0L4oSdDV9UNBb{Lg=4PS4({tb1Py z2#ERI=x^goS0@q_f2^b;xC)8p*UA1$x7FRV*p=UKztss#gu|iSRoqleQ-|#awnnE# zb}lcFRxGdN7U?%#(U*? z`l1XMv&$^vX+s;8t{&U1K8-wo4n-nO0GK~4*2WqECm`2zkLza@j}mE4sYOscRz4-s>U+nA*FkOofp3-;0Ke>|7Qk!;T$zL{@WkQn3RW3sXOM7EBTPwdKJF?!hWUS&>SDJ!NiHEs)!}tl?tI1Dn zD;sr|wG*`fWlO7}4J93Z`+Y-5xUYQ}To8^X!GPt<&c+7Kq4A*YrqcPrgtfnaS9I5> zvED{4UQs_A#=UeUKld*|gi`)pBC!dMY&k^PS)?asTAc=x(wNB$N`sTeco3 zlzx3@{bxFh*>-DS&>kFeNmod^B?w7CU>(a03VE2t-FqN9vjeiUA@P=eB9=7earDJ= zdt6d|M~^%<7qduGih=Yfs;VXU1%0^|;+P z)ZB18!o!L}@lH+9=z(O;>DK4!xbXASZsWi0!|{))SypTjYSi_v0z2TD!yODcjyT0U zgR;Wh+=bsw5&lxR>u7#P!%Q2z{IkdQ_#9?^A*J(Mr_1v~LqnH-e#+L|4rrVRGZV#j z7?;|m;P%GjB+~;eU?Ijy%hrbv*Hz$4qP+r=>7bT*|8lh?BP;#rwBvL;d=TIZSyljX z8`T?C;AHQI5Hxta(zUj&Cml;Rlb%2&nJfVt9fBf2g~M4bfm4792dDBZu46t*+bG5M zK=tUCqdLD!eHxjYgY;h4j#&ul#eA1;l>xWk=ZddDich0@R(4gwp^ip!^5mf;CEHoA zAHX*)=#3hI9k7)}Pcd*lEZwrfxEquV&?z8ng5Uc)xaJz(|LJL;;(`I*%WzE<)k`4Q z=l8Wp#;vC8PM=stLn|4_(=hu4D4YFWMRvcJiFkOuzqdE4$#lehp10b!Ln-iwleov< zKZlQ;tSlehzE4G^#yJ6x$?^|cG@dI`OOF+PMwxoVaJ8CQXBZ9kkm1!F*(MX-kfROp z4wC_W^E3sGh0*qqU=xB$f+f62x7Ch;#c2QnOzH6e>*?zwj z1XOEpKNUOb@K!_QyQXnsLW?)JfGQGObwc-6I%SxhoSX=1vF!e{7cmPSB$*y2=bC9iWf;kn;MpQCR&lL{{Hw-&!hw4^mw1Kw~`dO@6{-I{|SVoJyhBK zjd!J7A-qV@0GCET{y|6G!KH7ciJ77f%P^EO62fY-)( zku~Ex!dVvvihP;0BlGyVu@zBEl~GGYQO_Xo0guhwwZ^=8=f0eu{%kXB6`=pmndx2n z4X%Jvw}=Jh&1ceP`uTlN%QNtJV^psyhi3W@UVb{%)JixQ+~rR5&DJ0Y2cu%$Xy_Vl zVs^H-H`Akx8~@Qkc%`e4)1NwCX=FRm`h5F$go@t`Y^pIilj#oZEeUt%*(@Nrjo(sN ziv+8KtMs8(n7gNu0g0Q532siK+`YE|G=q$2=jLCIG9`o0vW`8in|3qG*GAu0qt5%t zu4S_awb1|Dq=P@%gT|0c;J_K^eed}NzGB{ZKMRo@hMDR1IoW^GSBo4Qdz9ao&@x#w zX17)A5GN5D6m%|(r^PI5x$kL0K;&FeR#wsp*VbU|uj6f{q;?)26&&6?Bh#aMi!SMX z;jEnJPSs7=8@+Lm2+7uxaN!TVKu8)RT;Qv03R0-Ju1IxEhbK^Y#005- zGpP(j4cz_XX;T{hKE3rP)5&DhuUrbjY?kV3Dkvy$P|wZJCp=}(89&Cd6y{f#)qWFQ@<6rFZZ6V>{XpZ)GL+P<4FFEC&H{A_TObUO=`t$2ZQT&z4w z;z`kfD{^sTr^+aQaDmo|&P-hIVP6t%4O0CTsAN-tj*aMVYWk2y|Z~FYzy zid5M%H%>g~5|R=x(4#)<;9C9G@{HauvbSad?m)L74rDD1F{-)JpkhKfr8X*0?9!;_ z&w7z-??}t@o(Nvx8@VYgtX2ATtk!p9X>|0*54QH#q^qVmANr=FWLX!7$~5xpb*wTU z2ReUOuKLLt`jpX;<3hZ65aSU z32@-m>uK~dwofACCti=J z34L5n{#lwP*08%I%UTHH|3vv8X{^aymc8dF=)Lw5hUTH0oS&!#4z(=Ta!`P}F6Tt@ zAO7$26VLx`;tu0_iB>=H4Nv_qv0we|)*Br>&dk*nhsx4!Z@w35^KIkA*0lHjG{k*I zcc*TVjUK91&)>WxLq@!r%SbL0C!r5nI_JfqroARpK`4CF6K=yB*+zrJcpI-;p?2Hbpc+9l!r}G9WTn)oyD3Bw&%i!kNs zm+*o5Cye1?!C@rwE%h87i--YL11Zf;-A_^benyuhy$qtws^eNF;lAabE0P`;jJC%^ zk(BmDbMK(?pCJ$rC3uvFSni!-a&4M)NP8mz*o{Sb`+o=+FX)V1U-$ut&~|L(1+`JYT z`7$SqIR#+rW0aw7NZSWS?Z3Uk)9K`iMz4+62d1~kLn4oJ8IM! z-EnQ^ynh>K(GK5N_IH*bYg}OLg~#Jc>zloLpF)x{mLl+ci6(nO+x|)n9%=XM%Rgd4 zU%s&lB#P4;$XTgQCokNQB3huNkggznAOu|YeWaYBp+-Hwuo_wr%SnP5J@F6kpTfI+ zd9SLke~~gcIM~1ca+G}8u#L1D6v~E-r7^qy2?G87NWgN^YI^$m^CQeGV(6K-!!{6C zo#{-KCiw#K$vaZ;(R86~RQ}8dn~mYDpNflhLiL^h^xuWUdGm^vMa+I&3ds~>rdwyd z{xjeG8SJRlvC}Or2Me~|3Q|bIo$&X-Ag`4L4ORlpm_`4LW$YLpbdy5DJh9D z`^=$k(qJO6|7;4K1bHg%^Zk%b-$?WWScq4+wtei*D-CKh$d0KOEW@LSi-FR>jJ z9^qlU&nK2wQ^vQxKw%sS+CbV%T6avQ#ee1dG?#)!7oq(}7x*GSxvoyN{TM7LG+rkf zGgGw@LL>L2IwTK}l%U12bU7KKP||8}a*ry}C1x$OEb+0izY-WJX38a)C526nr(1YI zLnNa~v^p0SOC6(}0c={M3bcGn1)%Ab$-XJ{&rcQ;+3^UG9am00k=*%H)R2HY=G?v@ z8uzifj^3|!OvK^0?9-?7fQ5hm{tX^r(A9hYrp#z7s{p^BgAn_~u!Mb>v8XhuCuNCG zOpIjBEGgLtG^~@XdcFJHJ}YeQgE~ytOrG*d~T`c5SwsCBet6;J#4ShgWfI$z9;KrFMmg-`i&28^$6eY+kVF3Y;IRXJ=!r%_*rxr3Ddf)JCPrBXMSPq&25{VQO``O!zl6cZFL4dSE$232r zG&lC`x*qE54|aI{y@Bo6fZ#JLBRNP9OjMK!Aer${lX`AV#x$8aSX<|mm2Cl?dvWJo zIbHn>DcFSusi7ssB_)pOq$;(SSs?sz|J;8>Ga+$RGD~1BfKdVevm!Q`;+%LElYJe* zxSZ{A76bykco2+7t2|ubiURZyjBAA}I^wxu$YpP*K|R@aYm^mo|H9s#J;1o@D@9N! zhz3*{@iRO4bI_l0uv`D3Z%YtIUY^+4fjp*R{p<3gCmrpF4~S@jJmxz=0q!eWg(d4=oaxk>{=Z|&n4zwLoctOl`M3zCI*Nhd5CN#(+izPN*A znl|GIZagck_Quy2>|VYYGT++CSJ4bR7$VXiKVd5M3f|3>{`FXY!~A+cj4HKHHXChT zgMPXsv-hq5B@lLj5YIpT0w6G7yEb28j6i({&^QT#NvYA#1)#> zr@@UA<2}3oV9{|j2KYYgwRD^1ZXmv9TqzO)0*^=^H?IxIdz%#KXlus|+klm8@FdPR zA8JxAL`~a?-7^pHlk{cjyWeVJvlP9-HYd?(_zIpQ|K*On{!2-N*X_W8tc0UQ+ z6UA&UgYpT2jg*i{vt+Az5sZsq_SX9@k^A;f0YZ7wk<9zYacctxSzwZ-JUcsZ5U>d# znVBmk4SQLA!Vpnqj{lLPTh#CAIv!5~!=e|avaCXfK@jKYU{1n)WFE@xmU8yfWysI}$SZsWJVHY#PRgd%kaO2X|IVXfWEi|Le zy3Z?Vi|1Is+V6pezOsdZRDbc{!Vq?Kx+6PF&+;n75yGTH^qWE1Oi}fd4=wHqBWyr{ z1d0N8OTjr`v17-MWomL!`HL`y2#)>u_3N@r6xNKff9!1oy)ob=xo|*W)6Yr}?>hYh zIsf}S(Kob}G7Qo1VLJj7phfdpe{U9^QR&^gQoGLi*t=%zI@r3;-Fi#y17r8Nyt=T8rS|BzTfSV~F85po6keHjAg5B>R@2R3faTqmX2o5+) zEv<(7g!_7y{P8$p^VhG3tW;xI4s1t>*WR`)tNN5b5r##Eg;7od)J6}rakfMt11VCAhly-K-%(# zl$PLRJ!JZYlx|2HKobWEHjj`DVu=RpF@y@EwAuqGOTNCj+7|>k-JRYziju;Wg;)$) ztVQT>oyzy^D$(;lc8JcY_*B@^9hbDTAdm1yDiDtAsiXeW)9h} zJuh#zh}oH$Uw2*}ixq|A`TN(Ig@J)VaKttM1+@dobnAq$3GIvi*b*2k5>EToQfOc` z!T`Mu@F4V#kQ#s^G~i&KC!6q?6!u7Hy9mY@<>ZT4Rrfd0Vx6+o#N88 zR!gy%zlAz|{ic9YrA!k|F)P2DAm>q|tM4P#3-edeb4E!QIdh7dY%M$A7Kt{JXrRX^h1ltg)3tv+G2L47k#6ieaE`5lcd7j2U!l~s=gHr z8@5G|NR1%-{&3MKobs14f&GDGd)%4l{E%|Hdf#7vAjsDe9Q9FPG*Wd?!h>K0Tk0XJhfL4UFSvHm* zt?(Q3%1a)3XOx^(>T^HRT9}vv8W~w6&Xe4t1a~+2m==9BPptYD5(;5B>!ZpOziun@ znCS@FFIH`gfD@Abr<%?f6LzMBO^@UtxwOa?X06=2Lr0h2d$>>e6Y4$!;wC6zJ6r&FNUOQdY4gx_3kCN% zWy+?(Vi15I)!Y3D&XjN%?lsDwS$KD;_=d^?M}Qy_`Dfi7jzol!PjBH>_9Eyofn8Mr zIG{-9I+wgQZqEo`a|cDBEUr>%SXAMA`_=Lat%cq*Y>n(F4^Sj`@N;?oEUYcq%0WZt|{^(>{U8Qq+6 zUBrNi4B7l;y88QfV1%@IB%7<}U%>0h{?9PhCbW~W!IMs>JxHd4Wd#$z(?tsgd@d6W zXD1@rxd%0So~&hPdjE%}R+@CEsm&LnJ6!5kl@yp%HuRbcnn!zX%L|n6&5R8i?+f_I znIKfE|0Qt+yf1_CrVBF4&ES6q;B;~fS|i>oeCn{g4!4>Q{*I5z?_jco@nL}m-t^N0 zxL<-As80dX!hmEL49=5Ogy-6?(9wq+u+#p5W|%-79_gU8-HJ4Yn6^Qk=Bv1awV5j_ zYvXRlSP9JXwJY*Rp4-Akg40McPi1Q?#Iv>8>J{d|=Jzf#o!y;mKbTCgO=l9PzQ9?+ zBoXVrw)`|G4e`a`Fgey*Vb-(uPT=IZ#7 zOo+ME&WUIXA$h4Z((@N@L86_r{Ev1fN{bdkiF~M}feFH&!IF+*K{gt>eg}yntwPnCFX^gMZY3AjLK8jeiJj^5-uI<;*XhMD& z%6&lWu&2$=^A|6&3M24y&Kv4 z6Is(ggl|%IMv-`D+U_V+SLu*aWFc=K1f~rMYO*w#a3VgwrFEn2EMXjCcmCO0-Lq@ozpKXevhx=9zqI6SxmTdWLmLPms>)Fe4*g?H%`4eJ z!Q;mfXJ!ApS{Voy=E87ANmW&nHXgb$1jw)FdSr7nKh3Y2awxMFzDQ{%7-uS|i@sd` zcc0#P4a}H}r2I5qt5jDwVSNkZFU3OT53VXs2~s|w)&jYneqZPVi0c-lt1H>* z&omc8`sVq&69_+9;@2andtH9fDIbRGh68)hAP~BbdSr`2FNPTN*eE5EBWIs^w^D3;N)mzUI_)xn2 zi=QS~0lDg0KphspQhQBd+NmJ2gITOJJA2yf_ws1C%~bX9Ht0B)m)b z122}ab2|_z<_^&3S=0{RcWx^5)~ovLIqT59chK=lGREykKzcfUZ=R$1u<5Sib>u^0 z(9~wtOb=ldT#xcN3<-*h=gy14Syl`a=RtN-J3kO)>SIr9n7gAoXGvgK_rnJTxXVFW zjc9^zpCHC@%H3Ae?dg3xsDff>lw9BFjO~GfNqzJP!T=P^ii(5-zMDJ6xw*l9z>%e_ z0izGul;Ajs(*xZbb|QZWu0dCtLFd46z!;y?5(VWYG4wZ^lBe;`fE6|BYBu{l_O_h} z7BI6%2=(TXQ-|pOdZ`&$gi?`BrXuj23NV8WcAjpubgNe5Ue?c*^z?(V3xkq*2CIq% zYGK@OO6wme<%ZHJj9oBZE!Sy2wrxH)Rzj<=b%uCDM_3Z({Xx+NT)*zV^;&}dOnA!k z{>1gVpessoP0c^N*|w|!A*ZQl0#;Y*1{Ou^>t~?9k%$g@{qrpav@Yim$uG3)YRLF?2C6N(9tQvK0xfbY`ajiKj@LQ` zCMPJBl$GVfdjgkMGsr-S=>PCb5Zn$BX-2=Czw?SFDZT;Lz!8Zb`qpdO9TW)m7 zz4BkxT&3bcK6}Gm1?h+sB?w-tgr?HXi?o2xBSGe0ZvqljVwm9d>#Bw-AQzzjO+qv} zuiuki9H~-}0%i}hCYUY=I8P-aKL4AR4DYP&Ex{LBRBz8^r^cgW2aYW;ak{M6mu&~ef$SqN&1_rb+BGIc@X%_umux>rQcKIiCz&= zE!&&9!i72V#ibF(0i`24gGISue(RvW-05krq*Eae2n@3|Jjjx-n>i2+gwZ&{Lxni@ zfbv_?oB`@qy$q4kCtdGlW^qxmPc=cR60X^>4P^Jr3>G~`cSc%U0Zwr`nu0P>$TPjV z1(sw_l_W;|0|anDNx#5Mt( zat;}(Mcx|4M8M=j|L&v{F*d`fi9%gsW+w73>ibe(AAZcv=7!(~=)V{Wif>?&f!wYw zkg^D_?LUvKEStg4xkespCpK1S!cZN(x0EIWWhx&u8@FJTBrtX)u)`6UK_I-9I;;oJ z64}k`npmN4HH3fF@_YD7AB;LskcVvo@sW_!41W)*JdB+|Acowvbc!t>p=zmgz5UT- zhBmdt5yW*MdZIH-p^Y{W*xRa^I8EW%Z~fU7$!BHP<_jao6K#h%7mE6GlpUKlql5aK zlAexgN7`+!_ZgoLs~v*`kO`~rMQl=1t`jp?ah_$9x54@!ytg?jcmdOH=EqF88IM`} zWgI3(fw&&C#a*RSWg#?2Ov7jJv;Y~{T{Rb{kbrFb(CK700YRVx^Dp2Zxq0pU!rRQD z9yuAp3{It!`3sTnC&+65ZGL?Ft%ODmt%(Xy*P z8}pHlm{;NAaM!w>$7(J=H8#mJ&7bn&!{Q|OLH=~Lw$t|&yys014sY*i?BcHWM)l^7 zcds$FYDdz0y^+j&f8}Q_{<6gp#77f|qQl&(SCGnNeH#n|f|vg^V|gjBes%)P+TZU{ zOyvV5wpdvixit0obo*UZCSMM?p(YZbp@FUufU^_xI%Ib{=AJ5Mx^Nb|XcQ{f_y`Q( zA39s57`2`?18TsN=o~GO}=jQr~(F%eU2S-CaDzf#BvOv&{Z( z+Wv?53kELLZfoAVTP>p!n+ioZF4f>HP6Bz`ahmhq`qP{at|RW7*?4;QaJUe;qMk zz6Wjy1FqYCtyBDN{)&Sh{n?y5Km*;t1^P$KfJ5FN6k?Xy1LwSF`c&<`2V8ZS1DsY7 zIc^VJGV*YCjQnPwrGFsuAJAK(*M=nG(NRSG`m~ZB=UuP_`01x zrmwfFZ!rSyp9+mSQ2HCvg)C-&b^{wF`tkc>w!9Ei zf7gBWMe{+0{s|K1z=JJ5R@9uEa^X;cQ_K_Lx4>1<=PdJmMdUPeM6TVxFAp9>o+E7e zDl{J4t-rkCEpT_|wU7_Z=U4qyEPM`KPvLtR*ru-t*cH;eXV2n~^A5e%0WNCYXb)^< z-2<)~kB*+*;b!;qiSWdFCzqQ!-+;S}*6;tf>+nN?+jk)AKU!<`{>uT6%JTE~FE1@E zw1%8XW!rOoUwl}Nv&qj72cH~fKOFyjy1?EYB|on{J+I+C|7ZR*`{c!w49~0rwly-Z z7XSbI=5ALUa1&$;bi>i-3tsW@_knA@fFpkK@$&wUUcG<+Jm^sC^4~UlPl>o109|vm z&7x<=$3^|0gxB&kca(XF>OZ@c0UWl^$Td`Bnq4`!4S47jcXDO$<@>sk+e&{L*YD3c z`fTaxa1rVDo95Nu|Nl9Co%_ByL&Nd|z~b#?Nfb}N#K)U|4jgcJxYeX?MUBCMhb|YF z&)%llBlfH(8ngoSmFvZME{g*rr=2dp)bZHd=?fFX2a(8&SH66@^t68eo0)4*hyTfV zSrlmWGhWX2&cF4>@k&Qo85R_Ei-C@Ns}WzbY?v zZnS1)`0xbW(cIv0%~bd1o|2zGn(gfmOyFj4XoYV>%05!64xVmc=z)u2oksu-{WFk# ce%!nN>`XtdhrbXLe-ARp)78&qol`;+0F?$}82|tP literal 0 HcmV?d00001 diff --git a/Snipaste_2023-04-01_17-47-48.png b/Snipaste_2023-04-01_17-47-48.png new file mode 100644 index 0000000000000000000000000000000000000000..88fb5667c5201730f4bc478d8f826286a2a49f6c GIT binary patch literal 47097 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

nv`x*wf0n*K}@H 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%0D#%##|{_L{2&66(Ep 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 F{x1Z&X2Spg literal 0 HcmV?d00001 diff --git a/work常用/CQL 常用语句.md b/work常用/CQL 常用语句.md new file mode 100644 index 0000000..f51e0f3 --- /dev/null +++ b/work常用/CQL 常用语句.md @@ -0,0 +1,15 @@ ++ 查询节点入度为1的其他节点 +```sql +# view 为标签 name 为节点属性, <--表示指向方向 +match (n:view{name: "CRZ_FINANCE_INVEST_PRJ_DETAIL_VW" })<--(b) return n,b +``` ++ 查询某个节点入度(其他节点指向该节点) +``` +match (n:view{name: 'CRZ_FINANCE_INVEST_PRJ_DETAIL_VW'}) with n, size((n)<-[]-()) as s return s; +``` ++ 向上遍历 +```cpyher +# 查询与视图CRZ_FINANCE_INVEST_PRJ_DETAIL_VW相关的所有节点及关系,<-表示入度,在这个例子中,视图是作为被其他节点指向的一方 +MATCH (c:view{name:"CRZ_FINANCE_INVEST_PRJ_DETAIL_VW"})<-[r*0..]-(result) return result +MATCH (c:view{name:"DW_INFRASTRUCTURE_INDEX_VW"})<-[r*0..]-(result) return result +``` diff --git a/work常用/Linux命令.md b/work常用/Linux命令.md index 2ae48b6..dea8918 100644 --- a/work常用/Linux命令.md +++ b/work常用/Linux命令.md @@ -153,6 +153,29 @@ lsof -i:8080 # 查看文件进程 lsof xxx.txt ``` + ++ ip +``` +ip link show # 显示网络接口信息 +ip link set eth0 up # 开启网卡 +ip link set eth0 down # 关闭网卡 +ip link set eth0 promisc on # 开启网卡的混合模式 +ip link set eth0 promisc offi # 关闭网卡的混个模式 +ip link set eth0 txqueuelen 1200 # 设置网卡队列长度 +ip link set eth0 mtu 1400 # 设置网卡最大传输单元 +ip addr show # 显示网卡IP信息 +ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1 +ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址 + +ip route show # 显示系统路由 +ip route add default via 192.168.1.254 # 设置系统默认路由 +ip route list # 查看路由信息 +ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口 +ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254 +ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关 +ip route del default # 删除默认路由 +ip route delete 192.168.1.0/24 dev eth0 # 删除路由 +``` ## 2.2 查看网关 ``` # 查看gateway @@ -203,6 +226,49 @@ scp local_file remote_host:remote_file scp -r local_dir remote_host:remote_folder ``` +## 2.8 查看网卡 +查看当前使用网卡 +``` +nmcli d +``` + +修改IP,添加DNS +```text +nmcli c m ens33 ipv4.address 192.168.80.10/24 # 修改 IP 地址和子网掩码 +nmcli c m ens33 ipv4.method manual # 修改为静态配置,默认是 auto +nmcli c m ens33 ipv4.gateway 192.168.80.2 # 修改默认网关 +nmcli c m ens33 ipv4.dns 192.168.80.2 # 修改 DNS +nmcli c m ens33 +ipv4.dns 114.114.114.114 # 添加一个 DNS +nmcli c m ens33 ipv6.method ignored # 将 IPv6 禁用,针对CentOS8,三个可选项:disabled、auto、manual +nmcli c m ens33 connection.autoconnect yes # 开机启动 +``` + +显示连接信息 +``` +nmcli connection show +或 +nmcli c show +``` + +## 2.9 安装SSH +```shell +yum -y install openssh openssh-server openssh-clients +systemctl start sshd +systemctl status sshd +``` + +## 2.10 修改DNS +``` +vim /etc/resolv.conf +# 重启网络 +systemctl start network.service +``` + +## 2.11 网络测试 +```shell +# 返回0表示正常 +wget --spider -T 5 -q -t 2 www.baidu.com | echo $? +``` # 三、权限 ## 3.1 用户权限及用户组 Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users) @@ -313,6 +379,46 @@ df -h jsp ``` +## 4.9 软链接 +将python2.7.9映射为python,可以先用whereis python或者which python查找位置 +```shell +ln -s /usr/local/python-2.7.9/bin/python /usr/bin/python +``` + +## 4.10 查看上次登录 +```shell +who -b +``` + +## 4.11 配置定时任务 +hadoop任务可能不会执行,因为crontab的path和系统path不一致,找到hadoop命令。如果出现找不到命令情况请添加cron path +```shell + root 用户 + vim /etc/crontab + + SHELL=/bin/bash + PATH=/sbin:/bin:/usr/sbin:/usr/bin + MAILTO=root + + # For details see man 4 crontabs + + # Example of job definition: + # .---------------- minute (0 - 59) + # | .------------- hour (0 - 23) + # | | .---------- day of month (1 - 31) + # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... + # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat + # | | | | | + # * * * * * user-name command to be executed + 20 04 * * * root reboot + + # 加载配置 + crontab /etc/crontab + + # 重启crontab服务 + systemctl restart crond.service +``` + # 五、vim ![[vi-vim-cheat-sheet-sch.gif]] @@ -329,3 +435,15 @@ jsp | 修改文件format | :set fileformat=unix | | 删除 | dd 删除当前行 | | 方向键 | h:左 j:下 k:上 l:右 | + +# 六、环境变量 +## 6.1 java 环境变量 +```shell +export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk +export PATH=$JAVA_HOME/bin:$PATH +export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar +source ~/.bashrc +# 验证 +java -version +echo $JAVA_HOME +``` diff --git a/work常用/Oracle常用.md b/work常用/Oracle常用.md new file mode 100644 index 0000000..2b7146d --- /dev/null +++ b/work常用/Oracle常用.md @@ -0,0 +1,159 @@ +# 一、元数据 +## 1.1 存储过程 ++ 查看所有存储过程 +```sql +select distinct name From user_source where type = 'PROCEDURE' +``` ++ 查看存储过程语句 +```sql +SELECT text + FROM user_source + WHERE NAME = 'EXECUTE_JOB_FINANCE_SURVEY' +ORDER BY line +``` +## 1.2 表 ++ 查看所有表 +```sql +# 查询当前用户 +select * from user_tab_comments where table_type='TABLE'; +# 查询所有用户,当前用户必须有sysdba权限 +select * from all_tab_comments +``` ++ 查看表所有字段 +```sql +SELECT + COLUMN_NAME, + DATA_TYPE +FROM + user_tab_columns +WHERE + table_name = 'DW_INFRASTRUCTURE_SURVEY' +ORDER BY + COLUMN_ID ASC; +``` ++ 查看具体字段 +```sql +SELECT + COLUMN_NAME, + DATA_TYPE, + DATA_LENGTH, + NULLABLE, + DEFAULT_LENGTH, + DATA_DEFAULT +FROM + user_tab_columns +WHERE + table_name = 'DW_INFRASTRUCTURE_SURVEY' + AND COLUMN_NAME = 'STATISTICAL_TIME' +ORDER BY + COLUMN_ID ASC; +``` ++ 查看字段及注释 +```sql +SELECT + b.COLUMN_NAME, + a.COMMENTS, + case when DATA_PRECISION is null and DATA_SCALE=0 and DATA_TYPE='NUMBER' then 'NUMBER(38,0)' when + DATA_PRECISION is not null and DATA_SCALE>0 then 'NUMBER('||DATA_PRECISION||','||DATA_SCALE||')' when + DATA_TYPE<>'DATE' then DATA_TYPE||'('||DATA_LENGTH||')' else DATA_TYPE end as DATA_TYPE_, + b.NULLABLE, + b.DATA_LENGTH, + b.DEFAULT_LENGTH, + b.DATA_DEFAULT, + DATA_PRECISION, + DATA_SCALE, + b.COLUMN_ID, + b.DATA_TYPE +FROM + user_col_comments a + LEFT JOIN user_tab_columns b ON a.table_name = b.table_name + AND a.COLUMN_NAME = b.COLUMN_NAME +WHERE + a.table_name = 'OA_VEHICLE_OIL_CHARGE' +ORDER BY + b.COLUMN_ID ASC +``` + ++ 修改表备注 +``` +# 表备注 +Comment on table DW_RE_PROGRESS_DETAIL is '项目进度-进度明细'; +# 字段备注 +comment on column Student.id is '学生id'; +comment on column Student.name is '学生姓名'; +``` + +## 1.3 视图 ++ 查询当前用户所有视图 +```sql +select * from user_tab_comments where table_type='VIEW' +``` + ++ 视图创建语句 +```sql +select text from all_views where view_name='DW_SAFETY_RISK_LARG_QS_VW' +``` + +# 二、常用函数 +## 2.1 行转列、列转行 ++ pivot +```sql +--行转列 +select * + from SalesList pivot( + max(salesNum) for shangPin in ( --shangPin 即要转成列的字段 + '上衣' as 上衣, --max(salesNum) 此处必须为聚合函数, + '裤子' as 裤子, --in () 对要转成列的每一个值指定一个列名 + '袜子' as 袜子, + '帽子' as 帽子 + ) + ) + where 1 = 1; --这里可以写查询条件,没有可以直接不要where +``` + +```sql +with hsb_stat as (select count(1) as num,'已完成重大污染物识别与评价项目' as item from SU_CHECK_ENVWATER_IMPL where STAT_ITEM_ID=110 and FINISH_STATUS=1 and PROJECT_ID=#{project_id} +union +select count(1) as num,'已完成环水保检测项目' as item from SU_CHECK_ENVWATER_IMPL where STAT_ITEM_ID=111 and FINISH_STATUS=1 and PROJECT_ID=#{project_id} +union +select count(1) as num,'已完成“三同时”落实情况项目' as item from SU_CHECK_ENVWATER_IMPL where STAT_ITEM_ID=112 and FINISH_STATUS=1 and PROJECT_ID=#{project_id} +union +select count(1) as num,'已完成环水保验收项目' as item from SU_CHECK_ENVWATER_IMPL where STAT_ITEM_ID=113 and FINISH_STATUS=1 and PROJECT_ID=#{project_id} +union +select nvl(sum(CHECK_COUNT),0) as num,'检查次数' as item from SU_CHECK_ENVWATER_IMPL where PROJECT_ID=#{project_id} +union +select nvl(sum(CHECK_ISSUE_COUNT),0) as num,'发现问题数' as item from SU_CHECK_ENVWATER_IMPL where PROJECT_ID=#{project_id} +union +select nvl(sum(RECTIFY_ISSUE_COUNT),0) as num,'整改完成' as item from SU_CHECK_ENVWATER_IMPL where PROJECT_ID=#{project_id}) +-- 重点 +select * from hsb_stat pivot(max(num) for item in ( + '已完成“三同时”落实情况项目' as santongshi, + '已完成环水保检测项目' as hsjc, + '已完成环水保验收项目' as hsys, + '已完成重大污染物识别与评价项目' as zdwrw, + '检查次数' as jccs, + '整改完成' as zgwc, + '发现问题数' as fxwts +)) +``` ++ merge into 合并 +```sql +MERGE INTO t1 +USING (SELECT id,name FROM t2) t2 +ON ( t1.id=t2.id) +WHEN MATCHED THEN +UPDATE SET T1.name= t2.name +WHEN NOT MATCHED THEN +INSERT (id,name) VALUES (t2.id,t2.name); + + +# 结合with +MERGE INTO #TEMP1 A +USING ( +WITH SUMORDER AS + (SELECT PRODUCTID, SUM(AMOUNT) TOTAL + FROM ORDER GROUP BY PRODUCTID) + SELECT * FROM SUMORDER +) B ON (A.PRODUCTID = B.PRODUCTID) +WHEN MATCHED THEN UPDATE SET A.TOTAL = B.TOTAL; +``` diff --git a/work常用/SqlServer常用.md b/work常用/SqlServer常用.md new file mode 100644 index 0000000..618924a --- /dev/null +++ b/work常用/SqlServer常用.md @@ -0,0 +1,147 @@ +# 一、统计 +## 1.1 数据量统计 +```sql +exec sp_spaceused 表名; +``` + +## 1.2 批量统计 +本质是循环 +```sql +exec sp_MSforeachtable "exec sp_spaceused '?'" +``` + +# 二、分页 +## 2.1 topN +查看前5条 +```sql +select TOP 5 *from T_ProductMain +``` + +## 2.2 分页查询 +要查询上述结果中第 7 条到第 9 条记录 +```sql +select top 3 id from tablename +where id not in ( +  select top 6 id from tablename +) +``` +m-1=6,m=7 +```sql +select top (n-m+1) id from tablename +where id not in ( +  select top m-1 id from tablename +) +``` +通过行号分页 +```sql +SELECT * FROM +( +SELECT ROW_NUMBER()over(order by getdate()) AS rownumber,* from T_ProductMain +) AS #a +WHERE #a.rownumber>=1 AND #a.rownumber<=5 +``` +sqlserver 2012及以上版本支持 +```sql +SELECT * FROM T_AttrPart +ORDER BY PartNo offset 0 ROWS FETCH NEXT 10 ROWS ONLY +``` + +# 三、元数据 +## 3.1 查看所有表名 +```sql +select top 10000 +ROW_NUMBER() OVER (ORDER BY a.name) AS No, +a.name AS 表名, +CONVERT(NVARCHAR(100),isnull(g.[value],'-')) AS 说明 +from +sys.tables a left join sys.extended_properties g +on (a.object_id = g.major_id AND g.minor_id = 0); +``` + +## 3.2 查看字段及类型 +```sql +select column_name name,data_type type +from information_schema.columns +where table_name = 'T_AltAffix' +``` + +## 3.3 查看数据库版本 +```sql +SELECT SERVERPROPERTY('productversion') as version_code, SERVERPROPERTY ('productlevel') as version_level, SERVERPROPERTY ('edition') as version_type +``` + +## 3.4 系统自带 ++ 存储过程 +```sql +dt_addtosourcecontrol +dt_addtosourcecontrol_u +dt_adduserobject +dt_adduserobject_vcs +dt_checkinobject +dt_checkinobject_u +dt_checkoutobject +dt_checkoutobject_u +dt_droppropertiesbyid +dt_dropuserobjectbyid +dt_generateansiname +dt_getobjwithprop +dt_getobjwithprop_u +dt_getpropertiesbyid +dt_getpropertiesbyid_u +dt_getpropertiesbyid_vcs +dt_getpropertiesbyid_vcs_u +dt_isundersourcecontrol +dt_isundersourcecontrol_u +dt_removefromsourcecontrol +dt_setpropertybyid +dt_setpropertybyid_u +dt_validateloginparams +dt_validateloginparams_u +dt_vcsenabled +dt_verstamp006 +dt_verstamp007 +dt_whocheckedout +dt_whocheckedout_u +``` + +## 3.5 查看字符集 +```sql +SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage'); +``` +| 字符集编码 | 类型 | +| ---------- | --------------- | +| 936 | 简体中文GBK | +| 950 | 繁体中文BIG5 | +| 437 | 美国/加拿大英语 | +| 932 | 日文 | +| 949 | 韩文 | +| 866 | 俄文 | +| 65001 | unicode UFT-8 | + +## 3.6 查看数据占用大小 +```sql + SELECT a.name [文件名称] ,cast(a.[size]*1.0/128 as decimal(12,1)) AS [文件设置大小(MB)] , + CAST( fileproperty(s.name,'SpaceUsed')/(8*16.0) AS DECIMAL(12,1)) AS [文件所占空间(MB)] , + CAST( (fileproperty(s.name,'SpaceUsed')/(8*16.0))/(s.size/(8*16.0))*100.0 AS DECIMAL(12,1)) AS [所占空间率%] , + CASE WHEN A.growth =0 THEN '文件大小固定,不会增长' ELSE '文件将自动增长' end [增长模式] ,CASE WHEN A.growth > 0 AND is_percent_growth = 0 + THEN '增量为固定大小' WHEN A.growth > 0 AND is_percent_growth = 1 THEN '增量将用整数百分比表示' ELSE '文件大小固定,不会增长' END AS [增量模式] , + CASE WHEN A.growth > 0 AND is_percent_growth = 0 THEN cast(cast(a.growth*1.0/128as decimal(12,0)) AS VARCHAR)+'MB' + WHEN A.growth > 0 AND is_percent_growth = 1 THEN cast(cast(a.growth AS decimal(12,0)) AS VARCHAR)+'%' ELSE '文件大小固定,不会增长' end AS [增长值(%或MB)] , + a.physical_name AS [文件所在目录] ,a.type_desc AS [文件类型] +FROM sys.database_files a +INNER JOIN sys.sysfiles AS s ON a.[file_id]=s.fileid +LEFT JOIN sys.dm_db_file_space_usage b ON a.[file_id]=b.[file_id] ORDER BY a.[type] +``` + +# 四、视图 ++ 索引视图 +```sql +# 创建索引视图,必须指定列名 +create view vwi_T_AttrPart WITH SCHEMABINDING as +SELECT ROW_NUMBER()over(order by getdate()) AS rownumber,PartNo ,ParentNO ,PartName ,SectNo ,OrderNo ,SessionCode ,IsNew ,AltMainNo ,PayPartID ,EngineerTypeID1 ,EngineerTypeID2 ,EngineerTypeID3 ,EngineerID ,SectDetailID ,StartPile ,EndPile ,CenterPile ,Mileage ,PartTypeID ,PartRemarks from dbo.T_AttrPart + +# 添加索引列(报错:不能在索引或统计信息中使用 视图'dbo.vwi_T_AttrPart' 的列 'rownumber',也不能将该列用作分区键,因为它不具有确定性) +CREATE UNIQUE CLUSTERED INDEX + ucidx_rownumber +ON dbo.vwi_T_AttrPart(rownumber); +``` \ No newline at end of file diff --git a/work常用/docker 命令.md b/work常用/docker 命令.md index 636ff73..596c74d 100644 --- a/work常用/docker 命令.md +++ b/work常用/docker 命令.md @@ -125,6 +125,8 @@ docker exec -i -t mynginx /bin/bash 通过 exec 命令对指定的容器执行 bash: ``` docker exec -it 9df70f9a0714 /bin/bash +# root 权限进入 +docker exec -it -u root 9df70f9a0714 bash ``` # 二、容器rootfs命令 diff --git a/work常用/java 并发任务编排.md b/work常用/java 并发任务编排.md new file mode 100644 index 0000000..ce37845 --- /dev/null +++ b/work常用/java 并发任务编排.md @@ -0,0 +1 @@ +[Gobrs-Async](https://async.sizegang.cn/) \ No newline at end of file diff --git a/work常用/pip 命令.md b/work常用/pip 命令.md new file mode 100644 index 0000000..df8702c --- /dev/null +++ b/work常用/pip 命令.md @@ -0,0 +1,5 @@ +# 一、 镜像加速 +```shell +# 添加 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com +pip install 'acryl-datahub[oracle]' -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com +``` \ No newline at end of file diff --git a/work常用/常用linux命令.md b/work常用/常用linux命令.md deleted file mode 100644 index 29d043a..0000000 --- a/work常用/常用linux命令.md +++ /dev/null @@ -1,107 +0,0 @@ -* 显示前N个 - - ``` - ll -lht|head -n 20 - ``` - -* 压缩命令过长 - - ```shell - find ./ -name '*' -print |zip files -@ - ``` - -* 合并文件 - - ```sql - cat *.txt > target.txt - ``` - -* 配置定时任务 - - ```sql - root 用户 - vim /etc/crontab - - SHELL=/bin/bash - PATH=/sbin:/bin:/usr/sbin:/usr/bin - MAILTO=root - - # For details see man 4 crontabs - - # Example of job definition: - # .---------------- minute (0 - 59) - # | .------------- hour (0 - 23) - # | | .---------- day of month (1 - 31) - # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... - # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat - # | | | | | - # * * * * * user-name command to be executed - 20 04 * * * root reboot - - # 加载配置 - crontab /etc/crontab - - # 重启crontab服务 - systemctl restart crond.service - ``` - -* 查看上一次启动 - - ```sql - who -b - ``` - -* 切分文件 - - ```sql - # 按大小切分 - split -b 100m xxxx - # 按行切分 - split -l xxxx - # 设置拆分后文件名,指定数字后缀 - split -b 100m -d xxxx xxxx_part_ - ``` - -* 显示文件大小 - - ```sql - du -sh xxxx - ``` - -* grep - - ```sql - # 高亮查找结果 - grep --color "test" catalina.out - # 显示在第几行 - grep -n test catalina.out - ``` - -* zip - - ```shell - # 压缩 - zip -r ./xxx.zip ./* - # 解压 - unzip xxx.zip - # 查看压缩文件内容 - unzip -v xxx.zip - # 从zip中删除xxx.txt文件 - zip xxx.zip -d xxx.txt - ``` -* 软链接 - - ```shell - ln -s 源文件名 软链接文件名 - ``` - -* 查看端口占用情况 - - ```shell - # 查看所有 - lsof -i - # 查看指定端口 - lsof -i:8080 - # 查看文件进程 - lsof xxx.txt - ``` diff --git a/工作日志/ATD/202303/2023-03-27.md b/工作日志/ATD/202303/2023-03-27.md new file mode 100644 index 0000000..c9275b4 --- /dev/null +++ b/工作日志/ATD/202303/2023-03-27.md @@ -0,0 +1,3 @@ +1. 了解计量支付前期数据前期方案及工作,整理方案中存在的问题 +2. 整理新版数据前期思路并与董工讨论 +3. 编写SqlServer数据量统计代码对旧库数据统计并输出文档 \ No newline at end of file diff --git a/工作日志/ATD/202303/2023-03-28.md b/工作日志/ATD/202303/2023-03-28.md new file mode 100644 index 0000000..9a81868 --- /dev/null +++ b/工作日志/ATD/202303/2023-03-28.md @@ -0,0 +1,10 @@ +计划: +- [x] 从网上整理数据迁移方案模板、chatGpt协助 +- [x] 梳理SqlServer迁移至oracle可能出现的问题(表空间、字符集、字段类型、函数、触发器等) +- [ ] 搭建dataX、dataX-web测试环境 +- [x] 编写数据迁移方案-技术篇(总体分为技术篇与业务篇) + +工作日志: +1. 编写数据迁移方案 + 共6个模块,完成1~3模块 +2. 思路验证 \ No newline at end of file diff --git a/工作日志/ATD/202303/2023-03-29.md b/工作日志/ATD/202303/2023-03-29.md new file mode 100644 index 0000000..cafde51 --- /dev/null +++ b/工作日志/ATD/202303/2023-03-29.md @@ -0,0 +1,11 @@ +计划: +- [ ] 搭建dataX、dataX-web测试环境 +- [x] 测试大表range分页方案 +- [x] 数据一致性校验工具设计 +- [x] 完成第一版数据迁移方案编写 + +工作日志: +一、数据迁移方案 +1. 对分表策略进行测试,分别测试视图、索引视图分表。 +2. 完善方案,新增质量要求、决策依据、未来规划模块 +3. 虚拟机搭建dataX测试环境 \ No newline at end of file diff --git a/工作日志/ATD/202303/2023-03-30.md b/工作日志/ATD/202303/2023-03-30.md new file mode 100644 index 0000000..c9999ea --- /dev/null +++ b/工作日志/ATD/202303/2023-03-30.md @@ -0,0 +1,9 @@ +计划: +云南交发省级事权高速公路建设项目综合管理信息平台- +- [x] 筹融资及资金使用SQL修改 +- [x] 质量安全SQL修改 + +工作日志: +1. 勐醒至江城至绿春高速公路--->筹融资及资金使用--->资金到位及投资完成界面查询SQL(修复月份重复bug) +2. 勐醒至江城至绿春高速公路--->质量安全--->监理检验 (修复年份SQL-bug) +3. 发现勐醒至江城至绿春高速公路--->筹融资及资金使用--->资金到位与投资完成情况对比-->年度数据为0 bug,经排查后端接口正常,已提交前端处理。 \ No newline at end of file diff --git a/工作日志/ATD/202303/2023-03-31.md b/工作日志/ATD/202303/2023-03-31.md new file mode 100644 index 0000000..ef3f62e --- /dev/null +++ b/工作日志/ATD/202303/2023-03-31.md @@ -0,0 +1,10 @@ +计划: +一、计量支付、投融资系统数据迁移 +- [ ] 梳理任务清单 +- [ ] 填写风险评估 +- [ ] 数据探查工具开发 + +工作日志: +1. 数据迁移方案评审(参与人:公司领导) +2. 数据探查工具开发 +3. 协助罗丹排查源表及汇总表同步问题,发现存储过程执行异常,但是无法排查异常原因。 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-03.md b/工作日志/ATD/202304/2023-04-03.md new file mode 100644 index 0000000..352af74 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-03.md @@ -0,0 +1,45 @@ +计划: +一、事权 +- [ ] 梳理事权项目涉及到的表、视图、存储过程并整理出完整的数据模型(方式方法不限) + - [x] 安装datahub对库进行扫描---->元数据、数据血缘、数据流向 + - [ ] 整理事权高速公路建设项目综合管理信息平台查询SQL--->数据血缘 + - [ ] 修改存储过程逻辑:1.将删除后插入修改为:状态位修改插入或查询插入到临时表再插入新数据 2.增加日志表记录执行过程 + + +工作日志: +1. WSL-docker 搭建datahub对事权库进行扫描 +2. 对照事权-->数据填报采集系统及数据库设计文档梳理填报用到的表 +3. 使用pdman对事权库逆向出ODS表89张,与数据库设计文档提供的67张有差异,其余22张表用途不明 +4. 清除合同管理、征地拆迁测试数据 +```sql +-- 合同管理 +-- 合同签订情况总览、合同支付情况 +select * from DW_CONTRACT where rownum<=10; + +create table DW_CONTRACT_bak_zr_20230403 as select * from DW_CONTRACT; + +-- truncate table DW_CONTRACT; + +-- 征地拆迁 +-- 项目征地拆迁进度及费用支付情况 DW_LAND_DETAIL、DW_MAIN_DIMENSION +select * from DW_LAND_DETAIL where rownum<=10; + +create table DW_LAND_DETAIL_bak_zr_20230403 as select * from DW_LAND_DETAIL; + +-- truncate table DW_LAND_DETAIL; + +select * from DW_MAIN_DIMENSION where rownum<=10; + +create table DW_MAIN_DIMENSION_bak_zr_20230403 as select * from DW_MAIN_DIMENSION; + +-- truncate table DW_MAIN_DIMENSION; + +-- 工程变更,指定project_ID +delete from dw_change where ID_ in ( +select ID_ from dw_change where MAIN_ID_ in ( +select id from dw_main_dimension where PROJECT_ID in (600000000000000138)) +) +-- 工程变更台账 +delete from ods_change_account where PROJECT_ID in (600000000000000138) +``` +5. 手动调用存储过程P_DW_MAIN_DIMENSION、P_DW_PROJECT_PROGRESS_LIST补充dw_main_dimension、dw_progress_complete表数据 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-04.md b/工作日志/ATD/202304/2023-04-04.md new file mode 100644 index 0000000..d73ae8e --- /dev/null +++ b/工作日志/ATD/202304/2023-04-04.md @@ -0,0 +1,12 @@ + +问题: +一、通过逆向分析事权数据库得到89张ODS表,已知70张,未知19张,如何分析出未知表的用途与数据流? +方法:1. 分析填报接口SQL 2. 分析视图 3. 将未知表整理出来交给其他人(熟悉业务) + +二、如何描述表与表、表与视图、视图与视图、表与存储过程、视图与存储过程的关系及数据流向? +要求:1. 字段级别的血缘(自动分析、手动录入) 2. 支持搜索 + +计划: +- [x] 事权ODS表梳理及建模(共89张,已知70张) +- [ ] 分析数据库视图及存储过程,梳理数据血缘关系(分析剩余22张ODS表用途) +- [ ] 梳理填报接口,并整理数据插入逻辑及目标表(ODS) \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-06.md b/工作日志/ATD/202304/2023-04-06.md new file mode 100644 index 0000000..c658e47 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-06.md @@ -0,0 +1,8 @@ +计划: +事权DW表重写 +- [ ] 编写代码递归扫描存储过程,找出需要处理的DW表并形成台账 +- [ ] 根据扫描结果绘制数据血缘关系图(表级别) +- [ ] 梳理前端查询接口反推DW表-->反推存储过程-->ODS表--->视图替换 +工作日志: +1. 梳理事权统计前端接口,并根据接口回溯代码,代码回溯DW表,DW表回溯存储过程 +2. 协助罗丹搭建代码SpringCloud环境 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-07.md b/工作日志/ATD/202304/2023-04-07.md new file mode 100644 index 0000000..82a2bb6 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-07.md @@ -0,0 +1,9 @@ +计划: +上午: +- [x] 根据已梳理ODS表使用pdManer工具绘制ER图 +- [x] 整理ODS表重建视图思路 +下午: +- [ ] 数据血缘工具功能点及流程图 +- [ ] 测试Neo4j 节点查询,学习并整理常用查询语句 + +工作日志: diff --git a/工作日志/ATD/202304/2023-04-10.md b/工作日志/ATD/202304/2023-04-10.md new file mode 100644 index 0000000..baeb3b3 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-10.md @@ -0,0 +1,18 @@ +计划: +一、数据迁移 +- [x] 梳理完整任务计划表并进行时间评估(核对新旧系统表结构除外) +二、数据血缘 +- [ ] 测试数据血缘管理,完成元数据提取模块 + +工作日志: +数据迁移: +1. 梳理完整任务计划表并进行时间评估 +2. 新旧表字段核对思路: + 以计量支付为例: + 从系统功能反推数据流 + 1、拆分新版计量支付功能点 + 2、通过debug回溯功能点与新表对应关系 + 3、人工分析旧表与新表字段关系 + 4、搭建测试环境,模拟从旧表抽数到新表 + 5、通过步骤1、2梳理的功能与表对应关系进行功能性验证。如果功能不正常需修改步骤4产出脚本。 +3. 搭建dataX、dataX-web集群,并编写安装维护手册(缺少集群配置) diff --git a/工作日志/ATD/202304/2023-04-11.md b/工作日志/ATD/202304/2023-04-11.md new file mode 100644 index 0000000..559e9da --- /dev/null +++ b/工作日志/ATD/202304/2023-04-11.md @@ -0,0 +1,17 @@ +计划: +数据迁移 +- [x] 在windows server上安装sqlServer数据库并将计量支付历史数据导入 +- [x] 新Linux服务器搭建worker节点,并完成dataX双节点部署,完成后完善ETL安装维护手册 +- [ ] 梳理计量支付用户、部门相关表结构 + +工作日志: +一、数据迁移 +1. 同步基投库到1.2 sqlserver +2. 对基投库进行逆向建模 +3. 安装dataX执行器并进行测试,目前已搭建2节点ETL小集群。ETL集群安装维护文档编写完毕。 +二、事权 +1. 修改多项目危大工程风险分级管控情况 +2. 修改多项目各项目危大工程风险分级管控情况 +3. 单项目危大工程风险分级管控情况 +4. 单项目月度危大工程风险分级管控情况 +上述均新增 已评审危大工程专项方案数、已评审危大工程专项数占比2个字段 diff --git a/工作日志/ATD/202304/2023-04-12.md b/工作日志/ATD/202304/2023-04-12.md new file mode 100644 index 0000000..b3c9ebc --- /dev/null +++ b/工作日志/ATD/202304/2023-04-12.md @@ -0,0 +1,66 @@ +数据迁移: +- [ ] 梳理RoadInfoMgrYNJT表结构 + +工作日志: +一、事权 +1. 新增环水保多项目及单项目汇总、详情统计接口共4个 +2. 质量安全->风险分级管控->危大工程分级管控情况、各项目危大工程管控情况增加已评审专项、未评审专项统计字段 +3. 清理质量安全数据 +```sql +-- 物理表 +-- 红线问题隐患排查治理情况(过程问题隐患排查) +create table ODS_SAFETY_PROBLEM_RED_DETAIL_bak_20230412 as select * from ODS_SAFETY_PROBLEM_RED_DETAIL; +truncate table ODS_SAFETY_PROBLEM_RED_DETAIL; + +-- ODS_SAFETY_TRAIN_DETIAL 安全教育培训(明细表) +create table ODS_SAFETY_TRAIN_DETIAL_bak_20230412 as select * from ODS_SAFETY_TRAIN_DETIAL; +truncate table ODS_SAFETY_TRAIN_DETIAL; + +-- ODS_SAFETY_DRILL_DETAIL 应急预案与演练 +create table ODS_SAFETY_DRILL_DETAIL_bak_20230412 as select * from ODS_SAFETY_DRILL_DETAIL; +truncate table ODS_SAFETY_DRILL_DETAIL; + + +-- ODS_SAFETY_PROBLEM_DETAIL 非红线问题隐患排查治理情况(过程问题隐患排查) +create table ODS_SAFETY_PROBLEM_DETAIL_bak_20230412 as select * from ODS_SAFETY_PROBLEM_DETAIL; +truncate table ODS_SAFETY_PROBLEM_DETAIL; + + +-- ODS_SAFETY_RISK_LEVEL_DETAIL 安全风险分级管控情况(风险分级管控) +create table ODS_SAFETY_RISK_LEVEL_DETAIL_bak_20230412 as select * from ODS_SAFETY_RISK_LEVEL_DETAIL; +truncate table ODS_SAFETY_RISK_LEVEL_DETAIL; + + +-- ODS_SAFETY_RISK_LARG_DETAIL 危险性较大工程风险管控情况 +create table ODS_SAFETY_RISK_LARG_DETAIL_bak_20230412 as select * from ODS_SAFETY_RISK_LARG_DETAIL; +truncate table ODS_SAFETY_RISK_LARG_DETAIL; + +-- ODS_SAFETY_CONTR_DETAIL 平安工地考核 +create table ODS_SAFETY_CONTR_DETAIL_bak_20230412 as select * from ODS_SAFETY_CONTR_DETAIL; +truncate table ODS_SAFETY_CONTR_DETAIL; + +-- ODS_SAFETY_FEE_COST_DETAIL 安全生产费投入情况(安全生产费用) +create table ODS_SAFETY_FEE_COST_DETAIL_bak_20230412 as select * from ODS_SAFETY_FEE_COST_DETAIL; +truncate table ODS_SAFETY_FEE_COST_DETAIL; + +-- 交工检测 +create table ODS_HANDOVER_INSPECTION_bak_20230412 as select * from ODS_HANDOVER_INSPECTION; +truncate table ODS_HANDOVER_INSPECTION; + +create table ODS_HANDOVER_INSPECTION_DETAIL_bak_20230412 as select * from ODS_HANDOVER_INSPECTION_DETAIL; +truncate table ODS_HANDOVER_INSPECTION_DETAIL; + +-- 质量问题排查 +create table ODS_QUALITY_PROBLEM_RED_DETAIL_bak_20230412 as select * from ODS_QUALITY_PROBLEM_RED_DETAIL; +truncate table ODS_QUALITY_PROBLEM_RED_DETAIL; + +create table ODS_QUALITY_PROBLEM_NO_RED_DETAIL_bak_20230412 as select * from ODS_QUALITY_PROBLEM_NO_RED_DETAIL; +truncate table ODS_QUALITY_PROBLEM_NO_RED_DETAIL; + +-- 中间表 +truncate table HZ_AQ_ZTXX; +truncate table HZ_AQ_PAGDZT; +truncate table HZ_AQ_PAGDZT; +truncate table HZ_AQ_SCF; +truncate table HZ_ZL_ZTQK; +``` \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-13.md b/工作日志/ATD/202304/2023-04-13.md new file mode 100644 index 0000000..a35ad17 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-13.md @@ -0,0 +1,9 @@ +计划: +一、数据迁移 +- [ ] 梳理RoadInfoMgrYNJT表结构 +- [ ] 对照计量支付界面梳理新表 + +工作日志: +事权: +1. 对接段,讨论事权中间表处理方式 +2. 梳理目前统计层接口使用到的汇总表 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-14.md b/工作日志/ATD/202304/2023-04-14.md new file mode 100644 index 0000000..2333eef --- /dev/null +++ b/工作日志/ATD/202304/2023-04-14.md @@ -0,0 +1,9 @@ +计划: +一、事权 +- [x] 完成统计层接口使用到的汇总表梳理 + +工作日志: +一、事权: +1. 新增环水保多项目明细跳转单项目明细查询接口 +2. 完成统计层接口使用到的汇总表梳理 +3. 环水保多项目排序规则修改 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-15.md b/工作日志/ATD/202304/2023-04-15.md new file mode 100644 index 0000000..9a7eb86 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-15.md @@ -0,0 +1,4 @@ +计划: +一、事权 +- [ ] bugfix +- [ ] 梳理事权统计表与ODS表数据流向 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-17.md b/工作日志/ATD/202304/2023-04-17.md new file mode 100644 index 0000000..2979010 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-17.md @@ -0,0 +1,11 @@ +计划: +一、事权 +- [x] 梳理征地拆迁、合同管理、质量安全环水保汇总表与原始表关系 +- [ ] 存储过程执行语句分析功能开发 + +工作日志: +一、事权: +1. 完成项目进度、质量安全环水保、合同管理、征地拆迁、工程变更汇总表与原始表关系梳理 +2. 单项目-->征地拆迁问题明细去重 +3. 单项目-->环水保落实情况接口新增OID +4. 多项目-->质量安全环水保-->风险分级管控-->危大工程分级管控情况、各项目危大工程管控情况新增未评审方案占比数 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-18.md b/工作日志/ATD/202304/2023-04-18.md new file mode 100644 index 0000000..6829e1e --- /dev/null +++ b/工作日志/ATD/202304/2023-04-18.md @@ -0,0 +1,9 @@ +计划: +一、事权: +- [x] 完成总体概况、基建程序、筹融资及资金使用汇总表与原始表关系梳理 + +工作日志: +一、事权 +1. 完成汇总表数据血缘关系梳理 +2. 整理梳理过程中发现的问题 +3. 编写征地拆迁、质量安全汇总表数据清理脚本 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-19.md b/工作日志/ATD/202304/2023-04-19.md new file mode 100644 index 0000000..993a451 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-19.md @@ -0,0 +1,9 @@ +计划: +一、事权 +- [ ] 汇总表问题梳理及改造评审 +- [ ] 梳理昭通高速企业智慧办公系统中HR部分设计及字段不合理情况 + +工作日志: +一、昭通OA +1. 梳理昭通OA-HR管理模块问题点 +2. 梳理HR管理模块-人员管理流程图并进行评审 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-20.md b/工作日志/ATD/202304/2023-04-20.md new file mode 100644 index 0000000..efe23ff --- /dev/null +++ b/工作日志/ATD/202304/2023-04-20.md @@ -0,0 +1,13 @@ +计划: +一、昭通OA +- [x] 根据19号评审结果对HR-人员管理流程进行细化 +- [x] 组织二次评审 + +工作日志 +一、昭通OA +1. HR-人员管理流程细化 +2. 增加人员合同管理模块 +3. 根据评审意见进行修改: + 1. 修改退休及返聘流程 + 2. 增加终止合同流程 + 3. 加入合同状态变化 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-21.md b/工作日志/ATD/202304/2023-04-21.md new file mode 100644 index 0000000..e99f27e --- /dev/null +++ b/工作日志/ATD/202304/2023-04-21.md @@ -0,0 +1,7 @@ +计划: +一、昭通OA +- [ ] 根据客户给出工资计算表及现有OA系统,梳理并设计薪资管理模块 + +工作日志: +一、昭通OA +1. 对照蓝凌OA,HR模块梳理并补充现有HR模块 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-23.md b/工作日志/ATD/202304/2023-04-23.md new file mode 100644 index 0000000..a87c9d8 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-23.md @@ -0,0 +1,9 @@ +计划: +一、事权 + - [ ] 使用pdman 梳理DW表到ODS表字段级别血缘关系 + + +工作日志: +一、事权 +1. 搭建事权ODS-DW表同步框架 +2. 编写周报 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-24.md b/工作日志/ATD/202304/2023-04-24.md new file mode 100644 index 0000000..ea61317 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-24.md @@ -0,0 +1,9 @@ +计划: +一、事权 +- [x] 项目进度-->合理性分析ODS到DW层数据同步 + +工作日志: +一、事权 +1. 项目进度-->控制性工程进度重写DW_RE_PROGRESS_DETAIL表 +二、其他 +1. 茶话会 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-25.md b/工作日志/ATD/202304/2023-04-25.md new file mode 100644 index 0000000..5e08a7e --- /dev/null +++ b/工作日志/ATD/202304/2023-04-25.md @@ -0,0 +1,12 @@ +计划: +一、事权 +- [ ] 开发DW_RE_PROGRESS_DETAIL 接口(按年、按月刷新数据) +- [ ] 部署到测试服务器 +- [ ] 对接前端 +- [ ] 修改控制性工程进度界面查询接口对接DW_RE_PROGRESS_DETAIL表 + +工作日志: +一、事权 +1. 排查DW_RE_PROGRESS_DETAIL表数据不准确问题 +二、昭通OA +1. 梳理车辆管理建表需求,对照蓝凌OA、泛微 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-26.md b/工作日志/ATD/202304/2023-04-26.md new file mode 100644 index 0000000..7304841 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-26.md @@ -0,0 +1,7 @@ +计划: +一、昭通OA +1. 对照需求及第三方OA梳理车辆管理表结构 + +工作日志: +一、昭通OA +1. 新建车辆管理模块11张表并进行评审 \ No newline at end of file diff --git a/工作日志/ATD/202304/2023-04-27.md b/工作日志/ATD/202304/2023-04-27.md new file mode 100644 index 0000000..600e0c7 --- /dev/null +++ b/工作日志/ATD/202304/2023-04-27.md @@ -0,0 +1,7 @@ +计划: +一、昭通OA +- [ ] 完成车辆模块建表,并输出表结构文档提交昭通团队二次评审 +- [ ] 确定代码集定义及需新增的字段 + +二、事权 +1. \ No newline at end of file diff --git a/工作日志/ATD/环境/项目地址.md b/工作日志/ATD/环境/项目地址.md new file mode 100644 index 0000000..1801fdc --- /dev/null +++ b/工作日志/ATD/环境/项目地址.md @@ -0,0 +1,48 @@ +[云南交发省级事权高速公路建设项目综合管理信息平台](http://172.16.3.244/home) ---未上线 +admin/admin@2022 + +FINANCE_ACOUNT_DW --- 到位资金金额 +FINANCE_ACOUNT_DW_RATIO --资金到位率 +FINANCE_TOTAL --累计计划到位金额 +INVEST_ACOUNT_DW --- 投资到位金额 +INVEST_ACOUNT_DW_RATIO ----投资到位率 +INVEST_TOTAL --- 计划投资金额 +MY --- 年月 + + +[软件研发与服务云平台]([软件研发和服务云平台](http://172.16.3.219/atdplatform/)) ---正式环境 +Zourui/12345 + + +[交通工程建设项目管理平台(计量支付)](http://172.16.3.145/) +admin/12345 + +http://220.165.247.94:3227/index.php/apps/files/?dir=/20230403&openfile=34168 +邹瑞 +zhourui +zhourui12345678 + +[dataX-web](http://172.16.3.145:9527/index.html) +admin/123456 +dataX-web使用的mysql 172.16.3.145:3306 root/1qaz@1234 + +[禅道](http://220.165.247.68:29980/zentao) +zourui/zourui#123 + +[昭通高速企业智慧办公系统-测试环境](http://172.16.3.220/home) +admin/Atd@2021 + +[昭通高速企业智慧办公系统](http://172.16.3.221/home) +admin/Atd@2021 + +代码集: http://172.16.3.219/ +zour / dasiwoyebushuo + +SVN:http://172.16.2.2/svn/paas/microservice/server/other/xmgl-sqddt +zourui/zourui + + +泛微 :访问地址:![](file:///C:\Users\89295\AppData\Roaming\Tencent\QQTempSys\%W@GJ$ACOF(TYDYECOKVDYB.png)https://enterprise.e-cology.com.cn +登录账号:demoano  |  登录密码:90683 + +蓝凌 :18787010990 diff --git a/开发计划/tiny-datahub/开发计划.md b/开发计划/tiny-datahub/开发计划.md new file mode 100644 index 0000000..3dbd126 --- /dev/null +++ b/开发计划/tiny-datahub/开发计划.md @@ -0,0 +1,17 @@ +## 一、第一阶段 +### 1. 视图、存储过程逆向分析并构建关系图 +已完成 +### 2. 定时构建 +1. 通过apscheduler实现定时任务 + +## 二、第二阶段 +### 1. 数据库版本差异扫描及版本管理 +### 2. 数据比对工具 +### 3. 数据探查 +### 4. 表结构生成(支持不同类型数据库互转) +### 5. FastApi 开发http查询接口 + +## 三、第三阶段 +### 1. 元查询、展示 +### 2. 字段级别血缘关系分析实现 +### 3. 字段级别、表级别血缘关系展示 \ No newline at end of file diff --git a/日常学习/中间件/redis/spring-boot-redis.md b/日常学习/中间件/redis/spring-boot-redis.md new file mode 100644 index 0000000..1d516e3 --- /dev/null +++ b/日常学习/中间件/redis/spring-boot-redis.md @@ -0,0 +1,149 @@ +# 一、POM +```xml + + org.springframework.boot + spring-boot-starter-data-redis + +``` + +# 二、使用注解 + ++ 配置redis + +```java +//开启基于注解的配置 +@EnableCaching +@Configuration +public class RedisConfig { + + /** + * redis数据库自定义key的命名空间 + */ + public static final String REDIS_DATABASE_KEY="tmall_springboot"; + public static final String REDIS_CATEGORY_KEY="category"; + public static final String REDIS_ORDER_ITEM_KEY="orderItem"; + public static final String REDIS_ORDER_KEY="order"; + public static final String REDIS_PRODUCT_KEY="product"; + public static final String REDIS_PROPERTY_KEY="property"; + public static final String REDIS_PROPERTY_VALUE_KEY="propertyValue"; + public static final String REDIS_REVIEW_KEY="review"; + public static final String REDIS_USER_KEY="user"; + public static final String REDIS_PRODUCT_IMAGE_KEY="productImage"; + + + /** + * 自动配置的redisTemplate,存在序列化问题,会导致存入redis数据库中的数据,不容易看清所以需要自己配置 + */ + /** + * 配置自定义redisTemplate + * @return + */ + @Bean + RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory,RedisSerializer redisSerializer) { + + RedisTemplate redisTemplate = new RedisTemplate<>(); + + redisTemplate.setConnectionFactory(redisConnectionFactory); + + // 设置键(key)的序列化采用StringRedisSerializer。 + redisTemplate.setKeySerializer(new StringRedisSerializer()); + // 设置值(value)的序列化采用Jackson2JsonRedisSerializer。 + redisTemplate.setValueSerializer(redisSerializer); + // 设置hashKey的序列化 + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(redisSerializer); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + /** + * 配置json序列化器(我们使用jackson的序列化器) + */ + @Bean + public RedisSerializer redisSerializer(){ + + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + + return jackson2JsonRedisSerializer; + } + + /** + * 配置redis缓存管理器,管理注解版的缓存 + */ + @Bean + public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory,RedisSerializer redisSerializer) { + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory); + //设置Redis缓存有效期为10分钟 + RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) + //ttl + .entryTtl(Duration.ofHours(2)); + return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration); + } + +} + +``` + + ++ @Cacheable +先从redis数据库中 按照当前key查找,有没有。如果redis中有,是不会走当前该方法的,如果没有再调用方法返回结果,如果结果不为null将其缓存到数据库中(一般用于find) +```java +@Cacheable(value = RedisConfig.REDIS_DATABASE_KEY, key = "'user-'+#p0", unless = "#result==null") + @Override + public User getUserByName(String name) { + UserExample example = new UserExample(); + example.createCriteria().andNameEqualTo(name); + List users = userMapper.selectByExample(example); + if(users.size()==0){ + return null; + } + return users.get(0); + } + +``` + +value:key的一部分(前缀),主要是指明数据放在那个key范围 +key:key的主体,#p0:指明取出第一个参数 #p1:指明取出第二个参数。。。依此类推 +unless:结果为true,将当前的数据结果不保存到redis,#result:指明取出数据库中返回的结果 +condition 结果如果为true,将当前数据保存到redis + ++ @CachePut +主要用于向数据库中插入数据,向数据中插入数据的时候,会将返回的int类型,放入redis中缓存,当然是有选择性的(一般用于insert) + +```java +@CachePut(value = RedisConfig.REDIS_DATABASE_KEY,key = "'user-insert-'+#p0.id",unless = "#result==0") + @Override + public int insert(User record) { + return userMapper.insert(record); + } + +``` + +value:key的一部分,命名空间 +key:指定key的名称 +unless:满足条件,则不将返回的结果放入redis +condition: 满足条件,则将返回的结果放入redis + ++ @CacheEvict +满足条件则移除当前key在redis中的数据(一般用于update/delete) +```java +@CacheEvict(value = RedisConfig.REDIS_DATABASE_KEY,key = "'user-'+#p0.id",condition = "#result==1") + @Override + public int updateByPrimaryKey(User record) { + return userMapper.updateByPrimaryKey(record); + } + +``` +value: 同理命名空间 +key: key名称 +condition:满足什么条件从缓存中移除指定的key +AllEntries:true/false 是否移除命名空间下的所有key + +# 三、硬编码 + +使用StringRedisTemplate \ No newline at end of file diff --git a/日常学习/数据同步/DataX-web/在linux上安装.md b/日常学习/数据同步/DataX-web/在linux上安装.md new file mode 100644 index 0000000..feb152a --- /dev/null +++ b/日常学习/数据同步/DataX-web/在linux上安装.md @@ -0,0 +1,6 @@ +# 一、安装 +1. 需要先安装datax + +# 二、测试及使用 + +# 三、节点扩容(集群搭建) \ No newline at end of file diff --git a/日常学习/数据同步/DataX/在Linux上安装.md b/日常学习/数据同步/DataX/在Linux上安装.md new file mode 100644 index 0000000..3b72ab4 --- /dev/null +++ b/日常学习/数据同步/DataX/在Linux上安装.md @@ -0,0 +1,14 @@ +[dataX](https://github.com/alibaba/DataX/blob/master/userGuid.md) + +# 一、下载及安装 +1. 从dataX github页面下载tar包并放在/home下 +2. 验证Linux是否安装python及jdk,python可以为3,jdk为1.8版本 +3. 解压datax tar -zxvf /xxxx/datax.tar.gz + +# 二、运行测试用例 +在datax 目录进入bin,例如/home/zr/DataX/datax/bin,执行 +```shell +python datax.py ../job/job.json +``` +执行完成后输出,表示安装成功 +![[Snipaste_2023-03-28_09-21-51.png]] diff --git a/未命名 1.canvas b/未命名 1.canvas new file mode 100644 index 0000000..2289854 --- /dev/null +++ b/未命名 1.canvas @@ -0,0 +1,4 @@ +{ + "nodes":[], + "edges":[] +} \ No newline at end of file diff --git a/本机环境/WSL/WSL 桥接网络.md b/本机环境/WSL/WSL 桥接网络.md new file mode 100644 index 0000000..6caa81f --- /dev/null +++ b/本机环境/WSL/WSL 桥接网络.md @@ -0,0 +1,51 @@ +前提:开启hyper-V +1. 获取所有网卡信息 +```shell +Get-NetAdapter +``` +![[Snipaste_2023-04-01_17-47-48.png]] +2. 启动WSL,打开powershell(管理员模式),选择网卡桥接 +这里桥接到WLAN +```shell +Set-VMSwitch WSL -NetAdapterName WLAN +# 中文 +Set-VMSwitch WSL -NetAdapterName "以太网 3" +``` + +3. 查看宿主机网关 +```shell +ipconfig +``` +找到IP段和网关 +![[Snipaste_2023-04-01_17-47-48 1.png]] +4. 修改WSL IP地址及网关 +```shell +# 绑定到eth0网卡 +sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0 +# 设置IP段 +sudo ip addr add 192.168.0.150/24 broadcast 192.168.0.255 dev eth0 +# 设置网关 +sudo ip route add 0.0.0.0/0 via 192.168.0.1 dev eth0 +``` +5. 更新名称解析服务器地址 +```shell +vim /etc/resolv.conf +``` +修改其中内容为 `nameserver 网关地址` + + +## 快速设置 +```shell +# powershell 管理员,注意修改网卡名称 +Set-VMSwitch WSL -NetAdapterName WLAN + +# 在wsl中执行 +sh /home/zr/setnet.sh +``` + + +## 取消桥接 +powershell管理员执行,即可恢复 +```shell +Set-VMSwitch WSL -SwitchType Internal +``` \ No newline at end of file diff --git a/本机环境/开发环境.md b/本机环境/开发环境.md index 6a9cad7..bc96462 100644 --- a/本机环境/开发环境.md +++ b/本机环境/开发环境.md @@ -1,4 +1,12 @@ + PG12 localhost:5432 postgres:root@123 + redis -localhost:6379 redispw \ No newline at end of file +localhost:6379 redispw ++ oracle +localhost:1521 zr:root@123 ++ neo4j +docker 安装: + 1.docker pull neo4j + 2. docker run -d --name container_name -p 7474:7474 -p 7687:7687 --env NEO4J_AUTH=neo4j/root@12345 neo4j +http://localhost:7474/ neo4j/clone-formula-shelf-hair-neptune-3446 +修改密码::server change-password \ No newline at end of file