Oracleでelasticsearch-river-jdbc

Oracleでelasticsearch-river-jdbc

elasticsearchとOracleの連携

  1. elasticsearchセットアップ
  2. ojdbc6.jarを以下のURLよりダウンロード
  3. ojdbc6.jarをelasticsearch配下に移動
    • mv ./ojdbc6.jar $ES_HOME/plugins/jdbc/
    • $ES_HOMEはelasticsearchをインストールしたディレクトリです。
  4. elasticsearchを起動又は再起動
    • /etc/init.d/elasticsearch restart 又は $ES_HOME/bin/elasticsearch restart

elasticsearch-river-jdbcを使って、Oracle側と同期する際にハマった点

  • _idの指定
    • _idを指定しないと、elasticsearchとOracleに入っているレコードの関連付けが出来ないため、Oracle側の更新をelasticsearchに反映できない
    • ※削除されたレコードの同期には非対応のため、DEL_FLGカラムを追加して論理削除とするなど工夫が必要

elasticsearchクエリSAMPLE

curl -XPUT 'localhost:9200/_river/oracle_test/_meta' -d '{
    "type" : "jdbc",
     "schedule" : "0 0-59 0-23 ? * *",
    "jdbc" : {
        "url" : "jdbc:oracle:thin:@//localhost/user",
        "user" : "oracle",
        "password" : "oracle",
        "sql" : "SELECT user_id AS \"_id\", user_name, user_level FROM user"
    }
}'

※_idを""で囲まないと、Oracle側でエラーが出る。_idに指定するカラムはNUMBER型でなくても可。

JIRAでHSQLBに接続できない

消費税対応で周りがはまっている中、1人だけJIRAにはまっていました。
空気読めません。

JIRAをMySQLに繋いで使おうと思ったところ、実は事前にデータをエクスポートする必要があると分かり、慌ててHSQLBに戻すものの、戻らない!!!(画面に500エラー)

原因としては、/var/atlassian/application-data/jira/dbconfig.xmlの、がNULLになっていました。
なので、以下のように戻してあげ、JIRAを再起動する事で復帰しました。

<url>jdbc:hsqldb:/var/atlassian/application-data/jira/database/jiradb</url>

上のパスは標準インストールした際のJIRA_HOME(インストールディレクトリではない)です。


Connecting JIRA to MySQL
https://confluence.atlassian.com/display/JIRA/Connecting+JIRA+to+MySQL

データベースの切り替え
https://confluence.atlassian.co.jp/pages/viewpage.action?pageId=54919335

mongodbからcsvでエクスポートする

format

$ mongoexport -h HOSTNAME --port PORT --db DBNAME --csv --collection COLLECTION_NAME -o OUT_FILE_NAME -f FIELD_NAME,FIELD_NAME,FIELD_NAME

exsample

$ mongoexport -h localhost --port 27017 --db testblog --csv --collection testblog_log -o export_csv.csv -f id,date_time,host,time
  • fオプションに出力したいKeyを指定する。

mongo(ターミナルから)でJavaScriptを実行する

format

$ mongo DB_NAME --quiet --eval 'JavaScript Code'

example

$ mongo testblog --quiet --eval 'db.testblog_log.find().forEach(printjson);'
$ {
        "_id" : ObjectId("xxxxxxxxxxxxxxxxx"),
        "date_time" : "2014/01/21 12:10:28",
        "host" : "192.168.11.1",
        "time" : ISODate("2014-01-21T03:10:28Z")
}

注意点

JavaScriptのコードは「'」(シングルクォーテーション)で囲む必要がある。
稀に、「"」(ダブルクオーテーション)でも通るコードもある。。。

参考

mongo — MongoDB Manual 2.2.7
http://docs.mongodb.org/v2.2/reference/mongo/

mongodbで期間(日時)を指定して検索したい

mongodbで期間(日時)を指定して検索したい

フォーマット:yyyy/MM/dd HH:mm:ss
> use database_name
# 境界値("2014/01/21 14:00:00")を含むクエリ
> db.collection_name.find({"DATE_TIME":{"$gte":"2014/01/21 14:00:00","$lte":"2014/01/21 15:00:00"}})
> { "_id" : ObjectId("xxxxxxxxxx"), "DATE_TIME" : "2014/01/21 14:00:00", "HOGEHOGE" : "HAGE" , "time" : ISODate("2014-01-21T05:59:11Z") }
# 境界値("2014/01/21 14:00:00")を含まないクエリ
> db.collection_name.find({"DATE_TIME":{"$gt":"2014/01/21 14:00:00","$lt":"2014/01/21 15:00:00"}})
> # 検索結果なし
フォーマット:ISODate("yyyy-MM-ddTHH:mm:ssZ")
> use database_name
# 境界値("2014/01/21 14:00:00")を含むクエリ
> db.collection_name.find({"time":{"$gte":"2014-01-21T14:00:00Z","$lte":"2014-01-21T15:00:00Z"}})
> { "_id" : ObjectId("xxxxxxxxxx"), "time" : "2014/01/21 23:00:00", "HOGEHOGE" : "HAGE" , "time" : ISODate("2014-01-21T14:00:00Z") }
# 境界値("2014-01-21T14:00:00Z")を含まないクエリ
> db.collection_name.find({"time":{"$gt":"2014-01-21T14:00:00Z","$lt":"2014-01-21T14:00:00Z"}})
> # 検索結果なし
境界値

境界値を含んだ検索結果がほしい場合は、"$gte"と"$let"を使用し、境界値を含まない検索結果がほしい場合は、"$gt"と"$et"を使用する。