はじめに

VerticaにはFlex Tableという、半構造化データをそのままロードできる機能がありますが、このFlex Table機能では、ネストされたデータを持つJSONファイルもそのままロードできます。

Flex Tableの基本については、以下の記事をご参照ください。
 JSONデータをVerticaのテーブルにロードする方法(Flex Table 基本編)
   http://vertica-tech.ashisuto.co.jp/flex_table_data_road/

本記事では、以下の内容についてご紹介します。
・ネストされたデータを持つJSONファイルをFlex Tableへロードする方法
・ロードしたデータをSQLで検索する方法

ネストされたデータを持つJSONファイルをFlex Tableへロードする方法

ネストされたデータを持つJSONファイルをFlex Tableへロードする場合は、fjsonparserに「flatten_maps=false」オプションを指定することでロードすることができます。

実行例

JSONファイルの確認

「restaurant」という項目の中に「_name_」、「cuisine」、「location」、「menu」がネストして格納されています。
「location」や「menu」については、更にネストして、データが格納されています。


JSONファイルをFlex Tableへロード

fjsonparserに「flatten_maps=false」オプションを指定し、JSONファイルをロードします。



ロードしたデータをSQLで検索する方法

項目名の確認

SQLでデータを検索するには項目名を指定する必要がありますが、Flex Tableは通常テーブルと同じ様にテーブル定義を確認することはできません。
MAPTOSTRING関数を利用することで、Flex Tableに格納されているデータを読み取り可能なLONG VARCHAR形式で確認することができます。これを利用し、項目名を確認します。


ネストされたデータをSQLで検索する

ネストされたデータをSQLで検索する方法は2つあります。
 1.列名指定のはじめに、「__raw__」を記載し、続けて括弧内に項目名を指定する
 2.最上位の項目を指定し、続けて括弧内にネストされた項目名を指定する

1.列名指定のはじめに、「__raw__」を記載し、続けて括弧内に項目名を指定する


2.最上位の項目を指定し、続けて括弧内にネストされた項目名を指定する


参考情報

Querying Nested Data
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/FlexTables/QueryNestedData.htm

検証バージョンについて

この記事の内容はVertica 9.2で確認しています。

更新履歴

2019/10/03 本記事を公開