日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 分布键,DWS使用技巧:根据ORACLE主键和唯一健批量修改DWS分布列字段的方法...

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 分布键,DWS使用技巧:根据ORACLE主键和唯一健批量修改DWS分布列字段的方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題背景:

在批量從ORACLE遷移到DWS的場景中,經常會結構遷移過程中,只遷移了表結構而沒有根據ORACLE源庫情況同時設置分布列字段的問題,這樣會導致所有的表均自動使用第一個字段(可用作為分布列類型)作為默認分布列,但是很多時候使用默認第一個字段作為分布列會導致嚴重的數據傾斜,這個時候就需要批量修改分布列字段,但是DWS并不支持直接修改分布列字段,手工去修改每個表會非常麻煩。

Hash分布表的分布列設置不合理,會導致嚴重的數據傾斜,進而導致查詢性能嚴重劣化,而且個別dn性能下降造成的短板效應會阻塞整個集群的計算能力明顯下降。

從實際經驗來看,對ORACLE進行整庫遷移以后,使用源庫的主鍵和唯一健作為分布列字段是一個比較好的方法,能夠快速且相對比較合理的解決大部分表的數據傾斜問題。

首先,將ORACLE源庫的主鍵或唯一健導出:

expdp數據泵導出索引方法:

expdp?sys/passwd??directory=data_dir?dumpfile=expdp.dmp?CONTENT=metadata_only??include=index?sqlfile=expidx.sql

impdp?sys/passwd??directory=data_dir?dumpfile=expdp.dmp?include=index?sqlfile=expidx.sql

生成導出SQL

--?CONNECT?SYSTEM

ALTER?SESSION?SET?EVENTS?'10150?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?1';

ALTER?SESSION?SET?EVENTS?'10904?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?1';

ALTER?SESSION?SET?EVENTS?'25475?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?1';

ALTER?SESSION?SET?EVENTS?'10407?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?1';

ALTER?SESSION?SET?EVENTS?'10851?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?1';

ALTER?SESSION?SET?EVENTS?'22830?TRACE?NAME?CONTEXT?FOREVER,?LEVEL?192?';

--?new?object?type?path:?SCHEMA_EXPORT/TABLE/INDEX/INDEX

--?CONNECT?SAPSR3

CREATE?UNIQUE?INDEX?"SAPSR3"."S031~0"?ON?"SAPSR3"."S031"?("MANDT",?"SSOUR",?"VRSIO",?"SPMON",?"SPTAG",?"SPWOC",?"SPBUP",?"WERKS",?"MATNR",?"LGORT")

PCTFREE?10?INITRANS?2?MAXTRANS?255

TABLESPACE?"PSAPSR3"?PARALLEL?1?;

ALTER?INDEX?"SAPSR3"."S031~0"?NOPARALLEL;

CREATE?UNIQUE?INDEX?"SAPSR3"."ZPS00T_ZSBZCXX~0"?ON?"SAPSR3"."ZPS00T_ZSBZCXX"?("MANDT",?"PSPID",?"TAB_YEAR",?"TAB_MONTH",?"EQUNR",?"ZFSRQ",?"ZFSSJ")

PCTFREE?10?INITRANS?2?MAXTRANS?255

TABLESPACE?"PSAPSR3USR"?PARALLEL?1?;

通過shell腳本簡單處理:

cat?expidx.sql?|grep?"CREATE?UNIQUE?INDEX"?|sed?'s/"//ig'|awk?'BEGIN{FS="?ON?"}{print?tolower($2)}'|awk?'{f=$1;$1="";print?f"#"$0}'|awk?-F?"."?'{print?$1"#"$2}'|sed?'s/[?|(|)]//ig'?>?idx.txt

生成主鍵映射表數據:

sapsr3#s031#mandt,ssour,vrsio,spmon,sptag,spwoc,spbup,werks,matnr,lgort

sapsr3#zps00t_zsbzcxx#mandt,pspid,tab_year,tab_month,equnr,zfsrq,zfssj

sapsr3#zps13t_ghjh_zhjh#mandt,zpspid

sapsr3#zps18t0001#mandt,pspid,posid

sapsr3#zps18t0002#mandt,bednr

在DWS中創建映射表:

SET?search_path?=?public;

CREATE??TABLE?tab_uniq_key?(

schema_name?text,

table_name?text,

uniq_key?text

)

WITH?(orientation=row,?compression=no)

DISTRIBUTE?BY?HASH(schema_name,?table_name)

