1 前提事項
JSON を保管する IBM Cloud Object Storage は既にデータソースとして登録済みであること。
参考:Watson QueryでIBM Object Storage上のCSVファイルを仮想化する 「2-1 データソースの追加」を参照
2 JSONファイルのフォーマット
JSONファイルを扱う上での注意事項として、
- 拡張子は .json であること
- 文字エンコードが UTF-8 であること
この他に、JSON Lines 形式である必要があります。
以下に、サンプルのJSONを添付します。
{ "name" : "Nobuhiko Watanabe", "product_id" : "12345", "price" : 23.45, "shipTo" : "1-1, Mihama-ku Nakase, Chiba-shi"}
{ "name" : "Nobuo Takano", "product_id" : "12346", "price" : 23.45, "shipTo" : "19-21, Nihonbashi Hakozaki-cho, Chuo-ku"}
3 JSONファイルのアップロード
作成してサンプルファイルを 「1 前提事項」で設定したS3 のバケットにアップロードします。
ICOSへのファイルのアップロードは、ブラウザで IBM Cloud にログイン後、該当のCloudObjectStorageインスタンスに入り、JSON用のバケットを作成して上で、アップロードしてください。
参考:IBM Cloud Object Storage(ICOS)にCLI(ibmcloudコマンド)を用いてファイルアップロードする
4 IBM Object Storage上のJSON ファイルを仮想化
いよいよ、JSONファイルを仮想化します。
手順は、Watson QueryでIBM Object Storage上のCSVファイルを仮想化するの「2-2. 仮想化」と同じです。異なるのは、対象ファイルがCSVでは無くJSONになることです。
4-1 JSONファイルの選択とプレビュー
本稿では、Watson QueryでIBM Object Storage上のCSVファイルを仮想化する「3. フォルダ名をクリック」部分との差分を添付します。
先程作成したJSONファイルは、JSONTESTフォルダに格納されています。
このフォルダをクリックするとフォルダ内の最初のファイルがプレビューされます。
対象となるファイルは、「WQSAMPLEJSON.json」ファイルで、データが無事読み込まれていることがわかります。
注:JSONファイルの形式に問題があると、プレビューの時点でエラーになります。
以下の内容のファイルをプレビューした場合には、以下のエラーメッセージが表示されます。
[ "name" : "Nobuhiko Watanabe", "product_id" : "12345", "price" : 23.45, "shipTo" : "1-1, Mihama-ku Nakase, Chiba-shi"]
[ "name" : "Nobuo Takano", "product_id" : "12346", "price" : 23.45, "shipTo" : "19-21, Nihonbashi Hakozaki-cho, Chuo-ku"]
上記のファイルは、「 { } 」 となっているべきところが、「 [ ] 」となっていたため、JSONとして処理出来なかったことがわかります。
4-2 JSONファイルの仮想化
プレビューが成功したら、仮想化を行います。
「列ヘッダーに最初の行を使用する」にチェックを入れて、「カート追加」ボタンをクリックします。
カートへの追加が成功したので、「カートの表示」ボタンをクリックします。
4-3 カートの確認と表の仮想化
カートの追加された仮想化対象の一覧が表示されます。
ここでは、「プロジェクトに割り当て」する(するならプロジェクトの指定)か否かの確認、「カタログに公開」するか否かの確認、最後に仮想化する際のテーブル名やスキーマの指定を行います。
記載内容に問題がなければ、「仮想化」ボタンをクリックします。
クリック後、以下のメッセージが表示されます(本稿記載時は英語となっていますが、ご利用の際には日本語になっているかもしれません)。
「Got to virtualized data」をクリックして「仮想化データ」に移動します。
「仮想化データ」移動後、しばらくすると、「Virtualization Status」が 「Success」 になれば成功です。
(おまけ)ネストしたJSONファイルの取り込みについて
JSONファイルだと、ネストした記載方法が使われますが、Watson Query で処理した場合にどうなるかを確認してみました。
サンプルファイルは以下のとおりです。
{ "name" : "Nobuhiko Watanabe", "order":["books", "CDs"]}
{ "name" : "Nobuo Takano", "order":["books", "Games"]}
order のところがネストしているのがわかります。
仮想化画面のプレビューではこのように表示されます。
order が列となり、["books", "CDs"]として値が格納されます。
さらに、カートに入れて仮想化処理を行います。
「仮想化」ボタンをクリックします。
「仮想化データ」に移動すると、「Success」と表示されます。
「"ARRAY" data type is not supported....」 となるので、配列とみなされてエラーになります。
ネストしたJSONファイルの読み込みは、出来ないと考えた方が良さそうです。