天天看點

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

為什麼要同步oracle空間資料到postgresql?(1)公司之前的所有空間資料都是存儲到oracle資料庫中,大家都知道oracle資料庫費用很高,(2)項目處于前期階段,空間資料内容還不太确定,在後期需要重新編輯;(3)最終資料會用skyline SFS釋出出來,在前端加載。(4)趁機會學習點新的東西。

下面來說說postgresql空間擴充與kettle spoon同步oracle空間資料到postgresql。

一、postgresql空間擴充

至于kettle spoon、postgresql、postGIS的安裝不作記錄,隻是新手需要注意的是postgresql空間擴充安裝是有順序的。需要安裝的空間擴充與順序如下:

CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
           

或在PG裡按上面的順序添加,如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

二、postgresql中建立點空間資料表

建立空間資料表最快的方法是從oracle中把相應的表結構導出來,打開文本複制到postgresql中,替換一下字段類型,添加一個geom空間字段。需要注意的是,geom 資料類型。在建立該字段時,可以:

1、geom geometry;

2、geom geometry(Point);

3、geom geometry(Point,4326);

4、geom geometry(PointZM);

第三個包含了空間參考,如果用這個類型,在後面資料同步的腳本中,也是需填寫要這個4326參數的,導緻Point與4326之間有一個逗号,在拼接字元串時,不知道如何拼接逗号,出了很多問題,是以我幹脆用了geom geometry(Point),隻是沒有了空間參考。

三、同步oracle空間資料到postgresql

由于postgresql與oracle資料庫中的空間字段類型并不一樣,是以是不能直同步過來的。最初的想法是,在oracle資料庫中建立兩個字段,用來存放點的x,y坐标,在同步到postgresql後,利用postgis函數建立适合postgresql點空間字段的值。主要流程如下:

1、kettle spoon建立轉換

主要目的是把oracle資料庫中點的屬性資料同步到postgresql中。

先建立一個轉換,添加表輸入,即添加oracle資料庫中需要同步的表和需要同步的字段。如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

輕按兩下上面圖示進行表輸入編輯,如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

再從輸出中拖入 插入/更新,并與表輸入建立連接配接,按住shift拖動滑鼠從表輸入到插入/更新,編輯插入/更新,儲存轉換。如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

最終結果如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

2、另建立一個轉換,用于空間資料計算并更新腳本,主要目的是在空間資料表中,按geom geometry(Point)資料類型存入相應的值。本來是打算把這個腳本放與第一步放一起,不知道什麼原因,連接配接之後,腳本執行成功,但是資料表中沒有任何更新,是以把腳本單獨放到一個轉換中。

從腳本中拖入執行SQL腳本,并編輯參數,并儲存轉換檔案,SQL腳本最好是先在pg裡執行測試一下,成功之後再拷貝過來。我的Sql腳本内容為:

UPDATE tablename SET geom=( ST_GeomFromText( (select 'POINT('||CAST(longitude AS CHAR(12))||' '||CAST(latitude AS CHAR(12))||')' FROM tablename q where tablename.objectid=q.objectid ORDER BY objectid LIMIT 1))),其中longitude字段為X坐标字段,latitude為Y坐标字段

設定如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

需要注意的是裡面有個”執行每一行?“複選框。按照我的了解應該是要勾上,結果不是這樣。

3、從檔案中建立作業,從通用中拖入start和兩個轉換控件,編輯start,可以設定作業的執行參數,如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

編輯第轉換,如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

最終結果如下圖:

kettle spoon同步oracle的點空間資料到postgresql一、postgresql空間擴充二、postgresql中建立點空間資料表三、同步oracle空間資料到postgresql

繼續閱讀