0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【MarkLogic】データを登録してみる(MLCP)

Last updated at Posted at 2019-04-19

※試用版を使っています。

参考URL

Developer Community:Content Pump (mlcp)
UsersGuide :MLCP
Release notes:MarkLogic Content Pump and MarkLogic Connector for Hadoop  (README.md)
Loading Content Into MarkLogic

MLCPとは

MarkLogic Content Pump。OSSのJava Baseのコマンドラインツール。
MarkLogicデータベースとの間でインポート・エクスポート・コピーを「最速で」実行できる(らしい)。
HadoopのMapReduceフレームワークを拡張したもの(らしい)
入力はファイルシステムまたはHDFS。

確認すること

  1. MLCPの機能
  2. 文字コードをUTF-8にしながらロードできるか
  3. フォーマットの変更ができるという噂を聞いたので、どこまでやれるのか
  4. Gitの更新履歴

動作要件

  • XDBCアプリケーションサーバが構成されているMarkLogicサーバ(7.0以降)

    MarkLogic8以降は:8000で事前設定されたXDBC App Serverが付属している
  • Oracle / Sun Java JRE 1.8以降

データフォーマット

取り込む際に、Inputファイルのフォーマットを明示的に指定する。(-input_file_typeオプション)
指定が無い場合は、拡張子を参考して自動判別するようだ。

Importing Content Into MarkLogic Server(Supported Input Format Summary)

1. MLCPでできること

  • バルクロード
  • データベースコンテンツのエクスポートする
  • データベースの移行
  • データベース間で一部のデータをコピーする

MLCPの利点(引用)

  • データを取り込む仕組みがシンプルになる
  • 他のツールや環境といい感じに統合できる
  • 取込ワークフローのパフォーマンスが向上する
    • 大規模(サイズ?数)のファイルをバルクロードできる
    • 大規模(サイズ?数)のXMLやCSV、TSVなどをロードできる
    • HDFSからドキュメントをロードできる
    • データノードに直接コンテンツをロードできる
    • データベース間のアーカイブやレストアができる など。

2. UTF-8ではないファイルを読み込む

以前にMarkLogicサーバ管理画面からデータをロードした際は、Shift-JISのデータを弾かれてしまった。
→ 参考:UTF-8でないことを通知され、失敗

MLCPでも、やはりShift-JISのデータをロードするとエラーになり取り込まれない。

ERROR mapreduce.ContentWriter: XDMP-DOCUTF8SEQ: Invalid UTF-8 escape sequence at /C:/data/SJIS.csv line 1 -- document is not UTF-8 encoded

専用オプションの利用

MLCPに文字コード変換系のオプションを発見。

  • 日本語訳(想定)
    ロード時にMarkLogicが利用する文字コードを指定しろ。デフォルトはUTF-8である(?)
    Inputとなるファイルの文字コードを指定しろ。ということなのだろうか。

  • 取り込み完了
    どうやら正解らしい。MarkLogicへはUTF-8で登録された想定。
    QueryConsoleからも文字化け無しで参照できた。

SJIS.csv
mlcp.bat import -host ${hostname} -port ${port} -username ${user} -password ${passwd} -input_file_path ${file_SJIS} -content_encoding Shift-JIS

改行コードについて

あとで書く。UNIX系が基本になっていそう。

3. ファイルフォーマット変更

  • やりたいこと(できると噂で聞いたので試す)
    • CSV to XML
    • CSV to JSON

以下のオプションを利用して可能。CSVからXMLまたはJSON形式のファイルを生成する。
Creating Documents from Delimited Text Files

どうやら、input_file_typeの付与も必須と思ったほうが安全そう。

-input_file_type delimited_text
-document_type xml or -document_type json

mlcp.bat import -host ${hostname} -port ${port} -username ${user} -password ${passwd} -input_file_path ${file} -input_file_type delimited_text -document_type xml

利用したデータは相変わらずこちら。(平成27年度 自動車交通騒音調査結果)

ロードしたデータ(抜粋).csv
一連番号,測定地点の住所,環境基準類型,路線名,緯度,経度,座標系,車線数,道路種別,測定開始年月日,測定終了年月日,車道端からの距離(m),地上高さ(m),等価騒音レベル(dB)/昼間,等価騒音レベル(dB)/夜間
1,千代田区麹町4丁目5-20,C,国道20号(新宿通り),35.683782,139.736748,JGD2011,8,3,2015-12-17,2015-12-18,6.2,1.2,67,65

XMLに変換された!!

ロードされたデータ(抜粋).xml
<?xml  version="1.0" encoding="UTF-8"?>
<root>
<一連番号>1</一連番号>
<測定地点の住所>千代田区麹町4丁目5-20</測定地点の住所>
<環境基準類型>C</環境基準類型>
<路線名>国道20号(新宿通り)</路線名>
<緯度>35.683782</緯度>
<経度>139.736748</経度>
<座標系>JGD2011</座標系>
<車線数>8</車線数>
<道路種別>3</道路種別>
<測定開始年月日>2015-12-17</測定開始年月日>
<測定終了年月日>2015-12-18</測定終了年月日>
<車道端からの距離_m_>6.2</車道端からの距離_m_>
<地上高さ_m_>1.2</地上高さ_m_>
<等価騒音レベル_dB_/昼間>67</等価騒音レベル_dB_/昼間>
<等価騒音レベル_dB_/夜間>65</等価騒音レベル_dB_/夜間>
</root>

「-document_type json」の結果

{
"一連番号": "1", 
"測定地点の住所": "千代田区麹町4丁目5-20", 
"環境基準類型": "C", 
"路線名": "国道20号(新宿通り)", 
"緯度": "35.683782", 
"経度": "139.736748", 
"座標系": "JGD2011", 
"車線数": "8", 
"道路種別": "3", 
"測定開始年月日": "2015-12-17", 
"測定終了年月日": "2015-12-18", 
"車道端からの距離(m)": "6.2", 
"地上高さ(m)": "1.2", 
"等価騒音レベル(dB)/昼間": "67", 
"等価騒音レベル(dB)/夜間": "65"
}

Gitの更新履歴

Issueの回答率も低くなく、比較的安定していそう。
とりあえず問題なく使えそう。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?