9.3 プロパティ・グラフの空間データの問合せ
Oracle Spatial and Graphの地理空間問合せ関数は、プロパティ・グラフの空間データに適用できます。このトピックでは、いくつかの例を示します。
空間情報に基づく問合せは、ナビゲーションおよびパターン一致と組み合わせることができることに注意してください。
次の例では、位置(点ジオメトリ)の指定した距離(ここでは、1マイル)以内のエンティティ(頂点)を検出します。
SQL> -- use SDO_WITHIN_DISTANCE to filter vertices
SQL> select vid, k, t, v
from testvt$
where sdo_within_distance(mdsys.opg_apis.get_geometry_from_v_t_cols(v, t),
mdsys.sdo_geometry(2001, 8307, mdsys.sdo_point_type(-122.23, 37.56, null), null, null),
'distance=1 unit=mile') = 'TRUE'
order by vid, k;
出力および実行計画は次のようになります。新しく作成されたドメインindexTESTVTXGEO$が実行で使用されていることに注意してください。
100 geoloc 20 -122.230 37.560
101 geoloc 20 -122.231 37.561
.. ... ...
----------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 18176 | 2 (50)| 00:00:01 | | | | | |
| 1 | PX COORDINATOR | | | | | | | | | | |
| 2 | PX SEND QC (ORDER) | :TQ10001 | 1 | 18176 | 2 (50)| 00:00:01 | | | Q1,01 | P->S | QC (ORDER) |
| 3 | SORT ORDER BY | | 1 | 18176 | 2 (50)| 00:00:01 | | | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 1 | 18176 | 1 (0)| 00:00:01 | | | Q1,01 | PCWP | |
| 5 | PX SEND RANGE | :TQ10000 | 1 | 18176 | 1 (0)| 00:00:01 | | | Q1,00 | P->P | RANGE |
| 6 | PX PARTITION HASH ALL | | 1 | 18176 | 1 (0)| 00:00:01 | 1 | 8 | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS BY LOCAL INDEX ROWID| TESTVT$ | 1 | 18176 | 1 (0)| 00:00:01 | 1 | 8 | Q1,00 | PCWP | |
|* 8 | DOMAIN INDEX (SEL: 0.000000 %) | TESTVTXGEO$ | | | 1 (0)| 00:00:01 | | | Q1,00 | | |
----------------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
7 - filter(INTERNAL_FUNCTION("K") AND INTERNAL_FUNCTION("V"))
8 - access("MDSYS"."SDO_WITHIN_DISTANCE"("OPG_APIS"."GET_GEOMETRY_FROM_V_T_COLS"("V","T"),"MDSYS"."SDO_GEOMETRY"(2001,8307,"MDSYS"."SDO_P
OINT_TYPE"((-122.23),37.56,NULL),NULL,NULL),'distance=1 unit=mile')='TRUE')
次の例では、位置からの距離に基づきエンティティ(頂点)をソートします。
-- Sort based on distance in miles
SQL> select vid, dist from (
select vid, k, t, v,
sdo_geom.sdo_distance(mdsys.opg_apis.get_geometry_from_v_t_cols(v, t),
mdsys.sdo_geometry(2001, 8307, mdsys.sdo_point_type(-122.23, 37.56, null), null, null), 1.0, 'unit=mile') dist
from testvt$
where t = 20
) order by dist asc
;
出力および実行計画は次のようになります。
...
101 .088148935
102 .385863422
103 .773127682
104 1.2068052
105 1.64421947
200 2.08301065
...
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 15062 | 1366 (1)| 00:00:01 | | |
| 1 | SORT ORDER BY | | 1 | 15062 | 1366 (1)| 00:00:01 | | |
| 2 | PARTITION HASH ALL| | 1 | 15062 | 1365 (1)| 00:00:01 | 1 | 8 |
|* 3 | TABLE ACCESS FULL| TESTVT$ | 1 | 15062 | 1365 (1)| 00:00:01 | 1 | 8 |
-----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter("T"=20 AND INTERNAL_FUNCTION("V"))
親トピック: プロパティ・グラフの空間サポート