Lucrul cudatasets.xmlFișier
\[Această pagină web va fi doar de interesERDDAP™Administratori.\]
După ce aţi urmatERDDAP™ instrucțiuni de instalare, trebuie să editațidatasets.xmlfișier în Tomcat /content/erddap/ pentru a descrie seturile de date pe care leERDDAP™instalarea va servi.
Puteți vedea un exempludatasets.xmlprivind GitHub.
Introducere
Unele adunări sunt necesare
Crearea unui set de date înERDDAP™nu este doar o chestiune de a indica la directorul setului de date sau URL. Trebuie să scrii o bucată de XML pentrudatasets.xmlcare descrie setul de date.
- Pentru seturile de date grupate, pentru a face setul de date conform cuERDDAP"Structura de date pentru datele în rețea, trebuie să identifice un subset de variabile ale setului de date care au aceleași dimensiuni. (De ce? Cum?)
- Metadatele curente ale setului de date sunt importate automat. Dar dacă doriți să modificați metadatele sau să adăugați alte metadate, trebuie să-l specificați îndatasets.xml. Şi...ERDDAP™necesită alte metadate, inclusivatribute globale (cum ar fiinfoUrl, instituţie,sourceUrl, rezumat și titlu) şiatribute variabile (cum ar filong\_nameși unități) . La fel cum metadatele care se află în prezent în setul de date adaugă informații descriptive setului de date, metadatele solicitate deERDDAP™adaugă informații descriptive setului de date. Metadate suplimentare este o completare bună la setul de date și ajutăERDDAP™face o treabă mai bună de a prezenta datele dumneavoastră utilizatorilor care nu sunt familiarizați cu ea.
- ERDDAP™trebuie să faci lucruri speciale culongitudine, latitudine, altitudine (sau adâncime) , și variabile de timp.
Dacă cumpărați în aceste idei și cheltui efortul de a crea XML pentrudatasets.xml, ai toate avantajele deERDDAP™, inclusiv:
- Căutare text complet pentru seturi de date
- Caută seturi de date pe categorii
- Formulare de acces la date ( datasetID .html) astfel încât să puteți solicita un subset de date în multe formate de fișiere diferite
- Formulare pentru solicitarea graficelor și hărților ( datasetID .graph)
- Serviciul harta web (WMS) pentru seturi de date în rețea
- RESTfulacces la datele dumneavoastră
Realizareadatasets.xmlnecesită eforturi considerabile pentru primele seturi de date, dar Devine mai uşor. . După primul set de date, puteți folosi adesea o mulțime de muncă pentru următorul set de date. Din fericire,ERDDAP™vine cu douăUneltepentru a vă ajuta să creați XML pentru fiecare set de date îndatasets.xml. Dacă te blochezi, ne vezisecțiunea privind obținerea de sprijin suplimentar.
Furnizor de date Forma
Când un furnizor de date vine la tine în speranța de a adăuga unele date la dvs.ERDDAP, poate fi dificil și consumatoare de timp pentru a colecta toate metadatele (informații privind setul de date) necesar pentru adăugarea setului de date înERDDAP. Multe surse de date (de exemplu, fișiere .csv; Fișiere Excel, baze de date) nu au metadate interne, deciERDDAP™are un formular de furnizor de date care colectează metadate de la furnizorul de date și oferă furnizorului de date alte orientări, inclusiv orientări extinse pentruDate în baze de date. Informațiile transmise se convertesc îndatasets.xmlformat și apoi e-mailat laERDDAP™administrator (Tu) şi scris (anexată) la Big ParentDirectory /loguri/dateProviderForm.log . Astfel, forma semi-automate procesul de a obține un set de date înERDDAPDarERDDAP™administratorul încă trebuie să completezedatasets.xmlbucată și se ocupă cu obținerea fișierului de date (s) de la furnizor sau conectarea la baza de date.
Prezentarea de fișiere de date reale din surse externe este un risc imens de securitate, astfel încâtERDDAP™nu se ocupă cu asta. Trebuie să găsiți o soluție care funcționează pentru dvs. și furnizorul de date, de exemplu, e-mail (pentru fișiere mici) , trage din nor (de exemplu, DropBox sau Google Drive) , un site sftp (cu parole) , sau adidași Net (un hard disk USB sau un hard disk extern) . Probabil că ar trebui să accepţi doar dosarele celor pe care îi cunoşti. Va trebui să scanați fișierele pentru viruși și să luați alte măsuri de precauție de securitate.
Nu există nicio legătură.ERDDAP™la forma furnizorului de date (de exemplu, peERDDAP™pagina de start) . În schimb, atunci când cineva vă spune că doresc să aibă datele lor deservite de dvs.ERDDAP, le puteți trimite un e-mail spunând ceva de genul: Da, putem obține datele dumneavoastră înERDDAP. Pentru a începe, vă rugăm să completați formularul la https://yourUrl/erddap/dataProviderForm.html (sauhttp://dacăhttps://nu este activat) . După ce termini, te voi contacta pentru a stabili detaliile finale. Dacă vrei doar să te uiţi la formular (fără a completa) , puteți vedea formularul peERD'sERDDAP:Introducere,Partea 1,Partea 2,Partea 3, șiPartea 4. Aceste link-uri peERD ERDDAP™trimite-mi informaţii, nu tu, aşa că nu trimite informaţii cu ei decât dacă vrei să adaugi dateERD ERDDAP.
Dacă doriți să eliminați formularul de furnizor de date dinERDDAP™, pune
<dataProviderFormActive>false</dataProviderFormActive>
în fișierul setup.xml.
Impulsul pentru acest lucru a fostNOAA's 2014Accesul public la rezultatele cercetării (PARR) Directiva, care necesită că toateNOAAdatele de mediu finanțate prin dolari contribuabili să fie puse la dispoziție prin intermediul unui serviciu de date (nu doar fișiere) în termen de 12 luni de la creare. Deci există un interes crescut în utilizareaERDDAP™punerea la dispoziție a seturilor de date prin intermediul unui serviciu ASAP. Aveam nevoie de un mod mai eficient de a trata un număr mare de furnizori de date.
Feedback/Sugestii? Acest formular este nou, așa că vă rugăm să e-mailerd dot data at noaa dot govdacă aveți orice feedback sau sugestii pentru îmbunătățirea acestui lucru.
Unelte
ERDDAP™vine cu două programe de linie de comandă care sunt instrumente pentru a vă ajuta să creați XML pentru fiecare set de date pe care doriți dvs.ERDDAP™pentru a servi. Odată ce ați înființatERDDAP™si sa-l ruleze (cel puțin o dată) , puteți găsi și utiliza aceste programe în Tomcat /webapps/erddap/WEB-INF director. Există Linux / Unix scripturi shell (cu extensia .sh) și Windows scripturi (cu extensia .bat) pentru fiecare program.\[Pe Linux, executați aceste instrumente ca același utilizator (Tomcat?) care va rula Tomcat.\]Când executați fiecare program, vă va pune întrebări. Pentru fiecare întrebare, tastaţi un răspuns, apoi apăsaţi Enter. Sau apăsați ^C pentru a ieși dintr-un program în orice moment.
Programul nu va rula?
- Dacă aveţi un program necunoscut (sau similare) mesaj de eroare, problema este, probabil, că sistemul de operare nu a putut găsiJava. Trebuie să-ţi dai seama undeJavaeste pe computerul dvs., apoi editați referința java în .bat sau .sh fișier pe care încercați să utilizați.
- Dacă obțineți un fișier borcan care nu a fost găsit sau o clasă de mesaje de eroare găsite, atunciJavanu a putut găsi una dintre clasele enumerate în .bat sau .sh fișier încercați să utilizați. Soluţia este să ne dăm seama unde este acel fişier .jar şi să edităm referinţa java la acesta în fişierul .bat sau .sh.
- Dacă utilizaţi o versiune deJavacare este prea vechi pentru un program, programul nu va rula și veți vedea un mesaj de eroare ca
Excepție în fir "main" java.lang.Clasă nesuportatăVersiuneError:
unele/clasă/nume : versiune majoră nesusţinută.minor un număr
Soluţia este de a actualiza la cea mai recentă versiune aJavași asigurați-vă că fișierul .sh sau .bat pentru programul este folosind.
Instrumentele tipăresc diferite mesaje de diagnosticare:
- Cuvântul "ERROR" este folosit atunci când ceva a mers atât de greșit încât procedura nu a reușit să se finalizeze. Deși este enervant pentru a obține o eroare, eroarea te forțează să se ocupe de problema.
- Cuvântul "WORGING" este folosit atunci când ceva a mers prost, dar procedura a fost în măsură să fie finalizată. Acestea sunt destul de rare.
- Orice altceva este doar un mesaj informativ. Puteți adăuga \-verbose laGenereazăSeturi de dateXmlsauDasDdslinie de comandă pentru a obține mesaje suplimentare informative, care ajută uneori rezolva probleme.
Cele două instrumente sunt un mare ajutor, dar tot trebuie să citiţi cu atenţie toate aceste instrucţiuni de pe această pagină şi să luaţi singuri decizii importante.
GenereazăSeturi de dateXml
- GenereazăSeturi de dateXml este un program de linie de comandă care poate genera un proiect dur al XML-ului setului de date pentru aproape orice tip de set de date.
RECOMANDĂM STRÂNGEL că folosiţi Seturi de Date Generate Xml în loc de a crea bucăți dedatasets.xmlde mână deoarece:
- Generează dateName Xml funcționează în câteva secunde. Să faci asta manual e cel puţin o oră de muncă, chiar şi când ştii ce faci.
- Generează dateName Xml face o treabă mai bună. Faptul de a face acest lucru cu mâna necesită cunoştinţe ample despre cumERDDAP™funcţionează. Este puţin probabil să faceţi o treabă mai bună manual. (Bob Simons folosește întotdeauna GenerateDatasets Xml pentru prima schiță, și el a scrisERDDAP.)
- Generează dateName Xml generează întotdeauna o bucată validă dedatasets.xml. Orice bucată dedatasets.xmlcă scrie va avea, probabil, cel puțin câteva erori care previnERDDAP™din încărcarea setului de date. Adesea le ia ore întregi oamenilor să diagnosticheze aceste probleme. Nu-ţi pierde timpul. Să generăm Setări de date Xml face munca grea. Apoi puteți rafina .xml de mână, dacă doriți.
Când utilizați GenerateDateSets Program Xml:
- Pe Windows, prima dată când executați GenerateDatesetsXml, aveți nevoie pentru a edita fișierul GenerateDatesetsXml.bat cu un editor de text pentru a schimba calea către Java. exe fişier astfel încât Windows poate găsiJava.
- Generează dateName Xml vă cere mai întâi să specificați EDDType (Erd Dap Dataset Tip) a setului de date. VeziLista tipurilor de seturi de date (în prezentul document) să își dea seama care este tipul adecvat pentru setul de date la care lucrați. Pe lângă EDDTypes regulate, există, de asemenea, câtevaTipuri speciale de date/Pseudo (de exemplu, unul care se târăște un catalog THREDS pentru a genera o bucată dedatasets.xmlpentru fiecare set de date din catalog) .
- Generează dateName Xml vă pune apoi o serie de întrebări specifice acestui EDDType. Întrebările adună informaţiile necesareERDDAP™pentru a accesa sursa setului de date. Pentru a înțelege ceERDDAP™cere, a se vedea documentația pentru EDDType pe care ați specificat-o făcând clic pe același tip de set de date înLista tipurilor de seturi de date.
Dacă aveți nevoie pentru a introduce un șir de caractere speciale (de exemplu, caractere whitespace la început sau la sfârșit, caractere non-ASCII) , introduceţi oSfoara JSON (cu caractere speciale scăpat cu caractere \) . De exemplu, pentru a introduce doar un personaj tab, introduceți "\t" (cu ghilimele duble din jur, care spunERDDAP™că aceasta este o coardă stil JSON.
- De multe ori, unul dintre raspunsurile tale nu va fi ceea ce GenerateDatasetsXml are nevoie. Puteți încerca din nou, cu răspunsuri revizuite la întrebări, până la GenerateDatesets Xml poate găsi și înțelege cu succes datele sursă.
- Dacă răspundeţi corect la întrebări (sau suficient de corect) , Generează date Xml se va conecta la sursa setului de date și va colecta informații de bază (de exemplu, nume și metadate variabile) . Pentru seturile de date de la nivel localNetCDF .ncși fișiere conexe, GenerateDatasets Xml va imprima adesea structura ncdump-ca a fișierului după ce citește mai întâi fișierul. Acest lucru vă poate oferi informații pentru a răspunde mai bine la întrebări pe o buclă ulterioară prin GenerateDateSetsXml.
- Generează dateName Xml va genera apoi un proiect dur al XML-ului setului de date pentru acel set de date.
- Informații de diagnosticare și proiectul dur al setului de date XML vor fi scrise la Big ParentDirectory /logs/GenerateDatasetsXml.log .
- Proiectul brut al setului de date XML va fi scris la Big ParentDirectory /logs/GenerateDatasetsXml.out.
"0 fișiere" Mesaj eroare
Dacă executați GenerateDatasets Xml sauDasDds, sau dacă încercați să încărcați unEDDGridDin... Dosare sau EDD Table From... Set de fișiere înERDDAP™, și veți obține un mesaj de eroare "0 fișiere" indicând faptul căERDDAP™găsit 0 fișiere de potrivire în dosar (atunci când crezi că există fișiere de potrivire în acel director) :
-
Verificați dacă ați specificat numele complet al dosarului. Și dacă ați specificat numele de fișier al eșantionului, asigurați-vă că ați specificat numele complet al fișierului, inclusiv numele dosarului complet.
-
Verificați dacă fișierele sunt într-adevăr în acel director.
-
Verifică ortografia numelui directorului.
-
Verificați fișierulNameRegex. E foarte uşor să faci greşeli cu regexurile. Pentru teste, încercați regex .\* care ar trebui să se potrivească cu toate numele de fișiere. (Vezi asta?documentația regexşitutorial regex.)
-
Verificați dacă utilizatorul care rulează programul (de exemplu, utilizator=tomcat (?) pentru Tomcat/ERDDAP) are permisiunea "citeste" pentru acele fisiere.
-
În unele sisteme de operare (de exemplu, SELinux) și în funcție de setările de sistem, utilizatorul care a rulat programul trebuie să aibă permisiune "citește" pentru întregul lanț de directoare care duce la directorul care are fișierele.
-
Dacă ai probleme pe care nu le poţi rezolva,solicitarea de sprijincu cât mai multe informaţii posibil. În mod similar, în cazul în care se pare că EDDType adecvat pentru un anumit set de date nu funcționează cu acel set de date sau în cazul în care nu există un EDDType adecvat, vă rugăm să completați un dosarproblema GitHubcu detaliile (și un fișier de eșantionare, dacă este cazul) .
Aveți nevoie pentru a edita ieșire de la GenerateDatasets Xml pentru a face mai bine.
-
Disclamer: CHUNKdatasets.xmlMADE BE GenerateDateName Xml nu e perfect. Trebuie să citiți și să editați XML-ul înainte de a-l utiliza într-un publicERDDAP. Generează dateName Releele Xml pe o mulțime de reguli-of-thumb care nu sunt întotdeauna corecte. Sunteți responsabil pentru asigurarea corectitudinii XML pe care le adăugațiERDDAP'Sdatasets.xmlDosarul.
(Nu ţip. Din motive juridice istorice, disclamaţii trebuie să fie scrise în toate capacele.)
Producția de GenerateDatasetsXml este un proiect dur. Aproape întotdeauna va trebui să-l editați. Am făcut și continuăm să facem un efort imens pentru a face producția cât mai gata de plecare posibil, dar există limite. Adesea, informațiile necesare nu sunt pur și simplu disponibile din metadatele sursă.
O problemă fundamentală este că cerem un program de calculator (GenereazăSeturi de dateXml) Pentru a face o sarcină în cazul în care, dacă ați dat aceeași sarcină la 100 de persoane, v-ar obține 100 de rezultate diferite. Nu există un singur răspuns corect. Evident, programul vine cel mai aproape de citirea minții lui Bob (Nu a ta.) , dar chiar și așa, nu este un program all-înțelegere AI, doar o grămadă de euristics cobbled împreună pentru a face o sarcină AI-ca. (Acea zi a unui program All-înțelegere AI poate veni, dar nu a încă. Dacă da, noi oamenii putem avea probleme mai mari. Ai grijă ce-ţi doreşti.)
-
În scopuri informaţionale, rezultatele arată sursa globalăAttributes şi sursa variabilăAttributes ca comentarii.ERDDAP™combină sursaAttributes șiaddAttributes (care au prioritate) pentru a face combinat Atribute care sunt afișate utilizatorului. (Și alte atribute sunt adăugate automat la longitudine, latitudine, altitudine, adâncime și variabile de timp atunci cândERDDAP™face de fapt setul de date) .
-
Dacă nu vă place o sursăAttribute, suprascrieți-l prin adăugarea unui addAttribute cu același nume, dar o valoare diferită (sau nici o valoare, dacă doriți să-l eliminați) .
-
ToateaddAttributessunt sugestii generate de calculator. Editează-le! Dacă nu-ţi place un addAttribute, schimbă-l.
-
Dacă doriți să adăugați alteleaddAttributes, adăugați-le.
-
Dacă vrei să schimbidestinationNameSchimbă-l. Dar nu te schimba.sourceNamec.
-
Puteți schimba ordineadataVariables sau eliminaţi oricare dintre acestea.
- Puteți folosi apoiDasDds (vezi mai jos) pentru a testa în mod repetat XML-ul pentru acel set de date pentru a se asigura că setul de date rezultat apare așa cum doriți să apară înERDDAP.
- Simțiți-vă liber pentru a face mici modificări ladatasets.xmlbucată care a fost generată, de exemplu, furnizarea unei mai buneinfoUrl, rezumat, sau titlu.
nu adăugați denumiri standard
Dacă includeți \-doNotAdd StandardNames ca parametru de linie de comandă atunci când executați generați Setări de date Xml, genera Setări de date Xml nu va adăugastandard\_namelaaddAttributespentru orice variabile, altele decât variabilele numite latitudine, longitudine, altitudine, adâncime sau timp (care au evidentstandard\_names) . Acest lucru poate fi util dacă utilizați ieșirea de la generarea Setări de date Xml direct înERDDAP™fără editarea ieșirii, deoarece generează Setări de date Xml ghicește adeseastandard\_namenu este corect. (Rețineți că vă recomandăm întotdeauna să editați ieșirea înainte de a o utiliza înERDDAP.) Folosind acest parametru va avea alte efecte minore legate de deoarece ghicitstandard\_nameeste adesea utilizat în alte scopuri, de exemplu pentru a crea un noulong\_name, și pentru a crea setările colorBar .
Scriptare
Ca alternativă la răspunsul interactiv la întrebări la tastatură și la buclarea pentru a genera seturi de date suplimentare, puteți oferi argumente linia de comandă pentru a răspunde la toate întrebările pentru a genera un set de date. Generează dateName Xml va procesa acei parametri, scrie ieșire la fișierul de ieșire, și ieși din program.
Pentru a configura acest lucru, utilizați mai întâi programul în modul interactiv și scrieți răspunsurile. Iată un exemplu parțial: Să spunem că rulați script-ul: ./GenerateDatasetsXml.sh Apoi introduceți: EDD Tabel FromAsciiFiles Apoi introduceți: /u00/data/ Apoi introduceți: .\\ . Asc Apoi introduceți: /u00/data/probaFile.asc Apoi introduceți: ISO-8859-1
Pentru a rula acest lucru într-un mod inactiv, utilizați această linie de comandă: ./GenerateDatesetsXml.sh EDDTabel FromAsciiFiles /u00/data/.\.asc /u00/data/probaFile.asc ISO-8859-1 Deci, în principiu, trebuie doar lista toate răspunsurile pe linia de comandă. Acest lucru ar trebui să fie util pentru seturile de date care se modifică frecvent într-un mod care necesită refuncționarea datelor generate Xml (în specialEDDGridDe la ThreddsCatalog) .
Detalii:
- Dacă un parametru conține un spațiu sau un caracter special, atunci codați parametrul ca oSfoara JSON, de exemplu, "parametrul meu cu spații și două\nlinii."
- Dacă doriți să specificați un șir gol ca parametru, utilizați: nimic
- Dacă doriți să specificați valoarea implicită a unui parametru, utilizați: implicit
- Generează dateName Xml suportă a -i Seturi de date XmlName # Nume etichetă parametrul liniei de comandă care introduce ieșirea în specificatdatasets.xmlfișier (implicit este Tomcat /content/erddap/datasets.xml) . Generează dateName Xml caută două linii în seturi de date XmlName:
<!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->
şi
<!-- End GenerateDatasetsXml #*tagName someDatetime* -->
şi înlocuieşte totul între aceste linii cu noul conţinut, şi schimbă cevaDatetime.
- Comutatorul-i este doar procesat (și modificări aledatasets.xmlsunt făcute doar) dacă executați GenerateDatasets Xml cu argumente linia de comandă care specifică toate răspunsurile la toate întrebările pentru o buclă a programului. (A se vedea "Scripting" de mai sus.) (Gândirea este: Acest parametru este utilizat cu scripturi. Dacă utilizați programul în modul interactiv (tastarea informațiilor de pe tastatură) , sunt susceptibile de a genera unele bucăți incorecte de XML înainte de a genera cel pe care doriți.)
- Dacă liniile de început și de sfârșit nu sunt găsite, atunci aceste linii și noul conținut sunt introduse chiar înainte de</erddapDatasets>.
- Există, de asemenea, un -I (Capitalul i) comutator în scopuri de testare care funcționează la fel ca -i, dar creează un fișier numitdatasets.xml Data și nu face modificări ladatasets.xml.
- Nu rulați GenerateDatesets Xml cu -i în două procese simultan. Există o şansă ca un singur set de schimbări să fie păstrat. S-ar putea să fie probleme serioase. (de exemplu, fișiere corupte) .
Dacă utilizați "GenerateDatesetsXml -verbose," acesta va imprima mai multe mesaje de diagnosticare decât de obicei.
Tipuri speciale de date/Pseudo
În general, opțiunile EDDType în GenerateDatasets Potrivire Xml a tipurilor de EDD descrise în acest document (veziLista tipurilor de seturi de date) și să genereze unuldatasets.xmlbucată pentru a crea un set de date dintr-o sursă de date specifică. Există câteva excepţii şi cazuri speciale:
EDDGridFromErddap
Acest Tip EDD generează toatedatasets.xmlbucăți necesare pentru a faceEDDGridFromErddapseturi de date din toateEDDGridSeturi de date la distanțăERDDAP. Veți avea opțiunea de a păstra originaluldatasetIDs (care poate duplica uneledatasetIDe deja în dumneavoastrăERDDAP) sau generarea de nume noi care vor fi unice (dar de obicei nu sunt atât de uşor de citit.) .
Tabel EDD FromErddap
Acest Tip EDD generează toatedatasets.xmlbucăți necesare pentru a faceTabel EDD FromErddapSeturi de date din toate seturile de date ale tabelului EDD într-o telecomandăERDDAP. Veți avea opțiunea de a păstra originaluldatasetIDs (care poate duplica uneledatasetIDe deja în dumneavoastrăERDDAP) sau generarea de nume noi care vor fi unice (dar de obicei nu sunt atât de uşor de citit.) .
EDDGridDe la ThreddsCatalog
Acest Tip EDD generează toatedatasets.xmlbucăți necesare pentru toateEDDGridFromDapseturi de date pe care le poate găsi târându-se recursiv printr-un THREDS (sub) catalog. Există multe forme de URL-uri catalog THREDS. Această opțiune REquires a THREDS .xml URL cu /catalog / în ea, de exemplu,
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml sau
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(un catalog legat de .html este la
https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html , care nu este acceptabil pentruEDDGridFromThreddsCatalog).
Dacă aveţi probleme cuEDDGridDin trei mii Catalog:
- Asigurați-vă că URL-ul pe care îl utilizați este valid, include /catalog/, și se termină cu /catalog.xml .
- Dacă este posibil, utilizați o adresă IP publică (de exemplu, https://oceanwatch.pfeg.noaa.gov ) în URL, nu o adresă locală numerică IP (de exemplu, https://12.34.56.78 ) . Dacă THREDDS este accesibil numai prin intermediul adresei IP numerice locale, puteți utiliza [<Traducerea şi adaptarea: (#convertto publicsourceurl) Deci...ERDDAP™utilizatorii văd adresa publică, chiar dacăERDDAP™Obţine date de la adresa numerică locală.
- Dacă ai probleme pe care nu le poţi rezolva,Verificați vârfurile de depanare.
- Codul de nivel scăzut pentru acest lucru folosește acumUnidatacod netcdf-java catalog crawler (Trei. clase de catalog) astfel încât să se poată ocupa de toate cataloagele TREDDS (care poate fi surprinzător de complex) MulţumităUnidatapentru acel cod.
EDDGridLonPM180FromErddapCatalog
Acest Tip EDD genereazădatasets.xmlpentru a faceEDDGridLonPM180seturi de date din toateEDDGridSeturi de date într-unERDDAPcare au valori de longitudine mai mari de 180.
- Dacă este posibil, utilizați o adresă IP publică (de exemplu, https://oceanwatch.pfeg.noaa.gov ) în URL, nu o adresă locală numerică IP (de exemplu, https://12.34.56.78 ) . DacăERDDAP™este accesibil numai prin intermediul adresei IP numerice locale, puteți utiliza [<Traducerea şi adaptarea: (#convertto publicsourceurl) Deci...ERDDAP™utilizatorii văd adresa publică, chiar dacăERDDAP™Obţine date de la adresa numerică locală.
EDDGridLon0360FromErddapCatalog
Acest Tip EDD genereazădatasets.xmlpentru a faceEDDGridLon0360seturi de date din toateEDDGridSeturi de date într-unERDDAPcare au valori de longitudine mai mici de 0.
- Dacă este posibil, utilizați o adresă IP publică (de exemplu, https://oceanwatch.pfeg.noaa.gov ) în URL, nu o adresă locală numerică IP (de exemplu, https://12.34.56.78 ) . DacăERDDAP™este accesibil numai prin intermediul adresei IP numerice locale, puteți utiliza [<Traducerea şi adaptarea: (#convertto publicsourceurl) Deci...ERDDAP™utilizatorii văd adresa publică, chiar dacăERDDAP™Obţine date de la adresa numerică locală.
EDD din dosare
Având în vedere un director de pornire, acest lucru traversează directorul și toate subdirectoarele și încearcă să creeze un set de date pentru fiecare grup de fișiere de date pe care le găsește.
- Acest lucru presupune că, atunci când se găsește un set de date, setul include toate subdirecțiile.
- În cazul în care se găsește un set de date, directoarele similare vor fi tratate ca seturi de date separate (De exemplu, directoarele pentru anii 1990, 2000, 2010 vor genera seturi de date separate) . Acestea ar trebui să fie ușor de combinat manual -- doar modificați primul set de date<fileDir> la directorul-mamă și ștergeți toate setările de date pentru frați ulterioare.
- Acest lucru va încerca doar să genereze o bucată dedatasets.xmlpentru cel mai comun tip de extensie a fișierului într-un director (fără numărarea .md5, care este ignorat) . Deci, dat un director cu 10.ncfișiere și 5 fișiere .txt, va fi generat un set de date pentru.ncDoar dosare.
- Aceasta presupune că toate fișierele dintr-un director cu aceeași extensie aparțin aceluiași set de date. Dacă un director are ceva.ncfișiere cu date SST și unele.ncfișiere cu date clorofila, doar un eșantion.ncfișierul va fi citit (SST? clorofilă?) și doar un set de date va fi creat pentru acest tip de fișier. Acest set de date nu va fi probabil încărcat din cauza complicațiilor de la încercarea de a încărca două tipuri de fișiere în același set de date.
- Dacă există mai puțin de 4 fișiere cu cea mai comună extensie într-un director, acest lucru presupune că acestea nu sunt fișiere de date și pur și simplu sare peste director.
- Dacă există 4 sau mai multe fișiere într-un director, dar acest lucru nu poate genera cu succes o bucată dedatasets.xmlpentru fișiere (de exemplu, un tip de fișier nesuportat) , acest lucru va genera unTabel EDDFromFileNamesSet de date pentru fișiere.
- La sfârșitul diagnosticului că acest lucru scrie la fișierul jurnal, chiar înainte dedatasets.xmlBucăţi, asta va imprima o masă cu un rezumat al informaţiilor adunate traversând toate subdirectoarele. Tabelul va lista fiecare subdosar și va indica cel mai comun tip de extensie a fișierului, numărul total de fișiere și ce tip de set de date a fost creat pentru aceste fișiere (dacă este cazul) . Dacă vă confruntaţi cu o structură complexă, adânc cuibărită de fişiere, luaţi în considerare funcţionarea GenerateDatesets Xml cu EDDType=EDDsFromFiles doar pentru a genera aceste informații,
- Această opțiune nu poate face o treabă bună de ghicit cel mai bun EDDType pentru un anumit grup de fișiere de date, dar este rapid, ușor, și merită o încercare. Dacă fișierele sursă sunt potrivite, funcționează bine și este un bun prim pas în generareadatasets.xmlpentru un sistem de fișiere cu multe subdirectoare, fiecare cu fișiere de date din seturi de date diferite.
Tabel EDDFromEML și tabel EDDFromEMLBatch
Aceste tipuri speciale de EDD genereazădatasets.xmlpentru a face oTabel EDD din AsciiFilesSet de date din fiecare tabel descris într-unLimbajul metadatelor ecologiceFișier XML. Varianta "Batch" funcționează pe toate fișierele EML într-un director local sau la distanță. Vă rugăm să vedeți separatdocumentaţie pentru tabelul EDDFromEML.
Tabel EDD dinspre interior
Acest tip special de EDD genereazădatasets.xmlpentru a face oTabel EDD din AsciiFilesSetul de date din informațiile dintr-oinport- xmlDosar. Dacă puteți obține acces la fișierul sursă de date (fișierul inport-xml ar trebui să aibă indicii pentru unde să-l găsească) , puteți face un set de date de lucru înERDDAP.
Următoarele etape prezintă modul de utilizare GenerateDatasets Xml cu un fișier inport-xml pentru a obține un set de date de lucru înERDDAP.
- Odată ce aveți acces la fișierul inport-xml (fie ca URL sau ca fișier local) : run GenerateDatesets Xml, specificați EDDType=EDDtableFromInPort, specificați URL-ul în port-xml sau numele întreg al fișierului, specificați care Child=0 și specificați celelalte informații solicitate (dacă este cunoscut) . (În acest moment, nu trebuie să aveți fișierul sursă de date sau să specificați numele acesteia.) @ info: whatsthis Xml pentru a scrie informațiile pentru toate al<informații privind atributul entității ><entitate > este în fișierul inport-xml (dacă există) . De asemenea, imprima un rezumat de fundal, inclusiv toate de descărcare-url enumerate în fișierul inport-xml.
- Uită-te prin toate aceste informații (inclusiv informațiile de fond care generează date Amprente Xml) și vizitați descărcarea-url (s) pentru a încerca să găsească fișierul sursă de date (s) . Dacă o poţi găsi (Ei...) , descarca-l (Ei...) într-un director accesibilERDDAP. (Dacă nu găsiţi nici un fişier sursă de date, nu are rost să continuaţi.)
- Generează rulează Setări de date Din nou Xml. Dacă fișierul de date sursă corespunde cu unul dintre fișierele inport-xml<informații privind atributul entității ><entity>'s, specifica whichChild= că numărul lui Entity (De exemplu, 1, 2, 3, ...) .ERDDAP™va încerca să se potrivească numele coloanei din fișierul de date sursă cu numele din informațiile entității și va încerca să accepte/rejecteze/remedieze orice discrepanțe. Sau, în cazul în care fișierul inport-xml nu are nici<informații privind atributul entității ><entity>'s, specifica care Child=0.
- În bucata dedatasets.xmlcare a fost făcută de GenerateDatasets Xml, revizuiește [global<addAttributes>] (#atribute globale) după cum este necesar/dorit.
- În bucata dedatasets.xmlcare a fost făcută de GenerateDatasetsXml, adăugați/revizuiți [<dataVariable>] (#date variabile) informații necesare/dorite pentru a descrie fiecare dintre variabile. Asiguraţi-vă că identificaţi corect fiecare variabilă [<sourceName>] (#sourcename) (așa cum apare în sursă) , [<destinationName>] (#destinationname) (care are mai multe limitări asupra caracterelor permise decâtsourceName) , [<unități >] (# Unităţi) (mai ales dacă esteVariabila timpului sau a momentuluiunde unitățile trebuie să specifice formatul) , și [<missing\_value>] (Valoarea_missing) ,
- Când sunteţi aproape de a termina, utilizaţi în mod repetatDasDdsinstrument pentru a vedea rapid dacă descrierea setului de date este valabilă și dacă setul de date va apărea înERDDAP™Cum vrei tu.
Ar fi minunat dacă grupurile care utilizează InPort pentru a documenta seturile lor de date ar folosi, de asemenea,ERDDAP™să pună la dispoziție datele reale:
- ERDDAP™este o solutie care poate fi folosita chiar acum astfel incat sa puteti indepliniNOAA'sAccesul public la rezultatele cercetării (PARR) CerințeChiar acum, nu într-un moment vag în viitor.
- ERDDAP™pune datele reale la dispoziția utilizatorilor, nu doar a metadatelor. (La ce bun metadatele fără date?)
- ERDDAP™acceptă metadatele (în special, unitățile variabilelor) , spre deosebire de alte software server de date fiind luate în considerare. (La ce sunt bune datele fără metadate?) Pentru a utiliza software-ul care nu suportă metadatele este de a invita datele să fie înțelese greșit și utilizate în mod abuziv.
- ERDDAP™este software liber și open-source, spre deosebire de alte software-uri luate în considerare. Dezvoltarea continuă aERDDAP™este deja plătit. Suport pentruERDDAP™utilizatorii sunt liberi.
- ERDDAPAparența lui poate fi ușor personalizat pentru a reflecta și evidenția grupul dumneavoastră (nuERDsauERDDAP) .
- ERDDAP™oferă o modalitate coerentă de acces la toate setările de date.
- ERDDAP™poate citi date din mai multe tipuri de fișiere de date și din bazele de date relaționale.
- ERDDAP™pot face față unor seturi mari de date, inclusiv seturilor de date în care datele sursă se află în numeroase fișiere de date.
- ERDDAP™poate scrie date la mai multe tipuri de fișiere de date, la cererea utilizatorului, inclusiv tipuri de fișiere de date științifice, cum ar fi netCDF, ESRI .csv, șiODV .txt.
- ERDDAP™poate face grafice personalizate și hărți ale subseturilor de date, pe baza specificațiilor utilizatorului.
- ERDDAP™se pot ocupa de seturile de date nedate, cum ar fi colectarea de imagini, video sau fișiere audio.
- ERDDAP™a fost instalat și utilizat lapeste 60 de instituții din întreaga lume.
- ERDDAP™este listat ca unul dintre serverele de date recomandate pentru utilizare înNOAAînNOAADirectiva privind procedura de acces la dateSpre deosebire de alte programe luate în considerare.
- ERDDAP™este un produs alNMFS/NOAA, deci folosindu-l înNMFSşiNOAAAr trebui să fie un punct de mândrie pentruNMFSşiNOAA.
Te rog daERDDAP™o încercare. Dacă aveţi nevoie de ajutor, v ă rugăm să postaţi un mesaj înERDDAP™Grupul Google.
addFillValueAttributes
Această opțiune specială EDDType nu este un tip de set de date. Este un instrument care poate adăuga atribute \_FillValue la unele variabile din anumite seturi de date. Vezi?addFillValueAttributes.
gindesteDuplicat Timp
Această opțiune specială EDDType nu este un tip de set de date. În schimb, spune GenerateDatasets Xml pentru a căuta printr-o colecție de gridded.nc (și legate) fișiere pentru a găsi și imprima o listă de fișiere cu valori ale timpului duplicat. Când se uită la valorile de timp, le transformă din unitățile originale în"seconds since 1970-01-01"în cazul în care diferite fișiere folosesc diferite unități siruri de caractere. Trebuie să furnizeze directorul de pornire (cu sau fără tăietura de cale) , expresia regulată a numelui fișierului (De exemplu, .\*\.nc ) , și numele variabilei de timp în fișiere.
ncdump
Această opțiune specială EDDType nu este un tip de set de date. În schimb, spune GenerateDatasets Xml pentru a imprima unncdump\-ca imprimarea unui.nc,.ncml sau.hdfDosar. Foloseşte netcdf-java.NCdump, care este un instrument mai limitat decât versiunea C a NCdump. Dacă utilizați această opțiune, GenerateDatasetsXml vă va cere să utilizați una dintre opțiunile: "-h" (antet) , "-C" (coordonate vars) , "-vall" (implicit) , "-v var1;var2," "-v var1 (0,0:10,0:20) ". Acest lucru este util pentru că, fără ncdump este greu să știi ce este într-o.nc,.ncml sau.hdffișier și astfel care EDDType ar trebui să specifice pentru GenerateDatasets Xml. Pentru.ncml fișier, acest lucru va imprima ieșire ncdump pentru rezultatul.ncmodificări de fișier ml aplicate suportului.ncsau.hdfDosar.
DasDds
- DasDds este un program de linie de comandă pe care îl puteți utiliza după ce ați creat o primă încercare la XML pentru un nou set de date îndatasets.xml. Cu DasDds, puteți testa și rafina în mod repetat XML. Când utilizați programul DasDds:
- Pe Windows, prima dată când executați DasDds, aveți nevoie pentru a edita DasDds. fișier liliac cu un editor de text pentru a schimba calea către java. exe fişier astfel încât Windows poate găsiJava.
- DasDds vă cere pentrudatasetIDpentru setul de date la care lucraţi.
- DasDds încearcă să creeze setul de date cu caredatasetID.
- DasDds imprima întotdeauna o mulțime de mesaje de diagnosticare. Dacă utilizați "DasDds -verbose," DasDds va imprima mai multe mesaje de diagnosticare decât de obicei.
- Pentru siguranță, DasDds șterge întotdeauna toate informațiile privind setul de date cache (fișiere) pentru setul de date înainte de a încerca să creeze setul de date. Acesta este echivalentul stabiliriisteag tareDeci, pentru seturi de date agregate, ați putea dori să ajustați temporar fișierulNameRegex pentru a limita numărul de fișiere găsite de constructorul de date.
- Dacă setul de date nu se încarcă (Pentru orice motiv) , DasDds se va opri și vă va arăta mesajul de eroare pentru prima eroare pe care o găsește.
Nu încerca să ghiceşti care ar putea fi problema. Citiţi cu atenţie mesajul ERROR.
Dacă este necesar, citiți mesajele de diagnosticare precedente pentru a găsi mai multe indicii și informații, de asemenea. - Face o schimbare la XML-ul setului de date pentru a încerca să rezolve această problemă
și să DasDds încerca să creeze din nou setul de date. - Dacă rezolvați în mod repetat fiecare problemă, veți rezolva în cele din urmă toate problemele
iar setul de date se va încărca.
- Toate rezultatele DASDd (diagnostice și rezultate) sunt scrise pe ecran și la Big ParentDirectory /logs/DasDds.log .
- Dacă DasDds poate crea setul de date, DasDds vă va arăta apoi.das (Structura de atribuire a datelor) ,.dds (Descriptor de date Structura) , și.time Gaps (intervale de timp) informații pentru setul de date de pe ecran și scrieți-le Big ParentDirectory /logs/DasDds.out.
- Adesea, veți dori să faceți unele mici modificări la XML-ul setului de date pentru a curăța metadatele setului de date și a rerula DasDds.
Bonus Instrumentul pentru partea a treia:ERDDAP- Lint.
ERDDAP-Lint este un program de la Rob Fuller și Adam Leadbetter al Institutului Irish Marine pe care îl puteți folosi pentru a îmbunătăți metadatele de dvs.ERDDAP™Seturi de date.ERDDAP-Lint "conţine reguli şi o aplicaţie web statică simplă pentru efectuarea unor teste de verificare împotriva dumneavoastrăERDDAP™server. Toate testele sunt efectuate în browserul web." CaUnix/Linux scame instrument, puteți edita normele existente sau adăuga noi reguli. Vezi?ERDDAP- Lint.pentru mai multe informații.
Acest instrument este deosebit de util pentru seturile de date pe care le-ați creat cu ceva timp în urmă și acum doriți să aduceți la zi preferințele dumneavoastră actuale de metadate. De exemplu, versiunile timpurii ale Seturilor de Date Generate Xml nu a depus niciun efort în crearea globalăcreator\_name,creator\_email, creator\_type; saucreator\_urlmetadate. Ai putea folosiERDDAP-intru in identificarea seturilor de date care lipsesc acele atribute de metadate.
Datorită Rob și Adam pentru crearea acestui instrument și punerea la dispozițiaERDDAP™comunitate.
Structura de bază adatasets.xmlFișier
Etichetele obligatorii și opționale permise în adatasets.xmlfișier (și numărul de ori acestea pot apărea) sunt prezentate mai jos. În practică, dumneavoastrădatasets.xmlva avea o mulțime de<Etichetele setului de date > și se utilizează numai celelalte etichete din cadrul<erddapDatasets > dacă este necesar.
<?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>
Este posibil ca alte codări să fie permise în viitor, dar pentru moment, se recomandă doar ISO-8859-1.
XIclude
Nou în versiunea 2.25 este suport pentru XIInclude. Acest lucru necesită utilizarea parserului SAX<UtilizareSaxParser>true</useSaxParser> in your setup.xml. Acest lucru vă poate permite să scrieți fiecare set de date în propriul său fișier, apoi să le includă pe toate în principaldatasets.xml, refolosirea părților din definițiile setului de date sau ambele. Dacă doriți să vedeți un exemplu,EDDTestDataset.javastabilește XIinclusiv pentru reutilizarea definițiilor variabile.
Note
Lucrul cudatasets.xmlDosarul este un proiect non-trivial. Vă rugăm să citiţi cu atenţie toate aceste note. După ce alegeți unTipul setului de dateVă rugăm să citiţi cu atenţie descrierea detaliată a acesteia.
Alegerea tipului de set de date
În cele mai multe cazuri, există doar unulERDDAP™tipul setului de date care este adecvat pentru o anumită sursă de date. În câteva cazuri (de exemplu,.ncfișiere) Sunt câteva posibilităţi, dar de obicei una dintre ele e cea mai bună. Prima şi cea mai mare decizie pe care trebuie să o luaţi este: este potrivit să trataţi setul de date ca pe un grup de matrice multidimensionale (dacă da, veziEDDGridTipuri de seturi de date) sau ca un tabel de date de tip bază de date (dacă da, veziTipuri de seturi de date EDD) .
Servirea datelor aşa cum este
De obicei, nu este necesară modificarea sursei de date (De exemplu, converti fișierele la un alt tip de fișier) astfel încâtERDDAP™poate servi. Una dintre ipotezeleERDDAP™este că sursa de date va fi utilizată așa cum este. De obicei merge bine. Unele excepții sunt:
- Baza de date relaţională şi Cassandra --ERDDAP™pot servi date direct din bazele de date relaționale și Cassandra. Dar pentru securitate, echilibrarea sarcinii, și probleme de performanță, puteți alege să configurați o altă bază de date cu aceleași date sau salva datele laNetCDFv3.ncfișiere și auERDDAP™să servească datele din noua sursă de date. Vezi?Tabel EDD din baza de dateşiTabel EDD din Cassandra.
- Surse de date nesusţinute...ERDDAP™poate sprijini un număr mare de tipuri de surse de date, dar lumea este plină de 1000 (milioane?) din diferite surse de date (în special, structurile de fișiere de date) . DacăERDDAP™nu suportă sursa ta de date:
- Dacă sursa de date esteNetCDF .ncfișiere, puteți utilizaNcMLmodificarea fișierelor de date la zbor sau utilizareaNCOmodificarea permanentă a fișierelor de date.
- Puteți scrie datele unui tip de sursă de date careERDDAP™sprijină.NetCDF- 3.ncfișierele sunt o recomandare bună, generală, deoarece acestea sunt fișiere binare careERDDAP™poate citi foarte repede. Pentru datele tabulare, ia în considerare stocarea datelor într-o colecție de.ncfișiere care utilizeazăCF Geometrii de eșantionare discrete (DSG) Structuri de date Contiguous Ragged Array și astfel pot fi manipulate cuERDDAP'sTabel EDD din NCFFile). Dacă sunt organizate logic (fiecare cu date pentru o bucată de spațiu și timp) ,ERDDAP™poate extrage date de la ei foarte repede.
- Puteți solicita ca sprijinul pentru această sursă de date să fie adăugat laERDDAP™prin e-mail Chris. John la Noaa.gov.
- Puteți adăuga suport pentru această sursă de date scriind codul pentru a-l descurca singur. Vezi?nuERDDAP™Ghidul programatorului
- Viteza...ERDDAP™poate citi date din unele surse de date mult mai repede decât altele. De exemplu, citireaNetCDFv3.ncFișierele sunt rapide și citirea fișierelor ASCII este mai lentă. Și dacă există o mare (> 1000) sau uriaş (> 10000) numărul de fișiere sursă de date;ERDDAP™va răspunde încet la unele solicitări de date. De obicei, diferenţa nu poate fi observată pentru oameni. Cu toate acestea, dacă credeţiERDDAP™este lent pentru un anumit set de date, puteți alege pentru a rezolva problema prin scrierea datelor la o configurare mai eficientă (de obicei: câteva, bine structurate,NetCDFv3.ncfișiere) . Pentru date tabulare, a se vedeaacest sfat.
Indiciu
Este adesea mai ușor să se genereze XML-ul pentru un set de date prin efectuarea unei copii a unei descrieri a setului de date de lucru în set.xml și apoi modificarea acestuia.
Codare caractere speciale
De cânddatasets.xmleste un fișier XML, trebuie& Cod"&,"<" și ">" în orice conținut ca "&,"<" şi ">." Greșit:<Titlul > Timp & Tides</titlu> Dreapta:<Titlul > Timp și Tides</titlu>
XML nu tolerează erorile de sintaxă
După ce ați editat fișierul Setting.xml, este o idee bună pentru a verifica că rezultatul esteXML bine formatprin lipirea textului XML într-un checker XML caValidare xml.
Sfaturi de depanare
- Alte modalități de a diagnostica probleme cu datele
Pe lângă cele două principaleUnelte, - log.txteste un fișier jurnal cu toateERDDAPMesajele de diagnosticare.
- ăRaport zilnicare mai multe informații decât pagina de stare, inclusiv o listă de seturi de date care nu au încărcat și excepțiile (erori) au generat.
- ăPagina statutuluieste un mod rapid de a verificaERDDAPStarea lui de la orice browser web. Acesta include o listă de seturi de date care nu au încărcat (cu toate că nu excepțiile aferente) și statistici Thread (care demonstrează progresulEDDGridCopiazăşiEDDCommentCopySeturi de date și oriceEDDGridDin dosaresauTabel EDD din dosareSeturi de date care utilizeazăcacheFromUrl (dar nu cache Dimensiune GB) ) .
- Dacă te blochezi, ne vezisecțiunea privind obținerea de sprijin suplimentar.
Variabile speciale
- longitudine, latitudine, altitudine (sau adâncime) , și timp (LLAT) variabilă destinationNameS sunt speciale.
- În general:
- Variabilele LLAT sunt cunoscuteERDDAP™dacă variabila axei (pentruEDDGridSeturi de date) sau variabila datelor (pentru seturi de date ale tabelului EDD) destinationNameeste "longitudine," "latitudine," "altitudine," "aprofundat" sau"time".
- Vă încurajăm cu tărie să utilizați aceste nume standard pentru aceste variabile ori de câte ori este posibil. Nici unul dintre ele nu este necesar. Dacă nu utilizați aceste nume variabile speciale,ERDDAP™Nu vor recunoaşte semnificaţia lor. De exemplu, variabilele LLAT sunt tratate special de Make A Graph ( datasetID .graph) : dacă variabila Axei X este "longitudine," iar variabila Axei Y este "latitudine," veți primi o hartă (utilizarea unei proiecții standard și cu o mască de teren, limite politice etc.) în loc de un grafic.
- ERDDAP™va adăuga automat o mulțime de metadate la variabilele LLAT (de exemplu, "ioos\_category","unități" și mai multe atribute legate de standarde cum ar fi "\_CoordonatAxisType") .
- ERDDAP™va adăuga automat, on-the-fly, o mulțime de metadate globale legate de valorile LLAT ale subgrupului de date selectate (de exemplu, "geospatial\_lon\_min") .
- Clienții care susțin aceste standarde de metadate vor putea profita de metadatele adăugate pentru a poziționa datele în timp și spațiu.
- Clienții vor găsi mai ușor de a genera întrebări care includ variabile LLAT, deoarece numele variabilei sunt aceleași în toate seturile de date relevante.
- Pentru variabila "longitudine" și variabila "latitudine":
- UtilizaţidestinationName"Longitudine" şi "latitudine" numai dacăunitățiSunt grade est şi grade nord. Dacă datele dumneavoastră nu corespund acestor cerințe, utilizați diferite nume variabile (de exemplu, x, y, londians, latRadians) .
- Dacă aveți date de longitudine și latitudine exprimate în unități diferite și astfel cu diferitedestinationNames, de exemplu, lonRadieni și latRadieni, Make A Graph ( datasetID .graph) va face grafice (de exemplu, serii de timp) în loc de hărţi.
- Pentru variabila "altitudine" și variabila "aprofundat":
- UtilizaţidestinationName"altitudine" pentru identificarea distanței datelor peste nivelul mării (valori pozitive="up") . Opțional, puteți folosi "altitudine" pentru distanțe sub nivelul mării dacă valorile sunt negative sub mare (sau dacă utilizați, de exemplu, [<att name="scale\_factor" type="intrück- 1</att>] (#scale_factor) să transforme valorile adâncimii în valori ale altitudinii.
- UtilizaţidestinationName"aprofundat" pentru a identifica distanța datelor sub nivelul mării (valori pozitive="jos") .
- Este posibil ca un set de date să nu aibă atât variabile "altitudine," cât și "aprofundate."
- Pentru aceste nume variabile,unitățitrebuie să fie "m," "metru," sau "metri." Dacă unităţile sunt diferite (de exemplu, stânjeni) , puteți folosi [<att name="scale\_factor"> unele Valoare </att>] (#scale_factor) şi [<Att name="supermetri</att>] (# Unităţi) pentru a converti unitățile în metri.
- Dacă datele dumneavoastră nu corespund acestor cerințe, utilizați un altdestinationName (De exemplu, deasupra solului, distanţa ToBottom) .
- Dacă știți SIR-ul vertical, vă rugăm să precizați în metadate, de exemplu, "EPSG:5829" (înălțimea instantanee deasupra nivelului mării) "EPSG:5831" (adâncime instantanee sub nivelul mării) , sau "EPSG:5703" (Înălțimea NAVD88) .
- Pentru"time"variabilă:
- UtilizaţidestinationName "time"numai pentru variabilele care includ întreaga dată+timp (sau data, dacă asta este tot) . Dacă, de exemplu, există coloane separate pentru data și ora zilei, nu utilizați denumirea variabilă"time".
- Vezi?unitățipentru mai multe informații despre atributul unităților pentru timp și variabile Stamp.
- Variabila temporală și legatătimp Variabilele timbrelorsunt unice prin care convertesc întotdeauna valorile datelor din formatul temporal al sursei (Orice ar fi) într-o valoare numerică (secunde de la 1970-01-01T00:00:00Z) sau o valoare de coardă (ISO 8601:2004 (E) format) Depinde de situaţie.
- Atunci când un utilizator solicită date de timp, acestea pot solicita prin specificarea timpului ca valoare numerică (secunde de la 1970-01-01T00:00:00Z) sau o valoare de coardă (ISO 8601:2004 (E) format) .
- ERDDAP™are o utilitateSchimbă un numeric Timpul până la/de la un timp de coardă.
- Vezi?CumERDDAPSe ocupă de timp.
De ce doar două structuri de date de bază?
- Deoarece este dificil pentru clienții umani și clienții de calculatoare să se ocupe de un set complex de structuri posibile de seturi de date,ERDDAP™utilizează doar două structuri de date de bază:
- astructura de date grided (de exemplu, pentru datele prin satelit și pentru datele de model) şi
- aStructura datelor tabulare (de exemplu, pentru geamandura in situ, stația și datele traiectoriei) .
- Desigur, nu toate datele pot fi exprimate în aceste structuri, dar o mare parte poate. Tabelele, în special, sunt structuri de date foarte flexibile (uita-te la succesul programelor de baze de date relationale) .
- Astfel, întrebările privind datele sunt mai ușor de construit.
- Acest lucru face ca răspunsurile la date să aibă o structură simplă, ceea ce facilitează utilizarea datelor într-o varietate mai largă de tipuri de fișiere standard (care adesea sprijină doar structuri simple de date) . Acesta este principalul motiv pentru care am înființatERDDAP™Pe aici.
- Acest lucru, la rândul său, face foarte ușor pentru noi (sau oricine) pentru a scrie software client care funcționează cu toateERDDAP™Seturi de date.
- Acest lucru facilitează compararea datelor din diferite surse.
- Suntem foarte conștienți de faptul că, dacă sunteți obișnuit să lucrați cu date în alte structuri de date, ați putea crede inițial că această abordare este simplistă sau insuficientă. Dar toate structurile de date au compromisuri. Niciuna nu e perfectă. Chiar și structurile do-it-all au dezavantajele lor: lucrul cu ele este complex și fișierele pot fi scrise sau citite numai cu biblioteci speciale de software. Dacă accepţiERDDAPAbordare suficient pentru a încerca să lucreze cu ea, s-ar putea găsi că are avantajele sale (în special sprijinul pentru mai multe tipuri de fișiere care pot deține răspunsurile la date) . ăERDDAP™slide show (în specialdiapozitiv structuri de date) Vorbeşte mult despre aceste probleme.
- Și chiar dacă această abordare sună ciudat pentru tine, cele mai multeERDDAP™clienții nu vor observa niciodată -- vor vedea pur și simplu că toate seturile de date au o structură simplă și vor fi recunoscători că pot obține date dintr-o mare varietate de surse returnate într-o mare varietate de formate de fișiere.
Dimensiuni
- Ce se întâmplă dacă variabilele de rețea din setul de date sursă NU împărtășesc aceleași variabile ale axei?
ÎnEDDGridSeturi de date, toate variabilele de date TREBUIE utilizate (cotă) toate variabilele axei. Deci, dacă un set de date sursă are unele variabile cu un set de dimensiuni, și alte variabile cu un set diferit de dimensiuni, va trebui să facă două seturi de date înERDDAP. De exemplu, s-ar putea face unulERDDAP™Set de date intitulat "Unele titluri (la suprafață) " să dețină variabile care folosesc doar\[timp\]\[latitudine\]\[longitudine\]dimensiuni și să facă altulERDDAP™Set de date intitulat "Unele titluri (la adâncimi) " să dețină variabilele care utilizează\[timp\]\[altitudine\]\[latitudine\]\[longitudine\]. Sau poate puteți schimba sursa de date pentru a adăuga o dimensiune cu o singură valoare (de exemplu, altitudinea = 0.) pentru a face variabilele coerente.
ERDDAP™nu se ocupă de seturi de date mai complicate (de exemplu, modele care utilizează o plasă de triunghiuri) Bine. Puteți servi aceste seturi de date înERDDAP™prin crearea a două sau mai multe seturi de date înERDDAP™ (astfel încât toate variabilele de date din fiecare set de date nou să aibă același set de variabile ale axei) Dar nu asta vor utilizatorii. Pentru unele seturi de date, ați putea lua în considerare realizarea unei versiuni regulate în grilă a setului de date și oferirea acestuia în plus față de datele originale. Unele software-ul client poate face doar cu o grilă regulat, astfel încât prin a face acest lucru, ajunge la clienți suplimentari.
Date proiectate pentru grid
Unele date în reţea au o structură complexă. De exemplu, nivelul satelitului 2 ("de-a lungul drumului") datele nu utilizează o proiecție simplă. Modelatoare (şi altele) de multe ori lucrează cu date în rețea pe diverse proiecții non-cilindrile (de exemplu, conic, stereografic polar, tripolar) sau în rețele nestructurate (o structură de date mai complexă) . Unii utilizatori finali doresc aceste date ca este, astfel încât nu există nici o pierdere de informații. Pentru acei clienti,ERDDAP™poate servi datele, așa cum este, numai dacăERDDAP™administratorul rupe setul de date original în câteva seturi de date, fiecare parte incluzând variabile care au aceleași variabile ale axei. Da, asta pare ciudat pentru oamenii implicați și este diferit de majoritateaOPeNDAPservere. Dar...ERDDAP™subliniază punerea la dispoziție a datelor în mai multe formate. Acest lucru este posibil deoareceERDDAP™utilizează/necesită o structură de date mai uniformă. Deşi e puţin ciudat. (și anume, diferit de cel așteptat) ,ERDDAP™poate distribui datele proiectate.
\[Da.ERDDAP™ar putea avea cerințe mai slabe pentru structura de date, dar să păstreze cerințele pentru formatele de ieșire. Dar acest lucru ar duce la confuzie în rândul multor utilizatori, în special noi, deoarece multe cereri aparent valabile de date cu diferite structuri ar fi invalide, deoarece datele nu s-ar potrivi în tipul de fișier. Ne tot întoarcem la designul sistemului curent.\]
Unii utilizatori finali doresc date într-o proiecţie cilindrică lat lon cum ar fi Equirectangular / plăci carrée sau Mercator) pentru uşurinţă de utilizare în diferite situaţii. Pentru aceste situații, încurajămERDDAP™administrator pentru a utiliza un alt software (NCO?Matlab? R? IDV? ...?) să reproiecteze datele pe o zonă geografică (Proiecţie echirectangulară / farfurie carrée) sau alte proiecții cilindrice și care servesc această formă de date înERDDAP™ca un set de date diferit. Acest lucru este similar cu ceea ce fac oamenii atunci când convertesc datele de nivel satelit 2 în datele de nivel 3. Un astfel de instrument esteNCOcare oferă opțiuni de extensie pentru recuperarea datelor.
GIS și datele de reproiectare
Deoarece lumea GIS este adesea orientată pe hartă, programele GIS oferă de obicei suport pentru reproiectarea datelor, adică complotarea datelor pe o hartă cu o proiecție diferită.
În prezent,ERDDAP™nu dispune de instrumente de reproiectare a datelor. În schimb, vă recomandăm să utilizați un instrument extern pentru a face o variantă a setului de date, în cazul în care datele au fost reproiectate din forma sa originală pe o formă dreptunghiulară (longitudine latitudine) array adecvat pentruERDDAP.
În opinia noastră, CF/DAPLumea este puţin diferită de lumea GIS şi funcţionează la un nivel uşor inferior.ERDDAP™reflectă asta. În general,ERDDAP™este conceput să funcționeze în principal cu date (nu hărți) şi nu vrea să se schimbe. (De exemplu, reproiectarea) datele. PentruERDDAP™, datele în rețea sunt adesea/de obicei/preferabil asociate cu valorile lat lon și o proiecție cilindrică, și nu cu valorile x,y ale unor proiecții. În orice caz,ERDDAP™nu face nimic cu proiecția datelor; doar transmite datele prin, așa cum este, cu proiecția sa actuală, pe teoria că o reproiectare este o schimbare semnificativă a datelor șiERDDAP™nu vrea să fie implicat în schimbări semnificative. De asemenea, utilizatorii ulteriori ar putea reproiecta naiv datele din nou, ceea ce nu ar fi la fel de bun ca doar o reproiectare. (Deci, dacăERDDAP™administratorul doreste sa ofere datele intr-o proiectie diferita, bine; doar sa reproiecteze datele offline si sa ofere ca un set de date diferit inERDDAP. O mulțime de seturi de date bazate pe satelit sunt oferite ca ceea ce NASA numește Nivelul 2 (lebădă) și ca nivel 3 (Proiecţie echirectangulară) versiuni.) CândERDDAP™face hărți (direct sau prinWMSsau KML) ,ERDDAP™în prezent oferă doar pentru a face hărți cu proiecția Equirectangular / placă carrée care, din fericire, este acceptat de majoritatea programelor de cartografiere.
ÎncurajămERDDAP™administratori pentru a utiliza un alt software (NCO?Matlab? R? IDV? ...?) să reproiecteze datele pe o zonă geografică (Proiecţie echirectangulară / farfurie carrée) sau alte proiecții cilindrice și care servesc această formă de date înERDDAP™ca un set de date diferit. Acest lucru este similar cu ceea ce fac oamenii atunci când convertesc datele de nivel satelit 2 în datele de nivel 3. Un astfel de instrument esteNCOcare oferă opțiuni de extensie pentru recuperarea datelor.
Sperăm căERDDAP™va avea instrumente integrate pentru a oferi hărți cu alte proiecții în viitor. De asemenea, sperăm să avem legături mai bune cu lumea GIS în viitor (altele decât curentulWMSserviciu) . Este groaznic că în această lume "modernă," legăturile dintre CF/DAPLumea şi lumea GIS sunt încă atât de slabe. Ambele lucruri sunt pe lista To Do. (Dacă doriți să ajutați, în special cu conectareaERDDAP™la MapServer, te rog trimite-i un e-mail lui Chris. John la Noaa.gov.)
Tipuri de date
ERDDAP™sprijină următoarele tipuri de date (numele sunt sensibile la caz;'u'prefixul înseamnă "nesemnat"; numărul multor nume din alte sisteme este numărul de biți) :
octet
- octet a semnat valori întregi cu o gamă de -128-127. În alte sisteme, acest lucru se numește uneori int8. Asta se numeşte "tinyint" de SQL şi Cassandra. ERDDAP™convertițibooleandin anumite surse (De exemplu, SQL și Cassandra) în octețiERDDAP™cu o valoare de 0=fals, 1=adevărat, și 127=missing\_value.
ubyte
- ubyte are valori întregi nesemnate cu o gamă de la 0 la 255. În alte sisteme, aceasta se numeşte uneori uint8.
scurt
- scurt a semnat valori întregi cu un interval cuprins între -32768 și 32767. În alte sisteme, acest lucru se numește uneori int16. Se numeşte "micuţ" de SQL şi Cassandra.
scurt
- scurt are valori întregi nesemnate cu un interval de la 0 la 65535. În alte sisteme, acest lucru se numește uneori Uint16.
int
- int a semnat valori întregi cu o gamă de -2147483648 până la 2147483647. În alte sisteme, acest lucru se numește uneori int32. Asta se numeşte "integer."|numeric (?) " by SQL and "int" by Cassandra.
uint
- uint are valori întregi nesemnate cu o gamă cuprinsă între 0 și 4294967295. În alte sisteme, acest lucru se numește uneori uint32.
lung
- lung a semnat valori întregi cu o gamă de -9223372036854775808 la 9223372036854775807. În alte sisteme, acest lucru se numește uneori int64. Asta se numeşte "bigint."|numeric (?) " by SQL and "bigint" by Cassandra. Deoarece multe tipuri de fișiere nu susțin date lungi, utilizarea lor este descurajată. Când este posibil, utilizați dublu în schimb (vezi mai jos) .
ulong
- ulong are valori întregi nesemnate cu un interval cuprins între 0 și 184467440737095511615 În alte sisteme, acest lucru este uneori numit Uint64. Deoarece multe tipuri de fișiere nu susțin date lungi, utilizarea lor este descurajată. Când este posibil, utilizați dublu în schimb (vezi mai jos) .
float
- float este un float IEEE 754 cu o gamă de aproximativ +/- 3.402823466e+38. În alte sisteme, aceasta se numește uneori float32. Asta se numeşte "real"|float (?) |zecimală (?) |numeric (?) " by SQL and "float" by Cassandra. Valoarea specială NaN înseamnă Nu-un-Număr. ERDDAP™convertește valorile infinitului pozitiv și negativ la NaN.
dublu
- dublu este un IEEE 754 dublu cu o gamă de aproximativ +/- 1,7976931348623157E+308. În alte sisteme, aceasta se numește uneori float64. Asta se numeşte "precizie dublă"|float (?) |zecimală (?) |numeric (?) " by SQL and "dublu" by Cassandra. Valoarea specială NaN înseamnă Nu-un-Număr. ERDDAP™convertește valorile infinitului pozitiv și negativ la NaN.
char
- char este un singur, 2 octet (16 biți) Caracter Unicode UCS-2variind din\u0000 (#0) prin\uffff (#65535) . \uffffDefiniţia lui nu este un "Character," similar unei valori duble a NaN. Utilizarea de char este descurajat deoarece multe tipuri de fișiere fie nu susțin chars sau numai suport 1-byte chars (vezi mai jos) . Ia în considerare utilizarea String în schimb. Utilizatorii pot folosi variabile char pentru a face grafice.ERDDAP™va converti caracterele la numărul de cod Unicode, care poate fi folosit ca date numerice.
String
- String este o secvență de 0 sau mai mult, 2 octeți (16 biți) Unicode UCS-2 caractere. ERDDAP™utilizează/interpretează un șir de 0 lungimi ca valoare lipsă.ERDDAP™nu suportă o coardă nulă adevărată. Lungimea maximă teoretică a șirului este de 2147483647 caractere, dar există, probabil, diferite probleme în diferite locuri chiar și cu corzi oarecum mai scurte. UtilizareERDDAP's String for SQL's caracter, varchar, caracter various, binar, varbinary, interval, array, multiset, xml, și orice alt tip de date de baze de date care nu se potrivește curat cu orice altERDDAP™tipul de date. UtilizareERDDAP's String for Cassandra's "text" and any other Cassandra data type that doesn't potrivesc cleanly with any otherERDDAP™tipul de date.
ÎnainteERDDAP™v2.10;ERDDAP™nu a sprijinit tipurile întregi nesemnate pe plan intern și a oferit sprijin limitat cititorilor și scriitorilor de date.
Limitări de tip date
Te poţi gândi laERDDAP™un sistem care dispune de seturi de date virtuale și care funcționează prin citirea datelor dintr-o sursă de date dintr-un set de date într-un model intern de date și prin scrierea datelor către diferite servicii (de exemplu,(OPeN)DAP,WMS) și tipuri de fișiere ca răspuns la cererile utilizatorilor.
- Fiecare cititor de intrare suportă un subset de tipuri de date careERDDAP™sprijină. Deci, citirea datelor înERDDAPStructurile interne de date nu sunt o problemă.
- Fiecare scriitor de ieșire suportă, de asemenea, un subset de tipuri de date. Asta e o problemă pentru căERDDAPtrebuie să stoarcă, de exemplu, date lungi în tipuri de fișiere care nu susțin date lungi.
Mai jos sunt explicaţiile limitărilor (sau niciunul) de diverși scriitori de ieșire și cumERDDAP™se ocupă de probleme. Aceste complicaţii sunt o parte inerentă aERDDAPScopul lui de a face sistemele disparate interoperabile.
ASCII
- ASCII (.csv,.tsv, etc.) fișiere text -
- Toate datele numerice sunt scrise prin reprezentarea String (cu valorile lipsă ale datelor care apar sub formă de șiruri de caractere cu lungime egală cu zero) .
- Deşi...ERDDAP™scrie corect valori lungi şi lungi la fişierele text ASCII, mulţi cititori (De exemplu, programe de foi de calcul) nu se pot ocupa corect cu valori lungi și lungi și în schimb convertiți-le la valori duble (cu pierderea preciziei în unele cazuri) .
- Datele Char și String sunt scrise prin JSON Strings, care se ocupă de toate caracterele Unicode (în special, personajele "neobişnuite" dincolo de ASCII #127, de exemplu, caracterul Euro apare ca "\u20ac") .
JSON
- JSON (.json,.jsonlCSV, etc.) fișiere text -
- Toate datele numerice sunt scrise prin reprezentarea String.
- Datele Char și String sunt scrise ca JSON Strings, care se ocupă de toate caracterele Unicode (în special, personajele "neobişnuite" dincolo de ASCII #127, de exemplu, caracterul Euro apare ca "\u20ac") .
- Valorile lipsă pentru toate tipurile de date numerice par nule.
.nc3 fișiere
- .nc3 fișiere nu susțin nativ orice tipuri de date întregi nesemnate. Înainte de CF v1.9, CF nu a sprijinit tipuri întregi nesemnate. Pentru a face față acestui lucru,ERDDAP™2.10+ urmează standardul NUG și adaugă întotdeauna un atribut "\_Nesemnat" cu o valoare de "adevărat" sau "fals" pentru a indica dacă datele provin dintr-o variabilă nesemnată sau semnată. Toate atributele întregi sunt scrise ca atribute semnate (de exemplu, octet) cu valori semnate (de exemplu, un ubitactual\rangeatributul cu valorile de la 0 la 255, apare ca un atribut octet cu valorile de la 0 la -1 (inversul valorii complementului celor două a valorii din afara intervalului). Nu există nici o modalitate ușoară de a ști care (semnat) atribute întregi ar trebui să fie citite ca atribute nesemnate.ERDDAP™acceptă atributul "\ Nesemnat" atunci când citește.nc3 dosare.
- .nc3 fișiere nu suportă tipurile de date lungi sau lungi.ERDDAP™se ocupă de acest lucru prin conversia temporară a acestora pentru a fi variabile duble. Dublu pot reprezenta exact toate valorile până la +/- 9,007,199,254,740,992 care este 2^53. Aceasta este o soluţie imperfectă.Unidatarefuză să facă un upgrade minor la.nc3 pentru a rezolva această problemă și problemele conexe, citând.nc4 (o schimbare majoră) ca soluţie.
- Specificațiile CF (înainte de v1. 9) a declarat că sprijină un tip de date de tip char, dar nu este clar dacă Char este destinat doar ca elemente de bază ale matricelor char, care sunt în mod eficient Strings. Întrebările la lista lor de corespondenţă au dat doar răspunsuri confuze. Din cauza acestor complicații, este cel mai bine pentru a evita variabilele char înERDDAP™și să utilizeze variabile String ori de câte ori este posibil.
- Tradiţional,.nc3 fişiere acceptate numai siruri de caractere cu ASCII-codate (7 biți; #0 - #127) Personaje. NUG (şiERDDAP) se extinde (începând cu ~2017) prin includerea atributului "\_Encoding" cu o valoare de "ISO-8859-1" (o extensie a ASCII care definește toate valorile 256 ale fiecărui caracter pe 8 biți) sau "UTF-8" pentru a indica modul în care sunt codificate datele String. Alte codări pot fi legale, dar sunt descurajate.
.nc4 fișiere
- .nc4 fișiere suportă toateERDDAPSunt tipuri de date.
Fișiere NCCSV
Fișierele NCCSV 1.0 nu suportă niciun tip de date întregi nesemnate. Fișiere NCCSV 1.1+să sprijine toate tipurile de date întregi nesemnate.
DAP
- (OPeN)DAP (.das, .dds, .sc fișiere ASCII, și .dods fișiere binare) -
- (OPeN)DAPse ocupă scurt, scurt, int, uint, float și valori duble corect.
- (OPeN)DAPare un tip de date "byte" pe care le definește ca nesemnate, în timp ce istoric, THREDS șiERDDAP™au tratat "octet" ca fiind semnat în(OPeN)DAPServicii. Pentru a face cu acest lucru mai bine,ERDDAP™2.10+ urmează standardul NUG și adaugă întotdeauna un atribut "\_Nesemnat" cu o valoare de "adevărat" sau "fals" pentru a indica dacă datele sunt ceea ceERDDAP™Apeluri octet sau ubyte. Toate atributele octeți și ubiti sunt scrise ca atribute "octeți" cu valori semnate (de exemplu, un ubitactual\_rangeatributul cu valorile de la 0 la 255, apare ca un atribut octet cu valorile de la 0 la -1 (inversul valorii complementului celor două a valorii din afara intervalului). Nu există nici o modalitate ușoară de a ști ce atribute "byte" ar trebui să fie citite ca atribute ubyte.
- (OPeN)DAPnu suportă perioade lungi semnate sau nesemnate.ERDDAP™se ocupă de acest lucru prin conversia temporară a acestora pentru a fi variabile și atribute duble. Dublu pot reprezenta exact toate valorile până la 9,007,199,254,740,992 care este 2^53. Aceasta este o soluţie imperfectă.OPeNDAP (organizația) refuză să facă un upgrade minor laDAP2.0 să se ocupe de acest lucru și probleme conexe, citândDAP4 (o schimbare majoră) ca soluţie.
- Pentru că(OPeN)DAPnu are un tip separat de date de tip char și, din punct de vedere tehnic, suportă doar caractere ASCII de 1 octet (#0 - #127) în Strings, variabilele de date char vor apărea sub formă de coarde cu 1 caracter lung în(OPeN)DAP.das, .dds, și .dods răspunsuri.
- Tehnic,(OPeN)DAPSpecificaţia suportă doar siruri de caractere cu caractere codate ASCII (#0 - #127) . NUG (şiERDDAP) se extinde (începând cu ~2017) prin includerea atributului "\_Encoding" cu o valoare de "ISO-8859-1" (o extensie a ASCII care definește toate valorile 256 ale fiecărui caracter pe 8 biți) sau "UTF-8" pentru a indica modul în care sunt codificate datele String. Alte codări pot fi legale, dar sunt descurajate.
Tip de date Comentarii
- Din cauza suportului slab pentru date de lungă durată, ulong și char în multe tipuri de fișiere, descurajăm utilizarea acestor tipuri de date înERDDAP. Când este posibil, utilizați dublu în loc de lung și lung, și utilizați String în loc de char.
- Metadate - Deoarece(OPeN)DAPrăspunsurile .das și .dds nu susțin atribute lungi sau lungi sau tipuri de date (şi în loc să le arate ca dublu) , ați putea dori în schimb să utilizațiERDDAPReprezentarea tabelară a metadatelor, așa cum se vede înhttp.../erddap/ info / datasetID Pagina web .html (de exemplu, https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (pe care le puteți obține și în alte tipuri de fișiere, de exemplu, .csv,.htmlTable,.itx,.json,.jsonlCSV1,.jsonlCSV,.jsonlKVP,.mat,.nc,.nccsv,.tsv,.xhtml) sau.nccsvRăspunsul la metadate (de exemplu, https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata de.nccsvMetadatele sunt disponibile numai pentru seturile de date tabulare) , ambele dintre care sprijină toate tipurile de date (în special, lung, lung și Char) .
Fișiere media
Nu toate datele sunt array-uri de numere sau text. Unele seturi de date constau în sau includ fișiere media, cum ar fi imagini, fișiere audio și video.ERDDAP™are unele caracteristici speciale pentru a facilita accesul utilizatorilor la fișiere media. E un proces în două etape:
- Face fiecare fișier accesibil prin intermediul propriului URL, printr-un sistem care suportă cererile de gamă octet. Cel mai simplu mod de a face acest lucru este de a pune fișierele într-un director careERDDAP™are acces la. (Dacă acestea sunt într-un container ca un.zipfișier, deschide-le, deși este posibil să doriți să oferiți.zipfișier pentru utilizatori prea.) Atunci fă-o.Tabel EDDFromFileNamesSet de date pentru a face aceste fișiere accesibile prin intermediulERDDAP™, în special prinERDDAP's"files"sistem.
Toate fișierele accesibile prin intermediul EDDTableFromFileNames șiERDDAP's"files"suport sistemcereri de interval de octeți. În mod normal, atunci când un client (de exemplu, un browser) face o cerere la un URL, devine întregul fișier ca răspuns. Dar cu o cerere de gamă de octeți, cererea specifică o gamă de octeți din fișier, iar serverul returnează doar acei octeți. Acest lucru este relevant aici deoarece jucătorii audio şi video din browsere funcţionează numai dacă fişierul poate fi accesat prin intermediul cererilor de gamă octet.
Opțional: Dacă aveți mai mult de un set de date cu fișiere media asociate, puteți face doar un singur EDDtableFromFileNames care are un subdosar pentru fiecare grup de fișiere. Avantajul este că atunci când doriți să adăugați noi fișiere media pentru un nou set de date, tot ce trebuie să faceți este să creați un nou dosar și să introduceți fișierele în acel dosar. Dosarul și fișierele vor fi adăugate automat la setul de date EDDTableFromFileNames.
- Opțional: Dacă aveți un set de date care include trimiteri la fișiere media, adăugați-l laERDDAP. De exemplu, este posibil să aveți un fișier .csv cu un rând pentru fiecare dată când cineva a văzut o balenă și o coloană care include numele unui fișier imagine legate de acea observare. Dacă numele fișierului imagine este doar numele fișierului, de exemplu, Img20141024T192403Z, nu un URL complet, atunci trebuie să adăugațiAccessBase fișier Url și/sau fileAccessSuffixatributele metadatelor pentru aceastadataVariablecare specifică baza și sufixul acestor nume de fișier. Dacă ați făcut fișierele accesibile prin intermediul EDDtableFromFileNames, URL-ul va fi în formă BaseUrl /erddap/files/ datasetID / De exemplu,
<att name="fileAccessBaseUrl">*someBaseURL*</a>
<att name="fileAccessSuffix">.png</a>
Dacă există o.zipsau alt fișier container cu toate fișierele media legate de o variabilă de date, vă recomandăm să faceți acel fișier accesibil utilizatorilor (vezi pasul 1 de mai sus) şi apoi să-l identifice cu unAccessArchive Urlatribut.
\[Începând cuERDDAP™v1, 82\]Dacă faceţi primul pas de mai sus (sau ambii pași) , atunci când un utilizator vedeERDDAP™ "files"sistem pentru respectivul set de date (sau solicită să se consulte un subset al setului de date prin intermediul unui.htmlTablecerere, dacă ați făcut al doilea pas) ,ERDDAP™va arăta o "?," pictogramă la stânga numelui fișierului. În cazul în care utilizatorul plutește peste acea pictogramă, ei vor vedea un popup care arată imaginea, sau un player audio, sau un player video. Navigatorii susțin doar un număr limitat de tipuri de
- imagine (de obicei .gif, .jpg, și .png) ,
- audio (De obicei .mp3, .ogg, și .wav) , și
- fișiere video (De obicei .mp4, .ogv, și . webm) .
Suportul variază cu diferite versiuni ale diferitelor browsere pe diferite sisteme de operare. Deci, dacă aveți o alegere a tipului de fișier de oferit, este logic să ofere aceste tipuri.
Sau, dacă un utilizator face clic pe numele de fișier afișat pe unERDDAP™pagina web, browser-ul lor va afișa imaginea, fișierul audio sau video ca o pagină web separată. Acest lucru este foarte util pentru a vedea o imagine foarte mare sau video scalat la ecran complet, în loc de într-un popup.
Lucrul cu fișiere AWS S3
Amazon Web Service (AWS) este un vânzător decloud computingServicii.S3este un sistem de stocare a obiectelor oferit de AWS. În locul sistemului ierarhic de directoare și fișiere ale unui sistem tradițional de fișiere (ca un hard disk în PC-ul tău) , S3 oferă doar "buchete" care dețin "obiecte" (Îi vom suna."files") .
Pentru fișierele ASCII (de exemplu, .csv.) ,ERDDAP™poate lucra cu fișierele în găleți direct. Singurul lucru pe care trebuie să faci este să specifice<fileDir> pentru setul de date utilizând un format specific pentru găleata AWS, de exemplu, https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Nu trebuie să utilizaţi<Cache FromUrl>. A se vedea mai jos pentru detalii.
Dar pentru fișiere binare (de exemplu,.nc,.grib,.bufr, și.hdffișiere) , trebuie să utilizați<CacheFromUrl> sistem descris mai jos.ERDDAP, netcdf-java (careERDDAP™folosește pentru a citi date din aceste fișiere) , și alte software-ul de date științifice sunt concepute pentru a lucra cu fișiere într-un sistem tradițional de fișiere care oferănivel blocacces la fișiere (care permite citirea bucăților unui fișier) , dar S3 oferă doarnivel fișier (obiect) acces la fișiere (care permite numai citirea întregului fișier) . AWS oferă o alternativă la S3,Magazin Elastic Block (EBS) ), care susține accesul la nivel bloc la fișiere, dar este mai scump decât S3, astfel încât este rar utilizat pentru stocarea în vrac a unor cantități mari de fișiere de date. (Deci, atunci când oamenii spun stocarea datelor în nor (S3) este ieftin, este, de obicei, o comparație mere la portocale.)
Găleți S3
Conţinutul unei găleţi. Cheile. Obiecte.Delimitatoare.
Tehnic, găleți S3 nu sunt organizate într-o structură ierarhică de fișiere ca un sistem de fișiere pe un calculator. În schimb, găleţile conţin doar "obiecte" (fișiere) Fiecare are o cheie. (un nume) . Un exemplu de cheie în această găleată noaa-goes17 este
ABI-L1b-RadC/2019/235/22/OR\\_ABI-L1b-RadC-M6C01\\_G17\\_s20192352201196\\_e20192352203569\\_c20192352204013.nc
URl corespunzătoare pentru acel obiect este
AWS suportă o mică variație în modul în care URL-ul este construit, darERDDAP™necesită acest format specific:
https://bucketName.s3.region.amazonaws.com/key
Este o practică obişnuită, ca şi în cazul acestui exemplu, să faci numele cheie să arate ca o cale ierarhică plus un nume de fişier, dar tehnic nu sunt. Deoarece este comun și util,ERDDAP™tratează cheile cu /'s ca și cum acestea sunt o cale ierarhică plus numele fișierului, iar această documentație se va referi la ei ca atare. Dacă cheile unei găleți nu folosesc /'s (de exemplu, o cheie ca
ABI-Lib.2018.052.22.OR\_ABI-L1b-RadM2-M3C10\_G16\_s201805222447575), apoiERDDAP™va trata doar întreaga cheie ca un nume de fișier lung.
Private vs Public Buckets -- Administratorul găleții S3 poate face găleata și conținutul acesteia publice sau private. Dacă este public, orice fișier din găleată poate fi descărcat de oricine utilizează URL-ul pentru fișier. Amazon are oDeschide dateprogram care găzduiește seturi de date publice (inclusiv date dinNOAA, NASA și USGS) gratuit și nu percepe nimeni pentru a descărca fișierele din aceste găleți. Dacă o găleată este privată, fișierele din găleată sunt accesibile numai utilizatorilor autorizați și AWS percepe o taxă (De obicei plătit de proprietarul găleții) pentru descărcarea fișierelor pe un computer S3.ERDDAP™poate lucra cu date în găleți publice și private.
AWS Acreditari
Pentru a face astfel încâtERDDAP™poate citi conținutul de găleți private, aveți nevoie de acreditări AWS și aveți nevoie pentru a stoca un fișier de acreditare în locul standard astfel încâtERDDAP™pot găsi informaţiile. A se vedea AWS SDK pentruJava2.x documentație:Stabilește acreditări implicite. (Opțiunea de a stoca valorile caJavaparametrii liniei de comandă în\[Tomcat\]/bin/setenv.sh poate fi o opțiune bună.)
AWS / fișiere/
- /File/sistem -- ăERDDAP™ /Fişiere/sistempermite utilizatorilor să descarce fișierele sursă pentru un set de date. Vă recomandăm să activați acest lucru pentru toate seturile de date cu fișiere sursă deoarece mulți utilizatori doresc să descarce fișierele sursă originale.
- Dacă fișierele sunt într-o găleată S3, cererea utilizatorului de a descărca un fișier va fi manipulată de cătreERDDAP™, care va citi datele din fișier și apoi le transmite utilizatorului, crescând astfel sarcina pe dvs.ERDDAP™, folosind banda de intrare și de ieșire, și de a face tine (nuERDDAP™administrator) plătește taxa de ieșire a datelor către AWS.
- Dacă fișierele sunt într-o găleată publică S3, cererea utilizatorului de a descărca un fișier va fi redirecționată către URL-ul AWS S3 pentru acel fișier, astfel încât datele nu vor curge prinERDDAP™, reducând astfel sarcina peERDDAP. Și dacă fișierele sunt într-un Amazon Open Data (gratuit) Găleată publică, apoi tu (nuERDDAP™administrator) nu va trebui să plătească nici o taxă de ieșire date la AWS. Astfel, există un mare avantaj deservind datele publice (nu privat) S3 găleți, și un avantaj imens pentru a servi date de la Amazon Open Data (gratuit) Găleţi.
ERDDAP™și AWS S3 Buckets
ERDDAP™și AWS S3 Buckets
Din fericire, după mult efort,ERDDAP™are o serie de caracteristici care îi permit să facă față problemelor inerente de a lucra cu accesul S3 la dosarele la nivel de bloc într-un mod rezonabil eficient:
- \[Disclaimer: Lucrul cu găleți AWS S3 este o mulțime de muncă în plus. AWS este un ecosistem imens de servicii și caracteristici. Sunt multe de învăţat. Este nevoie de timp și efort, dar este realizabil. Ai răbdare şi vei face lucrurile să meargă. Caută/ cere ajutor
(Documentația AWS, site-uri caOverflow stiva, și regulat
ERDDAP™opțiuni de sprijin) dacă/când te blochezi.\]
- Acesta poate fi greu de a afla chiar structura director și numele fișierelor într-o găleată S3.ERDDAP™are o solutie pentru aceasta problema: EDDtableFromFileNames are o speciala\\# From The Fly #opțiunea care vă permite să faceți un set de date EDDTableFromFileNames care permite utilizatorilor să navigheze conținutul unei găleți S3 (și descărcați fișiere) prin intermediul setului de date"files"Opţiune. Există oexemplu de mai jos.
- ERDDAP™poate citi date de lafișiere de date externe comprimate, deci este bine dacă fișierele de pe S3 sunt stocate ca.gz,.gzip,.bz2,.Z, sau alte tipuri de fișiere de date externe comprimate, care pot dramatic (2 - 20X) reducerea costurilor de stocare a fișierelor. Adesea nu există nici o penalizare de timp pentru utilizarea fișierelor comprimate extern, deoarece timpul salvat prin transferul unui fișier mai mic de la S3 laERDDAPechilibrează aproximativ timpul suplimentar necesarERDDAP™Pentru a decomprima fişierul. Pentru a utiliza această caracteristică, trebuie doar să vă asigurați că setul de date<fileNameRegex> permite tipul de fișier comprimat (de exemplu, prin adăugarea (|.gz) până la sfârşitul regexului) .
- Pentru cel mai comun caz, în cazul în care aveți oERDDAP™instalat pe PC-ul dvs. pentru testare/dezvoltare și în cazul în care setul de date are fișiere binare care sunt stocate ca obiecte într-o găleată S3, o abordare pentru a obține setul de date înERDDAP™este:
-
Creați un director pe PC pentru a deține câteva fișiere de date de testare.
-
Descărcaţi două fişiere de date din sursă în directorul pe care tocmai l-aţi creat.
-
UtilizareGenereazăSeturi de dateXmlpentru a genera bucata dedatasets.xmlpentru setul de date bazat pe cele două fișiere de date locale.
-
Verificați dacă setul de date funcționează conform cerințelorDasDdsși/sau localERDDAP.
Următoarele etape fac o copie a setului de date (care va obține date de la găleata S3) pe un publicERDDAP.
-
Copiază bucata dedatasets.xmlpentru setul de date ladatasets.xmlpentru publicERDDAP™care va servi datelor.
-
Creează un director în publicERDDAPHard disk local pentru a deține un depozit de fișiere temporare. Directorul nu va folosi mult spaţiu pe disc. (vezi cacheSizeGB de mai jos) .
-
Modificarea valorii setului de date<tag fileDir> astfel încât să indice la directorul tocmai ați creat (chiar dacă directorul este gol) .
-
Adaugă ocacheFromUrletichetă care specifică numele cupei setului de date și prefixul opțional (și anume directorul) în specificAWs S3 URL Format careERDDAP™necesită.
-
Se adaugă o [<CacheSizeGB>] (#cachefromurl) tag-ul pe xml-ul setului de date (De exemplu, 10 este o valoare bună pentru majoritatea seturilor de date) pentru a spuneERDDAP™limitarea dimensiunii cache-ului local (Adică, nu încercați să cache toate fișierele de la distanță) .
-
Vezi dacă funcţionează în public.ERDDAP. Rețineți că prima datăERDDAP™încarcă setul de date, va dura mult până se încarcă, deoareceERDDAP™trebuie să descarce și să citească toate fișierele de date.
-
În cazul în care setul de date este o colecție uriașă de fișiere de date cu grilă uriașă, acest lucru va dura foarte mult timp și nu va fi practic. În unele cazuri, pentru fișiere de date în rețea,ERDDAP™poate extrage informațiile necesare (De exemplu, momentul pentru datele dintr-un fișier de date în rețea) din numele fișierului și pentru a evita această problemă. Vezi?Agregare prin Nume fișiere.
- Opțional (dar în special pentru tabelul EDDFromFiles settings) , puteți adăuga unnThreadstag-ul setului de dateERDDAPsă utilizeze mai mult de 1 fir atunci când răspunde la cererea unui utilizator de date. Acest lucru minimizează efectele întârzierii care apare atunci cândERDDAP™citește fișierele de date din (distant) AWS S3 găleți în cache-ul local și (Poate.) Îi decomprimăm.
AWS S3 Date deschise
Ca parte dinNOAA'sProgram Big Data,NOAAare parteneriate cu cinci organizații, inclusiv AWS, "pentru a explora beneficiile potențiale ale stocării de copii ale observațiilor-cheie și a rezultatelor modelului în Cloud pentru a permite calcularea directă a datelor fără a necesita o distribuție ulterioară." AWS include seturile de date de laNOAAca parte a programului său de a oferi publicului acces la o mare colecție deOpen data on AWS S3de la orice calculator, dacă este vorba de o instanță de calcul Amazon (un computer închiriat) pe rețeaua AWS sau propriul PC pe orice rețea. Exemplul de mai jos presupune că lucrați cu un set de date accesibil publicului.
Accesarea fișierelor într-o găleată AWS S3
Pentru o găleată de date S3, proprietarul găleţii trebuie să vă dea acces la găleată. (A se vedea documentația AWS.)
În toate cazurile, veți avea nevoie de un cont AWS deoarece AWS SDK pentruJava (careERDDAP™folosește pentru a prelua informații despre conținutul unei găleți) necesită acreditarea contului AWS. (mai multe pe aceasta mai jos)
ERDDAP™poate accesa găleți AWS S3 numai dacă specificați [<CacheFromUrl>] (#cachefromurl) (sau<fileDir>) într-un format specific:
https://bucketName.s3.aws-region.amazonaws.com/prefix/
unde
- Numele găleții este forma scurtă a numelui găleții, de exemplu noa-goes17.
- Regiunea-aws, de exemplu, ne-est-1, este din coloana "Region" într-una din tabelele dePuncte finale ale serviciului AWSunde se află găleata.
- Prefixul este opţional. Dacă este prezent, trebuie să se termine cu'/'.
De exemplu, https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Acest format URL este una dintre recomandările AWS S3: a se vedeaAccesarea unei găleţişiaceastă descriere a prefixelor.ERDDAP™cere să combinaţi URL- ul găleată şi prefixul opţional într-un URL pentru a specifica<CacheFromUrl> (sau<fileDir>) în cazul în care fișierele sunt situate.
Testați găleți AWS S3
Pentru găleți publice, puteți și ar trebui să testați URL-ul găleții din directorul AWS S3 din browser, de exemplu, https://noaa-goes17.s3.us-east-1.amazonaws.com Dacă URL-ul găleată este corect și adecvat pentruERDDAP, va returna un document XML care are (parţial) lista conţinutului găleţii. Din păcate, URL-ul complet (Adică URL- ul găleții plus prefix) căERDDAP™nu funcţionează într-un browser. AWS nu oferă un sistem pentru a naviga ierarhia unei găleți ușor în browser. (Dacă nu e corect, trimite-i un e-mail lui Chris. John la Noaa.gov. În caz contrar, Amazon, vă rugăm să adăugați sprijin pentru acest lucru!)
Vizualizarea conţinutului unei găleţi
Găleți S3 conțin adesea câteva categorii de fișiere, într-un cuplu de subdirecții pseudo, care ar putea deveni un cuplu deERDDAP™Seturi de date. Pentru a faceERDDAP™Seturi de date, trebuie să știți directorul de pornire pentru<CacheFromUrl> (sau<fileDir>) și formatul numelor fișierelor care identifică acel subset de fișiere. Dacă încercați să vizualizați întregul conținut al unei găleți într-un browser, S3 vă va arăta doar primele 1000 de fișiere, ceea ce este insuficient. În prezent, cel mai bun mod pentru tine de a vedea tot conținutul unei găleți este de a face oTabel EDDFromFileNamesSet de date (pe PC-uriERDDAP™și/sau pe publicul dumneavoastrăERDDAP) , care vă oferă, de asemenea, o modalitate ușoară de a naviga structura director și de a descărca fișiere. ă<fileDir> for that will be the URL you made above, ex., https://noaa-goes17.s3.us-east-1.amazonaws.com .\[De ce AWS S3 nu oferă o modalitate rapidă și ușoară pentru oricine să facă acest lucru fără un cont AWS?\]Rețineți că atunci când fac acest lucru pe PC-ul meu pe o rețea non-Amazon, se pare că Amazon încetinește răspunsul la un firicel (aproximativ 100 (?) fișiere pe bucată) după primele câteva bucăți (din 1000 de fișiere pe bucată) sunt descărcate. Deoarece gălețile pot avea un număr mare de fișiere (noaa-goes17 are 26 de milioane) , obtinerea tot continutul unei galeti poate lua EDDtableFromFileNames câteva ore (De exemplu, 12!) pentru a termina.\[Amazon, nu-i aşa?!\]
Realizarea unui tabel EDD De la FileNames Dataset cu un AWS S3 Bucket
Dacă aveți un nume găleată, dar nu aveți deja o listă de fișiere în găleata S3 sau prefixul care identifică locația fișierelor relevante în găleată, utilizați instrucțiunile de mai jos pentru a face un set de date EDDDe la FileNames astfel încât să puteți naviga în ierarhia directoarelor găleată S3 prinERDDAP's"files"sistem.
- Deschide un cont AWS ERDDAP™utilizeazăAWS SDK pentruJavapentru a obține informații găleată de la AWS, așa că trebuie săcreează și activează un cont AWS. E o treabă destul de importantă, cu multe lucruri de învăţat.
- Pune-ţi AWS-urile undeERDDAP™le pot găsi. Urmaţi instrucţiunile laÎnființarea AWS Acreditative și Regiune pentru DezvoltareDeci...ERDDAP™ (în special, AWS SDK pentruJava) va fi capabil să găsească și să utilizeze acreditările AWS. DacăERDDAP™nu pot găsi acreditările, veți vedea o Java.lang. Argument ilegal Excepție: fișierul profil nu poate fi o eroare nulă înERDDAPDosarul log.txt.
Indiciu pentru Linux și Mac OS: fișierul de acreditare trebuie să fie în directorul de origine al utilizatorului care rulează Tomcat (şiERDDAP) (pentru acest paragraf, vom presupune utilizator=tomcat) într-un fișier numit ~/.aws/credentials . Nu presupune că ~ este / home/tomcat - de fapt, utilizați cd ~ pentru a afla unde crede sistemul de operare ~ pentru utilizator = Tomcat este. Creează directorul dacă nu există. De asemenea, după ce ați pus fișierul de acreditare în loc, asigurați-vă că utilizatorul și grupul pentru fișier sunt Tomcat și apoi utilizați chmod 400 acreditări pentru a vă asigura că fișierul este citit-doar pentru utilizator=tomcat.
- Creează URL- ul găleată înformat careERDDAP™necesită, de exemplu, https://noaa-goes17.s3.us-east-1.amazonaws.com , și (pentru găleți publice) testați-l într-un browser pentru a vă asigura că returnează un document XML care are o listă parțială a conținutului acelei găleți.
- UtilizareGenereazăSeturi de dateXmlpentru a crea unTabel EDDFromFileNamesSet de date:
-
Pentru directorul de pornire, utilizați această sintaxă: \\\ de la OnTheFly, Bucketurl de exemplu, \*\*De la OnTheFly, https://noaa-goes17.s3.us-east-1.amazonaws.com/
-
Numele fișierului regex? \*
-
Recursiv? Adevărat.
-
reîncărcare Fiecare NMinutes? 10080
-
Instituţie?NOAA
-
Un rezumat? Nimic. (ERDDAP™va crea automat un rezumat decent.)
-
Titlul? Nimic. (ERDDAP™va crea automat un titlu decent.) Ca de obicei, ar trebui să editați XML-ul rezultat pentru a verifica corectitudinea și a face îmbunătățiri înainte de bucata de seturi de date folosindu-l îndatasets.xml.
-
- Dacă urmați instrucțiunile de mai sus și încărcați setul de date înERDDAP, ați creat un set de date EDD TableFromFiles. Ca un exemplu, și pentru a face mai ușor pentru oricine să navigheze și să descarce fișiere din galețile AWS Open Data, am creat seturi de date EDDTabelFromFileNames (a se vedea lista de la
https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ ) pentru aproape toateAWS S3 Deschideți gălețile de date.
\[Cele câteva găleți pe care nu le-am inclus fie au un număr mare de fișiere în directorul rădăcină (mai mult decât poate fi descărcat într-un timp rezonabil) , sau nu permit accesul public (Nu ar trebui să fie toate publice?) , sau sunt cereri de plată găleți (De exemplu, Sentinel) .\]
Dacă faceţi clic pe"files"link-ul pentru unul dintre aceste seturi de date, puteți naviga copacul director și fișiere în acea găleată S3. Din cauza drumului\\\* De la OnTheFly EDD TableFromFiles works, aceste liste directoare sunt întotdeauna perfect actualizate deoareceERDDAP™îi face să zboare. Dacă faceți clic pe arborele director pentru un nume de fișier real și faceți clic pe numele fișierului,ERDDAP™va redirecționa cererea la AWS S3 astfel încât să puteți descărca fișierul direct de la AWS. Poţi să verifici dosarul.
Probleme? În cazul în care tabelul EDDFromFiles nu va încărca înERDDAP™ (sau DasDds) , căutați în fișierul log.txt pentru un mesaj de eroare. Dacă vezi un Java.lang. Argument ilegal Excepție: fișierul profil nu poate fi eroare nulă, problema este că AWS SDK pentruJava (utilizat deERDDAP) nu este găsirea dosarului de acreditare. A se vedea instrucțiunile de acreditare de mai sus.
Este regretabil că AWS nu permite pur și simplu oamenilor să folosească un browser pentru a vedea conținutul unei găleți publice.
Apoi, puteți faceERDDAP™seturi de date care oferă utilizatorilor acces la datele din fișiere.
Vezi instrucţiunile dinERDDAP™și S3 Buckets (mai sus) .
Pentru setul de date EDDtableFromFileNames pe care l-ați făcut mai sus, dacă faceți un pic poking în jurul cu directorul și numele de fișiere în arborele director, devine clar că numele directoarelor de nivel superior (De exemplu, ABI-L1b-RadC) corespunde cu ceea ceERDDAP™ar numi seturi de date separate. Găleata cu care lucrezi poate fi similară. Ați putea apoi să creați seturi de date separate înERDDAP™pentru fiecare dintre aceste seturi de date, utilizând, de exemplu,
https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
ca<Cache FromUrl>. Din păcate, pentru acest exemplu special, seturile de date din găleată toate par a fi de nivel 1 sau de nivel 2, careERDDAP™ nu este deosebit de bun la, deoarece setul de date este o colecție mai complicată de variabile care utilizează diferite dimensiuni.
Fișiere NcML
Fișierele NcML vă permit să specificați modificările la una sau mai multe surse originaleNetCDF (v3 sau v4) .nc,.grib,.bufr, sau.hdf (v4 sau v5) fișiere, și apoi auERDDAP™trataţi.ncfișiere ml ca fișiere sursă.ERDDAP™Seturile de date vor accepta.ncfișiere ml ori de câte ori.ncDosarele sunt aşteptate. Fișierele NcML TREBUIE să aibă extensia.ncml. VeziUnidataDocumentația NcML. NcML este util pentru că puteți face unele lucruri cu ea (de exemplu, modificarea diferitelor fișiere dintr-o colecție, inclusiv adăugarea unei dimensiuni cu o valoare specifică unui fișier) , care nu se poate face cuERDDAP'sdatasets.xml.
- Modificări ale.ncUltima oră codificată a fișierului ml va determina reîncărcarea fișierului ori de câte ori setul de date este reîncărcat, dar modificările aduse suportului.ncFişierele de date nu vor fi observate direct.
- NcML este\*foarte\*sensibil la ordinea unor elemente din fișierul NcML. Gândiți-vă la NcML ca specificând o serie de instrucțiuni în ordinea specificată, cu intenția de a schimba fișierele sursă (starea la începutul/topul fișierului NcML) în fișierele de destinație (starea de la sfârșitul/josul fișierului NcML) .
O alternativă la NcML esteNetCDFOperatorii (NCO) . Marea diferență este că NcML este un sistem pentru a face schimbări pe-the-fly (Astfel încât fișierele sursă nu sunt modificate) , întrucâtNCOpoate fi folosit pentru a face modificări la (sau versiuni noi ale) Dosarele. AmbeleNCOși NcML sunt foarte, foarte flexibile și vă permit să facă aproape orice schimbare vă puteți gândi la fișierele. Pentru ambele, poate fi o provocare să ne dăm seama exact cum să facem ceea ce vrem să facem -- verificați web pentru exemple similare. Ambele sunt instrumente utile pentru pregătirea netCDF șiHDFfișiere pentru utilizare cuERDDAP, în special, pentru a face schimbări dincolo de ceea ceERDDAPSistemul de manipulare e bun.
Exemplul #1: Adăugarea unei dimensiuni a timpului cu o valoare unică Iată un.ncfișier ml care creează o nouă dimensiune exterioară (timp, cu 1 valoare: 1041379200) și adaugă această dimensiune la variabila pic în fișierul numit A2003001.L3m\_DAY\_PIC\_pic\_4km.nc:
<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>
Exemplul #2: Schimbarea valorii timpului existent Uneori sursa.ncfișier are deja o dimensiune a timpului și valoarea timpului, dar valoarea este incorectă (pentru scopurile dumneavoastră) . Asta..ncfişierul ml spune: pentru fişierul de date numit ""198108252300-NCEI..." pentru variabila dimensiune"time", setați atributul unităților să fie "secunde din 1970-01-01T00:00:00Z" și setați valoarea de timp pentru a fi 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>
NetCDFOperatorii (NCO)
"Operatorii netCDF (NCO) cuprinde o duzină de programe independente, linia de comandă care iau netCDF\[v3 sau v4\],HDF \[v4 sau v5\],\[Grib, .bufr,\]și/sauDAPfișiere ca intrare, apoi funcționează (De exemplu, obține date noi, statistici de calcul, print, hiperslab, manipulează metadate) și de ieșire rezultatele pentru a ecrana sau fișiere în format text, binar, sau netCDF.NCOajută la analiza datelor ştiinţifice. Stilul shell-comand alNCOpermite utilizatorilor să manipuleze și să analizeze interactiv fișiere sau cu scripturi expresive care să evite unele medii de programare de nivel superior." (de laNCOprima pagină) .
O alternativă laNCOesteNcML. Marea diferență este că NcML este un sistem pentru a face schimbări pe-the-fly (Astfel încât fișierele sursă nu sunt modificate) , întrucâtNCOpoate fi folosit pentru a face modificări la (sau versiuni noi ale) Dosarele. AmbeleNCOși NcML sunt foarte, foarte flexibile și vă permit să facă aproape orice schimbare vă puteți gândi la fișierele. Pentru ambele, poate fi o provocare să ne dăm seama exact cum să facem ceea ce vrem să facem -- verificați web pentru exemple similare. Ambele sunt instrumente utile pentru pregătirea netCDF șiHDFfișiere pentru utilizare cuERDDAP, în special, pentru a face schimbări dincolo de ceea ceERDDAPSistemul de manipulare e bun.
De exemplu, puteți folosiNCOpentru a face unitățile variabilei de timp consistente într-un grup de fișiere în cazul în care acestea nu au fost coerente inițial. Sau, puteți folosiNCOse aplicăscale\_factorşiadd\_offsetîntr-un grup de fișiere undescale\_factorşiadd\_offsetau valori diferite în diferite fișiere sursă. (Sau, puteți face acum cu aceste probleme înERDDAP™prinEDDGridDe la NCFilesDespachetat, care este o variantă deEDDGridDinNcFiles care despachetează date ambalate și standardizează valorile timpului la un nivel scăzut pentru a face față unor fișiere de colectare care au diferitescale\_factors şiadd\_offset, sau unități de timp diferite.)
NCOeste Free and Open Source Software care utilizeazăGPL 3. 0Permisul.
Exemplul #1: Unități de luare în concordanță
EDDGridDin fişiere şi tabel EDD Din fișiere insistă că unitățile pentru o anumită variabilă să fie identice în toate fișierele. Dacă unele dintre fişiere sunt banale (nefuncțional) diferite de altele (de exemplu, unități de timp ale
"secunde din 1970-01-01 00:00 UTC" versus
"seconds since 1970-01-01T00:00:00Z", ai putea folosiNCO'sncatted. pentru a schimba unitățile din toate fișierele pentru a fi identice cu
NCO/Ncatted -a units,time,o,c,'secunde from 1970-01-01T00:00:00Z' \*.nc
\[Pentru multe probleme ca aceasta în EDD Table From... Seturi de fișiere, puteți utiliza acumstandardizează Ce?pentru a spuneERDDAPpentru a standardiza fișierele sursă ca acestea sunt citite înERDDAP.\]
Limite la dimensiunea unui set de date
Veți vedea mai multe referințe la "2 miliarde" de mai jos. Mai exact, aceasta este o referire la 2,147,483,647 (2^31-1) , care este valoarea maximă a unui număr întreg semnat pe 32 de biți. În unele limbi ale calculatorului, de exempluJava (careERDDAP™este scris în) , care este cel mai mare tip de date care poate fi folosit pentru mai multe structuri de date (de exemplu, dimensiunea unui array) .
Pentru valorile stringurilor (de exemplu, pentru denumirile variabile, denumirile atributelor, valorile atributelor String și valorile datelor String) , numărul maxim de caractere per coardă înERDDAP™este ~2 miliarde. Dar în aproape toate cazurile, vor exista probleme mici sau mari dacă o coardă depășește o dimensiune rezonabilă (de exemplu 80 de caractere pentru nume variabile și nume atribute și 255 de caractere pentru majoritatea valorilor atributelor string și a valorilor datelor) . De exemplu, paginile web care afișează nume variabile lungi vor avea nume variabile ciudat de largi și lungi vor fi trunchiate dacă depășesc limita tipului de fișier de răspuns.
Pentru seturi de date grupate:
- Numărul maxim deaxisVariableS este ~2 miliarde. Numărul maxim dedataVariableS este ~2 miliarde. Dar dacă un set de date are > 100 de variabile, va fi dificil pentru utilizatori să utilizeze. Și dacă un set de date are > 1 milion de variabile, serverul va avea nevoie de o mulțime de memorie fizică și vor exista alte probleme.
- Dimensiunea maximă a fiecărei dimensiuni (axisVariable) este ~2 miliarde de valori.
- Cred că numărul total maxim de celule (produsul tuturor dimensiunilor) este nelimitat, dar poate fi ~9e18.
Pentru seturile de date tabelare:
- Numărul maxim dedataVariableS este ~2 miliarde. Dar dacă un set de date are > 100 de variabile, va fi dificil pentru utilizatori să utilizeze. Și dacă un set de date are > 1 milion de variabile, serverul va avea nevoie de o mulțime de memorie fizică și vor exista alte probleme.
- Numărul maxim de surse (de exemplu, fișiere) care pot fi agregate este ~2 miliarde.
- În unele cazuri, num ărul maxim de rânduri dintr-o sursă individuală (de exemplu, un fișier, dar nu o bază de date) este ~2 miliarde de rânduri.
- Nu cred că există alte limite.
Atât pentru seturile de date în grilă, cât și pentru tabulare, există anumite limite interne privind dimensiunea subsetului care pot fi solicitate de un utilizator într-o singură cerere (adesea legate de >2 miliarde de ceva sau ~9e18 de ceva) , dar este mult mai probabil ca un utilizator va lovi limitele specifice de tip de fișier.
- NetCDFVersiunea 3.ncfișierele sunt limitate la 2GB octeți. (Dacă e o problemă pentru cineva, anunţă-mă: Aș putea adăuga sprijin pentruNetCDFVersiunea 3.ncExtensie pe 64 de biți sauNetCDFVersiunea 4, care ar mări semnificativ limita, dar nu infinit.)
- Browser-ul se prăbuşeşte după doar ~500MB de date, aşa căERDDAP™limitează răspunsul la.htmlTablecereri la ~400MB de date.
- Multe programe de analiză a datelor au limite similare (de exemplu, dimensiunea maximă a unei dimensiuni este adesea ~2 miliarde de valori) , astfel încât nu există nici un motiv să lucreze din greu pentru a obține în jurul limitelor specifice de tip fișier.
- Limitele specifice fișierelor sunt utile pentru a preveni cererile naive pentru cantități uriașe de date (de exemplu, "dă-mi toate aceste seturi de date" atunci când setul de date conține 20TB) , care ar dura săptămâni sau luni pentru a descărca. Cu cât descărcarea este mai lungă, cu atât va eşua din mai multe motive.
- Limitele specifice de tip de fișier sunt utile pentru a forța utilizatorul să se ocupe de subansambluri de dimensiuni rezonabile (de exemplu, abordarea unui set de date cu grilă mare prin intermediul fișierelor cu date dintr-un punct de timp fiecare) .
Comută la ACDD-1.3
Noi (în specialGenereazăSeturi de dateXml) recomandă în prezentVersiunea ACDD 1.3, care a fost ratificată la începutul anului 2015 și care este denumită "ACDD-1.3" în atributul Convenției mondiale. Înainte deERDDAP™versiunea 1.62 (lansat în iunie 2015) ,ERDDAP™utilizat/recomandat originalul, versiunea 1.0, alNetCDFAtribuie Convenția pentru descoperirea datelorcare a fost menționată ca "UnidataDataset Discovery v1.0" în convenţiile globale şiMetadata\_Conventionsatribute.
Dacă seturile dumneavoastră de date folosesc versiuni anterioare ale ACDD, RECOMANDăm să treceți la ACDD-1.3. Nu e greu. ACDD-1.3 este compatibil cu versiunea 1.0. Pentru a comuta, pentru toate seturile de date (cu excepţiaEDDGridDe la Erddap și tabelul EDD Seturi de date din Erddap) :
- Elimină noul depreciat globalMetadata\_Conventionsatribut prin adăugarea (sau prin schimbarea celor existenteMetadata\_Conventionsatribut)
<att name="Metadata\\_Conventions">null</att>
la nivelul global al setului de date<addAttributes>. 2. Dacă setul de date are un atribut al convenţiilor la nivel global<addAttributes>, modifică toate "UnidataDataset Discovery v1.0" se referă la "ACDD-1.3." Dacă setul de date nu are un atribut al convenţiilor la nivel global<addAttributes>, apoi se adaugă una care se referă la ACDD-1.3. De exemplu,
<att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>
3. Dacă setul de date are o valoare globalăstandard\_name\_vocabularyatribut, vă rugăm să modificați formatul valorii în, de exemplu,
<att name="standard\\_name\\_vocabulary">CF Standard Name Table v65</att>
Dacă trimiterea este la o versiune mai veche aTabelul cu denumirea standard CF. este, probabil, o idee bună pentru a trece la versiunea curentă (65, în timp ce scriem asta) , deoarece la acest tabel se adaugă noi nume standard cu versiuni ulterioare, dar numele standard vechi sunt rareori depreciate și niciodată eliminate. 4. Deși ACDD-1.0 a inclus atribute globale pentrucreator\_name,creator\_email,creator\_url,GenereazăSeturi de dateXmlnu le-a adăugat în mod automat până când cândva în jurul valorii deERDDAP™v1.50. Acestea sunt informaţii importante:
- creator\_namepermite utilizatorilor să cunoască/să citeze creatorul setului de date.
- creator\_emaille spune utilizatorilor adresa de e-mail preferată pentru contactarea creatorului setului de date, de exemplu dacă au întrebări cu privire la setul de date.
- creator\_urloferă utilizatorilor o modalitate de a afla mai multe despre creator.
- ERDDAP™utilizează toate aceste informații atunci când generează documente de metadate FGDC și ISO 19115-2/19139 pentru fiecare set de date. Aceste documente sunt adesea utilizate de serviciile externe de căutare.
Vă rugăm să adăugați aceste atribute la nivelul global al setului de date<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>
Asta e. Sper că nu a fost prea greu.
Zarr
Din versiunea 2.25ERDDAP™poate citi local Fișiere Zarr care utilizeazăTabel EDDFromNcFilesşiEDDGridDinNcFiles.
(Începând din august 2019) Am putea fi ușor de greșit, dar nu suntem încă convinși căZarr, sau sisteme similare care sparg fișiere de date în bucăți mai mici, sunt soluții mari la problema deERDDAP™citirea datelor stocate în servicii cloud precum Amazon AWS S3. Zarr este o mare tehnologie care şi-a arătat utilitatea într-o varietate de situaţii, nu suntem siguri căERDDAP+S3 va fi una dintre aceste situații. În mare parte spunem: înainte de a ne grăbi să facem efortul de a stoca toate datele noastre în Zarr, să facem niște teste pentru a vedea dacă este de fapt o soluție mai bună.
Problemele cu accesarea datelor în cloud sunt latența (decalajul pentru a obține mai întâi date) și accesul la nivel de fișiere (mai degrabă decât accesul la nivel de bloc) . Zarr rezolvă problema accesului la nivel de fișier, dar nu face nimic despre latență. Comparativ cu doar descărcarea fișierului (astfel încât să poată fi citit ca un fișier local cu acces la nivel de bloc) , Zarr poate exacerba chiar problema latenței deoarece, cu Zarr, citirea unui fișier acum implică o serie de mai multe apeluri pentru a citi diferite părți ale fișierului (fiecare cu propriul decalaj) . Problema latenței poate fi rezolvată prin paralelizarea cererilor, dar aceasta este o soluție de nivel superior, nu dependentă de Zarr.
Şi cu Zarr (ca și în bazele de date relaționale) , pierdem confortul de a avea un fișier de date fi un simplu, singur fișier pe care le puteți verifica cu ușurință integritatea, sau face / descărca o copie a.
ERDDAP™ (în V2) are un sistem pentru menținerea unui cache local de fișiere dintr-o sursă URL (De exemplu, S3) (a se vedea<CacheFromUrl> și<CacheMaxGB>] (#cachefromurl) ). Şi noul [<nThreads>] (#Nămoluri) ar trebui să minimizeze problema latenței prin paralelizarea recuperării datelor la un nivel ridicat.<CacheFromUrl> pare să funcționeze foarte bine pentru multe scenarii. (Nu suntem siguri cât de benefice<nThreads> este fără alte teste.) Recunoastem ca nu am facut teste de sincronizare pe o instanta AWS cu o buna conexiune la retea, dar am testat cu succes cu diferite surse URL la distanta de fisiere. Şi...ERDDAP's<cacheFromUrl> funcționează cu orice tip de fișier de date (de exemplu,.nc,.hdf,.csv,.jsonlCSV) , chiar dacă comprimat extern (de exemplu,.gz) , fără modificări ale fișierelor (De exemplu, rescrierea lor ca colecții Zarr) .
Este probabil că diferite scenarii vor favoriza diferite soluții, de exemplu, trebuie doar să citiți o parte a unui fișier o singură dată (Zarr va câştiga.) , vs. nevoie pentru a citi toate un fișier o dată, vs. trebuie să citească o parte sau toate de un fișier în mod repetat (<CacheFromUrl> va câştiga).
În mare parte spunem: înainte de a ne grăbi să facem efortul de a stoca toate datele noastre în Zarr, să facem niște teste pentru a vedea dacă este de fapt o soluție mai bună.
Lista seturilor de date de tip
Dacă aveți nevoie de ajutor pentru a alege tipul corect de set de date, a se vedeaAlegerea tipului de set de date.
Tipurile de seturi de date se încadrează în două categorii. (De ce?)
EDDGrid
- EDDGrid Seturile de date manipulează date în rețea.
- ÎnEDDGridSeturile de date, variabilele de date sunt array-uri multidimensionale de date.
- Trebuie să existe o variabilă a axei pentru fiecare dimensiune. Variabilele axei trebuie specificate în ordinea în care variabilele de date le utilizează.
- ÎnEDDGridSeturi de date, toate variabilele de date TREBUIE utilizate (cotă) toate variabilele axei. (De ce? Şi dacă nu o fac?)
- Valori de dimensiune sortare - În totalEDDGridSeturile de date, fiecare dimensiune trebuie să fie în ordine sortate (ascendentă sau descendentă) . Fiecare poate fi spaţiată neregulat. Nu pot exista legături. Aceasta este o cerinţă aStandardul metadatelor CF. Dacă valorile oricărei dimensiuni nu sunt în ordine sortate, setul de date nu va fi încărcat șiERDDAP™va identifica prima valoare nesortate în fișierul jurnal; Big ParentDirectory /logs/log.txt.
Câteva subclase au restricții suplimentare (în special,EDDGridDimensiunea totală necesită ca dimensiunea exterioară (cea mai stângă, prima) să fie ascendentă.
Valorile de dimensiune nesortate indică aproape întotdeauna o problemă cu setul de date sursă. Acest lucru se întâmplă cel mai frecvent atunci când un fișier cu nume greșite sau nepotrivit este inclus în agregare, ceea ce duce la o dimensiune a timpului nesortate. Pentru a rezolva această problemă, consultați mesajul de eroare dinERDDAP™log.txt fișier pentru a găsi valoarea de timp ofensatoare. Apoi căutați în fișierele sursă pentru a găsi fișierul corespunzător (sau una înainte sau una după) care nu aparține în agregare.
- Vezi descrierea mai completă aEDDGridmodel de date.
- ăEDDGridTipurile de seturi de date sunt:
- EDDGridDe la AudioFilesagregate de date dintr-un grup de fișiere audio locale.
- EDDGridFromDapManipulează date din rețeaDAPservere.
- EDDGridTabel de la EDDvă permite să convertiți un set de date tabular într-un set de date grilat.
- EDDGridFromErddapManipulează datele de la distanțăERDDAP.
- EDDGridDe la EtopoDoar se ocupă de datele de topografie ETOPO încorporate.
- EDDGridDin dosareeste superclasa tuturorEDDGridDe la... clase de fişiere.
- EDDGridDe la MergeIRFilesdate agregate dintr-un grup de CombeIR locale.gzDosare.
- EDDGridDinNcFilesdate agregate dintr-un grup de localiNetCDF (v3 sau v4) .ncși fișierele aferente.
- EDDGridDe la NCFilesDespachetateste o variantă dacăEDDGridFromNcFiles care, de asemenea, agregate date dintr-un grup de localeNetCDF (v3 sau v4) .ncși fișiere aferente, careERDDAP™Despachetează la un nivel scăzut.
- EDDGridLonPM180modifică valorile de longitudine ale unui copilEDDGridastfel încât acestea sunt în intervalul -180 la 180.
- EDDGridLon0360modifică valorile de longitudine ale unui copilEDDGridastfel încât acestea sunt în intervalul 0 - 360.
- EDDGridSideBySideagregate două sau mai multeEDDGridseturi de date cot la cot.
- EDDGridDimensiune agregatăagregate două sau mai multeEDDGridseturi de date, fiecare dintre acestea având o gamă diferită de valori pentru prima dimensiune, dar valori identice pentru celelalte dimensiuni.
- EDDGridCopiazăpoate face o copie locală a unui altEDDGriddatele și servește date de la copia locală.
- ToateEDDGridSeturile de date susțin o setare nThreads, care spuneERDDAP™câte fire să folosească atunci când răspunde la o cerere. VezinThreadsdocumentația pentru detalii.
Tabel EDD
- Tabel EDD Seturile de date manipulează date tabulare.
- Datele tabelare pot fi reprezentate ca un tabel de baze de date cu rânduri și coloane. Fiecare coloană (o variabilă de date) are un nume, un set de atribute și stochează un singur tip de date. Fiecare rând are o observație (sau grup de valori conexe) . Sursa de date poate avea datele într-o structură de date diferită, o structură de date mai complicată și/sau mai multe fișiere de date, darERDDAP™trebuie să fie în măsură să aplatizeze datele sursă într-un tabel similar bazei de date pentru a prezenta datele ca un set de date tabular utilizatorilor deERDDAP.
- Vezi descrierea mai completă aModel de date EDDName.
- Tipurile de seturi de date ale tabelului EDD sunt:
- Tabel EDD din toate dateleeste un set de date de nivel superior care are informații despre toate celelalte seturi de date dinERDDAP.
- Tabel EDD din AsciiFilesdate agregate din fişierele de date conta-, file-, semicolon- sau tabulare separate de spaţiu ASCII.
- Tabel EDD De la Serviciul AsciiEste superclasa tuturor EDD Table FromAsciiService... clase.
- Tabel EDD din AsciiServiceNOSse ocupă de date de la unele dintreNOAAServicii web NOS.
- Tabel EDD din fișiere audioagregate de date dintr-un grup de fișiere audio locale.
- Tabel EDD din Fişiere AwsXmldate agregate dintr-un set de stații meteo automate (AWS) Fișiere XML.
- Tabel EDD din Cassandrase ocupă de datele tabulare de la o masă Cassandra.
- Tabel EDDDinColumnarAsciiFilesdate agregate din fişierele de date ASCII tabulare cu coloane de date cu lăţime fixă.
- Tabel EDD din DapSequencemanevrează date tabulare de laDAPservere de secvenţe.
- Tabel EDD din baza de datese ocupă de datele tabulare dintr-o bază de date.
- Tabel EDD dinEDDGridpermite crearea unui set de date EDD Table dintr-oEDDGridSet de date.
- Tabel EDD FromErddapmânuiește date tabulare de la o distanțăERDDAP.
- Tabel EDDFromFileNamescreează un set de date din informații despre un grup de fișiere din sistemul de fișiere al serverului, dar nu servește date din interiorul fișierelor.
- Tabel EDD din dosareeste superclasa tuturor EDD Tablelor din... clase de fişiere.
- Tabel EDD de la HttpGetesteERDDAPnumai sistemul pentru importul de date, precum și exportul de date.
- Tabel EDD dinHyraxFișiere (DEPRECAT) agregate date din fișiere cu mai multe variabile cu dimensiuni comune deservite de aHyrax OPeNDAPserver.
- Tabel EDD din InvalidCRAFiledate agregate dinNetCDF (v3 sau v4) .ncfișiere care utilizează o variantă specifică, invalidă, a CF DSG Contiguous Ragged Array (CRA) Dosare. Deşi...ERDDAP™acceptă acest tip de fișier, este un tip de fișier invalid pe care nimeni nu ar trebui să înceapă să-l utilizeze. Grupurile care utilizează în prezent acest tip de fișier sunt puternic încurajate să utilizezeERDDAP™să genereze fișiere DSG CRA valabile și să înceteze să mai utilizeze aceste fișiere.
- Tabel EDD De la JsonlCSVFilesdate agregate dinJSON Linii fișiere CSV.
- Tabel EDD Din mai multe DosareNcdate agregate dinNetCDF (v3 sau v4) .ncfișiere cu mai multe variabile cu dimensiuni comune.
- Tabel EDDFromNcFilesdate agregate dinNetCDF (v3 sau v4) .ncfișiere cu mai multe variabile cu dimensiuni comune. Este bine să continuăm să folosim acest tip de set de date pentru seturile de date existente, dar pentru noi seturi de date recomandăm utilizarea tabelului EDDFromMultidimNcFiles în schimb.
- Tabel EDD din NCFFiledate agregate dinNetCDF (v3 sau v4) .ncfișiere care utilizează unul dintre formatele de fișiere specificate deCF Geometrii de eșantionare discrete (DSG) Convenţii. Dar pentru fișiere care utilizează una dintre variantele multidimensionale CF DSG, utilizațiTabel EDD Din mai multe DosareNcÎn schimb.
- Tabel EDD de la NCCSvFilesdate agregate dinNCCSVFișiere ASCII.csv.
- Tabel EDDFromNOS (DEPRECAT) manevrează date tabulare de la serverele XML NOS.
- Tabel EDD FromOBISse ocupă de datele tabulare de la serverele OBIS.
- Tabel EDD din dosare de parchetse ocupă de datele de laParchet.
- Tabel EDD dinSOSmanevrează date tabulare de laSOSservere.
- Tabel EDD de la trei fișiere (DEPRECAT) agregate date din fișiere cu mai multe variabile cu dimensiuni comune deservite de aPREGĂTIRIOPeNDAPserver.
- Tabel EDD dinWFSFișiere (DEPRECAT) face o copie locală a tuturor datelor dintr-oArcGISMapServerWFSserver astfel încât datele să poată fi re-servate rapid laERDDAP™utilizatori.
- EDD TabelAgregareRowspoate face un set de date EDD Table dintr-un grup de seturi de date EDD.
- EDDCommentCopypoate face o copie locală a mai multor tipuri de seturi de date EDDTable și apoi să rezerve rapid datele din copia locală.
Descrierea detaliată a tipurilor de seturi de date
EDDGridFromDap
EDDGridFromDap se ocupă de variabilele rețelei dinDAPservere.
- Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți colecta informațiile de care aveți nevoie pentru a modifica că sau de a crea propriul XML pentru oEDDGridSet de date FromDap prin examinarea fișierelor DDS și DAS ale setului sursă din browser (prin adăugarea .das și .dds lasourceUrl, de exemplu, https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .
- EDDGridFromDap poate obține date de la orice variabilă multidimensională de la oDAPserver de date. (Anterior,EDDGridDin Dap s-a limitat la variabilele numite "grid," dar asta nu mai este o cerinţă.)
- Valori de dimensiune sortare - Valorile pentru fiecare dimensiune trebuie sortate (ascendentă sau descendentă) . Valorile pot fi șterse neregulat. Nu pot exista legături. Aceasta este o cerinţă aStandardul metadatelor CF. Dacă valorile oricărei dimensiuni nu sunt în ordine sortate, setul de date nu va fi încărcat șiERDDAP™va identifica prima valoare nesortate în fișierul jurnal; Big ParentDirectory /logs/log.txt.
Valorile de dimensiune nesortate indică aproape întotdeauna o problemă cu setul de date sursă. Acest lucru se întâmplă cel mai frecvent atunci când un fișier cu nume greșite sau nepotrivit este inclus în agregare, ceea ce duce la o dimensiune a timpului nesortate. Pentru a rezolva această problemă, consultați mesajul de eroare dinERDDAP™log.txt fișier pentru a găsi valoarea de timp ofensatoare. Apoi căutați în fișierele sursă pentru a găsi fișierul corespunzător (sau una înainte sau una după) care nu aparține în agregare.
EDDGridSchelet de la Dap 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>
EDDGridTabel de la EDD
EDDGridTabel de la EDD permite convertirea unui set de date tabelar EDD Tabular într-oEDDGridSet de date cu grilă. Ţine minte asta.ERDDAP™tratează seturi de date ca oricareSeturi de date cu grilă (subclase deEDDGrid) sau seturi de date tabelare (subclase ale tabelului EDD) .
- În mod normal, dacă ați grilat date, tocmai ați înființat unEDDGridSet de date direct. Uneori acest lucru nu este posibil, de exemplu, atunci când aveți datele stocate într-o bază de date relație careERDDAP™poate accesa numai prin intermediul EDDtableFromDatabase.EDDGridDe la clasa de tabel EDD vă permite să remediați această situație.
- În mod evident, datele din setul de date EDD trebuie să fie (Practic) date în rețea, dar într-o formă tabelară. De exemplu, setul de date al tabelului EDD poate avea date privind CTD: măsurători ale curentului spre est și spre nord, la mai multe adâncimi, de mai multe ori. Deoarece adâncimile sunt la fel în fiecare moment,EDDGridDin tabelul DEDD se poate crea un set de date în grilă, cu o dimensiune de timp și adâncime care accesează datele prin intermediul setului de date EDD.
- Generează dateName Xml... Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți aduna informațiile de care aveți nevoie pentru a îmbunătăți proiectul dur.
- Atribute sursă -- Ca și în cazul tuturor celorlalte tipuri de seturi de date,EDDGridFromtable are ideea că există surse globaleAttributes șiglobaladdAttributes (specificată îndatasets.xml) , care sunt combinate pentru a face global combinat Atribute, care sunt ceea ce văd utilizatorii. Pentru sursele globaleAttributes,EDDGridTabelul de la EDD folosește combinatul global Atribute ale setului de date al tabelului EDD. (Dacă te gândeşti puţin, are sens.)
În mod similar, pentru fiecareaxisVariable's şidataVariable'saddAttributes,EDDGridDin tabelul DEDD se folosește combinatul variabilei Atribute din setul de date al tabelului EDD aferentEDDGridDin baza de date a variabilei EDD TableAttributes. (Dacă te gândeşti puţin, are sens.)
În consecință, dacă tabelul EDD are metadate bune,EDDGridDe la tabelul DEDD are adesea nevoie de foarte puțineaddAttributesmetadate - doar câteva trucuri aici și acolo.
-
dataVariables comparativ cuaxisVariableS - Tabelul EDD suport are numaidataVariablec. AnEDDGridSetul de date din tabelul DEDD va avea uneleaxisVariables (create din unele din tabelul EDDdataVariables) și uneledataVariables (create din tabelul EDD rămasdataVariables) .GenereazăSeturi de dateXmlva face o presupunere cu privire la care tabel EDDdataVariablePrEDDGridTabel de la EDDaxisVariableS, dar este doar o presupunere. Aveți nevoie pentru a modifica producția de GenerateDateSetsXml pentru a specifica caredataVariableS va deveniaxisVariableS, și în care ordine.
-
axeValues -- Nu este nimic despre tabelul EDD de spusEDDGridTabelul de la DEDD valorile posibile aleaxisVariables în versiunea grilă a setului de date, astfel încât trebuie să furnizați aceste informații pentru fiecareaxisVariableprin intermediul unuia dintre aceste atribute:
- AxisValues -- vă permite să specificați o listă de valori. De exemplu, <att name="axisValues"type="dubluList"\>2, 2.5, 3, 3.5, 4</att> Notă privind utilizareatipul de dateplus cuvântul List. De asemenea, tipul de listă (de exemplu, dublu) , TREBUIE să se potrivească datelor Tipul variabilei din tabelul EDD șiEDDGridSeturi de date din tabelul DED.
- AxisValuesStartStrideStop -- vă permite să specificaţi o secvenţă de valori spaţiale în mod regulat, specificând valorile de pornire, de mers şi de oprire. Iată un exemplu echivalent cu exemplul AxisValues de mai sus: <numele att="axisValuesStartStrideStop"type="dubluList"\>2, 0,5, 4</att> Din nou, notați utilizarea unui tip de listă de date. De asemenea, tipul de listă (de exemplu, dublu) , TREBUIE să se potrivească datelor Tipul variabilei din tabelul EDD șiEDDGridSeturi de date din tabelul DED.
Actualizări... La fel cum nu există nici o cale pentruEDDGridDin tabelul DEDD pentru a determina inițial valorile axei din tabelul EDD, nu există nici o modalitate fiabilă pentruEDDGridDin tabelul DEDD pentru a determina din tabelul EDD când valorile axei s-au schimbat (în special, atunci când există valori noi pentru variabila temporală) . În prezent, singura soluție este modificarea atributului axValues îndatasets.xmlși reîncărcați setul de date. De exemplu, ai putea scrie un scenariu
- Cautădatasets.xmlpentru datasetID=" DatasetID " Deci lucrezi cu setul de date corect.
- Cautădatasets.xmlpentru următoarea apariţie a
The VariaablesSourceName
Deci lucrezi cu variabila corectă. - Cautădatasets.xmlpentru următoarea apariţie a
<att name="axisValuesStartStrideStop" type="doubleList">
Deci ştii poziţia de start a etichetei. 4. Cautădatasets.xmlpentru următoarea apariţie a
</att>
Deci ştii poziţia finală a valorilor axei. 5. Înlocuiți vechiul start, pas, opriți valorile cu noile valori. 6. ContactaţiURL- ul steaguluipentru ca setul de date să indiceERDDAP™pentru a reîncărca setul de date.
Nu e ideal, dar merge.
- precizie - CândEDDGridDin tabelul DEDD răspunde la solicitarea unui utilizator de date, acesta mută un rând de date din tabelul de răspuns al tabelului EDD înEDDGridReţeaua de răspuns. Pentru a face acest lucru, trebuie să-și dea seama dacă valorile "axei" pe un anumit rând din tabel corespund unei combinații de valori ale axei din rețea. Pentru tipurile de date întregi, este ușor să se determine dacă două valori sunt egale. Dar pentru flotoare și duble, acest lucru aduce problema oribil de numere de puncte plutitoarenu se potrivesc exact. (de exemplu, 0. 2 comparativ cu 0. 199999999999996) . La (încearcă să) Ocupă-te de asta.EDDGridDe la Tabel vă permite să specificați un atribut de precizie pentru oricare dintreaxisVariables, care precizează numărul total de cifre zecimale care trebuie să fie identice.
- De exemplu,<att name="precision" type="int/65"</att>
- Pentru diferite tipuri de variabile de date, există valori diferite de precizie implicită. De obicei, valorile implicite sunt adecvate. Dacă nu sunt, trebuie să specificaţi valori diferite.
- PentruaxisVariables care sunttimp sau timp Variabilele timbrelor, implicit este precizia completă (o potrivire exactă) .
- PentruaxisVariables care sunt flotoare, precizia implicită este 5.
- PentruaxisVariables care sunt duble, precizia implicită este 9.
- PentruaxisVariables care au tipuri de date întregi;EDDGridDe la EDDtable ignoră atributul de precizie și utilizează întotdeauna precizia completă (o potrivire exactă) .
- AVERTISMENT! Atunci când efectuează conversia unei bucăți de date tabulare într-o bucată de date grile, dacăEDDGridDe la EDDDtable nu se poate potrivi cu o valoare "axă" a tabelului EDD la una dintre valorile așteptateEDDGridValorile axei din tabelul DEDDEDDGridTabelul de la EDD în tăcere (nicio eroare) aruncă datele din acel rând al tabelului. De exemplu, pot exista alte date (nu pe grilă) în setul de date al tabelului EDD. (Și dacă pas > 1, nu este evident săEDDGridDe la Tabel care valori ale axei sunt valorile dorite și care dintre ele trebuie să fie omise din cauza pasului.) Deci, în cazul în care valorile de precizie sunt prea mari, utilizatorul va vedea valorile lipsă în răspunsul datelor atunci când există valori de date valabile.
Invers, în cazul în care valorile de precizie sunt stabilite prea mici, valorile de "axă" ale tabelului EDD care nu ar trebui să se potriveascăEDDGridValorile axei de la EDDD (în mod eronat) Potrivire.
Aceste probleme potențiale sunt oribile, deoarece utilizatorul primește date greșite (sau valori lipsă) atunci când acestea ar trebui să obțină datele corecte (sau cel puțin un mesaj de eroare) . Acesta nu este un defect înEDDGridDe la Table.EDDGridDe la Table nu poate rezolva această problemă. Problema este inerentă conversiei datelor tabulare în date grupate (Dacă nu se pot face alte presupuneri, dar nu se pot face aici.) . Depinde de tine.ERDDAP™administrator; testaţiEDDGridTabelul de la EDD să se asigure că valorile de precizie sunt stabilite pentru a evita aceste probleme potențiale.
gol Threshold
- gol Threshold-- Acesta este un tip foarte neobişnuit de set de date. Deoarece tipurile de întrebări care pot fi adresate (manipulate de) aEDDGridSet de date (legate de intervalele și pașiiaxisVariables) sunt foarte diferite de tipurile de întrebări care pot fi adresate (manipulate de) un set de date al tabelului EDD (doar legate de intervalele de unele variabile) , performanțaEDDGridSeturile de date ale tabelului DEDD variază foarte mult în funcție de cererea exactă care se face și de viteza setului de date al tabelului EDD. Pentru cererile care au o valoare de pas > 1,EDDGridTabelul DEDD poate solicita tabelul EDD suport pentru o bucată relativ mare de date (ca și cum pas=1) şi apoi să cercetăm rezultatele, păstrând datele din unele rânduri şi aruncând datele de la alţii. În cazul în care trebuie să caute prin o mulțime de date pentru a obține datele de care are nevoie, cererea va dura mai mult pentru a completa.
DacăEDDGridDin tabelul DEDD se poate spune că vor exista lacune mari (cu rânduri de date nedorite) între rândurile cu datele dorite;EDDGridDe la tabelul DEDD pot alege să facă mai multe subcereri la tabelul EDD de bază în loc de o cerere mare, prin urmare, sărind peste rândurile nedorite de date în lacunele mari. Sensibilitatea pentru această decizie este controlată de diferența dintre valoarea de referință și valoarea specificată în<golThreshold> tag (implicit=1000 rânduri de date sursă) . Stabilirea decalajuluiThreshold la un număr mai mic va duce la crearea setului de date (în general) mai multe cereri. Stabilirea decalajuluiThreshold la un număr mai mare va duce la crearea setului de date (în general) mai puţine cereri.
Dacă gaura Threshold e prea mică,EDDGridDe la EDDtable va funcționa mai lent, deoarece cheltuielile generale ale cererilor multiple vor fi mai mari decât timpul economisit prin obținerea unor date suplimentare. Dacă gaura Threshold e prea mare,EDDGridDin tabelul DEDD va funcționa mai lent, deoarece atât de multe date în exces vor fi extrase din tabelul EDD, doar pentru a fi eliminate. (După cum Goldilocks a descoperit, mijlocul este "just dreapta.") În general, pentru diferite tipuri de seturi de date EDD Table variază foarte mult, astfel încât singura modalitate de a cunoaște cea mai bună setare reală pentru setul de date este prin experimentare. Dar nu va merge prea departe greșit lipirea la implicit.
Un exemplu simplu este: Imaginați-vă unEDDGridDe la Tabel cu doar unulaxisVariable (timp, cu o dimensiune de 100000) , unudataVariable (temperatura) , și decalaj implicitThreshold 1000.
- Dacă un utilizator solicită temperatură\[0💯5000\], pas este 100, astfel încât dimensiunea decalajului este 99, care este mai mică decât decalajul Threshold. Deci...EDDGridDe la Tabel se va face doar o cerere la tabelul EDD pentru toate datele necesare pentru cerere (echivalent cu temperatura\[0:5000\]) şi aruncă toate rândurile de date de care nu are nevoie.
- Dacă un utilizator solicită temperatură\[0: 2500:5000\], că pas este 2500, astfel încât dimensiunea decalajului este 2499, care este mai mare decât decalajul Threshold. Deci...EDDGridDe la Tabel vor face cereri separate la tabelul EDD care sunt echivalente cu temperatura\[0\]temperatura\[2500\]temperatura\[5000\].
Calculul dimensiunii decalajului este mai complicat atunci când există mai multe axe.
Pentru fiecare cerere a utilizatorului,EDDGridDe la EDDTable printează mesaje de diagnosticare legate de acest lucru înlog.txtDosar.
- Dacă [<Nivel log>] (#loglevel) îndatasets.xmleste setat la info, acest lucru imprima un mesaj ca \* nOuterAxes=1 din 4 nOuterRequests=22 Dacă nOuterAxes=0, golulThreshold nu a fost depășit și se va face o singură cerere la tabelul EDD. În cazul în care nOuterAxes>0, decalajThreshold a fost depășit și nuOuterRequests vor fi făcute la EDDtable, corespunzătoare fiecărei combinații solicitate de cele mai din stânga nOuterAxes. De exemplu, dacă setul de date are 4axisVariables şidataVariableE ca la est.\[timp\]\[latitudine\]\[longitudine\]\[adâncime\], la stânga (Prima dată) Variabila axei este timpul.
- Dacă<Nivel log> îndatasets.xmleste setat pentru toate, informații suplimentare este scris în fișierul log.txt.
EDDGridSchelet de tabel de la EDD 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*De laERDDAP
EDDGridFromErddap Manipulează datele de la distanțăERDDAP™server. Tabel EDD FromErddap mânuiește date tabulare de la o distanțăERDDAP™server.
- EDDGridDe la Erddap și EDDTabelFromErddap se comportă diferit față de toate celelalte tipuri de seturi de date dinERDDAP.
- Ca și alte tipuri de seturi de date, aceste seturi de date obțin informații despre setul de date de la sursă și îl păstrează în memorie.
- Ca alte tipuri de seturi de date, atunci cândERDDAP™caută seturi de date, afișează formularul de acces la date ( datasetID .html) , sau afișează formularul Make A Graph ( datasetID .graph) ,ERDDAP™utilizează informațiile despre setul de date care este în memorie.
- EDDGridDe la Erddap și tabelul EDD FromErddap sunt baza pentruGrile/clustere/federațiidinERDDAPs, care distribuie eficient utilizarea procesorului (mai ales pentru a face hărți) , utilizarea memoriei, stocarea setului de date și utilizarea benzii de bandă a unui mare centru de date.
Redirecționează
- Spre deosebire de alte tipuri de seturi de date, atunci cândERDDAP™primește o cerere de date sau imagini din aceste seturi de date;ERDDAP redirecționăricererea la distanțăERDDAP™server. Rezultatul este:
- Acest lucru este foarte eficient (CPU, memorie și lățime de bandă) , pentru că altfel
- CompozitulERDDAP™trebuie să trimită cererea celeilalteERDDAP™ (care necesită timp) .
- Celălalt.ERDDAP™trebuie să obţină datele, să le reformuleze şi să transmită datele compozituluiERDDAP.
- CompozitulERDDAP™trebuie să primească datele (utilizarea benzii de bandă) , reformat-o (utilizarea procesorului și memoriei) , și transmite datele către utilizator (utilizarea benzii de bandă) . Prin redirecționarea cererii și permițându-i celuilaltERDDAP™pentru a trimite răspunsul direct către utilizator, compozitERDDAP™nu petrece în esență nici timp CPU, memorie, sau lățime de bandă la cerere.
- Redirecţionarea este transparentă pentru utilizator indiferent de software-ul client (un browser sau orice alt software sau instrument de linie de comandă) .
- Acest lucru este foarte eficient (CPU, memorie și lățime de bandă) , pentru că altfel
- Se vede.ERDDAP™să nu redirecționeze nicio cerere de utilizare prin setare<redirecţionare > falşi</redirect>, dar acest lucru neagă cele mai multe dintre avantajele ...De la Erddap Set de date de tip (în special, dispersarea sarcinii pe partea din fațăERDDAP™la distanță/spateERDDAP) .
Abonamente
În mod normal, atunci cândEDDGridDe la Erddap și tabelul EDD FromErddap sunt (au) încărcat pe dumneavoastrăERDDAP, încearcă să adauge un abonament la setul de date de la distanță prin telecomandăERDDAPe-mail/URL sistem de abonament. Astfel, ori de câte ori se schimbă setul de date de la distanță, telecomandaERDDAP™contacteazăsetDataset URL- ul steaguluipe dumneavoastrăERDDAP™astfel încât setul de date local să fie reîncărcat ASAP și astfel încât setul local să fie întotdeauna perfect actualizat și să imite setul de date de la distanță. Deci, prima dată când acest lucru se întâmplă, ar trebui să obțineți un e-mail care solicită validarea abonamentului. Cu toate acestea, dacă localERDDAP™nu pot trimite un e-mail sau dacă telecomandaERDDAPSistemul de e-mail/abonare RURL nu este activ, ar trebui să trimiteți un e-mail la distanțăERDDAP™administrator și cere ca s/el adăuga manual [<privind schimbarea >] (#Onchange) ...</onChange> tags to all of the relevant settings to call your settingssetDataset URL- uri pentru pavilion. Vezi-ţiERDDAP™raport zilnic pentru o listă de setDataset URL-uri de pavilion, dar trimite doar cele pentruEDDGridDe la seturi de date Erddap și EDDDe la seturi de date Erddap la distanțăERDDAP™administrator.
Nu merge? Seturile de date locale nu sunt sincronizate cu seturile de date de la distanţă? Mai multe lucruri trebuie să funcţioneze corect pentru ca acest sistem să funcţioneze astfel încât seturile de date să rămână actualizate. Verificați fiecare dintre aceste lucruri în ordine:
- Al tăuERDDAP™trebuie să poată trimite e-mailuri. Vezi setările de e-mail din setup.xml.
- În general (dar nu întotdeauna.) , dumneavoastrăERDDAP's<bazăUrl> și<BazaHttpsUrl> nu trebuie să aibă un număr de port (De exemplu, :8080, :8443) . Dacă o fac, utilizați unproxypasspentru a scoate portul din Url.
- În setup.xml,<abonatToRemoteErddapDataset> trebuie să fie setat la adevărat.
- Când EDD-ul local... Setul de date de la Erddap este reîncărcat, ar trebui să trimită o cerere la distanțăERDDAP™să se aboneze la setul de date de la distanță. Uită-te în log.txt pentru a vedea dacă acest lucru se întâmplă.
- Ar trebui să primeşti un e-mail prin care să-ţi ceri să validezi cererea de abonament.
- Trebuie să faceți clic pe link-ul din acel e-mail pentru a valida cererea de abonament.
- Telecomanda.ERDDAP™ar trebui să spună că validarea a avut succes. În orice moment, puteți solicita un e-mail de la distanțăERDDAP™cu o listă a abonamentelor în curs și valabile. Vezi formularul la RemoteErddapBase Url /erddap/subscriptions/list.html .
- Atunci când setul de date la distanță se schimbă (De exemplu, primește date suplimentare) , telecomandaERDDAP™trebuie să încercaţi să contactaţi flagURL pe dumneavoastrăERDDAP. Nu poţi verifica asta, dar poţi întreba administratorul telecomenzii.ERDDAP™pentru a verifica acest lucru.
- Al tăuERDDAP™ar trebui să primească o cerere de stabilire a pavilionului respectiv. Uită-te în jurnal.txt pentru "setDatasetFlag.txt?" cerere (s) și a vedea dacă există un mesaj de eroare asociat cu cererile.
- Al tăuERDDAP™ar trebui să încerce apoi să reîncărcați acel set de date (Poate nu imediat, dar cât mai repede.) .
max. actualizat (timp) ?
EDDGrid/TabelFromErddap settings modifică informațiile stocate despre fiecare set de date sursă numai atunci când setul de date sursă este"reîncărcat"şi unele modificări de metadate (De exemplu, variabila timpuluiactual\_range) , generând astfel o notificare de subscriere. Dacă setul de date sursă conține date care se modifică frecvent (de exemplu, date noi în fiecare secundă) și utilizează"actualizare"sistemul de notificare a modificărilor frecvente ale datelor subiacente;EDDGrid/TabelFromErddap nu va fi notificat cu privire la aceste modificări frecvente până la următorul set de date "reîncărcare," astfel încâtEDDGrid/Table FromErddap nu va fi perfect actualizat. Puteți minimiza această problemă prin modificarea setului de date sursă<reîncărcareEveryNMinutes> la o valoare mai mică (60? 15?) astfel încât să existe mai multe notificări de abonament pentru a spuneEDDGrid/TableFromErddap pentru a actualiza informațiile sale despre setul de date sursă.
Sau, în cazul în care sistemul de gestionare a datelor știe când setul de date sursă are date noi (de exemplu, prin intermediul unui script care copiază un fișier de date în loc) , și în cazul în care nu este foarte frecvent (de exemplu, la fiecare 5 minute sau mai puțin frecvente) , există o soluție mai bună:
- Nu folosi<ActualizeazăEveryNMillis> pentru a menține setul sursă la zi.
- Setează setul de date sursă<reîncărcareEveryNMinutes> la un număr mai mare (1440?) .
- Pune scriptul să contacteze setul de date sursăURL- ul steaguluiimediat după ce copiază un nou fișier de date în loc.
Acest lucru va duce la actualizarea perfectă a setului de date sursă și va determina generarea unei notificări de subscriere, care va fi trimisă cătreEDDGrid/Table FromErddap Set de date. Asta va conduceEDDGridSet de date pentru a fi perfect actualizat (în termen de 5 secunde de la adăugarea de date noi) . Și tot ce se va face eficient (fără reîncărcari inutile de seturi de date) .
Nu.addAttributes,axisVariable, saudataVariable
Spre deosebire de alte tipuri de seturi de date, tabelul EDDFromErddap șiEDDGridSeturile de date de la Erddap nu permit global<addAttributes>,<axisVariable> sau<dataVariable> secţiuni îndatasets.xmlpentru acel set de date. Problema este că permiterea acestora ar duce la neconcordanțe:
- Să spunem că a fost permis și ai adăugat un nou atribut global.
- Când un utilizator întreabăERDDAP™pentru atributele globale, va apărea noul atribut.
- Dar când un utilizator întreabăERDDAP™pentru un fișier de date, dvs.ERDDAP™redirecționează cererea către sursăERDDAP. AstaERDDAP™nu cunoaşte noul atribut. Deci, dacă creează un fișier de date cu metadate, de exemplu, a.ncfişier, metadatele nu vor avea noul atribut.
Există două lucruri:
- Convinge adminul surseiERDDAP™pentru a face modificările pe care doriți să metadate.
- În loc de tabelul EDDFromErddap, utilizațiTabel EDD din DapSequence. Sau în loc deEDDGridFromErddap, utilizareEDDGridFromDap. Aceste tipuri de EDD vă permit să vă conectați eficient la un set de date de la distanțăERDDAP™ (dar fără redirecționarea cererilor de date) și vă permit să includeți global<addAttributes>,<axisVariable> sau<dataVariable> secţiuni îndatasets.xml. O altă diferență: va trebui să vă abonați manual la setul de date de la distanță, astfel încât setul de date de pe dvs.ERDDAP™va fi notificat (prin intermediulURL- ul steagului) atunci când există modificări ale setului de date la distanță. Astfel, creaţi un nou set de date, în loc să vă conectaţi la un set de date de la distanţă.
Alte note
- Din motive de securitate,EDDGridDe la Erddap și tabelul EDD FromErddap nu sprijină [<Access to>] (#accesibil la) etichetă și nu poate fi utilizat cu seturi de date de la distanță care necesită logare (pentru că acestea utilizează [<Access to>] (#accesibil la) ).. Vezi?ERDDAP'ssistem de securitatelimitarea accesului la anumite seturi de date către unii utilizatori.
- Începând cuERDDAP™v2.10;EDDGridDe la Erddap și EDDtableFromErddap sprijină [<accessableViaFiles>] (#accesibilviafiles) Tag. Spre deosebire de alte tipuri de seturi de date, implicit este adevărat, dar fișierele setului de date vor fi accesibileViaFiles numai în cazul în care setul de date sursă are, de asemenea,<accessableViaFiles> set to true.
- Puteţi folosiGenerează dateName Programul Xmlpentru a facedatasets.xmlbucată pentru acest tip de set de date. Dar puteți face aceste tipuri de seturi de date ușor de mână.
EDDGridSchelet FromErddap XML
- EDDGridSchelet FromErddap Setul XML este foarte simplu, deoarece intenția este doar de a imita setul de date de la distanță, care este deja potrivit pentru utilizarea înERDDAP:
<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>
Tabel EDDFromErddap schelet XML
- NameERDDAP:
<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>
EDDGridDe la Etopo
EDDGridDe la Etopo doar serveşteETOPO1 Set global de date privind creșterea cu 1 minut (Ice Surface, grilă înregistrată, binar, 2byte int: etopo1\_ice\_g\_i2.zip) care este distribuit cuERDDAP.
- Doar doi.datasetIDs sunt suportate pentruEDDGridDe la Etopo, astfel încât să puteți accesa datele cu valorile de longitudine -180 la 180, sau valorile de longitudine 0 la 360.
- Nu există niciodată sub tag-uri, deoarece datele sunt deja descrise înERDDAP.
- Deci, cele două opțiuni pentruEDDGridSeturile de date de la Etopo sunt (literalmente) :
<!-- 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" />
EDDGridDin dosare
EDDGridDin dosare este superclasa tuturorEDDGridDe la... clase de fişiere. Nu poţi folosiEDDGridDe la Dosare direct. În schimb, utilizați o subclasă deEDDGridFromFiles pentru a gestiona tipul specific de fișier:
- EDDGridDe la MergeIRFilesse ocupă de datele din rețeaCombeIR.gzDosare.
- EDDGridDe la AudioFilesagregate de date dintr-un grup de fișiere audio locale.
- EDDGridDinNcFilesse ocupă de datele din rețeaGRIB.grbfișiere;HDF (v4 sau v5) .hdffișiere;.ncmlfișiere șiNetCDF (v3 sau v4) .ncDosare. Acest lucru poate funcționa cu alte tipuri de fișiere (de exemplu, BUFR) N-am testat-o. Vă rugăm să ne trimiteţi nişte dosare dacă sunteţi interesat.
- EDDGridDe la NCFilesDespachetateste o variantă deEDDGridDe laNcFiles care se ocupă de datele din rețeaNetCDF (v3 sau v4) .ncși fișiere aferente, careERDDAP™Despachetează la un nivel scăzut.
În prezent, nu sunt acceptate alte tipuri de fișiere. Dar este, de obicei, relativ ușor pentru a adăuga suport pentru alte tipuri de fișiere. Contactaţi-ne dacă aveţi o cerere. Sau, în cazul în care datele dvs. este într-un format de fișier vechi pe care doriți să se mute departe, vă recomandăm convertirea fișierelor să fieNetCDFv3.ncDosare.NetCDFeste un format binar pe scară largă, permite accesul aleatoriu rapid la date și este deja sprijinit deERDDAP.
Din detaliile fișierelor
Următoarele informații se aplică tuturor subclaselor dinEDDGridDe la Dosare.
Agregarea unei dimensiuni existente
Toate variaţiileEDDGridFromFiles poate agrega date din fișiere locale, în cazul în care fiecare fișier are 1 (sau mai mult) valori diferite pentru stânga (Prima dată) dimensiune, de obicei\[timp\], care va fi agregată. De exemplu, dimensiunile ar putea fi\[timp\]\[altitudine\]\[latitudine\]\[longitudine\], și fișierele ar putea avea datele pentru unul (sau câteva) valoarea timpului (s) pe fișier. Setul de date rezultat apare ca și cum toate datele fișierului ar fi fost combinate. Marile avantaje ale agregării sunt:
- Dimensiunea setului de date agregate poate fi mult mai mare decât un singur fișier poate fi convenabil (~2GB) .
- Pentru datele aproape în timp real, este ușor să adăugați un nou fișier cu cea mai recentă bucată de date. Nu trebuie să rescrii întregul set de date.
Cerințele privind agregarea sunt:
- Dosarele locale nu trebuie să aibă acelaşi lucru.dataVariables (astfel cum este definit în setul de datedatasets.xml) . Setul de date va aveadataVariables definit îndatasets.xml. Dacă un anumit fișier nu are un datdataVariable,ERDDAP™va adăuga valorile lipsă după cum este necesar.
- ToatedataVariableTrebuie să utilizaţi acelaşi medicament.axisVariableS/dimensiuni (astfel cum este definit în setul de datedatasets.xml) . Fișierele vor fi agregate pe baza primului (cea mai stângă) dimensiune, sortate în ordine ascendentă.
- Fiecare fișier poate avea date pentru una sau mai multe valori ale primei dimensiuni, dar nu poate exista nicio suprapunere între fișiere. Dacă un fișier are mai mult de o valoare pentru prima dimensiune, valorile trebuie sortate în ordine ascendentă, fără legături.
- Toate fișierele TREBUIE să aibă exact aceleași valori pentru toate celelalte dimensiuni. Precizia încercării este determinată dePotrivire AxisNDigits.
- Toate fișierele TREBUIE să aibă exact același lucruunitățimetadate pentru toțiaxisVariables şidataVariablec. Dacă aceasta este o problemă, ați putea fi capabil de a utilizaNcMLsauNCOpentru a rezolva problema.
Agregare prin nume de fișiere sau metadate globale
Toate variaţiileEDDGridFromFiles poate, de asemenea, agrega un grup de fișiere prin adăugarea unui nou stanga (Prima dată) dimensiune, de obicei timp, bazat pe o valoare derivată din fiecare nume de fișier sau din valoarea unui atribut global care este în fiecare fișier. De exemplu, numele fișierului poate include valoarea timpului pentru datele din fișier.ERDDAP™ar crea apoi o nouă dimensiune temporală.
Spre deosebire de caracteristica similară în THREDS,ERDDAP™întotdeauna creează oaxisVariablecu valori numerice (conform cerințelor CF) , valori niciodată coarde (care nu sunt permise de CF) . De asemenea,ERDDAP™va sorta fișierele din agregarea bazată pe numericaxisVariablevaloarea care este atribuită fiecărui fișier, astfel încât variabila axei să fi sortate întotdeauna valorile cerute de CF. Abordarea THREDS de a face un fel lexicografic bazat pe numele de fișiere duce la agregari în cazul în care valorile axei nu sunt sortate (care nu este permisă de CF) atunci când numele fișierelor sortează diferit față de cele derivateaxisVariablevalori.
Pentru a stabili una dintre aceste agregari înERDDAP™, veți defini o nouă stânga (Prima dată) axisVariablecu un pseudo special<sourceName>, care spuneERDDAP™unde și cum să găsiți valoarea pentru noua dimensiune din fiecare fișier.
- Formatul pseudosourceNamecare obține valoarea dintr-un nume de fișier (doar numele fișierului.) este \\\ nume fișier; date Tip , extractRegex , captGroupNumber
- Formatul pseudosourceNamecare obține valoarea de la numele de cale absolută a unui fișier este \\\ numele trasei; date Tip , extractRegex , captGroupNumber \[Pentru asta, numele căii o foloseşte întotdeauna.'/'ca caracter separator director, niciodată "\."\]
- Formatul pseudosourceNamecare obține valoarea de la un atribut global este \\\ global: atribut Nume , date Tip , extractRegex , captGroupNumber
- Acest pseudosourceNameopţiunea funcţionează diferit de celelalte: în loc să creeze un nou stangas (Prima dată) axisVariable, aceasta înlocuiește valoarea curentuluiaxisVariablecu o valoare extrasă din numele fișierului (doar numele fișierului.) . Formatul este \\\ înlocuire De la FileName, date Tip , extractRegex , captGroupNumber
Descrierile părţilor pe care trebuie să le oferiţi sunt:
- atribut Nume - numele atributului global care se află în fiecare fişier şi care conţine valoarea dimensiunii.
- date Tip -- Aceasta specifică tipul de date care va fi utilizat pentru a stoca valorile. A se vedea lista standard adate TipuricăERDDAP™acceptă, cu excepția faptului că String nu este permis aici, deoarece variabilele axei înERDDAP™Nu pot fi variabile String.
Există un pseudo dataType suplimentar, timeFormat = șir TimpFormat , care spuneERDDAP™că valoarea este un timp StringStampunități adecvate pentru timpii corzilor. În majoritatea cazurilor, stringTimeFormat de care aveți nevoie va fi o variație a unuia dintre aceste formate:
- yyyy-MM-dd'T'HH:mm:ss.SSSZ -- care ISO 8601:2004 (E) formatul datei. S-ar putea să fie nevoie de o versiune scurtată a acestui lucru, de exemplu,yyyy-MM-dd'T'HH:mm:ss sauyyyy-MM-dd.
- aaaallmddHhmmss.SSS -- care este versiunea compactă a formatului datei ISO 8601. Este posibil să aveți nevoie de o versiune scurtată a acestui lucru, de exemplu, aaaammddHmmss sau aaaammdd.
- M/d/aaaa H:mm:ss.SSS -- care este formatul U.S. slash data format. S-ar putea să fie nevoie de o versiune scurtată a acestui lucru, de exemplu, M/d/aaaa.
- aaaaddDHHmmssSS -- care este anul plus ziua cu zero căptuşită a anului (De exemplu, 001 = 1 ianuarie 365 = 31 decembrie într-un an neleap; acest lucru este uneori numit în mod eronat data Julian) . Este posibil să aveți nevoie de o versiune scurtată a acestui lucru, de exemplu, aaaaDD.
Dacă utilizați acest pseudo dataType, adăugați acest lucru la noua variabilă<addAttributes>:
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Dacă doriți să modificați toate valorile timpului, schimbați valoarea timpului în unități, de exemplu, 1970-01-01T12:00Z.
- extractRegex -- Aceasta esteexpresie regulată (tutorial) care include un grup de capturare (în paranteze) care descrie modul de extragere a valorii din numele fișierului sau valoarea atributului global. De exemplu, dat un nume de fișier ca S19980011998031.L3b\_MO\_CHL.nc, captura grupul #1, "\dtutorial", în expresia regulată S (\dtutorial) \dtutorial\.L3b.\* va captura primele 7 cifre după 'S': 1998001.
- număr grup de captură -- Acesta este numărul grupului de capturare (într-o pereche de paranteze) în expresia regulată care conține informațiile de interes. De obicei este 1, primul grup de capturare. Uneori trebuie să utilizați grupuri de captare în alte scopuri în regex, astfel încât atunci numărul important al grupului de captare va fi 2 (al doilea grup de capturare) sau 3 (al treilea) , etc.
Un exemplu complet de oaxisVariablecare face un set de date agregat cu o nouă axă temporală care obține valorile timpului din numele fiecărui fișier este
<axisVariable>
<sourceName>\\*\\*\\*fileName,timeFormat=yyyyDDD,S(\\d{7})\\.L3m.\\*,1</sourceName>
<destinationName>time</destinationName>
</axisVariable>
Când utilizaţi "timeFormat=" pseudo date Tip,ERDDAP™va adăuga 2 atributeaxisVariableastfel încât acestea par să vină de la sursă:
<att name="standard\\_name">time</att>
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Deci, în acest caz,ERDDAP™va crea o nouă axă numită"time"cu valori duble (secunde de la 1970-01-01T00:00:00Z) prin extragerea celor 7 cifre după 'S' și înainte de ".L3m" în numele fișierului și interpretarea acestora ca valori ale timpului formatate în 'YYDDD.
Puteți suprascrie timpul de bază implicit (1970-01-01T 00:00:00Z) prin adăugarea unuiaddAtributcare specifică un atribut de unități diferite cu un timp de bază diferit. O situaţie comună este: există grupuri de fişiere de date, fiecare cu un compus de 1 zi dintr-un set de date satelit, în cazul în care doriţi ca valoarea de timp să fie la prânz a zilei menţionate în numele fişierului (ora centrată a fiecărei zile) și doresc variabila luilong\_namesă fie "Ora Centrată." Un exemplu care face acest lucru este:
<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>
Notă ore=12 în timpul de bază, care adaugă 12 ore în raport cu timpul de bază original de 1970-01-01T00:00:00Z.
Un exemplu complet de oaxisVariablecare face un set de date agregat cu o nouă axă "run" (cu valori int) care obține valorile de rulare de la atributul global "runID" în fiecare fișier (cu valori cum ar fi "r17\_global," unde 17 este numărul run) este
<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>
Observați utilizarea grupului de capturare numărul 2 pentru a captura cifrele care apar după 'r' sau 's' și înainte de "\_global." Acest exemplu arată, de asemenea, cum să adăugați atribute suplimentare (de exemplu,ioos\_categoryși unități) la variabila axei.
Fișiere comprimate extern
-
Seturi de date care sunt subseturi deEDDGridDin fişiere şi tabel EDD FromFiles poate servi date direct din fișiere de date externe comprimate, inclusiv.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2, și fișiere .Z .
-
Acest lucru funcționează surprinzător de bine!
În majoritatea cazurilor, încetinirea legată de decompresia fișierelor de date mici și mijlocii este minoră. Dacă trebuie să conservaţi spaţiul discului, vă încurajăm să utilizaţi această caracteristică, în special pentru fişierele mai vechi care sunt rareori accesate. -
Economiseşte bani!
Aceasta este una dintre puținele caracteristici înERDDAP™care vă oferă o șansă de a economisi o mulțime de bani (cu toate că, la costul de performanță ușor scăzut) . Dacă raportul de compresie este, de exemplu, 6:1 (Uneori va fi mult mai mare.) , apoi fişierele de date ale setului vor avea nevoie doar de 1/6 spaţiul discului. Atunci poate reuşeşti cu 1 RAID. (de o dimensiune dată) în loc de 6 RAIDS (de aceeași dimensiune) . Aceasta este o economie enormă de costuri. Din fericire, capacitatea de a comprima unele fișiere într-o colecție (Cei mai în vârstă?) și nu comprima pe alții (Cele noi?) Şi pentru a schimba asta în orice moment, să minimalizăm dezavantajul compresării unor fişiere. (acces mai lent) . Și dacă alegerea este între stocarea fișierelor pe bandă (și accesibile numai la cerere, după o întârziere) vs stocarea lor comprimate pe un RAID (și accesibile prin intermediulERDDAP) , apoi există un avantaj imens de a utiliza compresie, astfel încât utilizatorii să devină interactive și (relativ) acces rapid la date. Și dacă acest lucru vă poate salva de la achiziționarea unui RAID suplimentar, această caracteristică vă poate salva aproximativ 30.000 dolari. -
Pentru toţiEDDGridDin subclasele Fişiere, dacă fişierele de date au o extensie care indică faptul că acestea sunt fişiere comprimate extern (în prezent:.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2, sau .Z) ,ERDDAP™va decomprima fișierele în directorul cache al setului de date atunci când le citește (în cazul în care nu sunt deja în cache) . Același lucru este valabil și pentru fișierul binar (de exemplu,.nc) subclase de EDDtableFromFiles.
-
Pentru subclase EDD TableFromFiles pentru fișiere non-binare (de exemplu, .csv.) , fișiere de date cu o extensie care indică faptul că acestea sunt fișiere comprimate extern vor fi decomprimate pe-the-fly ca fișierul este citit.
-
REquirement: Dacă tipul de fișier comprimat extern utilizat (de exemplu,.tgzsau.zip) suportă mai mult de 1 fișier în interiorul fișierului comprimat, fișierul comprimat trebuie să conțină doar 1 fișier.
-
REquirement: Această caracteristică presupune că conținutul fișierelor comprimate externe nu se schimbă, astfel încât un fișier decomprimat cache să poată fi reutilizat. Dacă unele sau toate fişierele unui set de date sunt uneori schimbate, nu comprimaţi acele fişiere. Acest lucru este în concordanță cu utilizarea comună, deoarece oamenii nu compresează în mod normal fișiere pe care uneori trebuie să le schimbe.
-
<fileNameRegex> Pentru a face acest lucru, setul de date<fileNameRegex> trebuie să se potrivească cu numele fișierelor comprimate. Evident, regexuri ca.\va potrivi toate numele fișierelor. Dacă specificați un anumit tip de fișier, de exemplu, .\\.nc, apoi aveți nevoie pentru a modifica regex pentru a include extensia de compresie prea, de exemplu, .\ \.nc\.gz(dacă toate fișierele vor fi ceva *.nc.gzfișiere) .
-
Este în regulă dacă setul de date include un amestec de fișiere comprimate și nu comprimate. Acest lucru poate fi util dacă credeți că unele fișiere (De exemplu, fișiere mai vechi) va fi folosit mai rar și, prin urmare, ar fi util pentru a salva spațiu pe disc prin comprimarea lor. Pentru a face acest lucru,<fileNameRegex> trebuie să se potrivească cu numele fișierelor comprimate și nu comprimate, de exemplu.\sau .\\.nc (|\.gz) (în cazul în care grupul de capturare de la sfârșitul anului care precizează că.gzeste opțional.
-
Este bine dacă comprimați sau decomprimați fișiere specifice din colecție în orice moment. Dacă setul de date nu utilizează [<updateEveryNMillis>] (#Update everythingnmillis) , setează setul de datepavilionpentru a spuneERDDAP™să reîncarce setul de date și, astfel, să observe modificările. Interesant, ai putea folosi algoritmi de compresie diferite și setări pentru diferite fișiere în același set de date (de exemplu,.bz2pentru fișiere rare utilizate,.gzpentru fișiere care nu sunt adesea utilizate și nicio compresie pentru fișiere utilizate frecvent) , doar asigurați-vă că regex sprijină toate extensiile de fișier care sunt în uz, de exemplu, .\*\.nc (|\.gz|\.bz2) .
-
Desigur, raportul de compresie și vitezele pentru diferiți algoritmi de compresie variază cu fișierul sursă și setările (De exemplu, nivelul de compresie) . Dacă doriți să optimizați acest sistem pentru fișierele dvs., faceți un test al diferitelor metode de compresie cu fișierele dvs. și cu o gamă de setări de compresie. Dacă vrei un bun de încredere (nu neapărat cel mai bun) configurare, vom recomanda ușorgzip (.gz) .gzipnu face cel mai mic fișier comprimat (E destul de aproape.) , dar comprimă fișierul foarte repede și (mai important pentruERDDAP™utilizatori) Decompresează fişierul foarte repede. În plus,gzipsoftware-ul vine standard cu fiecare instalare Linux și Mac OS și este disponibil pentru Windows prin instrumente gratuite, cum ar fi 7Zip și Linux add-ons ca Git Bash. De exemplu, pentru a comprima un fișier sursă în.gzversiunea fișierului (același nume de fișier, dar cu.gzanexată) , utilizare (în Linux, Mac OS şi Git Bash)
gzip sourceName
Pentru a decomprima un.gzfișier înapoi la original, utilizați Gunzip sourceName.gz
Pentru a comprima fiecare dintre fișierele sursă în director și subdirectoarele sale, recursiv, utilizați gzip-r DirectorName
Pentru a decomprima fiecare dintre.gzfișiere în director și subdirectorii sale , recursiv, utilizare Gunzip - r DirectorName
-
ATENŢIE: Nu comprimaţi extern (gzip) fișiere care sunt deja comprimate intern! Multe fișiere au deja date comprimate pe plan intern. Dacăgzipaceste fișiere, fișierele rezultate nu vor fi mult mai mici (<5%) șiERDDAP™va pierde timpul decomprimându-le atunci când trebuie să le citească. De exemplu:
- fișiere de date: de exemplu,.nc4, și.hdf5 fișiere: Unele fișiere folosesc compresie internă; altele nu. Cum se spune: variabilele comprimate au atribute "\_ChunkSize." De asemenea, dacă un grup de grilă.ncsau.hdffișierele sunt de diferite dimensiuni, acestea sunt probabil comprimate intern. Dacă toate au aceeaşi mărime, nu sunt comprimate intern.
- fișiere imagine: de exemplu, .gif, .jpg, și .png
- fișiere audio: de exemplu, mp3, și .ogg.
- fișiere video: de exemplu, mp4, .ogv, și .webm.
Un caz nefericit ciudat: .wav fișiere audio sunt imense și nu intern comprimat. Ar fi frumos să comprimăm (gzip) ele, dar în general nu ar trebui pentru că dacă o faci, utilizatorii nu vor putea să joace fișierele comprimate în browserul lor.
-
Caz de încercare: compresie (cugzip) un set de date cu 1523 grile.ncDosare.
- Datele din fișierele sursă au fost rare (multe valori lipsă) .
- Spațiu total disc a trecut de la 57 GB înainte de compresie la 7 GB după.
- O cerere pentru o mulțime de date de la 1 punct de timp este<1 s înainte și după compresie.
- O cerere de 1 punct de date pentru 365 de puncte de timp (situația în cel mai rău caz) a trecut de la 4 s la 71 s.
Pentru mine, acesta este un compromis rezonabil pentru orice set de date și, cu siguranță, pentru seturile de date care sunt utilizate rar.
-
Compresie internă versus externă... Comparativ cu compresie de fișiere interne oferite de.nc4 și.hdf5 fișiere;ERDDAPAbordarea pentru fişierele binare comprimate externe are avantaje şi dezavantaje. Dezavantajul este: pentru o singură dată citit de o mică parte dintr-un singur fișier, compresie internă este mai bună deoareceEDDGridFromFiles trebuie doar să decomprime câteva bucăți (s) al dosarului, nu al întregului dosar. Dar...ERDDAPAbordarea lui are unele avantaje:
- ERDDAP™suportă compresia tuturor tipurilor de fișiere de date (binar și non-binar, de exemplu,.nc3 și .csv) Nu doar.nc4 și.hdf4.
- Dacă cea mai mare parte a unui fișier trebuie să fie citit de mai multe ori într-o perioadă scurtă de timp, atunci economisește timp pentru a decomprima fișierul o dată și citiți-l de multe ori. Acest lucru se întâmplă înERDDAP™atunci când un utilizator utilizează Make-A-Graph pentru setul de date și face o serie de mici modificări ale graficului.
- Capacitatea de a avea fișiere comprimate și nu fișiere comprimate în aceeași colecție, vă permite mai mult control asupra căror fișiere sunt comprimate și care nu sunt. Și acest control adăugat vine fără a modifica cu adevărat fișierul sursă (din moment ce puteți comprima un fișier cu, de exemplu,.gzși apoi decomprimați-l pentru a obține fișierul original) .
- Capacitatea de a modifica în orice moment dacă un anumit fișier este comprimat și modul în care este comprimat (algoritmi și setări diferite) vă oferă mai mult control asupra performanței sistemului. Și puteți recupera cu ușurință fișierul original necomprimat în orice moment.
Deși niciuna dintre abordări nu este un câștigător în toate situațiile, este clar căERDDAPcapacitatea de a servi date din fişiere externe comprimate face compresie externă o alternativă rezonabilă la compresia internă oferită de.nc4 și.hdf5. Acest lucru este semnificativ având în vedere că compresie internă este unul dintre principalele motive pentru care oamenii aleg să utilizeze.nc4 și.hdf5.
Cache decomprimat
ERDDAP™face o versiune decomprimată a oricărui binar comprimat (de exemplu,.nc) fișier de date atunci când trebuie să citească fișierul. Fișierele decomprimate sunt păstrate în dosarul setului de date din Big ParentDirectory /decomprimat/ . Fișierele decomprimate care nu au fost utilizate recent vor fi șterse pentru a elibera spațiul atunci când dimensiunea cumulativă a fișierului este >10GB. Puteți schimba asta prin setarea<decompressedCacheMaxGB> (implicit=10) în seturi de date Xml. xml, de exemplu,
<decompressedCacheMaxGB>40</decompressedCacheMaxGB>
De asemenea, fișierele decomprimate care nu au fost utilizate în ultimele 15 minute vor fi șterse la începutul fiecărei reîncărcări majore a setului de date. Puteți schimba asta prin setarea<Decomprimat CacheMaxMinutesOld> (implicit=15) în seturi de date Xml. xml, de exemplu,
<decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>
Numere mai mari sunt frumos, dar dimensiunea cumulativă a fișierelor decomprimate poate provoca Big ParentDirectory să rămână fără spațiu pe disc, ceea ce cauzează probleme grave.
- Deoarece decompresia unui fișier poate dura o cantitate semnificativă de timp (0.1 până la 10 secunde) , seturi de date cu fișiere comprimate pot beneficia de setarea setului de date [<nThreads>] (#Nămoluri) setarea la un număr mai mare (2? 3? 4?) . Dezavantajele la numere chiar mai mari (De exemplu, 5? 6? 7?) reduc veniturile și că cererea unui utilizator poate utiliza apoi un procent ridicat din resursele sistemului, încetinind astfel semnificativ procesarea cererilor altor utilizatori. Astfel, nu există setări ideale nThreads, doar consecințe diferite în diferite situații cu diferite setări.
Valori de dimensiune selectate
Valorile pentru fiecare dimensiune trebuie sortate (ascendent sau descendent, cu excepția primei (cea mai stângă) dimensiune care trebuie să se ridice) . Valorile pot fi șterse neregulat. Nu poate fi nici o legătură. Aceasta este o cerinţă aStandardul metadatelor CF. Dacă valorile oricărei dimensiuni nu sunt în ordine sortate, setul de date nu va fi încărcat șiERDDAP™va identifica prima valoare nesortate în fișierul jurnal; Big ParentDirectory /logs/log.txt.
Valorile de dimensiune nesortate indică aproape întotdeauna o problemă cu setul de date sursă. Acest lucru se întâmplă cel mai frecvent atunci când un fișier cu nume greșite sau nepotrivit este inclus în agregare, ceea ce duce la o dimensiune a timpului nesortate. Pentru a rezolva această problemă, consultați mesajul de eroare dinERDDAP™log.txt fișier pentru a găsi valoarea de timp ofensatoare. Apoi căutați în fișierele sursă pentru a găsi fișierul corespunzător (sau una înainte sau una după) care nu aparține în agregare.
Directori
Fișierele pot fi într-un singur director, sau într-un director și subdirectoarele sale (recursiv) . Dacă există un număr mare de fișiere (de exemplu > 1, 000) , sistemul de operare (şi astfelEDDGridDin dosare) va funcționa mult mai eficient dacă stocați fișierele într-o serie de subdirecții (unul pe an sau unul pe lună pentru seturi de date cu fișiere foarte frecvente) , astfel încât nu există niciodată un număr mare de fișiere într-un director dat.
<CacheFromUrl>
ToateEDDGridDin Dosare și toate seturile de date EDDFromFiles susțin un set de etichete care indicăERDDAP™pentru a descărca și menține o copie a tuturor fișierelor unui set de date la distanță, sau un depozit de câteva fișiere (descărcat după cum este necesar) . Acest lucru poate fi incredibil de util. Vezicache Din documentația Url.
Directore la distanţă şi cereri la distanţă HTTP
(AKA Byte Serving, Octet Range Applications, Accept-Rangeshttpantet)
EDDGridDinNcFiles, EDDTableFromMultidimNcFiles, EDD TableFromNcFiles, și EDDTableFromNcFFiles, pot uneori să servească date din.ncfișiere pe servere la distanță și accesate prin HTTP dacă serverul suportăServire octetprin cereri din domeniul HTTP (mecanismul HTTP pentru servirea octetului) . Acest lucru este posibil deoarece netcdf-java (careERDDAP™folosește pentru a citi.ncfișiere) suportă citirea datelor de la distanță.ncfișiere prin cereri de gamă HTTP.
Nu face asta! Este oribil de ineficient și lent. În schimb, utilizați [<cacheFromUrl> sistem] (#cachefromurl) .
AccesareERDDAP™Seturile de date ca fișiere prin cereri de intervale de octeți - Flipping acest lucru în jurul valorii de, având în vedere că puteți (în teorie) Gândiți-vă la un set de date înERDDAP™ca un gigant.ncfișier prin adăugare ".nc" la baza OPenDAPURL pentru un set de date dat (de exemplu, https://myserver.org/erddap/griddap/datasetID.nc și, de asemenea, prin adăugarea unui ?query după aceea pentru a specifica un subset) , este probabil rezonabil să întreb dacă puteți utiliza netcdf-java ,Ferret, sau alteNetCDFsoftware client pentru a citi datele prin intermediul Solicitări pentru intervalul HTTPERDDAP. Răspunsul este nu, pentru că nu există într-adevăr un imens ".nc" dosar. Dacă doriți să faceți acest lucru, faceți în schimb una dintre aceste opțiuni:
- Utilizare(OPeN)DAPsoftware client pentru a se conecta la serviciile Griddap oferite deERDDAP. Asta este ceea ceDAP (şi astfelERDDAP) a fost proiectat pentru. Este foarte eficient.
- Sau, descărcați fișierul sursă (s) de la"files"sistem (sau un fișier subset prin intermediul a.nc? interogare) la computer și de a utiliza netcdf-java,Ferret, sau alteNetCDFsoftware client pentru a citi (Acum) fișier local (s) .
Informații despre fișier cached
CândEDDGridSetul de fișiere este primul încărcat,EDDGridFromFiles citește informații din toate fișierele relevante și creează tabele (un rând pentru fiecare fișier) cu informații despre fiecare fișier valabil și fiecare "rău" (diferită sau invalidă) Dosar.
- Tabelele sunt, de asemenea, stocate pe disc, caNetCDFv3.ncfișiere în Big ParentDirectory /Set de date/ Ultima 2CharsOfDatasetID / datasetID / în fișiere numite: dirtable.nc (care deţine o listă cu nume de directoare unice) , fișier Tabel.nc (care conține tabelul cu informațiile fiecărui fișier valabil) , Dosare rele.nc (care deține tabelul cu informațiile fiecărui fișier rău) .
- Pentru a accelera accesul la unEDDGridSet de fișiere (dar în detrimentul utilizării mai multor amintiri) , puteți folosi
true
pentru a spuneERDDAP™pentru a păstra o copie a tabelelor de informații fișiere în memorie.
- Copia tabelelor de informații fișiere pe disc este, de asemenea, utilă atunci cândERDDAP™este închis și repornit: salveazăEDDGridDe la Dosare de la necesitatea de a reciti toate fișierele de date.
- Atunci când un set de date este reîncărcat,ERDDAP™trebuie doar să citească datele din fișiere și fișiere noi care s-au schimbat.
- Dacă un fișier are o structură diferită de celelalte fișiere (de exemplu, un tip de date diferit pentru una dintre variabile sau o valoare diferită pentru "unități" atribut) ,ERDDAPadaugă fișierul la lista de fișiere "rele." Informații despre problema cu fișierul va fi scris la Big ParentDirectory /logs/log.txt file.
- Nu ar trebui niciodată să ștergeți sau să lucrați cu aceste fișiere. O excepție este: dacă sunteți încă face modificări la un set de datedatasets.xmlconfigurare, ați putea dori să ștergeți aceste fișiere pentru a forțaERDDAP™pentru a reciti toate fișierele, deoarece fișierele vor fi citite/interpretate diferit. Dacă vreodată trebuie să ștergeți aceste fișiere, o puteți face atunci cândERDDAP™Fuge. (Apoi setați unpavilionpentru a reîncărca setul de date cât mai curând posibil.) Cu toate acestea,ERDDAP™de obicei observă cădatasets.xmlinformațiile nu se potrivesc cu fișierul Informații de masă și șterge automat tabelele de fișiere.
- Dacă doriți să încurajațiERDDAP™actualizarea informațiilor privind seturile de date stocate (de exemplu, dacă ați adăugat, eliminat sau ați schimbat unele fișiere în dosarul de date al setului de date) , utilizaţiSistemul de pavilionsă forţezeERDDAP™pentru a actualiza informațiile din fișierul cached.
Cereri de manipulare
Atunci când cererea de date a unui client este procesată,EDDGridFromFiles poate privi rapid în tabel cu informațiile valide de fișier pentru a vedea ce fișiere au datele solicitate.
Actualizarea informațiilor din fișierul Cached
Ori de câte ori setul de date este reîncărcat, informațiile din fișier cache sunt actualizate.
- Setul de date este reîncărcat periodic, astfel cum este determinat de<reîncărcareEveryNMinutes> în informațiile setului de date îndatasets.xml.
- Setul de date este reîncărcat cât mai curând posibil ori de câte oriERDDAP™detectează că ați adăugat, eliminat,Touch'd (pentru a schimba ultimul fișier Timp modificat) Sau a schimbat un fişier de date.
- Setul de date este reîncărcat cât mai curând posibil dacă utilizaţiSistemul de pavilion.
Atunci când setul de date este reîncărcat,ERDDAP™compară fișierele disponibile în prezent cu tabelele de informații despre fișiere cache. Fişierele noi sunt citite şi adăugate la tabelul de fişiere valide. Fișierele care nu mai există sunt retrase din tabelul de fișiere valide. Fișierele în care marca temporală a fișierului a fost modificată sunt citite și informațiile lor sunt actualizate. Noile tabele înlocuiesc mesele vechi din memorie și pe disc.
Fișiere proaste
Tabelul de fișiere rele și motivele pentru care fișierele au fost declarate rele (fișier corupt, variabile lipsă etc.) este trimis prin e-mail Totul Adresa de email (Probabil tu.) de fiecare dată când setul de date este reîncărcat. Ar trebui să înlocuiți sau să reparați aceste fișiere cât mai curând posibil.
Variabile lipsă
Dacă unele dintre dosare nu au unele dintredataVariables definite în setul de datedatasets.xmlChunk, e în regulă. CândEDDGridFromFiles citește unul dintre acele fișiere, se va acționa ca și cum fișierul ar avea variabila, dar cu toate valorile lipsă.
Probleme FTP/Advice
Dacă FTP fișiere de date noi laERDDAP™server în timp ceERDDAP™se execută, există posibilitatea caERDDAP™va reîncărca setul de date în timpul procesului FTP. Se întâmplă mai des decât crezi! Dacă se întâmplă, fișierul va părea a fi valid (are un nume valabil) Dar dosarul nu e încă valabil. DacăERDDAP™încearcă să citească date din acel fișier invalid, eroarea rezultată va determina adăugarea fișierului în tabelul fișierelor invalide. Asta nu e bine. Pentru a evita această problemă, utilizați un nume de fișier temporar atunci când FTP'ing fișierul, de exemplu, ABC2005.nc\_TEMP. Apoi, testul de fișierNameRegex (vezi mai jos) va indica faptul că acesta nu este un fișier relevant. După finalizarea procesului FTP, redenumește fișierul pe numele corect. Procesul de redenumit va face ca fișierul să devină relevant într-o clipă.
"0 fișiere" Mesaj eroare
Dacă fugiGenereazăSeturi de dateXmlsauDasDds, sau dacă încercați să încărcați unEDDGridDe la... Set de fișiere înERDDAP™, și veți obține un mesaj de eroare "0 fișiere" indicând faptul căERDDAP™găsit 0 fișiere de potrivire în dosar (atunci când crezi că există fișiere de potrivire în acel director) :
- Verificați dacă fișierele sunt într-adevăr în acel director.
- Verifică ortografia numelui directorului.
- Verificați fișierulNameRegex. E foarte uşor să faci greşeli cu regexurile. Pentru teste, încercați regex .\* care ar trebui să se potrivească cu toate numele de fișiere. (Vezi asta?documentația regexşitutorial regex.)
- Verificați dacă utilizatorul care rulează programul (de exemplu, utilizator=tomcat (?) pentru Tomcat/ERDDAP) are permisiunea "citeste" pentru acele fisiere.
- În unele sisteme de operare (de exemplu, SELinux) și în funcție de setările de sistem, utilizatorul care a rulat programul trebuie să aibă permisiune "citește" pentru întregul lanț de directoare care duce la directorul care are fișierele.
EDDGridDinfile schelete XML
- Name pentru toţiEDDGridSubclasele FromFiles este:
<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
EDDGridDe la AudioFiles şi Tabel EDD din fișiere audio date agregate dintr-o colecție de fișiere audio locale. (Acestea au apărut pentru prima dată înERDDAP™v1.82.) Diferenţa este căEDDGridDe la AudioFiles tratează datele ca pe un set de date multidimensionale (de obicei cu 2 dimensiuni:\[pornire fișier Timp\]şi\[A expirat Timp într-un fișier\]) În timp ce tabelul EDDFromAudioFiles tratează datele ca date tabulare (de obicei cu coloane pentru pornirea fișierului Timpul scurs cu fișierul și datele de la canalele audio) .EDDGridDe la AudioFiles cere ca toate fișierele să aibă același număr de eșantioane, așa că dacă acest lucru nu este adevărat, trebuie să utilizați EDDtableFromAudioFiles. Altfel, alegerea tipului de EDD de utilizat este în întregime alegerea ta. Un avantaj al EDD TableFromAudioFiles: puteți adăuga alte variabile cu alte informații, de exemplu,stationID, StationType. În ambele cazuri, lipsa unei variabile unificate a timpului face mai dificilă colaborarea cu datele de la aceste tipuri de TED, însă nu există o modalitate bună de a crea o variabilă a timpului unificată.
Vezi aceste superclase,EDDGridDin dosareşiTabel EDD din dosare, pentru informaţii generale despre cum funcţionează această clasă şi cum să o folosească.
Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Deoarece fişierele audio nu au alte metadate decât informaţii legate de codificarea datelor de sunet, va trebui să editaţi ieşirea din GenerateDatasets Xml pentru a furniza informații esențiale (de exemplu, titlu, rezumat;creator\_name, instituţie, istorie) .
Detalii:
- Există un număr mare de formate de fișiere audio. În prezent,ERDDAP™poate citi date din majoritatea fișierelor .wav și .au. În prezent nu poate citi alte tipuri de fișiere audio, de exemplu, .aiff sau .mp3. Dacă aveți nevoie de suport pentru alte formate de fișiere audio sau alte variante de .wav și .au, vă rugăm să trimiteți cererea dvs. la Chris. John la Noaa.gov. Sau, ca un workaround puteți utiliza chiar acum, puteți converti fișierele audio în PCM\_ Semnat (pentru date întregi) sau PCM\_FLOAT (pentru date privind punctele plutitoare) .wav fișiere astfel încâtERDDAP™pot lucra cu ei.
- În prezent,ERDDAP™poate citi fișiere audio cu ceJava's AudioFormat class calls PCM\_FLOAT, PCM\_signed, PCM\_UNSIGNED, ALAW și ULAW codes.ERDDAP™convertește valorile PCM\_UNIGNED (de exemplu, între 0 și 255) în valori semnate (de exemplu, -128 - 128) prin rearanjarea biților din valorile datelor.ERDDAP™convertește ALAW și ULAW codificate din formatul lor nativ codificat pe scurt (int16) valori. De cândJavavrea date adevărate,ERDDAP™rearanjează octeții datelor stocate cu bigEndian=fals (puțin endian) pentru a citi corect valorile. Pentru toate celelalte codări (PCM) ,ERDDAP™citeste datele asa cum este.
- CândERDDAP™citește date din fișiere audio, convertește metadatele audio disponibile ale fișierului în atribute globale. Acest lucru va include întotdeauna (cu valorile eșantionului prezentate)
Siring audioBigEndian "fals"; / True sau fals audio int Canalele 1; audioEncoding string "PCM\_SIGNED"; Float audioFrameRate 9600.0; / pe secundă int audioFrameSize 2; //# of data bytes per frame weather forecast int audioSampleSizeInBits 16; // # de biți pe canal pe eșantion
PentruERDDAP"Scopurile, un cadru este sinonim cu un eșantion, care este datele pentru un punct în timp. Atribuțiile înERDDAP™va avea informațiile care descriu datele așa cum au fost în fișierele sursă.ERDDAP™va fi adesea schimbat acest lucru în timp ce citiți datele, de exemplu, PCM\_UNSIGNED, ALAW, și ULAW datele codificate sunt convertite în PCM\_SIGNED, și bigEndian= date false este convertit la bigEndian= date reale (care este modul în careJavavrea s-o citească.) . În final, valorile datelor înERDDAP™va fi întotdeaunaPCM codificatvalorile datelor (Adică, eșantioane simple digitalizate ale undei sonore) .
- CândERDDAP™citeste date din fisiere audio, citeste intregul fisier.ERDDAP™pot citi aproape 2 miliarde de mostre pe canal. De exemplu, dacă rata de eșantionare este de 44,100 de eșantioane pe secundă, 2 miliarde de eșantioane se traduce la aproximativ 756 de minute de date sonore per fișier. Dacă aveți fișiere audio cu mai mult decât această cantitate de date, aveți nevoie pentru a rupe fișierele în bucăți mai mici, astfel încâtERDDAP™Le pot citi.
- Pentru căERDDAP™citește fișiere audio întregi,ERDDAP™trebuie să aibă acces la o cantitate mare de memorie pentru a lucra cu fișiere audio mari. Vezi?ERDDAPsetările memoriei. Din nou, dacă aceasta este o problemă, un lucru în jurul pe care le puteți folosi chiar acum este de a sparge fișierele în bucăți mai mici, astfel încâtERDDAP™le pot citi cu mai puţină memorie.
- Unele fișiere audio au fost scrise incorect.ERDDAP™face un mic efort pentru a rezolva astfel de cazuri. Dar, în general, atunci când există o eroare,ERDDAP™va arunca o excepție (și respinge acest fișier) sau (dacă eroarea este nedetectabilă) citeste datele (dar datele vor fi incorecte) .
- ERDDAP™nu verifică sau modifică volumul sunetului. În mod ideal, datele audio întregi sunt scalate pentru a utiliza întreaga gamă a tipului de date.
- Fișiere audio și playere audio nu au nici un sistem pentru valorile lipsă (De exemplu, -999 sau Float.NaNaN) . Deci datele audio nu ar trebui să aibă valori lipsă. Dacă există valori lipsă (de exemplu, dacă aveți nevoie pentru a prelungi un fișier audio) , utilizați o serie de 0 care va fi interpretată ca tăcere perfectă.
- CândERDDAP™citeste date din fisiere audio, intotdeauna creeaza o coloana numita expirata Timpul pentru fiecare probă, în secunde (stocate ca duble) , în raport cu primul eșantion (care este atribuit expirat Timp = 0,0 s) . CuEDDGridDe la AudioFiles, aceasta devine variabila axei timp scurs.
- EDDGridDin AudioFiles se cere ca toate fișierele să aibă același număr de eșantioane. Deci, dacă acest lucru nu este adevărat, trebuie să utilizați EDDtableFromAudioFiles.
- PentruEDDGridDe la AudioFiles, vă recomandăm să setați [<dimensionValuesInMemory>] (#dimensiuni valori în memorie) la fals (așa cum este recomandat de GenerateDatasets Xml) , deoarece dimensiunea timpului are adesea un număr imens de valori.
- PentruEDDGridDe la AudioFiles, ar trebui să utilizați aproape întotdeaunaEDDGridSistem de fișiere pentruAgregare prin Nume fișiere, aproape întotdeauna prin extragerea data de începere a înregistrării Timpul de la fişiere. De exemplu,
<sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
Generează dateName Xml va încuraja acest lucru și vă va ajuta cu acest lucru.
- Pentru tabelul EDDFromAudioFiles, ar trebui să utilizați aproape întotdeauna tabelul EDDFromFiles sistem pentru\\\*FileName pseudosourceNamespentru a extrage informații din numele fișierului (aproape întotdeauna data de începere Timpul pentru înregistrare) și să o promoveze ca fiind o coloană de date. De exemplu,
<sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
Formatul timpului ar trebui să fie specificat ca atribut al unităților:<Att name="tootyyymdd"\_'Hhmmss</att>
EDDGridDe la MergeIRFiles
EDDGridDe la MergeIRFiles date agregate de la nivel local;CombeIRfișiere, care sunt de laMisiunea de măsurare a ploii tropicale (TRMM) , care este o misiune comună între NASA și Agenția Japoneză de Explorare Aerospațială (JAXA) . Combină Fișierele IR pot fi descărcate de laNASA.
EDDGridDe la MergeIRFiles.java a fost scris și a contribuit laERDDAP™proiect de Jonathan Lafite și Philippe Makowski de la R.Tech Engineering (licență: open source cu drepturi de autor) .
EDDGridDin MergeIRFiles este un pic neobișnuit:
- EDDGridFromMergeIRFiles suportă fișiere de date sursă comprimate sau necomprimate, în orice combinație, în același set de date. Acest lucru vă permite, de exemplu, să comprimați fișiere mai vechi care sunt rareori accesate, dar să decomprimați fișiere noi care sunt adesea accesate. Sau, puteți schimba tipul de compresie de la original. Z la, de exemplu,.gz.
- Dacă aveți versiuni comprimate și necomprimate ale acelorași fișiere de date în același director, vă rugăm să vă asigurați că<fileNameRegex> pentru setul de date se potrivește cu numele fișierelor pe care doriți să le potriviți și nu se potrivește cu numele fișierelor pe care nu doriți să le potriviți.
- Fișierele de date sursă necomprimate nu trebuie să aibă extensie de fișier (Adică nu "." în numele fișierului) .
- Fișierele de date sursă comprimate trebuie să aibă o extensie a fișierului, darERDDAP™determină tipul de compresie prin verificarea conținutului fișierului, nu prin examinarea extensiei fișierului (De exemplu, ".Z") . Tipurile de compresie acceptate includ "gz," "bzip2," "xz," "lzma," "snappy-raw," "snappy-framed," "pack200" și "z." CândERDDAP™citeste fisiere comprimate, se descompune pe zbor, fara a scrie intr-un fisier temporar.
- Toate fișierele de date sursă trebuie să utilizeze sistemul original de denumire a fișierului: adică, merc\_ AAAAMMDDH \_4km-pixel (unde AAAAMMDDH indică timpul asociat cu datele din fișier) , plus o extensie a fișierului dacă fișierul este comprimat.
Vezi această clasă super clasă,EDDGridDin dosare, pentru informaţii generale despre cum funcţionează această clasă şi cum să o folosească.
Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin.
EDDGridDinNcFiles
EDDGridDinNcFiles date agregate de la nivel local, regrupate;GRIB.grb și .grb2fișiere;HDF (v4 sau v5) .hdffișiere;.ncmlfișiere;NetCDF (v3 sau v4) .ncfișiere șiZarrfișiere (din versiunea 2.25) . Fișierele Zarr au un comportament ușor diferit și necesită fie fișierulNameRegex, fie caleaRegex pentru a include "zarr."
Acest lucru poate funcționa cu alte tipuri de fișiere (de exemplu, BUFR) Nu l-am testat. Vă rugăm să ne trimiteţi nişte dosare.
- Pentru fișierele GRIB,ERDDAP™va face un fișier index .gbx prima dată când citește fiecare fișier GRIB. Deci, fișierele GRIB trebuie să fie într-un director în cazul în care "utilizator" care a fugit Tomcat a citit + scrie permisiunea.
- Vezi această clasă super clasă,EDDGridDin dosare, pentru informații privind modul în care funcționează această clasă și cum să-l folosească.
- Începând cuERDDAP™v2.12;EDDGridDe laNcFiles șiEDDGridDinNcFiles Despachetat poate citi date din "structuri" in.nc4 și.hdf4 dosare. Pentru a identifica o variabilă dintr-o structură,<sourceName> trebuie să utilizeze formatul: completStructureName | nume membru , de exemplu grupul1/myStruct|Membrul meu.
- Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin.
Grupuri în fișiere NC grid
Fișierele Netcdf4 pot conține grupuri. ERDDAP™face doar un set de date din variabilele dintr-un singur grup și toate grupurile sale-mamă. Puteți specifica un nume de grup specific în GenerateDatasets Xml (Omiteţi tăietura de urmărire) , sau utilizaţi "" pentru a avea GenerateDatasets Xml căutați toate grupurile pentru variabilele care utilizează cele mai multe dimensiuni, sau de a folosi "\[rădăcină\]"pentru a avea GenerateDatasets doar uita-te pentru variabile în grupul rădăcină.
Primul lucru pe care GenerateDatasetsXml îl face pentru acest tip de set de date după ce răspundeți la întrebări este să imprimați structura ncdump-like a fișierului eșantion. Deci, dacă introduceți câteva răspunsuri prostesc pentru prima buclă prin GenerateDatesets Xml, cel puţin vei putea vedea dacăERDDAP™poate citi fișierul și a vedea ce dimensiuni și variabile sunt în fișier. Apoi, puteți da răspunsuri mai bune pentru a doua buclă prin GenerateDatasetsXml.
EDDGridDe la NCFilesDespachetat
EDDGridDe la NCFilesDespachetat este o variantă deEDDGridDinNcFilescare agregate de date de la locale, grilateNetCDF (v3 sau v4) .ncși fișierele aferente. Diferenţa este că această clasă despachetează fiecare fişier de date înainteEDDGridFromFiles se uită la fișiere:
- Acesta despachetează variabile care sunt ambalate cuscale\_factorși/sauadd\_offset.
- Se convertește \_FillValue șimissing\_valuevalorile care urmează să fie ale NaN (sau MAX\_VADIU pentru tipuri de date întregi) .
- Conversia valorilor timpului şi timpului în"seconds since 1970-01-01T00:00:00Z".
Marele avantaj al acestei clase este că oferă o modalitate de a face față diferitelor valori alescale\_factor,add\_offset, \_FillValue,missing\_value, sau unități de timp în diferite fișiere sursă într-o colecție. În caz contrar, ar trebui să utilizați un instrument caNcMLsauNCOpentru a modifica fiecare fișier pentru a elimina diferențele astfel încât fișierele să poată fi manipulate deEDDGridDe la NCFiles. Pentru ca această clasă să funcționeze corect, fișierele trebuie să respecte standardele CF pentru atributele aferente.
- Dacă încercaţi să faceţi oEDDGridDinNcFiles Despachetat dintr-un grup de fișiere cu care ați încercat anterior și nu ați reușit să utilizațiEDDGridDe laNcFiles, cd la Big ParentDirectory /Set de date/ ultima2Scrisoare / datasetID / unde ultima2Scrisoare este ultimele 2 litere aledatasetID, și șterge toate fișierele din acel director.
- Începând cuERDDAP™v2.12;EDDGridDe laNcFiles șiEDDGridDinNcFiles Despachetat poate citi date din "structuri" in.nc4 și.hdf4 dosare. Pentru a identifica o variabilă dintr-o structură,<sourceName> trebuie să utilizeze formatul: completStructureName | nume membru , de exemplu grupul1/myStruct|Membrul meu.
- Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin.
Fișierele Netcdf4 pot conține grupuri. Vezi?Această documentație.
Primul lucru GenerateDateSetsXml face pentru acest tip de set de date după ce răspundeți la întrebări este imprimarea structurii ncdump-like a fișierului eșantion înainte Este despachetat. Deci, dacă introduceți câteva răspunsuri prostesc pentru prima buclă prin GenerateDatesets Xml, cel puţin vei putea vedea dacăERDDAP™poate citi fișierul și a vedea ce dimensiuni și variabile sunt în fișier. Apoi, puteți da răspunsuri mai bune pentru a doua buclă prin GenerateDatasetsXml.
EDDGridLonPM180
EDDGridLonPM180 modifică valorile de longitudine ale unui copil (închis) EDDGridSet de date care are valori de longitudine mai mari de 180 (de exemplu, de la 0 la 360) astfel încât acestea sunt în intervalul -180 la 180 (Longitudine Plus sau Minus 180, prin urmare numele) .
- Acest lucru oferă o modalitate de a realiza seturi de date care au valori de longitudine mai mari de 180 conforme în/cuOGCservicii (de exempluWMSserver înERDDAP) , din moment ce toateOGCserviciile necesită valori de longitudine cuprinse între -180 și 180.
- Lucrul în apropierea unei discontinuităţi cauzează probleme, indiferent dacă discontinuitatea este la longitudine 0 sau la longitudine 180. Acest tip de set de date vă permite să evitați aceste probleme pentru toată lumea, oferind două versiuni ale aceluiași set de date: unul cu valori de longitudine în intervalul 0 - 360 ("Pacificcentric"?) , una cu valori de longitudine în intervalul 180 - 180 ("Atlanticatic"?) .
- Pentru seturile de date pentru copii cu toate valorile longitudinei mai mari de 180, toate valorile noii longitudine sunt cu 360 de grade mai mici. De exemplu, un set de date cu valori de longitudine cuprinse între 180 și 240 ar deveni un set de date cu valori de longitudine cuprinse între -180 și -120.
- Pentru seturi de date pentru copii care au valori de longitudine pentru întregul glob (de la aproximativ 0 la 360) , noua valoare longitudine va fi rearanjat pentru a fi (aproximativ) - 180 la 180: Valorile originale de la 0 la aproape 180 sunt neschimbate. Valorile originale 180 la 360 sunt convertite la -180 la 0 și mutate la începutul matricei de longitudine.
- Pentru seturile de date pentru copii care se întind pe 180 dar nu acoperă globul,ERDDAP™introduce valori lipsă, după caz, pentru a face un set de date care acoperă globul. De exemplu, un set de date pentru copii cu valori de longitudine de 140-200 ar deveni un set de date cu valori de -180-180. Valorile copilului de la 180 la 200 ar deveni -180 la -160. Se introduc noi valori ale longitudinii de la -160 la 140. Valorile corespunzătoare ale datelor vor fi \_FillValues. Valorile copilului de la 140 la aproape 180 ar fi neschimbate. Introducerea valorilor lipsă poate părea ciudată, dar evită mai multe probleme care rezultă de la valori de longitudine care salt brusc (de exemplu, de la -160 la 140) .
- ÎnGenereazăSeturi de dateXml, există un "tip de set de date" special,EDDGridLonPM180FromErddapCatalog, care vă permite să generaţidatasets.xmlpentruEDDGridSet de date LonPM180 din fiecareEDDGridSeturi de date într-unERDDAPcare au valori de longitudine mai mari de 180. Acest lucru facilitează oferirea a două versiuni ale acestor seturi de date: originalul, cu valori de longitudine cuprinse între 0 și 360; și noul set de date, cu valori de longitudine cuprinse între 180 și 180.
Setul de date pentru copii din fiecareEDDGridSetul de date LonPM180 va fi unEDDGridDin setul de date Erddap care indică setul de date original. Noul set de datedatasetIDva fi numele setului de date original plus "\_LonPM180." De exemplu,
<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>
PuneEDDGridSet de date LonPM180 jos Setul de date original îndatasets.xml. Asta evită unele probleme posibile.
Alternativ, puteți înlocuiEDDGridSet de date pentru copii din Erddap cu setul de date originaldatasets.xml. Apoi, va exista o singură versiune a setului de date: cea cu valori de longitudine cuprinse între -180 și 180. Te descurajăm pentru că există momente când fiecare versiune a setului de date este mai convenabilă.
- Dacă oferiți două versiuni ale unui set de date, de exemplu, una cu longitudine 0 - 360 și una cu longitudine -180 - 180:
- Puteți utiliza opțional [<accesibil ViaWMS> Fals</accesibil ViaWMS>] (#accessibleviawms) cu setul de date 0-360 pentru a dezactiva forțatWMSservicii pentru acel set de date. Apoi, numai versiunea LonPM180 a setului de date va fi accesibilă prin intermediulWMS.
- Există câteva modalități de a menține la zi setul de date LonPM180 cu modificări ale setului de date suport:
- Dacă setul de date pentru copii este aEDDGridDin setul de date Erddap care face trimitere la un set de date din același set de dateERDDAP™, setul de date LonPM180 va încerca să subscrie direct la setul de date suport, astfel încât acesta să fie întotdeauna actualizat. Abonamentele directe nu generează e-mailuri care vă cer să validați abonamentul - validarea trebuie să se facă automat.
- Dacă setul de date pentru copii nu este unEDDGridSet de date din Erddap care este pe aceeașiERDDAP™, Setul de date LonPM180 va încerca să utilizeze sistemul de subscriere regulat pentru a subscrie la setul de date suport. Dacă aveţi sistemul de abonare înERDDAP™Pornit, ar trebui să obțineți e-mailuri cerându-vă să valideze abonamentul. Te rog.
- Dacă aveţi sistemul de abonare înERDDAP™închis, setul de date LonPM180 poate avea uneori metadate depășite până când setul de date LonPM180 este reîncărcat. Deci, dacă sistemul de abonament este oprit, ar trebui să setați [<reîncărcare Fiecare NMuta >] (#Încarcă fiecare minut) stabilirea setului de date LonPM180 la un număr mai mic, astfel încât este mai probabil ca acesta să prindă modificări ale setului de date pentru copii mai devreme.
EDDGridSchelet LonPM180 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 modifică valorile de longitudine ale unui copil (închis) EDDGridSet de date care are valori de longitudine mai mici de 0 (De exemplu, -180 la 180) astfel încât acestea să fie în intervalul 0 - 360 (prin urmare, denumirea) .
- Lucrul în apropierea unei discontinuităţi cauzează probleme, indiferent dacă discontinuitatea este la longitudine 0 sau la longitudine 180. Acest tip de set de date vă permite să evitați aceste probleme pentru toată lumea, oferind două versiuni ale aceluiași set de date: una cu valori de longitudine în intervalul 180 - 180 ("Atlanticatic"?) . unul cu valori de longitudine în intervalul 0 - 360 ("Pacificcentric"?) ,
- Pentru seturile de date pentru copii cu toate valorile longitudinei mai mici de 0, toate valorile noii longitudine sunt cu 360 de grade mai mari. De exemplu, un set de date cu valori de -180 până la -120 de longitudine ar deveni un set de date cu valori de longitudine cuprinse între 180 și 240.
- Pentru seturi de date pentru copii care au valori de longitudine pentru întregul glob (aproximativ -180 la 180) , noua valoare longitudine va fi rearanjat pentru a fi (aproximativ) 0 - 360: Valorile originale -180 la 0 sunt convertite la 180 la 360 și mutate la sfârșitul matricei de longitudine. Valorile originale de la 0 la aproape 180 sunt neschimbate.
- Pentru seturile de date pentru copii care se întind între 0 și 2, dar nu acoperă globul,ERDDAP™introduce valori lipsă, după caz, pentru a face un set de date care acoperă globul. De exemplu, un set de date pentru copii cu valori de -40-20 longitudine ar deveni un set de date cu valori de longitudine cuprinse între 0 și 360. Valorile copilului de la 0 la 20 ar fi neschimbate. Se vor introduce noi valori ale longitudinii de la 20 la 320. Valorile corespunzătoare ale datelor vor fi \_FillValues. Valorile copilului de la -40 la 0 ar deveni 320 la 360. Introducerea valorilor lipsă poate părea ciudată, dar evită mai multe probleme care rezultă de la valori de longitudine care salt brusc (de exemplu de la 20 la 320) .
- ÎnGenereazăSeturi de dateXml, există un "tip de set de date" special,EDDGridLon0360De la ErddapCatalog, care vă permite să generaţidatasets.xmlpentruEDDGridSeturi de date Lon0360 din fiecareEDDGridSeturi de date într-unERDDAPcare au valori de longitudine mai mari de 180. Acest lucru facilitează oferirea a două versiuni ale acestor seturi de date: originalul, cu valori de longitudine cuprinse între 0 și 360; și noul set de date, cu valori de longitudine cuprinse între 180 și 180.
Setul de date pentru copii din fiecareEDDGridSetul de date Lon0360 va fi unEDDGridDin setul de date Erddap care indică setul de date original. Noul set de datedatasetIDva fi numele setului de date original plus "\_Lon0360." De exemplu,
<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>
PuneEDDGridSet de date Lon0360 jos Setul de date original îndatasets.xml. Asta evită unele probleme posibile.
Alternativ, puteți înlocuiEDDGridSet de date pentru copii din Erddap cu setul de date originaldatasets.xml. Apoi, va exista o singură versiune a setului de date: cea cu valori de longitudine cuprinse între 0 și 360. Te descurajăm pentru că există momente când fiecare versiune a setului de date este mai convenabilă.
- Dacă oferiți două versiuni ale unui set de date, de exemplu, una cu longitudine 0 - 360 și una cu longitudine -180 - 180:
- Puteți utiliza opțional [<accesibil ViaWMS> Fals</accesibil ViaWMS>] (#accessibleviawms) cu setul de date 0 - 360 pentru a dezactiva forțatWMSservicii pentru acel set de date. Apoi, numai versiunea de la -180 la 180 a setului de date va fi accesibilă prin intermediulWMS.
- Există câteva modalități de a menține la zi setul de date Lon0360 cu modificări ale setului de date suport:
- Dacă setul de date pentru copii este aEDDGridDin setul de date Erddap care face trimitere la un set de date din același set de dateERDDAP™, Setul de date Lon0360 va încerca să subscrie direct la setul de date suport, astfel încât acesta să fie întotdeauna actualizat. Abonamentele directe nu generează e-mailuri care vă cer să validați abonamentul - validarea trebuie să se facă automat.
- Dacă setul de date pentru copii nu este unEDDGridSet de date din Erddap care este pe aceeașiERDDAP™, setul de date Lon0360 va încerca să utilizeze sistemul de subscriere regulat pentru a subscrie la setul de date suport. Dacă aveţi sistemul de abonare înERDDAP™Pornit, ar trebui să obțineți e-mailuri cerându-vă să valideze abonamentul. Te rog.
- Dacă aveţi sistemul de abonare înERDDAP™închis, setul de date Lon0360 poate avea uneori metadate depășite până când setul de date Lon0360 este reîncărcat. Deci, dacă sistemul de abonament este oprit, ar trebui să setați [<reîncărcare Fiecare NMuta >] (#Încarcă fiecare minut) stabilirea setului de date Lon0360 la un număr mai mic, astfel încât este mai probabil ca acesta să prindă modificări ale setului de date pentru copii mai devreme.
EDDGridSchelet Lon0360 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 agregate două sau mai multeEDDGridSeturi de date (copii) una lângă alta.
- Setul de date rezultat conține toate variabilele din toate setările de date pentru copii.
- Setul de date părinte și toate seturile de date pentru copii TREBUIE să aibă diferitedatasetIDc. Dacă orice nume dintr-o familie sunt exact la fel, setul de date nu va încărca (cu mesajul de eroare că valorile axei agregate nu sunt în ordine sortate) .
- Toţi copiii TREBUIE să aibă aceleaşi valori sursă pentruaxisVariables\[1+\] (de exemplu, latitudine, longitudine) . Precizia încercării este determinată dePotrivire AxisNDigits.
- Copiii pot avea valori sursă diferite pentruaxisVariables\[0\] (de exemplu, timpul) Dar de obicei sunt la fel.
- Setul de date părinte va părea să aibă toateaxisVariables\[0\]valori sursă de la toți copiii.
- De exemplu, acest lucru vă permite să combinaţi un set de date sursă cu u-componenta vectorului şi un alt set de date sursă cu componenta V a vectorului, astfel încât datele combinate să poată fi deservite.
- Copiii creaţi prin această metodă sunt ţinuţi în particular. Acestea nu sunt seturi de date accesibile separat (de exemplu, prin cereri de date ale clienților sau prinFișiere de pavilion) .
- Metadatele globale și setările pentru părinte provin din metadatele globale și setările pentru primul copil.
- În cazul în care există o excepție în timpul creării primului copil, părintele nu va fi creat.
- Dacă există o excepție în timp ce se creează alți copii, acest lucru trimite un e-mail pentru a e-mailEverythingTo (după cum se specifică însetup.xml) şi continuă cu ceilalţi copii.
EDDGridSideBySide schelet 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>
EDDGridDimensiune agregată
EDDGridDimensiune agregată agregate două sau mai multeEDDGridseturi de date fiecare dintre care are o gamă diferită de valori pentru prima dimensiune, dar valori identice pentru celelalte dimensiuni.
- De exemplu, un set de date pentru copii ar putea avea 366 de valori (pentru 2004) pentru dimensiunea timpului și un alt copil ar putea avea 365 valori (pentru 2005) pentru dimensiunea timpului.
- Toate valorile pentru toate celelalte dimensiuni (de exemplu, latitudine, longitudine) TREBUIE să fie identic pentru toţi copiii. Precizia încercării este determinată dePotrivire AxisNDigits.
- Valori de dimensiune sortare - Valorile pentru fiecare dimensiune trebuie sortate (ascendentă sau descendentă) . Valorile pot fi șterse neregulat. Nu pot exista legături. Aceasta este o cerinţă aStandardul metadatelor CF. Dacă valorile oricărei dimensiuni nu sunt în ordine sortate, setul de date nu va fi încărcat șiERDDAP™va identifica prima valoare nesortate în fișierul jurnal; Big ParentDirectory /logs/log.txt.
Valorile de dimensiune nesortate indică aproape întotdeauna o problemă cu setul de date sursă. Acest lucru se întâmplă cel mai frecvent atunci când un fișier cu nume greșite sau nepotrivit este inclus în agregare, ceea ce duce la o dimensiune a timpului nesortate. Pentru a rezolva această problemă, consultați mesajul de eroare dinERDDAP™log.txt fișier pentru a găsi valoarea de timp ofensatoare. Apoi căutați în fișierele sursă pentru a găsi fișierul corespunzător (sau una înainte sau una după) care nu aparține în agregare.
- Setul de date părinte și setul de date pentru copii trebuie să fie diferitedatasetIDc. Dacă orice nume dintr-o familie sunt exact la fel, setul de date nu va încărca (cu mesajul de eroare că valorile axei agregate nu sunt în ordine sortate) .
- În prezent, setul de date pentru copii trebuie să fie unEDDGridSetul de date de la Dap și TREBUIE să aibă cele mai mici valori ale dimensiunii agregate (de obicei cele mai vechi valori ale timpului) . Toți ceilalți copii TREBUIE să fie seturi de date aproape identice (diferă doar în valorile pentru prima dimensiune) și sunt specificate de doar lorsourceUrl.
- Setul de date agregat primeşte metadatele sale de la primul copil.
- ăGenerează dateName Programul Xmlpoate face un proiect dur dedatasets.xmlpentruEDDGridAgregatExistingDimension bazat pe un set de fișiere deservite de oHyraxsau server THREDS. De exemplu, utilizați această intrare pentru program ("/1988" în URL face exemplul rula mai repede) :
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
Puteți folosi rezultatul<sourceUrl> etichete sau ștergeți-le și decomentați<sourceUrl> etichetă (astfel încât fişierele noi să fie observate de fiecare dată când setul de date este reîncărcat.
EDDGridSchelet de dezvoltare globală 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>
EDDGridCopiază
EDDGridCopiază face și menține o copie locală a unui altEDDGriddatele și servește date de la copia locală.
- EDDGridCopiază (și pentru date tabelare;EDDCommentCopy) este un foarte usor de utilizat si un foarte eficient
soluţie la unele dintre cele mai mari probleme cu furnizarea datelor dintr-o sursă de date la distanţă:
- Accesul datelor dintr-o sursă de date la distanță poate fi lent.
- Acesta poate fi lent, deoarece este inerent lent (de exemplu, un tip ineficient de server) ,
- pentru că este copleşit de prea multe cereri,
- sau pentru că serverul sau serverul de la distanță este limitat de lățime de bandă.
- Setul de date la distanță este uneori indisponibil (din nou, pentru o varietate de motive) .
- Să te bazezi pe o singură sursă de date nu e bine (de exemplu, atunci când mulți utilizatori și mulțiERDDAPs utilizaţi) .
- Accesul datelor dintr-o sursă de date la distanță poate fi lent.
- Cum funcţionează...EDDGridCopierea rezolvă aceste probleme prin realizarea și menținerea automată a unei copii locale a datelor și furnizarea de date din copia locală.ERDDAP™poate servi datele de pe copia locală foarte, foarte repede. Şi făcând o copie locală uşurează povara serverului de la distanţă. Iar copia locală este o copie de rezervă a originalului, care este util în cazul în care se întâmplă ceva cu originalul.
Nu este nimic nou despre a face o copie locală a unui set de date. Ce este nou aici este că această clasă face\*Uşor.\*crearea și\*menţine\*o copie locală a datelor de la o\*soi\*tipurile de surse de date la distanță și\*adăuga metadate\*copierea datelor.
- Bucati de date...EDDGridCopie face copia locală a datelor prin solicitarea bucăților de date de la distanță<Set de date>. Va fi o bucată pentru fiecare valoare a celui mai stâng (Prima dată) variabila axei.EDDGridCopia nu se bazează pe numerele index ale setului de date la distanță pentru axă -- acestea se pot schimba.
ATENŢIE: Dacă mărimea unei bucăţi de date este atât de mare (> 2GB) că provoacă probleme;EDDGridCopia nu poate fi folosită. (Ne pare rău, sperăm să avem o soluție pentru această problemă în viitor.)
- \[O alternativă laEDDGridCopiază Dacă datele de la distanță sunt disponibile prin intermediul fișierelor descărcabile, nu printr-un serviciu web, utilizațicache Opţiunea dinspre Url pentruEDDGridDin dosare, care face o copie locală a fișierelor la distanță și servește datele din fișierele locale.\]
- Fișiere locale - Fiecare bucată de date este stocată separatNetCDFfișier într-un subdosar al Big ParentDirectory /copie / datasetID / (după cum se specifică însetup.xml) . Numele de fișier create din valorile axei sunt modificate pentru a le face file-name-safe (de exemplu, hyphens se înlocuiesc cu "x2D") - asta nu afectează datele reale.
- Date noi -- De fiecare datăEDDGridCopia e reîncărcată, verifică telecomanda.<Set de date> pentru a vedea ce bucăți sunt disponibile. În cazul în care fișierul pentru o bucată de date nu există deja, o cerere pentru a obține bucata se adaugă la o coadă.ERDDAPSarcinaThread procesează toate cererile coadă pentru bucăți de date, unu câte unu. Puteți vedea statistici pentru activitatea Thread pePagina statutuluişi înRaport zilnic. (Da.ERDDAP™ar putea atribui mai multe sarcini acestui proces, dar care ar folosi până o mulțime de lățime de bandă de date sursă de la distanță, memorie, și timp CPU, și o mulțime de localeERDDAPLăţimea de bandă, memoria şi timpul procesorului, nici una dintre ele nu este o idee bună.)
NOTĂ: Prima datăEDDGridCopia este încărcată, (dacă totul merge bine) o mulțime de cereri de bucăți de date vor fi adăugate la coada sarciniiThread, dar nu vor fi create fișiere de date locale. Astfel constructorul va eșua, dar sarcinaThread va continua să lucreze și să creeze fișiere locale. Dacă totul merge bine, sarcinaThread va face unele fișiere de date locale și următoarea încercare de a reîncărca setul de date (în 15 minute) va reuși, dar inițial cu o cantitate foarte limitată de date.
NOTĂ: După ce setul de date local are unele date și apare înERDDAP, în cazul în care setul de date la distanță nu este accesibil temporar sau permanent, setul local va funcționa în continuare.
ATENŢIONARE: Dacă setul de date de la distanţă este mare şi/sau serverul de la distanţă este lent (Asta e problema, nu-i aşa?) Va dura mult să facem o copie locală completă. În unele cazuri, timpul necesar va fi inacceptabil. De exemplu, transmiterea 1 TB a datelor pe o linie T1 (0,15 GB/s) durează cel puțin 60 de zile, în condiții optime. În plus, utilizează o mulțime de lățime de bandă, memorie, și timp CPU pe computerele de la distanță și locale. Soluţia este să trimiteţi un hard disk administratorului setului de date la distanţă, astfel încât s/el să poată face o copie a setului de date şi să vă trimită hard disk-ul înapoi. Utilizarea acestor date ca punct de plecare șiEDDGridCopierea va adăuga date. (Acesta este un mod în careServiciul de cloud computing al Amazon2se ocupă de problemă, chiar dacă sistemul lor are o mulțime de lățime de bandă.)
ATENŢIONARE: Dacă o valoare dată pentru stânga (Prima dată) variabila axei dispare din setul de date la distanță;EDDGridCopiere NU șterge fișierul copiat local. Dacă vrei, poţi să-l ştergi singur.
Copiază sursa de verificare Date
ădatasets.xmlpentru acest set de date poate avea o etichetă opțională
<checkSourceData>true</checkSourceData>
Valoarea implicită este adevărată. Dacă/atunci când setați fals, setul de date nu va verifica niciodată setul de date sursă pentru a vedea dacă există date suplimentare disponibile.
Doar pentru că
Se vede.EDDGridCopie pentru a face o copie a unui subset al setului de date sursă, în locul întregului set de date sursă, prin adăugarea unei etichete în formular<Doar din > unele Valoare </doar de la> la setul de datedatasets.xmlChunk.EDDGridCopierea va descărca doar valorile datelor legate de valorile primei dimensiuni (de obicei dimensiunea timpului) care sunt mai mari decât unele Valoare . unele Valoare pot fi:
-
Un timp relativ specificat prinnow- nuniți . De exemplu,<Doar din >now-2 ani</doarÎncepând cu> spune setului de date să facă doar copii locale ale datelor pentru datele în care valorile dimensiunii exterioare (de obicei, valorile timpului) sunt în ultimii 2 ani (care este reevaluată de fiecare dată când setul de date este reîncărcat, adică atunci când caută date noi de copiat) . Vezinow- nuniți Descrierea sintaxei. Acest lucru este util în cazul în care prima dimensiune are date de timp, pe care le face de obicei.
EDDGridCopiere nu șterge fișierele de date locale care au date care, în timp, devin mai vechi decâtnow- nuniți . Puteți șterge aceste fișiere în orice moment, dacă alegeți să. Dacă o faci, vă recomandăm cu tărie să setați unpaviliondupă ce ștergeți fișierele de spusEDDGridCopiază pentru a actualiza lista de fișiere cache.
-
Un punct fix în timp specificat ca un șir ISO 8601yyyy-MM-ddTHH:mm:ssZ. De exemplu,<Numai din 2000-01-01T00:00Z</Doar din> spune setului de date doar pentru a face copii locale ale datelor unde valoarea primei dimensiuni este \>=2000-01-01T00:00:00Z. Acest lucru este util în cazul în care prima dimensiune are date de timp, pe care le face de obicei.
-
Un număr plutitor. De exemplu,<Doar de la 94668480.0<Doar de atunci. Unităţile vor fi unităţile de destinaţie din prima dimensiune. De exemplu, pentru dimensiunile timpului, unitățile înERDDAP™sunt întotdeauna"seconds since 1970-01-01T00:00:00Z". Deci, 946684800."seconds since 1970-01-01T00:00:00Z"este echivalent cu 2000-01-01T00:00Z. Aceasta este întotdeauna o opțiune utilă, dar este deosebit de utilă atunci când prima dimensiune nu are timp.
EDDGridCopiază utilizarea recomandată
- Creează<Set de date > intrare (tipul nativ, nuEDDGridCopiază) pentru sursa de date la distanță. Funcţionează corect, inclusiv toate metadatele dorite.
- Dacă este prea lent, adăugați codul XML pentru a-l înfășura într-oEDDGridCopiază setul de date.
- Foloseşte un altdatasetID (Poate prin schimbareadatasetIDdin vechiuldatasetIDuşor) .
- Copiază<accesibil To>,<reîncărcareEveryNMinutes> și<OnChange> de la distanțăEDDGrid's XML to theEDDGridCopia e XML. (Valorile lor pentruEDDGridCopy matter; valorile lor pentru setul de date intern devin irelevante.)
- ERDDAP™va face și va menține o copie locală a datelor.
- ATENŢIONARE:EDDGridCopia presupune că valorile datelor pentru fiecare bucată nu se schimbă niciodată. Dacă / atunci când o fac, trebuie să ștergeți manual fișierele bucată în Big ParentDirectory /copie / datasetID / care sa schimbat șipavilionsetul de date care trebuie reîncărcat astfel încât bucățile eliminate să fie înlocuite. Dacă aveți un abonament prin e-mail la setul de date, veți primi două e-mailuri: unul când setul de date reîncărcați prima dată și începe să copieze datele, iar altul când setul de date se încarcă din nou (automat) și detectează noile fișiere locale de date.
- Toate valorile axei trebuie să fie egale. Pentru fiecare dintre axe, cu excepția celui mai stâng (Prima dată) Toate valorile trebuie să fie egale pentru toţi copiii. Precizia încercării este determinată dePotrivire AxisNDigits.
- Configurări, Metadate, Variabile -EDDGridCopiază folosește setările, metadatele și variabilele din setul de date sursă închis.
- Schimbă metadatele -- Dacă aveţi nevoie pentru a schimba oriceaddAttributessau să modifice ordinea variabilelor asociate setului de date sursă:
- SchimbăaddAttributespentru setul de date sursă dindatasets.xml, după cum este necesar.
- Șterge unul dintre fișierele copiate.
- Set apavilionpentru a reîncărca setul de date imediat. Dacă utilizați un steag și aveți un abonament e-mail la setul de date, veți primi două e-mailuri: una când setul de date reîncărcați prima dată și începe să copieze datele, iar alta când setul de date se încarcă din nou (automat) și detectează noile fișiere locale de date.
- Fișierul șters va fi regenerat cu noile metadate. În cazul în care setul de date sursă nu este disponibil vreodată,EDDGridSetul de date copiat va obține metadate din fișierul regenerat, deoarece este cel mai tânăr fișier.
EDDGridCopiază scheletul 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>
Tabel EDD din Cassandra
Tabel EDD din Cassandra se ocupă de date de la unulCassandra.Masa. Cassandra este o bază de date NOSQL.
- ERDDAP™poate lucra cu Cassandra v2 și v3 fără modificări sau diferențe în configurare. Am testat cuCassandra v2 și v3 de la Apache. Este probabil caERDDAP™poate lucra și cu Cassandra descărcată de pe DataStatx.
- Pentru Aug 2019 - Mai 2021, am avut probleme obtinerea Cassandra pentru a lucra cu AdoptăOpenJdkJavav8. A aruncat o EXCEPTIE\_ACCESS\_VIOLARE). Dar acum (Mai 2021) , această problemă este plecat: putem utiliza cu succes Cassandra v2.1.22 și adoptaOpenJdk jdk8u292-b10.
O masă
Cassandra nu susţine "se alătură" aşa cum fac bazele de date relaţionale. Unu.ERDDAP™Tabel EDDDe la hărțile setului de date Cassandra la una (poate un subset de unul) Masa Cassandra.
Cassandra.datasets.xml
- ERDDAP™vine cu CassandraJavaŞofer, nu trebuie să-l instalezi separat.
- Citiți cu atenție toate informațiile acestui document despre EDDtable FromCassandra. Unele detalii sunt foarte importante.
- CassandraJavaŞoferul este destinat să lucreze cu Apache Cassandra (1,2+) și DataStatx Enterprise (3.1+) . Dacă utilizați Apache Cassandra 1.2.x, trebuie să editați fișierul Cassandra.yaml pentru fiecare nod pentru a seta start\_native\_transport: adevărat, apoi reporniți fiecare nod.
- Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin (în special [<partiție KeySourceNames>] (#partitionkeysource names) ). Puteți aduna majoritatea informațiilor de care aveți nevoie pentru a crea XML-ul pentru un set de date EDDTableFromCassandra contactând administratorul Cassandra și prin căutarea web-ului.
Generează dateName Xml are două opțiuni speciale pentru tabelul EDDFromCassandra:
- Dacă introduceți "!!LIST!!" (fără citate) pentru keyspace, programul va afisa o lista de spatii cheie
- Dacă introduceți un anumit spațiu cheie și apoi introduceți "!!LIST!!!" (fără citate) pentru numele de tabel, programul va afișa o listă de tabele în acel spațiu cheie și coloanele lor.
Sensibilitate la caz
- Keyspace insensibil și denumirile de masă - Cassandra tratează keyspace și nume de masă într-un mod insensibil caz. Din cauza asta, nu trebuie să foloseşti niciodată un cuvânt rezervat. (dar cu un caz diferit) ca un keyspace Cassandra sau nume de masă.
- Nume de coloană insensibile -- În mod implicit, Cassandra tratează numele coloanei într-un mod insensibil. Dacă utilizați unul dintre cuvintele rezervate Cassandra ca un nume coloană (Te rog, nu!) , TREBUIE să utilizaţi
<columnNameQuotes>"<columnNameQuotes>
îndatasets.xmlpentru acest set de date astfel încât Cassandra șiERDDAP™va trata numele coloanei într-un mod sensibil. Aceasta va fi probabil o durere de cap masivă pentru tine, pentru că este greu de determinat versiunile sensibile ale numelor coloanei -- Cassandra afişează aproape întotdeauna numele coloanei ca fiind toate cele de jos, indiferent de cazul adevărat.
- Lucrează îndeaproape cu administratorul Cassandra, care poate avea experiență relevantă. Dacă setul de date nu se încarcă, citițimesaj de eroareCu grijă pentru a afla de ce.
Cassandra.<conexiune Proprietate >
Cassandra are proprietăți de conectare care pot fi specificate îndatasets.xml. Multe dintre acestea vor afecta performanţele Cassandrei...ERDDAP™Conexiune. Din păcate, proprietățile Cassandra trebuie stabilite programatic înJava, deciERDDAP™trebuie să aibă cod pentru fiecare proprietateERDDAP™sprijină. În prezent,ERDDAP™susține aceste proprietăți: (Implicațiile afișate sunt ceea ce vedem. Neplata sistemului tău poate fi diferită.)
- Opțiuni generale
<conexiune Denumirea proprietății=" compresie "> niciuna|LZ4|irascibil </conectare Proprietate > (insensibil caz, implicit = zero)
(Consultanţă generală de compresie: utilizaţi "nici unul" dacă conexiunea dintre Cassandra şiERDDAP™este local/rapid și utilizează "LZ4" dacă conexiunea este la distanță/înceată.)
<conexiune Denumirea proprietății=" acreditări "> Nume utilizator/parolă </conectare Proprietate > (Asta e literal.'/')
<conexiune Denumirea proprietății=" Indicatori "> Adevărat.|fals </conectare Proprietate > (2021-01-25 a fost implicit=adevărat, acum ignorat și întotdeauna fals)
<conexiune Denumirea proprietății=" port "> anInteger </conectare Proprietate > (implicit pentru protocolul binar nativ=9042)
<conexiune Denumirea proprietății=" ssl "> Adevărat.|fals </conectare Proprietate > (implicit = fals)
(Încercarea mea rapidă de a folosi SSL a eşuat. Dacă reuşeşti, spune-mi cum ai reuşit.) - Opțiuni întrebări
<conexiune Denumirea proprietății=" consistență Nivel "> toate|orice|fiecare\_quorum|local\_one|local\_quorum|local\_serial|unu|cvorum|serial|trei|doi </conectare Proprietate > (insensibil caz, implicit = ONE)
<conexiune Denumirea proprietății=" address "> anInteger </conectare Proprietate > (implicit = 5000)
(Nu setați makeSize la o valoare mai mică.)
<conexiune Denumirea proprietății=" Nivel de coexistență în serie "> toate|orice|fiecare\_quorum|local\_one|local\_quorum|local\_serial|unu|cvorum|serial|trei|doi </conectare Proprietate > (caz insensibil, implicit = SERIAL) - Opțiuni Socket
<conexiune Denumirea proprietății=" Conectează TimeoutMillis "> anInteger </conectare Proprietate > (implicit = 5000)
(Nu setați conexiunea TimeoutMillis la o valoare mai mică.)
<conexiune Denumirea proprietății=" KeepAlive "> Adevărat.|fals </conectare Proprietate > <conexiune Denumirea proprietății=" citeste Timeout Millis "> anInteger </conectare Proprietate > (Citește implicit Cassandra TimeoutMillis este 12000, darERDDAP™schimbă valoarea implicită la 120000. În cazul în care Cassandra este aruncat citindTimeouts, creșterea acest lucru nu poate ajuta, deoarece Cassandra uneori le aruncă înainte de acest moment. Problema este mai probabil că sunteți stocarea prea multe date pe partiție Combinaţie cheie.)
<conexiune Denumirea proprietății=" a primi BufferSize "> anInteger </conectare Proprietate > (Este neclar ceea ce primiți implicitBufferSize este. Nu setați acest lucru la o valoare mică.)
<conexiune Denumirea proprietății=" soLinger "> anInteger </conectare Proprietate > <conexiune Denumirea proprietății=" tcpNoDelay "> Adevărat.|fals </conectare Proprietate > (implicit=null)
Dacă aveți nevoie pentru a putea stabili alte proprietăți de conectare, consultațisecțiunea privind obținerea de sprijin suplimentar.
Pentru o pornire dată de Tomcat, conexiuneProperties sunt utilizate doar prima dată când un set de date este creat pentru un anumit URL Cassandra. Toate reîncărcarea setului de date și a tuturor seturilor de date ulterioare care partajează același URL vor utiliza acele properități originale de conectare.
CQL
Limba de întrebare Cassandra (CQL) este superficial ca SQL, limba de interogare utilizată de bazele de date tradiționale. Pentru căOPeNDAPCererile de date tabulare au fost concepute pentru a imita cererile de date tabulare SQL, este posibil pentruERDDAP™pentru a converti cererile de date tabulare în CQL Bound/PreparatedStatements.ERDDAP™înregistrează declarația înlog.txtcum
declarație ca text: DeclaraţiaAsText
Versiunea declarației pe care o vedeți va fi o reprezentare text a declarației și va avea doar "?" unde vor fi plasate valori de constrângere.
Nu atât de simplu... Din păcate, CQL are multe restricții cu privire la care coloane pot fi interogate cu care tipuri de constrângeri, de exemplu, coloane cheie de partiție pot fi constrânse cu = și IN, astfelERDDAP™trimite unele constrângeri Cassandrei și aplică toate constrângerile după primirea datelor de la Cassandra. Pentru a ajutaERDDAP™A face eficient cu Cassandra, aveți nevoie pentru a specifica [<partiție KeySourceNames>] (#partitionkeysource names) , [<clusterColumnSourceNames>] (#clustercoloanăsource names) , și [<indexColumnSourceNames>] (#Indicesourcenames) îndatasets.xmlpentru acest set de date. Acestea sunt cele mai importante moduri de a ajutaERDDAP™să lucreze eficient cu Cassandra. Dacă nu spuiERDDAP™aceste informații, setul de date va fi dureros de lent înERDDAP™și de a folosi tone de resurse Cassandra.
<partiție KeySourceNames>
Deoarece tastele de partiție joacă un rol central în mesele Cassandra,ERDDAP™trebuie să ştiesourceNames şi, dacă este cazul, alte informaţii despre modul de lucru cu acestea.
- TREBUIE să specificați o listă separată de nume de coloane sursă de partițiedatasets.xmlprin<partiție KeySourceNames. Un exemplu simplu,
<partitionKeySourceNames>station, deviceid<partitionKeySourceNames>
Un exemplu mai complex,
<partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
- TimeStamp Partition Keys - În cazul în care una dintre coloanele de tastatură de partiție este o coloană cu timbru de timp care are o versiune mai grosolană a unei alte coloane cu timbru de timp, specificați acest lucru prin
partițieKeySourcName/otherColumnSourceName/time\_precision
undetime\_precisioneste unul dintretime\_precisionsiruri de caractere utilizate în altă parte înERDDAP. Z traseu întime\_precisionșirul este implicit, deci nu contează dacătime\_precisionșir se termină în Z sau nu. De exemplu,ERDDAP™va interpreta data/ora de eșantionare/1970-01-01 ca "Constrângerile de dată pot fi construite din constrângeri privind timpul de eșantionare prin utilizarea acestuitime\_precision." Conversia efectivă a constrângerilor este mai complexă, dar aceasta este imaginea de ansamblu. Utilizați acest lucru ori de câte ori este relevant. PermiteERDDAP™să lucreze eficient cu Cassandra. Dacă această relație între coloane există într-o masă Cassandra și nu spuneERDDAP™, setul de date va fi dureros de lent înERDDAP™și de a folosi tone de resurse Cassandra. - Single Value Partition Keys - Dacă vreiERDDAP™Set de date pentru a lucra cu o singură valoare a unei chei de partiție, specificați partițieKeySourceName=valoare . Nu folosi citate pentru o coloană numerică, de exemplu, dispozitivid=1007 Folosește citate pentru o coloană String, de exemplu, statiid="Point Pinos"
- Ordinea implicită de sortare a datelor -- Ordinea cheii de partiție<dataVariable>datasets.xmldetermină ordinea implicită de sortare a rezultatelor de la Cassandra. Desigur, utilizatorii pot solicita o comandă de sortare diferită pentru un anumit set de rezultate prin adăugarea &orderBy (" Lista variabilelor separate de virgulă ") până la sfârşitul interogării lor.
- În mod implicit, Cassandra șiERDDAP™tratează denumirile coloanelor într-un mod insensibil. Dar dacă setațicoloanăNameQuotes"ERDDAP™va trata numele coloanei Cassandra într-un mod sensibil.
<partiție KeyCSV>
Dacă acest lucru este specificat,ERDDAP™va folosi în loc de a cere Cassandra pentru partiție Informații cheie de fiecare dată când setul de date este reîncărcat. Aceasta oferă lista de valori cheie distincte de partiție, în ordinea în care vor fi utilizate. Timpurile trebuie specificate ca secunde de la 1970-01-01T 00:00:00Z. Dar există, de asemenea, două moduri alternative speciale de a specifica ori (fiecare codificat ca un șir) :
- timp (aISO8601 Timp) (POATE fi codificat ca un șir)
- "timpuri (anISO8601StartTime, pasSeconds, stopTime) " (TREBUIE să fie codificat ca un șir de caractere)
Oprește-te Timpul poate fi un ISO8601 Timp sau un "now-timp nUnits" (de exemplu, "now-3 minute") . Oprește-te Timpul nu trebuie să fie un meci exact de început Timp + x pasSeconds. Un rând cu un timp () valoarea se extinde în mai multe rânduri înainte de fiecare interogare, astfel încât lista de partiție Cheile pot fi întotdeauna perfect actualizate. De exemplu,
<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>
se extinde în acest tabel de combinații cheie partiție:
deviceid,date
1001,1.4148E9
1001,1.4148864E9
1007,1.4153184E9
1008,1.4154048E9
1009,1.4154912E9
<clusterColumnSourceNames>
Cassandra acceptă constrângeri de tipul SQL pe coloanele de grup, care sunt coloanele care formează a doua parte a cheii primare (după tasta partiției (s) ) . Deci, este esențial să identifice aceste coloane prin intermediul<clusterColumnSourceNames. Acest lucru permiteERDDAP™să lucreze eficient cu Cassandra. Dacă există coloane de grup şi nu spuiERDDAP, setul de date va fi dureros de lent înERDDAP™și de a folosi tone de resurse Cassandra.
- De exemplu,<clusterColumnSourceNames > MyClusterColumn1, myClusterColumn2 </clusterColumnSourceNames >
- Dacă un tabel Cassandra nu are coloane cluster, nici nu specifică<clusterColumnSourceNames > sau specificați-l fără valoare.
- În mod implicit, Cassandra șiERDDAP™tratează denumirile coloanelor într-un mod insensibil. Dar dacă setațicoloanăNameQuotes"ERDDAP™va trata numele coloanei Cassandra într-un mod sensibil.
<indexColumnSourceNames >
Cassandra acceptă'='constrângeri privind coloanele de indici secundari, care sunt coloanele pentru care ați creat în mod explicit indexuri prin intermediul
CREATE INDEX *indexName* ON *keyspace.tableName* (*columnName*);
(Da, parantezele sunt necesare.)
Deci, este foarte util dacă identificați aceste coloane prin intermediul<indexColumnSourceNames >. Acest lucru permiteERDDAP™să lucreze eficient cu Cassandra. Dacă există coloane index şi nu spuiERDDAP, unele întrebări vor fi inutil, dureros lent înERDDAP™și de a folosi tone de resurse Cassandra.
- De exemplu,<indexColumnSourceNames > MyIndexColumn1, myIndexColumn2 </indexColumnSourceNames >
- Dacă un tabel Cassandra nu are coloane index, fie nu specifică<indexColumnSourceNames > sau specificați-l fără valoare.
- ATENŢIE: indexurile Cassandra nu sunt ca indexurile bazei de date. Cassandra indexes ajută doar cu'='constrângeri. Şi sunt doarrecomandatăpentru coloanele care au valori mult mai mici decât valorile totale.
- În mod implicit, Cassandra șiERDDAP™tratează denumirile coloanelor într-un mod insensibil. Dar dacă setațicoloanăNameQuotes"ERDDAP™va trata numele coloanei Cassandra într-un mod sensibil.
<maxRequestFraction>
CândERDDAP™ (au) încarcă un set de date;ERDDAP™Primește de la Cassandra lista de combinații distincte ale cheilor de partiție. Pentru un set de date imens, numărul de combinații va fi imens. Dacă doriți să împiedicați cererile utilizatorilor să solicite majoritatea sau întregul set de date (sau chiar o cerere care cereERDDAP™pentru a descărca majoritatea sau toate datele pentru a o filtra în continuare) , se poate spuneERDDAP™numai pentru a permite cererile care reduc numărul de combinații cu o anumită sumă prin intermediul<maxRequestFraction>, care este un număr de punct plutitor între 1e-10 (ceea ce înseamnă că cererea nu poate avea nevoie de mai mult de o combinație într-un miliard) și 1 (implicit, ceea ce înseamnă că cererea poate fi pentru întregul set de date) . De exemplu, dacă un set de date are 10000 de combinații distincte ale cheilor de partiție și maxRequestFraction este setat la 0.1; atunci cererile care necesită date de la 1001 sau mai multe combinații vor genera un mesaj de eroare; dar vor fi permise cereri care necesită date de la 1000 sau mai puține combinații.
În general, cu cât setul de date este mai mare, cu atât trebuie setat mai jos<maxRequestFraction>. Deci, s-ar putea seta la 1 pentru un set de date mic, 0.1 pentru un set de date de dimensiuni medii, 0,01 pentru un set de date mare, și 0,0001 pentru un set de date uriaș.
Această abordare este departe de a fi perfectă. Aceasta va duce la respingerea unor cereri rezonabile și la acceptarea unor cereri prea mari. Dar este o problemă dificilă și această soluție este mult mai bună decât nimic.
Cassandra.subsetVariables
Ca și în cazul altor seturi de date ale tabelului EDD, puteți specifica o listă separată de date referitoare la virgulă<dataVariable>destinationNames într-un atribut global numit "subsetVariables" pentru identificarea variabilelor care au un număr limitat de valori. Setul de date va avea apoi o pagină web .subset și va prezenta liste de valori distincte pentru aceste variabile în listele de drop-down pe multe pagini web.
Inclusiv doar variabile cheie de partiție și coloane statice în listă este STRONGLY ENCOUrat. Cassandra va putea genera lista combinațiilor distincte foarte rapid și ușor de fiecare dată când setul de date este reîncărcat. O excepție este tastele de partiție cu timbru temporal care sunt versiuni grosolane ale unei alte coloane de timbru temporal -- probabil că cel mai bine este să le lăsăm în afara listei desubsetVariablesdeoarece există un număr mare de valori și acestea nu sunt foarte utile pentru utilizatori.
Dacă includeți cheia non-partiție, variabile non-statice în listă, acesta va fi, probabil, foarte Calculabil scump pentru Cassandra de fiecare dată când setul de date este reîncărcat, deoareceERDDAP™trebuie să se uite prin fiecare rând al setului de date pentru a genera informațiile. De fapt, interogarea este probabil să eşueze. Deci, cu excepția unor seturi de date foarte mici, acest lucru este puternic distorsionate.
Tipuri de date Cassandra
Pentru că există o ambiguitate despre careTipuri de date Cassandraharta către careERDDAP™tipuri de date, aveți nevoie pentru a specifica un [<DataType >] (#Tipul de date) etichetă pentru fiecare [<dataVariable>] (#date variabile) pentru a spuneERDDAP™ce tip de date să utilizeze. StandardulERDDAP™date Tipuri (și cele mai frecvente tipuri de date corespunzătoare Cassandra) sunt:
- boolean (boolean) , careERDDAP™apoi depozitează ca octeți
- octet (int, dacă intervalul este -128 până la 127)
- scurt (int, dacă intervalul este -32768 -32767)
- int (Int, contor, varint?, în cazul în care intervalul este -2147483648 la 2147483647)
- lung (bigint, contra?, varint?, în cazul în care gama este -9223372036854775808 la 9223372036854775807)
- float (float)
- dublu (dublă, zecimală (cu posibila pierdere a preciziei) , timbru temporal)
- char (Ascii sau text, în cazul în care nu au mai mult de 1 caracter)
- String (Ascii, text, varchar, inet, uuid, timeuid, blob, map, set, lista?)
Cassandra'smarca temporalăeste un caz special: utilizareERDDAPDatele duble Tip.
Dacă specificați un tip de date String înERDDAP™pentru o hartă Cassandra, set sau listă, harta, set sau lista de pe fiecare rând Cassandra va fi convertită într-un singur șir pe un singur rând înERDDAP™Masa.ERDDAP™are un sistem alternativ pentru liste; a se vedea mai jos.
tip Liste...ERDDAP's [<DataType >] (#Tipul de date) etichetă pentru CassandradataVariables poate include regulatERDDAP™date Tipuri (vezi mai sus) plus mai multe tipuri de date speciale care pot fi folosite pentru coloanele de listă Cassandra: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, floatList, doubleList, charList, StringList. Când una dintre aceste coloane listă este în rezultatele fiind transmise laERDDAP™, fiecare rând de date sursă va fi extins la listă. dimensiune () rânduri de date înERDDAP; date simple Tipuri (de exemplu, int) în acel rând de date sursă va fi dublată lista. dimensiune () ori. În cazul în care rezultatele conțin mai multe variabile ale listei, toate listele de date de pe un anumit rând trebuie să aibă aceeași dimensiune și trebuie să fie liste "paralel," sauERDDAP™va genera un mesaj de eroare. De exemplu, pentru măsurarea curenților dintr-un ADCP, adâncime\[0\], uCurrent\[0\], vCurrent\[0\], și zCurrent\[0\]sunt legate și adâncime\[1\], uCurrent\[1\], vCurrent\[1\], și zCurrent\[1\]sunt toate legate, ... Alternativ, dacă nu vreiERDDAP™să extindă o listă în mai multe rânduri înERDDAP™tabel, specificați String cadataVariabledatele Tip astfel încât întreaga listă va fi reprezentată ca un șir pe un rând înERDDAP.
Cassandra TimeStamp Data
Datele de pe ora Cassandrei sunt întotdeauna conştiente de fusurile temporale. Dacă introduceți date cu timbru de timp fără a specifica un fus orar, Cassandra presupune că timbrul de timp utilizează fusul orar local.
ERDDAP™acceptă date privind marca temporală și prezintă întotdeauna datele înZulu/GMT fus orar. Deci, dacă introduceți date de timbru în Cassandra folosind un alt fus orar decâtZulu/GMT, amintiți-vă că aveți nevoie pentru a face toate întrebările pentru datele marca de timp înERDDAP™utilizândZulu/GMT fus orar. Deci, nu fi surprins când valorile timbru care ies dinERDDAPsunt deplasate cu câteva ore din cauza trecerii fusului orar de la local laZulu/GMT timp.
- ÎnERDDAP'sdatasets.xml, în<dataVariable> tag-ul pentru o variabilă timbru, set
<dataType>double</dataType>
și în<addAttributes> set
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Sugestie: Dacă datele sunt un interval de timp, este util să se facă referire la centrul intervalului temporal implicit (De exemplu, la prânz.) . De exemplu, dacă un utilizator are date pentru 2010-03-26T13:00Z dintr-un alt set de date și doresc cele mai apropiate date din acest set de date Cassandra care are date pentru fiecare zi, atunci datele pentru 2010-03-26T12:00Z (reprezentând datele Cassandra pentru acea dată) Este evident cel mai bun (spre deosebire de miezul nopții înainte sau după, în cazul în care este mai puțin evident care este cel mai bun) .
- ERDDAP™are o utilitateSchimbă un numeric Timpul până la/de la un timp de coardă.
- Vezi?CumERDDAP™Se ocupă de timp.
Integer nuls
Cassandra suportă nuls în Cassandra int (ERDDAP™int) şi bigint (ERDDAP™lung) coloane, darERDDAP™nu suportă nuluri reale pentru orice tip de date întregi. În mod implicit, nuluri întregi Cassandra vor fi convertite înERDDAP™până la 2147483647 pentru coloanele int sau 9223372036854775807 pentru coloanele lungi. Acestea vor apărea ca "NaN" în unele tipuri de fișiere de ieșire text (de exemplu, .csv) , "" în alte tipuri de fișiere de ieșire text (de exemplu,.htmlTable) , și numărul specific (2147483647 pentru valorile int lipsă) în alte tipuri de fișiere (de exemplu, fișiere binare ca.ncși mat) . Un utilizator poate căuta rânduri de date cu acest tip de valoare lipsă referindu-se la "NaN," de exemplu "&windSpeed=NaNaN."
Dacă utilizaţi alte valori întregi pentru a indica valorile lipsă în tabelul Cassandra, vă rugăm să identificaţi această valoare îndatasets.xml:
<att name="missing\_value" type="int"\>-999</att>
Pentru coloanele de puncte plutitoare Cassandra, nulii se convertesc la NaNs înERDDAP. Pentru tipurile de date Cassandra care sunt convertite în strings inERDDAP™Nulurile se convertesc în corzi goale. Asta n-ar trebui să fie o problemă.
"WARNING: Re-pregătirea deja pregătit interogare"
- "WARNING: Re-pregătirea deja pregătit interogare" în Tomcat /loguri/catalina.out (sau un alt fișier jurnal Tomcat)
Documentaţia Cassandra spune că există probleme dacă aceeaşi întrebare este făcută într-o stare de pregătire de două ori (sau mai mult) . (Vezi asta?Raport de eroare.) Pentru a evita a face Cassandra nebun,ERDDAP™Cache toate stările Pregătite astfel încât să le poată refolosi. Cache-ul e pierdut dacă Tomcat...ERDDAP™este repornit, dar cred că este în regulă deoarece Statele Pregătite sunt asociate cu o sesiune dată (întreJavaşi Cassandra.) , care este, de asemenea, pierdut. Deci, puteți vedea aceste mesaje. Nu cunosc altă soluţie. Din fericire, este un avertisment, nu o eroare. (deşi Cassandra ameninţă că poate duce la probleme de performanţă) .
Cassandra susţine că Statiunile Pregătite sunt bune pentru totdeauna.ERDDAPStatele Pregătite nu ar trebui să devină niciodată expirate/invalide. Dacă acest lucru nu este adevărat, și veți obține erori cu privire la anumite State Pregătite fiind out-of-data/invalid, atunci aveți nevoie pentru a reporniERDDAP™pentru a ștergeERDDAPCache-ul Statelor Pregătite.
Securitatea Cassandra
Atunci când lucrați cu Cassandra, trebuie să faceți lucruri cât mai sigure și mai sigure pentru a evita să permiteți unui utilizator rău intenționat să vă afecteze Cassandra sau să obțineți acces la date la care nu ar trebui să aibă acces.ERDDAP™încearcă să facă lucrurile într-un mod sigur, de asemenea.
- Vă încurajăm să configurațiERDDAP™pentru a se conecta la Cassandra ca utilizator Cassandra, care are doar acces la relevante tabel (s) şi are doar privilegii de citire.
- Vă încurajăm să configurați conexiunea de laERDDAP™pentru Cassandra astfel încât aceasta
- Întotdeauna foloseşte SSL,
- permite doar conexiuni de la o adresă IP (sau un bloc de adrese) şi de la unulERDDAP™utilizator și
- Numai transferuri de parole în formularul lor hashed MD5.
- \[PROBLEME CUNOSCUTE\]ConexiuneaProperties (Inclusiv parola!) sunt stocate ca text simplu îndatasets.xml. Nu am găsit o cale de a permite administratorului să introducă parola Cassandra în timpulERDDAPA început în Tomcat (care are loc fără intrarea utilizatorului) , astfel încât parola trebuie să fie accesibil într-un fișier. Pentru a face acest lucru mai sigur:
- Tu (nuERDDAP™administrator) ar trebui să fie proprietaruldatasets.xmlci citeşte şi scrie.
- Faceți un grup care include doar utilizator=tomcat. Utilizați chgrp pentru a face ca grupul pentrudatasets.xml, cu doar privilegii de citit.
- Utilizați chmod pentru a atribui privilegii o-rwx (fără acces READ sau SCRIS pentru "alți" utilizatori) pentrudatasets.xml.
- Când înERDDAP™, parola și alte proprietăți de conectare sunt stocate în "privat"Javavariabile.
- Solicitările clienților sunt parsed și verificate pentru valabilitate înainte de a genera cererile CQL pentru Cassandra.
- Solicitările adresate Cassandrei sunt făcute cu CQL Legat/PreparedStates, pentru a preveni injectarea CQL. În orice caz, Cassandra este mai puțin sensibilă la injectarea CQL decât bazele de date tradiționale laInjecţie cu SQL.
Viteza Cassandra
Cassandra poate fi rapidă sau lentă. Există unele lucruri pe care le puteți face pentru a face rapid:
- În general - Natura CQL este că întrebările suntdeclarativ. Ei specifică doar ce vrea utilizatorul. Ele nu includ o specificație sau indicii pentru modul în care interogarea trebuie manipulată sau optimizată. Deci nu există nici o cale pentruERDDAP™să genereze interogarea astfel încât să o ajute pe Cassandra să optimizeze interogarea (sau în orice mod specifică modul în care interogarea trebuie tratată) . În general, este de până la administratorul Cassandra pentru a configura lucrurile (de exemplu, indici) să optimizeze anumite tipuri de întrebări.
- Specificarea coloanelor de timbru temporal care sunt legate de tastele de partiție cu timbru temporal mai gros prin intermediul [<partiție KeySourceNames>] (#partitionkeysource names) este cel mai important mod de a ajutaERDDAP™să lucreze eficient cu Cassandra. Dacă această relaţie există într-o masă Cassandra şi nu spuiERDDAP™, setul de date va fi dureros de lent înERDDAP™și de a folosi tone de resurse Cassandra.
- Specificarea coloanelor de grup prin [<clusterColumnSourceNames>] (#clustercoloanăsource names) este al doilea cel mai important mod de a ajutaERDDAP™să lucreze eficient cu Cassandra. Dacă există coloane de grup şi nu spuiERDDAP, un subset mare de posibile întrebări pentru date va fi inutil, dureros lent înERDDAP™și de a folosi tone de resurse Cassandra.
- MarcaIndicepentru variabilele obişnuite - Puteți accelera câteva întrebări prin crearea de indici pentru coloanele Cassandra care sunt adesea constrânse cu "constrângeri=".
Cassandra nu poate face indexuri pentru listă, set, sau coloane de hartă.
- Specificarea coloanelor index prin [<indexColumnSourceNames>] (#Indicesourcenames) este o modalitate importantă de a ajutaERDDAP™să lucreze eficient cu Cassandra. Dacă există coloane index şi nu spuiERDDAP, unele întrebări pentru date va fi inutil, dureros lent înERDDAP™și de a folosi tone de resurse Cassandra.
Cassandra Stats
- Mesaje de diagnostic "Cassandra stats"-- Pentru fiecareERDDAP™interogarea utilizatorului către un set de date Cassandra;ERDDAP™va imprima o linie în fișierul jurnal, Big ParentDirectory /logs/log.txt, cu unele statistici legate de interogare, de exemplu,
\\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405
Folosind numerele din exemplul de mai sus, aceasta înseamnă:
- CândERDDAP™ultima (au) a încărcat acest set de date, a declarat CassandraERDDAP™că au existat 10000 de combinații distincte ale cheilor de partiție.ERDDAP™a cached toate combinațiile distincte într-un fișier.
- Din cauza constrângerilor utilizatorului,ERDDAP™a identificat 2 combinații din 10000 care ar putea avea datele dorite. Deci,ERDDAP™va efectua 2 apeluri către Cassandra, câte unul pentru fiecare combinație a cheilor de partiție. (Asta cere Cassandra.) În mod evident, este problematic dacă un set de date mare are un număr mare de combinații ale cheilor de partiție și o cerere dată nu reduce drastic acest lucru. Puteți solicita ca fiecare cerere să reducă spațiul-cheie prin setarea [<maxRequestFraction>] (Numărul maxim de cereri) . Aici, 2/10000=2e-4, care este mai mică decât maxRequestFraction (0, 1) , astfel încât cererea a fost permisă.
- După aplicarea constrângerilor asupra cheilor de partiție,coloane grupate, șicoloane indexcare au fost trimise deERDDAP™, Cassandra returnat 1200 de rânduri de date laERDDAP™în ResultSet.
- Rezultatul Set trebuie să fi avutdate Tip = un anumit tip ListăColoane (cu o medie de 10 articole pe listă) , pentru căERDDAP™a extins cele 1200 de rânduri din Cassandra în 12000 de rânduri înERDDAP.
- ERDDAP™aplică întotdeauna toate constrângerile utilizatorului la datele de la Cassandra. În acest caz, constrângerile pe care Cassandra nu le-a manipulat au redus numărul de rânduri la 7405. Acesta este numărul de rânduri trimise utilizatorului.
Cea mai importantă utilizare a acestor mesaje de diagnosticare este de a vă asigura căERDDAP™face ceea ce crezi că face. Dacă nu este (De exemplu, nu reduce numărul de combinații distincte, după cum se aștepta?) Atunci poţi folosi informaţiile ca să-ţi dai seama ce se întâmplă.
- Cercetare și experiment pentru a găsi și stabili mai bine [<conexiuneProperty>] (#casilonia-connectionproperty) A lui.
- Verificați viteza conexiunii de rețea dintre Cassandra șiERDDAP. Dacă conexiunea este lentă, vezi dacă o poți îmbunătăți. Cea mai bună situaţie este cândERDDAP™rulează pe un server atașat la același (Rapid) comutați ca serverul care rulează nodul Cassandra la care vă conectați.
- Te rog să ai răbdare. Citiți cu atenție informațiile aici și în documentația Cassandra. Experiment. Verifică-ţi munca. Dacă Cassandra...ERDDAP™conexiunea este încă mai lent decât vă așteptați, vă rugăm să includeți schema masa Cassandra și schema taERDDAP™bucată dedatasets.xmlşi să ne vedemsecțiunea privind obținerea de sprijin suplimentar.
- Dacă toate celelalte nu reușesc, ia în considerare stocarea datelor într-o colecție deNetCDFv3.ncfișiere (Mai ales.ncfișiere care utilizeazăCF Geometrii de eșantionare discrete (DSG) Structuri de date Contiguous Ragged Array și astfel pot fi manipulate cuERDDAP'sTabel EDD din NCFFile) . Dacă sunt organizate logic (fiecare cu date pentru o bucată de spațiu și timp) ,ERDDAP™poate extrage date de la ei foarte repede.
Tabel EDDDe la scheletul Cassandra 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>
Tabel EDD din DapSequence
Tabel EDD din DapSequence se ocupă de variabile în cadrul secvențelor 1 și 2 nivele de laDAPservere cum ar fiDAPPER (a fost la https://www.pmel.noaa.gov/epic/software/dapper/ , acum se întrerupe) .
-
Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin. Puteți aduna informațiile de care aveți nevoie uitându-vă la fișierele DDS și DAS ale setului sursă din browser (prin adăugarea de .das și .dds lasourceUrl(un exemplu a fost la https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds ).
-
O variabilă este într- oDAPSecvența în cazul în care răspunsul .dds indică faptul că structura de date care deține variabila este o "secvență" (insensibil la caz) .
-
În unele cazuri, veţi vedea o secvenţă într-o secvenţă, o secvenţă de 2 nivele -- EDDtableFromDapSequence se ocupă şi de acestea.
Tabel EDD De la scheletul de precizie Dap 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>
Tabel EDD din baza de date
Tabel EDD din baza de date se ocupă de datele dintr-un tabel de baze de date relaționale sauvedere.
O masă sau vizualizare
Dacă datele pe care doriți să le utilizați sunt în două sau mai multe tabele (şi, astfel, are nevoie de o asociaţie pentru a extrage date din ambele tabele simultan) Trebuie să faci una.denormalizat (deja alăturat) tabel sauvedere cu toate datele pe care doriți să le puneți la dispoziție ca un set de date înERDDAP.
Pentru baze de date mari, complexe, poate fi logic să separe mai multe bucăți ca tabele denormalizate, fiecare cu un tip diferit de date, care vor deveni seturi de date separate înERDDAP.
Efectuarea unei mese denormalizate pentru utilizare înERDDAP™Poate ţi se pare o idee nebună. Ai încredere în noi. Există mai multe motive pentru careERDDAP™funcționează cu tabele denormalizate:
- E mult mai uşor pentru utilizatori. CândERDDAP™prezintă setul de date ca unul, simplu, denormalizat, un singur tabel, este foarte ușor pentru oricine să înțeleagă datele. Cei mai mulți utilizatori nu au auzit niciodată de tabele normalizate, și foarte puțini înțeleg cheile, cheile străine, sau se alătură mesei, și aproape sigur nu știu detaliile diferitelor tipuri de uniri, sau cum să specifice SQL pentru a face o alăturare (sau mai multe îmbinări) Corect. Folosirea unei mese denormalizate evită toate aceste probleme. Numai acest motiv justifică utilizarea unui singur tabel denormalizat pentru prezentarea unui set de dateERDDAP™utilizatori.
- Tabele normalizate (tabele multiple legate de coloane cheie) sunt mari pentru stocarea datelor într-o bază de date. Dar chiar și în SQL, rezultatul care este returnat utilizatorului este un denormalizat (unite) O singură masă. Deci, pare rezonabil să prezinte setul de date utilizatorilor ca un imens, denormalizat, singur tabel din care pot solicita apoi subseturi (De exemplu, arată-mi rândurile din tabel unde temperatura > 30) .
- Puteți face schimbări pentruERDDAP™fără să vă schimbaţi mesele. ERDDAP™are câteva cerințe care pot fi diferite de modul în care ați înființat baza de date. De exemplu,ERDDAP™solicită ca datele de timp să fie stocate în câmpurile "timbru temporal cu fus orar." Prin realizarea unui tabel/vizual separat pentruERDDAP™, puteți face aceste modificări atunci când face tabelul denormalizat pentruERDDAP. Astfel, nu trebuie să faci schimbări la mesele tale.
- ERDDAP™va recrea unele dintre structura tabelelor normalizate. Puteți specifica coloanele de date care provin din tabelele "exterior" și, prin urmare, au un număr limitat de valori distincte.ERDDAP™va colecta toate combinațiile diferite de valori în aceste coloane și le prezintă utilizatorilor pe un special . pagina web subset care ajută utilizatorii să aleagă rapid subseturile setului de date. Valorile distincte pentru fiecare coloană sunt prezentate, de asemenea, în listele de scădere pe celelalte pagini web ale setului de date.
- Un tabel denormalizat face ca datele să fie transmise de la tine laERDDAPAdministrator uşor. Tu eşti expertul pentru acest set de date, deci are sens să iei deciziile despre care tabele şi ce coloane să te alături şi cum să te alături lor. Deci, nu trebuie să ne predea (sau mai rău, utilizatorii finali) mai multe tabele şi instrucţiuni detaliate pentru cum să li se alăture, trebuie doar să ne dea acces la masa denormalizat.
- Un tabel denormalizat permite accesul eficient la date. Forma denormalizată este de obicei mai rapid de acces decât forma normalizată. Alăturările pot fi lente. Multiple îmbinări pot fi foarte lente.
Pentru a obține datele din două sau mai multe tabele din baza de dateERDDAP™, există trei opțiuni:
- Opțiunea recomandată: Puteţi crea un fişier cu valoare separată de virgulă sau filă cu date din tabelul denormalizat. Dacă setul de date este imens, atunci este logic să se creeze mai multe fișiere, fiecare cu un subset coeziv al tabelului denormalizat (de exemplu, date dintr-un interval de timp mai mic) .
Marele avantaj aici este căERDDAP™va fi capabil să se ocupe de cererile utilizatorilor pentru date fără nici un efort suplimentar din baza de date. Deci...ERDDAP™Nu va fi o povară în baza ta de date sau un risc de securitate. Aceasta este cea mai bună opțiune în aproape toate circumstanțele, deoareceERDDAP™poate obține de obicei date din fișiere mai repede decât dintr-o bază de date (dacă vom converti fișierele .csv la.ncFișiere CF) . (O parte din motiv este căERDDAP+files este un sistem numai pentru citire și nu trebuie să se ocupe cu efectuarea de modificări în timp ce furnizareaACID (Atomicitate, coerență, izolare, durabilitate) .) De asemenea, probabil nu veți avea nevoie de un server separat deoarece putem stoca datele pe una dintre RAID-urile noastre și să-l acceseze cu un existentERDDAP™pe un server existent.
- Bine, opţiune: Ai creat o nouă bază de date pe un calculator diferit cu doar masa denormalizată. Deoarece această bază de date poate fi o bază de date gratuită și open source cum ar fi MariaDB, MySQL, și PostgreSQL, această opțiune nu trebuie să coste mult.
Marele avantaj aici este căERDDAP™va fi capabil să se ocupe de cererile utilizatorilor pentru date fără nici un efort suplimentar de baza de date curentă. Deci...ERDDAP™Nu va fi o povară pentru baza ta de date. Acest lucru elimină, de asemenea, o mulțime de probleme de securitate deoareceERDDAP™nu va avea acces la baza de date curentă.
-
Opțiunea descurajată: Ne putem conecta.ERDDAP™la baza de date curentă. Pentru a face acest lucru, trebuie să:
- Creați o masă separată sau o vizualizare cu tabelul de date denormalizate.
- Creați un utilizator "erddap" care are acces numai la citire la numai tabelul denormalizat (s) .
Aceasta este o opțiune în cazul în care datele se schimbă foarte frecvent și doriți să oferițiERDDAP™utilizatorii acces instant la aceste modificări; totuși, chiar și așa, poate avea sens să utilizați opțiunea de fișier de mai sus și periodic (La fiecare 30 de minute?) înlocuiți fișierul care are datele de astăzi. Dezavantajele enorme ale acestei abordări sunt:ERDDAP™cererile utilizatorilor vor plasa probabil o povară insuportabil de mare în baza de date și căERDDAP™conexiunea este un risc de securitate (Deși putem minimiza / gestiona riscul) .
Realizarea mesei denormalizate sau vedere pentruERDDAP™este o bună oportunitate de a face câteva schimbări careERDDAP™Nevoile, într-un mod care nu afectează mesele originale:
- Modificarea câmpurilor/coloanelor de dată și oră pentru a utiliza tipul de date pe care îl cheamă Postgrestimbru temporal cu fus orar (sau echivalentul din baza de date) . Ștampile temporale fără informații despre fusul orar nu funcționează corect înERDDAP.
- Asigurați indexuri pentru coloanele pe care utilizatorii caută adesea.
- Fiți foarte conștienți decazul denumirilor de câmp/coloană (de exemplu, utilizați toate cazurile mici) când le scrii.
- Nu folosi cuvinte rezervate pentru tabel și pentru numele de câmp/coloană.
Dacă aveți nevoie de ajutor pentru a face masa sau vizualizarea denormalizată, vă rugăm să contactați administratorul bazei de date. Dacă doriți să vorbiți despre această abordare sau să strategize cum cel mai bine pentru a face acest lucru, vă rugăm să trimiteți un e-mail Chris. John la Noaa.gov.
bază de date îndatasets.xml
Este dificil de a crea corectdatasets.xmlinformații necesare pentruERDDAP™să stabilească o conexiune la baza de date. Ai răbdare. Fii metodic.
- Vă recomandăm cu tărie utilizareaGenerează dateName Programul Xmlsă facă un proiect dur aldatasets.xmlbucată pentru acest set de date. Puteți apoi edita asta pentru a-l acorda fin.
Generează dateName Xml are trei opțiuni speciale pentru tabelul EDDFromDatabase:
- Dacă introduceți "!!LIST!!" (fără citate) pentru numele catalogului, programul va afișa o listă cu numele catalogului.
- Dacă introduceți "!!LIST!!" (fără citate) pentru numele schema, programul va afișa o listă a numelor schema.
- Dacă introduceți "!!LIST!!" (fără citate) pentru numele de tabel, programul va afișa o listă de tabele și coloanele lor. Prima intrare "!!LIST!!" pe care o faci este cea care va fi folosită.
- Citiţi cu atenţie toate informaţiile acestui document despre tabelul EDDFromDatabase.
- Puteți colecta majoritatea informațiilor de care aveți nevoie pentru a crea XML-ul pentru un set de date EDDDe la baza de date prin contactarea administratorului bazei de date și prin căutarea web-ului.
- Deși bazele de date tratează adesea numele și denumirile coloanelor într-un mod insensibil, acestea sunt sensibile la caz înERDDAP. Deci, dacă un mesaj de eroare din baza de date spune că un nume de coloană este necunoscut (de exemplu, "Identificator necunoscut= ' coloană\_nume '") chiar dacă știi că există, încercați să utilizați toate capitalele, de exemplu, COLUMN\_NAME , care este de multe ori versiunea adevărată, caz-sensibilă a numelui coloanei.
- Lucrează îndeaproape cu administratorul bazei de date, care poate avea experiență relevantă. Dacă setul de date nu se încarcă, citițimesaj de eroareCu grijă pentru a afla de ce.
Driver JDBC
-
[JDBC Driver și<driverName>] (#jdbc-driver) -- Trebuie să obțineți JDBC 3 corespunzătoare sau JDBC 4 driver .jar fișier pentru baza de date și Pune-l în Tomcat /webapps/erddap/WEB-INF/lib după ce instalațiERDDAP. Apoi, îndatasets.xmlpentru acest set de date, trebuie să specificați<driverName> pentru acest conducător auto, care este (Din păcate) diferit de numele fișierului. Căutați pe web pentru driver-ul JDBC pentru baza de date și driverName careJavatrebuie să-l folosească.
- Pentru MariaDB, încearcă https://mariadb.com/kb/en/about-the-mariadb-java-client/
ă<Numele conducătorului auto > utilizat îndatasets.xml (vezi mai jos) este probabil org.mariadb.jdbc. Şofer. - Pentru MySQL și Amazon RDS, încercați https://dev.mysql.com/downloads/connector/j/
ă<Numele conducătorului auto > utilizat îndatasets.xml (vezi mai jos) este probabil com.mysql.jdbc. Şofer. - PentruOracle, incearca https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html . ă<Numele conducătorului auto > utilizat îndatasets.xml (vezi mai jos) este probabil Oracle.jdbc.driver.OracleŞofer.
- Pentru Postgresql, avem şoferul JDBC 4 de la https://mvnrepository.com/artifact/org.postgresql/postgresql
ă<Numele conducătorului auto > utilizat îndatasets.xml (vezi mai jos) este probabil org.postgresql. Şofer. - Pentru SQL Server, puteți obține driver-ul JTDS JDBC de la https://jtds.sourceforge.net . ă<Numele conducătorului auto > utilizat îndatasets.xml (vezi mai jos) este probabil net.sourceforge.jtds.jdbc. Şofer.
- Pentru MariaDB, încearcă https://mariadb.com/kb/en/about-the-mariadb-java-client/
După ce l-ai pus pe şoferul JDBC.ERDDAP™directorul lib, aveți nevoie pentru a adăuga o referință la acel fișier .jar în .bat și/sau .sh script fișiere pentru GenerateDatasets Xml, DasDds, și ArchiveADataset care sunt în Tomcat /webapps/erddap/WEB-INF/ director; în caz contrar, veți obține o ClassNotFoundException atunci când executați aceste scripturi.
Din păcate, JDBC este uneori sursa problemelor. În rolul său de intermediar întreERDDAP™si baza de date, uneori face modificari subtile la baza de date standard/generica SQL solicita caERDDAP™creează, provocând astfel probleme (de exemplu, legate deidentificatori superiori/subclaseși legate defus orar/date) . Vă rugăm să aveţi răbdare, citiţi cu atenţie informaţiile de aici, verificaţi-vă munca, şi a vedea noastresecțiunea privind obținerea de sprijin suplimentar.
Baza de date<conexiune Proprietate >
- [<conexiuneProperty>] (#database-connectionproperty) -- Îndatasets.xmlpentru setul de date, trebuie să definiţi mai multe conexiuni Etichete de proprietate de spusERDDAP™cum să vă conectaţi la baza de date (de exemplu, pentru a specifica numele de utilizator, parola, conexiunea SSL șimarime) . Acestea sunt diferite pentru fiecare situație și sunt un pic cam greu de dat seama. Căutați pe web exemple de utilizare a unui driver JDBC pentru a vă conecta la baza de date. ă<ConexiuneNumeleProperty> (de exemplu, "user," "parola" și "ssl") , și unele dintre valorile de conexiuneProperty pot fi găsite prin căutarea web pentru "JDBC proprietăți de conexiune baza de date Tip " (de exemplu,Oracle, MySQL, Amazon RDS, MariaDB, PostgreSQL) .
Citări pentru nume și sensibilitate caz
- Citate pentru nume de câmp/Culoare; Sensibilitate de caz- In mod implicit, EDDtableFromDatabase pune ansi-SQL-standard de ghilimele duble in jurul numelor de camp/coloane in declaratiile SELECT in cazul in care ati folosit un cuvant rezervat ca nume de camp/coloană, sau un caracter special intr-un nume de camp/coloană. De asemenea, citatele duble împiedică anumite tipuri de atacuri de injectare SQL. Se vede.ERDDAP™să folosească " sau nici un citat prin intermediul<coloanaNameQuotes> îndatasets.xmlpentru acest set de date.
Pentru mai multe baze de date, utilizarea oricărui tip de cotații determină baza de date să lucreze cu nume de câmp/coloană într-un mod sensibil (în loc de cazul de bază de date implicit insensibil) . Bazele de date afişează adesea numele fişierelor/coloanelor ca toate cazurile superioare, când, în realitate, forma sensibilă a cazului este diferită. ÎnERDDAP™, vă rugăm să tratați întotdeauna numele coloanei de bază ca fiind sensibile caz.
- Pentru Maria DB, trebuie să rulați baza de date cu\--sql-mode=ANSI\_quotes.
- Pentru MySQL și Amazon RDS, trebuie să rulați baza de date cu\--sql-mode=ANSI\_quotes.
- Oraclesuportă cotații duble standard ANSI-SQLîn mod implicit.
- PostgreSQL suportă cotații duble standard ANSI-SQL în mod implicit.
Nu folosi un cuvânt rezervat pentru o bază de date, catalog, schema sau numele mesei.ERDDAP™nu pune citate în jurul lor.
Dacă este posibil, utilizaţi toate cazurile mai mici pentru baza de date, catalog, schema, numele de masă şi numele de teren atunci când se creează tabelul de baze de date (sau vedere) și atunci când se face trimitere la denumirile de câmp/coloană dindatasets.xmlînERDDAP. În caz contrar, puteți obține un mesaj de eroare spunând baza de date, catalog, schema, masă, și / sau câmp nu a fost găsit. Dacă obțineți acest mesaj de eroare, încercați să utilizați versiunea caz-sensibil, toate versiunea de sus-case, și toate versiunea de jos a numelui înERDDAP. Unul dintre ei poate funcţiona. Dacă nu, aveți nevoie pentru a schimba numele de bază de date, catalog, schema, și / sau masa la toate cele mai mici-caz.
Baza de date<date Tip>
- Baza de date[<DataType >] (#Tipul de date) Etichete... Pentru că există o ambiguitate despre caretipuri de date din baza de dateharta către careERDDAP™tipuri de date, aveți nevoie pentru a specifica un [<DataType >] (#Tipul de date) etichetă pentru fiecare [<dataVariable>] (#date variabile) pentru a spuneERDDAP™ce tip de date să utilizeze. O parte a problemei este că diferite seturi de date folosesc termeni diferiţi pentru diferite tipuri de date -- aşa că întotdeauna încercaţi să potriviţi definiţiile, nu doar numele. A se vedea descriereastandardERDDAP™date Tipuri, care include trimiteri la tipurile de date SQL corespunzătoare.Data și orasunt cazuri speciale: utilizareERDDAPDatele duble Tip.
Date de dată a bazei de date
Unele coloane de date nu au fus orar explicit. Astfel de coloane sunt probleme pentruERDDAP. Bazele de date sprijină conceptul de dată (cu sau fără timp) fără fus orar, ca o gamă aproximativă de timp. Dar...Java (şi astfelERDDAP) se ocupă doar cu date instantanee + ori cu un fus orar. Deci s-ar putea să ştiţi că data datelor se bazează pe un fus orar local (cu sau fără timp de economisire în timpul zilei) sau GMT/Zulufus orar, darJava (şiERDDAP) Nu. Iniţial am crezut că putem rezolva această problemă. (De exemplu, prin specificarea unui fus orar pentru coloană) , dar baza de date + JDBC +Javainteracţiunile au făcut din aceasta o soluţie nesigură.
- Deci,ERDDAP™cere ca tu stochezi toate datele de data si data din tabelul de baze de date cu un tip de date de baza de date care corespunde cu tipul JDBC "timpul cu fusul orar" (ideal, care utilizează GMT /Zulufusul orar) .
- ÎnERDDAP'sdatasets.xml, în<dataVariable> tag-ul pentru o variabilă timbru, set
și în<addAttributes> set
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Sugestie: Dacă datele sunt un interval de timp, este util să se facă referire la centrul intervalului temporal implicit (De exemplu, la prânz.) . De exemplu, în cazul în care un utilizator are date pentru 2010-03-26T13:00Z de la un alt set de date și doresc cele mai apropiate date dintr-un set de date care are date pentru fiecare zi, atunci datele bazei de date pentru 2010-03-26T12:00Z (reprezentând date pentru această dată) Este evident cel mai bun (spre deosebire de miezul nopții înainte sau după, în cazul în care este mai puțin evident care este cel mai bun) .
- ERDDAP™are o utilitateSchimbă un numeric Timpul până la/de la un timp de coardă.
- Vezi?CumERDDAPSe ocupă de timp.
Integer nuls
Baza de date suportă nuluri în număr întreg (int, smallint, smallint) coloane, darERDDAP™nu susţine nulii adevăraţi. Datele nule vor fi convertite înERDDAP™127 pentru coloanele de octet, 255 pentru coloanele de ubit, 32767 pentru coloanele scurte, 65535 pentru coloanele scurte, 2147483647 pentru coloanele int, 4294967295 pentru coloanele uint, 9,223,372,036,854,775,807 pentru coloanele lungi, sau 184467440737095511615 pentru coloanele lungi. Dacă utilizați aceste cazuri implicite, vă rugăm să le identificațimissing\_values pentru utilizatorii setului de date înERDDAP™cu
<att name="\_FillValue" type="int"\>2147483647</att>
sau
<att name="\_FillValue" type="short"\>32767</att>
Alternativ, puteți utiliza "missing\_value" atribut în loc de "\_FillValue." Generează dateName Xml adaugă automat aceste atribute \_FillValue atunci când generează sugestiiledatasets.xmlpentru seturile de date.
Pentru coloanele din baza de date plutitoare, nulii se convertesc la NaNs înERDDAP. Pentru tipurile de date din baza de date care sunt convertite în Strings inERDDAP™Nulurile se convertesc în corzi goale.
Securitatea bazei de date
- Atunci când lucrați cu baze de date, trebuie să faceți lucruri cât mai sigure și în cel mai sigur mod posibil pentru a evita să permiteți unui utilizator rău intenționat să vă strice baza de date sau să obțineți acces la date la care nu ar trebui să aibă acces.ERDDAP™încearcă să facă lucrurile într-un mod sigur, de asemenea.
- Luați în considerare replicarea, pe un calculator diferit, baza de date și tabelele de baze de date cu datele pe care dorițiERDDAP™pentru a servi. (Da, pentru baze de date comerciale caOracle, aceasta implică taxe de licențiere suplimentare. Dar pentru bazele de date deschise, cum ar fi PostgreSQL, MySQL, Amazon RDS, și MariaDB, acest lucru nu costă nimic.) Acest lucru vă oferă un nivel ridicat de securitate și, de asemenea, previneERDDAP™cereri de încetinire a bazei de date originale.
- Vă încurajăm să configurațiERDDAP™să se conecteze la baza de date ca utilizator al bazei de date care are acces numai la relevante baza de date (s) şi are doar privilegii de citire.
- Vă încurajăm să configurați conexiunea de laERDDAP™la baza de date astfel încât să
- Întotdeauna foloseşte SSL,
- permite doar conexiuni de la o adresă IP (sau un bloc de adrese) şi de la unulERDDAP™utilizator și
- Numai transferuri de parole în formularul lor hashed MD5.
- \[PROBLEME CUNOSCUTE\]ConexiuneaProperties (Inclusiv parola!) sunt stocate ca text simplu îndatasets.xml. Nu am găsit o cale de a permite administratorului să introducă parola bazei de date în timpulERDDAPA început în Tomcat (care are loc fără intrarea utilizatorului) , astfel încât parola trebuie să fie accesibil într-un fișier. Pentru a face acest lucru mai sigur:
- Tu (nuERDDAP™administrator) ar trebui să fie proprietaruldatasets.xmlci citeşte şi scrie.
- Faceți un grup care include doar utilizator=tomcat. Utilizați chgrp pentru a face ca grupul pentrudatasets.xml, cu doar privilegii de citit.
- Utilizați chmod pentru a atribui privilegii o-rwx (fără acces READ sau SCRIS pentru "alți" utilizatori) pentrudatasets.xml.
- Când înERDDAP™, parola și alte proprietăți de conectare sunt stocate în "privat"Javavariabile.
- Cererile clienților sunt parsed și verificate pentru valabilitate înainte de a genera cererile SQL pentru baza de date.
- Solicitările în baza de date sunt făcute cu SQL Pregătite Statements, pentru a preveniInjecţie cu SQL.
- Cererile către baza de date sunt depuse odată cu executarea Interogare (neexecutareaStatement) limitarea cererilor de citire numai (astfel încât încercarea de injectare SQL pentru a modifica baza de date va eșua din acest motiv, de asemenea,) .
SQL
- Pentru căOPeNDAPCererile de date tabulare au fost concepute pentru a imita cererile de date tabulare SQL, este ușor pentruERDDAP™pentru a converti cererile de date tabulare în state simple SQL Pregătite. De exemplu,ERDDAP™cerere
time,temperature&time>=2008-01-01T00:00:00Z&time<=2008-02-01T00:00:00Z
va fi transformat în stare de pregătire SQL
SELECT "time", "temperature" FROM *tableName*
WHERE "time" >= 2008-01-01T00:00:00Z AND "time" <= 2008-02-01T00:00:00Z
ERDDAP™cereri cu &distinct () și/sau &orderBy ( variabile ) va adăuga DISTINCT și/sau ORDIN DE variabile la declarația SQL pregătită. În general, acest lucru va încetini foarte mult răspunsul din baza de date. ERDDAP™înregistrează starea de pregătire înlog.txtcum
statement=*thePreparedStatement*
Acesta va fi un text de reprezentare a statului pregătit, care poate fi ușor diferit de statul pregătit efectiv. De exemplu, în statul pregătit, vremurile sunt codificate într-un mod special. Dar în reprezentarea textului, acestea apar ca ISO 8601 data ori.
Viteza bazei de date
- Baza de date poate fi lentă. Există unele lucruri pe care le puteți face:
- În general - Natura SQL este că întrebările suntdeclarativ. Ei specifică doar ce vrea utilizatorul. Ele nu includ o specificație sau indicii pentru modul în care interogarea trebuie manipulată sau optimizată. Deci nu există nici o cale pentruERDDAP™să genereze interogarea astfel încât să ajute baza de date să optimizeze interogarea (sau în orice mod specifică modul în care interogarea trebuie tratată) . În general, este de până la administratorul de baze de date pentru a configura lucrurile (de exemplu, indici) să optimizeze anumite tipuri de întrebări.
Stabilește dimensiunea
Bazele de date returnează dateleERDDAP™în bucăţi. În mod implicit, diferite baze de date returnează un număr diferit de rânduri în bucăți. Adesea, acest număr este foarte mic şi foarte ineficient. De exemplu, implicit pentruOracle10! Citiți documentația JDBC pentru driver-ul JDBC al bazei de date pentru a găsi proprietatea de conectare pentru a stabili pentru a crește acest lucru, și adăugați acest lucru la descrierea setului de date îndatasets.xml. De exemplu, Pentru MySQL și Amazon RDS, utilizați
<connectionProperty name="defaultFetchSize">10000</connectionProperty>
Pentru MariaDB, în prezent nu există nici o modalitate de a schimba dimensiunea de preluare. Dar este o caracteristică solicitată, așa că căutați web pentru a vedea dacă acest lucru a fost implementat. PentruOracle, utilizare
<connectionProperty name="defaultRowPrefetch">10000</connectionProperty>
Pentru PostgreSQL, utilizare
<connectionProperty name="defaultRowFetchSize">10000</connectionProperty>
dar nu ezitaţi să schimbaţi numărul. Setarea numărului prea mare va cauzaERDDAP™pentru a folosi o mulțime de memorie și să fie mai probabil să rămână fără memorie.
Properties de conexiune
Fiecare bază de date are alte proprietăți de conectare care pot fi specificate îndatasets.xml. Multe dintre acestea vor afecta performanța bazei de dateERDDAP™Conexiune. Vă rugăm să citiți documentația pentru driver-ul JDBC al bazei de date pentru a vedea opțiunile. Dacă găsiţi proprietăţi de conexiune care sunt utile, vă rugăm să trimiteţi un e-mail cu detaliileerd dot data at noaa dot gov.
- Fă o masă... Veți obține, probabil, răspunsuri mai rapide dacă periodic (În fiecare zi? ori de câte ori există date noi?) generează un tabel real (Similar cu modul în care a generat A vizualiza) şi spuneERDDAP™pentru a obține date din tabel în loc de vedere. Deoarece orice solicitare la tabel poate fi îndeplinită fără a se alătura unui alt tabel, răspunsul va fi mult mai rapid.
- Aspiraţi tabelul - MySQL și Amazon RDS va răspunde mult mai repede dacă utilizațiTABEL DE OPTIMIZĂ. Maria. DB va răspunde mult mai repede dacă utilizaţiTABEL DE OPTIMIZĂ. PostgreSQL va răspunde mult mai repede dacăVACUUMMasa. Oraclenu are sau are nevoie de o comandă similară.
- MarcaIndicepentru variabilele obişnuite - Puteți accelera mai multe/cele mai multe întrebări prin crearea de indici în baza de date pentru variabile (care baze de date numesc "coloane") care sunt adesea constrânse în interogarea utilizatorului. În general, acestea sunt aceleași variabile specificate de [<subsetVariables>] (#Subsetvariables) și/sau latitudinea, longitudinea și variabilele temporale.
Folosește gruparea conexiunii
În mod normal,ERDDAP™face o conexiune separată la baza de date pentru fiecare cerere. Aceasta este cea mai sigură abordare. Alternativa mai rapidă este utilizarea unei DataSource care sprijină punerea în comun a conexiunilor. Pentru a seta, specifica (de exemplu)
<dataSourceName>java:comp/env/jdbc/postgres/erddap</dataSourceName>
chiar lângă<sourceUrl>,<numele conducătorului auto> și<conexiune Proprietate. Şi în Tomcat /conf/context.xml, defini o resursă cu aceleași informații, de exemplu,
<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"/>
Informaţii generale despre utilizarea unei DataSource este la https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . Vezi?Informaţii despre Tomcat DataSourceşiTomcat DataSource exemplesau căutați pe web exemple de utilizare a DataSources cu alte servere de aplicații.
- Dacă toate celelalte nu reușesc, ia în considerare stocarea datelor într-o colecție deNetCDFv3.ncfișiere (Mai ales.ncfișiere care utilizeazăCF Geometrii de eșantionare discrete (DSG) Structuri de date Contiguous Ragged Array și astfel pot fi manipulate cuERDDAP'sTabel EDD din NCFFile) . Dacă sunt organizate logic (fiecare cu date pentru o bucată de spațiu și timp) ,ERDDAP™poate extrage date de la ei foarte repede.
Tabel EDD De la scheletul bazei de date 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>
Tabel EDD dinEDDGrid
Tabel EDD dinEDDGrid permite crearea unui set de date EDD Table din oriceEDDGridSet de date.
- Unele motive comune sunt:
- Acest lucru permite setului de date să fie interogat cuOPeNDAPconstrângeri de selecție, care este un tip de "query by Value" (pe care un utilizator le-ar fi putut solicita) .
- Setul de date este în mod inerent un set de date tabelar.
- Valoarea atributului global "maxAxis0" (de obicei de tip="int") , (implicit este 10) va fi utilizat pentru a limita numărul de axe\[0\] (de obicei"time"axă) valorile închiseEDDGridSet de date care pot fi accesate per cerere de date. Dacă nu doriți să existe nici o limită, specificați o valoare de 0. Această setare este importantă deoarece, în caz contrar, ar fi prea ușor pentru un utilizator să ceară tabelul EDDDe laEDDGridsă se uite prin toate datele setului de date. Asta ar dura mult timp şi aproape sigur ar eşua cu o eroare de pauză. Aceasta este setarea care face sigur pentru a avea EDDtableFromEDDGridseturile de date dinERDDAPfără teama că vor duce la o utilizare nerezonabilă a resurselor informatice.
- Dacă sunt închiseEDDGridesteEDDGridFromErddapşiERDDAP™E la fel.ERDDAP, apoi EDDtableFromEDDGridva utiliza întotdeauna versiunea disponibilă în prezent a setului de date menționat în mod direct. Acesta este un mod foarte eficient pentru tabelul EDDFromEDDGridpentru a accesa datele grupate.
- Clasa asta e...<reîncărcare Fiecare NMuta >] (#Încarcă fiecare minut) Este ceea ce contează. ÎnchisEDDGrid's<ReloadEveryNMinutes> este ignorat.
- Dacă o valoare pentru [<updateEveryNMillis>] (#Update everythingnmillis) este furnizat pentru acest set de date, este ignorat. ÎnchisEDDGrid's<updateEveryNMillis> este ceea ce contează.
- GenereazăSeturi de dateXmlare o opțiune pentru tipul de set de date=EDDtabelFromEDDGridcare cere URL- ul unuiERDDAP (De obicei la fel.ERDDAP) (se încheie cu "/erddap/") şi o expresie normală. Generează dateName Xml va genera apoi XML pentru un tabel EDDFromEDDGridSet de date pentru fiecare set de date în rețeaERDDAP™care aredatasetIDcare se potrivește expresiei regulate (Utilizați .\* pentru a potrivi toatedatasetIDs pentru seturi de date în rețea) .
Bucata de XML generată de GenerateDatasetsXml pentru fiecare set de date include:
- AdatasetIDcare esteEDDGrid'sdatasetIDplus "\_ASATable."
- Un nou atribut global rezumat care esteEDDGrid"sumarul plus un nou prim paragraf care descrie ce este acest set de date.
- Un nou titlu de atribut global, care esteEDDGridtitlul lui plus, (Tabelul A) ".
- Un nou atribut maxAxis0 global cu o valoare de 10.
Tabel EDD dinEDDGridName
<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. -->