日韩性视频-久久久蜜桃-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分布列字段的方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 老女人网站 | 波多野结衣操 | 爱福利视频网 | 青娱乐精品视频 | 国产在线精品播放 | 在线中文字日产幕 | 久久人妻少妇嫩草av蜜桃 | 日韩欧美亚洲一区 | 亚洲av成人无码一区二区三区在线观看 | 免费看片亚洲 | 日韩精品播放 | 超碰人人在线 | 黄色小视频免费网站 | 俺也去综合 | 亚洲欧美精品在线观看 | 国产精品无码乱伦 | 3p视频在线 | 色综合视频 | 欧美色涩在线第一页 | 欧美视频网站 | 99久久久无码国产 | av中字在线 | 91国语对白 | 91美女片黄在线观看游戏 | 色综合视频 | 少妇肥臀大白屁股高清 | 嫩草一区二区三区 | 免费看黄色av | 久久伊人99 | 99在线观看 | 久久一视频 | 中出少妇| 久久人人爽爽人人爽人人片av | 91精品国产成人www | 天天透天天操 | 红杏出墙记 | 国产成人啪免费观看软件 | 四虎精品在线 | 国产美女免费观看 | 中文字幕日韩专区 | www.久久久久久久久久 | 一级黄色片国产 | 漂亮人妻洗澡被公强 日日躁 | 中文字幕一区二区三区av | 91少妇丨porny丨| 好男人www社区 | 久艹在线观看视频 | 国产一级片免费在线观看 | 国产精品无码久久久久 | 顶级嫩模啪啪呻吟不断好爽 | 爱情岛亚洲论坛入口福利 | 啊v视频在线观看 | 久久久久久一区二区 | 亚洲精品色 | 久久爱伊人 | 日本在线免费观看视频 | 欧美日韩精品二区 | 欧美日韩1 | 99爱免费视频 | 久久婷五月天 | 亚洲色图欧洲色图 | 日本一级黄色 | 色女人综合 | 四季av中文字幕 | 中文久久久久 | 日韩精品在线观看一区二区 | 久久综合丁香 | 网站在线免费观看 | 亚洲狠 | 国产女同视频 | 免费av成人 | 五级毛片 | 天天看天天爽 | 日本天堂一区 | 国内一级视频 | 久久露脸国语精品国产 | 在线精品观看 | 欧美激情精品久久久久久蜜臀 | 成人在线免费av | 精品视频一区二区在线 | 成人性视频网 | 日韩成人区 | 91ts人妖另类精品系列 | www.久久精品视频 | 成人a级片 | 小视频在线 | 麻豆视频软件 | 狠狠干av | 性欧美大战久久久久久久免费观看 | 亚洲天堂av在线免费观看 | jizz韩国| 久99热| 手机在线看片日韩 | 国产欧美日韩精品一区 | 国产一级不卡毛片 | 国产av精国产传媒 | 性猛交xxxx乱大交孕妇印度 | 中文字幕在线观看91 | 卡通动漫亚洲综合 |