導入映射表(delimiter為#):

接下來通過下面的SQL,就可以直接生成批量整改SQL:

select

schema_name

,table_name

,uniq_key

,hash_key

,hash_key_upper

,uniq_key_upper

,'START?TRANSACTION;'||

chr(10)||'CREATE?SCHEMA?'||schema_name||'_tmp;'||

chr(10)||'SET?search_path='||schema_name||'_tmp;'||

chr(10)||replace(replace(tabledef,'DISTRIBUTE?BY?HASH('||

case

when?hash_key=lower(hash_key)

then??hash_key

else?hash_key_upper?end

||')','DISTRIBUTE?BY?HASH('||????case?when?hash_key=lower(hash_key)?then??uniq_key??else?uniq_key_upper?end||')'),'SET?search_path?=?','--SET?search_path?=?')||

chr(10)||'INSERT?INTO?'||schema_name||'_tmp."'||table_name||'"?SELECT?*?FROM?'||schema_name||'."'||table_name||'";'||

chr(10)||'DROP?TABLE?'||schema_name||'."'||table_name||'";'||

chr(10)||'ALTER?TABLE?'||schema_name||'_tmp."'||table_name||'"?SET?SCHEMA?'||schema_name||';'||

chr(10)||'DROP?SCHEMA?'||schema_name||'_tmp?CASCADE;'||

chr(10)||'COMMIT;'?as?tab_def

from

(

select

n.nspname?as?schema_name

,c.relname?as?table_name

,getdistributekey(c.oid)?hash_key

,u.uniq_key

,'"'||replace(replace(upper(uniq_key),'"',''),',','","')||'"'??uniq_key_upper

,'"'||replace(replace(getdistributekey(c.oid),'"',''),',','","')||'"'??hash_key_upper

,pg_get_tabledef(c.oid)?tabledef

from

pg_class?c

,pg_namespace?n

,tab_uniq_key?u

where

c.relnamespace?=?n.oid

and?lower(n.nspname)?=?lower(u.schema_name)

and?lower(c.relname)?=?lower(u.table_name)

and?c.relkind?=?'r'

and?n.nspowner?!=?'10'

)

where

replace(replace?(lower(hash_key),'"'?,?''?),'?','')?!=?replace?(?REPLACE(lower(uniq_key),'"'?,?''),'?',''?)

order?by?schema_name,table_name;

查詢結果中tab_def字段即為批量整改SQL語句

總結

以上是生活随笔為你收集整理的oracle 分布键,DWS使用技巧:根据ORACLE主键和唯一健批量修改DWS分布列字段的方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费伊人网| 国产精品久久久久久久久 | 国产免费一区二区三区在线观看 | 97se亚洲综合 | 95精品视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品一区二区三区在线看 | 啪啪啪一区二区 | 男女做那个视频 | 少妇高潮喷水在线观看 | 国产成人亚洲精品 | 国产精品久久免费视频 | 91一级视频 | 深夜av| 亚洲国内在线 | 国产成人精品一区二区三区 | 日韩在线观看视频一区二区三区 | 免费看特级毛片 | 粉色午夜视频 | 一级免费观看 | 咪咪色图 | 风间由美一二三区av片 | 吃奶摸下的激烈视频 | 热久久久久| 中出在线播放 | 男人和女人搞鸡 | 豆花在线视频 | 国产伦精品一区二区三区免费 | 日韩av手机在线观看 | 亚洲欧美成人 | 饥渴少妇色诱水电工 | 性视频播放免费视频 | 加勒比久久综合 | 成人二三区 | 久久伊| 最近日本中文字幕 | 国产青青在线 | 国产一二区在线观看 | 黄色午夜网站 | 久久亚洲aⅴ无码精品 | 好吊妞这里只有精品 | 欧美成网 | 国产青草视频在线观看 | 久久亚洲一区二区三区四区五区 | 狠狠的干狠狠的操 | 91禁在线动漫 | 日韩精品一区二区三区丰满 | 国产三级在线免费 | 国产在线看片 | 91久久极品少妇xxxxⅹ软件 | 黄色网址www | 97av视频在线 | 黄色污污视频 | 亚洲精品一区三区三区在线观看 | 91久久精品国产91久久 | 国产成人福利 | 日本在线视频播放 | 国产黄页| 国产伦理精品 | 亚洲清纯唯美 | 麻豆md0077饥渴少妇 | 我爱52av| 日韩毛片高清在线播放 | 日韩视频在线观看视频 | 免费av网址在线 | 天天操天天插天天干 | 欧美日韩国产第一页 | 成人a在线 | 91www | 深夜影院深a| 97视频一区二区三区 | 18色av| 精品麻豆视频 | 91小仙女jk白丝袜呻吟 | 女人扒开腿让男人桶爽 | 亚洲国产精选 | www.成人.com| 国产视频二区三区 | 日韩人妻无码精品综合区 | 国产青青草 | 激情爱爱网站 | 红桃成人网 | 性xxx法国hd极品 | 亚洲美女高潮久久久 | 国产毛片久久 | 国产a国产片国产 | 色视频在线观看免费 | 狠狠干夜夜草 | 观看av免费 | 亚洲视频 一区 | www.猫咪av| 精品国产免费无码久久久 | 亚洲中文字幕在线观看 | 樱花草涩涩www在线播放 | 亚洲国产成人av | 欧美私人影院 | 男女啪啪在线观看 | 欧美伦理片 | 亚洲精品中文在线 |