據(jù)遷移方案:KDTS與要素類注冊)
簡介面向需要將 GIS 數(shù)據(jù)從 ArcGIS、GeoScene、SuperMap 等平臺遷移至國產(chǎn)數(shù)據(jù)庫的 DBA、GIS 工程師與開發(fā)人員這份 KingbaseES V8.6 數(shù)據(jù)遷移方案系統(tǒng)梳理了空間數(shù)據(jù)入庫的可行路徑。壓縮包僅含 1 個 PDF 文件約 2.76MB篇幅覆蓋 KingbaseES GIS 能力介紹、基于 ArcGIS 的 KDTS 工具 ETL 流程、ArcGIS/GeoScene 軟件遷移、SuperMap 平臺遷移以及第三方通用格式數(shù)據(jù)入庫等章節(jié)。每類方案均配有遷移結果驗證方法與常見問題匯總讀者可據(jù)此理解源庫連接、目標庫配置、GIS 表與字段選擇、數(shù)據(jù)導入及完整性核對等關鍵環(huán)節(jié)也能借助 FAQ 排查遷移中的典型異常。目前已有 136 人學習適合作為國產(chǎn)數(shù)據(jù)庫替代與 GIS 空間數(shù)據(jù)遷移項目的參考手冊。1. 需求先立住GIS 數(shù)據(jù)遷移方案為什么不能“遷過去再說”某單位要把運行了七八年的空間庫整體換到 KingbaseES 上圖層四百多個、要素上千萬第一版做法是拿桌面端一個圖層一個圖層地導導到第三天卡在最大的一張道路面上進程崩了還得從頭來。GIS 數(shù)據(jù)遷移方案的難點從來不在“能不能連上庫”而在于幾何、空間參考、要素類注冊這三樣東西在庫與庫之間并不一一對應幾何能搬過去坐標系可能丟了坐標系對了上層平臺又認不出這是一張要素類表。這套 KingbaseES GIS 數(shù)據(jù)遷移方案把來源拆成 ArcGIS/GeoScene、SuperMap、通用文件三類每一類都給出選型判據(jù)、遷移參數(shù)、注冊步驟和驗收口徑。它適合正在做國產(chǎn)化數(shù)據(jù)庫替換的 DBA、負責實施交付的 GIS 工程人員也適合把“空間數(shù)據(jù)遷移”直接當成畢設或課設題目的學生——選題本身就帶完整的需求、設計、實現(xiàn)、驗證四段結構。2. 能力底座與總體設計KGIS 插件撐起的三類空間數(shù)據(jù)存儲選型之前先把底座看清楚。很多遷移方案栽跟頭是因為設計者腦子里還按普通關系表在規(guī)劃等到幾何字段、空間索引、柵格元數(shù)據(jù)一上來參數(shù)全錯。KingbaseES 的空間能力由 KGIS 插件提供它決定了數(shù)據(jù)落到庫里長什么樣也決定了后面遷移工具該怎么配。2.1 矢量、柵格、三維在庫里的三種落法矢量數(shù)據(jù)是遷移量最大的一類。行政區(qū)劃、建筑物、POI 點、道路源端常見的形態(tài)是 .shp、.geojson、.kmlCAD 那邊則是 .dwg、.dxf。落到庫里形態(tài)統(tǒng)一變成“一張業(yè)務表 一個專門的幾何字段”圖層的屬性進普通列空間位置進幾何列。這是國內(nèi)外主流 GIS 平臺共用的存儲結構也是遷移方案能通用化的前提。-- 矢量要素落庫后的典型表結構屬性列 一個帶類型和 SRID 約束的幾何列 CREATE TABLE gis.road_network ( gid bigserial PRIMARY KEY, name varchar(128), road_level integer, geom geometry(LineString, 4490) -- 4490 為常見地理坐標系的 SRID按源端實際值改 ); -- 空間索引決定范圍查詢的響應速度百萬級要素沒有它基本等于不可用 CREATE INDEX idx_road_network_geom ON gis.road_network USING gist (geom);這段建表語句里有兩個參數(shù)值得盯住。geometry(LineString, 4490)是帶約束的寫法第一個參數(shù)限定幾何類型第二個參數(shù)限定 SRID好處是臟數(shù)據(jù)進不來——往線圖層插點會直接報錯避免了遷移后一堆幾何類型混雜、應用層判斷不完的問題。代價是遷移工具寫入時必須嚴格對齊類型源端的 MultiLineString 混合圖層要先拆或統(tǒng)一轉(zhuǎn)成 MultiLineString。USING gist是空間索引類型別用 B-TreeB-Tree 對二維范圍查詢沒有意義建了也只是占空間。柵格數(shù)據(jù)走的是另一條路。KGIS 把影像的元數(shù)據(jù)存進庫——實際存儲路徑、中心點、范圍框、星歷參數(shù)這些像元本體仍然以 tif、img 等文件形式留在文件系統(tǒng)里。這樣做的收益是查詢效率應用先查元數(shù)據(jù)表定位到具體文件再去讀影像比把幾百 GB 影像塞進大對象字段要合理得多。設計時要記住一點元數(shù)據(jù)里存的是路徑遷移到新環(huán)境后路徑前綴往往變了這一條后面會單獨說。三維數(shù)據(jù)在 KGIS 里支持 Z 維度和 M 維度能存 TIN、POLYHEDRALSURFACE 這類體積對象也有一批函數(shù)算三維對象之間的關系。但三維模型、傾斜攝影測量數(shù)據(jù)不走這條路它們按柵格的方式存也就是元數(shù)據(jù)入庫、本體外掛。這個邊界搞混遷移時會出現(xiàn)“要素數(shù)對得上但打開圖層是空的”這類玄學現(xiàn)象。2.2 遷移鏈路的四層分工與選型判據(jù)整條鏈路拆成四層每層的輸入輸出都固定下來后面不管是哪個平臺做源端只是換第一層的實現(xiàn)。第一層是抽取層負責從源端把結構定義和數(shù)據(jù)讀出來。源端可能是 Oracle Spatial 里的空間表也可能是帶 GIS 平臺元數(shù)據(jù)的 SDE 庫還可能只是一堆備份文件。第二層是結構映射層把源端的類型、長度、約束翻譯成目標庫的等價物幾何類型和 SRID 的映射在這一層完成它是整個方案里最容易丟信息的地方。第三層是裝載層按批次把數(shù)據(jù)寫進目標庫批量大小、游標大小、大表拆分策略都在這一層配。第四層是注冊與校驗層負責把裝載完的表變成上層 GIS 平臺能識別的要素類并給出可核對的一致性證據(jù)。選型判據(jù)我一般按下面這張表走判斷順序是從上往下命中即停源端情況推薦路徑主要理由需要提前準備圖層少、體量小、有 ArcGIS/GeoScene 平臺在線平臺自帶的異構庫遷移平臺負責元數(shù)據(jù)一致性改動最小目標庫連接、授權文件要素量大或圖層多有平臺在線KDTS 工具遷移支持大表拆分、批量提交可斷點重來源庫只讀賬號、目標庫 sde 模式只有 Oracle Spatial 備份庫沒有平臺KDTS 工具遷移不依賴平臺元數(shù)據(jù)可直連源庫抽數(shù)源庫實例可用、表清單源端是 SuperMap 平臺平臺數(shù)據(jù)源導出再入庫坐標系與要素集結構跟隨平臺定義目標數(shù)據(jù)源參數(shù)源端只有 shp/geojson/tif 等文件通用格式入庫無庫依賴可腳本化批處理編碼、字段名長度、投影文件源端是傾斜攝影、三維模型按柵格方式元數(shù)據(jù)入庫本體體積大不適合塞庫文件目錄規(guī)劃、路徑一致性這張表真正起作用的地方在于第三行和第六行。前者是很多人沒意識到的場景客戶給你一個數(shù)據(jù)庫備份平臺上早就沒有這套服務了界面化的遷移工具根本用不了只能靠工具直連庫抽數(shù)。后者則是設計階段就必須定死的等遷到一半再發(fā)現(xiàn)三維模型塞不進去返工成本極高。3. ArcGIS/GeoScene 側(cè)的數(shù)據(jù)遷移KDTS 鏈路上的四個步驟與兩個必經(jīng)環(huán)節(jié)ArcGIS 和 GeoScene 的遷移在方案里占的篇幅最大因為絕大多數(shù)存量空間庫都掛在這兩個平臺下面。這一章按執(zhí)行順序講先讓兩邊互相認識再建遷移任務最后把表注冊成要素類。前兩步是操作第三步是很多人漏掉、導致交付驗收過不去的關鍵點。3.1 遷移前把源端和目標端都“認識”上平臺側(cè)的第一步不是導數(shù)據(jù)是建立企業(yè)級地理數(shù)據(jù)庫連接。在桌面端工具箱里找到“創(chuàng)建企業(yè)級地理數(shù)據(jù)庫”給源庫和目標庫各建一次。源庫填 Oracle 的實例信息目標庫填 KingbaseES 的連接信息。這里有個參數(shù)特別容易翻車實例那一欄如果端口不是默認的 5432必須寫成“地址,端口”的形式比如10.0.12.30,5444用逗號分隔不能寫冒號也不能只寫地址。寫錯了表現(xiàn)是連接超時報錯信息很含糊排查起來費時間。授權文件也有講究只能用 .ecp 格式的授權文件選錯文件類型當場報錯。兩個庫都建好連接之后還要各自執(zhí)行一次“啟動地理數(shù)據(jù)庫”這一步會在目標庫里創(chuàng)建 sde 用戶、sde 模式以及一批平臺自用的元數(shù)據(jù)表。漏了這步后面 KDTS 把表導過去了平臺側(cè)一樣識別不出來。# 目標庫側(cè)先確認擴展與 sde 模式就位再讓平臺去初始化能省掉一輪排查 ksql -U system -d gisdb -c CREATE EXTENSION IF NOT EXISTS kgis; # sde 用戶與模式建議提前建好交給平臺自動創(chuàng)建時權限容易出問題 ksql -U system -d gisdb -c CREATE USER sde WITH PASSWORD ******; ksql -U system -d gisdb -c CREATE SCHEMA sde AUTHORIZATION sde;這兩條命令不是必須的平臺初始化時也會做但提前手工建好有個實際好處出問題時邊界清楚。如果平臺初始化失敗你能立刻區(qū)分是擴展沒裝上還是權限不足而不是對著一句籠統(tǒng)的報錯猜。CREATE EXTENSION要求用具有相應權限的賬號執(zhí)行生產(chǎn)環(huán)境通常由 DBA 完成實施人員不要自己拿業(yè)務賬號試。3.2 KDTS 任務的四步配置與參數(shù)取值KDTS 工具本身的機制值得先講一句它用插件方式動態(tài)加載待遷移數(shù)據(jù)庫的訪問接口所以支持的源庫類型可以擴展。它提供的能力包括結構遷移、全量數(shù)據(jù)遷移、列名映射、表數(shù)據(jù)過濾——這幾項對 GIS 場景都有用尤其是列名映射源端字段名超長或者帶特殊字符時能直接改掉。新建源連接和目標連接時需要填的項包括連接名稱、數(shù)據(jù)庫類型、數(shù)據(jù)庫版本、服務器地址、端口、用戶名、密碼、數(shù)據(jù)庫、驅(qū)動、URL、連接參數(shù)。其中 URL 由工具根據(jù)地址端口庫名自動生成但生成規(guī)則依賴兩個選擇源庫是 Oracle 時要選 SID 還是 ServiceName目標庫是 KingbaseES 時要選 JDBC 還是 UnixDomainSocket。SID 是實例標識ServiceName 是服務名集群環(huán)境下各節(jié)點 SID 可能不同但 ServiceName 一致所以集群源庫優(yōu)先選 ServiceName。UnixDomainSocket 只在遷移工具和目標庫裝在同一臺 Linux 機器上時能用走本機進程間通信省掉網(wǎng)絡開銷大批量導入時能明顯快一截。建任務的四步是選擇數(shù)據(jù)源、選擇模式、選擇遷移對象、配置參數(shù)。選擇模式時要注意“包含系統(tǒng)模式”這個復選框默認不勾勾上會把系統(tǒng)自帶的一堆模式也列出來選錯了遷移范圍翻倍。選擇遷移對象支持三種方式直接在輸入框敲表名回車確認多個表用逗號隔開從列表里勾選可以按模式、表名關鍵字、數(shù)據(jù)條數(shù)限制檢索從文件導入工具提供模板下載。表多的時候一定用文件導入手敲絕對會漏。反過來也可以用“排除指定表”剔除日志表、臨時表這類不該遷的東西兩種方式操作一致結果相反。配置參數(shù)這一步是整章最值錢的部分默認值能跑通但跑得快不快、穩(wěn)不穩(wěn)全看這幾個數(shù)參數(shù)默認值調(diào)整建議與觸發(fā)條件源庫游標讀取記錄數(shù)100寬表或 LOB 字段多時降到 20~50避免單次游標占用內(nèi)存過高批量寫入目標庫記錄數(shù)1000字段少、行數(shù)多的小表可提到 2000~5000明顯提速每次批量提交大小100MB目標庫事務日志吃緊時降到 20~50MB用時間換穩(wěn)定LOB 字段預讀取大小4000Byte有影像二進制、長文本時提到 64KB否則會被截斷或反復重讀大表拆分閾值按行數(shù)或按大小單表超過千萬行時啟用配合拆分最大塊數(shù)一起設數(shù)據(jù)庫連接數(shù)100源庫壓力敏感時降到 10~20別和生產(chǎn)業(yè)務搶連接表名/列名大小寫不變目標端統(tǒng)一小寫時改這里避免應用層加引號查詢大表拆分是 GIS 場景的高頻需求。一個要素類動輒幾千萬行一次性遷移中途失敗就得重來。啟用拆分閾值后工具按行數(shù)或按表大小把大表切成若干塊逐塊遷移某塊失敗只重跑該塊。閾值定多少沒有標準答案我一般按目標庫單表能承受的寫入量估單塊控制在 300 萬到 500 萬行塊與塊之間留出提交間隔。帶大對象的表還要額外設游標讀取記錄數(shù)上限否則塊切了但游標還是撐爆內(nèi)存。非對象設置那一欄包含主鍵、檢查約束、唯一約束、外鍵、索引、觸發(fā)器、自動轉(zhuǎn)換對象名、注釋默認全選實際實施中建議先取消外鍵和觸發(fā)器等數(shù)據(jù)全部導完再單獨建能省掉大量逐行校驗時間——這是踩過坑之后的習慣不是理論最優(yōu)。任務建完可以選“保存”作為預遷移任務也可以選“保存并遷移”直接跑。跑完看狀態(tài)欄顯示“完成”就是成功顯示“失敗”就點詳情看日志日志里通常能定位到具體哪張表哪一行出的問題。3.3 遷移后注冊acrpyRegisterWithGeodatabase 不能省數(shù)據(jù)導完、行數(shù)對得上不代表交付完成。ArcGIS/GeoScene 判斷一張表是不是要素類靠的是 sde 模式下的元數(shù)據(jù)表KDTS 建出來的表對這些元數(shù)據(jù)一無所知。表現(xiàn)就是在目錄樹里能看到表、能看屬性、能寫 SQL 查但當成圖層加載時空的或者能加載卻不能編輯、不能做空間分析。這一步不做驗收一定被打回。注冊腳本通常由遷移過程自動生成放在結果目錄下形如result/2021-12-02_15-15-15/SDE/AcrpyRegisterScript/的位置文件名是acrpyRegisterWithGeodatabase.py。用法是把它拷貝到裝了桌面端的機器上放進對應版本的 Python 目錄比如C:\Python27\ArcGIS10.8然后用帶 arcpy 的 Python 解釋器執(zhí)行。# 遷移后批量注冊要素類不做這一步表在平臺里看得見、用不了 import arcpy # sde 連接文件需提前在目錄樹里建好指向目標庫的 sde 用戶 arcpy.env.workspace rD:\conn\kingbase_sde.sde # 逐個要素類注冊gid 為主鍵列geom 為幾何列列名按實際表結構改 for fc in arcpy.ListFeatureClasses(): try: arcpy.RegisterAsObject( in_datasetfc, oid_fieldsgid, shape_fieldsgeom, geometry_typePOLYLINE # 按圖層實際類型改POINT/MULTIPOLYGON 等 ) print(registered: {0}.format(fc)) except Exception as e: # 單表失敗不中斷整體記錄下來單獨排查通常是主鍵或幾何列名不匹配 print(failed: {0} - {1}.format(fc, e))這段腳本的關鍵在三個參數(shù)。in_dataset是要注冊的表遍歷拿到的名字可能帶模式前綴實際執(zhí)行時按環(huán)境調(diào)整。oid_fields是對象標識列必須唯一且非空源端如果沒有主鍵遷移時就得補一列自增。shape_fields是幾何列名KDTS 默認建成 geom如果遷移時做過列名映射這里要同步改。geometry_type決定平臺怎么解釋幾何填錯的表現(xiàn)是圖層能加但顯示異?;蛎娣e周長算不出來。批量注冊一定要加 try 包裹并記錄失敗清單。幾百個圖層里總有幾個因為主鍵缺失、幾何為空、類型不匹配掛掉整體中斷會讓你不知道從哪張表繼續(xù)。4. SuperMap 與第三方通用格式另外兩條入庫路徑的取舍不是所有源端都掛著 ArcGIS。方案里另外兩條路徑覆蓋的場景同樣常見一條是 SuperMap 平臺下的存量數(shù)據(jù)一條是散落在文件系統(tǒng)里的通用格式文件。這兩條路徑比前一條簡單但各自的坑一點不少。4.1 SuperMap 平臺側(cè)數(shù)據(jù)源方式導出再入庫SuperMap 的遷移思路和前一條不同它不需要中間工具轉(zhuǎn)一手而是利用平臺自身的數(shù)據(jù)源機制?;咀龇ㄊ窃谄脚_里把待遷移的數(shù)據(jù)集導出成標準格式或直接以數(shù)據(jù)源方式連接目標庫配置好 KingbaseES 的連接參數(shù)后把數(shù)據(jù)集復制或?qū)氲侥繕藬?shù)據(jù)源。配置連接時最關鍵的是坐標系。SuperMap 的數(shù)據(jù)集自帶坐標系定義導入目標數(shù)據(jù)源時如果目標數(shù)據(jù)源沒有對應的坐標系平臺會做一次轉(zhuǎn)換或者直接拒絕。我的做法是先查清楚源數(shù)據(jù)集的坐標系名稱和 EPSG 編碼在目標端建數(shù)據(jù)源時就指定同樣的坐標系讓兩邊從一開始就對齊不留給平臺自動轉(zhuǎn)換的機會——自動轉(zhuǎn)換在投影參數(shù)不完全一致時會引入米級誤差聚落邊界這類數(shù)據(jù)跑完對不上排查成本極高。導入完成后同樣要檢查要素數(shù)。SuperMap 會在導入日志里給出成功與失敗條數(shù)失敗條數(shù)不為零時日志會指出是幾何無效還是字段超長。幾何無效的處理辦法是先做一次修復自相交、未閉合環(huán)、重復點修完再導不要指望數(shù)據(jù)庫端兜底。4.2 通用格式按文件入庫編碼、字段名、投影三件事shp、geojson、kml、tif、img 這些文件沒有數(shù)據(jù)庫依賴入庫方式最靈活也最容易亂。批量入庫一般寫腳本按目錄遍歷逐文件解析后寫入目標表。# 批量導入 shp 的思路示意讀投影、讀字段、按批寫入投影缺失時直接跳過并記錄 import os, shapefile def import_shp(shp_path, conn, target_table): reader shapefile.Reader(shp_path, encodinggbk) # 中文屬性常為 gbk指定錯會亂碼 fields [f[0] for f in reader.fields[1:]] # 跳過 DeletionFlag if not os.path.exists(shp_path.replace(.shp, .prj)): return skip: missing .prj # 無投影文件不入庫避免 SRID 猜錯 rows [] for rec in reader.iterShapeRecords(): geom_wkt rec.shape.__geo_interface__ # 轉(zhuǎn) WKT 后交給空間函數(shù)入庫 rows.append((rec.record[0], geom_wkt)) # 實際寫入用批量 COPY 或 executemany避免逐行提交 return ok: {0}.format(len(rows))這段示意代碼里三個點值得展開。encodinggbk對應的是 .dbf 里的屬性編碼中文環(huán)境下十有八九是 GBK用默認 UTF-8 讀出來就是亂碼且不會報錯只是數(shù)據(jù)錯了屬于典型的黑匣子問題。檢查 .prj 文件存在與否是硬性判斷沒有投影文件就不知道坐標系猜一個 SRID 塞進去后面所有面積、距離計算都是錯的。字段名截斷是 shp 格式的固有限制屬性名最長 10 個字符源端如果用了長字段名讀出來已經(jīng)被截斷了入庫前要做一次映射表把截斷后的名字還原成業(yè)務可讀的名字否則應用層對不上字段。入庫 SQL 側(cè)可以走空間構造函數(shù)也可以走批量裝載。數(shù)據(jù)量大時用 COPY 先灌臨時表再用一條 INSERT ... SELECT 做幾何轉(zhuǎn)換比逐行執(zhí)行快一個數(shù)量級-- 先把 WKT 和屬性灌進臨時表再一次性轉(zhuǎn)換幾何并落正式表 CREATE TEMP TABLE stg_road (gid bigint, name text, geom_wkt text); COPY stg_road FROM /data/road.csv WITH (FORMAT csv, HEADER true); INSERT INTO gis.road_network (gid, name, geom) SELECT gid, name, ST_GeomFromText(geom_wkt, 4490) -- 第二個參數(shù)為 SRID必須與 .prj 一致 FROM stg_road WHERE ST_IsValid(ST_GeomFromText(geom_wkt, 4490)); -- 無效幾何先剔除進正式表再做修復ST_GeomFromText的第二個參數(shù)就是 SRID寫錯的表現(xiàn)是數(shù)據(jù)能進但空間關系全亂。ST_IsValid過濾放在插入前目的是保證正式表里不混入自相交、未閉合這類幾何后續(xù)修復有明確的待處理集合。4.3 三條路徑的選擇矩陣把前面幾條路徑擺在一起對比實施時按這張表對號入座就不會走偏維度KDTS 工具遷移平臺自帶遷移通用文件入庫適用數(shù)據(jù)量大千萬級以上中幾十萬到百萬小到中按文件批次是否需要平臺在線否是否結構遷移能力強支持約束索引觸發(fā)器依賴平臺元數(shù)據(jù)弱需手工建表斷點續(xù)傳支持按大表分塊不支持需自行設計坐標系處理依賴目標表定義平臺統(tǒng)一管理靠 .prj 與 SRID 對齊典型翻車點參數(shù)過大導致內(nèi)存溢出坐標系不一致引入偏移編碼與字段名截斷選擇原則一句話能走平臺就走平臺平臺不可用或數(shù)據(jù)量扛不住才上工具文件類數(shù)據(jù)沒有選擇余地只能走第三條。三條路徑可以混用一個項目里往往是大表走 KDTS、小表走平臺、歷史檔案走文件導入前提是三條路徑的目標表結構由同一份設計文檔約束否則遷移完成后會出現(xiàn)同類數(shù)據(jù)兩套表結構的情況。5. 避坑與排查遷移現(xiàn)場最容易翻車的五個點這一章按“現(xiàn)象、原因、解決”三段式展開都是實際項目里遇到過、且重復率很高的故障。第一種遷移報告全綠但圖層加載后要素少了一截。現(xiàn)象是行數(shù)對得上、抽樣也對偏偏空間查詢的范圍結果比預期小。原因基本是兩個空間索引沒建或者大表拆分時某一塊失敗被跳過而整體狀態(tài)仍標為完成。解決辦法是遷移腳本末尾強制加一次索引重建并且逐表核對行數(shù)而不是只看任務總狀態(tài)。核對 SQL 很簡單SELECT count(*) FROM 表名與源端對比差異超過閾值就重跑該表。第二種幾何全變“未知空間參考”或者面積算出來差一個數(shù)量級?,F(xiàn)象是圖層能打開、能看到形狀但量算結果離譜。原因是 SRID 丟失或混用常見于源端是地理坐標系度而目標表按投影坐標系米定義或者入庫時ST_GeomFromText的第二個參數(shù)隨手填了個默認值。解決辦法是在遷移前把源端每個圖層的坐標系導出成清單與目標表定義逐條比對不一致的先做投影轉(zhuǎn)換再入庫不要留到數(shù)據(jù)庫端補救。這個問題在畢設答辯里特別容易被問評委一句“你這個面積單位是平方米還是平方度”就能問穿。第三種應用報“列不存在”但表里明明有這一列?,F(xiàn)象是數(shù)據(jù)庫里能看到列應用查詢報錯。原因幾乎都是大小寫目標庫建表時保留了雙引號導致列名變成大寫或混合大小寫而應用拼 SQL 時沒加引號被折疊成小寫。解決辦法是在 KDTS 配置參數(shù)里統(tǒng)一設置表名列名轉(zhuǎn)小寫建表腳本一律不加雙引號應用側(cè)的 SQL 也保持一致。第四種柵格圖層能查到記錄卻顯示不出來?,F(xiàn)象是元數(shù)據(jù)表里有行加載影像時空白。原因是外掛影像文件的實際路徑變了元數(shù)據(jù)里存的還是舊路徑。解決辦法是遷移前統(tǒng)計所有外掛文件的路徑前綴遷移后在目標環(huán)境做一次批量替換替換完抽幾個圖層實際加載驗證別只核對條數(shù)。第五種注冊腳本跑完仍然報要素類不可編輯。現(xiàn)象是腳本輸出成功打開圖層發(fā)現(xiàn)編輯按鈕是灰的。原因是目標庫的 sde 用戶權限不足或者幾何列與平臺預期的類型不一致。排查順序是先確認 sde 用戶對目標表有相應權限再確認幾何列的類型聲明與圖層實際類型一致線圖層必須是 LineString 或 MultiLineString最后看注冊日志里有沒有被吞掉的異常。注意這五條里有四條不會在遷移工具的日志里報錯只能靠事后的數(shù)據(jù)核對發(fā)現(xiàn)。所以校驗腳本必須在遷移開始前就寫好而不是遷完了再想怎么驗。6. 驗收與答辯怎么證明數(shù)據(jù)“遷完了”而不是“遷過去了”驗收這件事最怕的是只報一個“遷移成功”。我給自己的規(guī)矩是三層證據(jù)缺一層都不算交付。第一層是量級對齊。每張表記錄源端行數(shù)、目標端行數(shù)、差異數(shù)差異必須為零大表按分塊分別核對。這一層用腳本跑輸出一張對照表比人工抽檢可靠得多。第二層是幾何對齊。抽樣比對每類圖層的范圍框、幾何有效性比例、面積或長度匯總值。-- 按圖層核對幾何層的一致性要素數(shù)、無效幾何數(shù)、范圍框、面積匯總 SELECT count(*) AS feature_cnt, count(*) FILTER (WHERE NOT ST_IsValid(geom)) AS invalid_cnt, ST_Extent(geom) AS bbox, sum(ST_Area(geom)) AS area_sum FROM gis.road_network;ST_Extent給出范圍框源端和目標端各跑一次坐標值差異在容許范圍內(nèi)才算通過。area_sum是面積匯總投影一致時兩邊數(shù)值應當非常接近差得遠說明 SRID 或投影出了偏差。invalid_cnt不為零就要逐個看無效幾何在后續(xù)空間分析里會引發(fā)連鎖問題。第三層是業(yè)務對齊。挑三到五個典型業(yè)務場景做端到端驗證比如按行政區(qū)統(tǒng)計道路長度、按范圍查詢 POI 數(shù)量、加載一個影像圖層的元數(shù)據(jù)疊加。這一層跑通才算真正可用。驗收項判定標準執(zhí)行方式表數(shù)量與結構與源端清單一一對應字段類型無降級結構比對腳本記錄數(shù)每表差異為 0逐表 count 對照幾何有效性無效幾何為 0 或已登記修復ST_IsValid 統(tǒng)計空間范圍范圍框坐標差在容許范圍內(nèi)ST_Extent 雙向比對坐標系每圖層 SRID 與源端清單一致系統(tǒng)表查詢比對要素類注冊全部注冊成功可編輯可分析平臺側(cè)實際打開驗證典型業(yè)務場景三個以上場景結果一致端到端跑一遍答辯或交付匯報時講清楚三件事就夠了為什么這么選型用這張選擇矩陣回答遷移過程的關鍵參數(shù)怎么定用參數(shù)表回答怎么證明遷對了用這三層證據(jù)回答。評委或甲方最想聽的往往不是順利的部分而是你踩過哪些坑、怎么定位的——把第五節(jié)那五個現(xiàn)象講成排查故事比念一遍成功日志有說服力得多。從那以后我每次接手這類遷移都會在動手前先把校驗腳本和驗收表格寫好跑通了再談開始遷。沒有后悔藥的事只能提前留證據(jù)。希望這套結構能幫到你把自己的那套方案講得更硬一點。本文還有配套的精品資源點擊獲取