ステップ2。クエリデータ

このセクションでは、 SELECT ステートメントを調べて、 JSON データをクエリします。

  1. device_type を取得します。

    SELECT src:device_type
      FROM raw_source;
    
    Copy

    クエリは次の結果を返します。

    +-----------------+
    | SRC:DEVICE_TYPE |
    |-----------------|
    | "server"        |
    +-----------------+
    
    Copy

    クエリでは、 src:device_type 表記を使用して、取得する列名と JSON 要素名を指定します。この表記は、なじみのある SQL table.column 表記に似ています。Snowflakeでは、親列内にサブ列を指定できます。Snowflakeは、これを JSON データに埋め込まれたスキーマ定義から動的に派生させます。詳細については、 半構造化データのクエリ をご参照ください。

    注釈

    列名では大文字と小文字が区別されませんが、 JSON 要素名では大文字と小文字が区別されます。

  2. 引用符なしで device_type 値を取得します。

    前述のクエリは、引用符で囲まれた JSON データ値を返します。データを特定のデータ型(この例では文字列)にキャストすることで、引用符を削除できます。

    このクエリは、オプションでエイリアスを使用して列に名前を割り当てることもできます。

    SELECT src:device_type::string AS device_type
      FROM raw_source;
    
    Copy

    クエリは次の結果を返します。

    +-------------+
    | DEVICE_TYPE |
    |-------------|
    | server      |
    +-------------+
    
    Copy
  3. 配列イベントオブジェクト内にネストされた繰り返しの f キーを取得します。

    サンプル JSON データには events 配列が含まれています。示されているように、配列内の各イベントオブジェクトには f フィールドがあります。

    {
    "device_type": "server",
    "events": [
      {
        "f": 83,
        ..
      }
      {
        "f": 1000083,
        ..
      }
    ]}
    
    Copy

    これらのネストされたキーを取得するには、 FLATTEN 関数を使用できます。この関数は、イベントを個別の行にフラット化します。

    SELECT
      value:f::number
      FROM
        raw_source
      , LATERAL FLATTEN( INPUT => SRC:events );
    
    Copy

    クエリは次の結果を返します。

    +-----------------+
    | VALUE:F::NUMBER |
    |-----------------|
    |              83 |
    |         1000083 |
    +-----------------+
    
    Copy

    value は、 FLATTEN 関数が返す列の1つです。次のステップでは、 FLATTEN 関数の使用について詳しく説明します。

次: ステップ3。データをフラット化する