C.4 SQL Developerを使用したRDFデータのバルク・ロード

RDFのバルク・ロードの操作は、SQL Developerから開始できます。

最初の準備の後で必要になる主なステップは次の2つです: (1)ファイル・システムからステージング表にデータをロードし、(2)ステージング表からセマンティク・モデルにデータをロードします。

実際のバルク・ロードを準備するには、次の手順を実行します。

  1. 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ファイルを抽出(解凍)する必要があります。

  2. ロードを実行する通常の非DBAユーザーを作成します。

    たとえば、DBAナビゲータ(「接続」ナビゲータではない)を使用して、システム接続を展開し、「セキュリティ」を展開して、「ユーザー」を右クリックし、「新規作成」を選択します。

    CONNECT、RESOURCEおよびUNLIMITED TABLESPACE権限があるユーザー(RDFUSERなど)を作成します。

  3. この通常の非DBAユーザー用の接続を追加します(RDFUSERという接続など)。

    デフォルト表領域: USERS

    一時表領域: TEMPTBS

  4. システム・ユーザーとして、自分のRDFデータ・ディレクトリを指す、データベース内のディレクトリを作成します。

    「接続」ナビゲータ(DBAナビゲータではない)を使用して、システム接続を展開し、「ディレクトリ」を右クリックして、「ディレクトリの作成」を選択します。

    ディレクトリ名: 目的のディレクトリ名。たとえば: RDFDIR

    データベース・サーバー・ディレクトリ: そのディレクトリ用の目的の場所。たとえば: /home/oracle/RDF/MyData

    「適用」をクリックします。

  5. そのディレクトリに対する権限を通常の非DBAユーザー(RDFUSERなど)に付与します。たとえば、次のようにシステム接続のSQLワークシートを使用します。

    SQL> grant read, write on directory RDFDIR to RDFUSER;

    ヒント: 圧縮されていないデータを格納する必要がないように、名前付きパイプを使用できます。たとえば、次のようにします。

    $ mkfifo named_pipe.nt
    $ bzcat myRdfFile.nt.bz2 > named_pipe.nt
  6. 通常の非DBAユーザー(RDFUSERなど)の接続を展開し、「RDFセマンティック・グラフ」をクリックします。

  7. RDFデータを保持するモデルを作成します。

    「モデル」「新規モデル」の順にクリックします。

    モデル名: モデル名を入力します(MY_ONTOLOGYなど)

    アプリケーション表: * Create new <Model_Name>_TPL table * (つまり、TRIPLEという名前のトリプル列があるアプリケーション表が自動的に作成されます)。

    モデル表領域: RDFデータを保持する表領域(RDFTBSなど)

    「適用」をクリックします。

    モデルを表示するには、オブジェクト階層で「モデル」を展開し、モデル名をクリックしてそのモデルのSPARQLエディタを起動します。

    問合せを実行して、モデルが空であることを確認できます。

「モデル」メニューを使用して、「モデル」メニューからバルク・ロードを実行します。バルク・ロードには次の2つのフェーズがあります。

  • ファイル・システムからデータベース内の単純なステージング表にデータをロードします。この際には、外部表を使用してファイル・システムから読み取ります。

  • ステージング表からセマンティク・ネットワークにデータをロードします。ステージング表からモデルにロードします(MY_ONTOLOGYなど)。

これら2つのフェーズを実行するには:

  1. ステージング表にデータをロードします。

    REGULAR_MODELS (ネットワーク名の下)を右クリックして、「外部表からステージング表へのRDFデータのロード」を選択します。

    「ソース外部表」の場合、ソース表: 目的の表名(MY_ONTOLOGY_EXTなど)。

    ログ・ファイル: 目的のファイル名(my_ontology.logなど)

    不良ファイル: 目的のファイル名(my_ontology.badなど)

    ソース表の所有者: RDFデータを含む表のスキーマ(RDFUSERなど)

    「入力ファイル」の場合、入力ファイル: 入力ファイル(named_pipe.ntなど)。

    「ステージング表」の場合、ステージング表: ステージング表の名前(MY_ONTOLOGY_STAGEなど)。

    表が存在しない場合は、「ステージング表の作成」を選択します。

    入力形式: 目的の形式(N-QUADなど)

    ステージング表の所有者: ステージング表のスキーマ(RDFUSERなど)

  2. ステージング表からモデルにロードします。

    ノート:

    ステージング表内の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」アプリケーション表索引の再構築「イベント・トレース表の作成」

    「適用」をクリックします。

バルク・ロード操作の後に次の操作を実行します。

  1. セマンティク・ネットワーク全体の統計を収集します。

    DBAユーザーの「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、「統計の収集... (DBA)」を選択します。

  2. モデルのSPARQL問合せをいくつか実行します。

    「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、モデルを選択します。

    SPARQL問合せエディタを使用して、目的のSPARQL問合せを入力して実行します。

  3. オプションで、「一括ロード・トレース」を選択して各ステップに関する情報を取得します。

    「RDFセマンティック・グラフ」を展開してから、「一括ロード・トレース」を展開して一括ロード・トレースのリストを表示します。いずれかをクリックすると、ロードの実行時間、個別値とトリプルの数、重複トリプルの数、およびその他の詳細に関する有用な情報が表示されます。