SnowflakeでJSONデータをクエリする方法

SnowflakeでJSONデータをクエリする方法

  • オーケストレーション
6分で読めます 更新日 Sep 21, 2020

ポイント: SnowflakeでのJSONデータのクエリは、構造化データの効果的な管理と分析を促進します。このチュートリアルでは、JSON列を持つテーブルの作成、さまざまなJSONタイプの挿入、さまざまな方法を使用したデータのクエリをカバーします。

  • JSON列を持つテーブルを作成し、データを挿入する手順。
  • ネストされた属性へのアクセスやフラット関数の使用を含むJSONデータのクエリ方法。

すでにSnowflakeテーブルにバリアント列を作成する方法を見せました。ここでvariantはJSONを意味します。このチュートリアルでは、それらのJSON列をクエリする方法を示します。

JSON列を持つテーブルを作成する

まずデータベースを作成するか、前回の投稿で作成したinventoryを使用し、次にvariant型の列を持つテーブルを作成します。

    use database inventory;
create table jsonRecord(jsonRecord variant);

SnowflakeにJSONデータを追加する

次に、いくつかのデータを追加します。シンプルなJSON、ネストされたJSON、およびJSON配列(つまり、角括弧[]内のJSONオブジェクト)を追加して、それぞれのタイプをクエリする方法を示します。parse_json()関数に注意してください。

    INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON('{"customer": "Walker"}');
INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON('{"customer": "Stephen"}');
INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON('{"customer": "Aphrodite", "age": 32}');

これらのレコードにはJSON配列ordersが含まれています。

    i
INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON(' {
            "customer": "Aphrodite",
            "age": 32,
            "orders": [{
                                    "product": "socks",
                                    "quantity": 4
                        },
                        {
                                    "product": "shoes",
                                    "quantity": 3
                        }
            ]
 }');
INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON(' {
            "customer": "Nina",
            "age": 52,
            "orders": [{
                                    "product": "socks",
                                    "quantity": 3
                        },
                        {
                                    "product": "shirt",
                                    "quantity": 2
                        }
            ]
 }');

このレコードにはネストされたJSONが含まれており、属性addressの値が別のJSONオブジェクトです。

    INSERT INTO JSONRECORD (jsonrecord) select PARSE_JSON(' {
            "customer": "Maria",
            "age": 22,
     "address" : { "city": "Paphos", "country": "Cyprus"},                                                   
            "orders": [{
                                    "product": "socks",
                                    "quantity": 3
                        },
                        {
                                    "product": "shirt",
                                    "quantity": 2
                        }
            ]
 }');

今、キーselect * from JSONRECORDを押して、すべてのレコードを表示します。これらは大文字と小文字が区別されることに注意してください:

  • 関数
  • 列
  • テーブル名
json1

SnowflakeでJSONデータを選択する方法

データを選択するためのフォーマットには、以下すべてが含まれます:

  • テーブル名:属性
  • テーブル名.属性.JsonKey
  • テーブル名.属性.JsonKey[arrayIndex]
  • テーブル名.属性['JsonKey']
  •  get_path(tableName, attribute)

ここでは、JSONレコードから顧客キーを選択します。JSONでは、項目をキーと値のペアと呼びます。例えば:{"key": "value"}.

    select jsonrecord:customer from JSONRECORD;

このように見えます:

get_path()関数を使用することもできます:

    select get_path(jsonrecord, 'address') from JSONRECORD;

ここでは、where句を追加し、他の選択ステートメントの側と同じコロン(:)とドット(.)表記を使用しています。

    select jsonrecord:address.city from JSONRECORD where jsonrecord:customer = 'Maria';

別のアプローチを使用します。キーを角括弧[]に入れることでネストされたJSONオブジェクトを取得します。

    select jsonrecord['address']['city'] from JSONRECORD where jsonrecord:customer = 'Maria';

存在しない値はNULLとして表示されます。

ここでは、配列から最初の要素を取得します。配列インデックス(0から始まります)を使用しています。

    select jsonrecord['orders'][0] from JSONRECORD where jsonrecord:customer = 'Maria';

ここでは、コロン(:)を使用して同じ列を取得します。

    select jsonrecord:orders[0] from JSONRECORD where jsonrecord:customer = 'Maria';

結果:

    { "product": "socks", "quantity": 3 }

ここでは、配列をフラット化します。このレコードには2つのオーダーJSONレコードがあります。したがって、結果には2行が表示され、それぞれのレコードが他の属性に付随しています。言い換えれば、array_size行に展開され、選択ステートメント内の非配列列で他の列が埋められます。顧客が行ったすべての注文を表示する簡単な方法と考えてください。注文データと顧客データが繰り返され、見やすくなります。:

    select jsonrecord:customer, jsonrecord:orders  from JSONRECORD ,
   lateral flatten(input => jsonrecord:orders) prod ;

BMC、Control-MがSnowflakeをサポート

BMCはSnowflakeテクノロジーアライアンスパートナープログラムのメンバーです。Snowflakeのクラウドデータプラットフォームは、Snowflakeの市場をリードするクラウド専用データウェアハウスとControl-Mを使用して、データ駆動型企業の加速を支援します。

追加リソース

このようなチュートリアルをさらに探すには、これらのリソースを探ってください:

これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。

オーケストレーションの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。