LoginSignup
1
6

More than 5 years have passed since last update.

Cloudant NoSQL DBへのデータインポート

Last updated at Posted at 2017-06-25

Cloudant NoSQL DBへのデータの格納は、Cloudantダッシュボードからでも出来るが、1件1件入力しないとならないので手間がかかる。
csvなどからインポートすることは出来ないだろうか?
Cloudantダッシュボードからインポートをする方法がなかったのでネットで調べてみたら、それらしき投稿を見つけた。
少しわかりにくかったので、もう少し詳細に書いておこうと思う。


インポートの手順は、こんな感じ。

  1. インポートデータを準備。

  2. CloudFoundryサービスのCloudantの場合
    2.1. curlで、APIにデータを送信。

  3. IAMサービスのCloudantの場合
    3.1. curlで、APIにトークン取得コマンドの送信。
    3.2. curlで、APIにデータを送信。

JSONのお作法とか、コマンドのお作法とかいろいろあるのでその辺を詳しく解説する。

下準備

  • curlを使うので、Windowsマシンならcurlのサイトでcurlをダウンロードしてくる。
  • CloudantDBの資格情報の「url」と、IAMサービスのCloudantの場合「apikey」を調べる。 ここが役立つ

インポートデータの準備

インポートするデータはJSONで用意する。以下の例の初めの3行、後ろの2行は必ず必要となる。
3行目の "[" から後ろの2行目の "]" の間に書かれたオブジェクトが1オブジェクト1ドキュメントとしてDBに格納されていく。以下の例だと2ドキュメントがDBに格納される。
データに全角文字を含めることは可能だが、文字コードは「UTF-8」とする必要がある。

hoge.json
{
 "type": "docs",
 "docs": [
  { "item1": "hogehoge",  "item2": "あいうえお"},
  { "item1": "hoge1234",  "item2": "かきくけこ"}
 ]
}

CloudFoundryサービスのCloudantの場合

データを送信

作ったデータをAPIに送信する。
curlは作ったデータのファイルがあるディレクトリで実行する。

書式
curl -d @<ファイル名> <CloudantDBサービスの資格情報のurl>/<DB名>/_bulk_docs -H "Content-Type:application/json"


curl -d @data_utf8.json https://userid1234:password5678@hoge-bluemix.cloudant.com/hoge_db/_bulk_docs -H "Content-Type:application/json"

IAMサービスのCloudantの場合

IAMサービスの場合、トークンを取得して、そのトークンを使ってデータを送信する。

トークン取得コマンドの送信

トークン取得のコマンドをAPI送信する。

書式
実際には改行は入れず、一行にする。

curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded"
 --header "Accept: application/json"
 --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey"
 --data-urlencode "apikey=<資格情報のapikeyの文字列(40文字ほどある)>"
 "https://iam.bluemix.net/identity/token"

curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded"
 --header "Accept: application/json"
 --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey"
 --data-urlencode "apikey=WRa....aWRw..9i"
 "https://iam.bluemix.net/identity/token"

データを送信

作ったデータをAPIに送信する。
curlは作ったデータのファイルがあるディレクトリで実行する。

書式
実際には改行は入れず、一行にする。

curl --header "Authorization: Bearer <取得したtoken(1100文字ほどある)>"
 --header "Accept: application/json"
 -d @<ファイル名>
 <CloudantDBサービスの資格情報のurl>/<DB名>/_bulk_docs
 -H "Content-Type:application/json"

curl --header "Authorization: Bearer WQiOiIy...eyJraWQiOiIyMDE3MT"
 --header "Accept: application/json"
 -d @data_utf8.json
 https://userid1234:password5678@hoge-bluemix.cloudant.com/hoge_db/_bulk_docs
 -H "Content-Type:application/json"

おまけ

あくまでもcsvにこだわる人は、以下のサイトでcsvからJSONに変換できるので参考までに。
作成したJSONはそのままでは使えない。上記の例の初めの3行と最後の2行を付け加えることを忘れずに。

あいぺんてっくさんのサイト

参考

1
6
1

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
1
6