次のようなクエリを実行できるようにしたい:
select A.*
from A
join B
on match(A.geom,B.wkt) using within;
しかし、私は得る:
ERROR: UnhandledServerException: java.lang.IllegalArgumentException: queryTerm must be a literal
サンプル スキーマ:
create table if not exists A (
id integer,
geom geo_shape
);
create table if not exists B (
id integer,
wkt string index off
);
試行する理由wkt string
は、ドキュメントでの WKT リテラルの使用によるものです。さらに、実際の実装は、結合する可能性がありgeo_shape
、オブジェクトに存在できない可変数のジオメトリであるため、WKT が結合で機能することを期待していました。
更新 1 ( Augmented Jacob の回答による) geo_shape をこのスキーマで geo_shape に結合しようとしています。
create table if not exists B (
id integer,
wkt geo_shape
);
そして、上記のクエリは別のエラーを生成します:
SQLParseException: Couldn't create executionContexts from NodeOperations
... original-error: Can't handle Symbol io.crate.analyze.symbol.MatchPredicate@6666c921
そして、エラーは理想的ではありませんが、ドキュメントの状態から、とにかく動作するとは思わないでしょう:
ノート
1 つの MATCH 述語で、結合の両方の関係の列を結合することはできません。
更新 2 geo_shape Join geo_shape を使用すると、match
動作しませんがwithin
動作しますが、「正確な」クエリであるため、少なくとも 2.4B 行ではパフォーマンスがほとんど使用できなくなります。
select A.*
from A
join B
on within(B.wkt,A.geom);