USER MANUALS

入力に複合値を使用したリクエスト

Denodo Web サービスには、複合フィールドによる条件を追加する方法が 2 つあります。

  1. 以下に示すような VQL の通常の構文を使用します。

SELECT ...
FROM V
WHERE input_array_field = { ROW( 1, NULL, 2, NULL, 'a', true, NULL, NULL, NULL
                            , NULL, NULL, NULL, NULL ) }

以下に示す URL では、この構文を使用して、配列フィールド input_array_field による条件を指定しています。

http://acme:9090/denodo-restfulws/.../views/V?input_array_field={ ROW( 1, NULL, 2, NULL, 'a', true, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) }

{ ROW( 1, NULL, 2, NULL, 'a', true, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) } はレジスターの配列です。 ROW(...) を囲む中括弧は、この値が配列であることを示します。中括弧がない場合はレジスターです。

この構文については、『VQL ガイド』の「 複合値の管理 」を参照してください。

  1. 複合値で条件を表すもう 1 つの構文では JSON ドキュメントを使用します。以下のようなビューがあるとします。

CREATE OR REPLACE VIEW v1 AS
    SELECT 94301 AS zipcode,
           'ULT' AS ref
    UNION
    SELECT 94303 AS zipcode,
           'JPZ' AS parcelle;

CREATE OR REPLACE VIEW view_with_an_array AS
    SELECT nest(zipcode, ref) AS location
    FROM v1;

次のクエリには、このビューが返す配列に一致する条件があります。

SELECT *
FROM view_with_an_array
WHERE location = { ROW (94301, 'ULT'), ROW (94303, 'JPZ') };

REST Web サービスで同じフィルタを作成するには、以下の値を指定してパラメータ $filter を追加します。

location = '[{"zipcode":94301, "ref": "ULT"}, {"zipcode":94303, "ref": "JPZ"}]'.

このパラメータを追加すると、URL は以下のようになります。

http://acme:9090/denodo-restfulws/admin/views/view_with_an_array?$filter=location='[{"zipcode":94301, "ref": "ULT"}, {"zipcode":94303, "ref": "JPZ"}]'

重要

見やすさを考慮して、上記の URL はエスケープしていません。実際には、HTTP クライアントはすべてのパラメータの値をエスケープする必要があります。URL を正しくエンコードすることが重要で、これは以前の URL をエンコードしたものです。

http://acme:9090/denodo-restfulws/admin/views/view_with_an_array?$filter=location%20%3D%20%27%5B%7B%22zipcode%22%3A94301%2C%20%22ref%22%3A%20%22ULT%22%7D%2C%20%7B%22zipcode%22%3A94303%2C%20%22ref%22%3A%20%22JPZ%22%7D%5D%27

JSON 構文の制限

  • JSON ドキュメントは、フィールドの値としてではなく、 $filter パラメータで指定する必要があります。つまり、 ?field_name='<json document>' は機能しません。

  • JSON ドキュメントは必ず一重引用符で囲み、JSON ドキュメント内部で使用している一重引用符はエスケープします。一重引用符をエスケープするには、その直前に一重引用符を 1 つ付加します。

Add feedback