※試用版を使っています。
参考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。
確認すること
- MLCPの機能
- 文字コードをUTF-8にしながらロードできるか
- フォーマットの変更ができるという噂を聞いたので、どこまでやれるのか
- 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からも文字化け無しで参照できた。
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年度 自動車交通騒音調査結果)
一連番号,測定地点の住所,環境基準類型,路線名,緯度,経度,座標系,車線数,道路種別,測定開始年月日,測定終了年月日,車道端からの距離(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 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の回答率も低くなく、比較的安定していそう。
とりあえず問題なく使えそう。
以上