このトピックでは、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 値を削除します。