すべてのプロダクト
Search
ドキュメントセンター

Hologres:JSON関数

最終更新日:Jan 11, 2025

このトピックでは、Hologres に関連する JSON 関数について説明します。

GET_JSON_OBJECT

  • 構文

    GET_JSON_OBJECT は、JSON 文字列から JSON オブジェクトを抽出します。GET_JSON_OBJECT 関数を使用する前に、拡張機能を作成する必要があります。詳細については、「拡張機能」をご参照ください。

    -- 拡張機能を作成します。
    CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA <schema_name>;
    SELECT get_json_object ( json_string, path );
  • パラメーター

    パラメーター

    説明

    json_string

    JSON オブジェクト。値は TEXT 型です。値は有効な JSON 文字列である必要があります。

    path

    抽出するオブジェクトを指定する JSON パス。ドル記号 ($) は JSON 変数を表します。ドット演算子 (.) または角括弧 ([]) を使用して、JSON オブジェクトまたは配列にアクセスします。

    JSON 文字列が無効な場合、NULL が返されます。

  • サンプルデータを準備します。

    -- 拡張機能を作成します。
    CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA pg_catalog;
    -- サンプルデータを準備します。
    BEGIN;
    CREATE TABLE hive_json_example (
        col_json text
    );
    COMMIT;
    INSERT INTO hive_json_example VALUES 
    ('{"store":{"fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],"bicycle":{"price":19.95,"color":"red"}},"email":"amy@only_for_json_udf_test.net","owner":"amy"}');
    • 例 1:col_json 列から JSON オブジェクトの $.owner パスのデータをクエリします。

      -- 戻り値は amy です。
      SELECT
          get_json_object (col_json, '$.owner')
      FROM
          hive_json_example;
    • 例 2:col_json 列から JSON オブジェクトの $.store.bicycle.price パスのデータをクエリします。

      -- 戻り値は 19.95 です。
      SELECT
          get_json_object (col_json, '$.store.bicycle.price')
      FROM
          hive_json_example;
    • 例 3:col_json 列から JSON オブジェクトの $.store.fruit パスの fruit 配列のインデックス 0 の最初の要素をクエリします。

      -- 戻り値は {"weight":8, "type":"apple"} です。
      SELECT
          get_json_object (col_json, '$.store.fruit[0]')
      FROM
          hive_json_example;
    • 例 4:JSON オブジェクト以外の変数のデータをクエリします。

      -- 戻り値は NULL です。
      SELECT
          get_json_object (col_json, '$.no_key')
      FROM
          hive_json_example;

ROW_TO_JSON

ROW_TO_JSON 関数は、複数の文字列または列を JSON 文字列に連結し、JSON 文字列を返すために使用されます。最大 50 列を連結できます。

説明

Hologres V1.3 以降のみが row_to_json 関数をサポートしています。この関数を使用する場合は、Hologres DingTalk グループに参加して Hologres インスタンスのアップグレードを申請するか、インスタンスをアップグレードできます。Hologres DingTalk グループへの参加方法の詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。

  • 構文

    SELECT ROW_TO_JSON(record)
  • パラメーター

    record:行タイプの パラメーター。テーブル名、ビュー名、またはクエリ結果を指定できます。

  • -- テストデータを準備します。
    CREATE TABLE interests_test (
        name text,
        intrests text
    );
    
    INSERT INTO interests_test 
      VALUES 
      ('Ava', 'singing, dancing'), ('Bob', 'playing football, running, painting'), ('Jack', 'arranging flowers, writing calligraphy, playing the piano, sleeping');
    
    SELECT
        ROW_TO_JSON(t)
    FROM (
        SELECT
            name,
            intrests
        FROM
            interests_test) AS t;

    Hologres V1.3.52 以降では、JSON オブジェクトのキーを列名に基づいて生成できます。

    • Hologres V1.3.52 より前のバージョンでは、次の結果が返されます。

      row_to_json                
      ------------------------------
      {"f1":"Ava","f2":"singing, dancing"}
      {"f1":"Bob","f2":"playing football, running, painting"}
      {"f1":"Jack","f2":"arranging flowers, writing calligraphy, playing the piano, sleeping"}
    • Hologres V1.3.52 以降では、次の結果が返されます。

      row_to_json                
      ------------------------------
      "{"name": "Jack", "interests": "arranging flowers, writing calligraphy, playing the piano, sleeping"}"
      "{"name": "Ava", "interests": "singing, dancing"}"
      "{"name": "Bob", "interests": "playing football, running, painting"}"

一般的なエラー

  • ERROR: function get_json_object (text, unknown) does not exist

    • 考えられる原因 1

      スキーマレベルの権限モデル (SLPM) では、RAM ユーザーに拡張機能が作成されたスキーマをクエリする権限がありません。たとえば、RAM ユーザーには、拡張機能が作成された public スキーマをクエリする権限がありません。

    • 解決策 1

      • RAM ユーザーにスキーマをクエリする権限を付与します。

      • 次のステートメントを実行して、pg_catalog スキーマに拡張機能を作成します。こうすることで、すべてのユーザーがこのスキーマをクエリする権限を持つようになります。

        DROP EXTENSION hive_compatible;
        CREATE EXTENSION hive_compatible schema pg_catalog;
    • 考えられる原因 2

      GET_JSON_OBJECT の最初のパラメーターが TEXT 型ではありません。

    • 解決策 2

      最初のパラメーターのデータ型を TEXT に変換します。

  • ERROR: get_json_object for fe, should not be evaluated

    • 考えられる原因 1

      GET_JSON_OBJECT の最初のパラメーターが定数です。

    • 解決策 1

      最初のパラメーターをテーブル列の名前に設定します。

    • 考えられる原因 2

      GET_JSON_OBJECT の最初のパラメーターに NULL 値が含まれています。

    • 解決策 2

      最初のパラメーターから NULL 値を削除します。