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 ドキュメントを使用します。以下に例を示します。

http://acme:9090/denodo-restfulws/.../views/view1?$filter=input_array_field='[{"id":1, "id2": 2, "field1": "a", "field2": true}]'

上記の 2 つの URL は等価ですが、以下の理由から 2 番目のほうが簡潔です。

  1. レジスターでフィールドの名前を指定するので、1 番目の構文よりも条件が判読しやすくなっています。1 番目の構文では、それぞれの値に対応するフィールドがどれであるか把握できません。

  2. フィールドが JSON ドキュメントに存在しない場合、そのフィールドの値が NULL であることを意味します。これにより、大量の NULL 値が存在する場合は、パラメータの値が大幅に短くなるという利点が得られます。

JSON では、レジスター値は中括弧で始まり、中括弧で終わります。以下に例を示します。

http://acme:9090/denodo-restfulws/.../views/view1?$filter='register_value={"f1":"value", "boolean_value": true}'

JSON では、配列値は角括弧で始まり、角括弧で終わります。配列の各レジスターはカンマで区切ります。以下に例を示します。

http://acme:9090/denodo-restfulws/.../views/view1?$filter='array_value=[{"f1":"value", "boolean_value": true}', {"f1":"value2", "boolean_value": false}']

重要

見やすさを考慮して、上記の URL はエスケープしていません。実際には、HTTP クライアントはすべてのパラメータの値をエスケープする必要があります。たとえば、以下の URL を呼び出すとします。

http://acme:9090/denodo-restfulws/.../views/view1?$filter='array_value=[{"f1":"value", "boolean_value": true}', {"f1":"value2", "boolean_value": false}']

これを、以下のようにエスケープする必要があります。

http://acme:9090/denodo-restfulws/.../views/view1?$filter=%27array_value=[{%22f1%22:%22value%22,%20%22boolean_value%22:%20true}%27,%20{%22f1%22:%22value2%22,%20%22boolean_value%22:%20false}%27]

JSON 構文の制限

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

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

Add feedback