2015-07-19

データベースとの連携 - データベースへのデータ移行

大規模なデータセットから異なる条件によって何度もデータ抽出を行わなければならないようなケースでは、あらかじめ全てのデータをデータベースに移行しておき、それをデータ抽出用のワークスペースのソースデータセットとして利用することによって、データ抽出に要する時間が劇的に短縮できる可能性があります。
ここでは、国土数値情報の鉄道時系列データを PostGIS データベースに移行するためのワークスペース例を掲げます。実用上は鉄道時系列データをデータベース化することに大きな意味はありませんが、属性の内容からみてさまざまなデータ抽出の例を考えやすいことから、サンプルとしました。
データベースからデータを抽出するためのワークスペースについては「データベースとの連携 - データベースからのデータ抽出」を参照してください。
FME 2015.1.0.3 build 15485

=====
国土数値情報の鉄道時系列データ(平成25年度作成; 路線, 駅)を PostGIS データベースに移行する。
データベース名: KSJ_Railroad2
テーブル名: RailroadSection, Station

ソースデータ:
国土数値情報ダウンロードサービスサイトよりダウンロードした鉄道時系列 Shapefile 形式データ(平成25年度)
ダウロードファイル名: "N05-14_RailroadSection2.shp" (路線), "N05-14_Station2.shp" (駅)
=====

FMEワークスペース例












[SHAPE] リーダー: 鉄道時系列データ(路線、駅)を全て読み込む。
[POSTGIS] ライター: RailroadSection テーブル、Station テーブルにフィーチャー(レコード)を挿入する。

鉄道時系列データ (Shape形式) には座標系定義ファイル (*.prj) が含まれていませんが、世界測地系(JGD2000)緯度経度であることは知られているので、[SHAPE] リーダーの Coordinate System パラメーターに LL-JGD2K (JGD2000緯度経度) を設定しました。これにより、読み込まれたフィーチャーに座標系が設定され、移行先のデータにも座標系が定義されます。その他にはソースデータの読込に関して特筆すべき事項はありません。

データベースの場合、データベースがデータセット、テーブルがフィーチャータイプ、レコードがフィーチャーに相当します。データベース(データセット)を新たに作成する場合は、あらかじめ空のデータベースを作成しておく必要があり、その方法はDBMS (データベース管理システム) によって異なります。PostgreSQL/PostGIS の場合は pgAdmin III (PostgreSQL に付属するデータベース管理用ツール) を使うのが簡単です。
なお、現在 FME は日本語文字を含む PostgreSQL/PostGIS データベース名をサポートしていないので、データベース名は英文字のみとしてください。この例では "KSJ_Railroad2" としました。テーブル名、フィールド名では日本語文字も使用できます。

データベース用のライターをワークスペースに追加する際には、データベースに接続するためのパラメーターの設定が必要です。パラメーターの構成も DBMS によって異なります。

[POSTGIS] ライター追加時の Add Writer 画面, パラメーター設定画面
"Database Connection" グループでデータベースに接続するためのパラメーターを設定します。














Add Writer 画面
Format: PostGIS
Dataset: Embed Connection Parameters

PostGIS Parameters 画面
Host: データベースサーバーのホスト名
Port: データベースサーバーの接続ポート番号
Database: KSJ_Railroad2  (データベース名 = データセット名)
Username: データベースユーザー名
Password: データベースユーザーのパスワード
Spatial Column Type: geometry  (デフォルト)
Spatial Column Name: geom  (デフォルト)
Create Generic Spatial Columns: チェック (デフォルト)
Lower Case Attribute Names: 列名(属性名)に英大文字を使用する場合はチェックをはずす。

ホスト名、接続ポート番号は、実際のデータベースサーバーの構成にしたがってください。データベースユーザーは、使用するデータベースに対するテーブル作成/削除、レコード挿入の権限を持っていなければなりません。

ライターを追加したら2つのライターフィーチャータイプ(テーブル)をキャンバスに追加し、それぞれのテーブル名と属性を設定します。ソースデータ(Shapeファイル)の属性定義については、国土数値情報ダウンロードサービスサイトの鉄道時系列データ説明ページ、及びそのページからリンクしている製品仕様書 (PDF) やShapeファイルの属性定義 (Excel) を参照してください。

[POSTGIS] ライターフィーチャータイププロパティ: RailroadSection 属性(フィールド)設定例





















ワークスペースの実行(データ移行)が一回限りの場合はこのままで良いですが、属性名やデータ型を変更して再実行する場合は、データの書出を始める前に、前回作成したテーブルを削除する必要があります。そのようなことが想定される場合は、フィーチャータイププロパティの Format Parameters タブで、Drop Table First (最初にテーブルを削除する) を Yes に変更してください。これにより、ワークスペースを実行するたびに、データベース内に同じ名前のテーブルが存在していた場合はそれが削除され、新たにテーブルが作成されるようになります。

[POSTGIS] ライターフィーチャータイププロパティ: Format Parameters タブ
















ソースデータのフィーチャータイプとライターフィーチャータイプ (RailroadSection, Station) を接続し、それらの間で対応する属性同士も接続すれば完成です。このワークスペースを実行すると、Shapeファイルから読み込まれた全ての鉄道時系列データ(路線、駅)が KSJ_Railroad2 データベース(RailroadSection テーブル、Station テーブル)に移行されます。

KSJ_Railroad2 データベース (pgAdmin III)
RailroadSection, Station テーブルが作成されました。
























Station テーブル (pgAdmin III クエリーツール)
空間データ(ポイントジオメトリ)は "geom" フィールドに記録されています。
















ここで掲げたワークスペース例では、リーダーフィーチャータイプとライターフィーチャータイプの間で属性をひとつずつ接続していますが、データフローの途中で AttributeRenamer などによってフィーチャーの属性名を出力先の属性名と同じ名前に変更した場合は、個々の属性同士の接続を明示的に行う必要はありません。また、不要な属性を削除したり、新たな属性を加えてそれもデータベースに移行したりするなど、必要に応じてデータ移行とあわせてスキーマを変更することもできます。

FMEではファイルベースのデータセットと同じ感覚でデータベースを取り扱うことができますが、データベースと接続するためのパラメーターなど、DBMS (データベース管理システム) ごとに少しずつ異なるところがあるデータベースの利用方法に関する基礎的な知識は必要です。初めてデータベースを扱う場合には、その点で少し難しさを感じるかも知れませんが、データベースシステム開発や運用の専門家を目指すのでない限りは、学ぶべきことはそんなに多くはありません。データベースが利用できるようになるとFMEの活用の幅も格段に広がりますので、是非、チャレンジしてください。

注: FME Professional エディションは、PostGIS データベースについては空間データの Read (読込), Write (書出) ともにサポートしていますが、Oracle, Microsoft SQL Server データベースへの空間データの Write はサポートしません (非空間データの Read/Write, 空間データの Read はサポートします)。それらのデータベースに空間データを書き出すには、FME Database エディションのライセンスが必要です。

0 件のコメント:

コメントを投稿