Voor uitgebreide analyses kan het wenselijk zijn om de volledige dataset van 6 miljoen bekendmakingen uit KOOP (NL) Officiele Publicaties naar een eigen database over te halen. Dit topic beschrijft een voorbeeld.
settings.xml
Online
Maak een database met twee datacontainers: de doeldatabase zoals SQL Server en KOOP (NL) Officiele Publicaties.
On-premises
Maak een settings*.xml
-bestand in %USERPROFILE%\Invantive
, bijvoorbeeld settings-koop.xml
. Definieer hierin een database met twee datacontainers, bijvoorbeeld als:
<?xml version="1.0" encoding="utf-16"?>
<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
VersionUpdateDate="2020-09-04T16:38:36.5624324Z"
version="5">
<group
name="SAMPLE"
id="4641e4ce-4049-406a-9959-bd405da7d5d0"
sortingOrder="0"
>
<connection
name="Sample"
manual="true"
authentication="Default"
sortingOrder="20"
id="2361f257-8a0e-4d7b-b234-8032abf91eff">
<database
order="10"
comment="PostgreSQL"
alias="oa"
provider="PostgreSql"
userLogonCodeMode="Hidden"
passwordMode="Hidden"
connectionString="Server=8.8.8.8;Database=sample;User Id=sample;Password=secret"
AllowConnectionStringRewrite="false"
/>
<database
order="20"
provider="KoopNlOfficielePublicaties"
alias="op"
userLogonCodeMode="Hidden"
passwordMode="Hidden"
AllowConnectionPooling="false" />
</connection>
</group>
</settings>
Doeltabel
Gebruik het volgende statement om een lege tabel met de gewenste structuur te maken:
create or replace table OAKoopOpEntries@oa
as
select *
from Entries@op
where false
Vervolgens worden per week van de wijzigingsdatum de bekendmakingen geladen (de snelheid is circa 70 bekendmakingen per seconde):
declare
l_start_date date;
begin
execute native 'select max(modified) from oa_koop_op_entries'
into l_start_date
datacontainer 'oa'
;
--
for r
in
( select clr.day_date
from Calendar@DataDictionary clr
where clr.day_date >= coalesce(l_start_date, add_months(sysdateutc, -120))
and clr.day_date < trunc(sysdateutc)
order
by clr.day_date
)
loop
dbms_output.put_line('Load day ' || to_char(r.day_date, 'YYYYMMDD') || '.');
begin
bulk insert into oa_koop_op_entries@oa
select null rowid$
, t.*
from Entries@op t
where t.Modified >= r.day_date
and t.Modified < r.day_date + 2 /* Circumvent bug filtering. */
and trunc(t.Modified) = r.day_date
;
dbms_output.put_line('Processed ' || to_char(sqlrowcount) || ' entries.');
exception
when others
then
if sqlerrm like '%SEARCH-IGNOREDQTEXT%'
then
--
-- Ignore.
--
dbms_output.put_line('No entries.');
else
raise;
end if;
end;
end loop;
end;
Het laden duurt circa 24 uur voor de initiele laadactie.
Vervolgens kan gewisseld worden naar incrementeel laden voor alleen gewijzigde bekendmakingen op basis van Modified
datum of de Events
-tabel. Per dag is het datavolume circa 1.000 nieuwe bekendmakingen.
Toevoegen Externe Documenten
Het is mogelijk om ook externe documenten toe te voegen. Dit staat beschreven in Externe documenten opzoeken bij Officele Bekendmakingen.
De verwerkingsduur kan echter enorm zijn aangezien in principe voor elke bekendmaking twee HTTP-verzoeken nodig zijn:
- een HTTP-verzoek nodig is om de lijst van externe bijlages op te vragen
- een HTTP-verzoek om de lijst van eventuele documenten op te vragen
Zelfs bij een doorlopende verwerkingssnelheid van 32 HTTP-verzoeken per seconde duurt het minimaal 4 dagen voor de initiele laadactie.
De verwerkingsduur kan ingeperkt worden door deze opvragingen enkel te doen voor bepaalde vormen van bekendmakingen.
Vervolgens kan gewisseld worden naar incrementeel laden voor alleen gewijzigde bekendmakingen op basis van Modified
datum of de Events
-tabel. Per dag is het datavolume circa 1.000 nieuwe bekendmakingen, zodat er circa 2.000 HTTP-verzoeken nodig zijn om de documenten te achterhalen.
Het daadwerkelijk opvragen van de documenten zal in het algemeen beduidend sneller zijn. Ook momenteel worden aan relatief weinig bekendmakingen documenten toegevoegd, terwijl dit voorheen nog minder was.