2017-09-21 8 views
2

ドリルのSELECT ... WHEREフィールドIN(値)を実行する必要があるサンプルに対して、次のドキュメント構造を使用します。Apacheドリルクエリmongo配列IN()演算子を使用するフィールド型

db.getCollection('xxx').find({'USUARIO.PUBLICOALVO': {$in: [ 84, 85, 90, 94, 500 ]}}) 

それがINリストの()comparsionですべてのドキュメントを返し、正常に動作します:

{ "CD_MATRICULA" : 12, 
    "USUARIO" : { 
     "ID_SITUACAO" : 1, 
     "PUBLICOALVO" : [ 84,85,86,87,88,89 ] 
    } 
}, 
{ "CD_MATRICULA" : 14, 
    "USUARIO" : { 
     "ID_SITUACAO" : 1, 
     "PUBLICOALVO" : [ 90,91,92,93,94 ] 
    } 
}, 
{ "CD_MATRICULA" : 122, 
    "USUARIO" : { 
     "ID_SITUACAO" : 0, 
     "PUBLICOALVO" : [ 20,300,400,500,600 ] 
    } 
} 

するUSUARIO.PUBLICOALVO値によってドキュメントを検索するには、私は次のMongoのクエリを使用することができます。メッセージで、

SELECT * FROM xxx WHERE xxx.USUARIO.PUBLICOALVO IN(84, 85, 90, 94, 500); 

しかし、このクエリは失敗します:私はDRILLのSQLで同じMongoのクエリを実行しようとすると、

しかし、私はこれを行う

Error in expression at index -1. Error: Missing function implementation: [equal(INT-REPEATED, INT-REQUIRED)]. Full expression: --UNKNOWN EXPRESSION--. 

どのように私ができますフィルタIN()のこのキングをドリルSQL構文で記述しますか?

おかげでたくさん

答えて

2

Apacheのドリルのモンゴ・ストレージ・プラグインは、IN演算子をサポートしていません。

original documentation for Apache Drill's Mongo storage plugin

は、次のように述べています

は、今のところ、述語プッシュダウンは、次のフィルタのために実装されている:>、> =、<、< =、==、=、のisNullとisNotNull!。 ;

switch (functionName) { 
    case "equal": 
     compareOp = MongoCompareOp.EQUAL; 
     break; 
    case "not_equal": 
     compareOp = MongoCompareOp.NOT_EQUAL; 
     break; 
    case "greater_than_or_equal_to": 
     compareOp = MongoCompareOp.GREATER_OR_EQUAL; 
     break; 
    case "greater_than": 
     compareOp = MongoCompareOp.GREATER; 
     break; 
    case "less_than_or_equal_to": 
     compareOp = MongoCompareOp.LESS_OR_EQUAL; 
     break; 
    case "less_than": 
     compareOp = MongoCompareOp.LESS; 
     break; 
    case "isnull": 
    case "isNull": 
    case "is null": 
     compareOp = MongoCompareOp.IFNULL; 
     break; 
    case "isnotnull": 
    case "isNotNull": 
    case "is not null": 
     compareOp = MongoCompareOp.IFNOTNULL; 
     break; 
} 

FWIW、INだけでサポートされていない演算子ではありません:これはケースのままlatest version of the codeを見てみると

LIKE演算子はまだサポートされていませんが、Drill Mongoストレージプラグインに対してopen issueが存在します。

だからcoult ...

  • INオペレータを自分で実装します。論理和のシリーズは、例えば等しいようINオペレータ
  • Component=Storage - MongoDB
  • を指定Drill projectに対して問題を提起実装する方法についてのガイダンスといくつかは、あなたのINを実装し提供するかもしれないthis issueに添付のパッチがありますWHERE xxx.USUARIO.PUBLICOALVO IN (84, 85, 90, 94, 500)の代わりに試すことができますWHERE xxx.USUARIO.PUBLICOALVO = 84 OR xxx.USUARIO.PUBLICOALVO=85 ...
関連する問題