制限事項¶
ここでは、OData サービスの制限事項について説明します。
読み取り専用アクセス
このサービスを介した Denodo データベースへのアクセスは読み取り専用です。
$filter システムクエリオプションで使用できない関数
このサービスは、 has 演算子をサポートしていません。
このサービスは、以下の関数をサポートしていません。
fractionalseconds、time、totaloffsetminutes、mindatetime、およびmaxdatetimeisofおよびcastgeo.distance、geo.length、およびgeo.intersects
上記の関数を使用したリクエストでは、エラーコード 501 Not Implemented が返されます。
$filter システムクエリオプションで使用できない演算子
$filter システムクエリオプションで使用できないリテラル
このサービスは、リソースパスで特定されているコレクションの現在のインスタンスを参照する式でリテラル $it をサポートしていません。
このサービスは、そのサービスのリソースを参照する式でリテラル $root をサポートしていません。
$select システムクエリオプションのナビゲーションプロパティ
このサービスでは、選択句としてナビゲーションプロパティを使用できません。
使用できない $search システムクエリオプション
$search クエリパラメータは使用できません。
使用できない $levels 展開オプション
このサービスは、再帰的展開を要求できるようにする $levels 展開オプションをサポートしていません。
使用できない交差結合クエリ
このサービスは、エンティティのデカルト積を表すリソース ~/crossjoin をサポートしていません。
$entity リソースを介した参照の解決
このサービスは、 $id クエリオプションを使用してエンティティ参照を解決できるようにする ~/$entity リソースをサポートしていません。
名前に空白がある基本ビュー
Denodo OData Service では、名前に空白があるエンティティにアクセスできません。Virtual DataPort では、基本ビュー名に空白を入れることができますが、OData 4 仕様ではエンティティ名に空白を入れることはできません。
URL の空白文字
このサービスでは、関数のパラメータの間に空白文字を使用できず、クエリオプションの指定に使用する等号 (=) の前後にも空白文字を使用できません。
依存側エンティティの冗長なキー
このサービスでは、リレーションシップの親によって決まる重要なプロパティが存在する場合に、冗長なキーを省略できません。レベルごとにすべての重要なプロパティを追加する必要があります。
$expand システムクエリオプションによる並べ替え
このサービスでは、 $expand システムクエリオプションの内側に $orderby クエリオプションを使用できません。
複合プロパティによる並べ替え
このサービスは、レジスターのフィールドを使用する Order By 句をサポートしていません。したがって、複合プロパティでは $orderby クエリオプションを使用できません。
複合プロパティによる移動
アソシエーションのエンドポイントがレジスターのフィールドである場合、Virtual DataPort では、そのエンドポイントからアソシエーションをたどることはできません。
展開したエンティティの参照
$expand クエリオプションを使用して関連データを要求し、結果を JSON 表現で返すように選択した場合、このサービスでは「多対 1」のリレーションシップにある単一エンティティの参照をサポートしません。
この制限事項の例:
/denodo-odata.svc/movies/city?$expand=country/$ref
JSON がデフォルト形式なので、このリクエストは失敗します。
Admin ユーザーと Kerberos 認証
このサービスは、Kerberos 認証を使用している場合に、 admin ユーザーへのユーザーアクセスを無効にしません。
関数のパラメータとしてのナビゲーションプロパティの使用
このサービスでは、エンティティのナビゲーションプロパティが子エンティティに属する場合、このプロパティをクエリ関数のパラメータとして使用することができます。ただし、ナビゲーションフィールドが 2 つ以上のロールをたどる場合、クエリは機能しません。
たとえば、次のようなクエリは機能します。
/denodo-odata.svc/test/ADDRESS?$filter=toupper(city/city_name) eq 'CARACAS'
しかし、フィールド country_name が 2 つのロールをたどるため、次のようなクエリは失敗します。
/denodo-odata.svc/test/address?$filter=toupper(city/country/country_name) eq 'SPAIN'
ラムダ演算子のサポートに関する制限
このサービスでは、 any ラムダ演算子のみがサポートされています。これは、サポートすべきラムダ演算子を規定していない『Intermediate Conformance Level for the OData 4.0 Specification』に準拠しています。
ラムダフィルタ内のナビゲーションフィールドおよび通常のフィールドのフィルタリング
同じ any ラムダフィルタでナビゲーションフィールドと通常の (親) フィールドを使用することはできません。たとえば、次のリクエストは失敗します。
/denodo-odata.svc/test/country?$filter=city/any(f:f/city_id eq 1 or country eq 'Spain')
関連するエンティティのフィールド上の集計
$apply システムクエリオプションの groupby と aggregate の変換は、クエリの対象となるエンティティのフィールドに対してのみ機能します。関連するエンティティのフィールドの集計はサポートされていません。
たとえば、「Customer」というビューがあり、「Address」というビューと関連付けられている場合、「Customer」にクエリを実行するときに、「address/city」や「address/country」などのフィールド (「Address」エンティティの「city」および「country」フィールド。顧客の「address」プロパティを使用して「Customer」からナビゲート可能) に対して groupby 変換や aggregate 変換を適用することはできません。
名前にドット文字 (.) があるエレメントへのクエリの実行
Denodo では、ビュー名、列名、データベース名にドット文字 (.) を入れることができますが、OData 仕様ではこの文字を使用できません。この場合、 . は 4 つのアンダースコア文字 (____) で置き換えられます。たとえば、 customer.information というビューにクエリを実行するには、以下にリクエストを送ります。
/denodo-odata.svc/test/customer____information
結果は以下のようになります。
{
"@odata.context": "http://localhost:9090/denodo-odata4-service/denodo-odata.svc/period/$metadata#customer____information/$entity",
"customer____id": 1,
"store_id": 1,
"first____name": "MARY",
"last_name": "SMITH",
"email": "MARY.SMITH@sakilacustomer.org",
"address_id": 5,
"active": true,
"create_date": "2006-02-14T21:04:36Z",
"last_update": "2006-02-15T03:57:20Z"
}
この状況は、Virtual DataPort のどのエレメントにも当てはまります。
