C.4 SQL Developerを使用したRDFデータのバルク・ロード
RDFのバルク・ロードの操作は、SQL Developerから開始できます。
最初の準備の後で必要になる主なステップは次の2つです: (1)ファイル・システムからステージング表にデータをロードし、(2)ステージング表からセマンティク・モデルにデータをロードします。
実際のバルク・ロードを準備するには、次の手順を実行します。
-
1つまたは複数のRDFデータセットを準備します。
-
データは、クライアント・システム上ではなく、データベース・サーバーのファイル・システム上に存在する必要があります。
-
データは、N-triple形式またはN-quad形式である必要があります。(たとえば、Apache Jenaを使用して、他の形式をN-tripleまたはN-quadに変換できます)
-
UNIX名前付きパイプを使用すると、圧縮したファイルをいつでも解凍できます。
たとえば、LinkedGeoDataからRDFデータセットをダウンロードできます。概要は、http://linkedgeodata.org/Datasetsおよびhttp://linkedgeodata.org/RDFMappingを参照してください。
LinkedGeoDataからダウンロードするには、https://hobbitdata.informatik.uni-leipzig.de/LinkedGeoData/downloads.linkedgeodata.org/releases/に移動し、リストされたディレクトリを参照します。小規模なデータセットの場合は、https://hobbitdata.informatik.uni-leipzig.de/LinkedGeoData/downloads.linkedgeodata.org/releases/2014-09-09/2014-09-09-ontology.sorted.nt.bz2をダウンロードできます。
各.bz2ファイルは、同じ名前の.ntファイルを含む圧縮アーカイブです。データ・ソースとして.ntファイルを指定するには、圧縮されていないデータを格納する必要がないようにUnix名前付きパイプを作成する場合を除き、対応する.bz2ファイルを抽出(解凍)する必要があります。
-
-
ロードを実行する通常の非DBAユーザーを作成します。
たとえば、DBAナビゲータ(「接続」ナビゲータではない)を使用して、
システム
接続を展開し、「セキュリティ」を展開して、「ユーザー」を右クリックし、「新規作成」を選択します。CONNECT、RESOURCEおよびUNLIMITED TABLESPACE権限があるユーザー(
RDFUSER
など)を作成します。 -
この通常の非DBAユーザー用の接続を追加します(
RDFUSER
という接続など)。デフォルト表領域:
USERS
一時表領域:
TEMPTBS
-
システム・ユーザーとして、自分のRDFデータ・ディレクトリを指す、データベース内のディレクトリを作成します。
「接続」ナビゲータ(DBAナビゲータではない)を使用して、
システム
接続を展開し、「ディレクトリ」を右クリックして、「ディレクトリの作成」を選択します。ディレクトリ名: 目的のディレクトリ名。たとえば:
RDFDIR
データベース・サーバー・ディレクトリ: そのディレクトリ用の目的の場所。たとえば:
/home/oracle/RDF/MyData
「適用」をクリックします。
-
そのディレクトリに対する権限を通常の非DBAユーザー(RDFUSERなど)に付与します。たとえば、次のように
システム
接続のSQLワークシートを使用します。SQL> grant read, write on directory RDFDIR to RDFUSER;
ヒント: 圧縮されていないデータを格納する必要がないように、名前付きパイプを使用できます。たとえば、次のようにします。
$ mkfifo named_pipe.nt $ bzcat myRdfFile.nt.bz2 > named_pipe.nt
-
通常の非DBAユーザー(
RDFUSER
など)の接続を展開し、「RDFセマンティック・グラフ」をクリックします。 -
RDFデータを保持するモデルを作成します。
「モデル」、「新規モデル」の順にクリックします。
モデル名: モデル名を入力します(
MY_ONTOLOGY
など)アプリケーション表:
* Create new <Model_Name>_TPL table *
(つまり、TRIPLEという名前のトリプル列があるアプリケーション表が自動的に作成されます)。モデル表領域: RDFデータを保持する表領域(
RDFTBS
など)「適用」をクリックします。
モデルを表示するには、オブジェクト階層で「モデル」を展開し、モデル名をクリックしてそのモデルのSPARQLエディタを起動します。
問合せを実行して、モデルが空であることを確認できます。
「モデル」メニューを使用して、「モデル」メニューからバルク・ロードを実行します。バルク・ロードには次の2つのフェーズがあります。
-
ファイル・システムからデータベース内の単純なステージング表にデータをロードします。この際には、外部表を使用してファイル・システムから読み取ります。
-
ステージング表からセマンティク・ネットワークにデータをロードします。ステージング表からモデルにロードします(
MY_ONTOLOGY
など)。
これら2つのフェーズを実行するには:
-
ステージング表にデータをロードします。
REGULAR_MODELS
(ネットワーク名の下)を右クリックして、「外部表からステージング表へのRDFデータのロード」を選択します。「ソース外部表」の場合、ソース表: 目的の表名(
MY_ONTOLOGY_EXT
など)。ログ・ファイル: 目的のファイル名(
my_ontology.log
など)不良ファイル: 目的のファイル名(
my_ontology.bad
など)ソース表の所有者: RDFデータを含む表のスキーマ(
RDFUSER
など)「入力ファイル」の場合、入力ファイル: 入力ファイル(
named_pipe.nt
など)。「ステージング表」の場合、ステージング表: ステージング表の名前(
MY_ONTOLOGY_STAGE
など)。表が存在しない場合は、「ステージング表の作成」を選択します。
入力形式: 目的の形式(
N-QUAD
など)ステージング表の所有者: ステージング表のスキーマ(
RDFUSER
など) -
ステージング表からモデルにロードします。
ノート:
ステージング表内のUnicodeデータは、WC3N-Triple形式で指定されているように(http://www.w3.org/TR/rdf-testcases/#ntriples)エスケープする必要があります。SEM_APIS.ESCAPE_RDF_TERM関数を使用すると、ステージング表内のUnicode値をエスケープできます。たとえば、次のようにします。
create table esc_stage_tab(rdf$stc_sub, rdf$stc_pred, rdf$stc_obj); insert /*+ append nologging parallel */ into esc_stage_tab (rdf$stc_sub, rdf$stc_pred, rdf$stc_obj) select sem_apis.escape_rdf_term(rdf$stc_sub, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_pred, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_obj, options=>’ UNI_ONLY=T ') from stage_tab;
REGULAR_MODELS
(ネットワーク名の下)を右クリックし、「ステージング表からモデルへのバルク・ロード」を選択します。モデル: モデルの名前(
MY_ONTOLOGY
など)。(モデルが存在しない場合は、「モデルの作成」を選択します。ただし、この例では、モデルはすでに存在します)。
ステージング表の所有者: ステージング表のスキーマ(
RDFUSER
など)ステージング表名: ステージング表の名前(
MY_ONTOLOGY_STAGE
など)並列: 並列度(
2
など)提案: 次のオプションを選択します: 「MBV_METHOD=SHADOW」、アプリケーション表索引の再構築、「イベント・トレース表の作成」
「適用」をクリックします。
バルク・ロード操作の後に次の操作を実行します。
-
セマンティク・ネットワーク全体の統計を収集します。
DBAユーザーの「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、「統計の収集... (DBA)」を選択します。
-
モデルのSPARQL問合せをいくつか実行します。
「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、モデルを選択します。
SPARQL問合せエディタを使用して、目的のSPARQL問合せを入力して実行します。
-
オプションで、「一括ロード・トレース」を選択して各ステップに関する情報を取得します。
「RDFセマンティック・グラフ」を展開してから、「一括ロード・トレース」を展開して一括ロード・トレースのリストを表示します。いずれかをクリックすると、ロードの実行時間、個別値とトリプルの数、重複トリプルの数、およびその他の詳細に関する有用な情報が表示されます。
親トピック: SQL DeveloperでのRDFのサポート