ArcGIS Enterprise
Hoe maak je een materialized view in Oracle Spatial aan voor het gebruik in ArcGIS?
Vraag
Hoe maak je een materialized view in Oracle Spatial aan voor het gebruik in ArcGIS?
Antwoord
Soms voldoet de performance van een gewone view niet aan de door de gebruiker gestelde eisen. Dit kan optreden bij grote hoeveelheden data met een complexe ‘where’ clause in de view. In dit geval adviseren wij het gebruik van een materialized view, in plaats van een gewone view. Onderstaand stappenplan kan gebruikt worden voor het aanmaken en registeren van de materialized view, zodat deze in ArcGIS Desktop, ArcGIS Pro of ArcGIS Server gebruikt kan worden.
- Zorg ervoor dat de onderliggende tabel waarvan je de view wilt aanmaken een primary key heeft. Als dit niet het geval is, dan kun je een primary key definiëren met het ‘ALTER TABLE’ statement in SQL. In onderstaand voorbeeld maak je een primary key aan op de kolom ‘OBJECTID’ van de tabel ‘OBJECTEN’:
ALTER TABLE OBJECTEN ADD PRIMARY KEY(OBJECTID);
- Vervolgens kun je de materialized view aanmaken met het ‘CREATE MATERIALIZED VIEW’ statement. Log hiervoor in met SQL in het gebruikersschema waarin je de materialized view wilt aanmaken:
CREATE MATERIALIZED VIEW MYUSER.MYVIEW
BUILD IMMEDIATE
REFRESH FORCE
NEXT (SYSDATE + 1/288)
WITH PRIMARY KEY
AS
SELECT
p.OBJECTID, p.SHAPE, p.CODE, p.SE_ANNO_CAD_DATA,...,
i.CODE_BESCHRIJVING, i.EIGENAAR, i.STRAAT, i.HUISNUMMER,...
FROM
OBJECTEN p, BESCHRIJVING i
WHERE
p.CODE=i.CODE_BESCHRIJVING;
In dit voorbeeld wordt een materialized view aangemaakt met de naam ‘MYVIEW’ in het userschema ‘MYUSER’. De bovenstaande materialized view wordt om de 5 minuten ge-refreshed (een dag bevat 1440 minuten, 5 minuten is dus 1440/5 = 288). Er wordt een join uitgevoerd tussen de ruimtelijke layer ‘OBJECTEN’ en de tabel ‘BESCHRIJVING’. Let erop dat je de volgende kolommen toevoegt: de unieke identifier van de ruimtelijke laag (hier: ‘OBJECTID’), de kolom waarin de ruimtelijke objecten zijn opgeslagen (hier: ‘SHAPE’), en –indien aanwezig- de kolom ‘SE_ANNO_CAD_DATA’ (een interne kolom beheerd door het systeem).
Voor de materialized view moet Oracle Spatial metadata aangemaakt worden in de ‘USER_SDO_GEOM_METADATA’ view in het ‘MDSYS’ gebruikersschema. Gebruik hiervoor de waarden van de metadata van de onderliggende ruimtelijke laag. De Oracle Spatial metadata voor de onderliggende laag kun je achterhalen met een SQL-statement. Log hiervoor in als owner van de onderliggende laag (in dit geval de layer ‘OBJECTEN’), en voer het volgende SQL-statement uit:
SELECT * FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME='OBJECTEN';
Hier volgt een voorbeeld hoe je metadata kunt aanmaken voor de materialized view (ingelogd als de owner van de materialized view):
INSERT INTO USER_SDO_GEOM_METADATA
( TABLE_NAME
, COLUMN_NAME
, DIMINFO
, SRID
)
VALUES
( 'MYVIEW'
, 'SHAPE'
, MDSYS.SDO_DIM_ARRAY
( MDSYS.SDO_DIM_ELEMENT('X', 0, 300000, 0.005)
, MDSYS.SDO_DIM_ELEMENT('Y', 300000, 600000, 0.005)
)
, 28992);
Als er in de onderliggende ruimtelijke layer geen Oracle Spatial SRID gebruikt wordt, gebruik dan ook geen Oracle Spatial SRID voor de materialized view. In dit voorbeeld is wél een SRID gebruikt, het nummer 28992.
- Maak een ruimtelijke index aan voor de materialized view. Hiervoor kun je de ‘CREATE INDEX’ statement gebruiken:
CREATE INDEX MYINDEX_IDX ON MYVIEW(SHAPE)INDEXTYPE IS MDSYS.SPATIAL_INDEX;
Het aanmaken van de ruimtelijke index kan ook in ArcGIS Desktop of ArcGIS Pro, bijvoorbeeld met de ‘Add Spatial Index’ tool.
Na deze stap kun je de materialized view als Query Layer gebruiken in ArcMap of ArcGIS Pro. Het is hiervoor niet nodig om de materialized view te registreren met de Geodatabase. Query Layers kun je in ArcMap toevoegen via het menu: ‘File > Add Data > Add Query Layer’ of met de ‘Add Query Layer’ tool in ArcToolbox. Ook is het mogelijk om de materialized view vanuit de database connection met drag en drop naar het kaartvenster te slepen.
- Het is mogelijk om de materialized view met de Geodatabase te registeren door de toolbox tool ‘Register With Geodatabase’ in ArcMap of ArcGIS Pro te gebruiken. Hierdoor wordt het bijvoorbeeld mogelijk om metadata aan te maken voor de materialized view, of hem in een relationship class op te nemen.
Let op: Met de ‘Create Database View’ tool in ArcGIS Desktop kun je een database view aanmaken, maar geen materialized view.