Voorheen was Invantive SQL niet in staat om relationele data te verwerken in tekstbestanden met een grootte groter dan meestal 1 GB. Vanaf BETA-release 22.1.56 maken een aantal optimalisaties het mogelijk om grote tekstbestanden van meer dan 1 GB groot in de volgende formaten te verwerken:
- CSV (door komma’s gescheiden waarden), met
csvtable
- JSON, met
jsontable
- NDJSON, met
ndjsontable
- XML-document, met
xmltable
.
Alle vier de varianten vereisen het gebruik van de passing file
-syntax in plaats van de passing
-syntax met de bestandsinhoud dat in een eerdere stap is opgehaald, zoals met read_file_contents_text@os
. Het gebruik van passing file
maakt de geheugenoptimalisaties mogelijk.
Zowel de exceltable
als htmltable
bieden geen ondersteuning voor zeer grote tekstbestanden. Echter, gegevensbestanden in de bijbehorende bestandsformaten *.xlsx en *.html zijn tot nu toe nog nooit in het wild gezien door ons team met een bestandsgrootte van meer dan 1 GB.
Zowel het verbruik van CPU-tijd als het benodigde interne geheugen kan nog steeds extreem groot zijn. Zorg voor de aanwezigheid van intern geheugen met 8x de grootte van het bestand dat wordt verwerkt. Het werkelijke geheugenverbruik kan sterk variëren en zelfs heel weinig zijn, maar zorg er voor een eerste test voor dat voldoende geheugen aanwezig is.
Bestaande, maar onontdekte hindernissen kunnen aan de oppervlakte komen. Maak a.u.b. een nieuw onderwerp aan als een probleem optreedt bij het verwerken van zeer grote tekstbestanden.
Rijen met gegevens kunnen streaming of batched worden geretourneerd, afhankelijk van de huidige architectuur. Gebruik een query met een lage waarde voor limit
om te testen of grote bestanden streaming of batched verwerkt worden in een formaat.
SQL-statements voor grote tekstbestanden
De volgende SQL-statements kunnen worden gebruikt als uitgangspunt voor de vereiste syntax:
select *
from jsontable
( '[*]'
passing file 'c:\temp\large.json'
columns c varchar2 path 'key'
)
limit 10
select *
from ndjsontable
( passing file 'c:\temp\large.ndjson'
columns c varchar2 path 'key'
)
limit 10
select *
from csvtable
( passing file 'c:\temp\large.csv'
columns c varchar2 position 1
)
limit 10
select *
from xmltable
( '/root'
passing file 'c:\temp\large.xml'
columns c varchar2 path './name'
)
limit 10