Arbeta meddatasets.xmlFil
\[Denna webbsida kommer endast att vara av intresse förERDDAP™administratörer.\]
När du har följtERDDAP™ installationsanvisningarDu måste redigeradatasets.xmlfil i Tomcat /innehåll/erddap/ för att beskriva de datamängder som dinaERDDAP™installationen kommer att fungera.
Du kan se ett exempeldatasets.xmlpå GitHub.
Introduktion
Vissa församlingar krävs
Ställa in en dataset iERDDAP™är inte bara en fråga om att peka på datasetets katalog eller URL. Du måste skriva en bit av XML fördatasets.xmlsom beskriver dataset.
- För ruttna datamängder, för att göra datamängden överensstämma medERDDAP"S datastruktur för ruttna data, du måste identifiera en delmängd av datamängdens variabler som delar samma dimensioner. (Varför? Hur?)
- Datasetets aktuella metadata importeras automatiskt. Men om du vill ändra metadata eller lägga till andra metadata måste du ange den idatasets.xml. ochERDDAP™behöver andra metadata, inklusiveglobala attribut (såsominfoUrlinstitution,sourceUrlSammanfattning och titel) ochVariabla attribut (såsomlong\_nameoch enheter) . Precis som metadata som för närvarande finns i datamängden lägger till beskrivande information till datamängden lägger metadata som begärs avERDDAP™lägger till beskrivande information till datasetet. Den extra metadata är ett bra komplement till din dataset och hjälper tillERDDAP™Gör ett bättre jobb med att presentera dina data för användare som inte är bekanta med det.
- ERDDAP™behöver du göra speciella saker medlongitud, latitud, höjd (eller djup) och tidsvariabler.
Om du köper in dessa idéer och spenderar ansträngningen att skapa XML för attdatasets.xmlDu får alla fördelarna medERDDAP™inklusive:
- Full textsökning för dataset
- Sök efter datamängder efter kategori
- Data Access Forms ( datasetID .html) så att du kan begära en delmängd av data i många olika filformat
- Formulär för att begära grafer och kartor ( datasetID .graph)
- Web Map Service (WMS) för gridded datasets
- RESTfultillgång till dina data
Göradatasets.xmlansträngning för de första datamängderna, men Det blir lättare . Efter den första datamängden kan du ofta återanvända mycket av ditt arbete för nästa datamängd. Som tur är,ERDDAP™Kommer med tvåVerktygför att hjälpa dig att skapa XML för varje dataset idatasets.xml. Om du fastnar, se vårsektion om att få ytterligare stöd.
Dataleverantör Formulär
När en dataleverantör kommer till dig hoppas du lägga till lite data till dinERDDAPDet kan vara svårt och tidskrävande att samla alla metadata (Information om dataset) behövs för att lägga till dataset iERDDAP. Många datakällor (till exempel .csv-filer, Excel-filer, databaser) har inga interna metadata, såERDDAP™har ett dataleverantörsformulär som samlar metadata från dataleverantören och ger dataleverantören någon annan vägledning, inklusive omfattande vägledning förData i databaser. Den inlämnade informationen omvandlas tilldatasets.xmlformat och sedan skickas tillERDDAP™Administratör (Du du) och skriftlig (Appenderad) att bigParentDirectory /logs/dataProviderForm.log . Således formuläret halvautomatiserar processen att få en dataset in iERDDAPMen denERDDAP™Administratören måste fortfarande slutföradatasets.xmlchunk och hantera att få datafilen (s) från leverantören eller anslutning till databasen.
Inlämnandet av faktiska datafiler från externa källor är en stor säkerhetsrisk, såERDDAP™inte hantera det. Du måste räkna ut en lösning som fungerar för dig och dataleverantören, till exempel e-post (för små filer) Dra från molnet (Till exempel DropBox eller Google Drive) En sftp-webbplats (med lösenord) eller sneaker Net (en USB-tumdrift eller extern hårddisk) . Du bör förmodligen bara acceptera filer från personer du vet. Du måste skanna filerna för virus och vidta andra säkerhetsåtgärder.
Det finns inte en länk iERDDAP™till Data Provider Form (till exempel påERDDAP™Hemsidan) . Istället, när någon säger att de vill ha sina data som serveras av dinERDDAPDu kan skicka ett e-postmeddelande som säger något som: Ja, vi kan få dina data inERDDAP. För att komma igång, vänligen fyll i formuläret på https://yourUrl/erddap/dataProviderForm.html (ellerhttp://omhttps://är inte aktiverat) . När du är klar kontaktar jag dig för att räkna ut de sista detaljerna. Om du bara vill titta på formuläret (utan att fylla ut det) Du kan se formuläret påERD"SERDDAPFrån:Introduktion,Del 1,Del 2,Del 3ochDel 4. Dessa länkar påERD ERDDAP™Skicka information till mig, inte du, så skicka inte information med dem om du inte vill lägga till data tillERD ERDDAP.
Om du vill ta bort dataleverantörsformuläret från dinERDDAP™, put
<dataProviderFormActive>false</dataProviderFormActive>
i din setup.xml-fil.
impulsen för detta varNOAA2014Offentlig tillgång till forskningsresultat (Parr) Direktivsom kräver att alltNOAAmiljödata som finansieras genom skattebetalarnas dollar görs tillgängliga via en datatjänst (Inte bara filer) inom 12 månader efter skapelsen. Så det finns ökat intresse för att användaERDDAP™göra datamängder tillgängliga via en tjänst ASAP. Vi behövde ett effektivare sätt att hantera ett stort antal dataleverantörer.
Feedback/förslag? Detta formulär är nytt, så vänligen e-posterd dot data at noaa dot govom du har någon feedback eller förslag för att förbättra detta.
Verktyg
ERDDAP™kommer med två kommandoradsprogram som är verktyg för att hjälpa dig att skapa XML för varje datamängd som du vill ha dinERDDAP™att tjäna. När du har ställt uppERDDAP™och springa den (minst en gång) Du kan hitta och använda dessa program i Tomcat /webapps/erddap/WEB-INF-katalogen. Det finns Linux/Unix Shell scripts (med förlängningen .sh) och Windows scripts (med förlängningen .bat) för varje program.\[På Linux, kör dessa verktyg som samma användare (Tomcat?) Det kommer att driva Tomcat.\]När du kör varje program kommer det att ställa dig frågor. För varje fråga, skriv ett svar, tryck sedan på Enter. Eller tryck på ^ C för att avsluta ett program när som helst.
Program kommer inte att springa?
- Om du får ett okänt program (eller liknande) felmeddelande, problemet är förmodligen att operativsystemet inte kunde hittaJava. Du måste räkna ut varJavaär på din dator, sedan redigera java referens i .bat eller .sh filen som du försöker använda.
- Om du får en burkfil som inte hittats eller klassen inte hittade felmeddelande, dåJavaKunde inte hitta en av de klasser som anges i .bat eller .sh-filen du försöker använda. Lösningen är att räkna ut var den .jar-filen är och redigera java-referensen till den i .bat eller .sh-filen.
- Om du använder en version avJavaDet är för gammalt för ett program, programmet kommer inte att köras och du kommer att se ett felmeddelande som
Undantag i tråd "huvud" java.lang.UnsupportedClassVersionError:
någon/klass/namn Unsupported major.minor version SomeNumber
Lösningen är att uppdatera till den senaste versionen avJavaoch se till att .sh eller .bat-filen för programmet använder den.
Verktygen skriver ut olika diagnostiska meddelanden:
- Ordet "ERROR" används när något gick så fel att förfarandet inte slutfördes. Även om det är irriterande att få ett fel, tvingar felet dig att hantera problemet.
- Ordet "VARNING" används när något gick fel, men förfarandet kunde slutföras. Dessa är ganska sällsynta.
- Allt annat är bara ett informativt meddelande. Du kan lägga till \-verbose tillGenerateDatasetsXmlellerDasDdskommandorad för att få ytterligare informativa meddelanden, som ibland hjälper till att lösa problem.
De två verktygen är en stor hjälp, men du måste fortfarande läsa alla dessa instruktioner på denna sida noggrant och fatta viktiga beslut själv.
GenerateDatasetsXml
- GenerateDatasetsXml är ett kommandoradsprogram som kan generera ett grovt utkast till dataset XML för nästan alla typer av dataset.
Vi rekommenderar starkt att du använder GenerateDatasets Xml istället för att skapa bitar avdatasets.xmlFör hand för att:
- GenerateDatasets Xml fungerar på några sekunder. Att göra detta för hand är minst en timmes arbete, även när du vet vad du gör.
- GenerateDatasets Xml gör ett bättre jobb. Att göra detta för hand kräver omfattande kunskap om hurERDDAP™fungerar. Det är osannolikt att du kommer att göra ett bättre jobb för hand. (Bob Simons använder alltid GenerateDatasets Xml för första utkastet, och han skrevERDDAP.)
- GenerateDatasets Xml genererar alltid en giltig bit avdatasets.xml. Alla bitar avdatasets.xmlatt du skriver kommer förmodligen att ha minst några fel som förhindrarERDDAP™från att ladda dataset. Det tar ofta människor timmar att diagnostisera dessa problem. Slösa inte din tid. Låt Generate Dataset Xml gör det hårda arbetet. Då kan du förfina .xml för hand om du vill.
När du använder GenerateDatasets Xml-program:
- På Windows, första gången du kör GenerateDatasetsXml, måste du redigera GenerateDatasetsXml.bat-filen med en textredigerare för att ändra vägen till java. exe fil så att Windows kan hittaJava.
- GenerateDatasets Xml frågar dig först att ange EDDType (Erd Dap Dataset Typ) av dataset. SeLista över datasettyper (i detta dokument) för att räkna ut vilken typ som är lämplig för datamängden du arbetar med. Förutom de vanliga EDDTypes finns det också någraSpecial/Pseudo Dataset Typer (t.ex. en som kryper en THREDDS-katalog för att generera en bit avdatasets.xmlför var och en av datamängderna i katalogen) .
- GenerateDatasets Xml ställer dig sedan en rad frågor som är specifika för EDDType. Frågorna samlar in den information som behövs förERDDAP™för att komma åt datasetets källa. För att förstå vadERDDAP™begär, se dokumentationen för EDDType som du angav genom att klicka på samma datasettyp iLista över datasettyper.
Om du behöver ange en sträng med speciella tecken (t.ex. whitespace-karaktärer i början eller slutet, icke-ASCII-karaktärer) Gå in i enJSON-stil sträng (med speciella karaktärer som rymts med tecken) . Till exempel, för att ange bara en flikkaraktär, ange "\t" (med de omgivande dubbla citat, som berättarERDDAP™Detta är en JSON-stil sträng.
- Ofta kommer ett av dina svar inte vara vad GenerateDatasetsXml behöver. Du kan sedan försöka igen, med reviderade svar på frågorna, tills GenerateDatasets Xml kan framgångsrikt hitta och förstå källdata.
- Om du svarar på frågorna korrekt (eller tillräckligt korrekt) GenerateDatasets Xml kommer att ansluta till datasetets källa och samla grundläggande information (Till exempel variabla namn och metadata) . För datamängder som är från lokalaNetCDF .ncoch relaterade filer, GenerateDatasets Xml kommer ofta att skriva ut filens ncdump-liknande struktur efter att den först läser filen. Detta kan ge dig information för att svara på frågorna bättre på en efterföljande slinga genom GenerateDatasetsXml.
- GenerateDatasets Xml kommer sedan att generera ett grovt utkast av dataset XML för det datasetet.
- Diagnostisk information och det grova utkastet till dataset XML kommer att skrivas till bigParentDirectory /logs/GenerateDatasetsXml.log.
- Det grova utkastet till dataset XML kommer att skrivas till bigParentDirectory /logs/GenerateDatasetsXml.out.
"0 filer" Felmeddelande
Om du kör GenerateDatasets Xml ellerDasDdseller om du försöker ladda enEDDGridFrån...Files or EDDTableFrom... Filer dataset iERDDAP™, och du får ett "0 filer" felmeddelande som indikerar attERDDAP™Hittade 0 matchande filer i katalogen (När du tror att det finns matchande filer i den katalogen) Från:
-
Kontrollera att du har angett hela katalogens namn. Och om du angav provfilnamnet, se till att du angav filens fullständiga namn, inklusive hela katalogen namn.
-
Kontrollera att filerna verkligen finns i den katalogen.
-
Kontrollera stavningen av katalogen namn.
-
Kolla filenNameRegex. Det är verkligen lätt att göra misstag med regex. För teständamål, prova regex . * som ska matcha alla filnamn. (Se dettaregex dokumentationochRegex tutorial.)
-
Kontrollera att användaren som kör programmet (t.ex. användar=tomcat (??) För Tomcat/ERDDAP) har "läst" tillstånd för dessa filer.
-
I vissa operativsystem (Till exempel SELinux) Och beroende på systeminställningar måste användaren som körde programmet ha "läs" tillstånd för hela katalogkedjan som leder till katalogen som har filerna.
-
Om du har problem som du inte kan lösa,begäran om supportmed så mycket information som möjligt. På samma sätt, om det verkar som om lämplig EDDType för en viss datamängd inte fungerar med den datamängden, eller om det inte finns någon lämplig EDDType, vänligen lämna in enFråga om GitHubmed detaljerna (och en provfil om det är relevant) .
Du måste redigera utgången från GenerateDatasets Xml för att göra det bättre.
-
Disklaimer: CHUNK OFdatasets.xmlMADE BE GenerateDatasets Xml är inte perfekt. Du måste läsa och EDIT XML BEFORE ANVÄNDNING I en PUBLICERDDAP. GenerateDatasets Xml RELIES ON A LOT OF RULES-OF-THUMB WHICH AREN'T ALWAYS CORRECT. Du är rädd för att söka efter kärnan i XML DU TILL DU TILL DU TILL DIG TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TILL DU TIGÅ TILL DU TIGÅ TIGA TIGÅ TIGÅ TIGA TIGT TIGÅ TIGA TIGÅ TILL DU TIGT TIGT TIGÅ TILL DU TIGÅ TIGÅ TIGÅ TIGÅ TILL DU TIGÅ TIGA TILL DU TIGT TIGA TIGT TILL DU TIGÅ TILLERDDAP"Sdatasets.xmlFile.
(Rolig fakta: Jag skriker inte. Av historiska juridiska skäl måste friskrivningar skrivas i alla mössor.)
Utgången av GenerateDatasetsXml är ett grovt utkast. Du kommer nästan alltid att behöva redigera den. Vi har gjort och fortsätter att göra en stor insats för att göra produktionen så färdig att gå som möjligt, men det finns gränser. Ofta behövs information helt enkelt inte tillgänglig från källmetadata.
Ett grundläggande problem är att vi frågar ett datorprogram (GenerateDatasetsXml) För att göra en uppgift där du, om du gav samma uppgift till 100 personer, skulle få 100 olika resultat. Det finns inget ”rätt” svar. Självklart kommer programmet närmast att läsa Bobs sinne. (Inte din) Men även så är det inte ett all-understanding AI-program, bara ett gäng heuristik kullerade ihop för att göra en AI-liknande uppgift. (Den dagen av ett all-understanding AI-program kan komma, men det har inte ännu. Om / när det gör det, kan vi människor ha större problem. Var försiktig med vad du önskar.)
-
För informationsändamål visar utgången den globala källanFördelar och variabel källaFördelar som kommentarer.ERDDAP™kombinerar sourceAttributes ochaddAttributes (som har företräde) att göra den kombinerade Innehåll som visas för användaren. (Och andra attribut läggs automatiskt till longitud, latitud, höjd, djup och tidsvariabler närERDDAP™faktiskt gör dataset) .
-
Om du inte gillar en källaAttribute, överskriv det genom att lägga till en addAttribute med samma namn men ett annat värde (eller inget värde, om du vill ta bort det) .
-
AllaaddAttributesär datorgenererade förslag. Redigera dem! Om du inte gillar en addAttribute, ändra den.
-
Om du vill lägga till andraaddAttributesLägg till dem.
-
Om du vill ändra endestinationNameÄndra det. Men ändra intesourceNames.
-
Du kan ändra ordningen pådataVariableeller ta bort någon av dem.
- Du kan sedan användaDasDds (Se nedan) för att upprepade gånger testa XML för den datamängden för att säkerställa att den resulterande datamängden visas som du vill att den skaERDDAP.
- Känn dig fri att göra små förändringar idatasets.xmlbit som genererades, till exempel, ger en bättreinfoUrlSammanfattning, eller titel.
DoNotAddStandardNames
Om du inkluderar \-doNotAddStandardNames som en kommandoradsparameter när du kör generera Dataset Xml, generera Dataset Xml kommer inte att lägga tillstandard\_nametilladdAttributesför andra variabler än variabler som heter latitud, longitud, höjd, djup eller tid (som har uppenbartstandard\_names) . Detta kan vara användbart om du använder utgången från att generera Dataset Xml direkt iERDDAP™utan att redigera utgången, för att generera Dataset Xml gissar oftastandard\_names felaktigt. (Observera att vi alltid rekommenderar att du redigerar utgången innan du använder den iERDDAP.) Använda denna parameter kommer att ha andra mindre relaterade effekter eftersom den gissadestandard\_nameanvänds ofta för andra ändamål, t.ex. för att skapa en nylong\_nameoch skapa färgBar inställningar.
Skriften
Som ett alternativ till att svara på frågorna interaktivt på tangentbordet och looping för att generera ytterligare datamängder kan du ge kommandoradens argument för att svara på alla frågor för att generera en datamängd. GenerateDatasets Xml kommer att behandla dessa parametrar, skriva utgången till utdatafilen och avsluta programmet.
För att ställa in detta använder du först programmet i interaktivt läge och skriver ner dina svar. Här är ett partiellt exempel: Låt oss säga att du kör skriptet: ./GenerateDatasetsXml.sh Ange sedan: EDDTableFromAsciiFiles Ange sedan: /u00/data/ Ange sedan: .\*\.asc Ange sedan: /u00/data/sampleFile.asc Ange sedan: ISO-8859-1
För att köra detta på ett icke-interaktivt sätt, använd denna kommandorad: ./GenerateDatasetsXml.sh EDDTableFromAsciiFiles/u00/data/.\\.asc/u00/data/sampleFile.asc ISO-8859-1 Så i princip listar du bara alla svar på kommandoraden. Detta bör vara användbart för datamängder som förändras ofta på ett sätt som kräver re-running GenerateDatasets Xml (i synnerhetEDDGridFrånThreddsCatalog) .
Detaljer:
- Om en parameter innehåller ett utrymme eller någon speciell karaktär, koda sedan parametern som enJSON-stil sträng"Min parameter med utrymmen och två\nlinjer”.
- Om du vill ange en tom sträng som parameter, använd: ingenting
- Om du vill ange standardvärdet på en parameter, använd: standard
- GenerateDatasets Xml stöder en -i Dataset XmlName # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # tagName kommandoradsparameter som infogar utgången i den angivnadatasets.xmlfil (Standarden är Tomcat /innehåll/erddap/datasets.xml) . GenerateDatasets Xml letar efter två rader i dataset XmlName:
<!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->
och
<!-- End GenerateDatasetsXml #*tagName someDatetime* -->
och ersätter allt mellan dessa rader med det nya innehållet, och ändrar ibland.
- -i switch är bara bearbetad (och förändringar idatasets.xmlgörs endast) Om du kör GenerateDatasets Xml med kommandoradsargument som anger alla svar på alla frågor för en slinga av programmet. (Se "Scripting" ovan.) (Tanken är: Denna parameter är för användning med skript. Om du använder programmet i interaktivt läge (Skriva info på tangentbordet) Du kommer sannolikt att generera några felaktiga bitar av XML innan du genererar den du vill ha.)
- Om Begin and End-linjerna inte hittas, infogas dessa rader och det nya innehållet innan.</erddapDatasets>.
- Det finns också en -I (kapital i) växla för teständamål som fungerar på samma sätt som -i, men skapar en fil som kallasdatasets.xml Datumtid och gör inte ändringardatasets.xml.
- Kör inte GenerateDatasets Xml med -i i två processer samtidigt. Det finns en chans att bara en uppsättning förändringar kommer att hållas. Det kan finnas allvarliga problem (Till exempel korrupta filer) .
Om du använder "GenerateDatasetsXml -verbose", kommer det att skriva ut mer diagnostiska meddelanden än vanligt.
Special/Pseudo Dataset Typer
I allmänhet EDDType alternativ i GenerateDatasets Xml-match av de EDD-typer som beskrivs i detta dokument (seLista över datasettyper) och generera endatasets.xmlchunk att skapa en dataset från en specifik datakälla. Det finns några undantag och särskilda fall:
EDDGridFrånErddap
Denna EDDType genererar alladatasets.xmlbitar som behövs för att göraEDDGridFrånErddapdatamängder från allaEDDGridDataset i en fjärrERDDAP. Du har möjlighet att behålla originaletdatasetIDs (som kan duplicera vissadatasetIDs redan i dinERDDAP) eller skapa nya namn som kommer att vara unika (Men vanligtvis är inte så mänskligt läsbara) .
EDDTableFromErddap
Denna EDDType genererar alladatasets.xmlbitar som behövs för att göraEDDTableFromErddapdatamängder från alla EDDTable datamängder i en fjärrkontrollERDDAP. Du har möjlighet att behålla originaletdatasetIDs (som kan duplicera vissadatasetIDs redan i dinERDDAP) eller skapa nya namn som kommer att vara unika (Men vanligtvis är inte så mänskligt läsbara) .
EDDGridFrånThreddsCatalog
Denna EDDType genererar alladatasets.xmlbitar behövs för allaEDDGridFrånDapdatamängder som den kan hitta genom att krypa upprepande genom en TREDD (sub) Katalog. Det finns många former av THREDDS katalog URLs. Det här alternativet REQUIRES a THREDDS .xml URL with /catalog/ in it, till exempel,
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml eller
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(en relaterad .html katalog är på
https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html som inte är acceptabelt förEDDGridFrånThreddsCatalog).
Om du har problem medEDDGridFrånThredds Katalog:
- Se till att webbadressen du använder är giltig, inkluderar /catalog / och slutar med /catalog.xml.
- Om möjligt, använd en offentlig IP-adress (till exempel, https://oceanwatch.pfeg.noaa.gov ) i webbadressen, inte en lokal numerisk IP-adress (till exempel, https://12.34.56.78 ) . Om TREDDDS endast är tillgänglig via den lokala numeriska IP-adressen kan du använda [<konverteraToPublicSourceUrl> (#converttopublicsourceurl) SåERDDAP™användare ser den offentliga adressen, även omERDDAP™får data från den lokala numeriska adressen.
- Om du har problem som du inte kan lösa,Kontrollera felsökning tips.
- Den låga nivåkoden för detta använder nuUnidatanetcdf-java katalog crawler kod (Tredds. katalog klasser) så att den kan hantera alla THREDDS-kataloger (som kan vara överraskande komplexa) Tack vareUnidataför den koden.
EDDGridLonPM180FromErddapCatalog
Denna EDDType genererardatasets.xmlatt göraEDDGridLonPM180datamängder från allaEDDGridDataset i enERDDAPsom har någon longitud värden större än 180.
- Om möjligt, använd en offentlig IP-adress (till exempel, https://oceanwatch.pfeg.noaa.gov ) i webbadressen, inte en lokal numerisk IP-adress (till exempel, https://12.34.56.78 ) . OmERDDAP™är endast tillgänglig via den lokala numeriska IP-adressen, du kan använda [<konverteraToPublicSourceUrl> (#converttopublicsourceurl) SåERDDAP™användare ser den offentliga adressen, även omERDDAP™får data från den lokala numeriska adressen.
EDDGridLon0360 frånErddapCatalog
Denna EDDType genererardatasets.xmlatt göraEDDGridLon0360datamängder från allaEDDGridDataset i enERDDAPsom har någon longitud värden mindre än 0.
- Om möjligt, använd en offentlig IP-adress (till exempel, https://oceanwatch.pfeg.noaa.gov ) i webbadressen, inte en lokal numerisk IP-adress (till exempel, https://12.34.56.78 ) . OmERDDAP™är endast tillgänglig via den lokala numeriska IP-adressen, du kan använda [<konverteraToPublicSourceUrl> (#converttopublicsourceurl) SåERDDAP™användare ser den offentliga adressen, även omERDDAP™får data från den lokala numeriska adressen.
EDDsFromFiles
Med tanke på en startkatalog korsar detta katalogen och alla underkataloger och försöker skapa en dataset för varje grupp av datafiler som den hittar.
- Detta förutsätter att när en dataset hittas innehåller datasetet alla underkataloger.
- Om en dataset hittas kommer liknande syskonkataloger att behandlas som separata dataset (kataloger för 1990-talet, 2000-talet, 2010-talet, kommer att generera separata datamängder.) . De bör vara lätta att kombinera för hand - bara ändra den första datamängden<fileDir> till moderkatalogen och radera alla efterföljande syskondataset.
- Detta kommer bara att försöka generera en bit avdatasets.xmlför den vanligaste typen av filändelse i en katalog (inte räkna .md5, som ignoreras) . Så, med en katalog med 10.ncfiler och 5 .txt filer, en dataset kommer att genereras för.ncfiler endast.
- Detta förutsätter att alla filer i en katalog med samma tillägg hör hemma i samma dataset. Om en katalog har några.ncfiler med SST-data och vissa.ncfiler med klorofylldata, bara ett prov.ncFilen kommer att läsas (SST? Klorofyll?) och bara en dataset kommer att skapas för den typen av fil. Den datamängden kommer sannolikt att misslyckas med att ladda på grund av komplikationer från att försöka ladda två typer av filer i samma datamängd.
- Om det finns färre än 4 filer med den vanligaste förlängningen i en katalog, förutsätter detta att de inte är datafiler och bara hoppar över katalogen.
- Om det finns 4 eller fler filer i en katalog, men detta kan inte framgångsrikt generera en bit avdatasets.xmlför filerna (Till exempel en ostödd filtyp) Detta kommer att generera enEDDTableFromFileNamesdataset för filerna.
- I slutet av diagnostiken som detta skriver till loggfilen, strax föredatasets.xmlbitar, detta kommer att skriva ut en tabell med en sammanfattning av information som samlas in genom att korsa alla underkataloger. Tabellen listar varje underkatalog och anger den vanligaste typen av filändelse, det totala antalet filer, och vilken typ av dataset skapades för dessa filer. (Om någon) . Om du står inför en komplex, djupt kapslad filstruktur, överväga att köra GenerateDatasets Xml med EDDType=EDDsFromFiles bara för att generera denna information,
- Det här alternativet kanske inte gör ett bra jobb med att gissa den bästa EDDType för en viss grupp datafiler, men det är snabbt, enkelt och värt ett försök. Om källfilerna är lämpliga fungerar det bra och är ett bra första steg i att generera källfilerna.datasets.xmlför ett filsystem med massor av underkataloger, var och en med datafiler från olika datamängder.
EDDTableFromEML och EDDTableFromEMLBatch
Dessa speciella EDDType genererardatasets.xmlatt göra enEDDTableFromAsciiFilesdatamängd från var och en av tabellerna som beskrivs i enEkologisk metadataspråkXML fil. "Batch"-varianten fungerar på alla EML-filer i en lokal eller fjärrkatalog. Se separatdokumentation för EDDTableFromEML.
EDDTableFromInPort
Denna speciella EDDType genererardatasets.xmlatt göra enEDDTableFromAsciiFilesDataset från informationen i enInport-xmlfil. Om du kan få tillgång till källdatafilen (Inport-xml-filen ska ha ledtrådar för var den ska hitta den) Du kan göra en fungerande dataset iERDDAP.
Följande steg beskriver hur man använder GenerateDatasets Xml med en inport-xml-fil för att få en fungerande dataset iERDDAP.
- När du har tillgång till inport-xml-filen (antingen som en URL eller en lokal fil) Kör GenerateDatasets Xml, ange EDDType=EDDTableFromInPort, ange inport-xml URL eller fullständig filnamn, ange vilkenChild=0 och ange den andra begärda informationen (om det är känt) . (Vid denna tidpunkt behöver du inte ha källdatafilen eller ange dess namn.) WhatChild=0 inställningen berättar GenerateDatasets Xml skriver ut informationen för Alla alla för<Entity-attribute-information><Entity>'s in the inport-xml file (om det finns någon) . Det skriver också ut en bakgrundsinformationssammanfattning, inklusive alla nedladdnings-urls listade i inport-xml-filen.
- Titta igenom all denna information (Bakgrundsinformation som GenerateDatasets Xml prints) och besök Download-url (s) För att försöka hitta källdatafilen (s) . Om du hittar den (dem,) ladda ner den (dem,) till en katalog som är tillgänglig förERDDAP. (Om du inte kan hitta några källdatafiler finns det ingen mening i förfarandet.)
- Kör Generate Dataset Xml igen. Om källdatafilen motsvarar en av inport-xml-filens<Entity-attribute-information><Entity>'s, specificera vilkenChild= ThatEntity'sNumber (t.ex. 1, 2, 3, ...) .ERDDAP™kommer att försöka matcha kolumnnamnen i källdatafilen till namn i företagets information, och uppmana att acceptera/avvisa/fixa eventuella avvikelser. Eller om inport-xml-filen inte har några<Entity-attribute-information><Entity>'s, specificera vilkenChild=0.
- I biten avdatasets.xmlDetta gjordes av GenerateDatasets Xml, revidera [global]<addAttributes>] (#global-attributes) efter behov/önskvärd.
- I biten avdatasets.xmlDetta gjordes av GenerateDatasetsXml, lägg till/revidera<dataVariable>] (#datavariable) information som behövs/önskas för att beskriva var och en av variablerna. Se till att du korrekt identifierar varje variabels [Och [Gud]<sourceName>] (#Sourname) (som visas i källan) , [Och [Gud]<destinationName>] (#destinationnamn) (som har fler begränsningar på tillåtna tecken änsourceName) , [Och [Gud]<Enheter>] (#units) (Speciellt om det är entid eller timestamp variabeldär enheterna behöver ange formatet) och [Och [Gud]<missing\_value>] (#missing_värde) ,
- När du är nära att avsluta, upprepade gånger användaDasDdsverktyg för att snabbt se om datasetbeskrivningen är giltig och om datasetet visas iERDDAP™Som du vill ha det till.
Det skulle vara bra om grupper som använder InPort för att dokumentera sina datamängder också skulle användaERDDAP™för att göra de faktiska uppgifterna tillgängliga:
- ERDDAP™är en lösning som kan användas just nu så att du kan uppfyllaNOAA"SOffentlig tillgång till forskningsresultat (Parr) kravJust nu, inte någon vag tid i framtiden.
- ERDDAP™gör de faktiska uppgifterna tillgängliga för användare, inte bara metadata. (Vad bra är metadata utan data?)
- ERDDAP™stöder metadata (I synnerhet enheterna av variabler) Till skillnad från andra dataserverprogram som beaktas. (Vad bra är data utan metadata?) Att använda programvara som inte stöder metadata är att bjuda in data som ska missförstås och missbrukas.
- ERDDAP™är fri och öppen programvara till skillnad från någon annan programvara som beaktas. Pågående utveckling avERDDAP™betalas redan för. Stöd förERDDAP™användare är gratis.
- ERDDAPutseende kan lätt anpassas för att reflektera och markera din grupp (Inte inteERDellerERDDAP) .
- ERDDAP™erbjuder ett konsekvent sätt att komma åt alla datamängder.
- ERDDAP™kan läsa data från många typer av datafiler och från relationsdatabaser.
- ERDDAP™kan hantera stora datamängder, inklusive datamängder där källdata finns i många datafiler.
- ERDDAP™kan skriva data till många typer av datafiler, på användarens begäran, inklusive vetenskapliga datafiltyper som netCDF, ESRI .csv, ochODV .txt.
- ERDDAP™kan göra anpassade grafer och kartor över delmängder av data, baserat på användarens specifikationer.
- ERDDAP™kan hantera icke-data dataset som samlingar av bild, video eller ljudfiler.
- ERDDAP™har installerats och använts påmer än 60 institutioner runt om i världen.
- ERDDAP™anges som en av de dataservrar som rekommenderas för användning inomNOAAi denNOAAData Access ProcedurdirektivTill skillnad från att någon annan programvara beaktas.
- ERDDAP™är en produkt avNMFS///NOAAså att använda den inomNMFSochNOAAbör vara en stolthet förNMFSochNOAA.
Vänligen geERDDAP™Ett f örsök. Om du behöver hjälp, skicka ett meddelande iERDDAP™Google grupp.
addFillValueAttributes
Detta speciella EDDType-alternativ är inte en datasettyp. Det är ett verktyg som kan lägga till \_FillValue attribut till vissa variabler i vissa datamängder. SeaddFillValueAttributes.
FindDuplicate Tid
Detta speciella EDDType-alternativ är inte en datasettyp. Istället berättar det GenerateDatasets Xml att söka genom en samling rutnät.nc (och relaterade) filer för att hitta och skriva ut en lista över filer med dubbla tidsvärden. När det ser på tidsvärdena konverterar det dem från de ursprungliga enheterna till"seconds since 1970-01-01"om olika filer använder olika enheter strängar. Du måste tillhandahålla startkatalogen (med eller utan stigande slash) filnamnet regelbundet uttryck (t.ex. .\\\*************.nc ) och namnet på tidsvariabeln i filerna.
ncdump
Detta speciella EDDType-alternativ är inte en datasettyp. Istället berättar det GenerateDatasets Xml för att skriva ut enncdump\-liknande utskrift av en.nc,.ncml, eller.hdffil. Den använder faktiskt netcdf-javaNCdump, vilket är ett mer begränsat verktyg än C-versionen av NCdump. Om du använder det här alternativet kommer GenerateDatasetsXml att be dig att använda ett av alternativen: "-h" (header) , "-c" (koordinat varierar) "-vall" (Default) "-v var1;var2", "-v var1 (0,0:10,0:20) ". Detta är användbart eftersom det är svårt att veta vad som finns i en.nc,.ncml, eller.hdffil och därmed vilken EDDType du ska ange för GenerateDatasets Xml. För en.ncml-fil, detta kommer att skriva ut ncdump-utgången för resultatet av.ncml-filändringar som tillämpas på den underliggande.nceller.hdffil.
DasDds
- DasDds är ett kommandoradsprogram som du kan använda efter att du har skapat ett första försök på XML för en ny datamängddatasets.xml. Med DasDds kan du upprepade gånger testa och förfina XML. När du använder DasDds-programmet:
- På Windows, första gången du kör DasDds, måste du redigera DasDds. bat fil med en text redaktör för att ändra vägen till java. exe fil så att Windows kan hittaJava.
- DasDds ber dig omdatasetIDför dataset du arbetar med.
- DasDds försöker skapa datasetet med detdatasetID.
- DasDds skriver alltid ut massor av diagnostiska meddelanden. Om du använder "DasDds -verbose", kommer DasDds att skriva ut mer diagnostiska meddelanden än vanligt.
- För säkerhet tar DasDds alltid bort all cachad dataset-information (filer filer) för datamängden innan du försöker skapa datamängden. Detta motsvarar att sätta enhård flaggaSå för aggregerade datamängder kanske du vill justera filenNameRegex tillfälligt för att begränsa antalet filer som datakonstruktören hittar.
- Om dataset inte laddas (oavsett anledning) DasDds kommer att stoppa och visa dig felmeddelandet för det första felet som det hittar.
Försök inte gissa vad problemet kan vara. Läs ERROR-meddelandet noggrant.
Om det behövs, läs de föregående diagnostiska meddelandena för att hitta fler ledtrådar och information också. - Gör en ändring av datamängdens XML för att försöka lösa detta problem
Och låt DasDds försöka skapa dataset igen. - Om du upprepade gånger löser varje problem kommer du så småningom att lösa alla problem
och dataset kommer att laddas.
- Alla DasDds output (diagnostik och resultat) är skrivna på skärmen och bigParentDirectory /logs/DasDds.log.
- Om DasDds kan skapa datamängden kommer DasDds sedan att visa dig.das (Dataset Attribute Structure) ,.dds (Dataset Descriptor Struktur) ochTimeGaps (Tidsluckor) information för datamängden på skärmen och skriv dem till bigParentDirectory /logs/DasDds.out.
- Ofta vill du göra några små ändringar i datasetets XML för att rensa datasetets metadata och köra DasDds.
Bonus Bonus Bonus Bonus Bonus Tredjepartsverktyg:ERDDAP-Lint
ERDDAP-lint är ett program från Rob Fuller och Adam Leadbetter från det irländska marinininstitutet som du kan använda för att förbättra metadata för dinERDDAP™dataset.ERDDAP-lint "innehåller regler och en enkel statisk webbapplikation för att köra vissa verifieringstest mot dinaERDDAP™Server. Alla tester körs i webbläsaren.” som liknar[Unix/Linux lint verktyg](https://en.wikipedia.org/wiki/Lint_(software)Du kan redigera befintliga regler eller lägga till nya regler. SeERDDAP-Lintför mer information.
Detta verktyg är särskilt användbart för datamängder som du skapade för en tid sedan och vill nu uppdatera med dina aktuella metadatapreferenser. Till exempel tidiga versioner av GenerateDatasets Xml gjorde inga ansträngningar för att skapa globaltcreator\_name,creator\_emailcreator\_type, ellercreator\_urlmetadata. Du kan användaERDDAP-lätta för att identifiera de datamängder som saknar dessa metadataattribut.
Tack vare Rob och Adam för att skapa detta verktyg och göra det tillgängligt förERDDAP™gemenskap.
Den grundläggande strukturen av dendatasets.xmlFil
De nödvändiga och valfria taggarna tillåtna i endatasets.xmlfil (och antalet gånger de kan visas) visas nedan. I praktiken, dindatasets.xmlkommer att ha många<dataset>'s tags och endast använda andra taggar inom<erddapDatasets> efter behov.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<erddapDatasets>
<angularDegreeUnits>...</angularDegreeUnits> <!-- 0 or 1 -->
<angularDegreeTrueUnits>...</angularDegreeTrueUnits> <!-- 0 or 1 -->
<cacheMinutes>...</cacheMinutes> <!-- 0 or 1 -->
<commonStandardNames>...</commonStandardNames> <!-- 0 or 1 -->
<convertInterpolateRequestCSVExample /> <!-- 0 or more -->
<convertInterpolateDatasetIDVariableList /> <!-- 0 or more -->
<convertToPublicSourceUrl /> <!-- 0 or more -->
<decompressedCacheMaxGB>...</decompressedCacheMaxGB> <!-- 0 or 1 -->
<decompressedCacheMaxMinutesOld>...</decompressedCacheMaxMinutesOld> <!-- 0 or 1 -->
<drawLandMask>...</drawLandMask> <!-- 0 or 1 -->
<emailDiagnosticsToErdData>...</emailDiagnosticsToErdData> <!-- 0 or 1 -->
<graphBackgroundColor>...</graphBackgroundColor> <!-- 0 or 1 -->
<ipAddressMaxRequests>...</ipAddressMaxRequests> <!-- 0 or 1 -->
<ipAddressMaxRequestsActive>...<ipAddressMaxRequestsActive> <!-- 0 or 1 -->
<ipAddressUnlimited>...<ipAddressUnlimited> <!-- 0 or 1 -->
<loadDatasetsMinMinutes>...</loadDatasetsMinMinutes> <!-- 0 or 1 -->
<loadDatasetsMaxMinutes>...</loadDatasetsMaxMinutes> <!-- 0 or 1 -->
<logLevel>...</logLevel> <!-- 0 or 1 -->
<nGridThreads>...</nGridThreads> <!-- 0 or 1 -->
<nTableThreads>...</nTableThreads> <!-- 0 or 1 -->
<palettes>...</palettes> <!-- 0 or 1 -->
<partialRequestMaxBytes>...</partialRequestMaxBytes> <!-- 0 or 1 -->
<partialRequestMaxCells>...</partialRequestMaxCells> <!-- 0 or 1 -->
<requestBlacklist>...</requestBlacklist> <!-- 0 or 1 -->
<slowDownTroubleMillis>...</slowDownTroubleMillis> <!-- 0 or 1 -->
<subscriptionEmailBlacklist>...</subscriptionEmailBlacklist> <!-- 0 or 1 -->
<unusualActivity>...</unusualActivity> <!-- 0 or 1 -->
<updateMaxEvents>...</updateMaxEvents> <!-- 0 or 1 --><standardLicense>...</standardLicense> <!-- 0 or 1 -->
<standardContact>...</standardContact> <!-- 0 or 1 -->
<standardDataLicenses>...</standardDataLicenses> <!-- 0 or 1 -->
<standardDisclaimerOfEndorsement>...</standardDisclaimerOfEndorsement> <!-- 0 or 1 -->
<standardDisclaimerOfExternalLinks>...</standardDisclaimerOfExternalLinks> <!-- 0 or 1 -->
<standardGeneralDisclaimer>...</standardGeneralDisclaimer> <!-- 0 or 1 -->
<standardPrivacyPolicy>...</standardPrivacyPolicy> <!-- 0 or 1 -->
<startHeadHtml5>...</startHeadHtml5> <!-- 0 or 1 -->
<startBodyHtml5>...</startBodyHtml5> <!-- 0 or 1 -->
<theShortDescriptionHtml>...</theShortDescriptionHtml> <!-- 0 or 1 -->
<endBodyHtml5>...</endBodyHtml5> <!-- 0 or 1 --><user username="..." password="..." roles="..." /> <!-- 0 or more -->
<dataset>...</dataset> <!-- 1 or more -->
</erddapDatasets>
Det är möjligt att andra kodningar kommer att tillåtas i framtiden, men för närvarande rekommenderas endast ISO-8859-1.
XInclude
Ny version 2.25 är stöd för XInclude. Detta kräver att du använder SAX parser<AnvändSaxParser>True</useSaxParser> i din setup.xml. Detta kan låta dig skriva varje dataset i sin egen fil, sedan inkludera dem alla i huvudet.datasets.xmlåteranvända delar av dataset definitioner, eller båda. Om du vill se ett exempel,EDDTestDataset.javaAnger XInclude för att återanvända variabla definitioner.
Anteckningar
Arbeta meddatasets.xmlfilen är ett icke-trivialt projekt. Läs alla dessa anteckningar noggrant. När du väljer enDataset typLäs noga den detaljerade beskrivningen av den.
Välja Dataset Type
I de flesta fall finns det bara enERDDAP™datasettyp som är lämplig för en viss datakälla. I några fall (t.ex.,.ncfiler filer) Det finns några möjligheter, men vanligtvis är en av dem definitivt bäst. Det första och största beslutet du måste göra är: är det lämpligt att behandla datamängden som en grupp multidimensionella arrayer. (om så serEDDGridDatasettyper) eller som en databasliknande tabell över data (om så serEDDTable dataset typer) .
Servera data som är
Vanligtvis finns det ingen anledning att ändra datakällan (t.ex. konvertera filerna till någon annan filtyp) så attERDDAP™kan tjäna den. En av antagandena omERDDAP™är att datakällan kommer att användas som den är. Vanligtvis fungerar detta bra. Vissa undantag är:
- Relationsdatabaser och Cassandra -----ERDDAP™kan tjäna data direkt från relationsdatabaser och Cassandra. Men för säkerhet, lastbalansering och prestandaproblem kan du välja att ställa in en annan databas med samma data eller spara data för attNetCDFv3.ncfiler och harERDDAP™tjäna data från den nya datakällan. SeEDDTableFromDatabaseochEDDTableFromCassandra.
- Inte stödda datakällor -ERDDAP™kan stödja ett stort antal typer av datakällor, men världen är fylld med 1000 (miljoner?) av olika datakällor (I synnerhet datafilstrukturer) . OmERDDAP™Stöder inte din datakälla:
- Om datakällan ärNetCDF .ncfiler, du kan användaNcMLändra datafilerna på flygningen, eller användaNCOatt permanent ändra datafilerna.
- Du kan skriva data till en datakälla typ somERDDAP™stöd.NetCDF-3.ncfiler är en bra, allmän rekommendation eftersom de är binära filer somERDDAP™kan läsa mycket snabbt. För tabelldata, överväga att lagra data i en samling av.ncfiler som använderCF Diskret sampling geometrier (DSG) sammanhängande Ragged Array datastrukturer och så kan hanteras medERDDAP"SEDDTableFromNcCFFiles). Om de är logiskt organiserade (var och en med data för en bit av utrymme och tid) ,ERDDAP™kan utvinna data från dem mycket snabbt.
- Du kan begära att stöd för den datakällan läggs tillERDDAP™genom att maila Chris. John på noaa.gov.
- Du kan lägga till stöd för den datakällan genom att skriva koden för att hantera den själv. SeochERDDAP™Programmers guide
- Hastighet -ERDDAP™kan läsa data från vissa datakällor mycket snabbare än andra. Till exempel, läsningNetCDFv3.ncfiler är snabba och att läsa ASCII filer är långsammare. Och om det finns en stor (>1000) eller stora (>10 000) antal källdatafiler,ERDDAP™svarar på vissa dataförfrågningar långsamt. Vanligtvis är skillnaden inte märkbar för människor. Men om du trorERDDAP™är långsam för en viss datamängd, du kan välja att lösa problemet genom att skriva data till en mer effektiv installation (Vanligtvis: några välstrukturerade,NetCDFv3.ncfiler filer) . För tabular data, seDetta råd.
Hint
Det är ofta lättare att generera XML för en dataset genom att göra en kopia av en fungerande dataset beskrivning i dataset.xml och sedan ändra den.
Kodning av speciella karaktärer
Sedan dessdatasets.xmlär en XML-fil, du måsteoch kod"&", "<", och ">" i något innehåll som "&", "<och ">". Fel:<Titeln > Time & Tides</title> Rätt:<Titeln > Time & Tides</title>
XML tolererar inte syntaxfel
När du redigerar dataset.xml-filen är det en bra idé att verifiera att resultatet ärVälformad XMLgenom att klistra in XML-texten i en XML-kontroll somxmlvalidering.
Felsökning Tips
- Andra sätt att diagnostisera problem med dataset
Förutom de två huvudVerktyg, - Log.txtär en loggfil med allaERDDAPdiagnostiska meddelanden.
- ochDaglig rapporthar mer information än statussidan, inklusive en lista över datamängder som inte laddades och undantagen (fel) De genererade.
- ochStatus Pageär ett snabbt sätt att kontrolleraERDDAPstatus från alla webbläsare. Den innehåller en lista över datamängder som inte laddades (Även om inte de relaterade undantagen) och uppgiftThread statistik (visa utvecklingen avEDDGridKopieraochEDDTableCopyDataset och allaEDDGridFrånFilesellerEDDTableFromFilesdatamängder som använderCacheFromUrl (Men inte cache SizeGB) ) .
- Om du fastnar, se vårsektion om att få ytterligare stöd.
Speciella variabler
- Längden, latitud, höjd (eller djup) och tid (LLAT) Variabel destinationNameS är speciella.
- I allmänhet:
- LLAT variabler är kända förERDDAP™Om axelvariabeln (FörEDDGridDataset) eller datavariabelns (för EDDTable dataset) destinationNameär "längd", "latitud", "höjd", "djup", eller"time".
- Vi uppmuntrar dig starkt att använda dessa standardnamn för dessa variabler när det är möjligt. Ingen av dem krävs. Om du inte använder dessa speciella variabla namn,ERDDAP™kommer inte att känna igen deras betydelse. Till exempel, LLAT variabler behandlas speciellt genom att göra en graf ( datasetID .graph) Om X Axis-variabeln är "längd" och Y Axis-variabeln är "latitud", får du en karta (med hjälp av en standardprojektion och med en landmask, politiska gränser etc.) istället för ett diagram.
- ERDDAP™lägger automatiskt till massor av metadata till LLAT-variabler (Till exempel, "ioos\_category", "enheter", och flera standardrelaterade attribut som "\_CoordinateAxisType") .
- ERDDAP™automatiskt, on-the-fly, lägga till massor av globala metadata relaterade till LLAT-värdena för den valda datadelen (Till exempel "geospatial\_lon\_min") .
- Kunder som stöder dessa metadatastandarder kommer att kunna utnyttja den tillsatta metadatan för att placera data i tid och rum.
- Kunderna kommer att finna det lättare att generera frågor som inkluderar LLAT-variabler eftersom variabelns namn är desamma i alla relevanta datamängder.
- För variabeln "längd" och "latitud":
- AnvändadestinationName"Längd" och "latitud" endast omenheterär grader \ öster och grader \_north, respektive. Om dina data inte passar dessa krav, använd olika variabla namn (x, y, lonRadians, latRadians) .
- Om du har longitud- och latituddata uttryckt i olika enheter och därmed med olikadestinationNames, till exempel lonRadians och latRadians, gör en graf ( datasetID .graph) kommer att göra grafer (Till exempel tidsserier) istället för kartor.
- För "höjd" variabeln och "djup" variabeln:
- AnvändadestinationName"höjd" för att identifiera datans avstånd över havsnivån (positiv="up" värden) . Alternativt kan du använda "höjd" för avstånd under havsnivån om värdena är negativa under havet (eller om du använder till exempel, [Och [Gud]<Att namn="scale\_factor"typ="int">- 1 1</att>] (#scale_factor) För att omvandla djupvärdena till höjdvärden.
- AnvändadestinationName"djup" för att identifiera datans avstånd under havsnivån (positiv="ner" värderingar) .
- En dataset kanske inte har både "höjd" och "djup" variabler.
- För dessa variabla namn,enhetermåste vara "m", "meter" eller "meter". Om enheterna skiljer sig (till exempel fathoms) Du kan använda [Och [Gud]<Att namn="scale\_factor">>>> vissa Värde </att>] (#scale_factor) och [och]<Att namn="enheter">mätare</att>] (#units) att konvertera enheterna till meter.
- Om dina data inte passar dessa krav, använd en annandestinationName (Till exempel överGround, distans ToBottom) .
- Om du känner till den vertikala CRS, ange den i metadata, t.ex. "EPSG:5829" (omedelbar höjd över havsnivån) "EPSG:5831" (omedelbar djup under havsnivån) eller EPSG:5703 (NAVD88 höjd) .
- För"time"Variabel:
- AnvändadestinationName "time"endast för variabler som inkluderar hela datumet+ (eller datum, om det är allt som finns) . Om det till exempel finns separata kolumner för datum och tidOfDay, använd inte variabelnamnet"time".
- Seenheterför mer information om enheterna attribut för tid och tidStamp variabler.
- Tiden variabel och relateradTid Stamp variablerär unika genom att de alltid konverterar datavärden från källans tidsformat (Vad det än är) till ett numeriskt värde (sekunder sedan 1970-01-01T00:00:00Z) eller ett strängvärde (ISO 8601:2004 (E E E E) format format) beroende på situationen.
- När en användare begär tidsdata kan de begära det genom att ange tiden som ett numeriskt värde. (sekunder sedan 1970-01-01T00:00:00Z) eller ett strängvärde (ISO 8601:2004 (E E E E) format format) .
- ERDDAP™har ett verktyg förKonvertera en numerisk Dags att/från en strängtid.
- SeHur hurERDDAPErbjudanden med tiden.
Varför bara två grundläggande datastrukturer?
- Eftersom det är svårt för mänskliga kunder och datorklienter att hantera en komplex uppsättning möjliga datasetstrukturer,ERDDAP™använder bara två grundläggande datastrukturer:
- enNätad datastruktur (till exempel för satellitdata och modelldata) och
- enTabular datastruktur (till exempel för in-situ buoy, station och banor data) .
- Visst, inte alla data kan uttryckas i dessa strukturer, men mycket av det kan. Tabeller är i synnerhet mycket flexibla datastrukturer (Titta på framgången för relationella databasprogram) .
- Detta gör datafrågor lättare att konstruera.
- Detta gör datarespons har en enkel struktur, vilket gör det lättare att tjäna data i en bredare mängd olika standardfiltyper. (som ofta bara stöder enkla datastrukturer) . Detta är den främsta anledningen till att vi sätter uppERDDAP™Detta sätt.
- Detta i sin tur gör det väldigt enkelt för oss (eller någon) att skriva klientprogramvara som fungerar med allaERDDAP™dataset.
- Detta gör det lättare att jämföra data från olika källor.
- Vi är mycket medvetna om att om du är van vid att arbeta med data i andra datastrukturer kan du inledningsvis tro att detta tillvägagångssätt är förenklat eller otillräckligt. Men alla datastrukturer har avvägningar. Ingen är perfekt. Även do-it-all-strukturerna har sina nackdelar: att arbeta med dem är komplext och filerna kan bara skrivas eller läsas med speciella programbibliotek. Om du accepterarERDDAP"Tillvägagångssätt nog för att försöka arbeta med det, kan du upptäcka att det har sina fördelar. (i synnerhet stödet för flera filtyper som kan hålla dataresponserna) . ochERDDAP™glid show (särskiltDatastrukturer glider) pratar mycket om dessa frågor.
- Och även om detta tillvägagångssätt låter konstigt för dig, mestERDDAP™Kunder kommer aldrig att märka - de kommer helt enkelt att se att alla datamängder har en trevlig enkel struktur och de kommer att vara tacksamma för att de kan få data från en mängd olika källor som returneras i en mängd olika filformat.
Dimensioner
- Vad händer om nätvariablerna i källdatamängden inte delar samma axelvariabler?
InomEDDGriddataset, alla datavariabler MÅSTE använda (aktie) alla axelvariabler. Så om en källdatamängd har vissa variabler med en uppsättning dimensioner, och andra variabler med en annan uppsättning dimensioner, måste du göra två datamängder iERDDAP. Du kan till exempel göra enERDDAP™Dataset med titeln "Some Title (vid ytan) Att hålla variabler som bara använder\[Tid\]\[Latitud\]\[Längd\]dimensioner och göra en annanERDDAP™Dataset med titeln "Some Title (På djupet) för att hålla de variabler som använder\[Tid\]\[höjd\]\[Latitud\]\[Längd\]. Eller kanske kan du ändra datakällan för att lägga till en dimension med ett värde (Till exempel höjd = 0) för att göra variablerna konsekventa.
ERDDAP™hanterar inte mer komplicerade datamängder (Till exempel modeller som använder ett mesh av trianglar) bra. Du kan tjäna dessa datamängder iERDDAP™genom att skapa två eller flera datamängder iERDDAP™ (så att alla datavariabler i varje ny datamängd delar samma uppsättning axelvariabler) Men det är inte vad användarna vill ha. För vissa datamängder kan du överväga att göra en vanlig rutnätad version av datamängden och erbjuda det förutom originaldata. Vissa klientprogram kan bara hantera ett vanligt nät, så genom att göra detta når du ytterligare kunder.
Projekterade Gridded Data
Vissa ruttna data har en komplex struktur. Till exempel satellitnivå 2 ("Längs spår") data använder inte en enkel projektion. Modeller (och andra) arbetar ofta med ruttna data om olika icke-cylindriska prognoser (till exempel conic, polar stereografi, tripolar) eller i ostrukturerade nät (En mer komplex datastruktur) . Vissa slutanvändare vill ha dessa data som är, så det finns ingen förlust av information. För dessa kunder,ERDDAP™kan tjäna uppgifterna, det vill säga endast omERDDAP™administratören bryter den ursprungliga datamängden i några datamängder, med varje del inklusive variabler som delar samma axelvariabler. Ja, det verkar konstigt för människor inblandade och det skiljer sig från de flestaOPeNDAPservrar. MenERDDAP™betonar att göra data tillgängliga i många format. Det är möjligt eftersomERDDAP™använder/kräver en mer enhetlig datastruktur. Även om det är lite besvärligt (det vill säga annorlunda än förväntat) ,ERDDAP™kan distribuera de projekterade data.
\[Ja, ja,ERDDAP™kan ha lösare krav för datastrukturen, men hålla kraven för utdataformat. Men det skulle leda till förvirring bland många användare, särskilt nybörjare, eftersom många till synes giltiga förfrågningar om data med olika strukturer skulle vara ogiltiga eftersom data inte skulle passa in i filtypen. Vi fortsätter att komma tillbaka till det nuvarande systemets design.\]
Vissa slutanvändare vill ha data i en lat lon cylindrisk projektion som Equirectangular / platta carrée eller Mercator) för användarvänlighet i olika situationer. För dessa situationer uppmuntrar viERDDAP™administratör för att använda någon annan programvara (NCO??Matlab?? R? IDV? ...??) att ompröva data på en geografisk (Equirectangular projektion/platta carrée) eller annan cylindrisk projektion och tjäna den formen av data iERDDAP™som en annan dataset. Detta liknar vad folk gör när de konverterar satellitnivå 2-data till nivå 3-data. Ett sådant verktyg ärNCOsom erbjuder tilläggsalternativ för regridding data.
GIS och Reprojecting Data
Eftersom GIS-världen ofta är kartorienterad erbjuder GIS-program vanligtvis stöd för reprojecting av data, dvs att planera data på en karta med en annan projektion.
För närvarande,ERDDAP™inte har verktyg för att reproject data. Istället rekommenderar vi att du använder ett externt verktyg för att göra en variant av datamängden, där data har reprojected från sin ursprungliga form till en rektangulär. (Latitud longitude) array lämplig förERDDAP.
Enligt vår mening CF/DAPVärlden är lite annorlunda än GIS-världen och fungerar på en något lägre nivå.ERDDAP™reflekterar det. I allmänhet,ERDDAP™är utformad för att arbeta främst med data (Inte kartor) Och vill inte förändras (t.ex. reproject) dessa data. FörERDDAP™Graderade data är ofta/vanligtvis/helst associerade med lat lon värderingar och en cylindrisk projektion, och inte några projektions x,y värderingar. I alla fall,ERDDAP™gör ingenting med dataprojektionen; det passerar bara data genom, liksom med sin nuvarande projektion, på teorin att en reprojection är en betydande förändring av data ochERDDAP™vill inte vara involverad i betydande förändringar. Även efterföljande användare kan naivt reproject data igen, vilket inte skulle vara lika bra som att bara göra en reprojection. (Så omERDDAP™administratören vill erbjuda data i en annan projektion, böter; reproject the data offline och erbjuda det som en annan dataset iERDDAP. Många satellitbaserade datamängder erbjuds som vad NASA kallar Nivå 2 (Svära) och som nivå 3 (Equirectangular projektion) versioner.) När närERDDAP™Gör kartor (direkt eller viaWMSeller KML) ,ERDDAP™för närvarande bara erbjuder att göra kartor med Equirectangular / plattan carrée projektion som lyckligtvis accepteras av de flesta kartläggningsprogram.
Vi uppmuntrarERDDAP™administratörer att använda någon annan programvara (NCO??Matlab?? R? IDV? ...??) att ompröva data på en geografisk (Equirectangular projektion/platta carrée) eller annan cylindrisk projektion och tjäna den formen av data iERDDAP™som en annan dataset. Detta liknar vad folk gör när de konverterar satellitnivå 2-data till nivå 3-data. Ett sådant verktyg ärNCOsom erbjuder tilläggsalternativ för regridding data.
Vi hoppas attERDDAP™kommer att ha inbyggda verktyg för att erbjuda kartor med andra prognoser i framtiden. Vi hoppas också ha bättre kopplingar till GIS-världen i framtiden. (annat än den nuvarandeWMSServiceservice) . Det är hemskt att i denna ”moderna” värld är länkarna mellan CF/DAPVärlden och GIS är fortfarande så svaga. Båda dessa saker finns på listan To Do. (Om du vill hjälpa, särskilt med att anslutaERDDAP™Till MapServer, vänligen mail Chris. John på noaa.gov.)
Datatyper
ERDDAP™stöder följande datatyper (namnen är fallkänsliga;'u'prefix står för "unsigned"; antalet många av namnen i andra system är antalet bitar) Från:
Byte
- Byte har tecknat heltalsvärden med en rad -128 till 127. I andra system kallas detta ibland int8. Detta kallas "tinyint" av SQL och Cassandra. ERDDAP™konverterarBooleanfrån vissa källor (SQL och Cassandra) till byte iERDDAP™med ett värde på 0=false, 1=true och 127=missing\_value.
ubyte
- ubyte har osignerade heltalsvärden med ett intervall på 0 till 255. I andra system kallas detta ibland uint8.
kort kort kort kort
- kort kort kort kort har tecknat heltalsvärden med en rad -32768 till 32767. I andra system kallas detta ibland int16. Detta kallas "smallint" av SQL och Cassandra.
ushort
- ushort har osignerade heltalsvärden med ett intervall på 0 till 65535. I andra system kallas detta ibland uint16.
Int
- Int har tecknat heltalsvärden med en rad -2147483648 till 2147483647. I andra system kallas detta ibland int32. Detta kallas "integer|Numeriska (??) SQL och "int" av Cassandra.
uint
- uint har osignerade heltalsvärden med ett intervall på 0 till 4294967295. I andra system kallas detta ibland uint32.
länge lång
- länge lång har tecknat heltalsvärden med en rad -9223372036854775808 till 9223372036854775807. I andra system kallas detta ibland int64. Detta kallas "bigint|Numeriska (??) SQL och "bigint" av Cassandra. Eftersom många filtyper inte stöder långa data, är deras användning avskräckt. När det är möjligt, använd dubbel istället (Se nedan) .
ulong
- ulong har osignerade heltalsvärden med en rad 0 till 18446744073709551615 I andra system kallas detta ibland uint64. Eftersom många filtyper inte stöder ulong-data, är deras användning avskräckt. När det är möjligt, använd dubbel istället (Se nedan) .
Flyta
- Flyta är en IEEE 754 flotta med en rad ca +/- 3.402823466e+38. I andra system kallas detta ibland float32. Detta kallas "verkligt|Flyta (??) |Decimal (??) |Numeriska (??) SQL och "float" av Cassandra. Det speciella värdet NaN betyder Not-a-Number. ERDDAP™omvandlar positiva och negativa oändlighetsvärden till NaN.
dubbel dubbel
- dubbel dubbel är en IEEE 754 dubbel med en räckvidd på cirka +/- 1.7976931348623157E+308. I andra system kallas detta ibland float64. Detta kallas "dubbel precision|Flyta (??) |Decimal (??) |Numeriska (??) SQL och "dubbel" av Cassandra. Det speciella värdet NaN betyder Not-a-Number. ERDDAP™omvandlar positiva och negativa oändlighetsvärden till NaN.
Char
- Char En enda, 2-byte (16-bit) Unicode UCS-2 karaktärfrån\u0000 (#0 #0) genom\uffff (#65535) . \uffffDefinitionen är Not-a-Character, jämförbar med ett dubbelt värde av NaN. Användningen av char är avskräckt eftersom många filtyper antingen inte stöder chars eller bara stöder 1-byte chars (Se nedan) . Överväg att använda String istället. Användare kan använda char variabler för att göra grafer.ERDDAP™konvertera karaktärerna till deras Unicode-kodpunktnummer, som kan användas som numeriska data.
String
- String är en sekvens av 0 eller mer, 2-byte (16-bit) Unicode UCS-2 tecken. ERDDAP™använder / tolkar en 0-längdssträng som ett saknat värde.ERDDAP™Stöder inte en riktig null sträng. Den teoretiska maximala stränglängden är 2147483647 tecken, men det finns förmodligen olika problem på olika ställen även med något kortare strängar. AnvändningERDDAPs String för SQL: s karaktär, varchar, karaktär varierande, binär, varbinär, intervall, array, multiset, xml och någon annan data data typ som inte passar rent med någon annan databas som inte passarERDDAP™datatyp. AnvändningERDDAPString för Cassandras "text" och någon annan Cassandra datatyp som inte passar rent med någon annanERDDAP™datatyp.
FöreERDDAP™v2.10,ERDDAP™stödde inte osignerade heltalstyper internt och erbjöd begränsat stöd i sina dataläsare och författare.
Datatypbegränsningar
Du kan tänka påERDDAP™som ett system som har virtuella datamängder och som fungerar genom att läsa data från en datamängds källa till en intern datamodell och skriva data till olika tjänster (t.ex.(OPeN)DAP,WMS) och filtyper som svar på användarförfrågningar.
- Varje ingångsläsare stöder en delmängd av de datatyper somERDDAP™stöd. Så läs data inERDDAP"S interna datastrukturer är inte ett problem.
- Varje output författare stöder också en delmängd av datatyper. Det är ett problem eftersomERDDAPmåste pressa till exempel långa data till filtyper som inte stöder långa data.
Nedan finns förklaringar till begränsningarna (eller ingen) av olika output författare och hurERDDAP™handlar om problemen. Sådana komplikationer är en inneboende del avERDDAP"Syftet med att göra disparata system interoperabelt.
ASCI
- ASCI (.csv,.tsvetc.) Textfiler -
-
Alla numeriska data skrivs via sin String representation (med saknade datavärden som visas som 0-längdsträngar) .
-
Även omERDDAP™skriver långa och ulongvärden korrekt till ASCII textfiler, många läsare (t.ex. kalkylprogram) kan inte korrekt hantera långa och ulongvärden och istället konvertera dem till dubbla värden (med förlust av precision i vissa fall) .
-
Char och String data skrivs via JSON Strings, som hanterar alla Unicode tecken (I synnerhet de "ovanliga" tecknen bortom ASCII #127, t.ex. Euro-karaktären visas som "\u20ac") .
-
JSON
- JSON (.json,.jsonlCSVetc.) Textfiler -
- Alla numeriska data skrivs via sin String representation.
- Char och String data skrivs som JSON Strings, som hanterar alla Unicode tecken (I synnerhet de "ovanliga" tecknen bortom ASCII #127, t.ex. Euro-karaktären visas som "\u20ac") .
- Saknade värden för alla numeriska datatyper visas som null.
.nc3 filer
- .nc3 filer stöder inte ursprungligen några osignerade datatyper. Före CF v1.9 stödde CF inte osignerade heltalstyper. För att hantera detta,ERDDAP™2.10+ följer NUG-standarden och lägger alltid till en "\_Unsigned"-attribut med ett värde av "sann" eller "falsk" för att ange om data är från en osignerad eller signerad variabel. Alla integer attribut är skrivna som signerade attribut (t.ex. byte) med signerade värden (t.ex. en ubytactual\_rangeattribut med värden 0 till 255, framträder som en bytesattribut med värden 0 till -1 (omvänt av de tvås komplementvärde av out-of-range värde). Det finns inget enkelt sätt att veta vilka (signerade) integer attribut bör läsas som osignerade attribut.ERDDAP™stöder attributet "\_Unsigned" när den läser.nc3 filer.
- .nc3 filer stöder inte de långa eller ulong datatyperna.ERDDAP™handlar om detta genom att tillfälligt konvertera dem till att vara dubbla variabler. Dubblar kan exakt representera alla värden upp till +/- 9,007,199,254,740,992 som är 2^53. Detta är en ofullkomlig lösning.Unidatavägrar att göra en mindre uppgradering.nc3 för att hantera detta och relaterade problem, med hänvisning.nc4.4 4. (En stor förändring) som lösningen.
- CF specifikation (före v1.9) sade att det stöder en char data typ men det är oklart om char är avsedd endast som byggstenar av char arrays, som är effektivt Strings. Frågor till deras brevlista gav bara förvirrande svar. På grund av dessa komplikationer är det bäst att undvika char variabler iERDDAP™Använd String-variabler när det är möjligt.
- Traditionellt,.nc3 filer stödde endast strängar med ASCII-kodade (7-bit, #0 - #127) karaktärer. NUG (ochERDDAP) Förlänga det (Börja ~2017) genom att inkludera attributet "\_Encoding" med ett värde av "ISO-8859-1" (en förlängning av ASCII som definierar alla 256 värden av varje 8-bitars karaktär) eller "UTF-8" för att ange hur String-data kodas. Andra kodningar kan vara lagliga men avskräcks.
.nc4 filer
- .nc4 filer stöder allaERDDAP"S datatyper.
NCCSV-filer
NCCSV 1.0-filer stöder inte några osignerade datatyper. NCCSV 1.1+ filerstödja alla osignerade datatyper.
DAP
- (OPeN)DAP (.das, .dds, .asc ASCII-filer och .dods binära filer) -
- (OPeN)DAPhanterar korta, ushort, int, uint, float och dubbla värden korrekt.
- (OPeN)DAPhar en "byte" datatyp som den definierar som osignerad, medan historiskt, TREDDS ochERDDAP™har behandlat "byte" som undertecknat i deras(OPeN)DAPtjänster. För att hantera detta bättre,ERDDAP™2.10+ följer NUG-standarden och lägger alltid till en "\_Unsigned"-attribut med ett värde av "sann" eller "falsk" för att ange om data är vadERDDAP™samtal byte eller ubyte. Alla byte- och ubyte-attribut är skrivna som "byte"-attribut med signerade värden (t.ex. en ubytactual\_rangeattribut med värden 0 till 255, framträder som en bytesattribut med värden 0 till -1 (omvänt av de tvås komplementvärde av out-of-range värde). Det finns inget enkelt sätt att veta vilka "byte" attribut bör läsas som ubyte attribut.
- (OPeN)DAPStöder inte signerade eller osignerade längder.ERDDAP™handlar om detta genom att tillfälligt konvertera dem till att vara dubbla variabler och attribut. Dubblar kan exakt representera alla värden upp till 9,007,199,254,740,992 som är 2^53. Detta är en ofullkomlig lösning.OPeNDAP (organisationen) vägrar att göra en mindre uppgraderingDAP2.0 för att hantera detta och relaterade problem, med hänvisningDAP4.4 4. (En stor förändring) som lösningen.
- För därför(OPeN)DAPhar ingen separat char datatyp och tekniskt endast stöder 1-byte ASCII-tecken (#0 - #127) i Strings, char data variabler kommer att visas som 1-karaktär långa strängar i(OPeN)DAP.das, .dds och .dods svar.
- Tekniskt sett,(OPeN)DAPspecifikation stöder endast strängar med ASCII-kodade tecken (#0 - #127) . NUG (ochERDDAP) Förlänga det (Börja ~2017) genom att inkludera attributet "\_Encoding" med ett värde av "ISO-8859-1" (en förlängning av ASCII som definierar alla 256 värden av varje 8-bitars karaktär) eller "UTF-8" för att ange hur String-data kodas. Andra kodningar kan vara lagliga men avskräcks.
Datatyp kommentarer
- På grund av det dåliga stödet för långa, ulong- och chardata i många filtyper avskräcker vi användningen av dessa datatyper iERDDAP. När det är möjligt, använd dubbla istället för lång och ulong och använd String istället för char.
- Metadata - för(OPeN)DAP.das och .dds svar stöder inte långa eller ulong attribut eller datatyper (och istället visa dem som dubblar) Du kanske istället vill användaERDDAPtabellrepresentation av metadata som ses ihttp.../erddap/ info info info /// datasetID .html webbsida (till exempel, https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (som du också kan få i andra filtyper, t.ex. .csv,.htmlTable,.itx,.json,.jsonlCSV1,.jsonlCSV,.jsonlKVP,.mat,.nc,.nccsv,.tsv,.xhtml) eller.nccsvMetadatarespons (till exempel, https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata Även om.nccsvMetadata är endast tillgänglig för tabular dataset) Båda stöder alla datatyper (särskilt lång, ulong och char) .
Mediafiler
Inte alla data är samlingar av nummer eller text. Vissa datamängder består av eller inkluderar mediafiler, till exempel bild, ljud och videofiler.ERDDAP™har några speciella funktioner för att göra det lättare för användare att få tillgång till mediefiler. Det är en två steg process:
- Gör varje fil tillgänglig via sin egen URL, via ett system som stöder bytesintervallförfrågningar. Det enklaste sättet att göra detta är att sätta filerna i en katalog somERDDAP™har tillgång till. (Om de är i en behållare som en.zipfil, unzip dem, även om du kanske vill erbjuda.zipfil till användare också.) Gör enEDDTableFromFileNamesdataset för att göra dessa filer tillgängliga viaERDDAP™särskilt viaERDDAP"S"files"Systemsystem.
Alla filer som görs tillgängliga via EDDTableFromFileNames ochERDDAP"S"files"Systemstödbyte range requests. Normalt när en kund (t.ex. en webbläsare) Gör en begäran till en URL, det får hela filen som svar. Men med en byte range begäran anger begäran en rad byte från filen, och servern returnerar endast dessa byte. Detta är relevant här eftersom ljud- och videospelare i webbläsare bara fungerar om filen kan nås via bytesintervallförfrågningar.
Valfritt: Om du har mer än en dataset med tillhörande mediafiler kan du göra bara en EDDTableFromFileNames som har en undermapp för varje grupp filer. Fördelen är att när du vill lägga till nya mediefiler för en ny dataset, allt du behöver göra är att skapa en ny mapp och lägga filerna i den mappen. Mappen och filerna läggs automatiskt till i EDDTableFromFileNames dataset.
- Valfritt: Om du har en dataset som innehåller referenser till mediefiler, lägg till den iERDDAP. Du kan till exempel ha en .csv-fil med en rad för varje gång någon såg en val och en kolumn som inkluderar namnet på en bildfil relaterad till den observationen. Om namnet på bildfilen bara är filnamnet, t.ex. Img20141024T192403Z, inte en fullständig URL, måste du lägga tillfilAccessBase Url och/eller fileAccessSuffixattribut till metadata för detdataVariablesom specificerar basURL och suffix för dessa filnamn. Om du gjorde filerna tillgängliga via EDDTableFromFileNames, kommer webbadressen att vara i formuläret basUrl /erddap/files/ datasetID /// Till exempel,
<att name="fileAccessBaseUrl">*someBaseURL*</a>
<att name="fileAccessSuffix">.png</a>
Om det finns en.zipeller annan behållarfil med alla mediefiler relaterade till en datavariabel rekommenderar vi att du också gör den filen tillgänglig för användare (se steg 1 ovan) och sedan identifiera den med enfilAccessArchive Urlattribut.
\[Börjar iERDDAP™v1.82\]Om du gör det första steget ovan (eller båda stegen) När en användare serERDDAP™ "files"System för dataset (eller ber att se en delmängd av datamängden via en.htmlTableom du gjorde det andra steget) ,ERDDAP™kommer att visa en ikon till vänster om filnamnet. Om användaren hoppar över den ikonen kommer de att se en popup som visar bilden eller en ljudspelare eller en videospelare. Webbläsare stöder endast ett begränsat antal typer av
- bild bild bild bild bild (vanligtvis .gif, .jpg och .png) ,
- ljud (vanligtvis .mp3, .ogg och .wav) och
- Videofiler (vanligtvis .mp4, .ogv och . Webm) .
Stöd varierar med olika versioner av olika webbläsare på olika operativsystem. Så om du har ett val av vilken filtyp som ska erbjudas, är det vettigt att erbjuda dessa typer.
Eller om en användare klickar på filnamnet som visas på enERDDAP™Webbsidan, deras webbläsare kommer att visa bilden, ljud eller videofil som en separat webbsida. Detta är mest användbart för att se en mycket stor bild eller video skalas till full skärm, istället för i en popup.
Arbeta med AWS S3-filer
Amazon Web Service (AWS) är en säljare avcloud computingtjänster.S3är ett objektlagringssystem som erbjuds av AWS. Istället för det hierarkiska systemet av kataloger och filer av ett traditionellt filsystem (Som en hårddisk i din PC) S3 erbjuder bara "buckets" som håller "objekt" (Vi kallar dem"files") .
För ASCII filer (t.ex. .csv) ,ERDDAP™kan arbeta med filerna i hinkarna direkt. Det enda du behöver göra är att ange det<filDir> för dataset med ett specifikt format för AWS-hinken, t.ex. https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Du bör inte använda<cacheFromUrl> Se nedan för detaljer.
Men för binära filer (t.ex.,.nc.grib, .bufr, och.hdffiler filer) Du behöver använda<cacheFromUrl> systemet som beskrivs nedan.ERDDAPnetcdf-java (som skallERDDAP™Använder för att läsa data från dessa filer) , och andra vetenskapliga dataprogram är utformade för att arbeta med filer i ett traditionellt filsystem som erbjuderblocknivåtillgång till filer (som tillåter att läsa bitar av en fil) S3 erbjuder endastfilnivå (Objekt objekt) tillgång till filer (som endast tillåter att läsa hela filen) . AWS erbjuder ett alternativ till S3,Elastisk blockbutik (EBS) ), som stöder blocknivååtkomst till filer men det är dyrare än S3, så det används sällan för bulklagring av stora mängder datafiler. (När folk säger att lagra data i molnet (S3) är billigt, det är vanligtvis ett äpple till orange jämförelse.)
S3 Buckets
Innehållet i en hink. Nycklar. Objekt. Delimiters.
Tekniskt sett är S3-hinkarna inte organiserade i en hierarkisk filstruktur som ett filsystem på en dator. Istället innehåller buckets bara "objekt" (filer filer) Var och en har en "nyckel" (Ett namn) . Ett exempel på en nyckel i den noaa-goes17 hinken är
ABI-L1b-RadC/2019/235/22/OR\\_ABI-L1b-RadC-M6C01\\_G17\\_s20192352201196\\_e20192352203569\\_c20192352204013.nc
motsvarande URL för det objektet är
AWS stöder en liten variation i hur denna URL är konstruerad, menERDDAP™kräver detta specifika format:
https://bucketName.s3.region.amazonaws.com/key
Det är vanligt att, som med detta exempel, göra nyckelnamn ser ut som en hierarkisk väg plus ett filnamn, men tekniskt sett är de inte. Eftersom det är vanligt och användbart,ERDDAP™behandlar nycklar med / som om de är en hierarkisk väg plus filnamn, och denna dokumentation kommer att hänvisa till dem som sådan. Om en hinks nycklar inte använder /'s (t.ex. en nyckel som
ABI-Lib.2018.052.22.OR\_ABI-L1b-RadM2-M3C10\_G16\_s201805222475), sedanERDDAP™behandlar bara hela nyckeln som ett långt filnamn.
Privat vs offentliga hinkar ----- Administratören för S3-hinken kan göra hinken och dess innehåll offentliga eller privata. Om allmänheten kan någon fil i hinken laddas ner av någon som använder URL för filen. Amazon har enÖppna dataProgram som är värd för offentliga dataset (inklusive data frånNOAANASA och USGS) gratis och tar inte betalt för någon att ladda ner filerna från dessa hinkar. Om en hink är privat, filer i hinken är endast tillgängliga för auktoriserade användare och AWS tar ut en avgift (vanligen betalas av hinkens ägare) för att ladda ner filer till en icke-AWS S3-dator.ERDDAP™kan arbeta med data i offentliga och privata hinkar.
AWS Credentials
För att göra det så attERDDAP™kan läsa innehållet i privata hinkar, du behöver AWS-uppgifter och du måste lagra en referensfil på standardplatsen så attERDDAP™kan hitta informationen. Se AWS SDK förJava2.x dokumentation:Sätt standard credentials. (Alternativet att lagra värdena somJavakommandoradsparametrar i\[Tomcat\]/bin/setenv.sh kan vara ett bra alternativ.)
AWS /files/
- /filer/system -- ochERDDAP™ /filer/systemtillåter användare att ladda ner källfilerna för en dataset. Vi rekommenderar att du slår på detta för alla datamängder med källfiler eftersom många användare vill ladda ner de ursprungliga källfilerna.
- Om filerna finns i en privat S3 hink, kommer användarens begäran att ladda ner en fil hanteras avERDDAP™, som kommer att läsa data från filen och sedan överföra den till användaren, vilket ökar belastningen på dinERDDAP™Använd inkommande och utgående bandbredd och gör dig (ochERDDAP™Administratör) betala data egress avgift till AWS.
- Om filerna finns i en offentlig S3-hink kommer användarens begäran om att ladda ner en fil att omdirigeras till AWS S3-adressen för den filen, så data kommer inte att flöda igenomERDDAP™och därmed minska belastningen påERDDAP. Och om filerna finns i en Amazon Open Data (Gratis gratis) Offentlig hink, då du (ochERDDAP™Administratör) behöver inte betala någon data egress avgift till AWS. Således finns det en stor fördel med data från allmänheten (Inte privat) S3 hinkar och en stor fördel att servera data från Amazon Open Data (Gratis gratis) Buckets.
ERDDAP™och AWS S3 Buckets
ERDDAP™och AWS S3 Buckets
Lyckligtvis, efter mycket ansträngning,ERDDAP™har ett antal funktioner som gör det möjligt att hantera de inneboende problemen med att arbeta med S3:s blocknivååtkomst till filer på ett rimligt effektivt sätt:
- \[Disclaimer: Att arbeta med AWS S3 hink är mycket extra arbete. AWS är ett stort ekosystem av tjänster och funktioner. Det finns mycket att lära sig. Det tar tid och ansträngning, men det är do-able. Var tålmodig och du får saker att fungera. Titta/be om hjälp
(b)AWS dokumentationwebbplatser somStack Overflowoch regelbunden
ERDDAP™SupportalternativOm/när du fastnar.\]
- Det kan vara svårt att ens ta reda på katalogen struktur och filnamn på filerna i en S3 hink.ERDDAP™har en lösning för detta problem: EDDTableFromFileNames har en speciell\*\*FrånOnTheFlyalternativet som låter dig göra en EDDTableFromFileNames dataset som gör det möjligt för användare att surfa på innehållet i en S3-hink (och ladda ner filer) via datasetets"files"Alternativ. Det finns enExempel på detta nedan.
- ERDDAP™kan läsa data frånexternt komprimerade datafilerSå det är bra om filerna på S3 lagras som.gz,.gzip,.bz2.Z eller andra typer av externt komprimerade datafiler, som dramatiskt kan (2 - 20X) skär ner på fillagringskostnader. Det finns ofta ingen tidsstraff för att använda externt komprimerade filer, eftersom tiden sparas genom att överföra en mindre fil från S3 tillERDDAPungefär balanserar den extra tid som behövs förERDDAP™att dekomprimera filen. För att använda den här funktionen måste du bara se till att datasetets<FilnamnRegex> möjliggör komprimerad filtyp (t.ex. genom att lägga till (|.gz) till slutet av regex) .
- För det vanligaste fallet, där du har enERDDAP™installerad på din dator för test / utveckling och där datamängden har binära datafiler som lagras som objekt i en S3-hink, ett tillvägagångssätt för att få datamängden iERDDAP™är:
-
Skapa en katalog på din dator för att hålla några testdatafiler.
-
Ladda ner två datafiler från källan till den katalog du just skapat.
-
AnvändningGenerateDatasetsXmlför att generera biten avdatasets.xmlför dataset baserat på de två lokala datafilerna.
-
Kontrollera att dataset fungerar som önskat medDasDdsoch/eller din lokalaERDDAP.
Följande steg gör en kopia av dataset (som kommer att få data från S3 hink) på en offentligERDDAP.
-
Kopiera biten avdatasets.xmlför dataset tilldatasets.xmlför allmänhetenERDDAP™Det kommer att tjäna data.
-
Skapa en katalog på allmänhetenERDDAP"S lokal hårddisk för att hålla en cache av tillfälliga filer. Katalogen kommer inte att använda mycket diskutrymme (se cacheSizeGB nedan) .
-
Ändra värdet av datasetets<filDir> tag så att den pekar på katalogen du just skapat (Även om katalogen är tom) .
-
Lägg till enCacheFromUrltagga som specificerar datasetets hinknamn och valfritt prefix (dvs. katalog) i den specifikaS3 URL-format somERDDAP™Kraven.
-
Lägg till en [<cacheSizeGB>] (#cachefromurl) tag till datasetets xml (10 är ett bra värde för de flesta dataset) Att berättaERDDAP™begränsa storleken på den lokala cache (dvs, försök inte att cache alla fjärrfiler) .
-
Se om det fungerar offentligtERDDAP. Observera att första gångenERDDAP™laddar datamängden, det tar lång tid att ladda, eftersomERDDAP™måste ladda ner och läsa alla datafiler.
-
Om datamängden är en stor samling av stora rutnät datafiler, kommer detta att ta mycket lång tid och vara opraktiskt. I vissa fall, för ruttna datafiler,ERDDAP™kan utvinna nödvändig information (t.ex. tidspunkten för data i en rutnät datafil) från filnamnet och undvik detta problem. SeAggregation via Filnamn.
- Optionellt (men särskilt för EDDTableFromFiles dataset) Du kan lägga till ennThreadstagga till dataset för att berättaERDDAPatt använda mer än 1 tråd när du svarar på en användares begäran om data. Detta minimerar effekterna av fördröjningen som uppstår närERDDAP™Läser datafiler från (fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärr fjärrfjärrfjärr fjärrfjärr fjärrfjärr fjärr fjärrfjärr fjärrfjärr fjärrfjärrfjärrfjärr fjärr fjärr fjärrfjärr fjärrfjärrfjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr fjärr f) AWS S3 hinkar in i den lokala cache och (Kanske kanske kanske) dekomprimera dem.
AWS S3 öppna data
Som en del avNOAA"SBig Data Program,NOAAhar partnerskap med fem organisationer, inklusive AWS, "för att utforska de potentiella fördelarna med att lagra kopior av viktiga observationer och modellutgångar i molnet för att möjliggöra datorer direkt på data utan att kräva ytterligare distribution". AWS innehåller de datamängder som den får frånNOAAsom en del av programmet för att erbjuda allmänheten tillgång till en stor samling avÖppna data på AWS S3från vilken dator som helst, oavsett om det är en Amazon-dator (En hyrd dator) på AWS-nätverket eller din egen dator på något nätverk. Exemplet nedan förutsätter att du arbetar med en allmänt tillgänglig dataset.
Få tillgång till filer i en AWS S3 Bucket
För en privat S3 data hink måste hinkens ägare ge dig tillgång till hinken. (Se AWS dokumentation.)
I alla fall behöver du ett AWS-konto eftersom AWS SDK förJava (som skallERDDAP™Använder för att hämta information om innehållet i en hink) kräver AWS-kontouppgifter. (mer på detta nedan)
ERDDAP™Du kan bara få tillgång till AWS S3-hinkarna om du anger [<cacheFromUrl>] (#cachefromurl) (eller<filDir>) i ett specifikt format:
https://bucketName.s3.aws-region.amazonaws.com/prefix/
där var
- BucketName är den korta formen av hinknamnet, t.ex. noaa-goes17.
- Aws-regionen, t.ex. us-east-1, är från kolumnen "Region" i en av tabellerna iAWS service endpointsdär hinken faktiskt ligger.
- Prefixet är valfritt. Om det är närvarande måste det sluta med'/'.
Till exempel, https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Detta URL-format är en av AWS S3-rekommendationer: seTillgång till en hinkochDenna beskrivning av prefix.ERDDAP™kräver att du kombinerar bucket URL och valfri prefix i en URL för att ange<cacheFromUrl> (eller<filDir>) där filerna finns.
Test Public AWS S3 Buckets
För offentliga hinkar kan du och bör testa bucket URL av AWS S3-katalogen i din webbläsare, t.ex., https://noaa-goes17.s3.us-east-1.amazonaws.com Om bucket URL är korrekt och lämplig förERDDAPDet kommer att returnera ett XML-dokument som har (partiell) Lista över innehållet i den hinken. Tyvärr hela URL (Bucket URL plus prefix) attERDDAP™vill ha en viss dataset fungerar inte i en webbläsare. AWS erbjuder inte ett system för att bläddra i hierarkin av en hink lätt i din webbläsare. (Om det är felaktigt, vänligen maila Chris. John på noaa.gov. Annars, Amazon, lägg till stöd för detta!)
Visa innehållet i en hink
S3 hink innehåller ofta ett par kategorier av filer, i ett par pseudo underkataloger, som kan bli ett par avERDDAP™dataset. Att göraERDDAP™datamängder, du behöver veta startkatalogen för<cacheFromUrl> (eller<filDir>) och formatet för filnamnen som identifierar den delmängden av filer. Om du försöker visa hela innehållet i en hink i en webbläsare, kommer S3 bara att visa dig de första 1000 filer, vilket är otillräckligt. För närvarande är det bästa sättet för dig att se allt innehåll i en hink att göra enEDDTableFromFileNamesDataset (på din PCERDDAP™och/eller på din publikERDDAP) , som också ger dig ett enkelt sätt att bläddra i katalogen struktur och ladda ner filer. och<filDir> för det kommer att vara den URL du gjort ovan, t.ex. https://noaa-goes17.s3.us-east-1.amazonaws.com .\[Varför erbjuder inte AWS S3 ett snabbt och enkelt sätt för alla att göra detta utan ett AWS-konto?\]Observera att när jag gör det på min dator på ett icke-Amazon-nätverk verkar det som att Amazon saktar ner svaret på en trickle (ca 100 (??) filer per chunk) Efter de första bitarna (1000 filer per chunk) laddas ner. Eftersom buckets kan ha ett stort antal filer (Noaa-goes17 har 26 miljoner) , att få allt innehåll i en hink kan ta EDDTableFromFileNames flera timmar (t.ex. 12!) För att avsluta.\[Amazon, är det rätt?\]
Gör en EDDTable FromFileNames Dataset med en AWS S3 Bucket
Om du har ett hinknamn, men inte redan har en lista över filer i S3-hinken eller prefixet som identifierar platsen för relevanta filer i hinken, använd instruktionerna nedan för att göra en EDDTableFromFileNames dataset så att du kan bläddra i katalogen hierarki S3-hinken viaERDDAP"S"files"system.
- Öppna ett AWS-konto ERDDAP™AnvänderAWS SDK förJavaför att få bucket information från AWS, så du måsteskapa och aktivera ett AWS-konto. Det är ett ganska stort jobb, med massor av saker att lära sig.
- Sätt dina AWS-krediter därERDDAP™kan hitta dem. Följ instruktionerna påStäll in AWS Credentials och Region for DevelopmentSåERDDAP™ (specifikt AWS SDK förJava) kommer att kunna hitta och använda dina AWS-uppgifter. OmERDDAP™kan inte hitta referenser, du kommer att se en Java.lang. IllegalArgumentException: profilfilfil kan inte vara noll fel iERDDAPs log.txt-fil.
Tips för Linux och Mac OS: credentials-filen måste vara i hemkatalogen för användaren som kör Tomcat (ochERDDAP) (För den här punkten antar vi användar=tomcat) i en fil som kallas ~/.aws/credentials. Anta inte att ~ är /home /tomcat - faktiskt använda cd ~ för att ta reda på var operativsystemet tänker ~ för användaren =tomcat är. Skapa katalogen om den inte existerar. Också, efter att du satte credentials-filen på plats, se till att användaren och gruppen för filen är tomcat och sedan använda chmod 400-uppgifter för att se till att filen är lätt för användaren =tomcat.
- Skapa bucket URL iformat detERDDAP™Kravent.ex., https://noaa-goes17.s3.us-east-1.amazonaws.com och (för offentliga hinkar) Testa den i en webbläsare för att se till att den returnerar ett XML-dokument som har en partiell lista innehållet i den hinken.
- AnvändningGenerateDatasetsXmlatt skapa enEDDTableFromFileNamesDataset:
-
För startkatalogen, använd denna syntax: \\O frånOnTheFly, YourBucketUrl till exempel, \\*FrånOnTheFly, https://noaa-goes17.s3.us-east-1.amazonaws.com/
-
Filnamn regex? . \************************************************************************************************************************************************************************************************************************************************************
-
Återkommande? sanning sant
-
Reload EveryNMinutes? 10080
-
infoUrl?? https://registry.opendata.aws/noaa-goes/
-
institution?NOAA
-
Sammanfattning? ingenting ingenting (ERDDAP™Skapa en anständig sammanfattning automatiskt.)
-
Titeln? ingenting ingenting (ERDDAP™Skapa en anständig titel automatiskt.) Som vanligt bör du redigera den resulterande XML för att verifiera korrekthet och göra förbättringar innan massan av datamängder använder den idatasets.xml.
-
- Om du följer anvisningarna ovan och laddar datasetet iERDDAPDu har skapat en EDDTableFromFiles dataset. Som ett exempel, och för att göra det lättare för alla att surfa och ladda ner filer från AWS Open Data hinkarna, har vi skapat EDDTableFromFileNames dataset (se listan på
https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ för nästan allaAWS S3 Open Data-hinkarna.
\[De få hinkarna som vi inte inkluderade antingen har ett stort antal filer i rotkatalogen. (mer än vad som kan laddas ner på en rimlig tid) eller inte tillåta allmänhetens tillgång (Är de inte alla tänkta att vara offentliga?) eller är Requester Pays buckets (t ex Sentinel) .\]
Om du klickar på"files"länk för en av dessa datamängder, du kan bläddra i katalogen träd och filer i den S3 hink. På grund av vägen\\\*frånOnTheFly EDDTableFromFiles fungerar, dessa kataloglistor är alltid helt uppdaterade eftersomERDDAP™Får dem på flygningen. Om du klickar på katalogens träd till ett faktiskt filnamn och klickar på filnamnet,ERDDAP™omdirigera din begäran till AWS S3 så att du kan ladda ner filen direkt från AWS. Du kan sedan inspektera den filen.
Problem? Om din EDDTableFromFiles inte laddas inERDDAP™ (eller DasDds) Titta i log.txt-filen för ett felmeddelande. Om du ser en Java.lang. IllegalArgumentException: profilfilfil kan inte vara null fel, problemet är att AWS SDK förJava (används avERDDAP) Hittar inte credentials-filen. Se referensinstruktionerna ovan.
Det är olyckligt att AWS inte bara tillåter människor att använda en webbläsare för att visa innehållet i en offentlig hink.
Då kan du göraERDDAP™datamängder som ger användarna tillgång till data i filerna.
Se instruktionerna iERDDAP™och S3 Buckets (ovanför) .
För provet EDDTableFromFileNames dataset som du gjorde ovan, om du gör lite poking runt med katalogen och filnamn i katalogen träd, blir det klart att toppnivå katalogen namn (till exempel ABI-L1b-RadC) motsvarar vadERDDAP™skulle kalla separata dataset. Den hink du arbetar med kan vara liknande. Du kan sedan fortsätta skapa separata datamängder iERDDAP™för var och en av dessa datamängder, t.ex.,
https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Som<cacheFromUrl>. Tyvärr verkar alla datamängder i hinken vara nivå 1 eller nivå 2 datamängder, somERDDAP™ är inte särskilt bra påeftersom datamängden är en mer komplicerad samling av variabler som använder olika dimensioner.
NcML filer
NcML-filer låter dig ange ändringar på flygningen till en eller flera ursprungliga källaNetCDF (v3 eller v4) .nc.grib, .bufr, eller.hdf (v4 eller v5) filer och sedanERDDAP™behandla.ncml filer som källfiler.ERDDAP™Dataset accepterar.ncml filer när.ncfiler förväntas. NcML-filerna måste ha förlängningen.ncml. SeUnidataNcML dokumentation. NcML är användbart eftersom du kan göra vissa saker med det (Till exempel göra olika ändringar i olika filer i en samling, inklusive att lägga till en dimension med ett specifikt värde till en fil) att du inte kan göra medERDDAP"Sdatasets.xml.
- Förändringar till en.ncml-filens senasteModifierade tid kommer att leda till att filen laddas om när datamängden laddas om, men ändras till den underliggande.ncdatafiler kommer inte att märkas direkt.
- Tips: NcML är\*väldigt mycket väldigt mycket\*känslig för order av vissa objekt i NcML-filen. Tänk på NcML som ange en serie instruktioner i den angivna ordningen, med avsikt att ändra källfilerna (staten i början/toppen av NcML-filen) i destinationsfilerna (staten i slutet/botten av NcML-filen) .
Ett alternativ till NcML ärNetCDFOperatörer (NCO) . Den stora skillnaden är att NcML är ett system för att göra ändringar på flygningen (Så källfilerna ändras inte) , medanNCOkan användas för att göra ändringar (eller nya versioner av) filerna. Båda bådaNCONcML är mycket, mycket flexibel och låter dig göra nästan alla ändringar du kan tänka på filerna. För båda kan det vara utmanande att räkna ut exakt hur man gör vad du vill göra - kontrollera webben för liknande exempel. Båda är användbara verktyg för att förbereda netCDF ochHDFfiler för användning medERDDAPi synnerhet att göra förändringar bortom vadERDDAPManipulationssystem kan göra.
Exempel #1: Lägga till en tidsdimension med ett enda värde Här är en.ncml-fil som skapar en ny yttre dimension (Tid, med ett värde: 1041379200) och lägger till den dimensionen till bildvariabeln i filen A2003001.L3m\_DAY\_PIC\_pic\_4km.ncFrån:
<netcdf xmlns='https://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2'>
<variable name='time' type='int' shape='time' />
<aggregation dimName='time' type='joinNew'>
<variableAgg name='pic'/>
<netcdf location='A2003001.L3m\\_DAY\\_PIC\\_pic\\_4km.nc' coordValue='1041379200'/>
</aggregation>
</netcdf>
Exempel #2: Ändra ett befintligt tidsvärde Ibland källan.ncfilen har redan en tidsdimension och tidsvärde, men värdet är felaktigt (för dina ändamål) . Detta detta.ncml-filen säger: för datafilen heter ""19810825230030-NCEI ...", för dimensionsvariabeln"time"Ange enhetsattributet som "andra sedan 1970-01-01T00:00:00Z" och ange tidsvärdet till 367588800.
<netcdf xmlns='https://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2'
location="19810825230030-NCEI-L3C\\_GHRSST-SSTskin-AVHRR\\_Pathfinder-PFV5.3\\_NOAA07\\_G\\_1981237\\_day-v02.0-fv01.0.nc">
<variable name="time">
<attribute name='units' value='seconds since 1970-01-01T00:00:00Z' />
<values>367588800</values>
</variable>
</netcdf>
NetCDFOperatörer (NCO)
netCDF-operatörer (NCO) utgör ett dussin fristående, kommandoradsprogram som tar netCDF\[v3 eller v4\],HDF \[v4 eller v5\],\[grib, .bufr,\]och/ellerDAPfiler som inmatning, sedan köra (t.ex. härleda nya data, beräkna statistik, tryck, hyperslab, manipulera metadata) och mata ut resultaten till skärmen eller filer i text, binära eller netCDF-format.NCOBiståndsanalys av elnätsvetenskapliga data. Shell-command stil avNCOtillåter användare att manipulera och analysera filer interaktivt, eller med uttrycksfulla skript som undviker några överskridande programmiljöer på högre nivå. (frånNCOHomePage) .
Ett alternativ tillNCOär attNcML. Den stora skillnaden är att NcML är ett system för att göra ändringar på flygningen (Så källfilerna ändras inte) , medanNCOkan användas för att göra ändringar (eller nya versioner av) filerna. Båda bådaNCONcML är mycket, mycket flexibel och låter dig göra nästan alla ändringar du kan tänka på filerna. För båda kan det vara utmanande att räkna ut exakt hur man gör vad du vill göra - kontrollera webben för liknande exempel. Båda är användbara verktyg för att förbereda netCDF ochHDFfiler för användning medERDDAPi synnerhet att göra förändringar bortom vadERDDAPManipulationssystem kan göra.
Du kan till exempel användaNCOför att göra enheterna i tiden variabel konsekvent i en grupp filer där de inte var konsekvent ursprungligen. Eller du kan användaNCOAnsökanscale\_factorochadd\_offseti en grupp filer därscale\_factorochadd\_offsethar olika värden i olika källfiler. (Eller du kan nu hantera dessa problem iERDDAP™via via viaEDDGridFrånNcFilesUnpackedSom är en variant avEDDGridFromNcFiles som packar upp packade data och standardiserar tidsvärden på låg nivå för att hantera en samling filer som har olikascale\_factors ochadd\_offseteller olika tidsenheter.)
NCOär fri och öppen programvara som använderGPL 3.0licens.
Exempel #1: Gör enheter konsekvent
EDDGridFromFiles och EDDTable Från filer insisterar att enheterna för en viss variabel är identiska i alla filer. Om några av filerna är trivialt (inte funktionellt) skiljer sig från andra (t.ex. tidsenheter
"andar sedan 1970-01-01 00:00:00 UTC" kontra
"seconds since 1970-01-01T00:00:00Z"Du kan användaNCO"Sncattedatt ändra enheterna i alla filer för att vara identiska med
nco/ncatted -a enheter,time,o,c,'andar sedan 1970-01-01T00:00:00Z'.nc
\[För många problem som detta i EDDTableFrån... Filer dataset, du kan nu användaStandardisera Vad är vadAtt berättaERDDAPStandardisera källfilerna när de läses inERDDAP.\]
Gränser till storleken på en dataset
Du kommer att se många referenser till "2 miljarder" nedan. Mer exakt, det är en hänvisning till 2,147,483,647 (2^31-1) , vilket är det maximala värdet av ett 32-bitars signerat heltal. på vissa datorspråk, till exempelJava (som skallERDDAP™är skrivet i) Det är den största datatypen som kan användas för många datastrukturer. (Till exempel storleken på en array) .
För String värden (till exempel för variabla namn, attributnamn, String attributvärden och String datavärden) Det maximala antalet tecken per String inERDDAP™är ~2 miljarder. Men i nästan alla fall kommer det att finnas små eller stora problem om en sträng överstiger en rimlig storlek. (80 tecken för variabla namn och attributnamn och 255 tecken för de flesta String-attributvärden och datavärden) . Till exempel kommer webbsidor som visar långa variabla namn att vara besvärligt breda och långa variabla namn att trunceras om de överstiger gränsen för svarsfiltypen.
För gridded dataset:
- Det maximala antaletaxisVariables är ~2 miljarder. Det maximala antaletdataVariables är ~2 miljarder. Men om en dataset har >100 variabler kommer det att vara besvärligt för användare att använda. Och om en dataset har >1 miljoner variabler behöver din server mycket fysiskt minne och det kommer att finnas andra problem.
- Den maximala storleken på varje dimension (axisVariable) är ~2 miljarder värden.
- Jag tror att det maximala antalet celler (Produkten av alla dimensioner) är obegränsad, men det kan vara ~ 9e18.
För tabular dataset:
- Det maximala antaletdataVariables är ~2 miljarder. Men om en dataset har >100 variabler kommer det att vara besvärligt för användare att använda. Och om en dataset har >1 miljoner variabler behöver din server mycket fysiskt minne och det kommer att finnas andra problem.
- Det maximala antalet källor (Till exempel filer) Det kan aggregeras är ~2 miljarder.
- I vissa fall det maximala antalet rader från en enskild källa (till exempel en fil, men inte en databas) är ~2 miljarder rader.
- Jag tror inte att det finns andra gränser.
För både ruttna och tabelldatamängder finns det några interna gränser för storleken på den delmängd som kan begäras av en användare i en enda begäran. (ofta relaterad till >2 miljarder av något eller ~9e18 av något) , men det är mycket mer troligt att en användare kommer att träffa de filtypspecifika gränserna.
- NetCDFversion 3.ncfiler är begränsade till 2 GB byte. (Om detta verkligen är ett problem för någon, låt mig veta: Jag kan lägga till stöd förNetCDFversion 3.nc64-bitars förlängning ellerNetCDFVersion 4, vilket skulle öka gränsen avsevärt, men inte oändligt.)
- Webbläsare kraschar efter endast ~ 500 MB data, såERDDAP™begränsar svaret på.htmlTableFörfrågningar till ~ 400 MB data.
- Många dataanalysprogram har liknande gränser (Till exempel är den maximala storleken på en dimension ofta ~ 2 miljarder värden) Så det finns ingen anledning att arbeta hårt för att komma runt de filtypspecifika gränserna.
- Filtypspecifika gränser är användbara genom att de förhindrar naiva förfrågningar om riktigt stora mängder data. (Till exempel "ge mig all denna datamängd" när datamängden har 20TB data) som skulle ta veckor eller månader att ladda ner. Ju längre nedladdningen, desto mer sannolikt kommer det att misslyckas av olika skäl.
- Filtypspecifika gränser är användbara genom att de tvingar användaren att hantera rimligt stora undergrupper. (Till exempel, hantera en stor rutnätsdataset via filer med data från en gång punkt vardera) .
Växla till ACDD-1.3
Vi vi (i synnerhetGenerateDatasetsXml) För närvarande rekommenderar viACDD version 1.3ratificerades i början av 2015 och som kallas "ACDD-1.3" i den globala konventionsattributet. FöreERDDAP™version 1.62 (släpptes i juni 2015) ,ERDDAP™används/rekommenderas originalversion 1.0, avNetCDFAttributkonvention för Dataset Discoverysom kallades "UnidataDataset Discovery v1.0 i de globala konventionerna ochMetadata\_Conventionsattribut.
Om dina datamängder använder tidigare versioner av ACDD, vi rekommenderar att du byter till ACDD-1.3. Det är inte svårt. ACDD-1.3 är mycket bakåtkompatibel med version 1.0. För att byta, för alla dataset (utomEDDGridFromErddap och EDDTable FrånErddap dataset) Från:
- Ta bort den nyförsvunna globalaMetadata\_Conventionsattribut genom att lägga till (eller genom att ändra det befintligaMetadata\_Conventionsattribut)
<att name="Metadata\\_Conventions">null</att>
till datasetets globala<addAttributes>. 2. Om datamängden har en konventions attribut i den globala<addAttributesÄndra alla "UnidataDataset Discovery v1.0 referenser till "ACDD-1.3". Om datamängden inte har en konventionsattribut i den globala<addAttributesLägg sedan till en som refererar till ACDD-1.3. Till exempel,
<att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>
3. Om dataset har en globalstandard\_name\_vocabularyattribut, vänligen ändra formatet på värdet till exempel
<att name="standard\\_name\\_vocabulary">CF Standard Name Table v65</att>
Om referensen är till en äldre version avCF standardnamntabell. Det är nog en bra idé att byta till den aktuella versionen. (65, som vi skriver detta) , eftersom nya standardnamn läggs till i tabellen med efterföljande versioner, men gamla standardnamn är sällan deprecated och aldrig bort. 4. Även om ACDD-1.0 inkluderade globala attribut förcreator\_name,creator\_email,creator\_url,GenerateDatasetsXmlinte automatiskt lägga till dem förrän någon gång runtERDDAP™v1.50. Detta är viktig information:
- creator\_nameLåt användarna veta/citera skaparen av datasetet.
- creator\_emailberättar för användarna den föredragna e-postadressen för att kontakta skaparen av datamängden, till exempel om de har frågor om datamängden.
- creator\_urlger användarna ett sätt att ta reda på mer om skaparen.
- ERDDAP™använder all denna information när du genererar FGDC och ISO 19115-2/19139 metadatadokument för varje datamängd. Dessa dokument används ofta av externa söktjänster.
Lägg till dessa attribut till datasetets globala<addAttributes>.
<att name="creator\\_name">NOAA NMFS SWFSC ERD</att>
<att name="creator\\_email">erd.data@noaa.gov</att>
<att name="creator\\_url">https://www.pfeg.noaa.gov</att>
Det är det. Hoppas det inte var för svårt.
Zarr
Från version 2.25ERDDAP™kan läsa lokalt Zarr filer medEDDTableFromNcFilesochEDDGridFrånNcFiles.
(Från och med augusti 2019) Vi kan lätt vara fel, men vi är ännu inte övertygade om attZarr, eller liknande system som bryter datafiler upp i mindre bitar, är bra lösningar på problemet medERDDAP™Läs data som lagras i molntjänster som Amazon AWS S3. Zarr är en bra teknik som har visat dess användbarhet i olika situationer, vi är bara inte säkra på attERDDAP+S3 är en av dessa situationer. För det mesta säger vi: innan vi rusar för att försöka lagra alla våra data i Zarr, låt oss göra några tester för att se om det faktiskt är en bättre lösning.
Problemen med att komma åt data i molnet är latens (Fördröjningen att först få data) och file-level access (I stället för blocknivååtkomst) . Zarr löser fil-nivå åtkomstproblemet, men gör ingenting om latens. Jämfört med att bara ladda ner filen (Så det kan läsas som en lokal fil med blocknivååtkomst) Zarr kan även förvärra latensproblemet eftersom, med Zarr, läser en fil nu innebär en serie av flera samtal för att läsa olika delar av filen. (Var och en med sin egen lag) . Latency problemet kan lösas genom att parallellisera förfrågningarna, men det är en högre nivå lösning, inte beroende av Zarr.
Och med Zarr (som med relationsdatabaser) Vi förlorar bekvämligheten med att ha en datafil är en enkel, enda fil som du enkelt kan verifiera integriteten av, eller göra / ladda ner en kopia av.
ERDDAP™ (från v2) har ett system för att upprätthålla en lokal cache av filer från en URL-källa (t ex S3) (Se (se)<cacheFromUrl> och<cacheMaxGB>] (#cachefromurl) ). och den nya [<nThreads>] (#Nthreads) Minimera latensproblemet genom att parallellisera datahämtning på hög nivå.<cacheFromUrl> verkar fungera mycket bra för många scenarier. (Vi är inte säkra på hur fördelaktigt<nThreads> är utan ytterligare tester.) Vi medger att vi inte har gjort tidstest på en AWS-instans med en bra nätverksanslutning, men vi har framgångsrikt testat med olika fjärrURL-källor för filer. ochERDDAP"S<cacheFromUrl> fungerar med någon typ av datafil (t.ex.,.nc,.hdf.csv,.jsonlCSV) Även om externt komprimerad (t.ex.,.gz) utan ändringar i filerna (Till exempel, skriva om dem som Zarr samlingar) .
Det är troligt att olika scenarier kommer att gynna olika lösningar, t.ex. behöver du bara läsa en del av en fil en gång. (Zarr vinner) vs. måste läsa alla en fil en gång, vs. måste läsa en del eller alla en fil upprepade gånger.<cacheFromUrl > vinner).
För det mesta säger vi: innan vi rusar för att försöka lagra alla våra data i Zarr, låt oss göra några tester för att se om det faktiskt är en bättre lösning.
Lista över Typer Datasets
Om du behöver hjälp med att välja rätt dataset typ, seVälja Dataset Type.
De typer av dataset faller i två kategorier. (Varför?)
EDDGrid
- EDDGrid dataset hanterar ruttna data.
- InomEDDGriddatamängder, datavariabler är multidimensionella datamängder.
- Det måste finnas en axelvariabel för varje dimension. Axis variabler måste anges i den ordning som datavariablerna använder dem.
- InomEDDGriddataset, alla datavariabler MÅSTE använda (aktie) alla axelvariabler. (Varför? Tänk om de inte gör det?)
- Sorterade dimensionsvärden - I alltEDDGriddatamängder, varje dimension måste vara i sorterad ordning (Uppstigning eller nedstigning) . Var och en kan vara oregelbundet placerad. Det kan inte finnas några band. Detta är ett krav påCF metadata standard. Om någon dimensions värderingar inte är i sorterad ordning kommer datamängden inte att laddas ochERDDAP™identifiera det första osorterade värdet i loggfilen, bigParentDirectory /logs/log.txt.
Några underklasser har ytterligare begränsningar (särskiltEDDGridAggregateExistingDimension kräver att den yttersta (vänstra, första) dimensionen stiger upp.
Osorterade dimensionsvärden indikerar nästan alltid ett problem med källdatamängden. Detta sker oftast när en felaktig eller olämplig fil ingår i aggregeringen, vilket leder till en osorterad tidsdimension. För att lösa detta problem, se felmeddelandet iERDDAP™log.txt-fil för att hitta det kränkande tidsvärdet. Titta sedan i källfilerna för att hitta motsvarande fil (eller en före eller en efter) Det hör inte hemma i aggregeringen.
- Se mer fullständig beskrivning avEDDGridDatamodell.
- ochEDDGridDatasettyper är:
- EDDGridFrån AudioFilesaggregerar data från en grupp lokala ljudfiler.
- EDDGridFrånDaphanterar ruttna data frånDAPservrar.
- EDDGridFrånEDDTablelåter dig konvertera en tabular dataset till en gridded dataset.
- EDDGridFrånErddaphanterar ruttna data från en fjärrkontrollERDDAP.
- EDDGridFrånEtopohanterar bara inbyggda ETOPO topografi data.
- EDDGridFrånFilesär superklassen av allaEDDGridFrån...Files klasser.
- EDDGridFrånMergeIRFilesaggregerar data från en grupp lokala MergeIR.gzfiler.
- EDDGridFrånNcFilesaggregerar data från en grupp lokalaNetCDF (v3 eller v4) .ncoch relaterade filer.
- EDDGridFrånNcFilesUnpackedär en variant omEDDGridFromNcFiles som också samlar in data från en grupp lokalaNetCDF (v3 eller v4) .ncoch relaterade filer, somERDDAP™packar på låg nivå.
- EDDGridLonPM180modifierar barnets longitudvärdenEDDGridså att de är i intervallet -180 till 180.
- EDDGridLon0360modifierar barnets longitudvärdenEDDGridså att de är i intervallet 0 till 360.
- EDDGridSideBySideaggregat två eller fleraEDDGriddataset sida vid sida.
- EDDGridAggregateExistingDimensionaggregat två eller fleraEDDGriddatamängder, som var och en har olika värden för den första dimensionen, men identiska värden för de andra dimensionerna.
- EDDGridKopierakan göra en lokal kopia av en annanEDDGrid"S data och serverar data från den lokala kopian.
- Allt alltEDDGriddatamängder stöder en nThreads-inställning, som berättarERDDAP™Hur många trådar att använda när du svarar på en begäran. SenThreadsdokumentation för detaljer.
EDDTable
- EDDTable dataset hanterar tabular data.
- Tabular data kan representeras som en databasliknande tabell med rader och kolumner. Varje kolumn (en datavariabel) har ett namn, en uppsättning attribut och lagrar bara en typ av data. Varje rad har en observation (eller grupp av relaterade värden) . Datakällan kan ha data i en annan datastruktur, en mer komplicerad datastruktur och / eller flera datafiler, menERDDAP™måste kunna platta källdata i en databasliknande tabell för att presentera data som en tabell datamängd för användare avERDDAP.
- Se mer fullständig beskrivning avEDDTable datamodell.
- EDDTable dataset typer är:
-
EDDTableFromAllDatasetsär en högre dataset som har information om alla andra dataset i dinERDDAP.
-
EDDTableFromAsciiFilesaggregerar data från komma-, flik-, semicolon- eller rymdseparerade tabell ASCII-datafiler.
-
EDDTableFromAsciiServiceär superklassen av alla EDDTableFromAsciiService... klasser.
-
EDDTableFromAsciiServiceNOShanterar data från några avNOAANOS webbtjänster.
-
EDDTableFromAudioFilesaggregerar data från en grupp lokala ljudfiler.
-
EDDTableFrån AwsXmlFilessamlar in data från en uppsättning automatiska väderstationer (AWS) XML filer.
-
EDDTableFromCassandrahanterar tabelldata från ett Cassandra-bord.
-
EDDTableFromColumnarAsciiFilesaggregerar data från tabular ASCII-datafiler med fasta datakolumner.
-
EDDTableFromDapSequencehanterar tabular data frånDAPsekvensservrar.
-
EDDTableFromDatabasehanterar tabelldata från en databastabell.
-
EDDTableFrånEDDGridlåter dig skapa en EDDTable dataset från enEDDGriddataset.
-
EDDTableFromErddaphanterar tabular data från en fjärrERDDAP.
-
EDDTableFromFileNamesskapar en dataset från information om en grupp filer i serverns filsystem, men det tjänar inte data inifrån filerna.
-
EDDTableFromFilesär superklassen av alla EDDTableFrån...Files klasser.
-
EDDTableFromHttpGetär attERDDAPEndast system för dataimport samt dataexport.
-
EDDTableFrånHyraxFiler (Begränsad) aggregerar data från filer med flera variabler med delade dimensioner som serveras av enHyrax OPeNDAPServer server.
-
EDDTableFromInvalidCRAFilesaggregerar data frånNetCDF (v3 eller v4) .ncfiler som använder en specifik, ogiltig, variant av CF DSG Contiguous Ragged Array (CRA) filer. Även omERDDAP™stöder denna filtyp, det är en ogiltig filtyp som ingen ska börja använda. Grupper som för närvarande använder denna filtyp uppmuntras starkt att användaERDDAP™för att generera giltiga CF DSG CRA-filer och sluta använda dessa filer.
-
EDDTableFromJsonlCSVFilesaggregerar data frånJSON Lines CSV-filer.
-
EDDTableFromMultidimNcFilesaggregerar data frånNetCDF (v3 eller v4) .ncfiler med flera variabler med delade dimensioner.
-
EDDTableFromNcFilesaggregerar data frånNetCDF (v3 eller v4) .ncfiler med flera variabler med delade dimensioner. Det är bra att fortsätta använda denna datasettyp för befintliga dataset, men för nya dataset rekommenderar vi att du använder EDDTableFromMultidimNcFiles istället.
-
EDDTableFromNcCFFilesaggregerar data frånNetCDF (v3 eller v4) .ncfiler som använder ett av de filformat som anges avCF Diskret sampling geometrier (DSG) konventioner. Men för filer som använder en av de multidimensionella CF DSG-varianterna, användEDDTableFromMultidimNcFilesI stället.
-
EDDTableFromNccsvFilesaggregerar data frånNCCSVASCII .csv filer.
-
EDDTableFromNOS (Begränsad) hanterar tabelldata från NOS XML-servrar.
-
EDDTableFromOBIShanterar tabelldata från OBIS-servrar.
-
EDDTableFromParquetFileshanterar data frånParquet.
-
EDDTableFrånSOShanterar tabular data frånSOSservrar.
-
EDDTableFromThreddsFiles (Begränsad) aggregerar data från filer med flera variabler med delade dimensioner som serveras av enTröjorOPeNDAPServer server.
-
EDDTableFrånWFSFiler (Begränsad) gör en lokal kopia av alla data från enArcGISMapServerWFSserver så att data sedan kan sparas snabbt tillERDDAP™användare.
-
EDDTableAggregateRowskan göra en EDDTable dataset från en grupp EDDTable dataset.
-
EDDTableCopykan göra en lokal kopia av många typer av EDDTable dataset och sedan spara data snabbt från den lokala kopian.
-
Detaljerade beskrivningar av datasettyper
EDDGridFrånDap
EDDGridFrånDap hanterar nätvariabler frånDAPservrar.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan samla in den information du behöver för att justera den eller skapa din egen XML för enEDDGridFromDap dataset genom att titta på källdatasetets DDS- och DAS-filer i din webbläsare (genom att lägga till .das och .dds tillsourceUrltill exempel, https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .
- EDDGridFromDap kan få data från alla multidimensionella variabler från enDAPdataserver. (Tidigare,EDDGridFromDap var begränsad till variabler som utsetts som "grid" s, men det är inte längre ett krav.)
- Sorterade dimensionsvärden - Värdena för varje dimension måste vara i sorterad ordning (Uppstigning eller nedstigning) . Värdena kan vara oregelbundet placerade. Det kan inte finnas några band. Detta är ett krav påCF metadata standard. Om någon dimensions värderingar inte är i sorterad ordning kommer datamängden inte att laddas ochERDDAP™identifiera det första osorterade värdet i loggfilen, bigParentDirectory /logs/log.txt.
Osorterade dimensionsvärden indikerar nästan alltid ett problem med källdatamängden. Detta sker oftast när en felaktig eller olämplig fil ingår i aggregeringen, vilket leder till en osorterad tidsdimension. För att lösa detta problem, se felmeddelandet iERDDAP™log.txt-fil för att hitta det kränkande tidsvärdet. Titta sedan i källfilerna för att hitta motsvarande fil (eller en före eller en efter) Det hör inte hemma i aggregeringen.
EDDGridFrånDap skeleton XML
<dataset type="EDDGridFromDap" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1.
For EDDGridFromDap, this gets the remote .dds and then gets the new
leftmost (first) dimension values. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<axisVariable>...</axisVariable> <!-- 1 or more -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
</dataset>
EDDGridFrånEDDTable
EDDGridFrånEDDTable låter dig konvertera en EDDTable tabular dataset till enEDDGridgridded dataset. Kom ihåg attERDDAP™behandlar dataset som antingengridded datasets (underklasser avEDDGrid) eller tabular dataset (underklasser av EDDTable) .
- Normalt, om du har ruttna data, du bara ställa in enEDDGriddataset direkt. Ibland är det inte möjligt, till exempel när du har data som lagras i en relationsdatabas somERDDAP™kan endast komma åt via EDDTableFromDatabase.EDDGridFrånEDDTable-klassen låter dig åtgärda den situationen.
- Uppenbarligen måste data i den underliggande EDDTable datamängden vara (i grunden) ruttna data, men i en tabellform. Till exempel kan EDDTable datamängden ha CTD-data: mätningar av österut och norrutström, vid flera djup, vid flera tillfällen. Eftersom djupet är detsamma vid varje tidpunkt,EDDGridFromEDDTable kan skapa en rutnäterad dataset med en tid och en djupdimension som åtkomst till data via den underliggande EDDTable dataset.
- GenerateDatasets Xml - Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan samla in den information du behöver för att förbättra det grova utkastet.
- Källa Attributes - Som med alla andra typer av dataset,EDDGridFromTable har idén att det finns globala källorGlobalt globalt globalt globaltaddAttributes (specificeras idatasets.xml) , som kombineras för att göra det globala kombinerat Attribut, som är vad användarna ser. För globala källorAttributes,EDDGridFromEDDTable använder den globala kombinerade Innehåller de underliggande EDDTable dataset. (Om du tänker på det i en minut är det meningsfullt.)
På samma sätt, för varjeaxisVariables ochdataVariable"SaddAttributes,EDDGridFromEDDTable använder variabelns kombinerade Innehåll från den underliggande EDDTable dataset somEDDGridFrånEDDTable variabelns källaAttributes. (Om du tänker på det i en minut är det meningsfullt.)
Som ett resultat, om EDDTable har bra metadata,EDDGridFrånEDDTable behöver ofta mycket liteaddAttributesmetadata - bara några tweaks här och där.
-
dataVariables kontraaxisVariables -- Den underliggande EDDTable har endastdataVariables. EttEDDGridFromEDDTable dataset kommer att ha någraaxisVariables (från några av EDDTabledataVariables) och vissadataVariables (skapad av den återstående EDDTabledataVariables) .GenerateDatasetsXmlkommer att göra en gissning om vilken EDDTabledataVariables bör bliEDDGridFrånEDDTableaxisVariableMen det är bara en gissning. Du måste ändra utgången av GenerateDatasetsXml för att ange vilkadataVariablekommer att bliaxisVariableoch i vilken ordning.
-
axisValues - Det finns inget om den underliggande EDDTable att berättaEDDGridFrånEDDTable de möjliga värdena föraxisVariables i den ruttna versionen av datamängden, så du måste ange den informationen för varjeaxisVariablevia en av dessa attribut:
- axisValues - låter dig ange en lista över värden. Till exempel, <Namn = "axisValues"Typ = "doubleList"2, 2.5, 3, 3,5, 4</att> Notera användningen av enDatatypplus ordet List. Också typen av lista (Till exempel dubbel) MÅSTE matcha data Typ av variabeln i EDDTable ochEDDGridFrånEDDTable dataset.
- axisValuesStartStrideStop - låter dig ange en sekvens av regelbundet fördelade värden genom att ange start, steg och stoppa värden. Här är ett exempel som motsvarar axisValues-exemplet ovan: <Namn = "axisValuesStartStrideStop"Typ = "doubleList"2, 0,5, 4</att> Återigen notera användningen av en lista datatyp. Också typen av lista (Till exempel dubbel) MÅSTE matcha data Typ av variabeln i EDDTable ochEDDGridFrånEDDTable dataset.
Uppdateringar - Precis som det inte finns något sätt förEDDGridFrånEDDTable för att bestämma axisValues från EDDTable initialt finns det inte heller något tillförlitligt sätt förEDDGridFrånEDDTable för att avgöra från EDDTable när axisValues har ändrats (när det finns nya värden för tidsvariabeln) . För närvarande är den enda lösningen att ändra attributet axisValues idatasets.xmloch ladda om dataset. Du kan till exempel skriva ett manus till
- Sök efter Sökdatasets.xmlFör datasetID=" TheDatasetID " Så du arbetar med rätt dataset.
- Sök efter Sökdatasets.xmlför nästa händelse
TheVariablesSourceName
Så du arbetar med rätt variabel. - Sök efter Sökdatasets.xmlför nästa händelse
<att name="axisValuesStartStrideStop" type="doubleList">
Så du vet startpositionen för taggen. 4. Sök efter Sökdatasets.xmlför nästa händelse
</att>
Så du vet axelvärdets slutposition. 5. Byt ut den gamla starten, steg, stoppa värden med de nya värdena. 6. Kontakta ossFlagga URLför dataset att berättaERDDAP™för att ladda om dataset.
Detta är inte idealiskt, men det fungerar.
- precision - När närEDDGridFromEDDTable svarar på en användares begäran om data, det flyttar en rad data från EDDTable svar tabellen iEDDGridsvarsnät. För att göra detta måste det räkna ut om "axeln" värden på en viss rad i tabellen matchar en kombination av axelvärden i nätet. För datatyper är det lätt att avgöra om två värden är lika. Men för flottor och dubblar, ger detta upp det hemska problemet med flytande punktnummerInte matcha exakt. (till exempel 0.2 mot 0.1999999999996) . för att (försök att) hantera detta,EDDGridFromTable kan du ange en precisionsattribut för någon avaxisVariables, som specificerar det totala antalet decimala siffror som måste vara identiska.
- Till exempel,<att namn="precision" typ="int">5</att>
- För olika typer av datavariabler finns det olika standard precisionsvärden. Standarderna är vanligtvis lämpliga. Om de inte är det måste du ange olika värden.
- FöraxisVariableS som ärtid eller tid Stamp variablerStandarden är full precision (en exakt match) .
- FöraxisVariables som är flyter, standard precision är 5.
- FöraxisVariables som är dubbel, standard precision är 9.
- FöraxisVariables som har integer datatyper,EDDGridFromEDDTable ignorerar precisionsattributet och använder alltid full precision (en exakt match) .
- VARNING! När du gör omvandlingen av en bit tabelldata till en bit av ruttna data, omEDDGridFromEDDTable kan inte matcha ett EDDTable "axel" -värde till ett av de förväntadeEDDGridFrånEDDTable axelvärden,EDDGridFrånEDDTable tyst (Inget fel) kastar bort data från tabellens rad. Det kan till exempel finnas andra data (Inte på nätet) i EDDTable dataset. (Och om steg > 1, det är inte uppenbart attEDDGridFrånbord vilka axelvärden är önskade värden och vilka som är de som ska hoppas på grund av steget.) Så om precisionsvärdena är för höga kommer användaren att se saknade värden i dataresponsen när giltiga datavärden faktiskt existerar.
Omvänt, om precisionsvärdena är för låga, bör EDDTable "axel"-värden som inte bör matchaEDDGridFrånEDDTable axelvärden kommer (felaktigt) match.
Dessa potentiella problem är hemska, eftersom användaren får fel data (eller saknade värden) när de ska få rätt data (eller åtminstone ett felmeddelande) . Detta är inte en brist iEDDGridFrånbord.EDDGridFromTable kan inte lösa detta problem. Problemet är inneboende i omvandlingen av tabelldata till ruttna data (om inte andra antaganden kan göras, men de kan inte göras här) . Det är upp till dig,ERDDAP™administratör, att Testa dittEDDGridFrånEDDTable noggrant säkerställa att precisionsvärdena är inst ällda på att undvika dessa potentiella problem.
GapThreshold
- GapThreshold----- Detta är en mycket ovanlig typ av dataset. Eftersom de typer av frågor som kan göras för att (hanteras av) enEDDGridDataset (relaterad till intervall och steg avaxisVariables) skiljer sig mycket från de typer av frågor som kan göras för att (hanteras av) En EDDTable dataset (bara relaterad till intervallen av vissa variabler) , prestanda förEDDGridFrånEDDTable datamängder varierar kraftigt beroende på den exakta begäran som görs och hastigheten på den underliggande EDDTable datamängden. För förfrågningar som har ett stegvärde > 1, 1, 1, 1,EDDGridFromEDDTable kan be den underliggande EDDTable för en relativt stor del av data (som om steg=1) och sedan sikta igenom resultaten, hålla data från några rader och kasta bort data från andra. Om det måste sikta igenom en hel del data för att få de data den behöver, kommer begäran att ta längre tid att fylla.
OmEDDGridFromEDDTable kan berätta att det kommer att finnas stora luckor (med rader av oönskade data) mellan raderna med önskad data,EDDGridFromEDDTable kan välja att göra flera underförfrågningar till den underliggande EDDTable i stället för en stor förfrågan och därigenom hoppa över de oönskade raderna av data i de stora luckorna. Känsligheten för detta beslut styrs av gapThreshold-värdet enligt vad som anges i<gapThreshold> tagga (standard=1000 rader källdata) . Inställning av gapThreshold till ett mindre antal kommer att leda till att dataset gör (i allmänhet) fler subrequests. Inställning av gapThreshold till ett större antal kommer att leda till att dataset gör (i allmänhet) färre subrequests.
Om gapThreshold är för liten,EDDGridFromEDDTable kommer att fungera långsammare eftersom överhuvudet av flera förfrågningar kommer att vara större än den tid som sparas genom att få lite överskottsdata. Om gapThreshold är för stort,EDDGridFromEDDTable kommer att fungera långsammare eftersom så mycket överskottsdata kommer att hämtas från EDDTable, bara för att kasseras. (Som Goldilocks upptäckt, är mitten "bara rätt".) Överhuvudet för olika typer av EDDTable datamängder varierar kraftigt, så det enda sättet att veta den faktiska bästa inställningen för din datamängd är genom experiment. Men du kommer inte att gå för långt fel att hålla fast vid standarden.
Ett enkelt exempel är: Tänk dig enEDDGridFrånbord med bara enaxisVariable (Tid, med en storlek på 100000) EndataVariable (temperaturen) , och standard gapThreshold av 1000.
- Om en användare begär temperatur\[0💯5000\]Klivet är 100 så klyftan är 99, vilket är mindre än gapThreshold. SåEDDGridFromTable kommer att göra bara en begäran till EDDTable för alla data som behövs för begäran. (motsvarande temperatur\[0:5000\]) Och kasta bort alla rader av data det inte behöver.
- Om en användare begär temperatur\[0:2500:5000\]Det steget är 2500 så klyftan är 2499, vilket är större än gapThreshold. SåEDDGridFromTable kommer att göra separata förfrågningar till EDDTable som motsvarar temperatur\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]temperatur\[2500\]temperatur\[5000\].
Beräkning av gapstorleken är mer komplicerad när det finns flera axlar.
För varje användares begäran,EDDGridFrånEDDTable prints diagnostiska meddelanden relaterade till detta iLog.txtfil.
- Om [Om]<LogLevel>] (#loglevel) in idatasets.xmlär inställd på info, detta trycker ett meddelande som \* nOuterAxes=1 av 4 nOuterRequests=22 Om nOuterAxes=0 överskreds inte gapThreshold och endast en begäran kommer att göras till EDDTable. Om nOuterAxes>0 överskreds gapThreshold och nOuterRequests kommer att göras till EDDTable, motsvarande varje efterfrågad kombination av de vänstraste nOuterAxes. Till exempel, om datamängden har 4axisVariables ochdataVariableSom österut\[Tid\]\[Latitud\]\[Längd\]\[Djup\]vänster (Först först) Axelvariabel är tid.
- Om<LogLevel> in idatasets.xmlär inställd på allt, ytterligare information skrivs till log.txt-filen.
EDDGridFrånEDDTable skelett XML
<dataset type="EDDGridFromEDDTable" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1.
For EDDGridFromEDDTable, this only works if the underlying EDDTable
supports updateEveryNMillis. -->
<gapThreshold>...</gapThreshold> <!-- 0 or 1. The default is 1000. >
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<axisVariable>...</axisVariable> <!-- 1 or more -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
<dataset>...</dataset> <!-- The underlying source EDDTable dataset. -->
</dataset>
EDD* frånERDDAP
EDDGridFrånErddap hanterar ruttna data från en fjärrkontrollERDDAP™Server. EDDTableFromErddap hanterar tabular data från en fjärrERDDAP™Server.
- EDDGridFromErddap och EDDTableFromErddap beter sig annorlunda än alla andra typer av datamängder iERDDAP.
- Liksom andra typer av datamängder får dessa datamängder information om datamängden från källan och håller den i minnet.
- som andra typer av datamängder, närERDDAP™Sökningar efter datamängder, visar Formen Data Access ( datasetID .html) eller visar formuläret Make A Graph ( datasetID .graph) ,ERDDAP™använder informationen om dataset som är i minnet.
- EDDGridFromErddap och EDDTable FromErddap är grunden förnät/kluster/federationeravERDDAPs, som effektivt distribuerar CPU-användningen (mestadels för att göra kartor) minnesanvändning, datasetlagring och bandbreddsanvändning av ett stort datacenter.
Omdirigera
- Till skillnad från andra typer av datamängder, närERDDAP™får en begäran om data eller bilder från dessa datamängder,ERDDAP omdirigeringarbegäran till fjärrkontrollenERDDAP™Server. Resultatet är:
- Detta är mycket effektivt (CPU, minne och bandbredd) för annars
- KompositörERDDAP™måste skicka begäran till den andraERDDAP™ (som tar tid) .
- Den andraERDDAP™måste få data, reformera den och överföra data till kompositenERDDAP.
- KompositörERDDAP™måste ta emot data (med bandbredd) Reformatera den (Använd CPU och minne) och överföra data till användaren (med bandbredd) . Genom att omdirigera begäran och tillåta den andraERDDAP™att skicka svaret direkt till användaren, kompositenERDDAP™spenderar i huvudsak ingen CPU-tid, minne eller bandbredd på begäran.
- Omdirigeringen är transparent för användaren oavsett kundens programvara (en webbläsare eller annan programvara eller kommandorad verktyg) .
- Detta är mycket effektivt (CPU, minne och bandbredd) för annars
- Du kan berättaERDDAP™inte omdirigera några användarförfrågningar genom att ange<omdirigering > falskt</ omdirigera>, men detta negerar de flesta fördelarna med ...Från Erddap dataset typ (I synnerhet sprider belastningen på framsidanERDDAP™till fjärr-/backendERDDAP) .
Prenumerationer
Normalt när enEDDGridFromErddap och EDDTable FromErddap är (Retur) laddad på dinERDDAP, de försöker lägga till en prenumeration på fjärrdataset via fjärrkontrollenERDDAPe-postadress/URL-abonnemangssystem. På så sätt, när fjärrdataset ändras, fjärrkontrollenERDDAP™kontaktersetDataset Flagga URLpå dinERDDAP™så att den lokala datamängden laddas om ASAP och så att den lokala datamängden alltid är helt uppdaterad och efterliknar fjärrdatamängden. Så första gången detta händer bör du få ett e-postmeddelande som begär att du validerar prenumerationen. Men om lokalenERDDAP™kan inte skicka ett e-postmeddelande eller om fjärrkontrollenERDDAPe-post / URL-abonnemangssystem är inte aktivt, du bör maila fjärrkontrollenERDDAP™administratör och begär att han manuellt lägger till [<OnChange (#Ochange) ......</onChange> taggar till alla relevanta datamängder för att ringa datamängdenssetDataset Flagga webbadresser. Se dinERDDAP™Daglig rapport för en lista över setDataset Flagga webbadresser, men skicka bara de förEDDGridFromErddap och EDDTableFromErddap dataset till fjärrkontrollenERDDAP™administratör.
Fungerar det inte? Är dina lokala datamängder inte i synkroniserad med fjärrdatamängderna? Flera saker måste alla fungera korrekt för att detta system ska fungera så att dina datamängder håller sig uppdaterade. Kontrollera var och en av dessa saker i ordning:
- Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din DinERDDAP™måste kunna skicka ut e-post. Se e-postinställningarna i din setup.xml.
- I allmänhet (Men inte alltid) , dinERDDAP"S<baseUrl> och<baseHttpsUrl > behöver inte ha ett portnummer (t.ex. :8080, :8443) . Om de gör det, använd enProxypassför att avlägsna hamnen från Url.
- I din setup.xml,<PrenumereraToRemoteErddapDataset> måste vara sant.
- När din lokala EDD... FromErddap dataset laddas om, det bör skicka en begäran till fjärrkontrollenERDDAP™att prenumerera på fjärrdataset. Titta i log.txt för att se om det händer.
- Du bör få ett e-postmeddelande som ber dig att validera prenumerationsförfrågan.
- Du måste klicka på länken i det e-postmeddelandet för att validera prenumerationsförfrågan.
- FjärrkontrollenERDDAP™bör säga att valideringen var framgångsrik. När som helst kan du begära ett e-postmeddelande från fjärrkontrollenERDDAP™med en lista över dina väntande och giltiga prenumerationer. Se formuläret på avlägsnaErddapBase Url /erddap/subscriptions/list.html.
- När fjärrdataset ändras (t.ex. får ytterligare data) FjärrkontrollenERDDAP™bör försöka kontakta flagurl på dinERDDAP. Du kan inte kontrollera detta, men du kan fråga administratören av fjärrkontrollenERDDAP™för att kontrollera detta.
- Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din DinERDDAP™bör få en begäran om att ange flaggURL. Titta i din log.txt för "setDatasetFlag.txt?" (s) och se om det finns ett felmeddelande i samband med förfrågningarna.
- Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Dina Dina Dina Dina Dina Dina Dina Dina Dina Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din Din DinERDDAP™bör sedan försöka ladda om datasetet (Kanske inte omedelbart, men ASAP) .
Upp-to-date max (Tid) ??
EDDGrid/TableFromErddap dataset ändrar bara deras lagrade information om varje källdataset när källdatasetet är"Reload"och en del metadataförändringar (t.ex. tidsvariabelnsactual\_range) och därigenom skapa en abonnemangsanmälan. Om källdatamängden har data som ändras ofta (Till exempel nya data varje sekund) och använder"Uppdatering"system för att märka frekventa ändringar av de underliggande uppgifterna,EDDGrid/TableFromErddap kommer inte att meddelas om dessa frekventa ändringar tills nästa dataset "reload", såEDDGrid/TableFromErddap kommer inte att vara helt uppdaterad. Du kan minimera detta problem genom att ändra källdatasättets<ReloadEveryNMinutes > till ett mindre värde (60? 15?) så att det finns fler abonnemangsmeddelanden för att berätta förEDDGrid/TableFromErddap för att uppdatera sin information om källdatamängden.
Eller om ditt datahanteringssystem vet när källdatamängden har nya data (t.ex. via ett skript som kopierar en datafil på plats) Och om det inte är super frekvent (t.ex. var 5:e minut eller mindre frekvent) Det finns en bättre lösning:
- Använd inte<updateEveryNMillis> för att hålla källdatauppsättningen uppdaterad.
- Ställ in källdatasetets<ReloadEveryNMinutes > till ett större antal (1440?) .
- Har manuset kontakta källdatasetetsFlagga URLstrax efter det kopierar en ny datafil på plats.
Det kommer att leda till att källdatamängden är helt uppdaterad och orsakar att den genererar en abonnemangsmeddelande, som kommer att skickas till källdatamängden.EDDGrid/TableFromErddap dataset. Detta lederEDDGrid/TableFromErddap dataset för att vara helt uppdaterad (inom 5 sekunder efter att nya data läggs till) . Allt som kommer att göras effektivt (utan onödiga datamängder) .
IngenaddAttributes,axisVariableellerdataVariable
Till skillnad från andra typer av datamängder, EDDTableFromErddap ochEDDGridFromErddap-dataset tillåter inte globalt<addAttributes>,<axisVariableoch gt; eller<dataVariable> sektioner idatasets.xmlför denna dataset. Problemet är att låta dem leda till inkonsekvenser:
- Låt oss säga att det var tillåtet och du lade till ett nytt globalt attribut.
- När en användare frågar dinERDDAP™För de globala attributen kommer det nya attributet att visas.
- När en användare frågar dinERDDAP™för en datafil, dinERDDAP™omdirigerar begäran till källanERDDAP. DettaERDDAP™är omedvetna om det nya attributet. Så om det skapar en datafil med metadata, t.ex. en.ncfil, metadata kommer inte att ha den nya attribut.
Det finns två work-arounds:
- Övertyga källans adminERDDAP™För att göra de ändringar som du vill metadata.
- Istället för EDDTableFromErddap, användEDDTableFromDapSequence. Eller istället förEDDGridFrånErddap, användEDDGridFrånDap. Dessa EDD-typer låter dig ansluta effektivt till en dataset på en fjärrkontrollERDDAP™ (men utan att omdirigera dataförfrågningar) Och de låter dig inkludera globalt<addAttributes>,<axisVariableoch gt; eller<dataVariable> sektioner idatasets.xml. En annan skillnad: du måste manuellt prenumerera på fjärrdatamängden, så att datamängden på dinERDDAP™kommer att meddelas (viaFlagga URL) När det finns ändringar i fjärrdatasetet. Således skapar du en ny dataset istället för att länka till en fjärrdataset.
Andra anteckningar
- Av säkerhetsskäl,EDDGridFromErddap och EDDTable Från Erddap stöder inte [[<tillgänglig för>] (#accessibleto) tagga och kan inte användas med fjärrdata som kräver inloggning (eftersom de använder<tillgänglig för>] (#accessibleto) ). SeERDDAP"SSäkerhetssystemför att begränsa åtkomsten till vissa datamängder till vissa användare.
- Börja medERDDAP™v2.10,EDDGridFromErddap och EDDTableFromErddap stöder [<tillgängligaViaFiles>] (#accessibleviafiles) tag. Till skillnad från andra typer av datamängder är standarden sant, men datamängdens filer kommer endast att vara tillgängligaViaFiles om källdatamängden också har<tillgängligaViaFiles> som är sanna.
- Du kan användaGenerateDatasets Xml programatt göradatasets.xmlchunk för denna typ av dataset. Men du kan göra dessa typer av datamängder lätt för hand.
EDDGridFrånErddap skelett XML
- EDDGridFrånErddap skelett XML dataset är mycket enkelt, eftersom avsikten bara är att efterlikna fjärrdataset som redan är lämplig för användning iERDDAPFrån:
<dataset type="EDDGridFromErddap" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<accessibleViaFiles>...</accessibleViaFiles> <!-- 0 or 1, default=true. -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1
For EDDGridFromErddap, this gets the remote .dds and then gets
the new leftmost (first) dimension values. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<redirect>true(default)|false</redirect> <!-- 0 or 1; -->
</dataset>
EDDTableFromErddap skelett XML
- Skelettet XML för en EDDTableFromErddap dataset är mycket enkelt, eftersom avsikten bara är att efterlikna fjärrdataset, som redan är lämplig för användning iERDDAPFrån:
<dataset type="EDDTableFromErddap" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<redirect>true(default)|false</redirect> <!-- 0 or 1; -->
</dataset>
EDDGridFrånEtopo
EDDGridFrånEtopo Bara tjänarETOPO1 Global 1-minuters Gridded Elevation Data Set (Ice Surface, grid registrerad, binär, 2byte int: etopo1\_ice\_g\_i2.zip) som delas ut medERDDAP.
- Endast tvådatasetIDstöds förEDDGridFrånEtopo, så att du kan komma åt data med longitudvärden -180 till 180 eller longitudvärden 0 till 360.
- Det finns aldrig några deltaggar, eftersom data redan beskrivs iERDDAP.
- Så de två alternativ förEDDGridFromEtopo dataset är (bokstavligen) Från:
<!-- etopo180 serves the data from longitude -180 to 180 -->
<dataset type="EDDGridFromEtopo" datasetID="etopo180" />
<!-- etopo360 serves the data from longitude 0 to 360 -->
<dataset type="EDDGridFromEtopo" datasetID="etopo360" />
EDDGridFrånFiles
EDDGridFrånFiles är superklassen av allaEDDGridFrån...Files klasser. Du kan inte användaEDDGridFrånFiles direkt. Använd istället en underklass avEDDGridFrånFiles för att hantera den specifika filtypen:
- EDDGridFrånMergeIRFileshanterar data från griddedMergeIR.gzfiler.
- EDDGridFrån AudioFilesaggregerar data från en grupp lokala ljudfiler.
- EDDGridFrånNcFileshanterar data från griddedGRIB .grbfiler,HDF (v4 eller v5) .hdffiler,.ncmlfiler ochNetCDF (v3 eller v4) .ncfiler. Detta kan fungera med andra filtyper (Till exempel BUFR) Vi har bara inte testat det - skicka oss några provfiler om du är intresserad.
- EDDGridFrånNcFilesUnpackedär en variant avEDDGridFromNcFiles som hanterar data från rutnätNetCDF (v3 eller v4) .ncoch relaterade filer, somERDDAP™packar på låg nivå.
För närvarande stöds inga andra filtyper. Men det är oftast relativt enkelt att lägga till stöd för andra filtyper. Kontakta oss om du har en förfrågan. Eller om dina data är i ett gammalt filformat som du vill flytta bort från rekommenderar vi att du konverterar filerna för att varaNetCDFv3.ncfiler.NetCDFär ett brett stöd, binärt format, tillåter snabb slumpmässig åtkomst till data, och stöds redan avERDDAP.
Från filer detaljer
Följande information gäller alla underklasser avEDDGridFrånFiles.
Aggregering av en existerande dimension
Alla variationer avEDDGridFromFiles kan samla data från lokala filer, där varje fil har 1 (eller mer) olika värden för vänster (Först först) dimension, vanligtvis\[Tid\]som kommer att aggregeras. Till exempel kan dimensionerna vara\[Tid\]\[höjd\]\[Latitud\]\[Längd\]och filerna kan ha data för en (eller några) Tidsvärde (s) per fil. Den resulterande datamängden visas som om alla filens data hade kombinerats. De stora fördelarna med aggregation är:
- Storleken på den aggregerade datauppsättningen kan vara mycket större än en enda fil kan vara bekvämt. (2GB) .
- För nästan realtidsdata är det lätt att lägga till en ny fil med den senaste biten av data. Du behöver inte skriva om hela datasetet.
Kraven på aggregering är:
- De lokala filerna behöver inte ha sammadataVariables (enligt definitionen i datasetetsdatasets.xml) . Datasetet kommer att hadataVariables definierade idatasets.xml. Om en viss fil inte har en givendataVariable,ERDDAP™kommer att lägga till saknade värden efter behov.
- AlladataVariableAnvända sammaaxisVariables/dimensioner (enligt definitionen i datasetetsdatasets.xml) . Filerna kommer att aggregeras baserat på den första (vänster-mest) dimension, sorterad i uppstigande ordning.
- Varje fil kan ha data för en eller flera värden av den första dimensionen, men det kan inte finnas någon överlappning mellan filer. Om en fil har mer än ett värde för den första dimensionen, måste värdena sorteras i stigande ordning, utan band.
- Alla filer måste ha exakt samma värden för alla andra dimensioner. Testets precision bestäms avmatchaxisNDigits.
- Alla filer måste ha exakt sammaenhetermetadata för allaaxisVariables ochdataVariables. Om detta är ett problem kan du användaNcMLellerNCOför att åtgärda problemet.
Aggregering via filnamn eller global metadata
Alla variationer avEDDGridFromFiles kan också samla en grupp filer genom att lägga till en ny vänster (Först först) dimension, vanligtvis tid, baserat på ett värde som härrör från varje filnamn eller från värdet av ett globalt attribut som finns i varje fil. Till exempel kan filnamnet inkludera tidsvärdet för data i filen.ERDDAP™skulle då skapa en ny tidsdimension.
Till skillnad från liknande funktion i TREDDS,ERDDAP™Skapar alltid enaxisVariablemed numeriska värden (som krävs av CF) , aldrig stränga värden (som inte är tillåtna av CF) . också,ERDDAP™kommer att sortera filerna i aggregeringen baserat på den numeriskaaxisVariablevärde som tilldelas varje fil, så att axelvariabeln alltid har sorterade värden som krävs av CF. THREDDS-metoden att göra ett lexikografiskt slag baserat på filnamnen leder till aggregationer där axelvärdena inte sorteras (som inte är tillåtet av CF) när filnamnen sorteras annorlunda än de som härröraxisVariablevärden.
För att skapa en av dessa aggregationer iERDDAP™Du kommer att definiera en ny vänster (Först först) axisVariablemed en speciell pseudo<sourceName>, som sägerERDDAP™var och hur man hittar värdet för den nya dimensionen från varje fil.
- Formatet för pseudosourceNamesom får värdet från ett filnamn (bara filename.ext) är att \*\O Filnamn, Datadata data Typ , ExtractRegex , fångaGroupNumber
- Formatet för pseudosourceNamesom får värdet från en fils absoluta namn är \*\O Vägen, Datadata data Typ , ExtractRegex , fångaGroupNumber \[För detta använder sökvägsnamnet alltid'/'som katalogen separator karaktär, aldrig ''.\]
- Formatet för pseudosourceNamesom får värdet från ett globalt attribut är \*\O Global: attribut Namnnamn , Datadata data Typ , ExtractRegex , fångaGroupNumber
- Denna pseudosourceNamealternativ fungerar annorlunda än de andra: istället för att skapa en ny vänster (Först först) axisVariableDetta ersätter värdet av strömmenaxisVariablemed ett värde som extraheras från filnamnet (bara filename.ext) . Formatet är \*\O Ersätt ersättare FrånFileName, Datadata data Typ , ExtractRegex , fångaGroupNumber
Beskrivningarna av de delar du behöver för att tillhandahålla är:
- attribut Namnnamn - namnet på det globala attributet som finns i varje fil och som innehåller dimensionsvärdet.
- Datadata data Typ ----- Detta specificerar datatypen som kommer att användas för att lagra värdena. Se standardlistan förDatadata data TyperattERDDAP™stöd, förutom att strängen inte är tillåten här eftersom axelvariabler iERDDAP™Kan inte vara String variabler.
Det finns ytterligare pseudodataType, timeFormat= Sträng TimeFormat som sägerERDDAP™att värdet är en String TimeStampenheter som är lämpliga för strängtid. I de flesta fall kommer stringTimeFormat du behöver vara en variant av ett av dessa format:
- yyyy-MM-dd"T'H:mm:ss.SSSZ - som ISO 8601:2004 (E E E E) datum tid format. Du kan behöva en förkortad version av detta, t.ex.yyyy-MM-ddH:mm:ss elleryyyy-MM-dd.
- yyyyMMddHmmss.SSS - som är den kompakta versionen av ISO 8601-datumformatet. Du kan behöva en förkortad version av detta, t.ex. yyyyMMddHmmss eller yyyyMMdd.
- M/d/yyy H:mm:ss.SSS - som är det amerikanska slash-datumformatet. Du kan behöva en förkortad version av detta, t.ex. M/d/yyyy.
- yyyyDDDHmmssSSS - som är året plus nolldag på året (t.ex. 001 = Jan 1, 365 = Dec 31 i ett icke-skottår; detta kallas ibland felaktigt Julian datum) . Du kan behöva en förkortad version av detta, t.ex. yyyyDDD.
Om du använder denna pseudo dataType, lägg till detta till den nya variablen<addAttributes>::
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Om du vill flytta alla tidsvärden, ändra tidsvärdet i enheter, t.ex. 1970-01-01T12:00:00Z.
- ExtractRegex ----- Detta ärregelbundet uttryck (Tutorial) som inkluderar en fångstgrupp (i parentes) som beskriver hur man extraherar värdet från filnamnet eller det globala attributvärdet. Till exempel, med ett filnamn som S19980011998031.L3b\_MO\_CHL.ncFånga grupp #1, "\dTutoriali det vanliga uttrycket S (O\dTutorial) O\dTutorialL3b.* kommer att fånga de första 7 siffrorna efter "S": 1998001.
- fångaGroupNumber ----- Detta är antalet fångar gruppen (inom ett par parenteser) i det ordinarie uttryck som innehåller information om intresse. Det är oftast 1 den f örsta fångstgruppen. Ibland måste du använda fångstgrupper för andra ändamål i regex, så då blir det viktiga fångstgruppsnumret 2 (Den andra fångstgruppen) eller 3 (tredje) etc.
Ett fullständigt exempel på enaxisVariablesom gör en aggregerad dataset med en ny tidsaxel som får tidsvärdena från filnamnet för varje fil är
<axisVariable>
<sourceName>\\*\\*\\*fileName,timeFormat=yyyyDDD,S(\\d{7})\\.L3m.\\*,1</sourceName>
<destinationName>time</destinationName>
</axisVariable>
När du använder "timeFormat=" pseudodata Typ,ERDDAP™kommer att lägga till 2 attribut tillaxisVariableSå att de verkar komma från källan:
<att name="standard\\_name">time</att>
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Så i detta fall,ERDDAP™Skapa en ny axel som heter"time"med dubbla värden (sekunder sedan 1970-01-01T00:00:00Z) genom att extrahera de 7 siffrorna efter "S" och före ".L3m" i filnamnet och tolka dem som tidsvärden formaterade som yyyyyDDD.
Du kan åsidosätta standardbastiden (1970-01-01T00:00:00Z) genom att lägga till enaddAttributesom anger en annan enhet attribut med en annan bastid. En vanlig situation är: det finns grupper av datafiler, var och en med en 1 dags sammansatt av en satellitdatamängd, där du vill att tidsvärdet ska vara middag av den dag som nämns i filnamnet. (Den centrerade tiden för varje dag) och vill ha variabelnlong\_nameAtt vara "Centered Time". Ett exempel som gör detta är:
<axisVariable>
<sourceName>\\*\\*\\*fileName,timeFormat=yyyyDDD,S(\\d{7})\\.L3m.\\*,1</sourceName>
<destinationName>time</destinationName>
<addAttributes>
<att name="long\\_name">Centered Time</att>
<att name="units">seconds since 1970-01-01T12:00:00Z</att>
</addAttributes>
</axisVariable>
Observera timmar = 12 under bastiden, vilket lägger till 12 timmar i förhållande till den ursprungliga bastiden på 1970-01-01T00:00:00Z.
Ett fullständigt exempel på enaxisVariablesom gör en aggregerad dataset med en ny "kör" axel (med int värden) som får löpvärdena från "runID" global attribut i varje fil (med värden som "r17\_global", där 17 är löpnumret) är att
<axisVariable>
<sourceName>\\*\\*\\*global:runID,int,(r|s)(\\d+)\\_global,2</sourceName>
<destinationName>run</destinationName>
<addAttributes>
<att name="ioos\\_category">Other</att>
<att name="units">count</att>
</addAttributes>
</axisVariable>
Observera användningen av fångstgrupp nummer 2 för att fånga siffrorna som uppstår efter "r" eller "s", och före "_global". Detta exempel visar också hur man lägger till ytterligare attribut (t.ex.,ioos\_categoryoch enheter) till axelvariabeln.
Externt komprimerade filer
-
Dataset som är delmängder avEDDGridFromFiles och EDDTable FromFiles kan servera data direkt från externt komprimerade datafiler, inklusive.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2, och .Z filer.
-
Detta fungerar överraskande bra!
I de flesta fall är avmattningen relaterad till att dekomprimera små och medelstora datafiler mindre. Om du behöver spara diskutrymme uppmuntrar vi starkt att använda den här funktionen, särskilt för äldre filer som sällan nås. -
Spara pengar!
Detta är en av de få funktionerna iERDDAP™Det ger dig en chans att spara mycket pengar (även på bekostnad av något minskad prestanda) . Om komprimeringsförhållandet är t.ex. 6:1 (Ibland blir det mycket högre) , då datasetets datafiler behöver bara 1/6 diskutrymmet. Kanske kan du klara dig med 1 RAID (av en given storlek) istället för 6 RAIDS (av samma storlek) . Det är en enorm kostnadsbesparingar. Förhoppningsvis förmågan att komprimera vissa filer i en samling (De äldre?) och inte komprimera andra (De nyare?) , och att ändra det när som helst, låt oss du minimera nackdelen för att komprimera några av filerna (långsammare tillgång) . Och om valet är mellan att lagra filerna på tejpen (och endast tillgänglig på begäran, efter en fördröjning) vs lagra dem komprimerade på en RAID (och tillgänglig viaERDDAP) Då finns det en stor fördel att använda komprimering så att användarna får interaktiva och (relativt) snabb åtkomst till data. Och om detta kan spara dig från att köpa en extra RAID, kan den här funktionen spara dig cirka 30 000 dollar. -
För allaEDDGridFrånFiles underklasser, om datafilerna har en förlängning som indikerar att de är externt komprimerade filer (För närvarande:.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2eller .Z) ,ERDDAP™kommer att dekomprimera filerna till datasetets cache-katalog när den läser dem (Om de inte redan är i cache) . Detsamma gäller för binär fil (t.ex.,.nc) underklasser av EDDTableFromFiles.
-
För EDDTableFromFiles underklasser för icke-binära filer (t.ex. .csv) , datafiler med en förlängning som indikerar att de är externt komprimerade filer kommer att dekomprimeras på flygningen när filen läses.
-
REQUIREMENT: Om den typ av externt komprimerad fil som används (t.ex.,.tgzeller.zip) stöder mer än 1 fil i den komprimerade filen, den komprimerade filen måste innehålla bara 1 fil.
-
Denna funktion förutsätter att innehållet i externt komprimerade filer inte ändras, så att en cachad dekomprimerad fil kan återanvändas. Om vissa eller alla datamängders datafiler ibland ändras, komprimera inte dessa filer. Detta är förenligt med vanlig användning, eftersom människor normalt inte komprimerar filer som de ibland behöver ändra.
-
<FilnamnRegex> För att göra detta arbete, datasetets<fileNameRegex> måste matcha komprimerade filers namn. Självklart regexes som.\*kommer att matcha alla filnamn. Om du anger en specifik filtyp, t.ex.\*Ü.nc, då måste du ändra regex för att inkludera kompressionsförlängningen också, t.ex. . Ü.ncÜ.gz(om alla filer kommer att vara Något *.nc.gzfiler) .
-
Det är bra om din dataset innehåller en blandning av komprimerade och inte komprimerade filer. Detta kan vara användbart om du tror att vissa filer (t.ex. äldre filer) kommer att användas mindre ofta och därför skulle det vara användbart att spara diskutrymme genom att komprimera dem. För att göra detta arbete,<fileNameRegex> måste matcha komprimerade och inte komprimerade filers namn, t.ex. .\*eller.\*Ü.nc (|Ü.gz) (där fångstgruppen i slutet av den anger att.gzär valfritt.
-
Det är bra om du komprimerar eller dekomprimerar specifika filer i samlingen när som helst. Om datamängden inte använder [<updateEveryNMillis >] (#updateeverynmillis) Ange datasetetsflaggaAtt berättaERDDAP™för att ladda om datamängden och därmed märka ändringarna. Intressant kan du använda olika komprimeringsalgoritmer och inställningar för olika filer i samma dataset. (t.ex.,.bz2för sällan använda filer,.gzför inte ofta använda filer, och ingen komprimering för ofta använda filer) , se bara till att regexen stöder alla filtillägg som används, t.ex. . \* \* \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .nc (|Ü.gz|Ü.bz2) .
-
Naturligtvis varierar komprimeringsgrader och hastigheter för de olika komprimeringsalgoritmerna med källfilen och inställningarna. (t.ex. kompressionsnivå) . Om du vill optimera detta system för dina filer, gör ett test av de olika komprimeringsmetoderna med dina filer och med en rad komprimeringsinställningar. Om du vill ha en pålitligt bra (Inte nödvändigtvis det bästa) Vi kommer att rekommendera litegzip (.gz) .gzipGör inte den minsta komprimerade filen (Det är rimligt nära) Men det komprimerar filen mycket snabbt och (viktigare förERDDAP™användare) dekomprimerar filen mycket snabbt. Plus,gzipprogramvara kommer standard med varje Linux och Mac OS installation och är lätt tillgänglig för Windows via gratis verktyg som 7Zip och Linux tillägg som Git Bash. Till exempel för att komprimera en källfil i.gzversion av filen (samma filnamn, men med.gzAppenderad) Använd (i Linux, Mac OS och Git Bash)
gzip sourceName
Att dekomprimera en.gzfil tillbaka till originalet, använd Gunzip sourceName.gz
För att komprimera var och en av källfilerna i katalogen och dess underkataloger, återkommande, använd gzip-R Regissör
Att dekomprimera var och en av.gzfiler i katalogen och dess underkataloger, återkommande, använda Gunzip -r Regissör
-
VARNING: Komprimera inte externt (gzip) filer som redan är internt komprimerade! Många filer har redan komprimerat data internt. Om dugzipDessa filer, de resulterande filerna kommer inte att vara mycket mindre (<5%) ochERDDAP™kommer att slösa tid på att dekomprimera dem när de behöver läsa dem. Till exempel:
-
datafiler: t.ex..nc4 och.hdf5 filer: Vissa filer använder intern komprimering; vissa inte. Hur man berättar: komprimerade variabler har "\_ChunkSize" attribut. Om en grupp rutnät.nceller.hdffiler är alla olika storlekar, de är sannolikt internt komprimerade. Om de är alla samma storlek komprimeras de inte internt.
-
bildfiler: t.ex., .gif, .jpg och .png
-
ljudfiler: t.ex., .mp3 och .ogg.
-
videofiler: t.ex., .mp4, .ogv och .webm.
-
Ett olyckligt udda fall: .wav ljudfiler är stora och inte internt komprimerade. Det skulle vara trevligt att komprimera (gzip) dem, men i allmänhet bör du inte för att om du gör det, användare kommer inte att kunna spela komprimerade filer i sin webbläsare.
-
Testfall: komprimering (medgzip) en dataset med 1523 rutnät.ncfiler.
- Data i källfilerna var glesa (massor av saknade värden) .
- Total diskutrymme gick från 57 GB innan komprimering till 7 GB efter.
- En begäran om massor av data från 1 tidspunkt är<1 s före och efter komprimering.
- En begäran om 1 datapunkt för 365 tidspunkter (Den värsta situationen) gick från 4 till 71 s.
För mig är det en rimlig avvägning för alla datamängder, och säkert för datamängder som sällan används.
-
Interna kontra yttre kompression - Jämfört med den interna filkomprimering som erbjuds av.nc4 och.hdf5 filer,ERDDAP"S tillvägagångssätt för externt komprimerade binära filer har fördelar och nackdelar. Nackdelen är: för en gång läs av en liten del av en fil är intern komprimering bättre eftersomEDDGridFrånFiles behöver bara dekomprimera några bitar (s) av filen, inte hela filen. MenERDDAP"S tillvägagångssätt har några fördelar:
- ERDDAP™stöder komprimering av alla typer av datafiler (binär och icke-binär, t.ex..nc3 och .csv) Inte bara.nc4 och.hdf4.
- Om huvuddelen av en fil måste läsas mer än en gång på kort tid, sparar det tid att dekomprimera filen en gång och läsa den många gånger. Detta händer iERDDAP™När en användare använder Make-A-Graph för datamängden och gör en serie små ändringar i diagrammet.
- Möjligheten att ha komprimerade filer och inte komprimerade filer i samma samling, låter dig mer kontroll över vilka filer som komprimeras och som inte är det. Och denna extra kontroll kommer utan att verkligen ändra källfilen (eftersom du kan komprimera en fil med t.ex..gzoch sedan dekomprimera den för att få den ursprungliga filen) .
- Möjligheten att ändra när som helst om en viss fil komprimeras och hur den komprimeras (olika algoritmer och inställningar) ger dig mer kontroll över systemets prestanda. Och du kan enkelt återställa den ursprungliga okomprimerade filen när som helst.
Även om inget tillvägagångssätt är en vinnare i alla situationer, är det klart attERDDAPförmåga att tjäna data från externt komprimerade filer gör extern komprimering ett rimligt alternativ till den interna komprimering som erbjuds av.nc4 och.hdf5. Det är viktigt med tanke på att intern komprimering är en av de främsta anledningarna till att människor väljer att använda.nc4 och.hdf5.
Dekomprimerad Cache
ERDDAP™gör en dekomprimerad version av någon komprimerad binär (t.ex.,.nc) datafil när den behöver läsa filen. De dekomprimerade filer hålls i datasetets katalog inom bigParentDirectory Dekomprimerad/. Dekomprimerade filer som inte har använts nyligen kommer att raderas för att frigöra utrymme när den kumulativa filstorleken är >10 GB. Du kan ändra det genom att ställa in<DecompressedCacheMaxGB> (Standard=10) i dataset Xml.xml, t ex
<decompressedCacheMaxGB>40</decompressedCacheMaxGB>
Dekomprimerade filer som inte har använts under de senaste 15 minuterna raderas också i början av varje större datamängdsreload. Du kan ändra det genom att ställa in<DecompressedCacheMaxMinutesOld> (Standard=15) i dataset Xml.xml, t ex
<decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>
Större siffror är trevliga, men den kumulativa storleken på de dekomprimerade filer kan orsaka bigParentDirectory att springa ur diskutrymme, vilket orsakar svåra problem.
- Eftersom dekomprimering av en fil kan ta en betydande tid (0,1 till 10 sekunder) datamängder med komprimerade filer kan dra nytta av att ställa in datamängdens [<nThreads>] (#Nthreads) Inställning till ett högre antal (2? 3? 4?) . Nackdelarna till ännu högre siffror (t.ex. 5? 6? 7?) minskar avkastningen och att en användares begäran sedan kan använda en hög andel av systemets resurser, vilket väsentligt minskar behandlingen av andra användares önskemål. Således finns det ingen idealisk nThreads inställning, bara olika konsekvenser i olika situationer med olika inställningar.
Sorterade dimensionsvärden
Värdena för varje dimension måste vara i sorterad ordning (uppstigande eller nedstigande, förutom den första (vänster-mest) dimension som måste uppstiga) . Värdena kan vara oregelbundet placerade. Det kan inte finnas några band. Detta är ett krav påCF metadata standard. Om någon dimensions värderingar inte är i sorterad ordning kommer datamängden inte att laddas ochERDDAP™identifiera det första osorterade värdet i loggfilen, bigParentDirectory /logs/log.txt.
Osorterade dimensionsvärden indikerar nästan alltid ett problem med källdatamängden. Detta sker oftast när en felaktig eller olämplig fil ingår i aggregeringen, vilket leder till en osorterad tidsdimension. För att lösa detta problem, se felmeddelandet iERDDAP™log.txt-fil för att hitta det kränkande tidsvärdet. Titta sedan i källfilerna för att hitta motsvarande fil (eller en före eller en efter) Det hör inte hemma i aggregeringen.
Directories
Filerna kan finnas i en katalog eller i en katalog och dess underkataloger (Återkommande) . Om det finns ett stort antal filer (Till exempel >1 000) operativsystemet (och därmedEDDGridFrånFiles) kommer att fungera mycket mer effektivt om du lagrar filerna i en serie underkataloger (en per år, eller en per månad för datamängder med mycket frekventa filer) så att det aldrig finns ett stort antal filer i en viss katalog.
<cacheFromUrl>
Allt alltEDDGridFromFiles och alla EDDTableFromFiles dataset stöder en uppsättning taggar som berättarERDDAP™för att ladda ner och behålla en kopia av alla en fjärrdatamängds filer, eller en cache av några filer (nedladdad efter behov) . Detta kan vara otroligt användbart. SeCache FrånUrl dokumentation.
Remote Directories och HTTP Range Requests
(AKA Byte Serving, Byte Range Requests, Accept-Rangeshttpheader)
EDDGridFromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles och EDDTableFromNcCFFiles, kan Ibland ibland ibland tjäna data från.ncfiler på fjärrservrar och nås via HTTP om servern stöderByte serveringvia HTTP range requests (HTTP-mekanismen för byte servering) . Detta är möjligt eftersom netcdf-java (som skallERDDAP™användning för att läsa.ncfiler filer) stöder att läsa data från fjärrkontrollen.ncfiler via HTTP-serieförfrågningar.
Gör inte detta! Det är fruktansvärt ineffektivt och långsamt. Istället, använd [<cacheFromUrl> system (#cachefromurl) .
TillgångERDDAP™datamängder som filer via byte range requests - Flippa detta runt, med tanke på att du kan (i teorin) Tänk på en dataset iERDDAP™Som jätte.ncFil genom att appendera ".ncTill basen OPenDAPURL för en viss dataset (t.ex., https://myserver.org/erddap/griddap/datasetID.nc och även genom att lägga till en fråga efter det för att ange en delmängd) Det är kanske rimligt att fråga om du kan använda netcdf-java.Ferreteller någon annanNetCDFklientprogramvara för att läsa data via HTTP Range Requests frånERDDAP. Svaret är nej, för det finns inte riktigt en stor ".ncfil. Om du vill göra detta, gör istället ett av dessa alternativ:
- Användning(OPeN)DAPklientprogramvara för att ansluta till griddap-tjänsterna som erbjuds avERDDAP. Det är vadDAP (och därmedERDDAP) designades för. Det är mycket effektivt.
- Eller ladda ner källfilen (s) från"files"Systemsystem (eller en subset-fil via en.nc?? Fråga) till din dator och använd netcdf-java,Ferreteller någon annanNetCDFklientprogramvara för att läsa (Nu nu nu) lokal fil (s) .
Cached File Information
När enEDDGridFromFiles dataset laddas först,EDDGridFromFiles läser information från alla relevanta filer och skapar tabeller (En rad för varje fil) med information om varje giltig fil och varje "dålig" (olika eller ogiltiga) fil.
- Tabellerna lagras också på disken, somNetCDFv3.ncfiler i bigParentDirectory /dataset/ Last2CharsOfDatasetID /// datasetID i filer som heter: DirTable.nc (som innehåller en lista över unika katalognamn) , fil Bord.nc (som håller tabellen med varje giltig fils information) , badFiles.nc (som håller tabellen med varje dålig fils information) .
- För att påskynda åtkomsten till enEDDGridFrånFiles dataset (men på bekostnad av att använda mer minne) Du kan använda
true
Att berättaERDDAP™för att hålla en kopia av filinformationstabellerna i minnet.
- Kopieringen av filinformationstabellerna på disken är också användbar närERDDAP™stängs och startas om: det spararEDDGridFrånFiles från att behöva läsa om alla datafiler.
- När en dataset laddas om,ERDDAP™behöver bara läsa data i nya filer och filer som har ändrats.
- Om en fil har en annan struktur från andra filer (till exempel en annan datatyp för en av variablerna, eller ett annat värde för "enheter"attribut) ,ERDDAPlägger till filen i listan över "dåliga" filer. Information om problemet med filen kommer att skrivas till bigParentDirectory /logs/log.txt fil.
- Du bör aldrig behöva ta bort eller arbeta med dessa filer. Ett undantag är: Om du fortfarande gör ändringar i en datasetdatasets.xmlinstallation, du kanske vill ta bort dessa filer för att tvingaERDDAP™att läsa alla filer eftersom filerna kommer att läsas / tolkas annorlunda. Om du någonsin behöver ta bort dessa filer kan du göra det när duERDDAP™kör. (Sätt sedan enflaggaför att ladda om dataset ASAP.) Men,ERDDAP™brukar märka attdatasets.xmlinformation matchar inte filen Tabellinformation och raderar filtabellerna automatiskt.
- Om du vill uppmuntraERDDAP™för att uppdatera lagrad dataset information (till exempel, om du bara har lagt till, tagit bort eller ändrat några filer till datasetets datakatalog) AnvändaFlagga systemAtt tvingaERDDAP™för att uppdatera cachade filinformation.
Hanteringsförfrågningar
När en kunds begäran om data behandlas,EDDGridFromFiles kan snabbt titta i tabellen med giltig filinformation för att se vilka filer som har begärda data.
Uppdatera Cached File Information
När datamängden laddas om uppdateras den cachade filinformationen.
- Datamängden laddas regelbundet enligt bestämda av<reloadEveryNMinutes > i datasetets information idatasets.xml.
- Datasetet laddas så snart som möjligt när som helstERDDAP™upptäcker att du har lagt till, tagit bort,touch'd ) (ändra filens sista Ändrad tid) eller ändrat en datafil.
- Datasetet laddas så snart som möjligt om du använderFlagga system.
När datamängden laddas om,ERDDAP™jämför de tillgängliga filerna för de cachade filinformationstabellerna. Nya filer läses och läggs till i den giltiga filer tabellen. Filer som inte längre finns tappas från tabellen giltiga filer. Filer där fil timestamp har ändrats läses och deras information uppdateras. De nya tabellerna ersätter de gamla tabellerna i minnet och på disken.
Dåliga filer
Tabellen med dåliga filer och anledningarna till att filerna förklarades dåligt (korrupt fil, saknade variabler etc.) mailas till e-post Allting Allt Till e-postadress (förmodligen du) Varje gång datasetet laddas om. Du bör ersätta eller reparera dessa filer så snart som möjligt.
Saknade variabler
Om några av filerna inte har några avdataVariables definierade i datasetetsdatasets.xmlChunk, det är okej. När närEDDGridFromFiles läser en av dessa filer, det kommer att fungera som om filen hade variabeln, men med alla saknade värden.
FTP Problem / Råd
Om du FTP nya datafiler tillERDDAP™server medanERDDAP™Igång, det finns chansen attERDDAP™kommer att ladda om datamängden under FTP-processen. Det händer oftare än du kanske tror! Om det händer visas filen vara giltig (Den har ett giltigt namn) Men filen är ännu inte giltig. OmERDDAP™försöker läsa data från den ogiltiga filen, det resulterande felet kommer att leda till att filen läggs till i tabellen med ogiltiga filer. Detta är inte bra. För att undvika detta problem, använd ett tillfälligt filnamn när FTP-filen till exempel ABC2005.nc\_TEMP . Sedan filenNameRegex test (Se nedan) indikerar att detta inte är en relevant fil. Efter FTP-processen är klar, byt namn på filen till rätt namn. Reneamingprocessen kommer att göra att filen blir relevant på ett ögonblick.
"0 filer" Felmeddelande
Om du körGenerateDatasetsXmlellerDasDdseller om du försöker ladda enEDDGridFrån...Files dataset inERDDAP™, och du får ett "0 filer" felmeddelande som indikerar attERDDAP™Hittade 0 matchande filer i katalogen (När du tror att det finns matchande filer i den katalogen) Från:
- Kontrollera att filerna verkligen finns i den katalogen.
- Kontrollera stavningen av katalogen namn.
- Kolla filenNameRegex. Det är verkligen lätt att göra misstag med regex. För teständamål, prova regex . * som ska matcha alla filnamn. (Se dettaregex dokumentationochRegex tutorial.)
- Kontrollera att användaren som kör programmet (t.ex. användar=tomcat (??) För Tomcat/ERDDAP) har "läst" tillstånd för dessa filer.
- I vissa operativsystem (Till exempel SELinux) Och beroende på systeminställningar måste användaren som körde programmet ha "läs" tillstånd för hela katalogkedjan som leder till katalogen som har filerna.
EDDGridFrånFiles skeleton XML
- Skelettet XML för allaEDDGridFromFiles underklasser är:
<dataset type="EDDGridFrom...Files" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
EDDGridFromFiles subclasses, this uses Java's WatchDirectory system
to notice new/deleted/changed files quickly and efficiently. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<fileDir>...</fileDir> <-- The directory (absolute) with the
data files. -->
<recursive>true|false</recursive> <!-- 0 or 1. Indicates if
subdirectories of fileDir have data files, too. -->
<pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
match the pathRegex (default=".\") will be accepted. -->
<fileNameRegex>...</fileNameRegex> <-- 0 or 1. A
regular expression (tutorial) describing valid data
file names, for example, ".\\.nc" for all .nc files. -->
<accessibleViaFiles>true|false(default)</accessibleViaFiles>
<!-- 0 or 1 -->
<metadataFrom>...</metadataFrom> <-- The file to get
metadata from ("first" or "last" (the default) based on file's
lastModifiedTime). -->
<fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or
false (the default)) -->
<cacheFromUrl>...</cacheFromUrl> <!-- 0 or 1 -->
<cacheSizeGB>...</cacheSizeGB> <!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<axisVariable>...</axisVariable> <!-- 1 or more -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
</dataset>
EDD*FromAudioFiles
EDDGridFrån AudioFiles och EDDTableFromAudioFiles aggregerade data från en samling av lokala ljudfiler. (Dessa först dök upp iERDDAP™v1.82.) Skillnaden är attEDDGridFromAudioFiles behandlar data som en multidimensionell dataset (Vanligtvis med 2 dimensioner:\[Fil Start Tid\]och\[Förfluten Tid inom en fil\]) , medan EDDTableFromAudioFiles behandlar data som tabelldata (vanligtvis med kolumner för filen startTime, elapsedTime med filen, och data från ljudkanalerna) .EDDGridFrån AudioFiles kräver att alla filer har samma antal prover, så om det inte är sant måste du använda EDDTableFromAudioFiles. Annars är valet av vilken EDD-typ du ska använda helt ditt val. En fördel med EDDTableFromAudioFiles: du kan lägga till andra variabler med annan information, t.ex.stationIDstationType. I båda fallen gör bristen på en enhetlig tidsvariabel det svårare att arbeta med data från dessa EDD-typer, men det fanns inget bra sätt att skapa en enhetlig tidsvariabel.
Se klassens superklasser,EDDGridFrånFilesochEDDTableFromFilesför allmän information om hur denna klass fungerar och hur man använder den.
Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Eftersom ljudfiler inte har någon metadata än information relaterad till kodningen av ljuddata måste du redigera utgången från GenerateDatasets Xml tillhandahåller viktig information (t.ex. titel, sammanfattning,creator\_nameInstitution, historia) .
Detaljer:
- Det finns ett stort antal ljudfilformat. För närvarande,ERDDAP™kan läsa data från de flesta .wav och .au-filer. Det kan för närvarande inte läsa andra typer av ljudfiler, t.ex., .aiff eller .mp3. Om du behöver stöd för andra ljudfilformat eller andra varianter av .wav och .au, vänligen maila din begäran till Chris. John på noaa.gov. Eller som en lösning kan du använda just nu kan du konvertera dina ljudfiler till PCM\_ SIGNED (för integer data) eller PCM_FLOAT (för flytande punktdata) .wav filer så attERDDAP™kan arbeta med dem.
- För närvarande,ERDDAP™kan läsa ljudfiler med vadJavaAudioFormat-klassen kallar PCM\_FLOAT, PCM\_SIGNED, PCM\_UNSIGNED, ALAW och ULAW-kodningar.ERDDAP™konverterar PCMUNSIGNED-värden (t.ex. 0 till 255) i signerade värden (t.ex. -128 till 128) genom att ändra bitarna i datavärdena.ERDDAP™konverterar ALAW och ULAW kodade från deras infödda kodade byte format i korthet (Int16) värden. Sedan dessJavavill ha bigEndian=true data,ERDDAP™omordnar byte av data som lagras med bigEndian=false (Lite endian) för att läsa värdena korrekt. För alla andra kodningar (PCM) ,ERDDAP™läser data som det är.
- När närERDDAP™läser data från ljudfiler, det omvandlar filens tillgängliga ljudmetadata till globala attribut. Detta inkluderar alltid (med provvärden som visas)
String audioBigEndian "falsk"; //sann eller falsk Int ljud Kanal 1; String audioEncoding "PCM\_SIGNED"; float audioFrameRate 96000.0; //per sekund int audioFrameSize 2; //# av data byte per ram Flytande ljudSampleRate 96000.0; //per sekund int audioSampleSizeInBits 16; //# bits per kanal per prov
FörERDDAP"Syfte, en ram är synonymt med ett prov, vilket är data för en punkt i tiden. attributen iERDDAP™kommer att ha den information som beskriver data som det var i källfilerna.ERDDAP™kommer ofta att ha ändrat detta medan du läser data, t.ex. PCM\_UNSIGNED, ALAW och ULAW-kodade data konverteras till PCM\_SIGNED, och bigEndian=false data konverteras till bigEndian=true data (Vad är hurJavaVill läsa den) . I slutändan datavärden iERDDAP™kommer alltid att varaPCM-kodadedatavärden (dvs. enkla digitaliserade prover av ljudvågen) .
- När närERDDAP™läser data från ljudfiler, det läser hela filen.ERDDAP™kan läsa så många som cirka 2 miljarder prover per kanal. Till exempel, om provfrekvensen är 44,100 prov per sekund, översätter 2 miljarder prover till cirka 756 minuter ljuddata per fil. Om du har ljudfiler med mer än denna mängd data måste du bryta upp filerna i mindre bitar så attERDDAP™kan läsa dem.
- För därförERDDAP™läser hela ljudfiler,ERDDAP™måste ha tillgång till en stor mängd minne för att arbeta med stora ljudfiler. SeERDDAPMinnesinställningar. Återigen, om detta är ett problem, en lösning som du kan använda just nu är att bryta upp filerna i mindre bitar så attERDDAP™kan läsa dem med mindre minne.
- Vissa ljudfiler skrevs felaktigt.ERDDAP™gör en liten ansträngning att hantera sådana fall. Men i allmänhet, när det finns ett fel,ERDDAP™kommer att kasta ett undantag (och förkasta den filen) eller (om felet inte kan upptäckas) Läs data (Men data kommer att vara felaktiga) .
- ERDDAP™inte kontrollera eller ändra ljudets volym. Helst skalas integer ljuddata för att använda hela sortimentet av datatypen.
- Ljudfiler och ljudspelare har inget system för saknade värden (t.ex. -999 eller Float.NaN) . Så ljuddata borde inte ha några saknade värden. Om det saknas värden (t.ex. om du behöver förlänga en ljudfil) Använd en serie av 0 som kommer att tolkas som perfekt tystnad.
- När närERDDAP™Läser data från ljudfiler, det skapar alltid en kolumn som kallas förfluten Tid med tiden för varje prov, på några sekunder (lagras som dubblar) i förhållande till det första provet (som tilldelas förflutet Tid=0,0 s) . MedEDDGridFrån AudioFiles blir detta den förflutna tidsaxelvariabeln.
- EDDGridFromAudioFiles kräver att alla filer har samma antal prover. Så om det inte är sant måste du använda EDDTableFromAudioFiles.
- FörEDDGridFrån AudioFiles rekommenderar vi att du ställer in [<dimensionValuesInMemory] (#Dimensionvaluesinmemory) falskt (Som rekommenderas av GenerateDatasets Xml) Eftersom tidsdimensionen ofta har ett stort antal värden.
- FörEDDGridFrån AudioFiles bör du nästan alltid användaEDDGridFrånFiles system förAggregation via Filnamnnästan alltid genom att extrahera inspelningens startdatum Tid från filnamnen. Till exempel,
<sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
GenerateDatasets Xml kommer att uppmuntra detta och hjälpa dig med detta.
- För EDDTableFromAudioFiles bör du nästan alltid använda EDDTableFromFiles-systemet för\*\*FileName pseudosourceNamesatt extrahera information från filens namn (Nästan alltid startdatum Tid för inspelningen) och främja det som en kolumn av data. Till exempel,
<sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
Tidsformatet ska sedan anges som enhetsattributet:<Att namn="units">yyyMdd'\_'Hmmss</att>
EDDGridFrånMergeIRFiles
EDDGridFrånMergeIRFiles aggregerar data från lokala,MergeIRfiler, som är frånTropisk regn mäta uppdrag (TRMM) , som är ett gemensamt uppdrag mellan NASA och Japan Aerospace Exploration Agency (JAXA) . Merge IR-filer kan laddas ner frånNASA.
EDDGridFromMergeIRFiles.java skrevs och bidrog tillERDDAP™projekt av Jonathan Lafite och Philippe Makowski av R.Tech Engineering (licens: upphovsrättsskyddad öppen källkod) .
EDDGridFromMergeIRFiles är lite ovanligt:
- EDDGridFromMergeIRFiles stöder komprimerade eller okomprimerade källdatafiler, i alla kombinationer, i samma dataset. Detta gör att du till exempel kan komprimera äldre filer som sällan nås, men okomprimera nya filer som ofta nås. Eller du kan ändra typen av komprimering från originalet. Z till exempel,.gz.
- Om du har komprimerade och okomprimerade versioner av samma datafiler i samma katalog, se till att<fileNameRegex> för din dataset matchar filnamnen som du vill att den ska matcha och inte matcha filnamn som du inte vill att den ska matcha.
- Okomprimerade källdatafiler måste inte ha någon filändelse (d.v.s. nej. i filnamnet) .
- Komprimerade källdatafiler måste ha en filändelse, menERDDAP™bestämmer typen av komprimering genom att inspektera innehållet i filen, inte genom att titta på filens filändelse (Till exempel ".Z") . De stödda kompressionstyperna inkluderar "gz", "bzip2", "xz", "lzma", "snappy-raw", "snappy-framed", "pack200" och "z". När närERDDAP™läser komprimerade filer, det dekomprimerar on-the-fly, utan att skriva till en tillfällig fil.
- Alla källdatafiler måste använda det ursprungliga filnamnssystemet: dvs. merg\_ YYYMMMDDHH 4km-pixel (där var YYYMMMDDHH anger den tid som är associerad med data i filen) plus en filändelse om filen komprimeras.
Se klassens superklass,EDDGridFrånFilesför allmän information om hur denna klass fungerar och hur man använder den.
Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
EDDGridFrånNcFiles
EDDGridFrånNcFiles aggregerar data från lokala, ruttna,GRIB .grb och .grb2filer,HDF (v4 eller v5) .hdffiler,.ncmlfiler,NetCDF (v3 eller v4) .ncfiler ochZarrfiler filer (Från och med version 2.25) . Zarr-filer har något annorlunda beteende och kräver antingen filenNameRegex eller vägenRegex för att inkludera "zarr".
Detta kan fungera med andra filtyper (Till exempel BUFR) Vi har bara inte testat det - skicka oss några provfiler.
- för GRIB filer,ERDDAP™kommer att göra en .gbx indexfil första gången den läser varje GRIB-fil. Så GRIB-filerna måste vara i en katalog där "användaren" som körde Tomcat har läst + skrivtillstånd.
- Se klassens superklass,EDDGridFrånFilesför information om hur denna klass fungerar och hur man använder den.
- Börja medERDDAP™v2.12,EDDGridFrånNcFiles ochEDDGridFrånNcFiles Unpacked kan läsa data från "strukturer" i.nc4 och.hdf4 filer. För att identifiera en variabel som kommer från en struktur,<sourceName> > > > > måste använda formatet: FullStructureName | medlemName till exempel grupp1/myStruct|MyMember.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Grupper i Gridded Nc-filer
Netcdf4 filer kan innehålla grupper. ERDDAP™gör bara en dataset från variablerna i en grupp och alla dess föräldragrupper. Du kan ange ett specifikt gruppnamn i GenerateDatasets Xml (Omit the trailing slash) eller använda "" för att ha GenerateDatasets Xml söker alla grupper för de variabler som använder flest dimensioner eller använder "\[root\]"Att ha GenerateDatasets letar bara efter variabler i rotgruppen.
Det första GenerateDatasetsXml gör för denna typ av datamängd efter att du svarat på frågorna är att skriva ut ncdump-liknande struktur av provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
EDDGridFrånNcFilesUnpacked
EDDGridFrånNcFilesUnpacked är en variant avEDDGridFrånNcFilessom samlar in data från lokala, ruttnaNetCDF (v3 eller v4) .ncoch relaterade filer. Skillnaden är att denna klass packar upp varje datafil innanEDDGridFromFiles tittar på filerna:
- Det packar upp variabler som är packade medscale\_factoroch/elleradd\_offset.
- Den konverterar \_FillValue ochmissing\_valueVärdena att vara NaNs (eller MAX\_VALUE för datatyper) .
- Det omvandlar tid och tidsstämpelvärden till"seconds since 1970-01-01T00:00:00Z".
Den stora fördelen med denna klass är att den ger ett sätt att hantera olika värden avscale\_factor,add\_offset\_FillValue,missing\_value, eller tidsenheter i olika källfiler i en samling. Annars skulle du behöva använda ett verktyg somNcMLellerNCOändra varje fil för att ta bort skillnaderna så att filerna kan hanteras avEDDGridFrånNcFiles. För att denna klass ska fungera korrekt måste filerna följa CF-standarderna för de relaterade attributen.
- Om du försöker göra enEDDGridFrånNcFiles Upppackad från en grupp filer som du tidigare provat och misslyckats med att användaEDDGridFrånNcFiles, cd till bigParentDirectory /dataset/ Last2Letters /// datasetID /// där var Last2Letters är de två sista bokstäverna idatasetID, och radera alla filer i den katalogen.
- Börja medERDDAP™v2.12,EDDGridFrånNcFiles ochEDDGridFrånNcFiles Unpacked kan läsa data från "strukturer" i.nc4 och.hdf4 filer. För att identifiera en variabel som kommer från en struktur,<sourceName> > > > > måste använda formatet: FullStructureName | medlemName till exempel grupp1/myStruct|MyMember.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Netcdf4 filer kan innehålla grupper. SeDenna dokumentation.
Det första GenerateDatasetsXml gör för denna typ av dataset efter att du svarat på frågorna är att skriva ut ncdump-liknande strukturen i provfilen. före Det är packat. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
EDDGridLonPM180
EDDGridLonPM180 modifierar barnets longitudvärden (innesluten) EDDGriddatamängd som har en viss longitud värden större än 180 (Till exempel 0 till 360) så att de är i intervallet -180 till 180 (Longitude Plus eller Minus 180, alltså namnet) .
- Detta ger ett sätt att göra datamängder som har longitudvärden större än 180 kompatibla i / medOGCtjänster (till exempelWMSserver iERDDAP) Eftersom alltOGCTjänster kräver longitudvärden inom -180 till 180.
- Att arbeta nära en diskontinuitet orsakar problem, oavsett om diskontinuiteten är på längden 0 eller på längden 180. Denna datasettyp låter dig undvika dessa problem för alla, genom att erbjuda två versioner av samma dataset: en med longitudvärden i intervallet 0 till 360 ("Pacificentric"?) , en med longitudvärden i intervallet -180 till 180 ("Atlanticentric"?) .
- För barndataset med alla longitudvärden som är större än 180 är alla nya longitudvärden helt enkelt 360 grader lägre. Till exempel skulle en datamängd med longitudvärden på 180 till 240 bli en datamängd med longitudvärden på -180 till -120.
- För barndatauppsättningar som har longitudvärden för hela världen (ungefär 0 till 360) Det nya longitudvärdet kommer att omordnas (grovt) -180 till 180: De ursprungliga 0 till nästan 180 värden är oförändrade. De ursprungliga 180 till 360 värden konverteras till -180 till 0 och flyttas till början av longitud array.
- För barndata som sträcker sig över 180 men inte täcker världen,ERDDAP™infogar saknade värden som behövs för att göra en dataset som täcker världen. Till exempel skulle en barndatamängd med longitudvärden på 140 till 200 bli en datamängd med longitudvärden på -180 till 180. Barnvärdena på 180 till 200 skulle bli -180 till -160. Nya longitudvärden skulle införas från -160 till 140. Motsvarande datavärden blir \_FillValues. Barnvärdena på 140 till nästan 180 skulle vara oförändrade. Införandet av saknade värden kan verka udda, men det undviker flera problem som beror på att ha longitudvärden som hoppar plötsligt. (från -160 till 140) .
- InomGenerateDatasetsXmlDet finns en speciell "dataset typ",EDDGridLonPM180FromErddapCatalog, som låter dig genereradatasets.xmlFörEDDGridLonPM180 datamängder från varjeEDDGridDataset i enERDDAPsom har någon longitud värden större än 180. Detta underlättar att erbjuda två versioner av dessa datamängder: originalet, med longitudvärden i intervallet 0 till 360, och den nya datamängden, med longitudvärden i intervallet -180 till 180.
Barnets datamängd inom varjeEDDGridLonPM180 dataset blir enEDDGridFromErddap dataset som pekar på den ursprungliga dataset. Den nya dataset'sdatasetIDär namnet på den ursprungliga dataset plus "\_LonPM180". Till exempel,
<dataset type="EDDGridLonPM180" datasetID="erdMBsstdmday\\_LonPM180" active="true">
<dataset type="EDDGridFromErddap" datasetID="erdMBsstdmday\\_LonPM180Child">
<!-- SST, Aqua MODIS, NPP, 0.025 degrees, Pacific Ocean, Daytime
(Monthly Composite) minLon=120.0 maxLon=320.0 -->
<sourceUrl>https://coastwatch.pfeg.noaa.gov/erddap/griddap/erdMBsstdmday
</sourceUrl>
</dataset>
</dataset>
Sätt påEDDGridLonPM180 dataset nedanför Den ursprungliga dataset idatasets.xml. Det undviker vissa möjliga problem.
Alternativt kan du ersättaEDDGridFromErddap barn dataset med den ursprungliga datasetdatasets.xml. Då kommer det bara att finnas en version av datamängden: den med longitudvärden inom -180 till 180. Vi motverkar detta eftersom det finns tillfällen då varje version av datamängden är bekvämare.
- Om du erbjuder två versioner av en dataset, till exempel en med longitud 0 till 360 och en med longitud -180 till 180:
- Du kan använda valfri [<tillgänglig tillgänglig ViaWMS>Falska<Tillgänglig ViaWMS>] (#accessibleviawms) med datamängden 0-360 för att med våld inaktiveraWMSservice för denna dataset. Då är endast LonPM180-versionen av datasetet tillgänglig viaWMS.
- Det finns ett par sätt att hålla LonPM180-datauppsättningen uppdaterad med ändringar av den underliggande datamängden:
- Om barnets dataset är enEDDGridFromErddap dataset som refererar till en dataset i sammaERDDAP™LonPM180 datamängden försöker direkt prenumerera på den underliggande datamängden så att den alltid är uppdaterad. Direktabonnemang genererar inte e-postmeddelanden som ber dig att validera prenumerationen - validering bör göras automatiskt.
- Om barnets datamängd inte är enEDDGridFromErddap dataset som är på sammaERDDAP™LonPM180 dataset kommer att försöka använda det vanliga abonnemangssystemet för att prenumerera på det underliggande datasetet. Om du har abonnemangssystemet i dittERDDAP™Påslagen, du bör få e-postmeddelanden som ber dig att validera prenumerationen. Snälla gör det.
- Om du har abonnemangssystemet i dittERDDAP™Avstängning, LonPM180 datamängden kan ibland ha föråldrad metadata tills LonPM180 datamängden laddas om. Så om abonnemangssystemet stängs av, bör du ställa in [<Reload EveryNMinutes (#reloadeveryn Minuter) Inställning av LonPM180 datamängden till ett mindre antal, så att det är mer sannolikt att fånga ändringar i barndatamängden tidigare.
EDDGridLonPM180 skelett XML
<dataset type="EDDGridLonPM180" datasetID\="..." active\="..." >
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
EDDGridFromDap, this gets the remote .dds and then gets the new
leftmost (first) dimension values. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<dataset>...</dataset> <!-- The child EDDGrid dataset. -->
</dataset>
EDDGridLon0360
EDDGridLon0360 modifierar barnets longitudvärden (innesluten) EDDGriddatamängd som har vissa longitudvärden mindre än 0 (Till exempel, -180 till 180) så att de är i intervallet 0 till 360 (Därför namnet) .
- Att arbeta nära en diskontinuitet orsakar problem, oavsett om diskontinuiteten är på längden 0 eller på längden 180. Denna datasettyp låter dig undvika dessa problem för alla, genom att erbjuda två versioner av samma dataset: en med longitudvärden i intervallet -180 till 180 ("Atlanticentric"?) . en med longitudvärden i intervallet 0 till 360 ("Pacificentric"?) ,
- För barndataset med alla longitudvärden mindre än 0 är alla nya longitudvärden helt enkelt 360 grader högre. Till exempel skulle en datamängd med longitudvärden på -180 till -120 bli en datamängd med longitudvärden på 180 till 240.
- För barndatauppsättningar som har longitudvärden för hela världen (ungefär -180 till 180) Det nya longitudvärdet kommer att omordnas (grovt) 0 till 360: De ursprungliga -180 till 0-värden omvandlas till 180 till 360 och flyttas till slutet av longitudarrayen. De ursprungliga 0 till nästan 180 värden är oförändrade.
- För barndatauppsättningar som spänner över lon = 0 men inte täcker världen,ERDDAP™infogar saknade värden som behövs för att göra en dataset som täcker världen. Till exempel skulle en barndatamängd med longitudvärden på -40 till 20 bli en datamängd med longitudvärden på 0 till 360. Barnvärdena på 0 till 20 skulle vara oförändrade. Nya longitudvärden skulle införas från 20 till 320. Motsvarande datavärden blir \_FillValues. Barnvärdena på -40 till 0 skulle bli 320 till 360. Införandet av saknade värden kan verka udda, men det undviker flera problem som beror på att ha longitudvärden som hoppar plötsligt. (t ex från 20 till 320) .
- InomGenerateDatasetsXmlDet finns en speciell "dataset typ",EDDGridLon0360 från ErddapCatalog, som låter dig genereradatasets.xmlFörEDDGridLon0360 datamängder från varjeEDDGridDataset i enERDDAPsom har någon longitud värden större än 180. Detta underlättar att erbjuda två versioner av dessa datamängder: originalet, med longitudvärden i intervallet 0 till 360, och den nya datamängden, med longitudvärden i intervallet -180 till 180.
Barnets datamängd inom varjeEDDGridLon0360 dataset blir enEDDGridFromErddap dataset som pekar på den ursprungliga dataset. Den nya dataset'sdatasetIDär namnet på den ursprungliga dataset plus "\_Lon0360". Till exempel,
<dataset type="EDDGridLon0360" datasetID="erdMBsstdmday\\_Lon0360" active="true">
<dataset type="EDDGridFromErddap" datasetID="erdMBsstdmday\\_Lon0360Child">
<!-- SST, Aqua MODIS, NPP, 0.025 degrees, Pacific Ocean, Daytime
(Monthly Composite) minLon=-40.0 maxLon=20.0 -->
<sourceUrl>https://coastwatch.pfeg.noaa.gov/erddap/griddap/erdMBsstdmday
</sourceUrl>
</dataset>
</dataset>
Sätt påEDDGridLon0360 dataset nedanför Den ursprungliga dataset idatasets.xml. Det undviker vissa möjliga problem.
Alternativt kan du ersättaEDDGridFromErddap barn dataset med den ursprungliga datasetdatasets.xml. Då kommer det bara att finnas en version av datamängden: den med longitudvärden inom 0 till 360. Vi motverkar detta eftersom det finns tillfällen då varje version av datamängden är bekvämare.
- Om du erbjuder två versioner av en dataset, till exempel en med longitud 0 till 360 och en med longitud -180 till 180:
- Du kan använda valfri [<tillgänglig tillgänglig ViaWMS>Falska<Tillgänglig ViaWMS>] (#accessibleviawms) med 0 till 360 dataset för att med våld inaktiveraWMSservice för denna dataset. Då kommer endast -180-180-versionen av datamängden att vara tillgänglig viaWMS.
- Det finns ett par sätt att hålla Lon0360 datamängden uppdaterad med ändringar av den underliggande datamängden:
- Om barnets dataset är enEDDGridFromErddap dataset som refererar till en dataset i sammaERDDAP™Lon0360 dataset försöker direkt prenumerera på den underliggande dataset så att den alltid är uppdaterad. Direktabonnemang genererar inte e-postmeddelanden som ber dig att validera prenumerationen - validering bör göras automatiskt.
- Om barnets datamängd inte är enEDDGridFromErddap dataset som är på sammaERDDAP™Lon0360 dataset kommer att försöka använda det vanliga abonnemangssystemet för att prenumerera på det underliggande datasetet. Om du har abonnemangssystemet i dittERDDAP™Påslagen, du bör få e-postmeddelanden som ber dig att validera prenumerationen. Snälla gör det.
- Om du har abonnemangssystemet i dittERDDAP™Avstängning, Lon0360 datamängden kan ibland ha föråldrad metadata tills Lon0360 datamängden laddas om. Så om abonnemangssystemet stängs av, bör du ställa in [<Reload EveryNMinutes (#reloadeveryn Minuter) Inställning av datasetet Lon0360 till ett mindre antal, så att det är mer sannolikt att fånga ändringar i barndatasetet tidigare.
EDDGridLon0360 skelett XML
<dataset type="EDDGridLon0360" datasetID\="..." active\="..." >
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
EDDGridFromDap, this gets the remote .dds and then gets the new
leftmost (first) dimension values. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<dataset>...</dataset> <!-- The child EDDGrid dataset. -->
</dataset>
EDDGridSideBySide
EDDGridSideBySide aggregat två eller fleraEDDGridDataset (Barnen) sida vid sida.
- Den resulterande datamängden har alla variabler från alla barndatamängder.
- Föräldradataset och alla barndatamängder måste ha olikadatasetIDs. Om några namn i en familj är exakt samma, kommer datamängden inte att laddas (med felmeddelandet att värdena på den aggregerade axeln inte är i sorterad ordning) .
- Alla barn måste ha samma källvärden föraxisVariables\[1+\] (Till exempel latitud, longitud) . Testets precision bestäms avmatchaxisNDigits.
- Barnen kan ha olika källvärden föraxisVariables\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\] (till exempel tid) Men de är oftast i stort sett desamma.
- Föräldradataset kommer att verka ha allaaxisVariables\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]källvärden från alla barnen.
- Till exempel kan du kombinera en källdataset med en vektors u-komponent och en annan källdataset med en vektors v-komponent, så att de kombinerade data kan serveras.
- Barn som skapats genom denna metod hålls privat. De är inte separat tillgängliga dataset (till exempel genom kunddataförfrågningar eller genomflagga filer) .
- De globala metadata och inställningarna för föräldern kommer från de globala metadata och inställningarna för det första barnet.
- Om det finns ett undantag när du skapar det första barnet kommer föräldern inte att skapas.
- Om det finns ett undantag när du skapar andra barn skickar detta ett e-postmeddelande till e-post (som anges isetup.xml) och fortsätter med de andra barnen.
EDDGridSideBySide skelett XML
<dataset type="EDDGridSideBySide" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<dataset>...</dataset> <!-- 2 or more -->
</dataset>
EDDGridAggregateExistingDimension
EDDGridAggregateExistingDimension aggregat två eller fleraEDDGriddatamängder var och en har ett annat sortiment av värden för den första dimensionen, men identiska värden för de andra dimensionerna.
- Ett barndataset kan till exempel ha 366 värden (för 2004) för tidsdimensionen och ett annat barn kan ha 365 värden (2005 för 2005) för tidsdimensionen.
- Alla värden för alla andra dimensioner (Till exempel latitud, longitud) Måste vara identisk för alla barnen. Testets precision bestäms avmatchaxisNDigits.
- Sorterade dimensionsvärden - Värdena för varje dimension måste vara i sorterad ordning (Uppstigning eller nedstigning) . Värdena kan vara oregelbundet placerade. Det kan inte finnas några band. Detta är ett krav påCF metadata standard. Om någon dimensions värderingar inte är i sorterad ordning kommer datamängden inte att laddas ochERDDAP™identifiera det första osorterade värdet i loggfilen, bigParentDirectory /logs/log.txt.
Osorterade dimensionsvärden indikerar nästan alltid ett problem med källdatamängden. Detta sker oftast när en felaktig eller olämplig fil ingår i aggregeringen, vilket leder till en osorterad tidsdimension. För att lösa detta problem, se felmeddelandet iERDDAP™log.txt-fil för att hitta det kränkande tidsvärdet. Titta sedan i källfilerna för att hitta motsvarande fil (eller en före eller en efter) Det hör inte hemma i aggregeringen.
- Föräldradataset och barndatamängden MUST har olikadatasetIDs. Om några namn i en familj är exakt samma, kommer datamängden inte att laddas (med felmeddelandet att värdena på den aggregerade axeln inte är i sorterad ordning) .
- För närvarande måste barndatasatsen vara enEDDGridFromDap dataset och MUST har de lägsta värdena av den aggregerade dimensionen (vanligtvis den äldsta tiden värderar) . Alla andra barn måste vara nästan identiska dataset (skiljer sig bara i värdena för den första dimensionen) och specificeras av endast derassourceUrl.
- Den samlade datamängden får sin metadata från det första barnet.
- ochGenerateDatasets Xml programkan göra ett grovt utkast tilldatasets.xmlför enEDDGridAggregateExistingDimension baserat på en uppsättning filer som serveras av enHyraxeller THREDDS server. Använd till exempel denna input för programmet ("/1988" i webbadressen gör att exemplet går snabbare) Från:
EDDType? EDDGridAggregateExistingDimension
Server type (hyrax, thredds, or dodsindex)? hyrax
Parent URL (for example, for hyrax, ending in "contents.html";
for thredds, ending in "catalog.xml")
? https://opendap.jpl.nasa.gov/opendap/ocean\\_wind/ccmp/L3.5a/data/
flk/1988/contents.html
File name regex (for example, ".\\*\\.nc")? month.\\*flk\\.nc\\.gz
ReloadEveryNMinutes (for example, 10080)? 10080
Du kan använda resultatet<sourceUrl> taggar eller ta bort dem och kommentera<sourceUrltag (så att nya filer märks varje gång datamängden laddas om.
EDDGridAggregateExistingDimension skelett XML
<dataset type="EDDGridAggregateExistingDimension" datasetID\="..."
active\="..." >
<dataset>...</dataset> <!-- This is a regular EDDGridFromDap dataset
description child with the lowest values for the aggregated
dimensions. -->
<sourceUrl>...</sourceUrl> <!-- 0 or many; the sourceUrls for
other children. These children must be listed in order of
ascending values for the aggregated dimension. -->
<sourceUrls serverType="..." regex="..." recursive="true"
pathRegex\=".\"
>https://someServer/someDirectory/someSubdirectory/catalog.xml</sourceUrls>
<!-- 0 or 1. This specifies how to find the other children,
instead of using separate sourceUrl tags for each child. The
advantage of this is: new children will be detected each time
the dataset is reloaded. The serverType must be "thredds",
"hyrax", or "dodsindex". An example of a regular expression (regex) (tutorial) is .\\.nc
recursive can be "true" or "false".
Only directory names which match the
<pathRegex>
(default=".\*") will be accepted.
A thredds catalogUrl MUST include "/thredds/catalog/".
An example of a thredds catalogUrl is
https://thredds1.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/
chla/catalog.xml
An example of a hyrax catalogUrl is
https://opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/
flk/1988/contents.html
An example of a dodsindex URL is
https://opendap.jpl.nasa.gov/opendap/GeodeticsGravity/tellus/L3/mascon/RL06/JPL/v02/CRI/netcdf/contents.html
(Note the "OPeNDAP logo at the top of the page.)
When these children are sorted by filename, they must be in
order of ascending values for the aggregated dimension. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
</dataset>
EDDGridKopiera
EDDGridKopiera Gör och upprätthåller en lokal kopia av en annanEDDGrid"S data och serverar data från den lokala kopian.
- EDDGridKopiera (för tabular data,EDDTableCopy) är mycket lätt att använda och en mycket effektiv
lösning på några av de största problemen med att betjäna data från en fjärrdatakälla:
- Att komma åt data från en fjärrdatakälla kan vara långsamt.
- Det kan vara långsamt eftersom det är i sig långsamt (en ineffektiv typ av server) ,
- eftersom det är överväldigat av för många förfrågningar,
- eller för att din server eller fjärrservern är bandbredd begränsad.
- Fjärrdatasetet är ibland otillgängligt (igen, av olika skäl) .
- Att förlita sig på en källa för data skalas inte bra (när många användare och mångaERDDAPAnvänd den) .
- Att komma åt data från en fjärrdatakälla kan vara långsamt.
- Hur det fungerar -EDDGridKopiera löser dessa problem genom att automatiskt göra och upprätthålla en lokal kopia av data och betjäna data från den lokala kopian.ERDDAP™kan tjäna data från den lokala kopian mycket, mycket snabbt. Och att göra en lokal kopia lindrar bördan på fjärrservern. Och den lokala kopian är en säkerhetskopia av originalet, vilket är användbart om något händer med originalet.
Det finns inget nytt om att göra en lokal kopia av en dataset. Vad som är nytt här är att denna klass gör det\*lätt\*att skapa och\*upprätthålla\*en lokal kopia av data från en\*variation\*av typer av fjärrdatakällor och\*Lägg till metadata\*medan du kopierar data.
- Chunks of Data -EDDGridKopiera gör den lokala kopian av data genom att begära bitar av data från fjärrkontrollen<dataset> . Det kommer att finnas en bit för varje värde av den vänstra (Först först) axelvariabel.EDDGridKopiera litar inte på fjärrdatasatsens indexnummer för axeln - de kan ändras.
VARNING: Om storleken på en bit data är så stor (> > > > > 2GB) att det orsakar problem,EDDGridKopiera kan inte användas. (Tyvärr hoppas vi ha en lösning för detta problem i framtiden.)
- \[Ett alternativ tillEDDGridKopiera - Om fjärrdata är tillgänglig via nedladdningsbara filer, inte en webbtjänst, användCache FromUrl alternativet förEDDGridFrånFiles, vilket gör en lokal kopia av fjärrfilerna och tjänar data från de lokala filerna.\]
- Lokala filer - Varje bit data lagras i en separatNetCDFfil i en underkatalog över bigParentDirectory /copy/ datasetID /// (som anges isetup.xml) . Filenamer som skapats av axelvärden ändras för att göra dem filnamnssäkra (Hyphens ersätts till exempel med "x2D") Detta påverkar inte själva data.
- Nya data ----- Varje gångEDDGridKopiera laddas om, det kontrollerar fjärrkontrollen<dataset> för att se vilka bitar som finns tillgängliga. Om filen för en bit data inte redan finns, läggs en begäran om att få biten till i en kö.ERDDAP"S uppgiftThread processer alla köförfrågningar om bitar av data, en-för-en. Du kan se statistik för uppgiftenThreads aktivitet påStatus Pageoch iDaglig rapport. (Ja, ja,ERDDAP™kan tilldela flera uppgifter till denna process, men det skulle använda upp massor av fjärrdatakällans bandbredd, minne och CPU-tid, och massor av lokalbefolkningen.ERDDAPBandbredd, minne och CPU-tid, ingen av dem är en bra idé.)
NOTERA: Första gången enEDDGridKopiera är laddad, (Om allt går bra) Många förfrågningar om bitar av data kommer att läggas till i uppgiftThreads kö, men inga lokala datafiler kommer att ha skapats. Så konstruktören kommer att misslyckas men uppgiftThread kommer att fortsätta att fungera och skapa lokala filer. Om allt går bra kommer uppgiftenThread att göra några lokala datafiler och nästa försök att ladda om datamängden. (I ~15 minuter) kommer att lyckas, men först med en mycket begränsad mängd data.
OBS: När den lokala datamängden har lite data och visas i dinERDDAPOm fjärrdatamängden tillfälligt eller permanent inte är tillgänglig kommer den lokala datamängden fortfarande att fungera.
VARNING: Om fjärrdatamängden är stor och/eller fjärrservern är långsam (Det är problemet, eller hur?!) Det tar lång tid att göra en komplett lokal kopia. I vissa fall är den tid som behövs oacceptabel. Till exempel överför 1 TB data över en T1-linje (0,15 GB/s) tar minst 60 dagar, under optimala förhållanden. Dessutom använder den massor av bandbredd, minne och CPU-tid på fjärr- och lokala datorer. Lösningen är att skicka en hårddisk till administratören av fjärrdatauppsättningen så att han / hon kan göra en kopia av datamängden och skicka hårddisken tillbaka till dig. Använd dessa data som utgångspunkt ochEDDGridKopiera kommer att lägga till data till det. (Det är ett sätt somAmazons EC2 Cloud Servicehanterar problemet, även om deras system har massor av bandbredd.)
VARNING: Om ett givet värde för vänster (Först först) axelvariabeln försvinner från fjärrdatamängden,EDDGridKopiera tar inte bort den lokala kopierade filen. Om du vill kan du ta bort det själv.
Grid Copy checkSource Datadatadata data
ochdatasets.xmlför denna dataset kan ha en valfri tagg
<checkSourceData>true</checkSourceData>
Standardvärdet är sant. Om/när du ställer in den till falsk, kommer datamängden aldrig att kontrollera källdatamängden för att se om det finns ytterligare data tillgängliga.
Bara Sedan
Du kan berättaEDDGridKopiera för att göra en kopia av en delmängd av källdatamängden, i stället för hela källdatamängden, genom att lägga till en tagg i formuläret<endast Synd> vissa Värde </onlySince> till datasetetsdatasets.xmlchunk.EDDGridKopiera kommer endast att ladda ner datavärden relaterade till värdena i den första dimensionen. (vanligtvis tidsdimensionen) som är större än vissa Värde . vissa Värde Kan vara:
-
En relativ tid som anges vianow- NUnits . Till exempel,<endast Synd>now-2 år</onlySince> berättar datamängden för att bara göra lokala kopior av data för data där den yttre dimensionens värden (vanligtvis tidsvärden) inom de senaste två åren (som omvärderas varje gång datamängden laddas om, vilket är när den letar efter nya data för att kopiera) . Senow- NUnits syntax beskrivning. Detta är användbart om den första dimensionen har tidsdata, vilket den vanligtvis gör.
EDDGridKopiera tar inte bort lokala datafiler som har data som med tiden blir äldre ännow- NUnits . Du kan ta bort dessa filer när som helst om du väljer att. Om du gör det rekommenderar vi starkt att du ställer in enflaggaNär du raderar filerna för att berättaEDDGridKopiera för att uppdatera listan över cachade filer.
-
En fast tidpunkt som anges som en ISO 8601-strängyyyy-MM-ddTHH:mm:ssZ. Till exempel,<endastSedan>2000-01-01T00:00:00</onlySince> berättar datamängden bara för att göra lokala kopior av data där den första dimensionens värde är \>=2000-01-01T00:00:00Z. Detta är användbart om den första dimensionen har tidsdata, vilket den vanligtvis gör.
-
Ett flytande punktnummer. Till exempel,<endastSedan>946684800.0</onlySince> . Enheterna kommer att vara destinationsenheterna i den första dimensionen. Till exempel för tidsdimensioner, enheterna iERDDAP™är alltid"seconds since 1970-01-01T00:00:00Z". Så 946684800.0"seconds since 1970-01-01T00:00:00Z"motsvarar 2000-01-01T00:00:00Z. Detta är alltid ett användbart alternativ, men är särskilt användbart när den första dimensionen inte har tidsdata.
EDDGridKopiera rekommenderad användning
- Skapa<Dataset> Inträde (den ursprungliga typen, inteEDDGridKopiera) för fjärrdatakällan. Få det att fungera korrekt, inklusive alla önskade metadata.
- Om det är för långsamt, lägg till XML-kod för att linda den i enEDDGridKopiera dataset.
- Använd en annandatasetID (Kanske genom att ändradatasetIDav den gamladatasetIDLite) .
- Kopiera<tillgänglig tillgänglig Till>,<reloadEveryNMinutes > och<onChange > från fjärrkontrollenEDDGridXML tillEDDGridCopys XML. (Deras värderingar förEDDGridKopiera materia; deras värderingar för den inre datamängden blir irrelevanta.)
- ERDDAP™kommer att göra och upprätthålla en lokal kopia av data.
- Varning:EDDGridCopy förutsätter att datavärdena för varje bit aldrig förändras. Om/när de gör det måste du manuellt ta bort bitfilerna i bigParentDirectory /copy/ datasetID / som förändrats ochflaggadatamängden som ska laddas om så att de borttagna bitarna kommer att ersättas. Om du har ett e-postabonnemang till datamängden får du två e-postmeddelanden: en när datamängden först laddas om och börjar kopiera data och en annan när datamängden laddas igen (automatiskt automatiskt) och upptäcker de nya lokala datafilerna.
- Alla axelvärden måste vara lika. För var och en av yxorna utom den vänstra (Först först) Alla värden måste vara lika för alla barn. Testets precision bestäms avmatchaxisNDigits.
- Inställningar, metadata, variabler -EDDGridCopy använder inställningar, metadata och variabler från den slutna källdatamängden.
- Ändra metadata ----- Om du behöver ändra någonaddAttributeseller ändra beställningen av variablerna i samband med källdatamängden:
- Ändra förändringenaddAttributesför källdataset indatasets.xmlSom behövs.
- Ta bort en av de kopierade filerna.
- Ställ enflaggaför att ladda om datasetet omedelbart. Om du använder en flagga och du har en e-postadress till datamängden får du två e-postmeddelanden: en när datamängden först laddas om och börjar kopiera data och en annan när datamängden laddas igen (automatiskt automatiskt) och upptäcker de nya lokala datafilerna.
- Den borttagna filen kommer att regenereras med den nya metadata. Om källdatamängden någonsin är otillgänglig,EDDGridKopiera dataset kommer att få metadata från den regenererade filen, eftersom det är den yngsta filen.
EDDGridKopiera skelett XML
<dataset type="EDDGridCopy" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaFiles>true|false(default)</accessibleViaFiles>
<!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
<fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or false
(the default)) -->
<checkSourceData>...</checkSourceData> <!-- 0 or 1 -->
<onlySince>...</onlySince> <!-- 0 or 1 -->
<dataset>...</dataset> <!-- 1 -->
</dataset>
EDDTableFromCassandra
EDDTableFromCassandra hanterar data från enCassandratabell. Cassandra är en NoSQL-databas.
- ERDDAP™kan arbeta med Cassandra v2 och v3 utan ändringar eller skillnader i installationen. Vi har testat medCassandra v2 och v3 från Apache. Det är troligt attERDDAP™kan också arbeta med Cassandra hämtat från DataStax.
- För augusti 2019 - maj 2021 hade vi problem med att få Cassandra att arbeta med AdoptOpenJdkJavaDet kastade en EXCEPTION\_ACCESS\_VIOLATION). Men nu (maj 2021) Det problemet är borta: vi kan framgångsrikt använda Cassandra v2.1.22 och AdoptOpenJdk jdk8u292-b10.
Ett bord
Cassandra stöder inte "gåvor" på det sätt som relationsdatabaser gör. EnERDDAP™EDDTableFromCassandra dataset kartor till en (Kanske en delmängd av en) Cassandra bord.
Cassandradatasets.xml
- ERDDAP™Kommer med CassandraJavaFöraren, så du behöver inte installera den separat.
- Läs noga all denna dokumentinformation om EDDTableFromCassandra. Några av detaljerna är mycket viktiga.
- CassandraJavaFöraren är avsedd att arbeta med Apache Cassandra (1.2+) och DataStax Enterprise (3.1+) . Om du använder Apache Cassandra 1.2.x måste du redigera cassandra.yaml-filen för varje nod för att ställa in start\_native\_transport: true, sedan starta om varje nod.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det (särskilt<Partition KeySourceNames >] (#partitionkeysourcenames) ). Du kan samla det mesta av den information du behöver för att skapa XML för en EDDTableFromCassandra dataset genom att kontakta Cassandra administratören och genom att söka på webben.
GenerateDatasets Xml har två specialalternativ för EDDTableFromCassandra:
- Om du går in "!!!" (Utan citat) för keyspace, programmet kommer att visa en lista över keyspaces
- Om du anger ett specifikt tangentrymd och sedan anger du "!!!" (Utan citat) för tabellnamnet kommer programmet att visa en lista över tabeller i det tangentrymden och deras kolumner.
Fall känslighet
- Case-insensitive Keyspace och tabellnamn - Cassandra behandlar tangentrymder och tabellnamn på ett fallskänsligt sätt. På grund av detta måste du aldrig använda ett reserverat ord (men med ett annat fall) Som ett Cassandra keyspace eller tabellnamn.
- Case-insensitive Column Names Som standard behandlar Cassandra kolumnnamn på ett fallskänsligt sätt. Om du använder ett av Cassandras reserverade ord som kolumnnamn (Snälla don't!) Du måste använda
<columnNameQuotes>"<columnNameQuotes>
in idatasets.xmlför denna dataset så att Cassandra ochERDDAP™kommer att behandla kolumnnamnen på ett känsligt sätt. Detta kommer sannolikt att vara en massiv huvudvärk för dig, eftersom det är svårt att bestämma fallkänsliga versioner av kolumnnamnen - Cassandra visar nästan alltid kolumnnamnen som alla lägre fall, oavsett det verkliga fallet.
- Arbeta nära Cassandra-administratören, som kan ha relevant erfarenhet. Om datamängden inte laddas, läsfelmeddelandenoga för att ta reda på varför.
Cassandra<anslutning Fastighet & gt;
Cassandra har anslutningsegenskaper som kan specificeras idatasets.xml. Många av dessa kommer att påverka resultatet av Cassandra-ERDDAP™anslutning. Tyvärr måste Cassandra-egenskaper ställas in programmatiskt iJavaSå, såERDDAP™måste ha kod för varje fastighetERDDAP™stöd. För närvarande,ERDDAP™stöder dessa egenskaper: (De standarder som visas är vad vi ser. Ditt systems standarder kan vara olika.)
- Allmänna alternativ
<anslutning Fastighetsnamn =" kompression ">>>> Ingen|LZ4|Snappy </connection Fastigheter > (case-insensitive, default=none)
(Allmänna kompressionsråd: använd "ingen" om sambandet mellan Cassandra ochERDDAP™är lokal/snabb och använder ”LZ4” om anslutningen är avlägsen/långsam.)
<anslutning Fastighetsnamn =" credentials ">>>> användarnamn/lösenord </connection Fastigheter > (Det är en bokstavlig'/')
<anslutning Fastighetsnamn =" Metrics ">>>> sanning sant|falska lögner </connection Fastigheter > (2021-01-25 var standard=true, nu ignorerad och alltid falsk)
<anslutning Fastighetsnamn =" Portport ">>>> AnInteger </connection Fastigheter > (standard för binärt binärt protokoll = 9042)
<anslutning Fastighetsnamn =" SSL ">>>> sanning sant|falska lögner </connection Fastigheter > (Default=False)
(Mitt snabba försök att använda ssl misslyckades. Om du lyckas, vänligen berätta hur du gjorde det.) - Query alternativ
<anslutning Fastighetsnamn =" konsekvens Nivå ">>>> Alla alla|Alla|varje\_quorum|lokala_one|lokala\_quorum|lokala_serial|en|quorum|Serial|tre tre tre|två två </connection Fastigheter > (case-insensitive, default=ONE)
<anslutning Fastighetsnamn =" FetchSize ">>>> AnInteger </connection Fastigheter > (Standard=5000)
(Ställ inte fetchSize till ett mindre värde.)
<anslutning Fastighetsnamn =" SerialConsistencyLevel ">>>> Alla alla|Alla|varje\_quorum|lokala_one|lokala\_quorum|lokala_serial|en|quorum|Serial|tre tre tre|två två </connection Fastigheter > (fall-insensitiv, standard=SERIAL) - Socket Options
<anslutning Fastighetsnamn =" connectTimeoutMillis ">>>> AnInteger </connection Fastigheter > (Standard=5000)
(Ställ inte anslut TimeoutMillis till ett mindre värde.)
<anslutning Fastighetsnamn =" KeepAlive ">>>> sanning sant|falska lögner </connection Fastigheter > <anslutning Fastighetsnamn =" LäsTimeoutMillis ">>>> AnInteger </connection Fastigheter > (Cassandras standardläsTimeoutMillis är 12000, menERDDAP™ändra standarden till 120000. Om Cassandra kastar läsTimeouts, ökar detta kanske inte hjälp, eftersom Cassandra ibland kastar dem före denna tid. Problemet är mer sannolikt att du lagrar för mycket data per partition Key kombination.)
<anslutning Fastighetsnamn =" motBufferSize ">>>> AnInteger </connection Fastigheter > (Det är oklart vad standarden mottarBufferSize är. Ställ inte detta till ett litet värde.)
<anslutning Fastighetsnamn =" Linger ">>>> AnInteger </connection Fastigheter > <anslutning Fastighetsnamn =" TcpNoDelay ">>>> sanning sant|falska lögner </connection Fastigheter > (Default=null)
Om du behöver kunna ställa in andra anslutningsegenskaper, se vårsektion om att få ytterligare stöd.
För en viss start av Tomcat används anslutningProperties endast första gången en dataset skapas för en viss Cassandra-URL. Alla reloads av dataset och alla efterföljande dataset som delar samma URL kommer att använda de ursprungliga anslutningarna.
CQL
Cassandra Query Language (CQL) är ytligt som SQL, frågespråket som används av traditionella databaser. För därförOPeNDAP"S tabular dataförfrågningar var utformade för att efterlikna SQL-tabelldataförfrågningar, det är möjligt förERDDAP™konvertera tabular dataförfrågningar till CQL Bound/PreparedStatements.ERDDAP™loggar uttalandet iLog.txtsom
Uttalande som text: TheStatementAsText
Den version av uttalandet du ser kommer att vara en textrepresentation av uttalandet och kommer bara att ha "?" där begränsningar kommer att placeras.
Inte så enkelt - Tyvärr har CQL många restriktioner på vilka kolumner kan vara queried med vilka typer av begränsningar, till exempel partition nyckel kolumner kan begränsas med = och IN, så attERDDAP™skickar vissa begränsningar till Cassandra och tillämpar alla begränsningar efter att uppgifterna mottagits från Cassandra. Att hjälpaERDDAP™hantera effektivt med Cassandra, du måste ange [<Partition KeySourceNames >] (#partitionkeysourcenames) och [så]<clusterColumnSourceNames>] (#clustercolumnsourcenames) och [och]<indexColumnSourceNames>] (#indexcolumnsourcenames) in idatasets.xmlför denna dataset. Dessa är de viktigaste sätten att hjälpaERDDAP™arbeta effektivt med Cassandra. Om du inte berättarERDDAP™Denna information, datamängden kommer att vara smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
<Partition KeySourceNames & gt;
Eftersom partitionsnycklar spelar en central roll i Cassandra-borden,ERDDAP™behöver veta derassourceNameoch, i förekommande fall, annan information om hur man arbetar med dem.
- Du måste ange en komma-separerad lista över partition nyckelkälla kolumnnamn idatasets.xmlvia via via<Partition KeySourceNames>. Enkelt exempel,
<partitionKeySourceNames>station, deviceid<partitionKeySourceNames>
Mer komplext exempel,
<partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
- TimeStamp Partition Keys - Om en av partition nyckel kolumner är en tidsstämpel kolumn som har en grov version av en annan timestamp kolumn, ange detta via
partitionKeySourcName/otherColumnSourceName/time\_precision
där vartime\_precisionär en avtime\_precisionsträngar som används någon annanstans iERDDAP. Spårningen Z itime\_precisionsträng är standarden, så det spelar ingen roll omtime\_precisionSträngen slutar i Z eller inte. Till exempel,ERDDAP™tolka datum/sampletime/1970-01-01 som Begränsningar för datum kan konstrueras från begränsningar på provtid genom att använda dettatime\_precision.” Den faktiska omvandlingen av begränsningar är mer komplex, men det är översikten. Använd detta när det är relevant. Den möjliggörERDDAP™att arbeta effektivt med Cassandra. Om detta förhållande mellan kolumner finns i ett Cassandra-bord och du inte berättarERDDAP™datamängden kommer att vara smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser. - Single Value Partition Keys - Om du vill ha enERDDAP™datamängd för att arbeta med endast ett värde av en partitionsnyckel, ange partitionKeySourceName=värde . Använd inte citat för en numerisk kolumn, till exempel enhetid = 1007 Använd citat för en strängkolumn, till exempel stationid="Point Pinos"
- Dataset Standard Sort Order - Ordern för partitionsnyckeln<dataVariable>'s indatasets.xmlfastställer standardordningen för resultaten från Cassandra. Naturligtvis kan användarna begära en annan sorts order för en viss uppsättning resultat genom att godkänna ochorderBy (" Sammanslagen lista över variabler ") till slutet av deras fråga.
- Som standard, Cassandra ochERDDAP™behandla kolumnnamn på ett fallskänsligt sätt. Men om du ställer inKolumnNameQuotestill ",ERDDAP™kommer att behandla Cassandra kolumnnamn på ett omkänsligt sätt.
<Partition KeyCSV>
Om detta anges,ERDDAP™Använd den istället för att be Cassandra om partitionen Nyckelinformation varje gång datamängden laddas om. Detta ger listan över distinkta partitionsnyckelvärden, i den ordning de ska användas. Tiderna måste anges som sekunder sedan 1970-01-01T00:00:00Z. Men det finns också två speciella alternativa sätt att ange tider (varje kodad som en sträng) Från:
- Tid (AISO8601 Tid) (Måste kodas som en sträng)
- "tider (anISO8601StartTime, strideSeconds, stoptime) " (Måste kodas som en sträng)
Sluta stoppa Tid kan vara en ISO8601 Tid eller en "now-nUnits" tid (t.ex. "now-3 minuter") . Sluta stoppa Tiden behöver inte vara en exakt match av start Tid + x stegandar. En rad med en tid () värdet expanderas till flera rader före varje fråga, så listan över partition Nycklar kan alltid vara helt uppdaterade. Till exempel,
<partitionKeyCSV>
deviceid,date
1001,"times(2014-11-01T00:00:00Z, 86400, 2014-11-02T00:00:00Z)"
1007,"time(2014-11-07T00:00:00Z)"
1008,time(2014-11-08T00:00:00Z)
1009,1.4154912E9
</partitionKeyCSV>
expanderar till denna tabell av partition nyckelkombinationer:
deviceid,date
1001,1.4148E9
1001,1.4148864E9
1007,1.4153184E9
1008,1.4154048E9
1009,1.4154912E9
<clusterColumnSourceNames & gt;
Cassandra accepterar SQL-liknande begränsningar på klusterkolumner, som är kolumnerna som utgör den andra delen av primärnyckeln (efter partition nyckel (s) ) . Så det är viktigt att du identifierar dessa kolumner via<KlusterColumnSourceNames>. Detta möjliggörERDDAP™att arbeta effektivt med Cassandra. Om det finns klusterkolumner och du inte berättarERDDAPdatamängden kommer att vara smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
- Till exempel,<KlusterColumnSourceNames> myClusterColumn1, myClusterColumn2 </ColumnSourceNames>
- Om ett Cassandra-bord inte har några klusterkolumner, ange inte heller<clusterColumnSourceNames>, eller ange det utan värde.
- Som standard, Cassandra ochERDDAP™behandla kolumnnamn på ett fallskänsligt sätt. Men om du ställer inKolumnNameQuotestill ",ERDDAP™kommer att behandla Cassandra kolumnnamn på ett känsligt sätt.
<indexColumnSourceNames & gt;
Cassandra accepterar'='begränsningar på sekundära index kolumner, som är de kolumner som du uttryckligen har skapat index för via
CREATE INDEX *indexName* ON *keyspace.tableName* (*columnName*);
(Ja, parentes krävs.)
Så det är mycket användbart om du identifierar dessa kolumner via<indexColumnSourceNames>. Detta möjliggörERDDAP™att arbeta effektivt med Cassandra. Om det finns indexkolumner och du inte berättarERDDAPVissa frågor kommer att vara onödigt, smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
- Till exempel,<indexColumnSourceNames> myIndexColumn1, myIndexColumn2 </indexColumnSourceNames>
- Om ett Cassandra-bord inte har några indexkolumner, anger du heller inte<indexColumnSourceNames>, eller ange det utan värde.
- VARNING: Cassandra index är inte som databasindex. Cassandra index hjälper bara till med'='begränsningar. Och de är bararekommenderasför kolumner som har betydligt färre olika värden än totala värden.
- Som standard, Cassandra ochERDDAP™behandla kolumnnamn på ett fallskänsligt sätt. Men om du ställer inKolumnNameQuotestill ",ERDDAP™kommer att behandla Cassandra kolumnnamn på ett känsligt sätt.
<maxRequestFraction & gt;
När närERDDAP™ (Retur) laddar en dataset,ERDDAP™kommer från Cassandra listan över distinkta kombinationer av partitionsnycklarna. För en stor datamängd kommer antalet kombinationer att vara stort. Om du vill förhindra användares förfrågningar från att begära de flesta eller alla datamängder (eller till och med en förfrågan som frågarERDDAP™ladda ner de flesta eller alla data för att ytterligare filtrera den) Du kan berättaERDDAP™endast tillåta förfrågningar som minskar antalet kombinationer med viss mängd via<maxRequestFraction>, vilket är ett flytande punktnummer mellan 1e-10 (Det innebär att begäran inte kan behöva mer än en kombination på en miljard) och 1 (Standarden, vilket innebär att begäran kan vara för hela datamängden) . Till exempel, om en dataset har 10000 distinkta kombinationer av partitionsnycklarna och maxRequestFraction är inställd på 0,1, begär som behöver data från 1001 eller fler kombinationer kommer att generera ett felmeddelande, Men förfrågningar som behöver data från 1000 eller färre kombinationer kommer att tillåtas.
I allmänhet, ju större datamängden, desto lägre bör du ställa in<MaxRequestFraction>. Så du kan ställa in den till 1 för en liten datamängd, 0,1 för en medelstor datamängd, 0,01 för en stor datamängd och 0.0001 för en stor datamängd.
Detta tillvägagångssätt är långt ifrån perfekt. Det kommer att leda till att några rimliga förfrågningar avvisas och några alltför stora förfrågningar är tillåtna. Men det är ett svårt problem och denna lösning är mycket bättre än ingenting.
CassandrasubsetVariables
Som med andra EDDTable dataset kan du ange en komma-separerad lista över<dataVariable> > > > >destinationNamei ett globalt attribut som kallas "subsetVariablesför att identifiera variabler som har ett begränsat antal värden. Datasetet kommer då att ha en .subset-webbsida och visa listor över distinkta värden för de variablerna i listrutor på många webbsidor.
Inklusive bara partition nyckelvariabler och statiska kolumner i listan är STRONGLY ENCOURAGED. Cassandra kommer att kunna generera listan över distinkta kombinationer mycket snabbt och enkelt varje gång datamängden laddas om. Ett undantag är tidsstämpelpartitionsnycklar som är grova versioner av någon annan tidsstämpelkolumn - det är nog bäst att lämna dessa ur listan översubsetVariablesEftersom det finns ett stort antal värden och de är inte särskilt användbara för användare.
Om du inkluderar icke-partition nyckel, icke-statiska variabler i listan, kommer det förmodligen att vara väldigt mycket väldigt mycket Beräkningsmässigt dyrt för Cassandra varje gång datamängden laddas om, eftersomERDDAP™måste titta igenom varje rad av datamängden för att generera informationen. Faktum är att frågan sannolikt kommer att misslyckas. Så, med undantag för mycket små datamängder, är detta starkt nedlagt.
Cassandra DataTyper
För det finns viss tvetydighet om vilkenCassandra datatyperkarta till vilkenERDDAP™datatyper, du måste ange en [<DataType>] (#datatype) tag för var och en<dataVariable>] (#datavariable) Att berättaERDDAP™vilken datatyp som ska användas. StandardenERDDAP™Datadata data Typer (och de vanligaste motsvarande Cassandra-datatyperna) är:
- Boolean (Boolean) somERDDAP™då butiker som byte
- Byte (int, om intervallet är -128 till 127)
- kort kort kort kort (int, om området är -32768 till 32767)
- Int (Int, counter?, Varint?, om intervallet är -2147483648 till 2147483647)
- länge lång (bigint, counter?, varint?, om intervallet är -9223372036854775808 till 9223372036854775807)
- Flyta (Flyta)
- dubbel dubbel (Dubbel, Decimal (med möjlig förlust av precision) , timestamp)
- Char (ascii eller text, om de aldrig har mer än 1 tecken)
- String (ascii, text, varchar, inet, uuid, timeuid, blob, map, set, list?)
Cassandrastimestampär ett speciellt fall: användningERDDAPDubbeldata Typ.
Om du anger en String dataType iERDDAP™för en Cassandra-karta, inställd eller lista, kartan, inställd eller lista på varje Cassandra-rad konverteras till en enda sträng på en enda rad i raden.ERDDAP™tabell.ERDDAP™har ett alternativt system för listor, se nedan.
Typtyp Listor -ERDDAPoch [så]<DataType>] (#datatype) tag för CassandradataVariables kan inkludera regelbundenERDDAP™Datadata data Typer (Se ovan) plus flera speciella datatyper som kan användas för Cassandra listkolumner: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, floatList, DoubleList, charList, StringList. När en av dessa listkolumner är i resultaten som överförs tillERDDAP™Varje rad av källdata kommer att utökas till listan. storlek storlek storlek storlek storlek storlek () rader av data iERDDAP; enkla data Typer (Till exempel int) i den källdata raden kommer att dupliceras listan. storlek storlek storlek storlek storlek storlek () gånger. Om resultaten innehåller mer än en listvariabel har alla listor på en viss rad data MÅSTE ha samma storlek och MÅSTE vara "parallella" listor, ellerERDDAP™kommer att generera ett felmeddelande. Till exempel för strömmätningar från en ADCP, Djup\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]uCurrent\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]vCurrent\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]och zCurrent\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\]är alla relaterade, och Djup\[1 1\]uCurrent\[1 1\]vCurrent\[1 1\]och zCurrent\[1 1\]är alla relaterade, ... Alternativt, om du inte villERDDAP™expandera en lista i flera rader iERDDAP™Tabell, ange String somdataVariables data Typ så att hela listan kommer att representeras som en sträng på en rad iERDDAP.
Cassandra TimeStamp Data
Cassandras tidsstämpeldata är alltid medvetna om tidszoner. Om du anger tidsstämpeldata utan att ange en tidszon, antar Cassandra tidsstämpeln använder den lokala tidszonen.
ERDDAP™stöder tidsstämpeldata och presenterar alltid data iZuluGMT tidszon. Så om du anger tidsstämpeldata i Cassandra med en annan tidszon änZulu/GMT, kom ihåg att du måste göra alla frågor för tidsstämpel data iERDDAP™AnvändaZuluGMT tidszon. Så bli inte förvånad när tidsstämpelvärdena som kommer ut urERDDAPflyttas med flera timmar på grund av tidszonskiftet från lokal tillZuluGMT tid.
- InomERDDAP"Sdatasets.xmli den<dataVariable> tag för en timestamp variabel, set
<dataType>double</dataType>
och in<addAttributes> Sätt in
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Förslag: Om data är ett tidsintervall är det användbart att ha tidsstämpelvärdena hänvisar till centrum för det underförstådda tidsintervallet. (Till exempel, middag) . Till exempel, om en användare har data för 2010-03-26T13:00Z från en annan datamängd och de vill ha närmaste data från denna Cassandra datamängd som har data för varje dag, sedan data för 2010-03-26T12:00Z (representerar Cassandra-data för det datumet) är uppenbarligen bäst (i motsats till midnatt före eller efter, där det är mindre uppenbart vilket är bäst) .
- ERDDAP™har ett verktyg förKonvertera en numerisk Dags att/från en strängtid.
- SeHur hurERDDAP™Erbjudanden med tiden.
Integer nulls
Cassandra stöder nulls i Cassandra int (ERDDAP™Int) och bigint (ERDDAP™länge lång) kolumner, menERDDAP™Stöder inte riktiga nulls för någon integer datatyp. Som standard, Cassandra integer nulls kommer att konverteras iERDDAP™till 2147483647 för int kolumner, eller 9223372036854775807 för långa kolumner. Dessa kommer att visas som "NaN" i vissa typer av textutgångsfiler (Till exempel .csv) "" i andra typer av textutgångsfiler (till exempel,.htmlTable) och det specifika numret (2147483647 för saknade värden) i andra typer av filer (Till exempel binära filer som.ncoch matta) . En användare kan söka efter rader av data med denna typ av saknad värde genom att hänvisa till "NaN", t.ex. "&windSpeed=NaN".
Om du använder något annat heltalsvärde för att ange saknade värden i ditt Cassandra-bord, vänligen identifiera det värdet idatasets.xmlFrån:
<att name="missing\_value" type="int"\>-999</att>
För Cassandra flytande punkt kolumner, nulls omvandlas till NaNs iERDDAP. För Cassandra datatyper som konverteras till Strings inERDDAP™Nulls blir konverterade till tomma strängar. Det borde inte vara ett problem.
"VARNING: Förberedande redan förberedd fråga"
- "VARNING: Re-preparing redan förberedd fråga" Tomcat /logs/catalina.out (eller någon annan Tomcat-loggfil)
Cassandra-dokumentationen säger att det finns problem om samma fråga görs till en förberedd stat två gånger. (eller mer) . (Se dettabug report.) För att undvika att göra Cassandra galen,ERDDAP™caches all PreparedStatements så att den kan återanvända dem. Denna cache förloras om/när Tomcat/ERDDAP™omstartas, men jag tror att det är okej eftersom förberedelserna är förknippade med en viss session. (mellanJavaoch Cassandra) Det är också förlorat. Så du kan se dessa meddelanden. Jag känner ingen annan lösning. Lyckligtvis är det en varning, inte ett fel (Även om Cassandra hotar att det kan leda till problem med prestanda) .
Cassandra hävdar att förberedda stater är bra för alltid, såERDDAP"S cached PreparedStatements bör aldrig bli out-of-date/invalid. Om det inte är sant, och du får fel om vissa PreparedStatements är out-of-date / ogiltig, måste du starta omERDDAP™att klargöraERDDAPCache of PreparedStatements.
Cassandra säkerhet
När du arbetar med Cassandra måste du göra saker så säkert och säkert som möjligt för att undvika att en skadlig användare kan skada din Cassandra eller få tillgång till data som de inte borde ha tillgång till.ERDDAP™försöker göra saker på ett säkert sätt också.
- Vi uppmuntrar dig att inrättaERDDAP™att ansluta till Cassandra som en Cassandra-användare som bara har tillgång till relevant Tabellbord (s) och endast har READ privilegier.
- Vi uppmuntrar dig att upprätta anslutningen frånERDDAP™till Cassandra så att det
- Använd alltid SSL,
- endast tillåter anslutningar från en IP-adress (eller ett block av adresser) och från denERDDAP™användare och
- endast överför lösenord i deras MD5 hashed form.
- \[Knulla PROBLEM\]AnslutningenProperties (inklusive lösenordet!) lagras som vanlig text idatasets.xml. Vi har inte hittat ett sätt att låta administratören ange lösenordet Cassandra underERDDAPStartup i Tomcat (som sker utan användarinmatning) Så lösenordet måste vara tillgängligt i en fil. För att göra detta säkrare:
- Du du (ochERDDAP™Administratör) bör vara ägaren tilldatasets.xmloch har READ och WRITE access.
- Gör en grupp som bara innehåller användar=tomcat. Använd chgrp för att göra gruppen fördatasets.xmlmed bara READ privilegier.
- Använd chmod för att tilldela o-rwx privilegier (Ingen READ eller WRITE-åtkomst för "andra" användare) Fördatasets.xml.
- När inERDDAP™lösenordet och andra anslutningsegenskaper lagras i "privat"Javavariabler.
- Begäran från kunderna är parsed och kontrolleras för giltighet innan de genererar CQL-förfrågningar för Cassandra.
- Begäran om Cassandra görs med CQL Bound/PreparedStatements, för att förhindra CQL-injektion. Cassandra är i sig mindre mottaglig för CQL-injektion än traditionella databaser.SQL injektion.
Cassandra hastighet
Cassandra kan vara snabb eller långsam. Det finns några saker du kan göra för att göra det snabbt:
- I allmänhet - CQL:s natur är att frågor ärdeklarativt. De specificerar bara vad användaren vill ha. De innehåller inte en specifikation eller tips för hur frågan ska hanteras eller optimeras. Så det finns inget sätt förERDDAP™för att skapa frågan på ett sådant sätt att det hjälper Cassandra att optimera frågan (eller på något sätt specificerar hur frågan ska hanteras) . I allmänhet är det upp till Cassandra-administratören att ställa upp saker. (till exempel index) optimera för vissa typer av frågor.
- Anger tidsstämpelkolumner som är relaterade till grovprecisionstidstämpelpartitionsnycklar via [<Partition KeySourceNames >] (#partitionkeysourcenames) är det viktigaste sättet att hjälpaERDDAP™arbeta effektivt med Cassandra. Om detta förhållande finns i ett Cassandra-bord och du inte berättarERDDAP™datamängden kommer att vara smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
- Ange klusterkolumnerna via [<clusterColumnSourceNames>] (#clustercolumnsourcenames) Det näst viktigaste sättet att hjälpaERDDAP™arbeta effektivt med Cassandra. Om det finns klusterkolumner och du inte berättarERDDAPEn stor delmängd av de möjliga frågorna för data kommer att vara onödigt, smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
- GörIndexFör vanliga begränsade variabler - Du kan påskynda några frågor genom att skapa index för Cassandra-kolumner som ofta begränsas med "=" begränsningar.
Cassandra kan inte göra index för lista, ställa in eller kartlägga kolumner.
- Ange indexkolumnerna via [<indexColumnSourceNames>] (#indexcolumnsourcenames) är ett viktigt sätt att hjälpaERDDAP™arbeta effektivt med Cassandra. Om det finns indexkolumner och du inte berättarERDDAPVissa frågor för data kommer att vara onödigt, smärtsamt långsam iERDDAP™Använd massor av Cassandra resurser.
Cassandra Stats
- "Cassandra statistik" Diagnostiska meddelanden----- För varjeERDDAP™användarfråga till en Cassandra dataset,ERDDAP™kommer att skriva ut en linje i loggfilen, bigParentDirectory /logs/log.txt, med viss statistik relaterad till frågan, till exempel
\\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405
Med hjälp av siffrorna i exemplet ovan betyder detta:
- När närERDDAP™Sista sista (Retur) laddade denna dataset, berättade CassandraERDDAP™att det fanns 10000 distinkta kombinationer av partitionsnycklarna.ERDDAP™cachade alla distinkta kombinationer i en fil.
- på grund av användarens begränsningar,ERDDAP™identifiera 2 kombinationer av 10000 som kan ha önskad data. Så,ERDDAP™kommer att göra 2 samtal till Cassandra, en för varje kombination av partitionsnycklarna. (Det är vad Cassandra kräver.) Det är uppenbart att det är besvärligt om en stor datamängd har ett stort antal kombinationer av partitionsnycklarna och en viss begäran inte drastiskt minskar det. Du kan kräva att varje förfrågan minskar nyckelutrymmet genom att ange [<MaxRequestFraction >] (#maxrequestfraction) . Här 2/10000=2e-4, vilket är mindre än maxRequestFraction (0.1) Så begäran var tillåten.
- Efter att ha tillämpat begränsningarna på partitionsnycklarna,Klusterkolumnerochindex kolumnersom sändesERDDAP™Cassandra återvände 1200 rader data tillERDDAP™i ResultSet.
- Resultatet Set m åste ha haftDatadata data Typ = Sometype Lista ListKolumner (med i genomsnitt 10 objekt per lista) för attERDDAP™expanderade 1200 rader från Cassandra till 12000 rader iERDDAP.
- ERDDAP™All användarens begränsningar gäller alltid uppgifterna från Cassandra. I detta fall hade begränsningar som Cassandra inte hanterat minskat antalet rader till 7405. Det är antalet rader som skickas till användaren.
Den viktigaste användningen av dessa diagnostiska meddelanden är att se till attERDDAP™gör vad du tror att det gör. Om det inte är (Till exempel minskar det inte antalet distinkta kombinationer som förväntat?) Då kan du använda informationen för att försöka lista ut vad som går fel.
- Forskning och experiment för att hitta och sätta bättre<anslutningProperty >] (#cassandra-connectionproperty) s.
- Kontrollera hastigheten på nätverksanslutningen mellan Cassandra ochERDDAP. Om anslutningen är långsam, se om du kan förbättra den. Den bästa situationen är närERDDAP™körs på en server som är knuten till samma (Snabbt) växla när servern kör Cassandra-noden som du ansluter till.
- Var tålmodig. Läs informationen här och i Cassandra-dokumentationen noggrant. Experiment. Kontrollera ditt arbete. Om CassandraERDDAP™anslutning är fortfarande långsammare än du förväntar dig, vänligen inkludera ditt Cassandra-bords schema och dittERDDAP™chunk avdatasets.xmloch se vårsektion om att få ytterligare stöd.
- Om allt annat misslyckas, överväga att lagra data i en samling avNetCDFv3.ncfiler filer (Särskilt speciellt.ncfiler som använderCF Diskret sampling geometrier (DSG) sammanhängande Ragged Array datastrukturer och så kan hanteras medERDDAP"SEDDTableFromNcCFFiles) . Om de är logiskt organiserade (var och en med data för en bit av utrymme och tid) ,ERDDAP™kan utvinna data från dem mycket snabbt.
EDDTableFromCassandra skelett XML
<dataset type="EDDTableFromCassandra" datasetID\="..." active\="..." >
<ipAddress>...</ipAddress>
<!-- The Cassandra URL without the port number, for example,
127.0.0.1 REQUIRED. -->
<connectionProperty name="name">value</connectionProperty>
<!-- The names (for example, "readTimeoutMillis") and values
of the Cassandra properties that ERDDAP™ needs to change.
0 or more. -->
<keyspace>...</keyspace> <!-- The name of the keyspace that has
the table. REQUIRED. -->
<tableName>...</tableName> <!-- The name of the table, default = "".
REQUIRED. -->
<partitionKeySourceNames>...<partitionKeySourceNames>
<!-- REQUIRED. -->
<clusterColumnSourceNames>...<clusterColumnSourceNames>
<!-- OPTIONAL. -->
<indexColumnSourceNames>...<indexColumnSourceNames> <!-- OPTIONAL. -->
<maxRequestFraction>...<maxRequestFraction>
<!-- OPTIONAL double between 1e-10 and 1 (the default). -->
<columnNameQuotes>...<columnNameQuotes> <!-- OPTIONAL.
Options: \[nothing\] (the default) or ". -->
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more.
Each dataVariable MUST include a <dataType> tag. See
Cassandra DataTypes.
For Cassandra timestamp columns, set dataType=double and
units=seconds since 1970-01-01T00:00:00Z -->
</dataset>
EDDTableFromDapSequence
EDDTableFromDapSequence hanterar variabler inom 1- och 2-nivåsekvenser frånDAPservrar somDAPPER (var på https://www.pmel.noaa.gov/epic/software/dapper/ Nu avbröt) .
-
Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det. Du kan samla den information du behöver genom att titta på källdatasetets DDS- och DAS-filer i din webbläsare (genom att lägga till .das och .dds till källdatasetetsourceUrlEtt exempel var på https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds ).
-
En variabel är i enDAPsekvens om .dds-responsen indikerar att datastrukturen som håller variabeln är en "sekvens" (fall okänslig) .
-
I vissa fall kommer du att se en sekvens inom en sekvens, en 2-nivå sekvens - EDDTableFromDapSequence hanterar dessa också.
EDDTableFromDapSequence skelett XML
<dataset type="EDDTableFromDapSequence" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<outerSequenceName>...</outerSequenceName>
<!-- The name of the outer sequence for DAP sequence data.
This tag is REQUIRED. -->
<innerSequenceName>...</innerSequenceName>
<!-- The name of the inner sequence for DAP sequence data.
This tag is OPTIONAL; use it if the DAP data is a two level
sequence. -->
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<sourceCanConstrainStringEQNE>true|false</sourceCanConstrainStringEQNE>
<sourceCanConstrainStringGTLT>true|false</sourceCanConstrainStringGTLT>
<sourceCanConstrainStringRegex>...</sourceCanConstrainStringRegex>
<skipDapperSpacerRows>...</skipDapperSpacerRows>
<!-- skipDapperSpacerRows specifies whether the dataset
will skip the last row of each innerSequence other than the
last innerSequence (because Dapper servers put NaNs in the
row to act as a spacer). This tag is OPTIONAL. The default
is false. It is recommended that you set this to true for
all Dapper sources and false for all other data sources. -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
</dataset>
EDDTableFromDatabase
EDDTableFromDatabase hanterar data från en relationsdatabastabell ellerutsikt.
En tabell eller utsikt
Om data du vill tjäna finns i två eller flera tabeller (och därmed behöver en JOIN för att extrahera data från båda tabellerna samtidigt) Du måste göra enDenormaliserad (redan gått) tabell ellerutsikt med alla data som du vill göra tillgängliga som en dataset iERDDAP.
För stora komplexa databaser kan det vara meningsfullt att separera flera bitar som denormaliserade tabeller, var och en med en annan typ av data, som kommer att bli separata datamängder.ERDDAP.
Gör en denormaliserad tabell för användning iERDDAP™Kan låta som en galen idé för dig. Vänligen lita på oss. Det finns flera anledningar till varförERDDAP™arbetar med denormaliserade tabeller:
- Det är mycket lättare för användare. När närERDDAP™presenterar dataset som en, enkel, denormaliserad, enstaka tabell, det är mycket lätt för alla att förstå data. De flesta användare har aldrig hört talas om normaliserade tabeller, och mycket få förstår nycklar, utländska nycklar eller tabellförening, och de vet nästan säkert inte detaljerna i de olika typerna av förening, eller hur man specificerar SQL för att göra en förening. (eller flera anslutningar) korrekt. Att använda en denormaliserad tabell undviker alla dessa problem. Detta skäl ensam motiverar användningen av en denormaliserad enstaka tabell för presentation av en datamängd för attERDDAP™användare.
- Normaliserade tabeller (flera tabeller relaterade till nyckelkolumner) är bra för att lagra data i en databas. Men även i SQL är resultatet som returneras till användaren en denormaliserad (Förenade) Enstaka bord. Så det verkar rimligt att presentera datamängden för användare som en stor, denormaliserad, enstaka tabell från vilken de sedan kan begära delmängder. (t.ex. visa mig rader av bordet där temperaturen 30 30 30 30) .
- Du kan göra ändringar förERDDAP™utan att ändra dina tabeller. ERDDAP™har några krav som kan skilja sig från hur du har ställt in din databas. Till exempel,ERDDAP™kräver att tidsstämpeldata lagras i fält med tidszon. Genom att göra en separat tabell/vy förERDDAP™Du kan göra dessa ändringar när du gör det denormaliserade bordet förERDDAP. Därför behöver du inte göra några ändringar i dina tabeller.
- ERDDAP™kommer att återskapa några av de normaliserade tabellernas struktur. Du kan ange vilka kolumner data som kommer från tabellerna "yttre" och därför har ett begränsat antal olika värden.ERDDAP™samla alla de olika kombinationerna av värden i dessa kolumner och presentera dem för användare på en speciell. subset webbsida som hjälper användare att snabbt välja delmängder av datamängden. De distinkta värdena för varje kolumn visas också i nedgångslistor på datasetets andra webbsidor.
- En denormaliserad tabell gör data hand-off från dig tillERDDAPadministratör lätt. Du är expert på denna datamängd, så det är vettigt att du fattar besluten om vilka tabeller och vilka kolumner du ska gå med och hur du går med dem. Så du behöver inte lämna oss (Eller värre, slutanvändarna) flera tabeller och detaljerade instruktioner för hur du går med dem, du behöver bara ge oss tillgång till det denormaliserade bordet.
- En denormaliserad tabell möjliggör effektiv åtkomst till data. Den denormaliserade formen är oftast snabbare att komma åt än den normaliserade formen. Gå med kan vara långsam. Flera anslutningar kan vara mycket långsamma.
För att få data från två eller flera tabeller i databasen tillERDDAP™Det finns tre alternativ:
- Rekommenderat alternativ: Du kan skapa en komma- eller flik-separerad värdefil med data från den denormaliserade tabellen. Om datamängden är stor, är det meningsfullt att skapa flera filer, var och en med en sammanhängande delmängd av den denormaliserade tabellen. (till exempel data från ett mindre tidsintervall) .
Den stora fördelen här är attERDDAP™kommer att kunna hantera användarförfrågningar om data utan vidare ansträngning av databasen. SåERDDAP™Bli inte en börda i databasen eller en säkerhetsrisk. Detta är det bästa alternativet under nästan alla omständigheter eftersomERDDAP™kan vanligtvis få data från filer snabbare än från en databas (Om vi konverterar .csv-filerna till.ncCF filer) . (En del av anledningen är attERDDAP+files är ett lättläst system och behöver inte hantera ändringar när du tillhandahållerACID (Atomicitet, konsistens, isolering, hållbarhet) .) Du behöver förmodligen inte en separat server eftersom vi kan lagra data på en av våra RAID och komma åt den med en befintligERDDAP™på en befintlig server.
- Okej Alternativ: Du ställer in en ny databas på en annan dator med bara det denormaliserade bordet. Eftersom databasen kan vara en gratis och öppen källkodsdatabas som MariaDB, MySQL och PostgreSQL, behöver det här alternativet inte kosta mycket.
Den stora fördelen här är attERDDAP™kommer att kunna hantera användarförfrågningar om data utan vidare ansträngning av din nuvarande databas. SåERDDAP™Bli inte en börda i din nuvarande databas. Detta eliminerar också många säkerhetsproblem eftersomERDDAP™inte har tillgång till din nuvarande databas.
-
Discouraged Option: Vi kan anslutaERDDAP™till din nuvarande databas. För att göra detta måste du:
- Skapa en separat tabell eller visa med den denormaliserade tabellen över data.
- Skapa en "erddap" -användare som endast har tillgång till den denormaliserade tabellen (s) .
Detta är ett alternativ om data ändras mycket ofta och du vill geERDDAP™användare omedelbar tillgång till dessa ändringar, men även så, kan det vara meningsfullt att använda filalternativet ovan och periodiskt (Var 30 minuter?) ersätta den fil som har dagens data. De stora nackdelarna med denna strategi är attERDDAP™Användarförfrågningar kommer sannolikt att placera en outhärdligt stor börda på din databas och attERDDAP™anslutning är en säkerhetsrisk (Även om vi kan minimera/hantera risken) .
Gör den denormaliserade tabellen eller vyn förERDDAP™är ett bra tillfälle att göra några förändringar somERDDAP™behov, på ett sätt som inte påverkar dina ursprungliga tabeller:
- Ändra datum och tidsstämpelfält / kolumner för att använda datatypen som Postgres kallartimestamp med tidszon (eller motsvarande i databasen) . Tidsstämplar utan tidszoninformation fungerar inte korrekt iERDDAP.
- Gör index för kolumnerna som användare ofta söker.
- Var mycket medveten omfallet med fält/kolumnnamn (Till exempel, använd alla lowcase) När du skriver dem.
- Använd inte reserverade ord för tabellen och för fält/kolumnnamnen.
Om du behöver hjälp med att göra den denormaliserade tabellen eller visa, vänligen kontakta din databasadministratör. Om du vill prata om hela detta tillvägagångssätt eller strategisera hur du bäst kan göra det, vänligen maila Chris. John på noaa.gov.
Databas idatasets.xml
Det är svårt att skapa rättdatasets.xmlinformation som behövs förERDDAP™för att upprätta en anslutning till databasen. Var tålmodig. Var metodisk.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
GenerateDatasets Xml har tre särskilda alternativ för EDDTableFromDatabase:
- Om du går in "!!!" (Utan citat) för katalognamnet kommer programmet att visa en lista över katalognamnen.
- Om du går in "!!!" (Utan citat) för schemanamnet kommer programmet att visa en lista över schemanamnen.
- Om du går in "!!!" (Utan citat) för tabellnamnet kommer programmet att visa en lista över tabeller och deras kolumner. Den första "!!!LIST!!!" inträde som du gör är den som kommer att användas.
- Läs noga all denna dokumentinformation om EDDTableFromDatabase.
- Du kan samla det mesta av den information du behöver för att skapa XML för en EDDTableFromDatabase dataset genom att kontakta databasadministratören och genom att söka på webben.
- Även om databaser ofta behandlar kolumnnamn och tabellnamn på ett känsligt sätt, är de känsliga i fall.ERDDAP. Om ett felmeddelande från databasen säger att ett kolumnnamn är okänt (Till exempel "Okänd identifierare = " Kolumn\_name """) Även om du vet att det finns, försök att använda alla kapital, till exempel. COLUMN NAME , vilket ofta är den sanna, fallkänsliga versionen av kolumnnamnet.
- Arbeta nära databasadministratören, som kan ha relevant erfarenhet. Om datamängden inte laddas, läsfelmeddelandenoga för att ta reda på varför.
JDBC Driver
-
JDBC Driver och<FörareName>] (#jdbc-driver) ----- Du måste få lämplig JDBC 3 eller JDBC 4-drivrutin .jar-fil för din databas och Sätt in den Tomcat /webapps/erddap/WEB-INF/lib efter installationERDDAP. Sedan, i dindatasets.xmlför denna dataset måste du ange<chaufförnamn> för den här föraren, som är (Tyvärr) från filnamnet. Sök på webben för JDBC-drivrutinen för din databas och förarenNamn somJavamåste använda den.
- För MariaDB, försök https://mariadb.com/kb/en/about-the-mariadb-java-client/
och<FörarenName> att använda idatasets.xml (Se nedan) är förmodligen org.mariadb.jdbc. Driver. - För MySQL och Amazon RDS, försök https://dev.mysql.com/downloads/connector/j/
och<FörarenName> att använda idatasets.xml (Se nedan) är förmodligen com.mysql.jdbc. Driver. - FörOracleFörsök https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html . och<FörarenName> att använda idatasets.xml (Se nedan) är förmodligen oracle.jdbc.driver.OracleFörare.
- För Postgresql fick vi JDBC 4-föraren från https://mvnrepository.com/artifact/org.postgresql/postgresql
och<FörarenName> att använda idatasets.xml (Se nedan) är förmodligen org.postgresql. Driver. - För SQL Server kan du få JTDS JDBC-drivrutinen från https://jtds.sourceforge.net . och<FörarenName> att använda idatasets.xml (Se nedan) är förmodligen net.sourceforge.jtds.jdbc. Driver.
- För MariaDB, försök https://mariadb.com/kb/en/about-the-mariadb-java-client/
När du har lagt JDBC-föraren .jar inERDDAP™lib katalog, du måste lägga till en referens till den .jar filen i .bat och/eller .sh script filer för GenerateDatasets Xml, DasDds och ArchiveADataset som finns i Tomcat /webapps/erddap/WEB-INF/-katalogen; annars får du en ClassNotFoundException när du kör dessa skript.
Tyvärr är JDBC ibland källan till problem. I sin roll som mellanhand mellanERDDAP™och databasen gör det ibland subtila ändringar i standard/generisk databas SQL-förfrågan.ERDDAP™skapar och därigenom orsakar problem (till exempel relaterade tillÖvre/lowercase identifierareoch relaterad tilldatum/tidszoner) . Var tålmodig, läs informationen här noggrant, kontrollera ditt arbete och se vårsektion om att få ytterligare stöd.
Databas<anslutning Fastighet & gt;
- [Och [Gud]<anslutningProperty >] (#database-connectionEgendom) ----- I dendatasets.xmlFör din dataset måste du definiera flera anslutningar Fastighetstaggar för att berättaERDDAP™Hur du ansluter till din databas (till exempel för att ange användarnamn, lösenord, ssl-anslutning ochFetch storlek) . Dessa är olika för varje situation och är lite svåra att räkna ut. Sök på webben för exempel på att använda en JDBC-drivrutin för att ansluta till databasen. och<anslutningProperty > namn (Till exempel "användare", "lösenord" och "ssl") , och några av anslutningenProperty värden kan hittas genom att söka på webben för "JDBC anslutning egenskaper Databasdata Typ " (till exempel,OracleMySQL, Amazon RDS, MariaDB, PostgreSQL) .
Citat för namn och fall känslighet
- Citat för fält / kolumnnamn; fall känslighet- Som standard, EDDTableFromDatabase sätter ANSI-SQL-standard dubbla citat runt fält / kolumnnamn i SELECT uttalanden om du har använt ett reserverat ord som ett fält / kolumnnamn eller en speciell karaktär i ett fält / kolumnnamn. De dubbla citaten hindrar också vissa typer av SQL-injektionsattacker. Du kan berättaERDDAP™att använda "," eller inga citat via<kolumnNameQuotes> in idatasets.xmlför denna dataset.
För många databaser, med någon typ av citat orsakar databasen att arbeta med fält / kolumnnamn på ett känsligt sätt (istället för standarddatabasfallet okänsligt sätt) . Databaser visar ofta fil/kolumnnamn som alla övre fall, när det i verkligheten är känslig form. InomERDDAP™Behandla alltid databas kolumnnamn som fallkänsliga.
-
För Maria DB, du måste köra databasen med\-sql-mode=ANSI\_QUOTES.
-
För MySQL och Amazon RDS måste du köra databasen med\-sql-mode=ANSI\_QUOTES.
-
OracleStöder ANSI-SQL-standard dubbla citatSom standard.
-
PostgreSQL stöder ANSI-SQL-standard dubbel citat som standard.
Använd inte ett reserverat ord för en databas, katalog, schema eller tabellens namn.ERDDAP™inte sätta citat runt dem.
Om möjligt, använd alla nedre fall för databas, katalog, schema, tabellnamn och fältnamn när du skapar databastabellen (eller visa) och när man hänvisar till fält/kolumnnamnen idatasets.xmlin iERDDAP. Annars kan du få ett felmeddelande som säger att databasen, katalogen, schemat, tabellen och / eller fältet inte hittades. Om du får det felmeddelandet, prova att använda den känsliga versionen, all övre fallversion och all nedre version av namnet iERDDAP. En av dem kan fungera. Om inte, måste du ändra namnet på databasen, katalogen, schemat och/eller tabellen till allt lägre fall.
Databas<Datadata data Type & gt;
- Databas[Och [Gud]<DataType>] (#datatype) Taggar - För det finns viss tvetydighet om vilkenDatatyper datakarta till vilkenERDDAP™datatyper, du måste ange en [<DataType>] (#datatype) tag för var och en<dataVariable>] (#datavariable) Att berättaERDDAP™vilken datatyp som ska användas. En del av problemet är att olika datamängder använder olika termer för olika datatyper - så försök alltid att matcha definitionerna, inte bara namnen. Se beskrivningen avstandardERDDAP™Datadata data Typersom innehåller hänvisningar till motsvarande SQL-datatyper.Datum och timestampär speciella fall: användningERDDAPDubbeldata Typ.
Databasdatum tidsdata
Vissa databas datum kolumner har ingen explicit tidszon. Sådana kolumner är problem förERDDAP. Databaser stöder begreppet ett datum (med eller utan tid) utan tidszon, som ett ungefärligt tidsintervall. MenJava (och därmedERDDAP) Det handlar bara om omedelbara datum + tider med en tidszon. Så du kanske vet att datumtidsdata baseras på en lokal tidszon (med eller utan dagsljus spara tid) eller GMT/Zulutidszon, menJava (ochERDDAP) Inte. Vi trodde ursprungligen att vi kunde arbeta kring detta problem (t.ex. genom att ange en tidszon för kolumnen) men databasen+JDBC+Javainteraktioner gjorde detta till en opålitlig lösning.
- Så,ERDDAP™kräver att du lagrar alla datum- och datumtidsdata i databastabellen med en datatyp som motsvarar JDBC-typen "timestamp med tidszon" (Den använder GMT/ZuluTidszon) .
- InomERDDAP"Sdatasets.xmli den<dataVariable> tag för en timestamp variabel, set
och in<addAttributes> Sätt in
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Förslag: Om data är ett tidsintervall är det användbart att ha tidsstämpelvärdena hänvisar till centrum för det underförstådda tidsintervallet. (Till exempel, middag) . Om en användare till exempel har data för 2010-03-26T13:00Z från en annan dataset och de vill ha de närmaste data från en dataset som har data för varje dag, då databasdata för 2010-03-26T12:00Z (representera data för det datumet) är uppenbarligen bäst (i motsats till midnatt före eller efter, där det är mindre uppenbart vilket är bäst) .
- ERDDAP™har ett verktyg förKonvertera en numerisk Dags att/från en strängtid.
- SeHur hurERDDAPErbjudanden med tiden.
Integer nulls
Databaser stöder nulls i heltal (Int, Smallint, tinyint) kolumner, menERDDAP™Stödjer inte riktiga nulls. Databas nulls kommer att konverteras iERDDAP™127 för byte kolumner, 255 för ubyte kolumner, 32767 för korta kolumner, 65535 för ushort kolumner, 2147483647 för int kolumner, 4294967295 för uint kolumner, 9,223,372,036,854,775,807 för långa kolumner, eller 18446744073709551615 för ulong kolumner. Om du använder dessa standarder, vänligen identifiera demmissing\_values för datasetets användare iERDDAP™med
<att name="\_FillValue" type="int"\>2147483647</att>
eller
<att name="\_FillValue" type="short"\>32767</att>
Alternativt kan du använda "missing\_valueattribut istället för "\_FillValue". GenerateDatasets Xml lägger automatiskt till dessa \_FillValue-attribut när den genererar de föreslagnadatasets.xmlför dataset i databasen.
För databas flytande punkt kolumner, nulls konverteras till NaNs iERDDAP. För datatyper som konverteras till Strings inERDDAP™Nulls blir konverterade till tomma strängar.
Databassäkerhet
- När du arbetar med databaser måste du göra saker så säkert och säkert som möjligt för att undvika att en skadlig användare kan skada din databas eller få tillgång till data som de inte borde ha tillgång till.ERDDAP™försöker göra saker på ett säkert sätt också.
- Överväg att replikera, på en annan dator, databasen och databastabellerna med de data som du villERDDAP™att tjäna. (Ja, för kommersiella databaser somOracleDetta innebär ytterligare licensavgifter. Men för öppna källdatabaser, som PostgreSQL, MySQL, Amazon RDS och MariaDB, kostar detta ingenting.) Detta ger dig en hög säkerhetsnivå och förhindrar ocksåERDDAP™Förfrågningar från att sakta ner den ursprungliga databasen.
- Vi uppmuntrar dig att inrättaERDDAP™att ansluta till databasen som en databasanvändare som bara har tillgång till relevant Databasdata (s) och endast har READ privilegier.
- Vi uppmuntrar dig att upprätta anslutningen frånERDDAP™till databasen så att den
- Använd alltid SSL,
- endast tillåter anslutningar från en IP-adress (eller ett block av adresser) och från denERDDAP™användare och
- endast överför lösenord i deras MD5 hashed form.
- \[Knulla PROBLEM\]AnslutningenProperties (inklusive lösenordet!) lagras som vanlig text idatasets.xml. Vi har inte hittat ett sätt att låta administratören ange databaslösenordet underERDDAPStartup i Tomcat (som sker utan användarinmatning) Så lösenordet måste vara tillgängligt i en fil. För att göra detta säkrare:
- Du du (ochERDDAP™Administratör) bör vara ägaren tilldatasets.xmloch har READ och WRITE access.
- Gör en grupp som bara innehåller användar=tomcat. Använd chgrp för att göra gruppen fördatasets.xmlmed bara READ privilegier.
- Använd chmod för att tilldela o-rwx privilegier (Ingen READ eller WRITE-åtkomst för "andra" användare) Fördatasets.xml.
- När inERDDAP™lösenordet och andra anslutningsegenskaper lagras i "privat"Javavariabler.
- Begäran från klienter analyseras och kontrolleras för giltighet innan de genererar SQL-förfrågningar för databasen.
- Förfrågningar till databasen görs med SQL PreparedStatements, för att förhindraSQL injektion.
- Förfrågningar till databasen lämnas in med utförande Query (inte executeStatement) begränsa förfrågningar som ska läsas endast (Så försökt SQL-injektion att ändra databasen kommer också att misslyckas av denna anledning.) .
SQL
- För därförOPeNDAP"S tabular dataförfrågningar var utformade för att efterlikna SQL-tabelldataförfrågningar, det är lätt förERDDAP™konvertera tabular dataförfrågningar till enkla SQL PreparedStatements. Till exempel,ERDDAP™begäran om begäran
time,temperature&time>=2008-01-01T00:00:00Z&time<=2008-02-01T00:00:00Z
omvandlas till SQL PreparedStatement
SELECT "time", "temperature" FROM *tableName*
WHERE "time" >= 2008-01-01T00:00:00Z AND "time" <= 2008-02-01T00:00:00Z
ERDDAP™Förfrågningar med & Distinct () och/eller &orderBy ( variabler ) kommer att lägga till DISTINCT och/eller ORDER BY variabler till SQL förberedda uttalande. I allmänhet kommer detta att sakta ner svaret från databasen. ERDDAP™Loggar PreparedStatement inLog.txtsom
statement=*thePreparedStatement*
Detta kommer att vara en textrepresentation av PreparedStatement, som kan vara något annorlunda än den faktiska PreparedStatement. Till exempel, i PreparedStatement, är tider kodade på ett speciellt sätt. Men i textrepresentationen visas de som ISO 8601-datumtider.
Databashastighet
- Databaser kan vara långsamma. Det finns några saker du kan göra:
- I allmänhet - SQL:s natur är att frågor ärdeklarativt. De specificerar bara vad användaren vill ha. De innehåller inte en specifikation eller tips för hur frågan ska hanteras eller optimeras. Så det finns inget sätt förERDDAP™för att generera frågan på ett sådant sätt att den hjälper databasen att optimera frågan (eller på något sätt specificerar hur frågan ska hanteras) . I allmänhet är det upp till databasadministratören att ställa in saker och ting. (till exempel index) optimera för vissa typer av frågor.
Ställ in Fetch Size
Databaser returnerar data tillERDDAP™i bitar. Som standard returnerar olika databaser ett annat antal rader i bitarna. Ofta är detta nummer mycket litet och så mycket ineffektivt. Till exempel standard förOracleär 10! Läs JDBC-dokumentationen för databasens JDBC-drivrutin för att hitta anslutningsegenskapen för att öka detta och lägg till detta i datasetets beskrivning idatasets.xml. Till exempel, För MySQL och Amazon RDS, använd
<connectionProperty name="defaultFetchSize">10000</connectionProperty>
För MariaDB finns det för närvarande inget sätt att ändra fostrets storlek. Men det är en efterfrågad funktion, så sök på webben för att se om detta har genomförts. FörOracleAnvänd
<connectionProperty name="defaultRowPrefetch">10000</connectionProperty>
För PostgreSQL, använd
<connectionProperty name="defaultRowFetchSize">10000</connectionProperty>
Känn dig fri att ändra numret. Ange numret för stort kommer att orsakaERDDAP™att använda massor av minne och vara mer benägna att springa ur minnet.
ConnectionProperties
Varje databas har andra anslutningsegenskaper som kan specificeras idatasets.xml. Många av dessa kommer att påverka databasens prestanda tillERDDAP™anslutning. Läs dokumentationen för din databas JDBC-drivrutin för att se alternativen. Om du hittar anslutningsegenskaper som är användbara, skicka ett e-postmeddelande med detaljerna tillerd dot data at noaa dot gov.
- Gör ett bord - Du kommer förmodligen att få snabbare svar om du periodiskt (varje dag? När det finns nya data?) generera en verklig tabell (På samma sätt som du skapade VIEW) och berättaERDDAP™för att få data från tabellen istället för VIEW. Eftersom varje begäran till tabellen sedan kan uppfyllas utan att JOINing en annan tabell, kommer svaret att vara mycket snabbare.
- Vakuum bordet - MySQL och Amazon RDS svarar mycket snabbare om du använderOptimera TABLE. Maria Maria Maria Maria Maria Maria Maria DB svarar mycket snabbare om du använderOptimera TABLE. PostgreSQL svarar mycket snabbare om duVACUMtabellen. OracleHar inte eller behöver ett analogt kommando.
- GörIndexFör vanliga begränsade variabler - Du kan påskynda många/mest frågor genom att skapa index i databasen för variablerna. (Vilka databaser kallar "kolumner") Det är ofta begränsat i användarens fråga. I allmänhet är dessa samma variabler som anges av [<subsetVariables>] (#subsetvariables) och/eller latitud, longitud och tidsvariabler.
Använd Connection Pooling
Normalt,ERDDAP™gör en separat anslutning till databasen för varje begäran. Detta är den mest tillförlitliga metoden. Det snabbare alternativet är att använda en datakälla som stöder anslutning poolning. För att ställa in det, ange (till exempel)
<dataSourceName>java:comp/env/jdbc/postgres/erddap</dataSourceName>
precis bredvid<sourceUrl>,<FörareName>, och<anslutning Fastigheter>. Och i Tomcat /conf/context.xml, definiera en resurs med samma information, till exempel
<Resource
name="jdbc/postgres/erddap" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="*jdbc:postgresql://somehost:5432/myDatabaseName*"
username="*myUsername*" password="*myPassword*"
initialSize="0" maxActive="8" minIdle="0" maxIdle="0" maxWait="-1"/>
Allmän information om att använda en DataSource är på https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . SeTomcat DataSource informationochTomcat DataSource exempeleller söka på webben för exempel på att använda DataSources med andra programservrar.
- Om allt annat misslyckas, överväga att lagra data i en samling avNetCDFv3.ncfiler filer (Särskilt speciellt.ncfiler som använderCF Diskret sampling geometrier (DSG) sammanhängande Ragged Array datastrukturer och så kan hanteras medERDDAP"SEDDTableFromNcCFFiles) . Om de är logiskt organiserade (var och en med data för en bit av utrymme och tid) ,ERDDAP™kan utvinna data från dem mycket snabbt.
EDDTableFromDatabase skelett XML
<dataset type="EDDTableFromDatabase" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<!-- The format varies for each type of database, but will be
something like:
For MariaDB: jdbc:mariadb://xxx.xxx.xxx.xxx:3306/databaseName
For MySql jdbc:mysql://xxx.xxx.xxx.xxx:3306/databaseName
For Amazon RDS: jdbc:mysql://xxx.xxx.xxx.xxx:3306/databaseName
For Oracle: jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:databaseName
For Postgresql: jdbc:postgresql://xxx.xxx.xxx.xxx:5432/databaseName
where xxx.xxx.xxx.xxx is the host computer's numeric IP address
followed by :PortNumber (4 digits), which may be different for your
database. REQUIRED. -->
<driverName\>...</driverName>
<!-- The high-level name of the database driver, for example,
"org.postgresql.Driver". You need to put the actual database
driver .jar file (for example, postgresql.jdbc.jar) in
tomcat/webapps/erddap/WEB-INF/lib. REQUIRED. -->
<connectionProperty name="name">value</connectionProperty>
<!-- The names (for example, "user", "password", and "ssl")
and values of the properties needed for ERDDAP™ to establish
the connection to the database. 0 or more. -->
<dataSourceName>...</dataSourceName> <!-- 0 or 1 -->
<catalogName>...</catalogName>
<!-- The name of the catalog which has the schema which has the
table, default = "". OPTIONAL. Some databases don't use
this. -->
<schemaName>...</schemaName> <!-- The name of the
schema which has the table, default = "". OPTIONAL. -->
<tableName>...</tableName> <!-- The name of the
table, default = "". REQUIRED. -->
<columnNameQuotes><columnNameQuotes> <!-- OPTIONAL. Options:
" (the default), ', \[nothing\]. -->
<orderBy>...</orderBy> <!-- A comma-separated list of
sourceNames to be used in an ORDER BY clause at the end of the
every query sent to the database (unless the user's request
includes an &orderBy() filter, in which case the user's
orderBy is used). The order of the sourceNames is important.
The leftmost (first) sourceName is most important; subsequent
sourceNames are only used to break ties. Only relevant
sourceNames are included in the ORDER BY clause for a given user
request. If this is not specified, the order of the returned
values is not specified. Default = "". OPTIONAL. -->
<sourceCanOrderBy>no(default)|partial|yes</sourceCanOrderBy>
<!-- 0 or 1 -->
<sourceCanDoDistinct>no(default)|partial|yes</sourceCanDoDistinct>
<!-- 0 or 1 -->
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more.
Each dataVariable MUST include a <dataType> tag.
See Database DataTypes.
For database date and timestamp columns, set dataType=double and
units=seconds since 1970-01-01T00:00:00Z -->
</dataset>
EDDTableFrånEDDGrid
EDDTableFrånEDDGrid låter dig skapa en EDDTable dataset från allaEDDGriddataset.
- Några vanliga skäl för att göra detta är:
- Detta gör det möjligt för datasetet att bli queried medOPeNDAPurvalsbegränsningar, som är en typ av "fråga efter värde" (som en användare kan ha begärt) .
- Datasetet är i sig en tabular dataset.
- Värdet av den globala attributet "maxAxis0" (vanligtvis av typ = "int") , (Standarden är 10) Används för att begränsa antalet axlar\[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\] (vanligen"time"axel) värden för den slutnaEDDGriddataset som kan nås per begäran om data. Om du inte vill att det ska finnas någon gräns, ange ett värde på 0. Denna inställning är viktig eftersom det annars skulle vara för lätt för en användare att fråga EDDTableFrånEDDGridatt titta igenom alla de ruttna datamängdens data. Det skulle ta lång tid och skulle nästan säkert misslyckas med en timeout fel. Detta är inställningen som gör det säkert att ha EDDTableFromEDDGriddatamängder i dinERDDAPutan rädsla för att de kommer att leda till en orimlig användning av datorresurser.
- Om den inneslutnaEDDGridär enEDDGridFrånErddapochERDDAP™är detsammaERDDAPEDDTableFrånEDDGridAnvänd alltid den tillgängliga versionen av den refererade dataset direkt. Detta är ett mycket effektivt sätt för EDDTableFromEDDGridför att komma åt de ruttna data.
- Den här klassen är [<Reload EveryNMinutes (#reloadeveryn Minuter) är det som räknas. Den inneslutnaEDDGrid"S<ReloadEveryNMinutes > ignoreras.
- Om ett värde för [<updateEveryNMillis >] (#updateeverynmillis) levereras för denna dataset, det ignoreras. Den inneslutnaEDDGrid"S<updateEveryNMillis är vad som är viktigt.
- GenerateDatasetsXmlhar ett alternativ för dataset typ=EDDTableFromEDDGridsom ber om en URLERDDAP (vanligtvis sammaERDDAP) (slutar i "/erddap/") och ett regelbundet uttryck. GenerateDatasets Xml kommer sedan att generera XML för en EDDTableFromEDDGriddataset för varje rutnät dataset iERDDAP™som har endatasetIDsom matchar det vanliga uttrycket (Använd . * för att matcha alladatasetIDs för gridded datasets) .
Den bit av XML som genereras av GenerateDatasetsXml för varje dataset inkluderar:
- EttdatasetIDsom är denEDDGrid"SdatasetIDplus "AsATable".
- En ny sammanfattande global egenskap som ärEDDGridSammanfattning plus ett nytt första stycke som beskriver vad detta dataset är.
- En ny titel global attribut som är denEDDGridTiteln plus ", (Som ett bord) ".
- Ett nytt maxAxis0 globalt attribut med ett värde av 10.
EDDTableFrånEDDGridskelett XML
<dataset type="EDDTableFromEDDGrid" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1.
For EDDTableFromEDDGrid, this calls lowUpdate() of the underlying
EDDGrid. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataset>...</dataset> <!-- 1
Any type of EDDGrid dataset. You can even use an
EDDGridFromERDDAP™ to access an independent EDDGrid dataset on
this server. -->
</dataset>
EDDTableFromFileNames
EDDTableFromFileNames skapar en dataset från information om en grupp filer i serverns filsystem, inklusive en URL för varje fil så att användarna kan ladda ner filerna viaERDDAP"S"files"Systemsystem. Till skillnad från allaEDDTableFromFilesunderklasser, denna dataset typ inte tjänar data inifrån filerna.
- EDDTableFromFileNames är användbar när:
- Du har en grupp filer som du vill distribuera som hela filer eftersom de inte innehåller "data" på samma sätt som vanliga datafiler har data. Till exempel bildfiler, videofiler, Word-dokument, Excel-kalkylbladfiler, PowerPoint-presentationsfiler eller textfiler med ostrukturerad text.
- Du har en grupp filer som har data i ett format somERDDAP™Kan ännu inte läsa. Till exempel ett projektspecifikt, anpassat, binärt format.
EDDTableFromFileNames Data
- Uppgifterna i en EDDTableFromFileNames datasetär en tabell somERDDAP™skapar on-the-fly med information om en grupp lokala filer. I tabellen finns det en rad för varje fil. Fyra speciella attribut idatasets.xmlför denna datasetbestämma vilka filer som kommer att ingå i denna dataset:
fil Dir
- <FilDir > -- Detta anger källkatalogen i serverns filsystem med filerna för denna dataset. De filer som faktiskt finns i serverns filsystem i<fileDir> kommer att visas i url-kolumnen för denna dataset inom en virtuell katalog som heter https://serverUrl/erddap/files/datasetID/ . Till exempel, omdatasetIDär jplMURSST, och<filDir> är /home/data/mur/, och den katalogen har en fil som heter jplMURSST20150103000000.png, sedan URL som visas för användare för den filen kommer att visas https://serverUrl/erddap/jplMURSST/jplMURSST20150103000000.png .
Förutom att använda en lokal katalog för<filDir>, du kan också ange webbadressen för en fjärr, katalog-liknande webbsida. Detta fungerar med:
- Oaggregerade datamängder i THREDDS, t.ex. https://data.nodc.noaa.gov/thredds/catalog/aquarius/nodc\\_binned\\_V3.0/monthly/ \[2020-10-21 Denna server är inte längre tillförlitligt tillgänglig.\]
- Oaggregerade datamängder iHyraxt.ex., https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/
- De flesta Apache-liknande kataloglistor, t.ex. https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/
FrånOnTheFly
\*\*FrånOnTheFly----- För några stora S3 hink (som noaa-goes17, som har 26 miljoner filer) Det kan taERDDAP™upp till 12 timmar för att ladda ner all information om innehållet i hinken (och sedan finns det andra problem) . För att komma runt detta finns det ett speciellt sätt att använda<fileDir> i EDDTableFromFileNames för att göra en dataset med katalogen och filnamn från en AWS S3 hink. Datasetet har inte listan över alla S3-hinkens kataloger och filnamn som en användare kan söka via förfrågningar till datasetet. Men datamängden kommer att få namnen på kataloger och filer på flygningen om användaren korsar katalogen hierarki med datamängdens"files"Alternativ. Således gör det möjligt för användare att bläddra i S3-hinkens filhierarki och filer via datasetets"files"system. För att göra detta, i stället för att ange URL för S3 hinken som "Starting katalogen" (i GenerateDatasets Xml) eller<FilDir> (in idatasets.xml) Använd:
\\*\\*\\*fromOnTheFly,*theS3BucketUrl*
Till exempel:
\\*\\*\\*fromOnTheFly,https://noaa-goes17.s3.us-east-1.amazonaws.com/
Se dokumentationen förArbeta med S3 BucketsERDDAP™, särskilt beskrivningen av det specifika formatet som måste användas för S3 bucket URL. Och se Dessa detaljer och ett exempelatt använda\*\*FrånOnTheFly.
Återkommande
- <Recursive > - Filer i underkataloger av<FilDir > med namn som matchar<fileRegex> visas i samma underkataloger i"files"URL om<Återkommande > är inställd på sant. Standarden är falsk.
- [Och [Gud]<PathRegex >] (#pathregex) ----- Om recursive=true, endast katalognamn som matchar vägenRegex (Default="*") kommer att accepteras. Om återkommande = falskt ignoreras detta. Detta används sällan, men kan vara mycket användbart under ovanliga omständigheter. (Se dettaregex dokumentationochRegex tutorial.)
FilRegex
- <FilRegex > -- Endast de filnamn där hela filnamnet (Inte inklusive katalogen namn) matcha<fileRegex> kommer att ingå i denna dataset. Till exempel jplMURSST. {14.png. (Se dettaregex dokumentationochRegex tutorial.)
Från filnamn Data Tabell Innehåll
I tabellen finns kolumner med:
-
Url - Den URL som användare kan använda för att ladda ner filen viaERDDAP"S"files"Systemsystem.
-
Namn -- Filens namn (utan katalognamn) .
-
LastModified - Den tid filen senast ändrades (lagras som dubblar med"seconds since 1970-01-01T00:00:00Z") . Denna variabel är användbar eftersom användare kan se om / när innehållet i en viss fil senast ändrats. Denna variabel är enTid Stamp variabelSå data kan visas som numeriska värden (sekunder sedan 1970-01-01T00:00:00Z) eller ett strängvärde (ISO 8601:2004 (E E E E) format format) beroende på situationen.
-
storlek - Filens storlek i byte, lagrad som dubbel. De lagras som dubblar eftersom vissa filer kan vara större än ints tillåter och längder stöds inte i vissa responsfiltyper. Dubblar kommer att ge exakt storlek, även för mycket stora filer.
-
tilläggskolumner definierade avERDDAP™administratör med information som extraheras från filnamnet (till exempel den tid som är associerad med data i filen) baserat på två attribut som du anger i metadata för varje extra kolumn/dataVariableFrån:
- extraktRegex - Detta är enregelbundet uttryck (Tutorial) . Hela regex måste matcha hela filnamnet (Inte inklusive katalogen namn) . Regex måste innehålla minst en fångstgrupp (en del av ett regelbundet uttryck som innesluts av parentes) som skallERDDAP™använder för att bestämma vilken del av filnamnet som ska extrahera för att bli data.
- extrakt Grupp -- Detta är antalet fångar gruppen (#1 är den första fångstgruppen) i det vanliga uttrycket. Standarden är 1. En fångstgrupp är en del av ett regelbundet uttryck som innesluts av parenteser.
Här är två exempel:
<dataVariable>
<sourceName>time</sourceName>
<destinationName>time</destinationName>
<dataType>String</dataType>
<addAttributes>
<att name="extractRegex">jplMURSST(.{14})\\.png</att>
<att name="extractGroup" type="int">1</att>
<att name="units">yyyyMMddHHmmss</att>
</addAttributes>
</dataVariable>
<dataVariable>
<sourceName>day</sourceName>
<destinationName>day</destinationName>
<dataType>int</dataType>
<addAttributes>
<att name="extractRegex">jplMURSST.{6}(..).{6}\\.png</att>
<att name="extractGroup" type="int">1</att>
<att name="ioos\\_category">Time</att>
</addAttributes>
</dataVariable>
Vid tidsvariabel, om en fil har namnet jplMURSST20150103000000000.png, extraktRegex kommer att matcha filnamnet, extrahera de tecken som matchar den första fångstgruppen ("20150103000000") som dataType=String, använd sedanenheter som är lämpliga för strängtidatt analysera strängarna i tidsdatavärden (2015-01-03T00:00:00Z) .
När det gäller dagsvariabeln, om en fil har namnet jplMURSST20150103000000000.png, extraktRegex kommer att matcha filnamnet, extrahera de tecken som matchar den första fångstgruppen ("03") som [som]<DataType>] (#datatype) ¤int, ger ett datavärde på 3.
Övrig information
- Nej, nej,<updateEveryNMillis >] (#updateeverynmillis) ----- Denna typ av dataset behöver inte och kan inte använda<updateEveryNMillis> taggen eftersom den information som serveras av EDDTableFromFileNames är alltid helt uppdaterad eftersomERDDAP™Frågor filsystemet för att svara på varje begäran om data. Även om det finns ett stort antal filer, bör detta tillvägagångssätt fungera ganska bra. Ett svar kan vara långsamt om det finns ett stort antal filer och datamängden inte har queried ett tag. Men i flera minuter efter det håller operativsystemet informationen i en cache, så svaren bör vara mycket snabba.
- Du kan användaGenerateDatasets Xml programatt göradatasets.xmlchunk för denna typ av dataset. Du kan lägga till / definiera ytterligare kolumner med information som extraheras från filnamnet, som visas ovan.
EDDTableFromFileNames skelett XML
<dataset type="EDDTableFromFileNames" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<fileDir>...</fileDir>
<recursive>...</recursive> <!-- true or false (the default) -->
<pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
match the pathRegex (default=".\*") will be accepted. -->
<fileNameRegex>...</fileNameRegex>
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more.
Each dataVariable MUST include <dataType> tag. -->
</dataset>
EDDTableFromFiles
EDDTableFromFiles är superklassen av alla EDDTableFrån...Files klasser. Du kan inte använda EDDTableFromFiles direkt. Använd istället en underklass av EDDTableFromFiles för att hantera den specifika filtypen:
- EDDTableFromAsciiFilesaggregerar data från komma-, flik-, semicolon- eller rymdseparerade tabell ASCII-datafiler.
- EDDTableFromAudioFilesaggregerar data från en grupp lokala ljudfiler.
- EDDTableFrån AwsXmlFilessamlar in data från en uppsättning automatiska väderstationer (AWS) XML filer.
- EDDTableFromColumnarAsciiFilesaggregerar data från tabular ASCII-datafiler med fasta datakolumner.
- EDDTableFrånHyraxFiler (Begränsad) aggregerar data med flera variabler, var och en med delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) och serveras av enHyrax OPeNDAPServer server.
- EDDTableFromInvalidCRAFilesaggregerar data frånNetCDF (v3 eller v4) .ncfiler som använder en specifik, ogiltig, variant av CF DSG Contiguous Ragged Array (CRA) filer. Även omERDDAP™stöder denna filtyp, det är en ogiltig filtyp som ingen ska börja använda. Grupper som för närvarande använder denna filtyp uppmuntras starkt att användaERDDAP™för att generera giltiga CF DSG CRA-filer och sluta använda dessa filer.
- EDDTableFromJsonlCSVFilesaggregerar data frånJSON Lines CSV-filer.
- EDDTableFromMultidimNcFilesaggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer med flera variabler, var och en med delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) .
- EDDTableFromNcFilesaggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer med flera variabler, var och en med delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) . Det är bra att fortsätta använda denna datasettyp för befintliga dataset, men för nya dataset rekommenderar vi att du använder EDDTableFromMultidimNcFiles istället.
- EDDTableFromNcCFFilesaggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer som använder ett av de filformat som anges avCF Diskret sampling geometrier (DSG) konventioner. Men för filer som använder en av de multidimensionella CF DSG-varianterna, användEDDTableFromMultidimNcFilesI stället.
- EDDTableFromNccsvFilesaggregerar data frånNCCSVASCII .csv filer.
- EDDTableFromParquetFileshanterar data frånParquet.
- EDDTableFromThreddsFiles (Begränsad) aggregerar data från filer med flera variabler med delade dimensioner som serveras av enTröjorOPeNDAPServer server.
- EDDTableFrånWFSFiler (Begränsad) gör en lokal kopia av alla data från enArcGISMapServerWFSserver så att data sedan kan sparas snabbt tillERDDAP™användare.
För närvarande stöds inga andra filtyper. Men det är oftast relativt enkelt att lägga till stöd för andra filtyper. Kontakta oss om du har en förfrågan. Eller om dina data är i ett gammalt filformat som du vill flytta bort från rekommenderar vi att du konverterar filerna för att varaNetCDFv3.ncfiler filer (och särskilt.ncfiler medCF Diskret sampling geometrier (DSG) Contiguous Ragged Array datastruktur -ERDDAP™kan utvinna data från dem mycket snabbt) .NetCDFär ett brett stöd, binärt format, tillåter snabb slumpmässig åtkomst till data, och stöds redan avERDDAP.
FrånFiles detaljer
Följande information gäller alla underklasser av EDDTableFromFiles.
Aggregation
Denna klass samlar in data från lokala filer. Varje fil har en (relativt) liten datatabell.
- Den resulterande dataset visas som om alla filens tabeller hade kombinerats (alla rader av data från fil #1, plus alla rader från fil #2, ...) .
- Filerna behöver inte alla de angivna variablerna. Om en viss fil inte har en specificerad variabel,ERDDAP™kommer att lägga till saknade värden efter behov.
- Variablerna i alla filer måste ha samma värden föradd\_offset,missing\_value,Fyll Värde,scale\_factorochenheterattribut (Om någon) .ERDDAP™kontroller, men det är ett ofullständigt test - om det finns olika värden,ERDDAPVet inte vilket som är korrekt och därför vilka filer som är ogiltiga. Om detta är ett problem kan du användaNcMLellerNCOför att åtgärda problemet.
Komprimerade filer
Källdatafiler för alla EDDTableFromFiles-underklasser kan komprimeras externt (t.ex.,.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2eller .Z) . SeExternt komprimerad fildokumentation.
Cached File Information
- När en EDDTableFromFiles dataset först laddas, EDDTableFromFiles läser information från alla relevanta filer och skapar tabeller (En rad för varje fil) med information om varje giltig fil och varje "dålig" (olika eller ogiltiga) fil.
- Tabellerna lagras också på disken, somNetCDFv3.ncfiler i bigParentDirectory /dataset/ Last2CharsOfDatasetID /// datasetID i filer som heter: DirTable.nc (som innehåller en lista över unika katalognamn) , fil Bord.nc (som håller tabellen med varje giltig fils information) , badFiles.nc (som håller tabellen med varje dålig fils information) .
- För att påskynda åtkomsten till en EDDTableFromFiles dataset (men på bekostnad av att använda mer minne) Du kan använda
[Och [Gud]<filTableInMemory >true</fileTableInMemory>] (#filetableinmemory)
Att berättaERDDAP™för att hålla en kopia av filinformationstabellerna i minnet. - Kopieringen av filinformationstabellerna på disken är också användbar närERDDAP™stängs och startas om: det sparar EDDTable FromFiles från att behöva läsa om alla datafiler.
- När en dataset laddas om,ERDDAP™behöver bara läsa data i nya filer och filer som har ändrats.
- Om en fil har en annan struktur från andra filer (till exempel en annan datatyp för en av variablerna, eller ett annat värde för "enheter"attribut) ,ERDDAPlägger till filen i listan över "dåliga" filer. Information om problemet med filen kommer att skrivas till bigParentDirectory /logs/log.txt fil.
- Du bör aldrig behöva ta bort eller arbeta med dessa filer. Ett undantag är: Om du fortfarande gör ändringar i en datasetdatasets.xmlinstallation, du kanske vill ta bort dessa filer för att tvingaERDDAP™att läsa alla filer eftersom filerna kommer att läsas / tolkas annorlunda. Om du någonsin behöver ta bort dessa filer kan du göra det när duERDDAP™kör. (Sätt sedan enflaggaför att ladda om dataset ASAP.) Men,ERDDAP™brukar märka attdatasets.xmlinformation matchar inte filen Tabellinformation och raderar filtabellerna automatiskt.
- Om du vill uppmuntraERDDAP™för att uppdatera lagrad dataset information (till exempel, om du bara har lagt till, tagit bort eller ändrat några filer till datasetets datakatalog) AnvändaFlagga systemAtt tvingaERDDAP™för att uppdatera cachade filinformation.
Hanteringsförfrågningar
- ERDDAP™Tabular dataförfrågningar kan sätta begränsningar på någon variabel.
- När en kunds begäran om data behandlas kan EDDTableFromFiles snabbt titta i tabellen med giltig filinformation för att se vilka filer som kan ha relevanta data. Till exempel, om varje källfil har data för en fast plats boj, kan EDDTableFromFiles mycket effektivt bestämma vilka filer som kan ha data inom ett visst longitudområde och latitudområde.
- Eftersom den giltiga filinformationstabellen innehåller det minsta och maximala värdet av varje variabel för varje giltig fil, kan EDDTableFromFiles ofta hantera andra frågor ganska effektivt. Till exempel, om några av bojarna inte har en lufttryckssensor, och en klient begär data för airPressure!=NaN, kan EDDTableFromFiles effektivt bestämma vilka bojar som har lufttrycksdata.
Uppdatera Cached File Information
När datamängden laddas om uppdateras den cachade filinformationen.
- Datamängden laddas regelbundet enligt bestämda av<reloadEveryNMinutes > i datasetets information idatasets.xml.
- Datasetet laddas så snart som möjligt när som helstERDDAP™upptäcker att du har lagt till, tagit bort,touch'd ) (ändra filens sista Ändrad tid) eller ändrat en datafil.
- Datasetet laddas så snart som möjligt om du använderFlagga system.
När datamängden laddas om,ERDDAP™jämför de för närvarande tillgängliga filerna till tabellen med cachad filinformation. Nya filer läses och läggs till i den giltiga filer tabellen. Filer som inte längre finns tappas från tabellen giltiga filer. Filer där fil timestamp har ändrats läses och deras information uppdateras. De nya tabellerna ersätter de gamla tabellerna i minnet och på disken.
Dåliga filer
Tabellen med dåliga filer och anledningarna till att filerna förklarades dåligt (korrupt fil, saknade variabler, felaktiga axelvärden etc.) mailas till e-post Allting Allt Till e-postadress (förmodligen du) Varje gång datasetet laddas om. Du bör ersätta eller reparera dessa filer så snart som möjligt.
Saknade variabler
Om några av filerna inte har några avdataVariables definierade i datasetetsdatasets.xmlChunk, det är okej. När EDDTableFromFiles läser en av dessa filer, kommer det att fungera som om filen hade variabeln, men med alla saknade värden.
Nära realtidsdata
- EDDTableFromFiles behandlar förfrågningar om mycket senaste data som ett särskilt fall. Problemet: Om filerna som utgör datamängden uppdateras ofta, är det troligt att datamängden inte kommer att uppdateras varje gång en fil ändras. Så EDDTableFromFiles kommer inte att vara medveten om de ändrade filerna. (Du kan användaFlagga systemMen det kan leda tillERDDAP™Reloading dataset nästan kontinuerligt. I de flesta fall rekommenderar vi inte det.) Istället hanterar EDDTableFromFiles detta genom följande system: När närERDDAP™Få en begäran om data inom de senaste 20 timmarna (8 timmar sedan tills nu) ,ERDDAP™kommer att söka alla filer som har några data under de senaste 20 timmarna. Således,ERDDAP™behöver inte ha helt uppdaterad data för alla filer för att hitta de senaste data. Du bör fortfarande ställa in [<Reload EveryNMinutes (#reloadeveryn Minuter) till ett rimligt litet värde (Till exempel 60) Men det behöver inte vara litet (till exempel 3) .
-
Rekommenderas inte organisation av nästan realtidsdata i filerna: Om du till exempel har en datamängd som lagrar data för många stationer (eller boj eller bana,) I många år kan du ordna filerna så att det till exempel finns en fil per station. Men då, varje gång nya data för en station anländer, måste du läsa en stor gammal fil och skriva en stor ny fil. Och närERDDAP™reloads dataset, det märker att vissa filer har ändrats, så det läser dessa filer helt. Det är ineffektivt.
-
Rekommenderas organisation av nästan realtidsdata i filerna: Lagra data i bitar, till exempel all data för en station/boj/bana i ett år (eller en månad) . Då, när ett nytt datum anländer, bara filen med årets (eller månadens) data påverkas.
-
Bäst: AnvändningNetCDFv3.ncfiler med obegränsad dimension (Tid) . För att lägga till nya data kan du bara lägga till nya data utan att behöva läsa och skriva om hela filen. Förändringen görs mycket effektivt och i huvudsak atomiskt, så filen är aldrig i ett inkonsekvent tillstånd.
-
Annars: Om du inte/kan inte använda.ncfiler med obegränsad dimension (Tid) När du behöver lägga till nya data måste du läsa och skriva om hela den drabbade filen (Förhoppningsvis litet eftersom det bara har ett år (eller månadens) värdet av data) . Lyckligtvis alla filer för tidigare år (eller månader) för den stationen förblir oförändrad.
-
I båda fallen närERDDAP™laddar om datamängden, de flesta filer är oförändrade; endast några få, små filer har ändrats och måste läsas.
Directories
Filerna kan vara i en katalog eller i en katalog och dess underkataloger (Återkommande) . Om det finns ett stort antal filer (Till exempel >1 000) operativsystemet (och därmed EDDTableFromFiles) kommer att fungera mycket mer effektivt om du lagrar filerna i en serie underkataloger (en per år, eller en per månad för datamängder med mycket frekventa filer) så att det aldrig finns ett stort antal filer i en viss katalog.
Remote Directories och HTTP Range Requests
-
Remote Directories och HTTP Range Requests (AKA Byte Serving, Byte Range Requests) ----- EDDGridFrånNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles och EDDTableFromNcCFFiles, kan ibland tjäna data från.ncfiler på fjärrservrar och nås via HTTP om servern stöderByte serveringvia HTTP range requests (HTTP-mekanismen för byte servering) . Detta är möjligt eftersom netcdf-java (som skallERDDAP™användning för att läsa.ncfiler filer) stöder att läsa data från fjärrkontrollen.ncfiler via HTTP-serieförfrågningar.
Gör inte detta!
Istället, använd [<cacheFromUrl> system (#cachefromurl) .
CacheFromUrl
- [Och [Gud] ** <cacheFromUrl> ** ] (#cachefromurl) -
Allt alltEDDGridFromFiles och alla EDDTableFromFiles dataset stöder en uppsättning taggar som berättarERDDAP™för att ladda ner och behålla en kopia av alla en fjärrdatamängds filer, eller en cache av några filer (nedladdad efter behov) . Detta är en otroligt användbar funktion.
-
och<cacheFromUrl> taggen låter dig ange en URL med en lista över en fjärrdataset filer från en fjärrfil lista.
- Oaggregerade datamängder i THREDDS, t.ex. https://data.nodc.noaa.gov/thredds/catalog/aquarius/nodc\\_binned\\_V3.0/monthly/ \[2020-10-21 Denna server är inte längre tillförlitligt tillgänglig.\]
- Oaggregerade datamängder iHyraxt.ex., https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/
- De flesta Apache-liknande kataloglistor, t.ex. https://www.ncei.noaa.gov/data/global-precipitation-climatology-project-gpcp-daily/
- S3 hink, t.ex.
https://noaa-goes17.s3.us-east-1.amazonaws.com/
Detta kan dock kräva ett AWS-konto och mer inställning. SeArbeta med S3 BucketsERDDAP™. Du behöver vanligtvis inte använda cache FromUrl med filer i S3-hinkarna om filerna är ASCII-filer (t.ex. .csv) för attERDDAP™kan effektivt läsa data från hinken direkt via en ström.
ERDDAP™kommer att kopiera eller cache dessa filer i datasetets<FilDir> katalog. Om du behöver stöd för en annan typ av fjärrfillista (Till exempel FTP) Skicka din begäran till Chris. John på noaa.gov.
- Standardvärdet för<cacheFromUrl> tag är null. Om du inte specificerar ett värde för<cacheFromUrl> taggen, kopiera/cache systemet kommer inte att användas för denna dataset.
- Om datasetets<FilRegex > Inställning är något annat än . \*,ERDDAP™Kommer bara att ladda ner filer som matchar filenRegex.
- Om datasetets<recursive> inställningen är sann och fjärrfilerna är i underkataloger,ERDDAP™kommer att se i fjärrstyrda underkataloger som matchar datasetets [<PathRegex >] (#pathregex) skapa samma katalogstruktur lokalt och placera lokala filer i samma underkataloger.
- I GenerateDatasets Xml, om du anger en<cacheFromUrl> värde, Generate Dataset Xml skapar lokalen<fileDir> katalog och kopiera 1 fjärrfil i den. GenerateDatasets Xml kommer sedan att genereradatasets.xmlchunk baserat på den provfilen (specificera prov Fil = ingenting) .
- Om datakällan är en fjärrkontrollERDDAP™AnvändEDDGridFrånErddapellerEDDTableFromErddapistället för<cacheFromUrl>. På så sätt, din lokalaERDDAP™verkar ha dataset men behöver inte lagra någon av data lokalt. Den enda anledningen att använda<cacheFromUrl> för att få data från en fjärrkontrollERDDAP™är när du har någon annan anledning till att du vill ha en lokal kopia av datafilerna. I så fall:
- Denna dataset kommer att försöka prenumerera på datasetet på fjärrkontrollenERDDAPså att ändringar i datamängden kommer att ringa denna datamängds flagga Url, orsakar denna lokala dataset att ladda om och ladda ner de ändrade fjärrfilerna. Således kommer den lokala datamängden att vara uppdaterad mycket snart efter ändringar görs till fjärrdatamängden.
- Du bör maila administratören av fjärrkontrollenERDDAP™att be omdatasets.xmlför fjärrdataset så att du kan göra datasetet i din lokalaERDDAP™ser ut som dataset i fjärrkontrollenERDDAP.
- Om datakällan är en fjärrkontrollERDDAP™Den lokala datamängden kommer att försöka prenumerera på fjärrdatamängden.
- Om prenumerationen lyckas, när fjärrkontrollenERDDAPreloads och har nya data, det kommer att kontakta flagURL för denna dataset, vilket gör det att ladda om och ladda ner de nya och/eller ändrade datafilerna.
- Om prenumerationen misslyckas (oavsett anledning) om du helt enkelt vill se till att den lokala datamängden är aktuell, kan du ställa in enflaggaför den lokala dataset, så det kommer att laddas om, så det kommer att kontrollera nya och/eller ändrade fjärrdatafiler.
- Om datakällan inte är en fjärrkontrollERDDAP: datamängden kommer att kontrollera för nya och/eller ändrade fjärrfiler när den laddas om. Normalt är detta kontrollerat av [<Reload EveryNMinutes (#reloadeveryn Minuter) . Men om du vet när det finns nya fjärrfiler kan du ställa in enflaggaför den lokala dataset, så det kommer att ladda om och kontrollera nya och/eller ändrade fjärrdatafiler. Om detta sker rutinmässigt vid en viss tid på dagen (t.ex. vid 07:00) Du kan göra ett cron jobb att användacurlför att kontakta flaggan Url för denna dataset, så det kommer att ladda om och kontrollera nya och/eller ändrade fjärrdatafiler.
-
och<cacheSizeGB> taggen anger storleken på den lokala cache. Du behöver förmodligen bara använda detta när du arbetar med molnlagringssystem somAmazon S3vilket är ett vanligt lagringssystem som ingår iAmazon Web Services (AWS) . Standarden är -1.
- Om värdet är<=0 (t.ex. standardvärdet på -1) ,
ERDDAP™kommer att ladda ner och underhålla en fullständig kopia av alla fjärrdatasetets filer i datasetets<FilDir>.
- Detta är den inställning som rekommenderas när det är möjligt.
- Varje gång datamängden laddas om, jämför den namnen, storlekarna och senasteModifierade tider av fjärrfilerna och de lokala filerna och hämtar alla fjärrfiler som är nya eller har ändrats.
- Om en fil som fanns på fjärrservern försvinner,ERDDAP™inte radera motsvarande lokala fil (om något var tillfälligt fel med fjärrservern,ERDDAP™kan ta bort några eller alla lokala filer!) .
- Med denna inställning kommer du vanligtvis att ställa in<updateEveryNMillis> till -1, eftersom datamängden är medveten om när den har kopierat nya datafiler på plats.
- Om värdet är >0,
ERDDAP™kommer att ladda ner filer från fjärrdatasetet efter behov till en lokal Cache (i datasetets<filDir>) med en tröskelstorlek på det angivna antalet GB.
- Cache måste vara tillräckligt stor för att hålla åtminstone flera datafiler.
- I allmänhet, ju större cache, desto bättre, eftersom nästa begärda datafil kommer att vara mer benägna att redan vara i cache.
- Cachning bör endast användas närERDDAP™körs i en cloud computing server (t.ex. ett AWS-beräkningsinstans) och fjärrfilerna i ett molnlagringssystem (t.ex. AWS S3) .
- När diskutrymmet som används av lokala filer överstiger cache SizeGB,ERDDAP™Snart (Kanske inte omedelbart) ta bort några av de cachade filerna (för närvarande, baserat på minsta nyligen använda (LRU) algoritm) tills diskutrymmet som används av de lokala filerna är<0,75\*cacheSizeGB (Det "mål") . Ja, det finns fall där LRU utför mycket dåligt – det finns ingen perfekt algoritm.
- ERDDAP™kommer aldrig att försöka ta bort en cachad fil somERDDAP™började användas under de senaste 10 sekunderna. Detta är ett ofullständigt system för att hantera cachesystemet och datafilläsarsystemet är bara löst integrerat. På grund av denna regel,ERDDAP™kanske inte kan ta bort tillräckligt med filer för att nå sitt mål, i vilket fall det kommer att skriva ut en VARNING till log.txt-filen, och systemet kommer att slösa mycket tid på att försöka beskära cache, och det är möjligt att storleken på filerna i cacheSizeGB. Om detta någonsin inträffar, använd en större cacheSizeGB-inställning för den datamängden.
- För närvarande,ERDDAP™Kontrollera aldrig om fjärrservern har en nyare version av en fil som finns i den lokala cache. Om du behöver den här funktionen, vänligen maila Chris. John på noaa.gov.
- Även om användningen av samma taggnamn kan innebära att kopieringssystemet och cachesystemet använder samma underliggande system, är det inte korrekt.
- Kopieringssystemet startar proaktivt uppgiftTråda uppgifter för att ladda ner nya och ändrade filer varje gång datamängden laddas om. Endast filer som faktiskt har kopierats till den lokala katalogen finns tillgängliga viaERDDAP™dataset.
- Cache-systemet får fjärrfillistan varje gång datamängden laddas om och låtsas att alla dessa filer är tillgängliga via denERDDAP™dataset. Intressant är att alla fjärrfiler även visas i datasetets /filer / webbsidor och är tillgängliga för nedladdning (Även om det kanske först efter en fördröjning medan filen först laddas ner från fjärrservern till den lokala cache.)
- Dataset som använder cacheSizeGB kan dra nytta av att använda ennThreadsange större än 1, eftersom detta gör det möjligt för dataset att ladda ner mer än 1 fjärrfil i taget.
- Om värdet är<=0 (t.ex. standardvärdet på -1) ,
ERDDAP™kommer att ladda ner och underhålla en fullständig kopia av alla fjärrdatasetets filer i datasetets<FilDir>.
-
och<cachePartialPathRegex>-taggen är en sällan använd tag som kan ange ett alternativ för datamängdens [<PathRegex >] (#pathregex) . Standarden är null.
- Använd endast detta om du kopierar hela datamängden via standarden<cacheSizeGB> värdet av -1. med<cacheSizeGB> värden av >1, detta kommer att ignoreras eftersom det är nonsensiskt.
- Se [dokumentationen för<PathRegex >] (#pathregex) vägledning om hur man bygger regex.
- Om detta anges kommer det att användas varje gång datamängden laddas om, förutom första gången en datamängd laddas om i början av en månad.
- Detta är användbart när fjärrdataset lagras i en labyrint av underkataloger och när den stora majoriteten av dessa filer sällan, om någonsin, ändras. (b)<Cough > NASA<Cough >) Du kan till exempel ange en<cachePartialPathRegex> som bara matchar det aktuella året eller den aktuella månaden. Dessa regex är mycket knepiga att specificera, eftersom alla partiella och fullständiga namn måste matcha de.<cachePartialPathRegex > och eftersom<cachePartialPathRegex> måste arbeta med de avlägsna webbadresserna och de lokala katalogerna. Ett verkligt livsexempel är:
-
<cacheFromUrl>https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/</cacheFromUrl>
\\>!-- \\[2020-10-21 This server is no longer reliably available.\\] For most types of remote directories, omit the filename (e.g., contents.html for Hyrax). -->
<fileDir>/u00/satellite/MUR41/</fileDir>
<fileNameRegex>\\*\\.nc</fileNameRegex>
<recursive>true</recursive>
<pathRegex>.\\*</pathRegex>
<cachePartialPathRegex>.\\*/v4\\.1/(|2018/(|01./))</cachePartialPathRegex>
Prov URL ovan har filer i underkataloger baserat på år (t.ex. 2018) och årets dag (t.ex. 001, 002, ..., 365 eller 366) . Notera att<cachePartialPathRegex Börjar med . **, har sedan en specifik underkatalog som är vanlig för fjärrURL:erna och de lokala katalogerna, t.ex. /v4\.1/ Sedan har en serie av inkapslade grupper där det första alternativet inte är något Det andra alternativet är ett specifikt värde.
Exemplet ovan kommer endast att matcha kataloger under de andra 10 dagarna av 2018, t.ex.
https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/2018/010/ \[2020-10-21 Denna server är inte längre tillförlitligt tillgänglig.\]
Dag 011, 012, 019.
(Se dettaregex dokumentationochRegex tutorial.)
Om du behöver hjälp med att skapa<cachePartialPathRegex>, vänligen maila<cacheFromUrl> till Chris. John på noaa.gov.
- Ett vanligt tillvägagångssätt: Om du vill använda<cachePartialPathRegex>, använd det inte ursprungligen, eftersom du villERDDAP™för att ladda ner alla filer ursprungligen. EfterERDDAP™har laddat ner alla filer, lägg till det i datamängdens bit avdatasets.xml.
tusentals filer
Om din dataset har tusentals filer,ERDDAP™kan vara långsamt att svara på förfrågningar om data från den datamängden. Det finns två frågor här:
- Antalet filer per katalog. Internt,ERDDAP™fungerar med samma hastighet oavsett om n-filer finns i en katalog eller sprids i flera kataloger. Men det finns ett problem: Ju fler filer i en viss katalog, desto långsammare är operativsystemet att returnera listan över filer i katalogen (per fil) attERDDAP. Svarstiden kan vara O (n log n) . Det är svårt att säga hur många filer i en katalog är för många, men 10 000 är förmodligen för många. Så om din inställning genererar massor av filer kan en rekommendation här vara: lägg filerna i logiskt organiserade underkataloger (t.ex. station eller station/år) .
En annan anledning att använda underkataloger: om en användare vill användaERDDAP"S"files"system för att hitta namnet på den äldsta filen för station X, det är snabbare och effektivare om filerna är i station / år underkataloger, eftersom mycket mindre information måste överföras.
- Det totala antalet filer.
för tabular dataset,ERDDAP™Håller koll på utbudet av värden för varje variabel i varje fil. När en användare gör en begäran,ERDDAP™måste läsa alla data från alla filer som kan ha data som matchar användarens begäran. Om användaren begär data från en begränsad tid (En dag eller en månad) SedanERDDAP™behöver inte öppna för många filer i din dataset. Men det finns extrema fall där nästan varje fil kan ha matchande data. (t.ex. när vattenTemperatur=13.2C) . Eftersom det tarERDDAP™Lite tid (delvis söktiden på HDD, dels tid att läsa filens rubrik) bara för att öppna en viss fil (och mer om det finns massor av filer i katalogen) Det finns en betydande tidsstraff om det totala antalet filer somERDDAP™måste öppna är mycket stort. Även öppna 1000 filer tar betydande tid. Så det finns fördelar med att regelbundet konsolidera de dagliga filerna till större bitar (t.ex. 1 station för 1 år) . Jag förstår att du kanske inte vill göra detta av olika skäl, men det leder till mycket snabbare svar. I extrema fall (Jag hanterar till exempel en GTSPP dataset som har ~ 35 miljoner källfiler) att betjäna data från ett stort antal källfiler är opraktiskt eftersomERDDAP"Svaret på enkla frågor kan ta timmar och använda massor av minne. Genom att konsolidera källfiler till ett mindre antal (För GTSPP, jag har 720 nu, 2 per månad) ,ERDDAP™kan svara rimligt snabbt. SeMiljoner filer
Solid State Drives är bra! Det snabbaste, enklaste och billigaste sättet att hjälpaERDDAP™deal med ett stort antal (Små små) filer är att använda en solid state drive. SeSolid State Drives är bra!
Miljoner filer
-
Vissa datamängder har miljontals källfiler.ERDDAP™kan hantera detta, men med blandade resultat.
- För förfrågningar som bara involverar variabler som anges i [<subsetVariables>] (#subsetvariables) ,ERDDAP™har all nödvändig information som redan har extraherats från datafilerna och lagrats i en fil, så det kan svara mycket, mycket snabbt.
- För andra förfrågningar,ERDDAP™Kan skanna datasetetscached file informationoch räkna ut att endast några av filerna kan ha data som är relevanta för begäran och därmed svara snabbt.
- Men för andra förfrågningar (vattenTemperatur=18 grad\_C) om någon fil kan ha relevanta uppgifter,ERDDAP™måste öppna ett stort antal filer för att se om var och en av filerna har några uppgifter som är relevanta för begäran. Filerna öppnas sekventiellt. I alla operativsystem och alla filsystem (annat än solid state drives) Detta tar lång tid (SåERDDAP™svarar långsamt) och verkligen knyter upp filsystemet (SåERDDAP™svarar långsamt på andra förfrågningar) .
Lyckligtvis finns en lösning.
- Ställ in datamängden på en icke-offentligERDDAP™ (Din dator?) .
- Skapa och köra ett manus som begär en serie av.ncCF-filer, var och en med en stor del av datamängden, vanligtvis en tidsperiod (Till exempel alla data för en viss månad) . Välj tidsperioden så att alla de resulterande filerna är mindre än 2 GB (Men förhoppningsvis större än 1 GB) . Om datamängden har nästan realtidsdata, kör manuset för att regenerera filen för den aktuella tidsperioden (t.ex. denna månad) ofta (Var tionde minut? Varje timme?) . Begäran attERDDAP™För.ncCF-filer skapar enNetCDFv3.ncfil som använderCF Diskret sampling geometrier (DSG) sammanhängande Ragged Array datastrukturer).
- Ställ in enEDDTableFromNcCFFilesDataset på din publikERDDAP™som får data från.nc (CF) filer.ERDDAP™kan extrahera data från dessa filer mycket snabbt. Och eftersom det nu finns dussintals eller hundratals (istället för miljoner) filer, även omERDDAP™måste öppna alla filer, det kan göra det snabbt.
Ja, detta system tar lite tid och ansträngning att ställa in, men det fungerar mycket, mycket bra. De flesta dataförfrågningar kan hanteras 100 gånger snabbare än tidigare. \[Bob visste att det var en möjlighet, men det var Kevin O'Brien som först gjorde det och visade att det fungerar bra. Nu, Bob använder detta för GTSPP dataset som har cirka 18 miljoner källfiler och somERDDAP™Nu tjänar vi via ca 500.nc (CF) filer.\]
Solid State Drives är bra! Det snabbaste, enklaste och billigaste sättet att hjälpaERDDAP™deal med ett stort antal (Små små) filer är att använda en solid state drive. SeSolid State Drives är bra!
Stora filer
- En enda stor datafil (särskilt stora ASCII datafiler) kan orsaka en OutOfMemoryError. Om detta är problemet, bör det vara uppenbart eftersomERDDAP™kommer att misslyckas med att ladda datasetet. Lösningen, om möjligt, är att dela filen i flera filer. Helst kan du dela filen i logiska bitar. Om filen till exempel har 20 månaders värde av data, dela den i 20 filer, var och en med 1 månads värde av data. Men det finns fördelar även om huvudfilen delas upp godtyckligt. Detta tillvägagångssätt har flera fördelar: a) Detta kommer att minska det minne som behövs för att läsa datafilerna till 1/20: e, eftersom endast en fil läses i taget. b) b) Ofta,ERDDAP™kan hantera förfrågningar mycket snabbare eftersom det bara måste titta i en eller några filer för att hitta data för en viss begäran. c) c) Om datainsamling pågår kan de befintliga 20 filerna förbli oförändrade, och du behöver bara ändra en, liten, ny fil för att lägga till nästa månads värde av data till datamängden.
FTP Problem / Råd
- Om du FTP nya datafiler tillERDDAP™server medanERDDAP™Igång, det finns chansen attERDDAP™kommer att ladda om datamängden under FTP-processen. Det händer oftare än du kanske tror! Om det händer visas filen vara giltig (Den har ett giltigt namn) Men filen är inte giltig. OmERDDAP™försöker läsa data från den ogiltiga filen, det resulterande felet kommer att leda till att filen läggs till i tabellen med ogiltiga filer. Detta är inte bra. För att undvika detta problem, använd ett tillfälligt filnamn när FTP-filen till exempel ABC2005.nc\_TEMP . Sedan filenNameRegex test (Se nedan) indikerar att detta inte är en relevant fil. Efter FTP-processen är klar, byt namn på filen till rätt namn. Reneamingprocessen kommer att göra att filen blir relevant på ett ögonblick.
Filnamn Extracts
\[Denna funktion är DEPRECATED. Använd gärna\*\*FileName pseudosourceNameI stället.\]
EDDTableFromFiles har ett system för att extrahera en String från varje filnamn och använda det för att göra en pseudo-datavariabel. För närvarande finns det inget system för att tolka dessa strängar som datum/tider. Det finns flera XML-taggar för att ställa in detta system. Om du inte behöver en del eller hela detta system, bara inte ange dessa taggar eller använda "" värden.
- PreExtractRegex är enregelbundet uttryck (Tutorial) används för att identifiera text som ska tas bort från filnamnets start. Avlägsnandet sker endast om regexen matchas. Detta börjar vanligtvis med "^" för att matcha början av filnamnet.
- Inlägg ExtractRegex är ett vanligt uttryck som används för att identifiera text som ska tas bort från slutet av filnamnet. Avlägsnandet sker endast om regexen matchas. Detta slutar vanligtvis med "$" för att matcha slutet av filnamnet.
- ExtractRegex Om det är aktuellt används detta vanliga uttryck efter preExtractRegex och postExtractRegex för att identifiera en sträng som ska extraheras från filnamnet. (till exempel,stationID) . Om regex inte matchas används hela filnamnet (minus preExtract och post Extrakt) . Använd ".\*" för att matcha hela filnamnet som lämnas efter preExtractRegex och postExtractRegex.
- Kolumn NameForExtract är data kolumn källnamn för extraherade strängar. EttdataVariablemed dettasourceNamemåste finnas idataVariables lista (med någon datatyp, men vanligtvis String) .
Till exempel, om en dataset har filer med namn som XYZAble.ncXYZBaker.ncXYZCharlie.nc... och du vill skapa en ny variabel (stationID) När varje fil läses som kommer att ha station ID-värden (Able, Baker, Charlie ......) Utdragna från filnamnen kan du använda dessa taggar:
- <PreExtractRegex>^XYZ</preExtractRegex> Den första ^ är en vanlig uttryck speciell karaktär som tvingarERDDAP™att leta efter XYZ i början av filnamnet. Detta orsakar XYZ, om det finns i början av filnamnet, att tas bort. (filnamnet XYZAble.ncBlir Able.nc) .
- <PostExtractRegex>.nc$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$</postExtractRegex> $ i slutet är en vanlig uttryck speciell karaktär som tvingarERDDAP™Att leta efter.nci slutet av filnamnet. Eftersom . är ett vanligt uttryck specialkaraktär (som matchar någon karaktär) Den är kodad som \. här här här (Eftersom 2E är hexadecimalt teckennummer under en period) . Detta orsakar.ncom det finns i slutet av filnamnet, för att tas bort (till exempel det partiella filnamnet Able.ncBlir Able) .
- <extraktRegex>.*</extraheraRegex> Regelbundet uttryck matchar alla återstående karaktärer (till exempel det partiella filnamnet Able blir extraktet för den första filen) .
- <kolumnNameForExtract >stationID</ColumnNameForExtract> Detta berättarERDDAP™skapa en ny källkolumn som kallasstationIDNär du läser varje fil. Varje rad av data för en viss fil kommer att ha texten extraherad från filnamnet (till exempel, Able) som värdet istationIDKolumn.
I de flesta fall finns det många värden för dessa extrakt taggar som kommer att ge samma resultat - vanliga uttryck är mycket flexibla. Men i några fall finns det bara ett sätt att få önskade resultat.
PseudosourceNames
Varje variabel i varje dataset iERDDAP™och har en<sourceName>] (#Sourname) som anger källans namn för variabeln. EDDTableFromFiles stöder några pseudosourceNames som extraherar ett värde från någon annan plats (t.ex. filens namn eller värdet av ett globalt attribut) och främja det värdet som en kolumn med konstanta värden för den mängd data (t.ex. tabellen över filens data) . För dessa variabler måste du ange variabelns datatyp via [<DataType>] (#datatype) tag. Om den extraherade informationen är en dateTime-sträng anger du formatet för datumTime-strängen ienheter attribut. PseudosourceNamealternativ är:
Global:sourceNames
En global metadataattribut i varje källdatafil kan främjas som en kolumn av data. Om en variabel<sourceName> har formatet
<sourceName>global:*attributeName*</sourceName>
När då närERDDAP™läser data från en fil,ERDDAP™kommer att leta efter ett globalt attribut av det namnet (Till exempel PI) skapa en kolumn fylld med attributets värde. Detta är användbart när attributet har olika värden i olika källfiler, eftersom användarna annars bara skulle se en av dessa värden för hela datamängden. Till exempel,
<sourceName>global:PI</sourceName>
När du marknadsför ett attribut för att vara data,ERDDAP™tar bort motsvarande attribut. Detta är lämpligt eftersom värdet är antagligen annorlunda i varje fil, medan i den aggregerade datamängden.ERDDAP™Det kommer bara att ha ett värde. Om du vill kan du lägga till ett nytt värde för attributet för hela datamängden genom att lägga till<Att namn=" attribut Namnnamn ">>>> Ny ny Värde </att> till datasetets globala<addAttributes>] (#addattributes) . För globala attribut somERDDAP™kräver till exempel institution, du måste lägga till ett nytt värde för attributet.
Variabel:sourceNames
En variabels metadataattribut i varje fil kan marknadsföras för att vara en kolumn av data. Om en variabel<sourceNameHar formatet
<sourceName>variable:*variableName*:*attributeName*<sourceName>
När då närERDDAP™läser data från en fil,ERDDAP™kommer att leta efter det angivna attributet (Till exempel ID) av den angivna variabeln (till exempel instrument) skapa en kolumn fylld med attributets värde. Föräldervariabeln (till exempel instrument) behöver inte vara en avdataVariables ingår i datasetets definition iERDDAP. Till exempel,
<sourceName>variable:instrument:ID</sourceName>
Detta är användbart när attributet har olika värden i olika källfiler, eftersom användarna annars bara skulle se en av dessa värden för hela datamängden.
När du marknadsför ett attribut för att vara data,ERDDAP™tar bort motsvarande attribut. Detta är lämpligt eftersom värdet är antagligen annorlunda i varje fil, medan i den aggregerade datamängden.ERDDAP™Det kommer bara att ha ett värde. Om du vill kan du lägga till ett nytt värde för attributet för hela datamängden genom att lägga till<Att namn=" attribut Namnnamn ">>>> Ny ny Värde <till variabelns<addAttributes>] (#addattributes) . För attribut somERDDAP™kräver till exempelioos\_category (beroende på din inställning) Du måste lägga till ett nytt värde för attributet.
FilnamnsourceNames
Du kan extrahera en del av en fils filnamn och marknadsföra det för att vara en kolumn med data. Formatet för denna pseudo [<sourceName>] (#Sourname) är att
<sourceName>\\*\\*\\*fileName,*regex*,*captureGroupNumber*</sourceName>
Till exempel,
<sourceName>\\*\\*\\*fileName,A(\\d{12})\\.slcpV1.nc,1</sourceName>
När EDDTableFromFiles läser data från en fil, kommer det att se till att filnamnet (Till exempel A201807041442.slcpV1.nc) matchar det angivna regelbundna uttrycket ("Regex") och extrahera den angivna (I detta fall, den första) fånga grupp (som är en del omgiven av parentes) Till exempel "201807041442". (Se dettaregex dokumentationochRegex tutorial.) Regex kan anges som en sträng med eller utan omgivande citat. Om regex anges som en sträng med omgivande citat, måste strängen varaJSON-stil sträng (med speciella karaktärer som rymts med tecken) . Fångstgruppsnumret är vanligtvis 1 (Den första fångstgruppen) men kan vara något nummer.
VägensourceNames
Du kan extrahera en del av en fils fulla väg Namnnamn (/ kataloger/fileName.ext) och främja det som en kolumn av data. Formatet för denna pseudo [<sourceName>] (#Sourname) är att
<sourceName>\\*\\*\\*pathName,*regex*,*captureGroupNumber*<sourceName>
Till exempel,
<sourceName>\\*\\*\\*pathName,/data/myDatasetID/(\\[A-Z0-9\\]\\*)/B(\\d{12}).nc,1</sourceName>
När EDDTableFromFiles läser data från en fil, kommer det att se till att hela PathName (Till exempel, /data/myDatasetID/BAY17/B201807041442.nc. För detta test kommer katalogens separatorer alltid att vara'/'Aldrig "" ") matchar det angivna regelbundna uttrycket ("Regex") och extrahera den angivna (I detta fall, den första) fånga grupp (som är en del omgiven av parentes) Till exempel "BAY17". (Se dettaregex dokumentationochRegex tutorial.) Regex kan anges som en sträng med eller utan omgivande citat. Om regex anges som en sträng med omgivande citat, måste strängen vara enJSON-stil sträng (med speciella karaktärer som rymts med tecken) . Fångstgruppsnumret är vanligtvis 1 (Den första fångstgruppen) men kan vara något nummer.
"0 filer" Felmeddelande
- Om du körGenerateDatasetsXmlellerDasDdseller om du försöker ladda en EDDTableFrån... Filer dataset iERDDAP™, och du får ett "0 filer" felmeddelande som indikerar attERDDAP™Hittade 0 matchande filer i katalogen (När du tror att det finns matchande filer i den katalogen) Från:
- Kontrollera att filerna verkligen finns i den katalogen.
- Kontrollera stavningen av katalogen namn.
- Kolla filenNameRegex. Det är verkligen lätt att göra misstag med regex. För teständamål, prova regex . * som ska matcha alla filnamn. (Se dettaregex dokumentationochRegex tutorial.)
- Kontrollera att användaren som kör programmet (t.ex. användar=tomcat (??) För Tomcat/ERDDAP) har "läst" tillstånd för dessa filer.
- I vissa operativsystem (Till exempel SELinux) Och beroende på systeminställningar måste användaren som körde programmet ha "läs" tillstånd för hela katalogkedjan som leder till katalogen som har filerna.
Standardisera Vad är vad
- När någon underklass av EDDTableFromFiles aggregerar en uppsättning källfiler, för en viss variabel, har alla källfiler MUST identiska attributvärden för flera attribut:scale\_factor,add\_offset\_Unsigned,missing\_value, \_FillValue och enheter). Tänk på det: om en fil har windSpeed-enheter = knots och en annan har windSpeed-enheter = m / s, bör datavärdena från de två filerna inte inkluderas i samma aggregerade dataset. Så när EDDTableFromFiles först skapar datamängden läser den attributvärdena från en fil, avvisar sedan alla filer som har olika värden för dessa viktiga attribut. För de flesta samlingar av filer är detta inte ett problem eftersom attributen för alla variabler är konsekventa. Men för andra samlingar av filer kan detta leda till 1%, 10%, 50%, 90% eller till och med 99% av filerna som avvisas som "dåliga" filer. Det är problem.
EDDTableFrån filer har ett system för att hantera detta problem: standardisera Vad. Standardisera Vilken inställning berättar EDDTableFromFiles för att standardisera filerna så snart det läser dem, innan EDDTableFromFiles tittar på attributen för att se om de är konsekventa.
Flipsidan är: om datamängden inte har detta problem, använd inte standardisering Vad. Standardisera Vad har vissa potentiella risker (diskuteras nedan) och ineffektivitet. Så om du inte behöver funktionerna i standardisering Vad, det finns inget behov av att möta de potentiella riskerna och ineffektiviteten. Den största ineffektiviteten är: När olika standardiserar Vilka alternativ används av en datamängd, det innebär att källfilerna lagrar data på väsentligt olika sätt (t.ex. med olikascale\_factorochadd\_offset, eller med tidssträngar med olika format) . Således, för en viss begränsning i en användarbegäran, finns det inget sätt förERDDAP™för att göra en enda källnivåbegränsning som kan tillämpas på alla källfiler. SåERDDAP™kan endast tillämpa de drabbade begränsningarna på en högre nivå. SåERDDAP™måste läsa data från fler filer innan du tillämpar de högre begränsningarna på destinationsnivå. Så begär till datamängder som använder standardisera Vad tar längre tid att bearbetas.
För att använda detta system måste du ange
<standardizeWhat>*standardizeWhat*</standardizeWhat>
i dendatasets.xmlFör EDDTableFrån... Filer datasetInom<dataset> tagga).
och Standardisera Vad är vad värde specificerar vilka ändringar EDDTableFromFiles bör försöka tillämpa. Förändringarna är summan av någon kombination av:
- Unpack
Detta gör många vanliga och säkra operationer för att standardisera numeriska kolumner i filerna:
- Omscale\_factoroch/elleradd\_offsetattribut är närvarande, ta bort dem och tillämpa dem för att packa upp datavärdena.
- Förpackade attribut (e.g. faktisk \_min, faktisk \_max,actual\_range,data\_min,data\_maxdata_range,valid\_min,valid\_max,valid\_range) Om så är fallet, om variabeln var packad, och om attributvärdena var packade (Detta är knepigt, men rimligt tillförlitligt) .
- Om \_FillValue och/ellermissing\_valueär närvarande, konvertera dessa datavärden tillERDDAP"standard" saknade värden: MAX\_VALUE för heltalstyper (t.ex. 127 för byte, 32,767 för kort och 2,147,483,647 för ints, 9223372036854775807 för longs) och NaN för dubblar och flyter.
- Ta bort det gamla \_FillValue och/ellermissing\_valueattribut (Om någon) och ersätta dem med bara \_FillValue=\[ochERDDAP™Standard saknas värde\].
- Standardisera numeriska tider Om en numerisk kolumn har CF-stil numeriska tid enheter (" TimeUnits sedan dess bastid t.ex. "dagar sedan 1900-01-01") Detta konverterar datumet Tidsvärden till"seconds since 1970-01-01T00:00:00Z"värden och ändrar enheterna attribut för att ange det. Om detta väljs och det finns en chans att denna variabel harscale\_factorelleradd\_offset# 1 måste väljas också.
- Applicera Stringmissing\_value
Om en strängkolumn har \_FillValue och/ellermissing\_valueattribut, detta konverterar dessa värden till "" och tar bort attributen. - Hitta numeriskamissing\_value
Om en numerisk kolumn inte har \_FillValuemissing\_valueattribut, detta försöker identifiera en odefinierad numeriskmissing\_value (t.ex. -999, 9999, 1e37f) och omvandla instanser av det till "standard" värden (MAX\_VALUE för heltalstyper och NAN för dubblar och flyter) . Detta alternativ har en risk: Om det största eller minsta giltiga datavärdet ser ut som ett saknat värde (t.ex. 999) Dessa giltiga datavärden konverteras sedan till saknade värden (t.ex. NaN) . - Ändra String "N / A" till "" För varje strängkolumn konverterar du flera strängar som vanligtvis används för att ange ett saknat strängvärde till ". För närvarande letar detta efter ".", "...", "", "?", "??", "N / A", "NA", "ingen", "inte tillämplig", "null", "okänt", "ospecificerat". Strängsökningen är case-insensitive och tillämpas efter strängarna är trim'd. "nd" och "andra" är specifikt inte på listan. Detta alternativ har en risk: Strängar som du anser vara giltiga värden kan omvandlas till "".
- Standardisera till String ISO 8601 DateTimes För varje String-kolumn, försök att konvertera icke-rena-numeriska String-datumTimes (t.ex. "Jan 2, 2018") till ISO 8601 String dateTimes ("2018-01-02") . Note att alla datavärden för kolumnen måste använda samma format, annars kommer detta alternativ inte att göra några ändringar i en viss kolumn. Detta alternativ har en risk: Om det finns en kolumn med strängvärden som bara råkar se ut som ett vanligt datum Tidsformat konverteras de till ISO 8601 String dateTimes.
- Standardisera kompakta datum till ISO 8601 datum För varje String eller integer-typ kolumn, försök att konvertera rent-numeriska String datumTimes (t.ex. "20180102") till ISO 8601 String dateTimes ("2018-01-02") . Note att alla datavärden för kolumnen måste använda samma format, annars kommer detta alternativ inte att göra några ändringar i en viss kolumn. Detta alternativ har en risk: Om det finns en kolumn med värden som inte är kompakta datum Tider men ser ut som kompakt datumTimes, de kommer att konverteras till ISO 8601 String dateTimes.
- Standardisera enheter Detta försöker standardisera enheterna sträng för varje variabel. Till exempel "mätare per sekund", "meter / sekund","m.s^-1","m s-1""m.s-1" kommer alla att konverteras till "m.s-1". Detta ändrar inte datavärdena. Detta fungerar bra för giltigtUDUNITSenheter strängar, men kan ha problem med ogiltiga eller komplexa strängar. Du kan hantera problem genom att ange specifika mellan par i<StandardizeUdunits> in iERDDAP"S \[Tomcat\]/webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml-fil. Skicka alla ändringar du gör till Chris. John på noaa.gov så att de kan införlivas i standardmeddelandena.xml. Detta alternativ har en risk: Detta kan mangla några komplexa eller ogiltiga enheter, men du kan använda den arbetsrunda som beskrivs ovan för att kringgå problem om de uppstår.
Standardvärdet för standardisering Vad är 0, vilket inte gör någonting.
Om/när du ändrar värdet av standardisering Vad nästa gång datamängden laddas om,ERDDAP™kommer att läsa alla datafiler för datamängden för att bygga om mini-databasen med information om varje fil. Om datamängden har massor av filer, kommer detta att ta lång tid.
Anteckningar:
- En knepig sak är - Standardisera Vilken inställning används för alla kolumner i källfilen. Så, till exempel, med #2048 kan framgångsrikt konvertera en kolumn med kompakt String dateTimes till ISO 8601 String dateTimes, men det kan också felaktigt konvertera en kolumn med Strings som bara råkar se ut som kompakt datumTimes.
- datasets.xmloch GenerateDatasets Xml -
Det är särskilt svårt att få inställningarna rätt idatasets.xmlFör att göra din dataset fungerar som du vill att den ska. Det bästa sättet (som alltid) är:
- AnvändningGenerateDatasetsXmloch specificera värdet av standardisera Vad du vill använda.
- AnvändningDasDdssäkerställa att datamängden laddas korrekt och återspeglar standardiseringen Vilken inställning som du angav.
- Testa datamängden för hand när den är iERDDAP™säkerställa att de berörda variablerna fungerar som förväntat.
- Risker - Alternativ #256 och högre är mer riskfyllda, det vill säga det finns en större chans attERDDAP™kommer att göra en förändring som inte bör göras. Exempel #2048 kan av misstag konvertera en variabel med station ID-strängar som alla bara råkar se ISO 8601 "kompakt" datum (t.ex. 20180102) i ISO 8601"extended"Datum ("2018-01-02") .
- Långsamt efter en för ändring - Eftersom värdet av standardisering Vad ändrar datavärdena som EDDTableFromFiles ser för varje datafil, om du ändrar standardiseringen Vilken inställning kommer EDDTableFromFiles att kasta bort all cachad information om varje fil (som inkluderar min och max för varje datavariabel i varje fil) och läs om varje datafil. Om en dataset har ett stort antal filer, kan detta vara mycket tidskrävande, så det tar lång tid för dataset att ladda om första gången.ERDDAP™laddar den efter att du gjort förändringen.
- Heuristik - Alternativ #256 och ovan använder heuristik för att göra ändringarna. Om du stöter på en situation där heuristiken fattar ett dåligt beslut, vänligen maila en beskrivning av problemet till Chris. John på noaa. Gov så att vi kan förbättra heuristiken.
- Alternativ - Om en av standardiseringVilka alternativ inte löser ett problem för en viss datamängd, kan du kanske lösa problemet genom att göra en.ncml filParallellt med varje datafil och definiera ändringar i filerna så att filerna är konsekventa. Berätta sedan EDDTableFrån... Filer dataset för att aggregera.ncml filer.
Eller användaNCOatt faktiskt göra ändringar i filerna så att filerna är konsekventa.
Separata kolumner för år, månad, datum, timme, minut, andra
Det är ganska vanligt att tabelldatafiler har separata kolumner för år, månad, datum, timme, minut, andra. FöreERDDAP™v2.10, den enda lösningen var att redigera datafilen för att kombinera dessa kolumner till en enhetlig tidskolumn. MedERDDAP ™2.10+ kan du använda [Och [Gud]<sourceName>==> Uttryck <sourceName>] (#Sourname) Att berättaERDDAP™hur man kombinerar källkolumnerna för att göra en enhetlig tidskolumn, så du behöver inte längre redigera källfilen.
<skipHeaderToRegex & gt;
- [Och [Gud]<skipHeaderToRegex (#skipheadertoregex) -----
Optional. (För EDDTableFromAsciiFiles och EDDTableFromColumnarAsciiFiles dataset endast.)
När EDDTableFromAsciiFiles läser en datafil, kommer den att ignorera alla rader upp till och med den linje som matchar detta vanliga uttryck. Standarden är "", som inte använder det här alternativet. Ett exempel är
<skipHeaderToRegex>\\\*\\\*\\\* END OF HEADER.\\*<skipHeaderToRegex>
som ignorerar alla linjer fram till och med en linje som börjar med "\*\*End Of Header.
När du använder den här taggen,<kolumnNamesRow> och<förstaDataRow> agera som om rubriken har tagits bort innan filen läses. Till exempel skulle du använda kolumnNamesRow = 0 om kolumnnamnen är på raden direkt efter rubriken.
Om du vill använda generera Dataset Xml med en dataset som behöver denna tagg:
- Gör en ny, tillfällig provfil genom att kopiera en befintlig fil och ta bort rubriken.
- Kör generera Dataset Xml och ange den provfilen.
- Tillsätt manuellt<skipHeaderToRegex> tag tilldatasets.xmlchunk.
- Ta bort den tillfälliga, provfilen.
- Använd dataset iERDDAP.
<skipLinesRegex & gt;
Optional. (För EDDTableFromAsciiFiles och EDDTableFromColumnarAsciiFiles dataset endast.)
När EDDTableFromAsciiFiles läser en datafil, kommer den att ignorera alla rader som matchar detta vanliga uttryck. Standarden är "", som inte använder det här alternativet. Ett exempel är
<skipLinesRegex>#.\\*<skipLinesRegex>
som ignorerar alla linjer som börjar med "#".
När du använder den här taggen,<kolumnNamesRow> och<förstaDataRow> agera som om alla matchningslinjer hade tagits bort innan filen läses. Till exempel skulle du använda kolumnNamesRow = 0 även om det finns flera rader som börjar med till exempel "#" i början av filen.
EDDTableFromFiles skelett XML
<dataset type="EDDTableFrom...Files" datasetID\="..." active\="..." >
<nDimensions>...</nDimensions> <!-- This was used prior to ERDDAP™
version 1.30, but is now ignored. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
EDDTableFromFiles subclasses, this uses Java's WatchDirectory system
to notice new/deleted/changed files quickly and efficiently. -->
<standardizeWhat>...</standardizeWhat> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<specialMode>mode</specialMode> <-- This rarely-used, OPTIONAL tag
can be used with EDDTableFromThreddsFiles to specify that special,
hard-coded rules should be used to determine which files should
be downloaded from the server. Currently, the only valid mode
is SAMOS which is used with datasets from
https://tds.coaps.fsu.edu/thredds/catalog/samos to download only the
files with the last version number. -->
<sourceUrl>...</sourceUrl> <-- For subclasses like
EDDTableFromHyraxFiles and EDDTableFromThreddsFiles, this is where
you specify the base URL for the files on the remote server.
For subclasses that get data from local files, ERDDAP™ doesn't use
this information to get the data, but does display the
information to users. So I usually use "(local files)". -->
<fileDir>...</fileDir> <-- The directory (absolute) with the data
files. -->
<recursive>true|false</recursive> <!-- 0 or 1. Indicates if
subdirectories of fileDir have data files, too. -->
<pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
match the pathRegex (default=".\") will be accepted. -->
<fileNameRegex>...</fileNameRegex> <-- 0 or 1. A regular expression
(tutorial) describing valid data file names, for example,
".\\.nc" for all .nc files. -->
<accessibleViaFiles>true|false(default)</accessibleViaFiles>
<!-- 0 or 1 -->
<metadataFrom>...</metadataFrom> <-- The file to get metadata
from ("first" or "last" (the default) based on file's
lastModifiedTime). -->
<charset>...</charset>
<!-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
only) This OPTIONAL tag specifies the character set (case
sensitive!) of the source files, for example, ISO-8859-1
(the default) and UTF-8. -->
<skipHeaderToRegex>...</skipHeaderToRegex>
<skipLinesRegex>...</skipLinesRegex>
<columnNamesRow>...</columnNamesRow> <-- (For EDDTableFromAsciiFiles
only) This specifies the number of the row with the column
names in the files. (The first row of the file is "1".
Default = 1.) If you specify 0, ERDDAP™ will not look for
column names and will assign names: Column#1, Column#2, ... -->
<firstDataRow>...</firstDataRow>
<-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
only) This specifies the number of the first row with data in the
files. (The first row of the file is "1". Default = 2.) -->
<dimensionsCSV>...</dimensionsCSV> <-- (For EDDTableFromNcFiles
and EDDTableFromMultidimNcFiles only) This is a comma-separated
list of dimension fullNames. If specified, ERDDAP™ will only read
variables in the source files which use some or all of these
dimensions, plus all of the scalar variables. If a dimension
is in a group, you must specify its fullName,
e.g., "groupName/dimensionName". -->
<-- The next four tags are DEPRECATED. For more information, see
File Name Extracts. -->
<preExtractRegex>...</preExtractRegex>
<postExtractRegex>...</postExtractRegex>
<extractRegex>...</extractRegex>
<columnNameForExtract>...</columnNameForExtract>
<sortedColumnSourceName>...</sortedColumnSourceName>
<-- The sourceName of the numeric column that the data files are
usually already sorted by within each file, for example, "time".
Don't specify this or use an empty string if no variable is
suitable. It is ok if not all files are sorted by this column.
If present, this can greatly speed up some data requests.
For EDDTableFromHyraxFiles, EDDTableFromNcFiles and
EDDTableFromThreddsFiles, this must be the leftmost (first) axis variable.
EDDTableFromMultidimNcFiles ignores this because it has a better
system. -->
<sortFilesBySourceNames>...</sortFilesBySourceNames>
<-- This is a space-separated list of sourceNames
which specifies how the internal list of files should be sorted
(in ascending order), for example "id time".
It is the minimum value of the specified columns in each file
that is used for sorting.
When a data request is filled, data is obtained from the files
in this order. Thus it determines the overall order of the data
in the response. If you specify more than one column name, the
second name is used if there is a tie for the first column; the
third is used if there is a tie for the first and second
columns; ... This is OPTIONAL (the default is
fileDir+fileName order). -->
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or
false (the default)) -->
<cacheFromUrl>...</cacheFromUrl> <!-- 0 or 1 -->
<cacheSizeGB>...</cacheSizeGB> <!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
<-- For EDDTableFromHyraxFiles, EDDTableFromMultidimNcFiles,
EDDTableFromNcFiles, EDDTableFromNccsvFiles, and
EDDTableFromThreddsFiles, the source's axis variables (for
example, time) needn't be first or in any specific order. -->
</dataset>
EDDTableFromAsciiService
EDDTableFromAsciiService är i huvudsak en skärmskrapa. Den är avsedd att hantera datakällor som har en enkel webbtjänst för att begära data (ofta ett HTML-formulär på en webbsida) och som kan returnera data i vissa strukturerade ASCII-format (Exempelvis ett kommaseparerat värde eller kolumn ASCII-textformat, ofta med annan information före och/eller efter data) .
EDDTableFromAsciiService är superklassen av alla EDDTableFromAsciiService... klasser. Du kan inte använda EDDTableFromAsciiService direkt. Använd istället en underklass av EDDTableFromAsciiService för att hantera specifika typer av tjänster:
- EDDTableFromAsciiServiceNOSFår data frånNOAANOS ASCII-tjänster.
För närvarande stöds inga andra servicetyper. Men det är oftast relativt lätt att stödja andra tjänster om de fungerar på ett liknande sätt. Kontakta oss om du har en förfrågan.
Detaljer
Följande information gäller alla underklasser av EDDTableFromAsciiService.
- Begränsningar -ERDDAP™Tabular dataförfrågningar kan sätta begränsningar på någon variabel. Den underliggande tjänsten kan eller inte tillåter begränsningar på alla variabler. Till exempel stöder många tjänster endast begränsningar på stationsnamn, latitud, longitud och tid. Så när en underklass av EDDTableFromAsciiService får en begäran om en delmängd av en datamängd, passerar den så många begränsningar som möjligt till källdatatjänsten och tillämpar sedan de återstående begränsningarna för de data som returneras av tjänsten, innan data lämnas till användaren.
- Valid Range - Till skillnad från många andra datasettyper vet EDDTableFromAsciiService vanligtvis inte omfattningen av data för varje variabel, så det kan inte snabbt avvisa förfrågningar om data utanför det giltiga intervallet.
- Parsing the ASCII Text Response När EDDTableFromAsciiService får ett svar från en ASCII Text Service måste det validera att svaret har det förväntade formatet och informationen och sedan extrahera data. Du kan ange formatet genom att använda olika speciella taggar i biten av XML för denna dataset:
- <innanData1> genom<innanData10> taggar -- Du kan ange en serie textstycken (Så många du vill, upp till 10) EDDTableFromAsciiService måste leta efter i rubriken på ASCII-texten som returneras av tjänsten med<innanData1> genom<innanData10>. Detta är till exempel användbart för att verifiera att svaret inkluderar de förväntade variablerna med hjälp av de förväntade enheterna. Den sista innanData-taggen som du anger identifierar texten som uppstår precis innan data börjar.
- <AfterData > ----- Detta anger den text som EDDTableFromAsciiService kommer att leta efter i ASCII-texten som returneras av tjänsten som betyder slutet på data.
- <NoData > ----- Om EDDTableFromAsciiService hittar denna text i ASCII-texten som returneras av tjänsten, drar den slutsatsen att det inte finns några data som matchar begäran.
EDDTableFromAsciiService skelett XML
<dataset type="EDDTableFromAsciiService..." datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<sourceUrl>...</sourceUrl>
<beforeData1>...<beforeData1> <!-- 0 or 1 -->
...
<beforeData10>...<beforeData10> <!-- 0 or 1 -->
<afterData>...<afterData> <!-- 0 or 1 -->
<noData>...<noData> <!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
</dataset>
EDDTableFromAsciiServiceNOS
EDDTableFromAsciiServiceNOS gör EDDTable dataset från ASCII-textdatatjänster som erbjuds avNOAA"SNational Ocean Service (NOS) . För information om hur denna klass fungerar och hur man använder den, se klassens superklassEDDTableFromAsciiService. Det är osannolikt att någon annan än Bob Simons kommer att behöva använda denna underklass.
Eftersom data inom svaret från en NOS-tjänst använder en kolumn ASCII-textformat måste andra datavariabler än latitud och longitud ha ett speciellt attribut som anger vilka tecken på varje datalinje som innehåller den variablens data, till exempel.
<att name="responseSubstring">17, 25</att>
EDDTableFromAllDatasets
EDDTableFromAllDatasets är en högre dataset som har information om alla andra dataset som för närvarande är laddade i dinERDDAP. Till skillnad från andra typer av datamängder finns det ingen specifikation förallDatasetsDataset idatasets.xml.ERDDAP™Skapar automatiskt en EDDTableFromAllDatasets dataset (meddatasetID= =allDatasets) . och enallDatasetsdataset kommer att skapas i varjeERDDAP™installation och kommer att fungera på samma sätt i varjeERDDAP™installation.
ochallDatasetsdataset är en tabular dataset. Den har en rad information för varje dataset. Den har kolumner med information om varje dataset, t.ex.datasetID, tillgänglig, institution, titel, minLongitude, maxLongitude, minLatitude, maxLatitude, minTime, maxTime, etc. För därförallDatasetsär en tabell dataset, du kan fråga det på samma sätt som du kan fråga någon annan tabell dataset iERDDAP™och du kan ange filtypen för svaret. Detta låter användare söka efter datamängder av intresse på mycket kraftfulla sätt.
EDDTableFromAsciiFiles
EDDTableFromAsciiFiles aggregerar data från komma-, flik-, semicolon- eller rymdseparerade tabell ASCII-datafiler.
- Oftast kommer filerna att ha kolumnnamn på den första raden och data som börjar på den andra raden. (Här kallas den första raden av filen radnummer 1.) Men du kan använda<kolumnNamesRow> och<FirstDataRow > i dindatasets.xmlfil för att ange ett annat radnummer.
- ERDDAP™tillåter raderna av data att ha olika antal datavärden.ERDDAP™förutsätter att de saknade datavärdena är de slutliga kolumnerna i raden.ERDDAP™tilldelar de standardsaknade värdena för de saknade datavärdena. (Tillsatt v1.56)
- ASCII-filer är lätta att arbeta med, men de är inte det mest effektiva sättet att lagra / hämta data. För större effektivitet, spara filerna somNetCDFv3.ncfiler filer (med en dimension, "rad", delad av alla variabler) I stället. Du kanAnvändningERDDAP™för att generera nya filer.
- Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. På grund av den totala bristen på metadata i ASCII-filer måste du alltid redigera resultaten av GenerateDatasetsXml.
- Varning: NärERDDAP™Läser ASCII datafiler, om det hittar ett fel på en viss linje (t.ex. felaktigt antal objekt) Den loggar ett varningsmeddelande (Varning: Dålig linje (s) av data ... med en lista över de dåliga linjerna på efterföljande rader) tillLog.txt filoch sedan fortsätter att läsa resten av datafilen. Därför är det ditt ansvar att se periodiskt (Eller skriva ett manus för att göra det) för det budskapet i loggen. txt så att du kan åtgärda problemen i datafilerna.ERDDAP™är inställd på detta sätt så att användarna kan fortsätta att läsa alla tillgängliga giltiga data även om vissa rader av filen har brister.
EDDTableFrån AwsXmlFiles
EDDTableFrån AwsXmlFiles samlar in data från en uppsättning automatiska väderstationer (AWS) XML-datafiler med WeatherBug Rest XML API (som inte längre är aktiv) .
- Denna typ av fil är ett enkelt men ineffektivt sätt att lagra data, eftersom varje fil vanligtvis verkar innehålla observationen från bara en gång. Så det kan finnas ett stort antal filer. Om du vill förbättra prestanda, överväga att konsolidera grupper av observationer (En veckas värde?) in iNetCDFv3.ncfiler filer (Bäst:.ncfiler medCF Diskret sampling geometrier (DSG) Contiguous Ragged Array-format) och användaEDDTableFromMultidimNcFiles (ellerEDDTableFromNcCFFiles) för att tjäna data. Du kanAnvändningERDDAP™för att generera nya filer.
- Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
EDDTableFromColumnarAsciiFiles
EDDTableFromColumnarAsciiFiles aggregerar data från tabular ASCII datafiler med fasta bredd kolumner.
-
Oftast kommer filerna att ha kolumnnamn på den första raden och data som börjar på den andra raden. Den första raden/raden i filen kallas rad #1. Men du kan använda<kolumnNamesRow> och<FirstDataRow > i dindatasets.xmlfil för att ange ett annat radnummer.
-
och<addAttributes> för varje<dataVariableFör dessa datamängder måste dessa två speciella attribut:
- <att namn="startColumn"> Integer <att> - anger teckenkolumnen i varje rad som är början på denna datavariabel.
- <att namn="stopColumn"> Integer <att> - anger teckenkolumnen i varje rad som är 1 efter slutet av denna datavariabel.
Den första teckenkolumnen kallas kolumn #0. Till exempel, för den här filen som har tidsvärden som innehåller temperaturvärden:
0 1 2 <-- character column number 10's digit
0123456789012345678901234567 <-- character column number 1's digit
time temp
2014-12-01T12:00:00Z12.3
2014-12-02T12:00:00Z13.6
2014-12-03T12:00:00Z11.0
Tidsdatavariabeln skulle ha
<att name="startColumn">0<att>
<att name="stopColumn">20<att>
och tidsdatavariabeln skulle ha
<att name="startColumn">20<att>
<att name="stopColumn">24<att>
Dessa attribut måste anges för alla variabler utomFast-värdeochFilnamn-source-namnvariabler.
- ASCII-filer är lätta att arbeta med, men de är inte ett effektivt sätt att lagra / hämta data. För större effektivitet, spara filerna somNetCDFv3.ncfiler filer (med en dimension, "rad", delad av alla variabler) I stället. Du kanAnvändningERDDAP™för att generera nya filer.
- Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. På grund av svårigheten att bestämma start- och slutpositionerna för varje datakolumn och den totala bristen på metadata i ASCII-filer måste du alltid redigera resultaten från GenerateDatasetsXml.
EDDTableFromHttpGet
EDDTable FromHttpGet skiljer sig från alla andra typer av datamängder iERDDAP™genom att det har ett system där specifika "authors" kan lägga till data, revidera data eller radera data från datam ängden med regelbundenHTTP GETellerPOSTFörfrågningar från ett datorprogram, ett skript eller en webbläsare. Datamängden är sökbar av användare på samma sätt som alla andra EDDTable datamängder är sökbara iERDDAP. Se beskrivningen av denna klasss superklass,EDDTableFromFilesatt läsa om de funktioner som ärvs från den superklassen.
De unika egenskaperna hos EDDTableFromHttpGet beskrivs nedan. Du måste läsa allt detta första avsnitt och förstå det; annars kan du ha orealistiska förväntningar eller få dig i trubbel som är svårt att fixa.
Intended Use
Detta system är avsett för:
- Tabular (In situ) data, inte ruttna data.
- Realtidsdata - Målet är att tillåta en författare (t.ex. sensorn, ett automatiserat QC-skript eller en specifik människa) För att göra en förändring i datasetet (via enInfoga eller .delete kommando) och göra denna förändring tillgänglig förERDDAP™användare, allt på mindre än 1 sekund, och eventuellt mycket snabbare. Det mesta av den 1 sekunden är nättid.ERDDAP™kan behandla begäran på cirka 1 ms och uppgifterna är omedelbart tillgängliga för användare. Detta är enSnabbt,Robustochtillförlitligt system.
- Nästan alla datafrekvenser - Detta system kan acceptera sällsynta data (t.ex. dagligen) genom mycket frekventa data (t.ex. 100 Hz data) . Om du optimerar systemet kan det hantera högre frekvensdata (10 KHz-data om du går till extrema) .
- Data från en sensor eller en samling av liknande sensorer.
- Versioning///Reproducerbar vetenskap///DOIs -- Situationer där du behöver kunna göra ändringar i data (t.ex. ändra en kvalitetskontrollflagga) vet vilken författare som gjorde varje förändring, vet tidsstämpeln för när författaren gjorde förändringen, och (på begäran) kunna se originaldata från innan ändringen gjordes. Således är dessa datamängder berättigade tillDOIs. för att de möterDOIKravet på att datamängden är oföränderlig, förutom genom aggregation. I allmänhet är nära realtid datamängder inte berättigade tillDOIeftersom data ofta ändras retroaktivt (t.ex. för QA/QC ändamål) .
När data är i en EDDTableFromHttpGet dataset, kan alla användare begära data på samma sätt som de begär data från någon annan EDDTable dataset.
Experimentellt: Var försiktig
Eftersom detta system är nytt och eftersom förlorade miljödata inte kan förvärvas, bör du behandla EDDTableFromHttpGet som experimentell. Om du övergår från ett annat system, kör det gamla systemet och det nya systemet parallellt tills du är säker på att det nya systemet fungerar bra. (veckor eller månader, inte bara timmar eller dagar) . I alla fall, se till att ditt system separat arkiverar .insert och .delete URLs som skickas till EDDTableFromHttpGet dataset (Även om bara i Apache och/eller Tomcat loggar) Åtminstone ett tag. Och i alla fall, se till att de datafiler som skapats av din EDDTableFromHttpGet dataset rutinmässigt backas upp till externa datalagringsenheter. (Observera attRsynckan säkerhetskopiera datafiler som skapats av EDDTableFromHttpGet mycket effektivt.)
Infoga och .delete
För alla dataset iERDDAP™När du skickar en begäran tillERDDAP™för en delmängd av data i en datamängd anger du den filtyp som du vill ha för svaret, t.ex. .csv,.htmlTable,.nc,.json. EDDTableFromHttp Få utökar detta system för att stödja ytterligare två "filtyper" som kan infoga (eller förändring) eller radera data i datamängden:
- Infoga
- Begäran är formaterad som ett standard HTML-formulärsvar, med nyckel = värdepar, separerade med "&". Till exempel,
https://some.erddap.url/erddap/tabledap/myDataset**.insert**?stationID=46088&time=2016-03-30T12:37:55Z&latitude=10.1&longitude=-150.1&airTemp=17.23&waterTemp=12.3&author=JohnSmith\_someKey1
berättarERDDAP™lägga till eller ändra data förstationID=46088 för den angivna tiden. - Författaren till denna förändring är JohnSmith och nyckeln är someKey1.
- URL:en måste innehålla giltiga värden (inte saknade värden) för allahttpFå obligatoriska
- Om värdena påhttpFå krävs Variabel i begäran (t.ex.,stationIDoch tid) matcha värdena på en rad redan i datamängden, de nya värdena överskriver effektivt de gamla värdena (Även om de gamla värdena fortfarande är tillgängliga om användaren begär data från en tidigareversion version versionav dataset) .
- .insert URL får aldrig inkludera ×tamp = (ERDDAP™genererar detta värde) eller &command= (Det specificeras av .insert (som är kommando=0) eller .delete (som är kommando= 1 1) ) .
- Om .insert URL inte specificerar värden för andra kolumner som finns i datamängden, antas de vara de infödda saknade värdena. (MAX\_VALUE för integer datatyper, NaN för flottor och dubblar och "" för strängar) .
- .delete
- Begäran är formaterad som ett standard HTML-formulärsvar, med nyckel = värdepar, separerade med "&". Till exempel,
https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
berättarERDDAP™för att radera data förstationID=46088 vid den angivna tiden. - Författaren till denna förändring är JohnSmith och nyckeln är someKey1.
- Webbadressen måste angehttpFå obligatoriskapå begäran (t.ex.,stationIDoch tid) . Om dessa värden matchar värdena på en rad redan i datamängden (som de vanligtvis kommer) De gamla värdena raderas effektivt (Även om de gamla värdena fortfarande är tillgängliga om en användare begär data från en tidigareversion version versionav dataset) .
- Det finns ingen anledning att ange värden för icke-HttpGetRequiredVariables, annat än författare, som behövs för att autentisera begäran.
- Begäran är formaterad som ett standard HTML-formulärsvar, med nyckel = värdepar, separerade med "&". Till exempel,
https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
- Begäran är formaterad som ett standard HTML-formulärsvar, med nyckel = värdepar, separerade med "&". Till exempel,
https://some.erddap.url/erddap/tabledap/myDataset**.insert**?stationID=46088&time=2016-03-30T12:37:55Z&latitude=10.1&longitude=-150.1&airTemp=17.23&waterTemp=12.3&author=JohnSmith\_someKey1
Detaljer:
- .insert och .delete-förfrågningar är formaterade som standard HTML-formresponser, med nyckel = värdepar, separerade av "&". Värdena måste varaprocent kodade. Således måste du koda specialtecken i formen % HH, där HH är karaktärens 2-siffriga hexadecimalvärde. Vanligtvis behöver du bara konvertera några av skiljetecknen: % till %25 och till %26, ”i %22,<i %3C, = %3D, > till %3E, + till %2B,|i %7C,\[i %5B,\]i %5D, utrymme till %20 och omvandla alla tecken över #127 till deras UTF-8-formulär och sedan koda varje byte av UTF-8-formuläret till %HH-formatet (fråga en programmerare om hjälp) .
- .infoga och .delete förfrågningar måste omfattahttpFå obligatoriskat.ex.,stationIDoch tid. För .infoga förfrågningar, variabler som inte anges i begäran antas saknas värden (MAX\_VALUE för heltalsvariabler, NaN för flyt och dubbla variabler och en tom sträng för strängvariabler) . För .delete-förfrågningar, värden för icke-HttpGetRequired Variables (annat än författare, som krävs) ignoreras.
- .infoga och .delete förfrågningar måste innehålla namnet på författaren och författarens nyckel via en parameter i formförfattaren = Författare _key som den sista parametern på begäran. Att kräva att detta senast säkerställer att hela begäran har mottagits avERDDAP. Endast författaren (Inte nyckeln) lagras i datafilen. Du måste ange listan över tillåtna Författare _key s via det globala attributethttpGetKeys
- .insert och .delete parametrar kan vara skalär (singel) värden eller arrayer av någon längd i form\[värde1, värde2, värde3,...valueN\]. För en viss begäran måste alla variabler med arrayer ha arrayer med samma antal värden. (Det är ett fel) . Om en förfrågan har skalär- och matrisvärden replikeras skalärvärden för att bli matriser med samma längd som de angivna matriserna, t.ex., &stationID46088 kan behandlas som ochstationID= =\[46088,46088,46088\]. Arrays är nyckeln tillHög genomströmning. Utan arrays kommer det att vara utmanande att infoga eller ta bort mer än 8 rader data per sekund från en fjärrförfattare. (på grund av hela nätverkets överhuvud) . Med arrays blir det lätt att infoga eller .delete mer än 1000 rader data per sekund från en fjärrsensor.
- .insert och .delete accepterar (utan felmeddelande) flytande punktnummer när heltal förväntas. I dessa fall avrundar datamängden värdena till heltal.
- .insert och .delete accepterar (utan felmeddelande) integer och flytande punktnummer som är out-of-range av variabelns datatyp. I dessa fall lagrar dataset värdena somERDDAPs infödda saknade värden för den datatypen (MAX\_VALUE för heltalstyper och NaN för flottor och dubblar) .
Svar
Om .infoga eller .delete URL lyckas kommer HTTP-responskoden att vara 200 (OK) Svaret kommer att vara text med en.jsonobjekt, t.ex.
{
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-11-05T22:12:19.517Z",
"numericTimestamp":1.541455939517+E9
}
Observera att tidsstämplarna har millisekund precision.
Om .infoga eller .delete URL misslyckas får du en HTTP-responskod som är annan än 200 (Okej) Fel 403 Förbjudet om du skickar in en felaktig författares värde.ERDDAP™Skickar HTTP-responskoden (Inte, t.ex., en.jsonformaterat fel) eftersom det är så saker görs på internet och eftersom fel kan uppstå någonstans i systemet. (t.ex. i nätverket, som returnerar ett HTTP-fel) . Om felet är frånERDDAP™Svaret kan innehålla viss text (Inte inte.json) med en mer detaljerad förklaring av vad som gick fel, men HTTP-responskoden (200=Okej, allt annat är problem) är rätt sätt att kontrollera om .insert eller .delete lyckades. Om du kontrollerar HTTP-responskoden är inte möjlig eller är obekväm, sök efter "status": "framgång" i svarstexten som bör vara en tillförlitlig indikation på framgång.
Log Files
När EDDTableFromHttpGet tar emot .insert och .delete-kommandon, appenderar den helt enkelt informationen till den relevanta filen i en uppsättning loggfiler, som var och en är en tabell lagrad i enJSON Lines CSV-fil. När en användare gör en begäran om data,ERDDAP™snabbt läser relevanta loggfiler, tillämpar ändringarna i datamängden i den ordning de gjordes, och filtrerar sedan begäran via användarens begränsningar som alla andraERDDAP™Databegäran. Uppdelning av data i olika loggfiler, lagring av olika bitar av information (t.ex. tidsstämpeln för kommandot, och om kommandot var .insert eller .delete) , och olika aspekter av inställningen av datamängden, alla gör det möjligt förERDDAPlagra data till och hämta data från denna datamängd mycket snabbt och mycket effektivt.
Säkerhet och författare
Varje .insert och .delete kommando måste inkludera &author = Författare _key som den sista parametern, där författaren_key består av författarens identifierare (du valde: namn, initialer, pseudonym, nummer) En underscore och en hemlig nyckel. ochERDDAP™administratören kommer att arbeta med författare för att generera listan över giltiga författarn key-värden, som kan ändras när som helst. När EDDTableFromHttpGet tar emot en .insert eller .delete kommandot, ser det till att auktorid\_key är den sista parametern och giltig. Eftersom det är den sista parametern indikerar det att hela kommandoraden nåddeERDDAP™Och var inte truncated. Den hemliga nyckeln säkerställer att endast specifika författare kan infoga eller ta bort data i datamängden.ERDDAP™sedan extraherar auktoriteten och sparar det i författarens variabel, så att vem som helst kan se vem som var ansvarig för en given förändring av datamängden. .infoga och .delete kommandon kan endast göras viahttps: (Säkert) ERDDAP™URL:er. Detta säkerställer att den information som överförs hålls hemlig under transitering.
timestamp
Som en del av logsystemet lägger EDDTableFromHttpGet till en timestamp (tiden dåERDDAPmottagna begäran) till varje kommando som den lagrar i loggfilerna. För därförERDDAP™genererar tidsstämpeln, inte författarna, det spelar ingen roll om olika författare gör ändringar från datorer med klockor inställda på något annorlunda tider. Tidsstämpeln anger tillförlitligt den tid då ändringen gjordes till datamängden.
HTTP POST
- Vad sägs om HTTP POST?!
HTTP[POST](https://en.wikipedia.org/wiki/POST_(HTTP)är det bättre alternativet (jämfört medHTTP GET) för att skicka information från en klient till en HTTP-server. Om du kan, eller om du verkligen vill förbättra säkerheten, använd POST istället för att skicka informationen till dig.ERDDAP. POST är säkrare eftersom: med GET ochhttpsURL:en överförs på ett säkert sätt, men hela webbadressen (inklusive parametrar, inklusive författaren) skall skrivas till Apache, Tomcat, ochERDDAP™loggfiler, där någon kunde läsa dem om filerna inte är ordentligt säkrade. Med POST överförs parametrarna på ett säkert sätt och skrivs inte till loggfilerna. POST är lite svårare för kunder att arbeta med och stöds inte så brett av klientprogramvara, men programmeringsspråk stöder det. Innehållet som du skickar till datamängden via GET eller POST kommer att vara detsamma, bara formaterat på ett annat sätt.
httpFå krävs Variables Global Attribute
En viktig del av vad som gör hela systemet arbete är den nödvändiga globala attributhttpFå krävs Variabler, som är en komma-separerad lista överdataVariablekällnamn som unikt identifierar en rad data. Detta bör vara så minimalt som möjligt och kommer nästan alltid att innehålla tidsvariabeln. Till exempel, här är de rekommenderadehttpFå krävs Variabel för var och en avCF Diskret sampling geometrier (DSG) (Naturligtvis kan ID-namnen vara olika i din dataset.) Från:
-
För TimeSeries:stationIDTiden
-
För Trajectory: TrajectoryID, tid
-
För profil: tid (Att anta tid är profilen\_id) Djup
-
För TimeSeries Profil:stationIDTiden (Att anta tid är profilen\_id) Djup
-
För Trajectory Profil: TrajectoryID, tid (Att anta tid är profilen\_id) Djup
Ta TimeSeries som ett exempel: Med tanke på ett .insert kommando som inkluderarstationID=46088 och time=2016-06-23T19:53:00Z (och andra värden för andra variabler) Från:
- Om det inte finns några befintliga data för den stationen och den tiden kommer effekten att vara att lägga till data i datamängden.
- Om det finns befintliga data för den stationen och den tiden kommer effekten att vara att ersätta den befintliga raden data med denna nya data. (Naturligtvis, sedanERDDAP™håller loggen på varje kommando den tar emot, den gamla datan är fortfarande i loggen. Om en användare begär data från en version av datamängden innan den här ändringen kommer de att se äldre data.)
httpGetDirectoryStructure
-
httpGetDirectory Struktur Global Attribute och Data (Logga in) Filnamn
En del av det som gör att hela systemet fungerar effektivt är attERDDAP™skapar en uppsättning data (Logga in) filer, var och en med en annan bit av datamängden. Om dessa är bra,ERDDAP™kommer att kunna svara snabbt på de flesta förfrågningar om data. Denna inställning specificeras avhttpGetDirectoryStructure global attribut, som är en sträng som ser ut som ett relativt filnamn, t.ex.stationID/10 år", men är faktiskt en specifikation för katalogen struktur. De delar av det indikerar hur katalog och filnamn för data (Logga in) filer kommer att byggas.- Om en del är ett heltal (>==> 1 1) plus en timepiod (millisekund, andra, minut, timme, datum, månad, år eller deras plurals) t.ex. 10 år, då EDDTableFromHttpGet dataset tar tidsvärdet för raden av data (t.ex. 2016-06-23T19:53:00Z) beräkna tiden trunkerad till den precisionen (t.ex. 2010) , och göra en mapp eller filnamn från det.
Målet är att få en ganska stor del av data i varje fil, men mycket mindre än 2 GB.
- Annars måste den del av specifikationen vara endataVariable"SsourceNamet.ex.,stationID. I detta fall kommer EDDTableFromHttpGet att göra en mapp eller filnamn från värdet av den variabeln för den nya raden av data. (t.ex. "46088") .
Eftersom .infoga och .delete-kommandodata lagras i specifika data (Logga in) filer, EDDTableFromHttpGet behöver vanligtvis bara öppna en eller några data (Logga in) filer för att hitta data för en viss användarbegäran. Och eftersom varje data (Logga in) filen har all relevant information för sin bit av datamängden, det är snabbt och enkelt för EDDTableFromHttpGet att göra en specifik version (eller aktuell version) av dataset för data i den filen (och inte behöva generera den begärda versionen av hela datasetet) .
Allmänna riktlinjer baseras på mängden och frekvensen av uppgifterna. Om vi antar 100 byte per rad av data, då ...
| Frequency <br>of measurements | Recommended <br>httpGetDirectoryStructure |
| --- | --- |
| \\>=1 per second | *featureID*/1year/1day |
| \\>=1 per minute | *featureID*/2months |
| \\>=1 per hour | *featureID*/10years |
| \\>=1 per day | *featureID* |
Till exempel, om katalogstrukturen ärstationID/2 månader och du infogar data från två stationer (46088 och 46155) med tidsvärden från december 2015 till maj 2016, EDDTableFromHttp Få kommer att skapa kataloger som heter 46088 och 46155 och skapa filer i varje namn 2015-11.jsonl, 2016-01.jsonl, 2016-03.jsonL, 2016-05.jsonLåg (var och en som har 2 månaders datavärde för den relevanta stationen) . När som helst i framtiden, om du använder .insert eller .delete för att ändra eller ta bort data för exempelvis station 46088 vid 2016-04-05T14:45:00Z, EDDTableFromHttp Få kommer att lämna det kommandot till 46088/2016-03.jsonl, relevanta uppgifter (Logga in) fil. Och tydligt är det bra att lägga till data för andra stationer när som helst i framtiden, eftersom datamängden helt enkelt skapar ytterligare kataloger som behövs för att hålla data från de nya stationerna.
httpGetKeys
Varje EDDTable FrånHttp Få datamängd måste ha ett globalt attributhttpGetKeys som anger listan över tillåtna författare och deras hemliga nycklar som en kommaseparerad lista över Författare _key t.ex., JohnSmith\_someKey1, HOBOLogger\_someKey2, QCScript59\_someKey3.
- author_key är fallkänsliga och måste vara helt ASCII-karaktärer (#33 - #126, och utan kommatecken, "eller" tecken
- Nycklar är som lösenord, så de måste vara >=8 tecken, svåra att gissa och utan interna ordboksord. Du bör behandla dem som du skulle behandla lösenord - hålla dem privata.
- Den första "\"-karaktären skiljer författaren från nyckeln, så författarens namn kan inte inkludera en "\"-karaktär (Men en nyckel kan) .
- Varje författare kan ha en eller flera författare key s, t.ex. JohnSmith Key1, JohnSmith Key7, etc.
- Du kan ändra värdet av detta attribut när som helst. Ändringarna träder i kraft nästa gång datamängden laddas.
- Denna information kommer att tas bort från datasetets globala bidrag innan den offentliggörs.
- Varje begäran till datamängden för att infoga eller ta bort data måste innehålla en &author= Författare _key parameter. Efter att ha verifierat nyckelns giltighet,ERDDAP™endast sparar författarens del (Inte nyckeln) i datafilen.
Set Up
Här är de rekommenderade stegen för att skapa en EDDTableFromHttpGet dataset:
-
Gör huvudkatalogen för att hålla denna dataset data. Låt oss använda/data/testGet/. Användaren som kör GenerateDatasetsXml och användaren som körERDDAP™måste båda ha läs-skriv tillgång till denna katalog.
-
Använd en textredigerare för att göra ett prov.jsonL CSV-fil med förlängningen.jsonL i den katalogen. Namnet är inte viktigt. Du kan till exempel kalla det prov.jsonLåg Gör en 2 linje.jsonL CSV-fil, med kolumnnamn på första raden och dummy/typiska värden (av rätt datatyp) på den andra raden. Här är en provfil som är lämplig för en samling avfeatureType=TimeSeries data som mätte luft och vattentemperatur. \[FörfeatureType=Trajektiv, du kan ändrastationIDAtt vara TrajectoryID.\]
\[FörfeatureType=Profil, du kan ändrastationIDatt vara profilid och lägga till en djupvariabel.\]\["stationID","time""latitud", "longitude", "airTemp", "waterTemp", "timestamp", "författare", "kommando"\] \["myStation", "2018-06-25T17:00:00Z", 0,0, 0,0, 0,0, 0,0, 0,0, "SomeBody", 0\]
Notera:
- De faktiska datavärdena spelar ingen roll eftersom du så småningom kommer att radera den här filen, men de bör vara av rätt datatyp. I synnerhet bör tidsvariabeln använda samma format som de faktiska uppgifterna från källan kommer att använda.
- För alla variabler,sourceNameskall jämlikadestinationName, så använd rätt / slutliga variabla namn nu, inklusive tid, latitud, longitud och ibland djup eller höjd om variabler med den informationen kommer att inkluderas.
- Det kommer nästan alltid att finnas en variabel namngiven tid som registrerar den tid som observationen gjordes. Det kan vara dataType String medenheter som är lämpliga för strängtid (t.ex.,yyyy-MM-ddH:mm:ss.SSSZ) eller data Typ dubbel medenheter som är lämpliga för numeriska tider (t.ex. sekunder sedan 1970-01-01T00:00:00Z, eller någon annan bastid) .
- Tre av kolumnerna (vanligtvis de tre sista) måste vara timestamp, författare, kommando.
- Timestamp-kolumnen kommer att användas av EDDTableFromHttpGet för att lägga till en tidsstämpel som anger när den lade till en viss datalinje till datafilen. Det kommer att ha datatyp dubbel och enheter sekunder sedan 1970-01-01T00:00:00Z.
- Författarkolumnen med dataType String kommer att användas för att registrera vilken auktoriserad författare som tillhandahöll denna rads data. auktoriserade författare specificeras avhttpGetKeys globala attribut. Även om nycklarna anges som Författare _key och är i "förfrågan" URL i den formuläret, endast författaren del sparas i datafilen.
- Kommandokolumnen med dataType byte kommer att ange om data på denna rad är en insättning (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) eller en radering (1 1) .
-
Kör GenerateDatasets Xml och berätta det
- Datasettypen är EDDTableFromHttpGet
- Katalogen är (för detta exempel) /data/test Få //
- Provfilen är (för detta exempel) /data/testGet/startup.jsonLåg
- ochhttpFå krävs Variabler är (för detta exempel) stationIDTiden Se beskrivningen avhttpFå obligatoriskanedanför.
- Om data samlas in var 5:e minut,httpGetDirectoryStructure för detta exempel ärstationID/2månader. Se beskrivningen avhttpGetDirectoryStructurenedanför.
- ochhttpGetKeys
Lägg till utgången (Den bit avdatasets.xmlför dataset) attdatasets.xml. 4. Redigeradatasets.xmlchunk för denna datamängd för att göra den korrekt och komplett. I synnerhet ersätter alla ??? med korrekt innehåll. 5. För<fileTableInMemory > inställning:
- Ange detta till sant om datamängden vanligtvis får frekventa .insert och/eller .delete-förfrågningar (t.ex. oftare än en gång var tionde sekund) . Detta hjälper EDDTableFromHttpGet att reagera snabbare på .insert och/eller .delete-förfrågningar. Om du ställer in detta till sant, kommer EDDTableFromHttpGet fortfarande att spara filTable och relaterad information till disken periodiskt (vid behov, ungefär var femte sekund) .
- Ställ detta för falskt (Default) om datamängden vanligtvis får sällan .insert och/eller .delete-förfrågningar (t.ex. mindre än en gång var tionde sekund) .
- Notera: Det är möjligt att använda<cacheFromUrl> och relaterade inställningar idatasets.xmlför EDDTable FrånHttp Få dataset som ett sätt att göra och upprätthålla en lokal kopia av en fjärr EDDTableFromHttpGet dataset på en annanERDDAP. Men i detta fall kommer denna lokala dataset att avvisa alla .insert och .delete-förfrågningar.
Använda EDDTable FrånHttpGet Datasets
- Författare kan göra "förfrågningar" sominfoga data till eller ta bort data från datasetet.
- Efter att riktiga data har infogats i datamängden kan du och bör ta bort den ursprungliga provdatafilen.
- Användare kan begära data från dataset som de gör för någon annan EDDTable dataset iERDDAP. Om begäran inte innehåller en begränsning på tidsstämpelkolumnen får begäran data från den aktuella versionen av datamängden. (loggfilen efter bearbetning av alla insättnings- och raderingskommandon och återinförande avhttpFå obligatoriska) .
- Användare kan också göra förfrågningar som är specifika för EDDTableFromHttpGet dataset:
- Om begäran innehåller en<eller<= begränsningar av tidsstämpelkolumnen, sedanERDDAP™processer rader av loggfilen fram till den angivna tidsstämpeln. I själva verket tar detta tillfälligt bort alla ändringar som gjorts till datamängden sedan det tidsstämpelvärdet. För mer info, seVersioning.
- Om begäran innehåller en >, >= eller = begränsning av tidsstämpelkolumnen, t.ex. ×tamp<=0, dåERDDAP™returnerar data från datafilerna som är, utan att bearbeta kommandon för införande och radering.
- I framtiden ser vi att verktyg kommer att byggas (av oss? av dig?) för att arbeta med dessa datamängder. Det kan till exempel finnas ett manus som läser de råa loggfilerna, tillämpar en annan kalibreringsekvation och genererar / uppdaterar en annan datamängd med den härledda informationen. Observera att manuset kan få originaldata via en begäran om attERDDAP™ (som får data i filformatet som är lättast för manuset att arbeta med) och generera / uppdatera den nya dataset via .insert "begäran" tillERDDAP. Skriptet behöver inte direkt tillgång till datafilerna; det kan vara på någon auktoriserad författares dator.
Detaljerad information om EDDTableFromHttpGet
ämnena är:
- Ändra inte installationen!
- CRUD
- InvalidRequests
- Hastighet
- Robust
- Systemsäkerhet
- Versioning
- Vad sägs om HTTP PUT och DELETE?!
- Anteckningar
- Tack vare CHORDS för den grundläggande idén.
Här är detaljerad information:
Ändra inte installationen!
När datamängden har skapats och du har lagt till data till den:
- Lägg inte till eller ta bort någondataVariables.
- Ändra intesourceNameellerdestinationNamefördataVariables.
- Inte ändra data Typ avdataVariables. Men du kan ändradataVariablemetadata.
- Ändra intehttpFå krävs Variables globala attribut.
- Ändra intehttpGetDirectoryStructure global attribut.
Om du behöver ändra något av dessa saker, gör en ny dataset och överföra alla data till den nya dataset.
CRUD
I datavetenskap är de fyra grundläggande kommandon för att arbeta med en datasetCREATE, READ, UPDATE, DELETE (CRUD) . SQL, språket för att arbeta med relationella databaser, har motsvarande i INSERT, SELECT, UPDATE och DELETE. I EDDTableFromHttpGet,
- .insert är en kombination av CREATE och UPDATE.
- .delete är DELETE.
- Det vanliga systemet för att begära delmängder av data är READ.
Därför stöder EDDTableFromHttpGet alla grundläggande kommandon för att arbeta med ett dataset.
- .infoga eller .delete förfrågningar utan fel kommer att returnera HTTP statuskod = 200 och ett JSON-objekt, t.ex.
{
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-03-26T15:34:05.552Z",
"numericTimestamp":1.522078445552E9
}
De två tidsstämpelvärdena hänvisar till samma millisekund, vilket är millisekunden som kommer att lagras i tidsstämpelvariabeln för raderna av data som infogades eller raderades.ERDDAP™ändrar inte namn och formatering av dessa nyckelvärdepar i framtiden.ERDDAP™kan lägga till ytterligare nyckelvärdepar till JSON-objektet i framtiden.
InvalidRequests
Invalid .insert eller .delete-förfrågningar kommer att returnera en HTTP-felstatuskod som är annan än status = 200 och ingen ändring kommer att göras till datamängden. Detta inkluderar förfrågningar med felaktig författarinformation, felaktiga variabla namn, olika arraylängder för olika variabler, saknade nödvändiga variabler, saknade nödvändiga rörliga värden etc. Om begäran omfattar mer än en datafil är det möjligt att en del av begäran kommer att lyckas och en del kommer att misslyckas. Men detta bör inte vara ett problem om sensorn skickar begäran behandlar eventuella fel som ett fullständigt misslyckande. Till exempel, om du berättarERDDAP™Att infoga (eller ta bort) samma data två gånger i rad, det värsta fallet är att informationen lagras två gånger, nära varandra i loggfilen. Det är svårt att se hur det kan orsaka problem.
HttpGet hastighet
För .insert eller .delete förfrågningar (inte räknahttpöverhead) ballpark siffror hastigheten på .insert eller .delete är
1ms per .insert med 1 rad data
2ms per .infoga med 10 rader data i arrays (\[\])
3ms per .infoga med 100 rader data i arrays (\[\])
13ms per .insert med 1000 rader data i arrays (\[\])
Tydligt arrays är nyckeln tillHög genomströmning. Utan arrays kommer det att vara utmanande att infoga eller ta bort mer än 8 rader data per sekund från en fjärrförfattare. (på grund av hela nätverkets överhuvud) . Med arrays blir det lätt att infoga eller .delete mer än 1000 rader data per sekund från en fjärrsensor.
Med mycket stora mängder data per förfrågan kommer du att slå Tomcats gräns till den maximala söklängden. (standard är 8KB?) , men det kan ökas genom att redigera maxHttpHeaderSize inställningen i din Tomcat /conf/server.xml's HTTP/1.1 Connector inträde.
När närERDDAP™Läser JSON Lines CSV-data (Logga in) filer, det finns en liten tidsstraff jämfört med att läsa binära datafiler. Vi kände att denna gång straff när läsning var ett rimligt pris för att betala för hastighet och robusthet i systemet när du skriver data. (vilket är av primär betydelse) .
SSD
För större hastighet,Använd enSolid State Drive (SSD) för att lagra data. De har en mycket snabbare filåtkomsttid (<0.1ms) än hårddiskar (3 - 12 ms) . De har också en snabbare dataöverföringshastighet (200 - 2500 MB/s) än hårddiskar (~200 MB/s) . Deras kostnader har minskat betydligt de senaste åren. Även om tidiga SSD hade problem efter ett stort antal skrivningar till ett visst block, är detta problem nu kraftigt minskat. Om du bara använder SSD för att skriva data när du läser det många gånger, även en konsumentkvalitet SSD (vilket är betydligt billigare än en företagsgrad SSD) bör vara länge.
Robust
Vi har försökt göra detta system så lätt att arbeta med och så robust som möjligt.
- Systemet är utformat för att ha flera trådar (t.ex. sensorn, ett automatiserat QC-skript och en människa) samtidigt arbeta med samma dataset och även samma fil. Mycket av detta görs möjligt genom att använda en logfil för att lagra data och genom att använda en mycket enkel filtyp,JSON Lines CSV-filerFör att lagra data.
- En annan stor fördel för JSON Lines CSV är att om en fil någonsin blir skadad. (t.ex. ogiltig på grund av ett fel på en linje) Det är lätt att öppna filen i en textredigerare och åtgärda problemet.
- En annan fördel är, om det finns ett fel på en rad i en fil, kan systemet fortfarande läsa alla data på rader före och efter fellinjen. Och systemet kan fortfarande logga ytterligare .insert och .delete information.
- En stor fördel med att använda admin-tillgängliga standardfiler (jämfört med en relationsdatabas eller Cassandra eller annan programvara) Från: Det finns ingen annan programvara som måste underhållas och som måste köras för att lagra eller hämta data. Och det är lätt att säkerhetskopiera standardfiler när som helst och på ett stegvist sätt eftersom data är i bitar. (Efter ett tag kommer endast den aktuella filen för varje station att ändras) . Däremot tar det stor ansträngning och system ner tid för att göra externa säkerhetskopieringsfiler från databaser och från Cassandra.
Systemsäkerhet
Det är rimligt att förvänta sig en server medERDDAP™att ha 99,9% upptid - det är cirka 9 timmars driftstopp per år (Du kan använda det på en dålig natt!) . Om du är flitig och lycklig kan du få 99,99% upptid (53 minuter stillestånd per år) Eftersom bara några omstarter för uppdateringar tar så mycket tid. Du måste vidta extrema åtgärder (en separat säkerhetskopieringsserver, oavbrutet strömförsörjning, säkerhetskopierings luftkonditionering, 24x7x365 personal för att övervaka webbplatsen, etc.) att ha en smal chans på 99,999% upptid (5,25 minuter stillestånd per år) . Även då är det extremt osannolikt att du kommer att uppnå 99,999% upptid (eller till och med 99,99%) eftersom problem ofta ligger utanför din kontroll. Amazon Web Service och Google erbjuder till exempel otroligt pålitliga webbtjänster, men stora delar av dem är ibland nere i timmar.
Face it, alla villERDDAP™att ha 100% upptid, eller åtminstone de fasta "sex nior" (99,9999% upptid motsvarar 32 sekunder av driftstopp per år) Men det finns inget sätt du kommer att få det oavsett hur mycket tid, ansträngning och pengar du spenderar.
MenERDDAP™Uptime är inte det verkliga målet här. Målet är att bygga en pålitlig Systemsystem En som inte förlorar några data. Detta är ett lösligt problem.
Lösningen är: bygga feltolerans i datorprogramvaran som skickar data tillERDDAP. Specifikt bör denna programvara behålla en kö av data som väntar på att gå tillERDDAP. När data läggs till i kön, bör programvaran kontrollera svaret frånERDDAP. Om svaret inte innehåller data som mottagits. Inga fel, då programvaran ska lämna data i kön. När mer data genereras och läggs till i kön, bör programvaran återigen försöka infoga data i köen. (kanske med\[\]Systemsystem) . Det kommer att lyckas eller misslyckas. Om det misslyckas kommer det att försöka igen senare. Om du skriver programvaran för att arbeta på detta sätt och om programvaran är beredd att köa några dagar värde av data, har du faktiskt en bra chans att ladda upp 100% av sensorns data tillERDDAP. Och du kommer att ha gjort det utan att gå till stor ansträngning eller kostnad.
\[Bakgrund: Vi trodde inte detta.Det är så datornätverk uppnår tillförlitlighet. ) Datornätverk är i sig opålitliga. Så när du överför en fil från en dator till en annan, vet sändningsprogramvaran / förväntningar på att vissa paket kan gå förlorade. Om det inte får en ordentlig bekräftelse för ett visst paket från mottagaren, det liknar det förlorade paketet. Med detta tillvägagångssätt kan relativt enkel avsändare och mottagare programvara bygga ett pålitligt filöverföringssystem ovanpå ett opålitligt nätverk.\]
Varför JSON Lines CSV-filer?
EDDTableFromHttpGet använderJSON Lines CSV-filerför att lagra data. Skälen är:
- Den främsta orsaken är: Enkelheten hos JSON Lines CSV-filer erbjuder ett snabbt, enkelt och tillförlitligt sätt att låta flera trådar skriva till en viss fil. (t.ex. genom att synkronisera på filnamnet) .
- Om en JSON Lines CSV-fil någonsin blev skadad (t.ex. ogiltig på grund av ett fel på en linje) EDDTableFromFromHttpGet kan fortfarande läsa alla data på alla rader före och efter fellinjen. Och .insert- och .delete-systemet kan fortsätta att lägga till nya data i datafilen.
- Eftersom JSON Lines CSV-filer är ASCII-filer, om en fil någonsin blivit skadad, skulle det vara lätt att åtgärda (i en textredigerare) .
- JSON Lines CSV stödjer Unicode strängar.
- JSON Lines CSV stöder rörliga längdsträngar (Inte begränsat till någon maxlängd) .
- JSON Lines CSV stöder 64-bitars heltal (långa) .
- Den formella naturen och extra syntax av JSON Lines CSV (vs old-school CSV) ger lite extra garanti för att en viss linje inte har skadats.
Vi försökte ursprungligen att använda.nc3 filer med obegränsad dimension. Men det fanns problem:
- Huvudproblemet var: Det finns inget tillförlitligt sätt att låta flera trådar skriva till en.nc3 fil, även om trådarna samarbetar genom att skriva på ett synkroniserat sätt.
- Om en.nc3 filen blir skadad, .insert och .delete systemet kan inte fortsätta att använda filen.
- För den.nc3 filer är binära, om en fil blir skadad (som de gör på grund av multi-threading problem) De är mycket svåra eller omöjliga att fixa. Det finns inga verktyg för att hjälpa till med reparationen.
- CF har inget sätt att specificera kodning av strängar, så det finns inget officiellt sätt att stödja Unicode, t.ex. UTF-8 kodning. Vi försökte få CF att stödja en \_Encoding attribut men kunde inte göra några framsteg. (UnidataTill deras kredit stöder du attributet \_Encoding.)
- .nc3 filer stöder endast fasta längdsträngar. Vi försökte få CF ochUnidataför att stödja variabla längdsträngar men kunde inte göra några framsteg.
- .nc3 filer stöder inte ett enkelt sätt att skilja enskilda tecken variabler från String variabler. Vi försökte få CF ochUnidataatt stödja ett system för att skilja dessa två datatyper, men kunde inte göra några framsteg.
- .nc3 filer stöder endast 8-bitars tecken med en ospecificerad kodning. Vi försökte få CF ochUnidataatt stödja ett system för att ange kodningen, men kunde inte göra några framsteg.
- .nc3 filer stöder inte 64-bitars heltal (långa) . Vi försökte få CF ochUnidataatt stödja ett system i längder, men kunde inte göra några framsteg.
Versioning
För EDDTable FrånHttp Få butiker en logg över alla ändringar i datamängden med tidsstämpeln och författaren till varje förändring, det kan snabbt återskapa den datamängden per tidpunkt. I en mening finns det en version för alla punkter i tiden. Om en användares begäran om data innehåller en timestamp<= begränsningar, t.ex., ×tamp<=2016-06-23T16:32:22.128Z (eller när som helst) men ingen begränsning av författare eller kommando,ERDDAP™kommer att svara på begäran genom att först generera en version av datamängden från och med den tidpunkten. Sedan,ERDDAP™tillämpa användarens andra begränsningar, som med annan begäran om data frånERDDAP. EDDTableFromHttpGet inrättas så att denna process är mycket snabb och effektiv, även för mycket stora datamängder.
På samma sätt kan en användare ta reda på när datamängden senast uppdaterades genom att begära ... tidsstämpel & timestamp=max (timestamp) och distinkt ()
Och för varje begäran om data, för någon version av datamängden, kan användarna se vilken författare som har gjort ändringar, och när de gjorde dem.
Detta versionssystem möjliggörReproducerbar vetenskapeftersom alla när som helst kan begära data från versionen av datamängden när som helst. Denna finkorniga version är inte möjligt med något annat system som vi känner till. Den underliggande mekanismen är mycket effektiv, eftersom inget extra lagringsutrymme behövs, och bearbetningsöverhuvudet är verkligen minimalt.
Inte alla har ett behov av denna typ av finkornig version, men det är ytterst användbart, kanske nödvändigt, i samband med en stor datahanteringsorganisation. (t.ex. OOI, Earth Cube, Data One ochNOAANCEI) där en dataset kan ha flera författare (t.ex. sensorn, ett automatiserat QC-skript och en mänsklig redaktör) .
\[Historia: Behovet av denna typ av version först kom upp för mig (Bob) När du läser om och diskuterar OOI 2008. Vid den tiden hade OOI ett besvärligt, långsamt, ineffektivt system för versionering baserat på Git. Git är bra för vad det var utformat för, men inte detta. Under 2008, under en OOI-diskussion, utformade jag ett omfattande, effektivt alternativ-till-OOI-system för datahantering, inklusive många av de funktioner som jag har lagt till.ERDDAP™Sedan dess, och inklusive detta versionssystem. Då och då var OOI engagerad i sitt versionssystem och inte intresserad av alternativ. Under 2016 föll andra aspekter av denna plan på plats och jag började implementera den. Eftersom det fanns massor av avbrott att arbeta på andra projekt, avslutade jag inte förrän 2018. Även nu är jag inte medveten om något annat vetenskapligt datasystem som erbjuder så snabb och enkel åtkomst till en version av data från vilken tidpunkt som helst, för ofta ändrade datamängder. Enkla filsystem erbjuder inte detta. Relationella databaser gör det inte. Cassandra gör det inte.\]
HTTPS Put och Delete
- Vad sägs om HTTPS PUT och DELETE?!
Hypertextöverföringsprotokoll (HTTP) är grunden för World Wide Web och anledningen till att webbsidor börjar med " http://" eller " https://" . HTTPS är HTTP med ett extra säkerhetslager. Varje dag gör webbläsare, skript och datorprogram miljarder HTTP (SS S) GET Förfrågningar om att få information från avlägsna källor. HTTP (SS S) även andraverbNotably PUT (att driva data till servern) och DELETE (DELETE data från servern) . Ja, PUT och DELETE är rätt sätt att infoga data i och ta bort data från, en dataset via HTTP (SS S) . GET stöds av varje mjukvara som kan fungera med HTTP (SS S) . GET är verkligen lätt att arbeta med. Alla vet redan hur man arbetar med GET och många vet hur man använder POST (som kan användas i huvudsak på samma sätt som GET) Så vi gjorde EDDTableFromHttpGet arbete med GET och POST. Mycket få människor (Få datorprogrammerare) Har någonsin jobbat med PUT och DELETE. PUT och DELETE stöds i allmänhet bara av datorspråk, så att använda dem kräver ett skickligt program. Så PUT och DELETE är vanligtvis ett mycket mer besvärligt tillvägagångssätt med tanke på hur verktygen har utvecklats.
HttpGet Notes
- Anteckningar
- IngendataVariablekan ha dataType=char. Använd dataType=String istället. Om du verkligen behöver dataType=char, e-post Chris. John på noaa.gov.
Tack
- Tack vare CHORDS för den grundläggande idén.
Grundtanken för EDDTableFromHttpGet (dvs använda enHTTP GETbegära att lägga till data till en dataset) är från UCAR's (NCAR?) Cloud-Hosted Real-time Data Services (KORDS) projekt. Formatet för parametrarna på begäran (upprepad namn=värde Separerad av &'s) är samma standardformat som används av HTML-formulär på webbsidor. Det är en enkel och lysande idé och ännu mer eftersom den meshes så perfekt medERDDAP"Det befintliga systemet för att hantera tabelldata. Tanken är uppenbar i efterhand, men jag (Bob) Tänkte inte på det. EDDTableFromHttp Få användning av den grundläggande idén, i kombination med våra idéer om hur man implementerar den, för att göra ett system iERDDAP™för att ladda upp data. Annat än den grundläggande idén att använda GET för att driva data i systemet, är EDDTableFromHttpGet implementering helt annorlunda och helt oberoende av CHORDS och har olika funktioner. (t.ex. loggfiler, chunking av data, olika säkerhetssystem, CRUD-stöd, reproducerbara data) . Vår exponering för CHORDS var bara ett webinar. Vi tittade inte på deras kod eller läste om deras projekt eftersom vi omedelbart visste att vi ville implementera systemet på ett annat sätt. Men vi är tacksamma för dem för grundtanken. Den fullständiga referensen till CHORDS är Daniels, M. D., Kerkez, B., Chandrasekar, V., Graves, S., Stamps, D. S., Martin, C., Dye, M., Gooch, R., Bartos, M., Jones, J., Keiser, K. (2014 2014 2014) . Cloud-Hosted Real-time Data Services för Geosciences (KORDS) programvara. UCAR / NCAR - Jorden observerar laboratorium. https://doi.org/10.5065/d6v1236q
EDDTableFrånHyraxFiler
EDDTableFrånHyraxFiler (Deprecated) aggregerar datafiler med flera variabler, var och en med en eller flera delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) och serveras av enHyrax OPeNDAPServer server.
- Denna dataset typ är Begränsad . Den nyare och mer generella lösningen är att använda denCache FromUrl alternativet för EDDTable FrånFiles (eller en variant) , vilket gör en lokal kopia av fjärrfilerna och tjänar data från de lokala filerna. och<cacheFromUrl> alternativet kan användas med någon typ av tabular datafil. **
Om du inte kan göra det fungerar av någon anledning, e-post Chris. John på noaa.gov. Om det inte finns några klagomål före 2020 kan denna datatyp tas bort. ** - Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
- I de flesta fall har varje fil flera värden för vänster (Först först) dimension, till exempel tid.
- Filerna ofta (Men behöver inte) ha ett enda värde för de andra dimensionerna (Till exempel höjd (eller djup) latitud, longitud) .
- Filerna kan ha teckenvariabler med en extra dimension (till exempel nCharacters) .
- Hyraxservrar kan identifieras med "/dods-bin/nph-dods/" eller "/opendap/" i webbadressen.
- Denna klassskärm skraparHyraxwebbsidor med listorna över filer i varje katalog. På grund av detta är det mycket specifikt för det aktuella formatet avHyraxwebbsidor. Vi kommer att försöka justeraERDDAP™snabbt om/när framtida versioner avHyraxändra hur filerna är listade.
- och<filDir> inställning ignoreras. Eftersom denna klass laddar ner och gör en lokal kopia av varje fjärrdatafil,ERDDAP™tvingar filen Dir att vara bigParentDirectory /copy/ datasetID /.
- För<sourceUrl>, använd webbadressen för baskatalogen för datamängden iHyraxserver, till exempel, <sourceUrl> > > > > http://edac-dap.northerngulfinstitute.org/dods-bin/nph-dods/WCOS/nmsp/wcos/ <///sourceUrl> > > > > (Men lägg den på en linje) (Förlåt att servern inte längre är tillgänglig) . ochsourceUrlWebbplatsen har vanligtvis "OPeNDAPServer Index från\[Regissör\]på toppen.
- Eftersom denna klass alltid laddar ner och gör en lokal kopia av varje fjärrdatafil, bör du aldrig svepa den här datamängden iEDDTableCopy.
- Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Se 1D, 2D, 3D och 4D-exempel förEDDTableFromNcFiles.
EDDTableFromInvalidCRAFiles
EDDTableFromInvalidCRAFiles aggregerar data frånNetCDF (v3 eller v4) .ncfiler som använder en specifik, ogiltig, variant av CF DSG Contiguous Ragged Array (CRA) filer. Även omERDDAP™stöder denna filtyp, det är en ogiltig filtyp som ingen ska börja använda. Grupper som för närvarande använder denna filtyp uppmuntras starkt att användaERDDAP™för att generera giltiga CF DSG CRA-filer och sluta använda dessa filer.
Detaljer: Dessa filer har flera row\_size variabler, var och en med ett prov\_dimension attribut. Filerna är icke-CF-standardfiler eftersom flera prov (Obs) Dimensioner ska avkodas och relateras till varandra med denna extra regel och löfte som inte ingår i CF DSG-specifikationen: "Du kan associera ett givet t.ex. temperaturvärde (temp\_obs dimension) med ett givet djupvärde (z\_obs dimension, dimensionen med de flesta värden) För: Temperaturen row\_size (för en given gjutning) är antingen 0 eller lika med motsvarande djuprad (för den där gjuten) (Det är regeln) . Så om temperaturraden inte är 0, relaterar n temperaturvärdena för den gjuten direkt till n-djupvärdena för den gjuten. (Det är löftet) .”
Ett annat problem med dessa filer: Principal\_Investigator row\_size-variabeln har inte ett prov\_dimension-attribut och följer inte ovanstående regel.
Provfiler för denna datasettyp finns på https://data.nodc.noaa.gov/thredds/catalog/ncei/wod/ \[2020-10-21 Denna server är inte längre tillförlitligt tillgänglig\].
Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Det första GenerateDatasets Xml gör för denna typ av dataset efter att du svarat på frågorna är att skriva ut ncdump-liknande strukturen i provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
EDDTableFromJsonlCSVFiles
EDDTableFromJsonlCSVFiles aggregerar data frånJSON Lines CSV-filer. Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Som jsonlines.org säger är detta format "Bättre än CSV" (Och lagligt, som en federal anställd, kan jag inte hålla med eller inte hålla med dem - hur galen är det?) . CSV har aldrig formellt definierats och hämmas av det historiska bagaget i samband med dess anslutning till de ursprungliga kalkylbladsprogrammen. JSON Lines CSV är i jämförelse fullt definierad och drar nytta av dess anslutning till den allmänt använda JSON-standarden, som i sin tur drar nytta av dess anslutning tillJavaScript ochJava. I synnerhet finns det fullt stöd för långa heltal och för Unicode-tecken i strängar, och ett tydligt sätt att inkludera andra specialtecken. (Notably flikar och newlines) inom strängar.
Detta format är särskilt bra för datamängder där du regelbundet måste lägga till ytterligare rader i slutet av en viss datafil. Av den anledningen och andra (Se ovan) ,EDDTableFromHttpGetanvänder Json Lines CSV-filer för datalagring.
- Inmatningsfilerna antas vara UTF-8 kodade. Med tanke på ðu dddd format för kodning av speciella tecken (t.ex. ðu20ac är kodningen för Euro-karaktären) Du har möjlighet att skriva filerna så att de endast innehåller 7-bitars ASCII-tecken genom att använda \u dddd att koda alla tecken över #127.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Det första GenerateDatasetsXml gör för denna typ av datamängd efter att du svarat på frågorna är att skriva ut ncdump-liknande struktur av provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
- Varning: NärERDDAP™Läser JSON Linjer CSV-datafiler, om det hittar ett fel på en viss linje (t.ex. felaktigt antal objekt) Den loggar ett varningsmeddelande (Varning: Dålig linje (s) av data ... med en lista över de dåliga linjerna på efterföljande rader) tillLog.txt filoch sedan fortsätter att läsa resten av datafilen. Därför är det ditt ansvar att se periodiskt (Eller skriva ett manus för att göra det) för det budskapet i loggen. txt så att du kan åtgärda problemen i datafilerna.ERDDAP™är inställd på detta sätt så att användarna kan fortsätta att läsa alla tillgängliga giltiga data även om vissa rader av filen har brister.
EDDTableFromMultidimNcFiles
EDDTableFromMultidimNcFiles aggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer med flera variabler, var och en med en eller flera delade dimensioner. Filerna kan ha teckenvariabler med eller utan ytterligare dimension (till exempel, STRING14) . Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Om filerna är multidimensionella CF DSG-varianter, använd denna datasettyp istället förEDDTableFromNcCFFiles.
- För nya tabular dataset från.ncfiler, använd det här alternativet innan du försöker de äldreEDDTableFromNcFiles. Några fördelar med denna klass är:
- Denna klass kan läsa fler variabler från ett större antal filstrukturer. Om du anger DimensionsCSV (en komma-separerad lista över dimensionsnamn) i GenerateDatasets Xml (eller<dimensionerCSV> idatasets.xmlinfo för en av dessa datamängder), sedanERDDAP™kommer bara att läsa variabler i källfilerna som använder några eller alla dessa dimensioner, plus alla skalärvariabler. Om en dimension är i en grupp måste du ange dess fullvärdiga namn, t.ex. gruppnamn/dimensionNamn ".
- Denna klass kan ofta avvisa filer mycket snabbt om de inte matchar en begäran begränsningar. Att läsa data från stora samlingar går ofta mycket snabbare.
- Denna klass hanterar sanna char variabler (icke-String variabler) korrekt.
- Denna klass kan trimma strängvariabler när skaparen inte använde Netcdf-javas skrivsträngar (vilket ger char #0 för att markera slutet av strängen) .
- Denna klass är bättre på att hantera enskilda filer som saknar vissa variabler eller dimensioner.
- Denna klass kan ta bort block av rader med saknade värden som anges förCF Diskret sampling geometrier (DSG) Ofullständiga Multidimensionella Array-filer
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Det första GenerateDatasetsXml gör för denna typ av datamängd efter att du svarat på frågorna är att skriva ut ncdump-liknande struktur av provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
Grupp -- GenerateDatasets Xml kommer att be om en "grupp". Du kan ange "" för att få det att söka någon / alla grupper, " vissa Gruppgrupp "eller" SomeGroup/someSubGroup för att få den att söka efter en viss grupp, eller "\[root\]För att få det att söka bara rotgruppen. "Group"-strängen blir<grupp> idatasets.xmlinfo för dataset (Även om "\[root\]" blir") .
DimensionsCSV GenerateDatasets Xml kommer att be om en "DimensionsCSV"-sträng. Detta är en kommaseparerad värdelista över källnamn på en uppsättning dimensioner. GenerateDatasets Xml läser endast datavariabler i prov.ncfiler som använder vissa eller alla dessa dimensioner (och inga andra dimensioner) plus alla skalärvariabler i filen och gör datamängden från dessa datavariabler. Om en dimension är i en grupp måste du ange dess fullvärdiga namn, t.ex. gruppnamn/dimensionNamn ". Om du inte specificerar ingenting (En tom sträng) GenerateDatasets Xml kommer att leta efter variablerna med de flesta dimensionerna, på teorin att de kommer att vara de mest intressanta, men det kan finnas tillfällen när du vill göra en dataset från någon annan grupp av datavariabler som använder någon annan grupp av dimensioner. Om du bara anger ett dimensionsnamn som inte existerar (t.ex. NO\_MATCH) ,ERDDAP™kommer bara att hitta alla skalärvariabler. "DimensionsCSV"-strängen blir<dimensionerCSV> idatasets.xmlinfo för dataset.
behandlaDimensionsAs
Det finns en kategori av ogiltig.ncfiler filer (eftersom de inte följer CF-reglerna) som har flera dimensioner (t.ex. lat, lon, tid) när de borde ha använt bara en dimension (t.ex. tid) Till exempel:
dimensions:
time = UNLIMITED ; // (1437 currently)
depth = 10;
lat = 1437 ;
lon = 1437 ;
variables:
double time(time) ;
double lat(lat) ;
double lon(lon) ;
float temperature(time, depth) ;
EDDTableFromMultidimNcFiles har en speciell funktion för att hantera dessa filer: om du lägger till det globala attributet "treatDimensionsAs" till datamängderna globaltaddAttributesDu kan berättaERDDAP™att behandla vissa dimensioner (t.ex. lat och lon) som om de vore en annan dimension (t.ex. tid) . attributvärdet måste vara en komma separerad lista som anger de "från" dimensionerna och sedan "till" dimensionen, t.ex.,
och sedanERDDAP™Läs filen som om den vore:
dimensions:
time = UNLIMITED ; // (1437 currently)
depth = 10;
variables:
double time(time) ;
double lat(time) ;
double lon(time) ;
float temperature(time, depth) ;
Naturligtvis måste den nuvarande storleken på var och en av dimensionerna i listan vara densamma; annars,ERDDAP™kommer att behandla filen som en "Bad File".
Observera att dessa filer är ogiltiga eftersom de inte följer CF regler. Även omERDDAP™Vi rekommenderar starkt att du inte skapar filer så här eftersom andra CF-baserade mjukvaruverktyg inte kan läsa dem korrekt. Om du redan har sådana filer rekommenderar vi starkt att du ersätter dem med giltiga filer så snart som möjligt.
EDDTableFromNcFiles
EDDTableFromNcFiles aggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer ochZarrfiler filer (Från och med version 2.25) med flera variabler, var och en med en gemensam dimension (till exempel tid) eller mer än en delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) . Filerna måste ha samma dimensionsnamn. En viss fil kan ha flera värden för var och en av dimensionerna och värdena kan vara olika i olika källfiler. Filerna kan ha teckenvariabler med en extra dimension (till exempel, STRING14) . Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
Zarr-filer har något annorlunda beteende och kräver antingen filenNameRegex eller vägenRegex för att inkludera "zarr".
- Om.ncfiler använder en avCF Diskret sampling geometrier (DSG) filformat, försök att användaEDDTableFromNcCFFilesInnan du försöker detta.
- För nya tabular dataset från.ncfiler, prova nyareEDDTableFromMultidimNcFilesFörst.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Det första GenerateDatasetsXml gör för denna typ av datamängd efter att du svarat på frågorna är att skriva ut ncdump-liknande struktur av provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
DimensionsCSV GenerateDatasets Xml kommer att be om en "DimensionsCSV"-sträng. Detta är en kommaseparerad värdelista över källnamn på en uppsättning dimensioner. GenerateDatasets Xml hittar datavariablerna i.ncfiler som använder några eller alla dessa dimensioner, plus alla skalärvariabler och gör datamängden från dessa datavariabler. Om du inte specificerar ingenting (En tom sträng) GenerateDatasets Xml kommer att leta efter variablerna med de flesta dimensionerna, på teorin att de kommer att vara de mest intressanta, men det kan finnas tillfällen när du vill göra en dataset från någon annan grupp av datavariabler som använder någon annan grupp av dimensioner.
- 1D Exempel: 1D-filer skiljer sig något från 2D, 3D, 4D, ... filer.
- Du kanske har en uppsättning.ncdatafiler där varje fil har en månads värde av data från en drivande boj.
- Varje fil kommer att ha en dimension, till exempel tid (storlek =\[Många många\]) .
- Varje fil kommer att ha en eller flera 1D-variabler som använder den dimensionen, till exempel tid, longitud, latitud, lufttemperatur.
- Varje fil kan ha 2D-karaktärsvariabler, till exempel med dimensioner (tid,nCharacters) .
- 2D Exempel:
- Du kanske har en uppsättning.ncdatafiler där varje fil har en månads värde av data från en drivande boj.
- Varje fil kommer att ha 2 dimensioner, till exempel tid (storlek =\[Många många\]) och id (storlek = 1) .
- Varje fil kommer att ha 2 1D-variabler med samma namn som dimensionerna och använda samma namndimension, till exempel tid (Tid) Id (Id) . Dessa 1D-variabler bör ingå i listan över<dataVariable> är i datasetets XML.
- Varje fil kommer att ha en eller flera 2D-variabler, till exempel longitud, latitud, lufttemperatur, vattentemperatur, ...
- Varje fil kan ha 3D-karaktärsvariabler, till exempel med dimensioner (tid,id,nCharacters) .
- 3D Exempel:
- Du kanske har en uppsättning.ncdatafiler där varje fil har en månads värde av data från en stationär boj.
- Varje fil kommer att ha 3 dimensioner, till exempel tid (storlek =\[Många många\]) , lat (storlek = 1) och lon (storlek = 1) .
- Varje fil kommer att ha 3 1D-variabler med samma namn som dimensionerna och använda samma namndimension, till exempel tid (Tid) , lat (Lat) , lon (lon) . Dessa 1D-variabler bör ingå i listan över<dataVariable> är i datasetets XML.
- Varje fil kommer att ha en eller flera 3D-variabler, till exempel lufttemperatur, vattentemperatur, ...
- Varje fil kan ha 4D-karaktärsvariabler, till exempel med dimensioner (tid,lat,lon,nCharacters) .
- Filens namn kan ha bojens namn i filens namn.
- 4D Exempel:
- Du kanske har en uppsättning.ncdatafiler där varje fil har en månads värde av data från en station. Vid varje tidpunkt tar stationen avläsningar på en rad djup.
- Varje fil kommer att ha 4 dimensioner, till exempel tid (storlek =\[Många många\]) Djup (storlek =\[Många många\]) , lat (storlek = 1) och lon (storlek = 1) .
- Varje fil kommer att ha 4 1D-variabler med samma namn som dimensionerna och använda samma namndimension, till exempel tid (Tid) Djup (Djup) , lat (Lat) , lon (lon) . Dessa 1D-variabler bör ingå i listan över<dataVariable> är i datasetets XML.
- Varje fil kommer att ha en eller flera 4D-variabler, till exempel lufttemperatur, vattentemperatur, ...
- Varje fil kan ha 5D-karaktärsvariabler, till exempel med dimensioner (tid, djup,lat,lon,nCharacters) .
- Filens namn kan ha bojens namn i filens namn.
EDDTableFromNcCFFiles
EDDTableFromNcCFFiles aggregerar data aggregerar data frånNetCDF (v3 eller v4) .nc (eller.ncml) filer som använder ett av de filformat som anges avCF Diskret sampling geometrier (DSG) konventioner. Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
För filer som använder en av de multidimensionella CF DSG-varianterna, användEDDTableFromMultidimNcFilesI stället.
CF DSG-konventionerna definierar dussintals filformat och innehåller många mindre variationer. Denna klass behandlar alla de variationer vi är medvetna om, men vi kanske har missat en (eller mer) . Så om denna klass inte kan läsa data från dina CF DSG-filer, vänligennå ut för ytterligare stöd.
Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
EDDTableFromNccsvFiles
EDDTableFromNccsvFiles aggregerar data frånNCCSVASCII .csv filer. Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
Det första GenerateDatasetsXml gör för denna typ av datamängd efter att du svarat på frågorna är att skriva ut ncdump-liknande struktur av provfilen. Så om du anger några goofy svar för den första slingan genom GenerateDatasets Xml, åtminstone kan du se omERDDAP™kan läsa filen och se vilka dimensioner och variabler som finns i filen. Då kan du ge bättre svar för andra slingan genom GenerateDatasetsXml.
- Varning: NärERDDAP™Läser NCCSV-datafiler, om det hittar ett fel på en viss linje (t.ex. felaktigt antal objekt) Den loggar ett varningsmeddelande (Varning: Dålig linje (s) av data ... med en lista över de dåliga linjerna på efterföljande rader) tillLog.txt filoch sedan fortsätter att läsa resten av datafilen. Därför är det ditt ansvar att se periodiskt (Eller skriva ett manus för att göra det) för det budskapet i loggen. txt så att du kan åtgärda problemen i datafilerna.ERDDAP™är inställd på detta sätt så att användarna kan fortsätta att läsa alla tillgängliga giltiga data även om vissa rader av filen har brister.
EDDTableFromNOS
EDDTableFromNOS (Begränsad) hanterar data från enNOAA NOSkälla, som använderSOAP+XMLför förfrågningar och svar. Det är mycket specifikt förNOAANOS XML. Se provet EDDTableFromNOS dataset i dataset2.xml.
EDDTableFromOBIS
EDDTableFromOBIS hanterar data från ett Ocean Biogeographic Information System (OBIS) Server server (var http://www.iobis.org ) . Det är möjligt att det inte finns fler aktiva servrar som använder denna nu out-of-date typ av OBIS-serversystem.
- OBIS-servrar förväntar sig en XML-förfrågan och returnerar ett XML-svar.
- Eftersom alla OBIS-servrar tjänar samma variabler på samma sätt (var http://iobis.org/tech/provider/questions ) Du behöver inte ange mycket för att ställa in en OBIS dataset iERDDAP.
- Du måste inkludera en "creator\_emailattribut i den globalaaddAttributesEftersom denna information används inom licensen. En lämplig e-postadress kan hittas genom att läsa XML-svaret från sourceURL.
- Du kanske eller kanske inte kan få det globala attributet<subsetVariables>] (#subsetvariables) att arbeta med en given OBIS-server. Om du försöker, försök bara en variabel (Till exempel ScientificName eller Genus) .
EDDTableFromOBIS skelett XML
<dataset type="EDDTableFromOBIS" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<sourceCode>...</sourceCode>
<!-- If you read the XML response from the sourceUrl, the
source code (for example, GHMP) is the value from one of the
<resource><code> tags. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<-- All ...SourceMinimum and Maximum tags are OPTIONAL -->
<longitudeSourceMinimum>...</longitudeSourceMinimum>
<longitudeSourceMaximum>...</longitudeSourceMaximum>
<latitudeSourceMinimum>...</latitudeSourceMinimum>
<latitudeSourceMaximum>...</latitudeSourceMaximum>
<altitudeSourceMinimum>...</altitudeSourceMinimum>
<altitudeSourceMaximum>...</altitudeSourceMaximum>
<-- For timeSource... tags, use yyyy-MM-dd'T'HH:mm:ssZ format. -->
<timeSourceMinimum>...</timeSourceMinimum>
<timeSourceMaximum>...</timeSourceMaximum>
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1. This MUST include
"creator\_email" -->
</dataset>
EDDTableFromParquetFiles
EDDTableFromParquetFiles hanterar data frånParquet. Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Parquet är utformad för att komprimera mycket effektivt, så det kan ge dig mindre filstorlekar än andra format.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
- Varning: NärERDDAP™Läser Parquet-datafiler, om det hittar ett fel på en viss linje (t.ex. felaktigt antal objekt) Den loggar ett varningsmeddelande (Varning: Dålig linje (s) av data ... med en lista över de dåliga linjerna på efterföljande rader) tillLog.txt filoch sedan fortsätter att läsa resten av datafilen. Därför är det ditt ansvar att se periodiskt (Eller skriva ett manus för att göra det) för det budskapet i loggen. txt så att du kan åtgärda problemen i datafilerna.ERDDAP™är inställd på detta sätt så att användarna kan fortsätta att läsa alla tillgängliga giltiga data även om vissa rader av filen har brister.
EDDTableFrånSOS
EDDTableFrånSOS hanterar data från en Sensor Observation Service (SWE/SOS) Server.
- Denna datasettyp samlar in data från en grupp stationer som alla serveras av enSOSServer.
- Stationerna tjänar alla samma uppsättning variabler (Även om källan för varje station inte behöver tjäna alla variabler) .
- SOSservrar förväntar sig en XML-förfrågan och returnerar ett XML-svar.
- Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det. Det är inte lätt att generera dataset XML förSOSdatamängder för hand. För att hitta den nödvändiga informationen måste du besökasourceUrl+"? service=SOS&request=GetCapabilitiesI en webbläsare; titta på XML; gör en GetObservation begäran för hand; och titta på XML svar på begäran.
- Med enstaka tillägg av nya typer avSOSservrar och ändringar i de gamla servrarna blir det svårare förERDDAP™för att automatiskt upptäcka servertypen från serverns svar. Användningen av<ServerType > (med ett värde av IOOS_NDBC, IOOS_NOS,OOSTethyseller WHOI) är nu starkt återkallad. Om du har problem med några datamängder av denna typ, prova att köra GenerateDatasets Xml förSOSServer. Generat Dataset Xml låter dig prova de olika<ServerType> alternativ tills du hittar rätt för en viss server.
- SOSÖversikt:
-
SWE (Sensor Web Enablement) ochSOS (Sensor Observation Service) ärOpenGIS® standarder. Webbplatsen har standarddokumenten.
-
ochOGCWebbtjänster Vanlig specifikation ver 1.1.0 (OGC06-121r3) täcker konstruktion av GET och POST-frågor (se avsnitt 7.2.3 och avsnitt 9) .
-
Om du skickar en getCapabilities xml begäran till enSOSServer server (sourceUrl+ "?service=SOS&request=GetCapabilities") Du får ett xml-resultat med en lista över stationer och den observerade Egenskaper som de har data för.
-
En observedProperty är en formell URI-referens till en fastighet. Urn:ogc: fenomen: longitude:wgs84 eller https://mmisw.org/ont/cf/parameter/sea\\_water\\_temperature
-
En observedProperty är inte en variabel.
-
Mer än en variabel kan ha samma observerade Fastighet (Till exempel insideTemp och utomhus Temp kan båda ha observerat Fastighet https://mmisw.org/ont/cf/parameter/air\\_temperature ) .
-
Om du skickar en getObservation xml begäran till enSOSServer, du får ett xml-resultat med beskrivningar av fältnamn i svaret, fältenheterna och data. Fältnamnen inkluderar longitud, latitud, djup (Kanske kanske kanske) och tiden.
-
VarjedataVariableför en EDDTableFromSOSmåste innehålla en "observedProperty" -attribut, som identifierar den observeradeProperty som måste begäras från servern för att få den variabeln. Ofta fleradataVariables kommer att lista samma komposit observeradeProperty.
-
DataType för varjedataVariablekan inte specificeras av servern. Om så är fallet måste du titta på XML-datasvaren från servern och tilldela lämpligt [<DataType>s] (#datatype) i denERDDAP™DatasetdataVariabledefinitioner.
-
(Vid tidpunkten för att skriva detta) vissaSOSservrar svarar på GetObservation-förfrågningar för mer än en observerad Fastighet genom att bara returnera resultat för den första av de observeradeProperties. (Inget felmeddelande!) Se efterfrågan på konstruktionsparameter ObservedPropertiesSeparately.
-
- EDDTableFrånSOSautomatiskt lägger till
station\_id, longitude, latitude
till datamängdens globala attribut när datamängden skapas. - SOSservrar brukar uttryckaenhetermedUCUMsystem. De flestaERDDAP™servrar uttrycker enheter medUDUNITSsystem. Om du behöver konvertera mellan de två systemen kan du användaERDDAPwebbtjänst för att konvertera UCUM-enheter till/frånUDUNITS.
EDDTableFrånSOSskelett XML
<dataset type="EDDTableFromSOS" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<sosServerType>...</sosServerType> <!-- 0 or 1, but STRONGLY
RECOMMENDED. This lets you specify the type of SOS server
(so ERDDAP™ doesn't have to figure it out).
Valid values are: IOOS\_NDBC, IOOS\_NOS, OOSTethys, and WHOI. -->
<responseFormat>...</responseFormat> <!-- 0 or 1. Use this only if
you need to override the default responseFormat for the
specified sosServerType. -->
<stationIdSourceName>...</stationIdSourceName> <!-- 0 or 1.
Default="station\_id". -->
<longitudeSourceName>...</longitudeSourceName>
<latitudeSourceName>...</latitudeSourceName>
<altitudeSourceName>...</altitudeSourceName>
<altitudeSourceMinimum>...</altitudeSourceMinimum> <!-- 0 or 1 -->
<altitudeSourceMaximum>...</altitudeSourceMaximum> <!-- 0 or 1 -->
<altitudeMetersPerSourceUnit>...</altitudeMetersPerSourceUnit>
<timeSourceName>...</timeSourceName>
<timeSourceFormat>...</timeSourceFormat>
<!-- timeSourceFormat MUST be either
\* For numeric data: a UDUnits\-compatible string (with the format
"units since baseTime") describing how to interpret
source time values (for example,
"seconds since 1970-01-01T00:00:00Z"), where the
base time is an ISO 8601:2004(E) formatted date time
string (yyyy-MM-dd'T'HH:mm:ssZ).
\* For String date time data: specify
units suitable for string times
describing how to interpret string times (for example, the
ISO8601TZ\_FORMAT "yyyy-MM-dd'T'HH:mm:ssZ"). -->
<observationOfferingIdRegex>...</observationOfferingIdRegex>
<!-- Only observationOfferings with IDs (usually the station names)
which match this regular expression (tutorial) will be included
in the dataset (".+" will catch all station names). -->
<requestObservedPropertiesSeparately>true|false(default)
</requestObservedPropertiesSeparately>
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more.
\* Each dataVariable MUST include the dataType tag.
\* Each dataVariable MUST include the observedProperty attribute.
\* For IOOS SOS servers, \every\ variable returned in the text/csv
response MUST be included in this ERDDAP™ dataset definition. -->
</dataset>
EDDTableFromThreddsFiles
EDDTableFromThreddsFiles (Deprecated) aggregerar datafiler med flera variabler, var och en med en eller flera delade dimensioner (Till exempel tid, höjd (eller djup) latitud, longitud) och serveras av enTröjorOPeNDAPServer server.
- Denna dataset typ är Begränsad . Den nyare och mer generella lösningen är att använda denCache FromUrl alternativet för EDDTable FrånFiles (eller en variant) , vilket gör en lokal kopia av fjärrfilerna och tjänar data från de lokala filerna. och<cacheFromUrl> alternativet kan användas med någon typ av tabular datafil från någon webbaserad källa som publicerar en katalogliknande lista över filer. **
Om du inte kan göra det fungerar av någon anledning, e-post Chris. John på noaa.gov. Om det inte finns några klagomål före 2020 kan denna datatyp tas bort. ** - Vi rekommenderar starkt att du använderGenerateDatasets Xml programatt göra ett grovt utkast avdatasets.xmlchunk för denna dataset. Du kan sedan redigera det för att finjustera det.
- I de flesta fall har varje fil flera värden för vänster (Först först) dimension, till exempel tid.
- Filerna ofta (Men behöver inte) ha ett enda värde för de andra dimensionerna (Till exempel höjd (eller djup) latitud, longitud) .
- Filerna kan ha teckenvariabler med en extra dimension (till exempel nCharacters) .
- TREDDS-servrar kan identifieras med "/tredds/" i webbadresserna. Till exempel,
https://www.ncei.noaa.gov/thredds/catalog/uv/6h\\_strs\\_agg/catalog.html
- TREDDS servrar har kataloger på olika ställen. Denna klass kräver att webbadressen inkluderar "/thredds/catalog/". Du kan vanligtvis hitta denna variabel genom att starta i en webbläsare i rotkatalogen och sedan klicka igenom till önskad underkatalog.
- Denna klass läser katalog.xml-filer som serveras av TREDDS med listorna över<KatalogRefs> (hänvisningar till ytterligare katalog.xml-underfiler) och<Dataset>s (Datafiler) .
- och<filDir> inställning ignoreras. Eftersom denna klass laddar ner och gör en lokal kopia av varje fjärrdatafil,ERDDAP™tvingar filen Dir att vara bigParentDirectory /copy/ datasetID /.
- För<sourceUrl>, använd URL-adressen för katalog.xml-filen för datamängden i THREDDS-servern, till exempel: för denna URL som kan användas i en webbläsare, https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.html \[2020-10-21 Denna server är inte längre tillförlitligt tillgänglig.\], Användning<sourceUrl> > > > > https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.xml <///sourceUrl> > > > > (Men lägg den på en linje) .
- Eftersom denna klass alltid laddar ner och gör en lokal kopia av varje fjärrdatafil, bör du aldrig svepa den här datamängden iEDDTableCopy.
- Denna datasettyp stöder en OPTIONAL, sällan använd, speciallapp,<SpecialMode > läge </specialMode> som kan användas för att ange att särskilda, hårdkodade regler bör användas för att avgöra vilka filer som ska laddas ner från servern. För närvarande är det enda giltigt läge är SAMOS som används med datamängder från https://tds.coaps.fsu.edu/thredds/catalog/samos för att ladda ner endast filerna med det senaste versionsnumret.
- Se klassens superklass,EDDTableFromFilesför information om hur denna klass fungerar och hur man använder den.
- Se 1D, 2D, 3D och 4D-exempel förEDDTableFromNcFiles.
EDDTableFrånWFSFiler
EDDTableFrånWFSFiler (Begränsad) gör en lokal kopia av alla data från enArcGISMapServerWFSserver så att data sedan kan sparas snabbt tillERDDAP™användare.
- Du måste ange en speciellt formateradsourceUrlGlobal attribut att berättaERDDAP™Hur man begär funktionsinformation från servern. Använd detta exempel som en mall:
<att name="sourceUrl">http://*someUrl/dir1/dir2*/MapServer/WFSServer?request=GetFeature&service=WFS&typename=aasg:BoreholeTemperature&format="text/xml;%20subType=gml/3.1.1/profiles/gmlsf/1.0.0/0"</att>
(Men lägg allt på en linje)
- Du måste lägga till ett speciellt globalt attribut för att berättaERDDAP™hur man identifierar namnen på bitarna av data som ska laddas ner. Detta kommer förmodligen att fungera för alla EDDTableFromWFSFiler dataset:
<att name="rowElementXPath">/wfs:FeatureCollection/gml:featureMember</att>
- Eftersom denna klass alltid laddar ner och gör en lokal kopia av varje fjärrdatafil, bör du aldrig svepa den här datamängden iEDDTableCopy.
- Se klassens superklass,EDDTableFromFilesför ytterligare information om hur denna klass fungerar och hur man använder den.
EDDTableAggregateRows
EDDTableAggregateRows kan göra en EDDTable dataset från en grupp av "barn" EDDTable dataset.
- Här är några användningsområden för EDDTableAggregateRows:
- Du kan göra en EDDTableAggregateRows datamängd från två olika typer av filer eller datakällor, till exempel en datamängd med data upp till slutet av förra månaden lagrad i.ncCF-filer och en dataset med data för den aktuella månaden som lagras i en relationsdatabas.
- Du kan göra en EDDTableAggregateRows dataset för att hantera en förändring i källfiler (till exempel ändrade tidsformatet eller ett variabelt namn, eller data Typ/scale\_factor///add\_offsetändrad förändring) . I det här fallet skulle ett barn få data från filer som gjorts innan ändringen och det andra barnet skulle få data från filer som gjorts efter ändringen. Denna användning av EDDTableAggregateRows är ett alternativ till användningNcMLellerNCO. Om det inte finns en utmärkt funktion i filnamnen (så att du kan använda<filNameRegex> för att avgöra vilken fil som tillhör vilken barndatamängd), måste du förmodligen lagra filerna för de två barndatamängderna i olika kataloger.
- Du kan göra en EDDTableAggregateRows dataset som har en delad delmängd av variabler av en eller flera liknande men olika dataset, till exempel en dataset som gör en Profil dataset från kombinationen av en Profil dataset, en TimeSeriesProfile dataset, och en TrajectoryProfil dataset (som har vissa olika variabler och vissa variabler gemensamt - i vilket fall du måste göra speciella varianter för barndatasätten, med bara de vanliga variablerna.) .
- Du kan ha flera fristående datamängder, var och en med samma typ av data men från en annan station. Du kan lämna dessa datamängder intakt, men också skapa en EDDTableAggregateRows datamängd som har data från alla stationer - var och en av barndatamängderna kan vara en enkelEDDTableFromErddapsom pekar på en av de befintliga stationsdatamängderna. Om du gör detta, ge var och en av EDDTableFromErddap dataset en annandatasetIDän de ursprungliga fristående datamängderna, t.ex. genom att appendera "Barn" till originaletdatasetID.
- Var och en av barnet<dataset> specificerade måste vara en komplett dataset, som om det var en fristående dataset. Var och en måste ha sammadataVariablesi samma ordning, med sammadestinationNames,Datadata data Typer,missing\_values,FillValuesochenheter. Metadata för varje variabel för EDDTableAggregateRows dataset kommer från variabler i den första barndataset, men EDDTableAggregateRows kommer att uppdateraactual\_rangemetadata är det faktiska sortimentet för alla barnen.
- Rekommendation: Få var och en av barnens datamängder som fungerar som fristående datamängder. Försök sedan göra EDDTableAggregateRows dataset genom att klippa och klistra indatasets.xmlchunk för varje in i den nya EDDTableAggregate Rows dataset.
- Dataset Standard Sort Order - Ordern för barndataset bestämmer den övergripande standardtypordningen för resultaten. Naturligtvis kan användarna begära en annan sorts order för en viss uppsättning resultat genom att godkänna ochorderBy (" Sammanslagen lista över variabler ") till slutet av deras fråga.
- "källan"Globalt globalt globalt globalt Attributför EDDTableAggregateRows är den kombinerade globalaAttributer från första barndataset. EDDTableAggregate Rows kan ha en global<addAttributesAtt ge ytterligare globala attribut eller åsidosätta källkoden globala attribut.
EDDTableAggregate Rows skelett XML
<dataset type="EDDTableAggregateRows" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaFiles>true|false(default)</accessibleViaFiles>
<!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<dataset>...</dataset> <!-- 1 or more -->
</dataset>
EDDTableCopy
EDDTableCopy kan göra en lokal kopia av många typer av EDDTable dataset och sedan spara data snabbt från den lokala kopian.
- EDDTableCopy (och för nätdata,EDDGridKopiera) är mycket lätt att använda och en mycket effektiv lösning på några av de största problemen med att betjäna data från fjärrdatakällor:
- Att komma åt data från en fjärrdatakälla kan vara långsamt.
- De kan vara långsamma eftersom de är i sig långsamma (en ineffektiv typ av server) ,
- eftersom de är överväldigade av för många förfrågningar,
- eller för att din server eller fjärrservern är bandbredd begränsad.
- Fjärrdatasetet är ibland otillgängligt (igen, av olika skäl) .
- Att förlita sig på en källa för data skalas inte bra (när många användare och mångaERDDAPAnvänd den) .
- Att komma åt data från en fjärrdatakälla kan vara långsamt.
- Hur det fungerar - EDDTableCopy löser dessa problem genom att automatiskt göra och upprätthålla en lokal kopia av data och betjäna data från den lokala kopian.ERDDAP™kan tjäna data från den lokala kopian mycket, mycket snabbt. Och att göra och använda en lokal kopia lindrar bördan på fjärrservern. Och den lokala kopian är en säkerhetskopia av originalet, vilket är användbart om något händer med originalet.
Det finns inget nytt om att göra en lokal kopia av en dataset. Vad som är nytt här är att denna klass gör det\*lätt\*att skapa och\*upprätthålla\*en lokal kopia av data från en\*variation\*av typer av fjärrdatakällor och\*Lägg till metadata\*medan du kopierar data.
EDDTableCopy vs<cacheFromUrl>
<cacheFromUrl> är ett alternativ till EDDTableCopy. De arbetar annorlunda.
- EDDTable Kopiera fungerar genom att begära bitar av data från en fjärrtjänst och lagra dessa bitar i lokala filer. Därför är EDDTableCopy användbart i vissa fall där data är tillgänglig via en fjärrtjänst.
- [Och [Gud]<cacheFromUrl>] (#cachefromurl) hämtar de befintliga filerna som anges på en fjärrwebbplats.<cacheFromUrl> är lättare att använda och mer tillförlitlig eftersom det enkelt kan berätta när det finns en ny fjärrdatafil eller när en fjärrdatafil har ändrats och därmed måste laddas ner.
Om det finns situationer där EDDTableCopy eller<cacheFromUrl> kan användas, använd<cacheFromUrl> eftersom det är lättare och mer tillförlitligt.
<ExtractDestination Namn & gt;
EDDTable Kopiera gör den lokala kopian av data genom att begära bitar av data från fjärrdatamängden. EDDTable Copy bestämmer vilka bitar att begära genom att begära & Distinct () värden för<ExtractDestinationNames> (specificeras idatasets.xmlSe nedan) , som är de utrymmesseparerade destinationsnamnen på variabler i fjärrdatamängden. Till exempel,
<extractDestinationNames>drifter profile</extractDestinationNames>
kan ge distinkta värden kombinationer av drivmedel = tig17,profil = 1017, drivmedel = tig17,profil = 1095, ... drivkraft = o12,profil = 1223, drivkraft = o12, profil = 1251, ....
I situationer där en kolumn (Till exempel profil) kan vara allt som krävs för att unikt identifiera en grupp rader av data, om det finns ett mycket stort antal, till exempel profiler, kan det vara användbart att också ange ett extrakt. Destination Namnnamn (Till exempel drifter) som tjänar till att dela profilerna. Det leder till färre datafiler i en viss katalog, vilket kan leda till snabbare åtkomst.
Lokala filer
Varje bit data lagras i en separatNetCDFfil i en underkatalog över bigParentDirectory /copy/ datasetID /// (som anges isetup.xml) . Det finns en underkatalog nivå för alla utom den sista extraktDestinationName. Till exempel skulle data för tig17+1017 lagras i bigParentDirectory /copy/sampleDataset/tig17/1017.nc. Till exempel skulle data för une12+1251 lagras i bigParentDirectory /copy/sampleDataset/une12/1251.nc. Katalog och filnamn som skapats av datavärden ändras för att göra dem filnamnssäkra (Till exempel ersätts utrymmen med "x20") Detta påverkar inte själva data.
Nya data
Varje gång EDDTable Kopiera laddas om, det kontrollerar fjärrdataset för att se vilka distinkta bitar som finns tillgängliga. Om filen för en bit data inte redan finns, läggs en begäran om att få biten till i en kö.ERDDAP"S uppgiftThread processer alla köförfrågningar om bitar av data, en-för-en. Du kan se statistik för uppgiftenThreads aktivitet påStatus Pageoch iDaglig rapport. (Ja, ja,ERDDAP™kan tilldela flera uppgifter till denna process, men det skulle använda upp massor av fjärrdatakällans bandbredd, minne och CPU-tid, och massor av lokalbefolkningen.ERDDAPBandbredd, minne och CPU-tid, ingen av dem är en bra idé.)
Första gången en EDDTableCopy laddas, (Om allt går bra) Många förfrågningar om bitar av data kommer att läggas till i uppgiftThreads kö, men inga lokala datafiler kommer att ha skapats. Så konstruktören kommer att misslyckas men uppgiftThread kommer att fortsätta att fungera och skapa lokala filer. Om allt går bra kommer uppgiftenThread att göra några lokala datafiler och nästa försök att ladda om datamängden. (I ~15 minuter) kommer att lyckas, men först med en mycket begränsad mängd data.
OBS: När den lokala datamängden har lite data och visas i dinERDDAPOm fjärrdatamängden tillfälligt eller permanent inte är tillgänglig kommer den lokala datamängden fortfarande att fungera.
VARNING: Om fjärrdatamängden är stor och/eller fjärrservern är långsam (Det är problemet, eller hur?!) Det tar lång tid att göra en komplett lokal kopia. I vissa fall är den tid som behövs oacceptabel. Till exempel överför 1 TB data över en T1-linje (0,15 GB/s) tar minst 60 dagar, under optimala förhållanden. Dessutom använder den massor av bandbredd, minne och CPU-tid på fjärr- och lokala datorer. Lösningen är att skicka en hårddisk till administratören av fjärrdatauppsättningen så att han / hon kan göra en kopia av datamängden och skicka hårddisken tillbaka till dig. Använd dessa data som utgångspunkt och EDDTableCopy kommer att lägga till data. (Det är så Amazons EC2 Cloud Service brukade hantera problemet, även om deras system har massor av bandbredd.)
VARNING: Om en given kombination av värden försvinner från en fjärrdatamängd tar EDDTableCopy inte bort den lokala kopierade filen. Om du vill kan du ta bort det själv.
TableCopy<checkSourceData>
ochdatasets.xmlför denna dataset kan ha en valfri tagg
<checkSourceData>true</checkSourceData>
Standardvärdet är sant. Om/när du ställer in den till falsk, kommer datamängden aldrig att kontrollera källdatamängden för att se om det finns ytterligare data tillgängliga.