Lavorare con ildatasets.xmlFile
\[Questa pagina web sarà solo di interesseERDDAP™amministratori.\]
Dopo aver seguito ilERDDAP™ istruzioni di installazione, è necessario modificare ildatasets.xmlfile in tomcat /content/erddap/ per descrivere i dataset che ilERDDAP™l'installazione servirà.
Si può vedere un esempiodatasets.xmlsu GitHub.
-
- No.
Introduzione
Qualche assemblaggio richiesto
Impostazione di un set di datiERDDAP™non è solo una questione di puntare alla directory o URL del dataset. Devi scrivere un pezzo di XML perdatasets.xmlche descrive il dataset.
- Per i dataset grigliati, al fine di rendere il dataset conforme aERDDAPLa struttura dei dati per i dati grigliati, è necessario identificare un sottoinsieme delle variabili del dataset che condividono le stesse dimensioni. (Perche'? Come?)
- I metadati attuali del dataset vengono importati automaticamente. Ma se si desidera modificare i metadati o aggiungere altri metadati, è necessario specificarlo indatasets.xml. EERDDAP™ha bisogno di altri metadati, compresoattributi globali (comeinfoUrl, istituzione,sourceUrl, sommario e titolo) eattributi variabili (comelong\_namee unità) . Proprio come i metadati attualmente presenti nel dataset aggiungono informazioni descrittive al dataset, i metadati richiesti daERDDAP™aggiunge informazioni descrittive al dataset. I metadati aggiuntivi sono una buona aggiunta al dataset e aiutanoERDDAP™fare un lavoro migliore di presentare i tuoi dati agli utenti che non hanno familiarità con esso.
- ERDDAP™ha bisogno di fare cose speciali conlongitudine, latitudine, altitudine (o profondità) , e variabili di tempo.
Se acquisti in queste idee ed espedi lo sforzo di creare l'XML perdatasets.xml, si ottiene tutti i vantaggi diERDDAP™, incluso:
- Ricerca completa di testo per set di dati
- Ricerca per datasets per categoria
- Moduli di accesso ai dati ( datasetID .html) in modo da poter richiedere un sottoinsieme di dati in molti formati di file diversi
- Forme per richiedere grafici e mappe ( datasetID .)
- Servizio Mappa Web (WMS) per set di dati grigliati
- RESTfulaccesso ai dati
Fare ildatasets.xmlrichiede notevoli sforzi per i primi set di dati, ma diventa più facile . Dopo il primo dataset, è spesso possibile riutilizzare un sacco di lavoro per il prossimo set di dati. Fortunatamente,ERDDAP™viene con dueStrumentiper aiutarti a creare l'XML per ogni dataset indatasets.xml. Se ti bloccano, vedi il nostrosezione per ottenere supporto aggiuntivo.
Fornitore di dati Forma
Quando un fornitore di dati viene a voi sperando di aggiungere alcuni dati al vostroERDDAP, può essere difficile e richiede tempo per raccogliere tutti i metadati (informazioni sul dataset) necessario aggiungere i dati inseritiERDDAP. Molte fonti di dati (per esempio, file .csv, File Excel, database) non hanno metadati interni, quindiERDDAP™ha un modulo Data Provider che raccoglie i metadati dal fornitore di dati e fornisce al fornitore di dati un'altra guida, tra cui una vasta guida perDati nei database. Le informazioni inviate sono convertite indatasets.xmlformato e quindi inviato alERDDAP™amministratore (Tu sei) e scritto (allegato) a BigParentDirectory /logs/dataProviderForm.log . Così, la forma semi-automatizza il processo di ottenere un set di dati inERDDAP, ma ilERDDAP™l'amministratore deve ancora completaredatasets.xmlchunk e trattare con ottenere il file di dati (#) dal fornitore o la connessione al database.
L'invio di file di dati reali da fonti esterne è un enorme rischio di sicurezza, quindiERDDAP™non si occupa di questo. Devi capire una soluzione che funziona per te e per il fornitore di dati, ad esempio, e-mail (per piccoli file) , tirare dal cloud (per esempio, DropBox o Google Drive) , un sito sftp (con password) , o sneaker Rete (una chiavetta USB o un disco rigido esterno) . Probabilmente dovresti accettare solo i file delle persone che conosci. È necessario eseguire la scansione dei file per i virus e prendere altre precauzioni di sicurezza.
Non c'è un collegamentoERDDAP™al modulo Data Provider (per esempio, sulERDDAP™home page) . Invece, quando qualcuno ti dice che vogliono avere i loro dati serviti dai tuoiERDDAP, è possibile inviare loro una e-mail dicendo qualcosa come: Sì, possiamo far entrare i tuoi datiERDDAP. Per iniziare, si prega di compilare il modulo a https://yourUrl/erddap/dataProviderForm.html (ohttp://sehttps://non è abilitato) . Dopo aver finito, ti contattero' per scoprire i dettagli finali. Se vuoi solo guardare il modulo (senza riempirlo) , potete vedere il modulo suERD'ERDDAP:Introduzione♪Parte 1♪Parte 2♪Parte 3eParte 4. Questi collegamentiERD ERDDAP™inviare informazioni a me, non a te, quindi non inviare informazioni con loro a meno che non si desidera effettivamente aggiungere i dati alERD ERDDAP.
Se si desidera rimuovere il modulo Data Provider dal proprioERDDAP™#
<dataProviderFormActive>false</dataProviderFormActive>
nel file setup.xml.
L'impeto per questo eraNOAA2014Accesso pubblico ai risultati della ricerca (PARERI) Direttiva, che richiede tuttoNOAAi dati ambientali finanziati tramite il pagamento fiscale sono messi a disposizione tramite un servizio dati (non solo file) entro 12 mesi di creazione. Quindi c'è un maggiore interesse nell'usoERDDAP™per rendere disponibili i set di dati tramite un servizio ASAP. Abbiamo bisogno di un modo più efficiente per affrontare un gran numero di fornitori di dati.
Feedback/Suggestions? Questo modulo è nuovo, quindi si prega di e-mailerd dot data at noaa dot govse avete qualche feedback o suggerimenti per migliorare questo.
Strumenti
ERDDAP™viene fornito con due programmi di riga di comando che sono strumenti per aiutarti a creare l'XML per ogni set di dati che desideriERDDAP™per servire. Una volta che hai impostatoERDDAP™e correte (almeno una volta) , è possibile trovare e utilizzare questi programmi nel tomcat /webapps/erddap/WEB-INF directory. Ci sono script di shell Linux/Unix (con l'estensione .sh) e script di Windows (con l'estensione .bat) per ogni programma.\[Su Linux, eseguire questi strumenti come lo stesso utente (Tomcat?) che gestirà Tomcat.\]Quando si esegue ogni programma, ti farà domande. Per ogni domanda, digitare una risposta, quindi premere Invio. Oppure premere ^C per uscire da un programma in qualsiasi momento.
Il programma non correrà?
- Se si ottiene un programma sconosciuto (o simili) messaggio di errore, il problema è probabilmente che il sistema operativo non ha trovatoJava. Devi capire doveJavaè sul computer, quindi modificare il riferimento java nel file .bat o .sh che si sta cercando di utilizzare.
- Se si ottiene un file jar non trovato o la classe non trovato messaggio di errore, alloraJavaNon è stato possibile trovare una delle classi elencate nel file .bat o .sh che si sta cercando di utilizzare. La soluzione è quella di capire dove si trova quel file .jar, e modificare il riferimento java ad esso nel file .bat o .sh.
- Se si utilizza una versione diJavache è troppo vecchio per un programma, il programma non verrà eseguito e vedrete un messaggio di errore come
Eccezione nel thread "main" java.lang.UnsupportedClassVersionError:
alcuni/classe/nome : Versione non supportata major.minor alcuni
La soluzione è quella di aggiornare alla versione più recente diJavae assicurarsi che il file .sh o .bat per il programma lo stia usando.
Gli strumenti stampano vari messaggi diagnostici:
- La parola "ERROR" viene usata quando qualcosa è andato così male che la procedura non è riuscita a completare. Anche se è fastidioso per ottenere un errore, l'errore ti costringe a affrontare il problema.
- La parola "WARNING" viene usata quando qualcosa è andato storto, ma la procedura è stata completata. Sono piuttosto rari.
- Qualunque altra cosa è solo un messaggio informativo. È possibile aggiungere \-verbose alGenerareDatasetsXmloDasDdsriga di comando per ottenere ulteriori messaggi informativi, che a volte aiuta a risolvere i problemi.
I due strumenti sono un grande aiuto, ma è ancora necessario leggere tutte queste istruzioni su questa pagina con attenzione e prendere decisioni importanti da soli.
GenerareDatasetsXml
- GenerareDatasetsXml è un programma di riga di comando che può generare una bozza approssimativa del dataset XML per quasi qualsiasi tipo di dataset.
Rendiamo STRONGLY che si utilizza GenerateDatasets Xml invece di creare pezzi didatasets.xmla mano perché:
- Genera i dati Xml funziona in pochi secondi. Fare questo a mano è almeno un'ora di lavoro, anche quando sai cosa stai facendo.
- Genera i dati Xml fa un lavoro migliore. Fare questo a mano richiede una vasta conoscenza di comeERDDAP™funziona. È improbabile che si farà un lavoro migliore a mano. (Bob Simons usa sempre GenerateDatasets Xml per la prima bozza, e ha scrittoERDDAP.)
- Genera i dati Xml genera sempre un pezzo valido didatasets.xml. Qualsiasi pezzo didatasets.xmlche si scrive probabilmente avrà almeno alcuni errori che impedisconoERDDAP™dal caricamento del dataset. Spesso ci vogliono ore per diagnosticare questi problemi. Non sprecare tempo. Lasciare Generare Datasets Xml fa il duro lavoro. Quindi è possibile affinare il .xml a mano se si desidera.
Quando si utilizza GenerateDatasets Programma Xml:
- Su Windows, la prima volta che si esegue GenerateDatasetsXml, è necessario modificare il file GenerateDatasetsXml.bat con un editor di testo per cambiare il percorso per la java. exe file in modo che Windows possa trovareJava.
- Genera i dati Xml ti chiede prima di specificare l'EDDType (Erd Dap Dataset Tipo) del dataset. Vedi ilElenco dei tipi di Dataset (in questo documento) per capire su quale sia il tipo appropriato per il dataset su cui stai lavorando. Oltre al regolare EDDTypes, ci sono anche alcuniTipi di Dataset speciali/Pseudo (ad esempio, uno che striscia un catalogo THREDDS per generare un pezzo didatasets.xmlper ciascuno dei set di dati del catalogo) .
- Genera i dati Xml poi ti fa una serie di domande specifiche a quella EDDType. Le domande raccolgono le informazioni necessarie perERDDAP™accedere alla sorgente del dataset. Per capire cosaERDDAP™è chiedere, vedere la documentazione per il EDDType che hai specificato facendo clic sullo stesso tipo di set di dati nelElenco dei tipi di Dataset.
Se è necessario inserire una stringa con caratteri speciali (ad esempio, caratteri whitespace all'inizio o alla fine, caratteri non-ASCII) , entrare in unstringa in stile JSON (con caratteri speciali scappati con caratteri \) . Ad esempio, per entrare solo un carattere scheda, inserire "\t" (con le citazioni doppie circostanti, che diconoERDDAP™che questa è una stringa in stile JSON.
- Spesso, una delle vostre risposte non sarà ciò di cui ha bisogno GenerateDatasetsXml. Si può poi riprovare, con risposte revisionate alle domande, fino a GenerateDatasets Xml può trovare e capire con successo i dati di origine.
- Se rispondi correttamente alle domande (o sufficientemente correttamente) , GenerateDatasets Xml si connetterà alla sorgente del dataset e raccoglierà informazioni di base (per esempio, nomi variabili e metadati) . Per i datasets che provengono da localiNetCDF .nce i file correlati, GenerateDatasets Xml spesso stampa la struttura ncdump-like del file dopo che legge prima il file. Questo può darvi informazioni per rispondere meglio alle domande su un loop successivo attraverso GenerateDatasetsXml.
- Genera i dati Xml genererà quindi una bozza approssimativa del dataset XML per quel dataset.
- Informazioni diagnostiche e la bozza approssimativa del dataset XML saranno scritte a BigParentDirectory /logs/GenerateDatasetsXml.log .
- La bozza approssimativa del dataset XML sarà scritta a BigParentDirectory /logs/GenerateDatasetsXml.out .
"0 file" Messaggio di errore
Se esegue GenerateDatasets Xml oDasDds, o se si tenta di caricare unEDDGridDa...Files o EDDTableDa... File dataset inERDDAP™, e si ottiene un messaggio di errore "0 file" che indica cheERDDAP™trovato 0 file corrispondenti nella directory (quando pensi che ci siano file corrispondenti in quella directory) :
-
Controlla che hai specificato il nome completo della directory. E se hai specificato il nome del file campione, assicurati di specificare il nome completo del file, incluso il nome della directory completa.
-
Controllare che i file sono davvero in quella directory.
-
Controlla l'ortografia del nome della directory.
-
Controlla il fileNameRegex. E 'davvero, davvero facile fare errori con regexe. Per scopi di prova, prova il regex .\* che dovrebbe corrispondere a tutti i nomi di file. (Vedi questodocumentazione regexetutorial regex.)
-
Controllare che l'utente che esegue il programma (ad esempio, user=tomcat (?) per Tomcat/ERDDAP) ha il permesso "leggere" per quei file.
-
In alcuni sistemi operativi (per esempio, SELinux) e a seconda delle impostazioni di sistema, l'utente che ha eseguito il programma deve avere 'leggi' il permesso per l'intera catena di directory che porta alla directory che ha i file.
-
Se hai problemi che non puoi risolvere,richiesta supportocon quante più informazioni possibile. Allo stesso modo, se sembra che il EDDType appropriato per un dato set di dati non funziona con quel dataset, o se non c'è un EDDType appropriato, si prega di presentare unproblema su GitHubcon i dettagli (e un file di esempio se necessario) .
È necessario modificare l'output da GenerateDatasets Xml per migliorare.
-
DISCLAIMER: IL PAESEdatasets.xmlMADE BE GenerateDataset Xml non e' perfetto. Devi solo recuperare e cancellare l'XML prima di usarlo in una PUBBLICAERDDAP. Genera i dati Xml si ricollega ad un sacco di regole-OF-THUMB che non è sempre stato aggiornato. Lei è responsabile per l'adempimento della competenza dell'XML che lei haERDDAP#datasets.xmlFILE.
(- Non sto urlando. Per motivi legali storici, i disclaimer devono essere scritti in tutti i caps.)
L'output di GenerateDatasetsXml è una bozza grezza. Dovrai quasi sempre modificarlo. Abbiamo fatto e continuiamo a fare un enorme sforzo per rendere l'output il più possibile pronto per andare, ma ci sono limiti. Spesso, le informazioni necessarie non sono semplicemente disponibili dai metadati di origine.
Un problema fondamentale è che stiamo chiedendo un programma per computer (GenerareDatasetsXml) per fare un compito dove, se avete dato lo stesso compito a 100 persone, si otterrebbe 100 risultati diversi. Non c'è una sola risposta "destra". Ovviamente, il programma si avvicina alla lettura della mente di Bob (non tuo) , ma anche così, non è un programma AI tutto compreso, solo un gruppo di euristica acciottolato insieme per fare un compito simile a AI. (Quel giorno di un programma AI tutto compreso può venire, ma non è ancora. Se / quando lo fa, noi umani possono avere problemi più grandi. Fai attenzione a quello che desideri.)
-
Per scopi informativi, l'output mostra la fonte globaleAttributi e sorgenti variabiliAttributi come commenti.ERDDAP™combina sorgenteAttributi eaddAttributes (che hanno la precedenza) per fare il combinato Attributi che vengono visualizzati all'utente. (E altri attributi vengono automaticamente aggiunti a longitudine, latitudine, altitudine, profondità e variabili di tempo quandoERDDAP™effettivamente rende il dataset) .
-
Se non ti piace una fonteAttributo, sovrascrivilo aggiungendo un addAttributo con lo stesso nome ma un valore diverso (o nessun valore, se si desidera rimuoverlo) .
-
TuttiaddAttributessono suggerimenti generati dal computer. Modificali! Se non ti piace un addAttribute, cambialo.
-
Se vuoi aggiungere altroaddAttributesaggiungeteli.
-
Se vuoi cambiare undestinationName, cambialo. Ma non cambiaresourceNameS.
-
È possibile modificare l'ordine deldataVariables o rimuovere qualsiasi di loro.
- Si può quindi utilizzareDasDds (vedi sotto) per testare ripetutamente l'XML per quel dataset per garantire che il dataset risultante appare come si desidera che inERDDAP.
- Sentitevi liberi di fare piccole modifiche aldatasets.xmlchunk che è stato generato, per esempio, fornire un meglioinfoUrl, sommario, o titolo.
doNotAddStandardNames
Se si include \-doNotAddStandardNames come parametro di riga di comando quando si esegue generare Datasets Xml, generare Datasets Xml non aggiungeràstandard\_namealaddAttributesper qualsiasi variabile diversa dalle variabili denominate latitudine, longitudine, altitudine, profondità o tempo (che hanno ovviastandard\_name#) . Questo può essere utile se si utilizza l'output da generare Datasets Xml direttamente inERDDAP™senza modificare l'output, perché generare Datasets Xml spesso indovinastandard\_nameErroneamente. (Si noti che si consiglia sempre di modificare l'output prima di utilizzarlo inERDDAP.) Utilizzando questo parametro avrà altri effetti correlati minori perché l'ipotesistandard\_nameè spesso usato per altri scopi, ad esempio, per creare un nuovolong\_name, e per creare le impostazioni di ColorBar.
Scripting
Come alternativa per rispondere interattivamente alle domande alla tastiera e looping per generare ulteriori set di dati, è possibile fornire argomenti di riga di comando per rispondere a tutte le domande per generare un dataset. Genera i dati Xml elaborerà tali parametri, scriverà l'output al file di output e e esce dal programma.
Per impostare questo, prima utilizzare il programma in modalità interattiva e scrivere le risposte. Ecco un esempio parziale: Diciamo che si esegue lo script: ./GenerateDatasetsXml.sh Poi entrare: EDDTableFromAsciiFiles Quindi inserire: /u00/data/ Quindi inserire: .\*\.asc Quindi inserire: /u00/data/sampleFile.asc Quindi inserire: ISO-8859-1
Per eseguire questo in modo non interattivo, utilizzare questa riga di comando: ./GenerateDatasetsXml.sh EDDTableFromAsciiFiles /u00/data/ .\*\\.asc /u00/data/sampleFile.asc ISO-8859-1 Quindi, in fondo, elenca tutte le risposte sulla riga di comando. Questo dovrebbe essere utile per i set di dati che cambiano frequentemente in un modo che richiede la re-running GenerateDatasets Xml (in particolareEDDGridDaThreddsCatalog) .
Dettagli:
- Se un parametro contiene uno spazio o un carattere speciale, quindi codificare il parametro come unstringa in stile JSON, ad esempio, "il mio parametro con spazi e due\nlinee".
- Se si desidera specificare una stringa vuota come parametro, utilizzare: niente
- Se si desidera specificare il valore predefinito di un parametro, utilizzare: predefinito
- Generare i dati Xml supporta un -i set di dati XmlName # tagName parametro riga di comando che inserisce l'output nel parametro specificatodatasets.xmlfile (il default è tomcat / contenuto/erddap/datasets.xml) . Genera i dati Xml cerca due linee in dataset XmlName:
<!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->
e
<!-- End GenerateDatasetsXml #*tagName someDatetime* -->
e sostituisce tutto tra quelle righe con il nuovo contenuto, e cambia il SomeDatetime.
- L'interruttore -i è solo elaborato (e modifichedatasets.xmlsono fatti solo) se si esegue GenerateDatasets Xml con argomenti di riga di comando che specificano tutte le risposte a tutte le domande per un loop del programma. (Vedere 'Scripting' sopra.) (Il pensiero è: Questo parametro è da utilizzare con gli script. Se si utilizza il programma in modalità interattiva (digitando informazioni sulla tastiera) , si rischia di generare alcuni pezzi errati di XML prima di generare quello che si desidera.)
- Se le linee Begin e End non sono trovate, allora quelle linee e il nuovo contenuto vengono inseriti subito prima</erddapDatasets>.
- C'è anche un -I (capitale) commutare per scopi di prova che funziona lo stesso di -i, ma crea un file chiamatodatasets.xml Data e non cambiadatasets.xml.
- Non eseguire GenerateDatasets Xml con -i in due processi contemporaneamente. C'è una possibilità che solo una serie di cambiamenti saranno mantenuti. Ci può essere un problema serio (per esempio, file corrotti) .
Se si utilizza "GenerateDatasetsXml -verbose", stamperà più messaggi diagnostici del solito.
Tipi di Dataset speciali/Pseudo
In generale, le opzioni EDDType in GenerateDatasets Xml match dei tipi EDD descritti in questo documento (vedi ilElenco dei tipi di Dataset) e generare unodatasets.xmlchunk per creare un dataset da una specifica fonte di dati. Ci sono alcune eccezioni e casi speciali:
EDDGridDa Erddap
Questo EDDType genera tuttidatasets.xmlpezzi necessari per fareEDDGridDa Erddapset di dati da tuttiEDDGridset di dati in un telecomandoERDDAP. Avrete la possibilità di mantenere l'originaledatasetID# (che possono duplicare alcunidatasetIDgià nel tuoERDDAP) o generare nuovi nomi che saranno unici (ma di solito non sono come leggibili dall'uomo) .
EDDTableFromErddap
Questo EDDType genera tuttidatasets.xmlpezzi necessari per fareEDDTableFromErddapset di dati da tutti i dataset EDDTable in un telecomandoERDDAP. Avrete la possibilità di mantenere l'originaledatasetID# (che possono duplicare alcunidatasetIDgià nel tuoERDDAP) o generare nuovi nomi che saranno unici (ma di solito non sono come leggibili dall'uomo) .
EDDGridDaThreddsCatalog
Questo EDDType genera tuttidatasets.xmlpezzi necessari per tuttiEDDGridDamascoset di dati che può trovare strisciando ricorsivamente attraverso un THREDDS (sub) catalogo. Ci sono molte forme di URL del catalogo THREDDS. Questa opzione REQUIRES un URL THREDDS .xml con /catalog/ in esso, ad esempio,
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml o
https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(un relativo catalogo .html è a
https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html , che non è accettabileEDDGridDaThreddsCatalog).
Se avete problemiEDDGridDa tre Catalogo:
- Assicurarsi che l'URL che si sta utilizzando sia valido, include /catalog/, e termina con /catalog.xml .
- Se possibile, utilizzare un indirizzo IP pubblico (per esempio, https://oceanwatch.pfeg.noaa.gov ) nell'URL, non un indirizzo IP numerico locale (per esempio, https://12.34.56.78 ) . Se il THREDDS è accessibile solo tramite l'indirizzo IP numerico locale, è possibile utilizzare [<convertToPublicSourceUrl>] (#converttopublicsourceurl) CosìERDDAP™gli utenti vedono l'indirizzo pubblico, anche seERDDAP™ottiene i dati dall'indirizzo numerico locale.
- Se hai problemi che non puoi risolvere,controllare i consigli di risoluzione dei problemi.
- Il codice a basso livello per questo ora utilizzaUnidatanetcdf-java catalogo crawler codice (Tre. classi di catalogo) in modo che possa gestire tutti i cataloghi THREDDS (che può essere sorprendentemente complesso) Grazie aUnidataper quel codice.
EDDGridLonPM180Da ErddapCatalog
Questo EDDType genera ildatasets.xmlper fareEDDGridLonPM180set di dati da tuttiEDDGridset di dati in unERDDAPche hanno valori di longitudine superiori a 180.
- Se possibile, utilizzare un indirizzo IP pubblico (per esempio, https://oceanwatch.pfeg.noaa.gov ) nell'URL, non un indirizzo IP numerico locale (per esempio, https://12.34.56.78 ) . SeERDDAP™è accessibile solo tramite l'indirizzo IP numerico locale, è possibile utilizzare [<convertToPublicSourceUrl>] (#converttopublicsourceurl) CosìERDDAP™gli utenti vedono l'indirizzo pubblico, anche seERDDAP™ottiene i dati dall'indirizzo numerico locale.
EDDGridLon0360Da ErddapCatalog
Questo EDDType genera ildatasets.xmlper fareEDDGridLon0360set di dati da tuttiEDDGridset di dati in unERDDAPche hanno valori di longitudine inferiori a 0.
- Se possibile, utilizzare un indirizzo IP pubblico (per esempio, https://oceanwatch.pfeg.noaa.gov ) nell'URL, non un indirizzo IP numerico locale (per esempio, https://12.34.56.78 ) . SeERDDAP™è accessibile solo tramite l'indirizzo IP numerico locale, è possibile utilizzare [<convertToPublicSourceUrl>] (#converttopublicsourceurl) CosìERDDAP™gli utenti vedono l'indirizzo pubblico, anche seERDDAP™ottiene i dati dall'indirizzo numerico locale.
EDDsFromFiles
Data una directory di avvio, questo attraversa la directory e tutte le sottodirectory e cerca di creare un set di dati per ogni gruppo di file di dati che trova.
- Ciò presuppone che quando si trova un dataset, il dataset include tutte le sottodirectory.
- Se si trova un dataset, le directory sibling simili verranno trattate come set di dati separati (Ad esempio, le directory per gli anni '90, i 2000, i 2010, genereranno set di dati separati) . Dovrebbero essere facili da combinare a mano -- basta cambiare il primo set di dati<fileDir> nella directory principale ed eliminare tutti i seguenti set di dati di semplificazione.
- Questo cercherà solo di generare un pezzo didatasets.xmlper il tipo più comune di estensione di file in una directory (non contare .md5, che è ignorato) . Così, dato una directory con 10.ncfile e 5 .txt file, un dataset verrà generato per.ncSolo i file.
- Ciò presuppone che tutti i file in una directory con la stessa estensione appartengano allo stesso dataset. Se una directory ha qualcosa.ncfile con dati SST e alcuni.ncfile con dati clorofill, solo un campione.ncil file sarà letto (SST? clorofilla?) e solo un set di dati verrà creato per quel tipo di file. Questo dataset probabilmente non riesce a caricare a causa di complicazioni dal tentativo di caricare due tipi di file nello stesso dataset.
- Se ci sono meno di 4 file con l'estensione più comune in una directory, questo presuppone che non siano file di dati e semplicemente salta la directory.
- Se ci sono 4 o più file in una directory, ma questo non può generare con successo un pezzo didatasets.xmlper i file (per esempio, un tipo di file non supportato) , questo genereràEDDTableFromFileNamesdataset per i file.
- Alla fine della diagnostica che questo scrive al file di registro, poco prima deldatasets.xmlchunks, questo stamperà un tavolo con una sintesi di informazioni raccolte attraversando tutte le sottodirectory. La tabella elenca ogni sottodirectory e indica il tipo più comune di estensione del file, il numero totale di file, e quale tipo di dataset è stato creato per questi file (se c'è) . Se si trova di fronte a una struttura di file complessa, profondamente nidificata, considerare l'esecuzione GenerateDatasets Xml con EDDType=EDDsFromFiles solo per generare queste informazioni,
- Questa opzione non può fare un ottimo lavoro di indovinare il miglior EDDType per un determinato gruppo di file di dati, ma è veloce, facile e vale la pena di provare. Se i file sorgente sono adatti, funziona bene ed è un buon primo passo nella generazionedatasets.xmlper un file system con un sacco di sottodirectory, ciascuno con file di dati da diversi set di dati.
EDDTableFromEML e EDDTableFromEMLBatch
Questo speciale EDDType genera ildatasets.xmlper fareEDDTableFromAsciiFilesdataset da ciascuna delle tabelle descritte inLingua ecologica dei metadatiFile XML. La variante "Batch" funziona su tutti i file EML in una directory locale o remota. Si prega di vedere il separatodocumentazione per EDDTableFromEML.
EDDTableDal porto
Questo speciale EDDType genera ildatasets.xmlper fareEDDTableFromAsciiFilesdataset dalle informazioni in uninport-xmlfile. Se è possibile accedere al file di dati sorgente (il file inport-xml dovrebbe avere indizi per dove trovarlo) , è possibile effettuare un set di dati di lavoroERDDAP.
I seguenti passaggi delineano come utilizzare GenerateDatasets Xml con un file inport-xml al fine di ottenere un set di dati di lavoroERDDAP.
- Una volta che hai accesso al file inport-xml (o come URL o file locale) : eseguire GenerateDatasets Xml, specificare EDDType=EDDTableFromInPort, specificare l'URL inport-xml o il nome completo del file, specificare qualeChild=0, e specificare le altre informazioni richieste (se noto) . (A questo punto, non è necessario avere il file di dati di origine o specificare il suo nome.) L'impostazione di cheChild=0 dice GenerateDatasets Xml per scrivere le informazioni per Tutto della<entità-attributo-informazione><entità> nel file inport-xml (se ci sono) . Stampa anche un riassunto delle informazioni di sfondo, tra cui tutti i download-url elencati nel file inport-xml.
- Guarda tutte queste informazioni (comprese le informazioni di sfondo che generanoDatasets Stampe Xml) e visitare il download-url (#) per cercare di trovare il file di dati sorgente (#) . Se riesci a trovarlo (loro) , scaricare (loro) in una directory accessibileERDDAP. (Se non riesci a trovare alcun file di dati di origine, non c'è alcun punto di procedere.)
- Correre Generate Datasets Ancora Xml. Se il file di dati di origine corrisponde a uno dei file inport-xml<entità-attributo-informazione><l'entità, specificare quale bambino= che l'Entità è ilNumero (ad esempio, 1, 2, 3, ...) .ERDDAP™cercherà di abbinare i nomi delle colonne nel file di dati di origine a nomi nelle informazioni dell'entità, e richiedere di accettare/rifiggere/fissare eventuali discrepanze. O, se il file inport-xml non ha alcun<entità-attributo-informazione><l'entità, specificare quale bambino=0.
- Nel pezzo didatasets.xmlche è stato fatto da GenerateDatasets Xml, rivedere il [globale<addAttributes> (#global-attributi) come necessario / desiderato.
- Nel pezzo didatasets.xmlche è stato fatto da GenerateDatasetsXml, aggiungere / rivedere il [<dataVariable> (#datavariabile #) informazioni necessarie/desiderate per descrivere ciascuna delle variabili. Assicurati di identificare correttamente ogni variabile [<sourceName> (#) (come appare nella fonte) ♪ [<destinationName> (#destinationname) (che ha più limitazioni sui caratteri consentiti chesourceName) ♪ [<unità > (# Units #) (soprattutto se è untempo o timestamp variabiledove le unità devono specificare il formato) e [<missing\_value> (#missing_value) ♪
- Quando si è vicini alla finitura, ripetutamente utilizzareDasDdsstrumento per vedere rapidamente se la descrizione del dataset è valida e se il dataset apparirà inERDDAP™come vuoi.
Sarebbe bello se i gruppi che utilizzano InPort per documentare i loro set di dati utilizzassero ancheERDDAP™per rendere disponibili i dati effettivi:
- ERDDAP™è una soluzione che può essere utilizzata in questo momento in modo da poter soddisfareNOAA'Accesso pubblico ai risultati della ricerca (PARERI) requisitiin questo momento, non in un momento vago in futuro.
- ERDDAP™rende i dati reali disponibili agli utenti, non solo i metadati. (Che bene sono i metadati senza dati?)
- ERDDAP™supporta i metadati (in particolare, le unità delle variabili) , a differenza di alcuni altri software del server dati in essere considerato. (Che bene sono i dati senza metadati?) Utilizzare software che non supporta i metadati è invitare i dati ad essere fraintesi e abusati.
- ERDDAP™è software libero e open-source a differenza di alcuni altri software che vengono considerati. Sviluppo continuoERDDAP™è già pagato. Supporto perERDDAP™gli utenti sono liberi.
- ERDDAP'l'aspetto può essere facilmente personalizzato per riflettere ed evidenziare il vostro gruppo (nonERDoERDDAP) .
- ERDDAP™offre un modo coerente per accedere a tutti i set di dati.
- ERDDAP™può leggere i dati da molti tipi di file di dati e da database relazionali.
- ERDDAP™può trattare con grandi set di dati, compresi i set di dati in cui i dati sorgente sono in molti file di dati.
- ERDDAP™può scrivere dati a molti tipi di file di dati, a richiesta dell'utente, compresi i tipi di file di dati scientifici come netCDF, ESRI .csv, eODV .txt.
- ERDDAP™può fare grafici personalizzati e mappe di sottoinsiemi dei dati, in base alle specifiche dell'utente.
- ERDDAP™può trattare con non-data datasets come le collezioni di immagini, video o file audio.
- ERDDAP™è stato installato e utilizzato apiù di 60 istituzioni nel mondo.
- ERDDAP™è elencato come uno dei server di dati consigliati per l'uso all'internoNOAAnelNOAADirettiva procedurale di accesso ai dati, a differenza di un altro software che viene considerato.
- ERDDAP™è un prodotto diNMFS/NOAA, così usando dentroNMFSeNOAAdovrebbe essere un punto di orgoglio perNMFSeNOAA.
Per favore.ERDDAP™un tentativo. Se avete bisogno di aiuto, si prega di inviare un messaggio nelERDDAP™Gruppo di Google.
aggiungereFillValueAttributi
Questa speciale opzione EDDType non è un tipo di dataset. È uno strumento che può aggiungere attributi \_FillValue ad alcune variabili in alcuni set di dati. VediaggiungereFillValueAttributi.
trovareDuplicato Tempo
Questa speciale opzione EDDType non è un tipo di dataset. Invece, dice GenerateDatasets Xml per cercare attraverso una raccolta di griglie.nc (e relative) file per trovare e stampare un elenco di file con valori di tempo duplicati. Quando guarda i valori del tempo, li converte dalle unità originali alle"seconds since 1970-01-01"nel caso in cui i file diversi utilizzino stringhe diverse unità. È necessario fornire la directory di partenza (con o senza lo slash trailing) , il nome del file espressione regolare (ad esempio, .\*\.nc ) , e il nome della variabile di tempo nei file.
NC
Questa speciale opzione EDDType non è un tipo di dataset. Invece, dice GenerateDatasets Xml per stampare unNC\-come stampa di un.nc♪.nco.hdffile. In realtà usa il netcdf-javaNCdump, che è uno strumento più limitato della versione C di NCdump. Se si utilizza questa opzione, GenerateDatasetsXml vi chiede di utilizzare una delle opzioni: "-h" (intestazione) "-c" (vassoi di coordinate) , "-vall" (predefinito) , "-v var1;var2", "-v var1 (0,0:10,0:20) ". Questo è utile perché, senza ncdump è difficile sapere cosa è in un.nc♪.nco.hdffile e quindi quale EDDType si dovrebbe specificare per GenerateDatasets Xml. Per una.ncfile ml, questo stamperà l'uscita ncdump per il risultato del.ncmodifiche di file ml applicate al sottostante.nco.hdffile.
DasDds
- DasDds è un programma di riga di comando che è possibile utilizzare dopo aver creato un primo tentativo all'XML per un nuovo dataset indatasets.xml. Con DasDds, è possibile testare ripetutamente e affinare l'XML. Quando si utilizza il programma DasDds:
- Su Windows, la prima volta che si esegue DasDds, è necessario modificare i DasDds. bat file con un editor di testo per cambiare il percorso alla java. exe file in modo che Windows possa trovareJava.
- DasDds ti chiededatasetIDper il set di dati su cui stai lavorando.
- DasDds cerca di creare il dataset con questodatasetID.
- DasDds stampa sempre un sacco di messaggi diagnostici. Se si utilizza "DasDds -verbose", DasDds stamperà più messaggi diagnostici del solito.
- Per la sicurezza, DasDds elimina sempre tutte le informazioni del dataset cache (file) per il dataset prima di cercare di creare il dataset. Questo è l'equivalente dell'impostazione di unbandiera duraCosì per i dataset aggregati, si potrebbe desiderare di regolare temporaneamente il fileNameRegex per limitare il numero di file che il costruttore di dati trova.
- Se il dataset non riesce a caricare (per qualsiasi ragione) , DasDds si fermerà e vi mostrerà il messaggio di errore per il primo errore che trova.
Non provare a indovinare quale potrebbe essere il problema. Leggi attentamente il messaggio ERROR.
Se necessario, leggere i messaggi diagnostici precedenti per trovare più indizi e informazioni, troppo. - Modificare l'XML del dataset per cercare di risolvere questo problema
e lasciare che DasDds provi a creare nuovamente il dataset. - Se risolvi ripetutamente ogni problema, alla fine risolverai tutti i problemi
e il dataset verrà caricato.
- Tutti gli output DasDds (diagnostica e risultati) sono scritti sullo schermo e su BigParentDirectory /logs/DasDds.log .
- Se DasDds può creare il dataset, DasDds vi mostrerà il.das (Struttura di attributi di dataset) ♪.dds (Descrittore di dataset Struttura) e.timeGaps (lacune di tempo) informazioni per il set di dati sullo schermo e scriverle a BigParentDirectory /logs/DasDds.out .
- Spesso, si desidera fare qualche piccolo cambiamento all'XML del dataset per pulire i metadati del dataset e eseguire DasDds.
Bonus Strumento di terze parti:ERDDAP- Ci siamo.
ERDDAP-lint è un programma di Rob Fuller e Adam Leadbetter dell'Irish Marine Institute che è possibile utilizzare per migliorare i metadati del vostroERDDAP™Datasets.ERDDAP-lint "contiene regole e una semplice applicazione web statica per eseguire alcuni test di verifica contro il vostroERDDAP™server. Tutti i test sono eseguiti nel browser web." ComeUnix/Linux lint tool, è possibile modificare le regole esistenti o aggiungere nuove regole. VediERDDAP- Ci siamo.per maggiori informazioni.
Questo strumento è particolarmente utile per i set di dati che hai creato qualche tempo fa e ora vuoi aggiornarti con le tue preferenze dei metadati attuali. Ad esempio, le prime versioni di GenerateDatasets Xml non ha messo alcuno sforzo nella creazione globalecreator\_name♪creator\_email, creatore\_type, ocreator\_urlmetadati. Potresti usareERDDAP-lint per identificare i set di dati che mancano quegli attributi dei metadati.
Grazie a Rob e Adam per la creazione di questo strumento e renderlo disponibile alERDDAP™comunità.
La struttura di base deldatasets.xmlFile
I tag richiesti e facoltativi consentiti in undatasets.xmlfile (e il numero di volte che possono apparire) sono mostrati di seguito. In pratica, il tuodatasets.xmlavrà molti<tag di dataset> e utilizzare solo gli altri tag all'interno<erddapDatasets> come necessario.
<?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>
È possibile che altre codifiche saranno consentite in futuro, ma per ora, solo ISO-8859-1 è raccomandato.
XI.
Nuovo nella versione 2.25 è il supporto per XInclude. Questo richiede che si sta utilizzando il parser SAX<utilizzareSaxParser>true</useSaxParser> nel vostro setup.xml. Questo può consentire di scrivere ogni dataset nel proprio file, quindi includerli tutti nel principaledatasets.xml, riutilizzare parti di definizioni di dataset, o entrambi. Se vuoi vedere un esempio,EDDTestDataset.javaimposta XInclude per riutilizzare le definizioni variabili.
-
- No.
Note
Lavorare con ildatasets.xmlfile è un progetto non banale. Si prega di leggere attentamente tutte queste note. Dopo aver sceltotipo di dataset, si prega di leggere la descrizione dettagliata di esso attentamente.
Scegliere il tipo Dataset
Nella maggior parte dei casi, c'è solo unoERDDAP™tipo di dataset appropriato per una data fonte di dati. In alcuni casi (ad esempio,.ncfile) , ci sono alcune possibilità, ma di solito uno di loro è sicuramente meglio. La prima e più grande decisione che dovete prendere è: è opportuno trattare il dataset come un gruppo di array multidimensionali (se così vediEDDGridtipi di dataset) o come una tabella di dati simile a database (se così vediTipi di dataset EDDTable) .
Servire i dati come è
Di solito, non c'è bisogno di modificare la fonte di dati (ad esempio, convertire i file in un altro tipo di file) cosìERDDAP™può servire. Uno dei presupposti diERDDAP™è che la fonte di dati verrà utilizzata come è. Di solito questo funziona bene. Alcune eccezioni sono:
- Database relazionali e Cassandra --ERDDAP™può servire i dati direttamente da database relazionali e Cassandra. Ma per problemi di sicurezza, bilanciamento del carico e prestazioni, è possibile scegliere di impostare un altro database con gli stessi dati o salvare i dati perNetCDFV.ncfile e hannoERDDAP™servire i dati dalla nuova fonte di dati. VediEDDTableDatabaseeEDDTable FromCassandra.
- Fonti dati non supportate --ERDDAP™può supportare un gran numero di tipi di fonti di dati, ma il mondo è pieno di 1000 (milioni?) di diverse fonti di dati (in particolare, le strutture dei file di dati) . SeERDDAP™non supporta la fonte di dati:
- Se la fonte di dati èNetCDF .ncfile, è possibile utilizzareNCMLper modificare i file di dati on-the-fly, o utilizzareNCOper modificare definitivamente i file di dati.
- È possibile scrivere i dati a un tipo di sorgente dati cheERDDAP™supporti.NetCDF-3.nci file sono una buona, raccomandazione generale perché sono file binari cheERDDAP™può leggere molto rapidamente. Per i dati tabulari, considerare la memorizzazione dei dati in una raccolta di.ncfile che utilizzanoCFU Geometrie di smorzamento discreto (DSG) Contiguous Ragged Array strutture di dati e così può essere gestito conERDDAP'EDDTableFromNcCFFiles). Se sono organizzati logicamente (ciascuno con i dati per un pezzo di spazio e tempo) ♪ERDDAP™può estrarre i dati da loro molto rapidamente.
- È possibile richiedere che venga aggiunto il supporto per tale fonte di datiERDDAP™e-mail Chris. John a Noaa.gov.
- È possibile aggiungere supporto per quella fonte di dati scrivendo il codice per gestirlo da soli. VediilERDDAP™Guida del programmatore
- Velocità...ERDDAP™può leggere i dati da alcune fonti di dati molto più veloce di altri. Ad esempio, la letturaNetCDFV.ncfile è veloce e la lettura di file ASCII è più lento. E se c'è un grande (> 1000) o enorme (> 10.000) numero di file di dati di origine,ERDDAP™risponderà ad alcune richieste di dati lentamente. Di solito, la differenza non è evidente per gli esseri umani. Tuttavia, se si pensaERDDAP™è lento per un dato set di dati, è possibile scegliere di risolvere il problema scrivendo i dati a una configurazione più efficiente (di solito: alcuni, ben strutturati,NetCDFV.ncfile) . Per i dati tabulari, vederequesto consiglio.
Salve.
Spesso è più facile generare l'XML per un set di dati facendo una copia di una descrizione del set di dati di lavoro in dataset.xml e quindi modificandolo.
Codifica caratteri speciali
Dadatasets.xmlè un file XML, DOVE&-encode"&", "<", e ">" in qualsiasi contenuto come "&", "<", e ">". Sbagliato:<Titolo Tempo e maree<> Bene.<Titolo Tempo e maree<>
XML non tollera errori di sintassi
Dopo aver modificato il file dataset.xml, è una buona idea verificare che il risultato siaXML ben formatoincollando il testo XML in un checker XML comexmlvalidazione.
Consigli per la risoluzione dei problemi
- Altri modi per diagnosticare i problemi con i set di dati
Oltre ai due principaliStrumenti♪ - log.txtè un file di log con tuttiERDDAPSono messaggi diagnostici.
- TheRapporto giornalieroha più informazioni rispetto alla pagina di stato, incluso un elenco di set di dati che non hanno caricato e le eccezioni (errori) hanno generato.
- ThePagina di statoè un modo rapido per controllareERDDAP's stato da qualsiasi browser web. Include un elenco di set di dati che non hanno caricato (anche se non le relative eccezioni) e attivitàStatistiche (mostrare il progressoEDDGridCopiaeEDDTableCopyset di dati e qualsiasiEDDGridDa FilioEDDTableFromFilesset di dati che utilizzanocachedall'Url (ma non la cache Dimensione GB) ) .
- Se ti bloccano, vedi il nostrosezione per ottenere supporto aggiuntivo.
Variazioni speciali
- La longitudine, latitudine, altitudine (o profondità) e il tempo (LL) variabile destinationNamesono speciali.
- In generale:
- Le variabili LLAT sono rese note aERDDAP™se la variabile dell'asse (perEDDGridset di dati) o variabili di dati (per set di dati EDDTable) destinationNameè "longitudine", "latitudine", "altitudine", "profondità", o"time".
- Vi incoraggiamo fortemente a utilizzare questi nomi standard per queste variabili quando possibile. Nessuno di loro è richiesto. Se non si utilizzano questi nomi variabili speciali,ERDDAP™non riconosceranno il loro significato. Ad esempio, le variabili LLAT sono trattate appositamente da Make A Graph ( datasetID .) : se la variabile X Axis è "longitudine" e la variabile Y Axis è "latitudine", otterrete una mappa (utilizzando una proiezione standard, e con una maschera di terra, confini politici, ecc.) invece di un grafico.
- ERDDAP™aggiungerà automaticamente molti metadati a variabili LLAT (per esempio, "ioos\_category", "unità", e diversi attributi correlati agli standard come "\_CoordinateAxisType") .
- ERDDAP™automaticamente, on-the-fly, aggiungere un sacco di metadati globali relativi ai valori LLAT del sottoinsieme di dati selezionato (per esempio, "geospatial\_lon\_min") .
- I clienti che supportano questi standard di metadati saranno in grado di sfruttare i metadati aggiunti per posizionare i dati nel tempo e nello spazio.
- I client troveranno più facile generare query che includono variabili LLAT perché i nomi della variabile sono gli stessi in tutti i dataset rilevanti.
- Per la variabile "longitudine" e la variabile "Latitudine":
- UtilizzaredestinationNames "longitudine" e "latitudine" solo se launitàsono gradi\_east e gradi\_north, rispettivamente. Se i dati non si adattano a questi requisiti, utilizzare nomi variabili diversi (per esempio, x, y, lonRadians, latRadians) .
- Se avete dati di longitudine e latitudine espressi in unità diverse e quindi con differentidestinationNames, per esempio, lonRadians e latRadians, fare un grafico ( datasetID .) farà grafici (per esempio, serie di tempo) invece delle mappe.
- Per la variabile "altitude" e la variabile "profondità":
- UtilizzaredestinationName"latitudine" per identificare la distanza dei dati sopra il livello del mare (positivo="up" valori) . Opzionalmente, è possibile utilizzare "altitudine" per distanze sotto il livello del mare se i valori sono negativi sotto il mare (o se si utilizza, per esempio, [<#scale\_factor"tipo="int">- 1</att>] (#scale_factor) per convertire valori di profondità in valori di altitudine.
- UtilizzaredestinationName"profondità" per identificare la distanza dei dati sotto il livello del mare (valori positivi="down") .
- Un dataset potrebbe non avere variabili "altitudine" e "profondità".
- Per questi nomi variabili, ilunitàdeve essere "m", "meter", o "meters". Se le unità sono diverse (per esempio, fathoms) , si può usare [<#scale\_factor> alcuni Valore </att>] (#scale_factor) E...<at name="units">meters</att>] (# Units #) per convertire le unità a metri.
- Se i dati non si adattano a questi requisiti, utilizzare un diversodestinationName (per esempio, sopraGround, distanza ToBottom) .
- Se si conosce il CRS verticale si prega di specificarlo nei metadati, ad esempio, "EPSG:5829" (Altezza istantanea sopra il livello del mare) , "EPSG:5831" (profondità istantanea sotto il livello del mare) , o "EPSG:5703" (Altezza NAVD88) .
- Per il"time"variabile:
- UtilizzaredestinationName "time"solo per variabili che includono l'intera data+time (o data, se è tutto quello che c'è) . Se, ad esempio, ci sono colonne separate per data e oraOfDay, non usare il nome variabile"time".
- Vediunitàper maggiori informazioni sull'attributo delle unità per tempo e tempoStamp variabili.
- La variabile di tempo e relativatempo Variazioni di francobollisono unici in quanto convertono sempre i valori di dati dal formato di tempo della sorgente (qualunque cosa sia) in un valore numerico (secondi dal 1970-01-01T00:00:00:00Z) o un valore di stringa (ISO 8601:2004 (E) formato) , a seconda della situazione.
- Quando un utente richiede dati temporali, può richiederlo specificando il tempo come valore numerico (secondi dal 1970-01-01T00:00:00:00Z) o un valore di stringa (ISO 8601:2004 (E) formato) .
- ERDDAP™ha una utilità perConvertire un Numerico Tempo di / da un tempo di stress.
- VediCome?ERDDAPOfferte con il tempo.
Perché solo due strutture di dati di base?
- Dal momento che è difficile per i clienti umani e client di computer affrontare un insieme complesso di possibili strutture di dataset,ERDDAP™utilizza solo due strutture di dati di base:
- astruttura dati grigliata (per esempio, per dati satellitari e dati di modello) e
- astruttura dei dati tabulati (per esempio, per i dati in-situ buoy, stazione e traiettoria) .
- Certamente, non tutti i dati possono essere espressi in queste strutture, ma gran parte di esso può. Le tabelle, in particolare, sono strutture di dati molto flessibili (guardare il successo dei programmi di database relazionali) .
- Questo rende le query dei dati più facili da costruire.
- Ciò rende le risposte dei dati hanno una struttura semplice, che rende più facile servire i dati in una più ampia varietà di tipi di file standard (che spesso supporta solo semplici strutture di dati) . Questo è il motivo principale che abbiamo istituitoERDDAP™Da questa parte.
- Questo, a sua volta, rende molto facile per noi (o chiunque) scrivere software client che funziona con tuttiERDDAP™Datasets.
- Questo rende più facile confrontare i dati da diverse fonti.
- Siamo molto consapevoli che se si utilizza per lavorare con i dati in altre strutture di dati si può inizialmente pensare che questo approccio sia semplicistico o insufficiente. Ma tutte le strutture dei dati hanno degli scambi. Nessuno è perfetto. Anche le strutture do-it-all hanno i loro svantaggi: lavorare con loro è complesso e i file possono essere scritti o letti solo con librerie software speciali. Se accettiERDDAP's approccio abbastanza per cercare di lavorare con esso, si può scoprire che ha i suoi vantaggi (in particolare il supporto per più tipi di file che possono contenere le risposte dei dati) . TheERDDAP™presentazione (in particolarestrutture di dati slide) parla molto di questi problemi.
- E anche se questo approccio ti sembra strano, la maggior parteERDDAP™i clienti non noteranno mai -- vedranno semplicemente che tutti i dataset hanno una bella struttura semplice e saranno grati che possano ottenere i dati da una vasta gamma di fonti restituiti in una vasta gamma di formati di file.
Dimensioni
- E se le variabili di rete nel dataset sorgente non condividono le stesse variabili di asse?
InEDDGriddatasets, tutte le variabili di dati (Condividi) tutte le variabili dell'asse. Quindi, se un dataset di origine ha alcune variabili con un insieme di dimensioni, e altre variabili con una diversa serie di dimensioni, dovrete fare due set di dati inERDDAP. Per esempio, si potrebbe fare unoERDDAP™dataset intitolato "Alcuni titoli (in superficie) " per tenere variabili che usano\[tempo\]\[latitudine\]\[longitudine\]dimensioni e ne fanno un altroERDDAP™dataset intitolato "Alcuni titoli (a profondità) " per tenere le variabili che utilizzano\[tempo\]\[altitudine\]\[latitudine\]\[longitudine\]. O forse è possibile modificare la fonte di dati per aggiungere una dimensione con un unico valore (per esempio, altitudine=0) per rendere le variabili coerenti.
ERDDAP™non gestisce più set di dati complicati (per esempio, modelli che utilizzano una maglia di triangoli) Bene. È possibile servire questi set di dati inERDDAP™creando due o più set di dati inERDDAP™ (in modo che tutte le variabili di dati in ogni nuovo set di dati condividono lo stesso set di variabili di asse) , ma non è quello che gli utenti vogliono. Per alcuni set di dati, si potrebbe considerare di fare una regolare versione grigliata del dataset e l'offerta che oltre ai dati originali. Alcuni software client possono gestire solo una griglia regolare, quindi facendo questo, si raggiungono clienti aggiuntivi.
Dati rettificati proiettati
Alcuni dati grigliati hanno una struttura complessa. Ad esempio, livello satellitare 2 ("along track") i dati non utilizzano una semplice proiezione. Modelli (e altri) spesso lavorano con dati grigliati su varie proiezioni non cilindriche (per esempio, conico, polare stereographic, tripolar) o in reti non strutturate (una struttura dati più complessa) . Alcuni utenti finali vogliono questi dati, così non c'è perdita di informazioni. Per quei clienti,ERDDAP™può servire i dati, come è, solo seERDDAP™l'amministratore interrompe il dataset originale in alcuni set di dati, con ogni parte comprese variabili che condividono le stesse variabili di asse. Sì, sembra strano per le persone coinvolte ed è diverso dalla maggior parteOPeNDAPserver. MaERDDAP™sottolinea rendere i dati disponibili in molti formati. Questo è possibile perchéERDDAP™utilizza/richiede una struttura dati più uniforme. Anche se è un po' imbarazzante (cioè, diverso dal previsto) ♪ERDDAP™può distribuire i dati proiettati.
\[Sì,ERDDAP™potrebbe avere più requisiti per la struttura dei dati, ma mantenere i requisiti per i formati di output. Ma questo porterebbe a confusione tra molti utenti, in particolare i neofiti, poiché molte richieste apparentemente valide per i dati con strutture diverse sarebbero invalide perché i dati non si adattano al tipo di file. Continuiamo a tornare al design del sistema attuale.\]
Alcuni utenti finali vogliono i dati in una proiezione cilindrica lat lon come Equirectangular / plate carrée o Mercator) per facilità d'uso in situazioni diverse. Per queste situazioni, incoraggiamoERDDAP™amministratore per utilizzare alcuni altri software (NCO?Matlab? R? IDV? ...?) per riprogettare i dati su un geografico (Proiezione equirettangolare / piastra carrée) o altra proiezione cilindrica e servire quella forma dei dati inERDDAP™come dataset diverso. Questo è simile a quello che le persone fanno quando convertono i dati del livello 2 del satellite in dati di livello 3. Uno di questi strumenti èNCOche offre opzioni di estensione per la registrazione dei dati.
GIS e Reprojecting Data
Dal momento che il mondo GIS è spesso orientato alla mappa, i programmi GIS di solito offrono supporto per la riproiezione dei dati, cioè, la trama dei dati su una mappa con una proiezione diversa.
Attualmente,ERDDAP™non ha strumenti per riprogettare i dati. Invece, si consiglia di utilizzare uno strumento esterno per fare una variante del dataset, dove i dati sono stati riprogettati dalla sua forma originale su una rettangolare (latitudine longitudine) array adatto perERDDAP.
A nostro parere, il CF/DAPil mondo è un po' diverso dal mondo GIS e lavora a un livello leggermente inferiore.ERDDAP™riflette questo. In generale,ERDDAP™è progettato per funzionare principalmente con i dati (non mappe) e non vuole cambiare (ad esempio, riprogetto) quei dati. PerERDDAP™, i dati grigliati sono spesso/solitamente/preferibilmente associati ai valori lat lon e a una proiezione cilindrica, e non alcuni valori x,y di proiezione. In ogni caso,ERDDAP™non fa nulla con la proiezione dei dati; semplicemente passa i dati attraverso, come è, con la sua proiezione attuale, sulla teoria che una riproiezione è un cambiamento significativo ai dati eERDDAP™non vuole essere coinvolto con cambiamenti significativi. Inoltre, gli utenti successivi potrebbero ingenuamente riprogettare i dati di nuovo, che non sarebbe così buono come solo fare una riproiezione. (Quindi, se ilERDDAP™l'amministratore vuole offrire i dati in una diversa proiezione, fine; basta riprogettare i dati offline e offrire che come dataset diverso inERDDAP. Un sacco di dataset satellitari sono offerti come ciò che la NASA chiama Livello 2 (Scambio) e come Livello 3 (Proiezione equattangolare) versioni.) QuandoERDDAP™rende le mappe (direttamente o viaWMSo KML) ♪ERDDAP™Attualmente solo offre di fare mappe con la proiezione di carrée Equirectangular / Plate che, fortunatamente, è accettato dalla maggior parte dei programmi di mappatura.
Noi incoraggiamoERDDAP™amministratori per utilizzare alcuni altri software (NCO?Matlab? R? IDV? ...?) per riprogettare i dati su un geografico (Proiezione equirettangolare / piastra carrée) o altra proiezione cilindrica e servire quella forma dei dati inERDDAP™come dataset diverso. Questo è simile a quello che le persone fanno quando convertono i dati del livello 2 del satellite in dati di livello 3. Uno di questi strumenti èNCOche offre opzioni di estensione per la registrazione dei dati.
Speriamo cheERDDAP™avrà strumenti integrati per offrire mappe con altre proiezioni in futuro. Speriamo anche di avere legami migliori con il mondo del GIS in futuro (diverso dalla correnteWMSservizio) . È terribile che in questo mondo "moderno", i legami tra il CF/DAPil mondo e il mondo del GIS sono ancora così deboli. Entrambe queste cose sono nella lista "To Do". (Se si desidera aiutare, in particolare con la connessioneERDDAP™a MapServer, si prega di e-mail Chris. John a noaa.gov.)
Tipi di dati
ERDDAP™supporta i seguenti tipi di dati (i nomi sono sensibili al caso;'u'prefisso sta per "non firmato"; il numero molti dei nomi in altri sistemi è il numero di bit) :
byte
- byte ha firmato valori interi con una gamma di -128 a 127. In altri sistemi, questo è talvolta chiamato int8. Si chiama "tinyint" di SQL e Cassandra. ERDDAP™convertibooleanda alcune fonti (ad esempio, SQL e Cassandra) in byte inERDDAP™con un valore di 0=false, 1=true, e 127=missing\_value.
Ubyte
- Ubyte ha valori interi senza firma con un range da 0 a 255. In altri sistemi, questo è talvolta chiamato uint8.
breve
- breve ha firmato valori interi con una gamma di -32768 a 32767. In altri sistemi, questo è talvolta chiamato int16. Questo è chiamato "piccolo" di SQL e Cassandra.
noihort
- noihort ha valori interi senza firma con una gamma da 0 a 65535. In altri sistemi, questo è talvolta chiamato uint16.
In
- In ha firmato valori interi con una gamma di -2147483648 a 2147483647. In altri sistemi, questo è talvolta chiamato int32. Questo si chiama "integer|numerico (?) "di SQL e "int" di Cassandra.
U.
- U. ha valori interi senza firma con una gamma da 0 a 4294967295. In altri sistemi, questo è talvolta chiamato uint32.
lungo
- lungo ha firmato valori interi con una gamma di -9223372036854775808 a 9223372036854775807. In altri sistemi, questo è talvolta chiamato int64. Questo si chiama "bigint|numerico (?) "di SQL e "bigint" di Cassandra. Poiché molti tipi di file non supportano i dati lunghi, il loro utilizzo è scoraggiato. Quando possibile, utilizzare il doppio invece (vedi sotto) .
*
- ***** ha valori interi senza firma con una gamma da 0 a 18446744073709551615 In altri sistemi, questo è talvolta chiamato uint64. Poiché molti tipi di file non supportano i dati ulong, il loro uso è scoraggiato. Quando possibile, utilizzare il doppio invece (vedi sotto) .
galleggiante
- galleggiante è un galleggiante IEEE 754 con una gamma di circa +/- 3.402823466e+38. In altri sistemi, questo è talvolta chiamato float32. Questo si chiama "reale"|galleggiante (?) |decimale (?) |numerico (?) "di SQL e "float" di Cassandra. Il valore speciale NaN significa Not-a-Number. ERDDAP™converte i valori infiniti positivi e negativi in NaN.
doppio
- doppio è un IEEE 754 doppio con una gamma di circa +/- 1.7976931348623157E+308. In altri sistemi, questo è talvolta chiamato float64. Questo si chiama "doppia precisione|galleggiante (?) |decimale (?) |numerico (?) "di SQL e "doppio" di Cassandra. Il valore speciale NaN significa Not-a-Number. ERDDAP™converte i valori infiniti positivi e negativi in NaN.
carbone
- carbone è un singolo, 2 byte (16 bit) Unicode UCS-2 carattereda\u0000 (#) attraverso\uffff (#65535 #) . \uffffLa definizione è Not-a-Character, analoga ad un doppio valore di NaN. L'uso di char è scoraggiato perché molti tipi di file non supportano i carboni o supportano solo i carboni da 1 byte (vedi sotto) . Considera di usare String. Gli utenti possono utilizzare variabili di beneficenza per fare grafici.ERDDAP™convertirà i caratteri al loro numero di codice Unicode, che può essere utilizzato come dati numerici.
String
- String è una sequenza di 0 o più, 2 byte (16 bit) Unicode UCS-2 caratteri. ERDDAP™utilizza/interpreta una stringa 0-lunghezza come valore mancante.ERDDAP™non supporta una vera stringa null. La lunghezza massima teorica della stringa è 2147483647 caratteri, ma ci sono probabilmente vari problemi in vari luoghi anche con stringhe un po 'più corte. UsoERDDAP's String for SQL's carattere, varchar, carattere variabile, binario, varbinary, intervallo, array, multiset, xml, e qualsiasi altro tipo di dati del database che non si adatta in modo pulito con qualsiasi altroERDDAP™tipo di dati. UsoERDDAP's String for Cassandra's "text" e qualsiasi altro tipo di dati Cassandra che non si adatta in modo pulito con qualsiasi altroERDDAP™tipo di dati.
PrimaERDDAP™V2.10,ERDDAP™non ha supportato i tipi interi non firmati internamente e ha offerto un supporto limitato nei suoi lettori e scrittori di dati.
Limitazioni di tipo di dati
Si può pensareERDDAP™come sistema che ha set di dati virtuali, e che funziona leggendo i dati dalla fonte di un dataset in un modello di dati interno e scrivendo i dati a vari servizi (ad esempio,(OPeN)DAP♪WMS) e tipi di file in risposta alle richieste degli utenti.
- Ogni lettore di input supporta un sottoinsieme dei tipi di dati cheERDDAP™supporti. Così la lettura dei dati inERDDAPLa struttura dei dati interni non è un problema.
- Ogni produttore di output supporta anche un sottoinsieme di tipi di dati. Questo è un problema perchéERDDAPdeve spremere, per esempio, dati lunghi in tipi di file che non supportano i dati lunghi.
Qui di seguito sono le spiegazioni dei limiti (o nessuno) di vari scrittori di uscita e comeERDDAP™si occupa dei problemi. Tali complicazioni sono una parte intrinseca diERDDAPl'obiettivo di rendere interoperabili sistemi disparati.
ASCII
- ASCII (.csv,.tsv, ecc.) file di testo -
- Tutti i dati numerici sono scritti tramite la sua rappresentazione String (con valori di dati mancanti che appaiono come stringhe di 0-lunghezza) .
- Anche seERDDAP™scrive valori lunghi e ulong correttamente ai file di testo ASCII, molti lettori (ad esempio, programmi di foglio di calcolo) non può trattare correttamente con valori lunghi e ulong e invece convertirli in valori doppi (con perdita di precisione in alcuni casi) .
- I dati Char e String sono scritti tramite JSON Strings, che gestiscono tutti i caratteri Unicode (in particolare, i caratteri "insoliti" al di là di ASCII #127, ad esempio, il carattere Euro appare come "\u20ac") .
JSON
- JSON (.json♪.jsonlCSV, ecc.) file di testo -
- Tutti i dati numerici sono scritti tramite la sua rappresentazione String.
- I dati Char e String sono scritti come JSON Strings, che gestiscono tutti i caratteri Unicode (in particolare, i caratteri "insoliti" al di là di ASCII #127, ad esempio, il carattere Euro appare come "\u20ac") .
- I valori mancanti per tutti i tipi di dati numerici appaiono nulli.
.nc3 file
- .nc3 file non supportano in modo nativo alcun tipo di dati interi non firmati. Prima di CF v1.9, CF non ha supportato tipi interi non firmati. Per affrontare questo,ERDDAP™2.10+ segue lo standard NUG e aggiunge sempre un attributo "\_Unsigned" con un valore di "vero" o "falso" per indicare se i dati provengono da una variabile non firmata o non firmata. Tutti gli attributi interi sono scritti come attributi firmati (ad esempio, byte) con valori firmati (ad esempio, un ubyteactual\_rangeattributo con valori da 0 a 255, appare come attributo byte con valori da 0 a -1 (l'inverso del valore di complemento dei due del valore out-of-range). Non c'è modo facile di sapere quali (segnati) attributi interi devono essere letti come attributi non firmati.ERDDAP™supporta l'attributo "\_Unsigned" quando legge.nc3 file.
- .nc3 file non supportano i tipi di dati lunghi o lunghi.ERDDAP™si occupa di questo convertendoli temporaneamente in due variabili. I doppi possono rappresentare esattamente tutti i valori fino a +/- 9,007,199,254,740,992 che è 2^53. Questa è una soluzione imperfetta.Unidatarifiuta di fare un aggiornamento minore per.nc3 per affrontare questo e problemi connessi, citando.nc4 (un cambiamento importante) come soluzione.
- La specifica CF (prima della data) ha detto che supporta un tipo di dati di beneficenza, ma non è chiaro se char è destinato solo come i blocchi di costruzione di array di beneficenza, che sono efficacemente Strings. Le domande alla loro mailing list hanno fornito solo risposte confuse. A causa di queste complicazioni, è meglio evitare variabili di carbone inERDDAP™e usare variabili di stringa quando possibile.
- Tradizionalmente,.nc3 file supportati solo stringhe con codifica ASCII (7 bit, #0 - #127) caratteri. NUG (eERDDAP) estendere (a partire dal 2017) includendo l'attributo "\_Encoding" con un valore di "ISO-8859-1" (un'estensione di ASCII che definisce tutti i 256 valori di ogni carattere a 8 bit) o "UTF-8" per indicare come i dati String sono codificati. Altre codifiche possono essere legali ma scoraggiate.
.nc4 file
- .nc4 file supportano tuttiERDDAPi tipi di dati.
File NCCSV
I file NCCSV 1.0 non supportano i tipi di dati interi non firmati. File NCCSV 1.1+supporta tutti i tipi di dati interi non firmati.
DAP
- (OPeN)DAP (.das, .dds, .asc file ASCII e .dods file binari) - No.
- (OPeN)DAPmaniglie brevi, ushort, int, uint, galleggiante e doppi valori correttamente.
- (OPeN)DAPha un tipo di dati "byte" che definisce come non firmato, mentre storicamente, THREDDS eERDDAP™hanno trattato "byte" come firmato nel loro(OPeN)DAPservizi. Per affrontare meglio questo,ERDDAP™2.10+ segue lo standard NUG e aggiunge sempre un attributo "\_Unsigned" con un valore di "vero" o "falso" per indicare se i dati sono ciòERDDAP™chiama byte o ubyte. Tutti gli attributi byte e ubyte sono scritti come attributi "byte" con valori firmati (ad esempio, un ubyteactual\_rangeattributo con valori da 0 a 255, appare come attributo byte con valori da 0 a -1 (l'inverso del valore di complemento dei due del valore out-of-range). Non c'è modo facile di sapere quali attributi "byte" devono essere letti come attributi ubyte.
- (OPeN)DAPnon supporta lunghi firmati o non firmati.ERDDAP™si occupa di questo convertendoli temporaneamente in due variabili e attributi. I doppi possono rappresentare esattamente tutti i valori fino a 9,007,199,254,740,992 che è 2^53. Questa è una soluzione imperfetta.OPeNDAP (l'organizzazione) rifiuta di fare un aggiornamento minore perDAP2.0 per affrontare questo e problemi correlati, citandoDAP4 (un cambiamento importante) come soluzione.
- Perché?(OPeN)DAPnon ha alcun tipo di dati di beneficenza separato e tecnicamente supporta solo i caratteri ASCII 1 byte (#0 - #127) in Strings, le variabili di dati di beneficenza appariranno come stringhe lunghe 1-character in(OPeN)DAP.das, .dds e .dods risposte.
- Tecnicamente, il(OPeN)DAPla specifica supporta solo stringhe con caratteri codificati ASCII (#0 - #127) . NUG (eERDDAP) estendere (a partire dal 2017) includendo l'attributo "\_Encoding" con un valore di "ISO-8859-1" (un'estensione di ASCII che definisce tutti i 256 valori di ogni carattere a 8 bit) o "UTF-8" per indicare come i dati String sono codificati. Altre codifiche possono essere legali ma scoraggiate.
Tipo di dati
- A causa del povero supporto per lunghi, ulong e dati di beneficenza in molti tipi di file, scoraggiamo l'uso di questi tipi di dati inERDDAP. Quando possibile, utilizzare il doppio invece di lungo e lungo, e utilizzare String invece di carbone.
- Metadati - Perché(OPeN)DAP's .das e .dds risposte non supportano attributi lunghi o ulong o tipi di dati (e invece mostrare loro come doppie) , potresti invece voler usareERDDAPLa rappresentazione tabulare dei metadati come si vede nellahttp... Informazioni / datasetID Pagina web .html (per esempio, https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (che è anche possibile ottenere in altri tipi di file, ad esempio, .csv,.htmlTable♪.itx♪.json♪.jsonlCSV1♪.jsonlCSV♪.jsonlKVP♪.mat♪.nc♪.nccsv♪.tsv♪.xhtml) o.nccsvRisposta dei metadati (per esempio, https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata Anche se.nccsvI metadati sono disponibili solo per i set di dati tabulari) , entrambi supportano tutti i tipi di dati (in particolare, lungo, ulong e char) .
File multimediali
Non tutti i dati sono array di numeri o di testo. Alcuni dataset sono costituiti da o includono file multimediali, come immagini, audio e file video.ERDDAP™ha alcune caratteristiche speciali per rendere più facile per gli utenti di ottenere l'accesso ai file multimediali. E' un processo di due fasi:
- Rendere ogni file accessibile tramite il proprio URL, tramite un sistema che supporta le richieste dell'intervallo byte. Il modo più semplice per farlo è mettere i file in una directory cheERDDAP™ha accesso a. (Se sono in un contenitore come.zipfile, staccarli, anche se si può desiderare di offrire.zipfile anche agli utenti.) Allora, fai unEDDTableFromFileNamesdataset per rendere accessibili tali file tramiteERDDAP™, in particolare viaERDDAP'"files"sistema.
Tutti i file resi accessibili tramite EDDTableFromFileNames eERDDAP'"files"supporto di sistemabyte gamma richieste. Normalmente, quando un cliente (ad esempio, un browser) fa una richiesta a un URL, ottiene l'intero file come risposta. Ma con una richiesta di intervallo byte, la richiesta specifica una gamma di byte dal file, e il server restituisce solo quelle byte. Questo è importante qui perché i lettori audio e video nei browser funzionano solo se il file può essere accessibile tramite le richieste dell'intervallo byte.
Opzionale: Se si dispone di più di un set di dati con i file multimediali associati, è possibile fare solo un EDDTableFromFileNames che ha una sottocartella per ogni gruppo di file. Il vantaggio è che quando si desidera aggiungere nuovi file multimediali per un nuovo dataset, tutto quello che dovete fare è creare una nuova cartella e mettere i file in quella cartella. La cartella e i file verranno aggiunti automaticamente al dataset EDDTableFromFileNames.
- Opzionale: Se hai un set di dati che include riferimenti ai file multimediali, aggiungilo aERDDAP. Ad esempio, si può avere un file .csv con una riga per ogni volta che qualcuno ha visto una balena e una colonna che include il nome di un file di immagine relativo a tale avvistamento. Se il nome del file immagine è solo il nome del file, ad esempio, Img20141024T192403Z, non un URL completo, allora è necessario aggiungerefileAccessBase Url e/o fileAccessSuffixattributi ai metadati per questodataVariableche specifica la baseURL e il suffisso per quei nomi di file. Se hai reso i file accessibili tramite EDDTableFromFileNames, l'URL sarà nel modulo di base /erddap/files/ datasetID / Per esempio,
<att name="fileAccessBaseUrl">*someBaseURL*</a>
<att name="fileAccessSuffix">.png</a>
Se c'è un.zipo altro file contenitore con tutti i file multimediali relativi a una variabile di dati, si consiglia di rendere anche quel file accessibile agli utenti (vedi passo 1 sopra) e poi identificarlo con unfileAccessArchive Urattributo.
\[A partire daERDDAP™Voce principale:\]Se fai il primo passo sopra (o entrambi i passaggi) , allora quando un utente visualizza ilERDDAP™ "files"sistema per quel dataset (o chiede di vedere un sottoinsieme del dataset tramite un.htmlTablerichiesta, se hai fatto il secondo passo) ♪ERDDAP™mostrerà un'icona '?' a sinistra del nome del file. Se l'utente salta su quell'icona, vedrà un popup che mostra l'immagine, o un lettore audio, o un lettore video. I browser supportano solo un numero limitato di tipi di
- immagine (di solito .gif, .jpg, e .png) ♪
- audio (di solito .mp3, .ogg, e .wav) e
- file video (di solito .mp4, .ogv, e . webm) .
Il supporto varia con diverse versioni di diversi browser su diversi sistemi operativi. Quindi, se avete una scelta di quale tipo di file da offrire, ha senso offrire questi tipi.
Oppure, se un utente clicca sul nome del file mostrato su unERDDAP™pagina web, il loro browser mostrerà l'immagine, il file audio o video come una pagina web separata. Questo è per lo più utile per vedere un'immagine molto grande o un video scalato a schermo intero, invece di in un popup.
Lavorare con AWS S3 file
Servizio web Amazon (AWS) è un venditore dicloud computingservizi.S3è un sistema di archiviazione di oggetti offerto da AWS. Invece del sistema gerarchico di directory e file di un file system tradizionale (come un disco rigido nel tuo PC) , S3 offre solo "buchi" che tengono "oggetti" (noi li chiameremo"files") .
Per i file ASCII (ad esempio, .csv) ♪ERDDAP™può lavorare con i file nei secchi direttamente. L'unica cosa che devi fare è specificare il<fileDir> per il set di dati utilizzando un formato specifico per il secchio AWS, ad esempio, https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Non dovresti usare<cacheFromUrl> . Vedere di seguito per i dettagli.
Ma per i file binari (ad esempio,.nc, .grib, .bufr e.hdffile) , devi usare il<cacheFromUrl> sistema descritto di seguito.ERDDAP, netcdf-java (cheERDDAP™utilizza per leggere i dati da questi file) , e altri software di dati scientifici sono progettati per lavorare con i file in un file system tradizionale che offrelivello di bloccoaccesso ai file (che consente la lettura di pezzi di un file) , ma S3 offre sololivello di file (oggetto) accesso ai file (che permette solo di leggere l'intero file) . AWS offre un'alternativa a S3,Negozio di blocco elastico (EBS) ), che supporta l'accesso a livello di blocco ai file, ma è più costoso di S3, quindi è raramente utilizzato per la memorizzazione in massa di grandi quantità di file di dati. (Così quando la gente dice di memorizzare i dati nel cloud (S3) è economico, di solito è un confronto di mele arance.)
S3 Secchi
Il contenuto di un secchio. Le chiavi. Oggetti, delimitatori.
Tecnicamente, i secchi S3 non sono organizzati in una struttura di file gerarchici come un file system su un computer. Invece, i secchi contengono solo "oggetti" (file) , ognuno dei quali ha un "chiave" (un nome) . Un esempio di chiave in quel secchio noaa-goes17 è
ABI-L1b-RadC/2019/235/22/OR\\_ABI-L1b-RadC-M6C01\\_G17\\_s20192352201196\\_e20192352203569\\_c20192352204013.nc
L'URl corrispondente per quell'oggetto è
AWS supporta una piccola variazione nel modo in cui l'URL è costruito, maERDDAP™richiede questo formato specifico:
https://bucketName.s3.region.amazonaws.com/key
È pratica comune, come con questo esempio, far apparire i nomi chiave come un percorso gerarchico più un nome di file, ma tecnicamente non lo sono. Poiché è comune e utile,ERDDAP™tratta le chiavi con /'s come se fossero un percorso gerarchico più il nome del file, e questa documentazione li farà riferimento come tale. Se le chiavi di un secchio non usano /'s (ad esempio, una chiave come
ABI-Lib.2018.052.22.OR\_ABI-L1b-RadM2-M3C10\_G16\_s20180522247575ERDDAP™tratterà l'intera chiave come nome di file lungo.
Secchi privati e pubblici -- L'amministratore del secchio S3 può rendere pubblico o privato il secchio e il suo contenuto. Se pubblico, qualsiasi file nel secchio può essere scaricato da chiunque utilizzi l'URL per il file. Amazon ha unDati apertiprogramma che ospita i set di dati pubblici (compresi i dati daNOAA, NASA e USGS) gratuitamente e non addebita a nessuno di scaricare i file da quei secchi. Se un secchio è privato, i file nel secchio sono accessibili solo agli utenti autorizzati e AWS addebita una tassa (di solito pagato dal proprietario del secchio) per scaricare i file in un computer S3 non AWS.ERDDAP™può lavorare con i dati in secchi pubblici e privati.
AWS Credenziali
per far sì cheERDDAP™può leggere il contenuto di benne private, è necessario credenziali AWS e è necessario memorizzare un file credenziali nel luogo standard in modo daERDDAP™può trovare le informazioni. Vedere il SDK AWS perJavaDocumentazione 2.x:Impostare le credenziali di default. (L'opzione per memorizzare i valori comeJavaparametri della riga di comando in\[tomcat\]/bin/setenv.sh può essere una buona opzione.)
AWS /files/
- /files/ system -- TheERDDAP™ /files/ sistemaconsente agli utenti di scaricare i file sorgente per un dataset. Si consiglia di accendere questo per tutti i dataset con i file di origine perché molti utenti vogliono scaricare i file di origine originali.
- Se i file sono in un secchio S3 privato, la richiesta dell'utente di scaricare un file verrà gestita daERDDAP™, che leggerà i dati dal file e poi lo trasmetterà all'utente, aumentando così il carico sul vostroERDDAP™, usando la larghezza di banda in entrata e in uscita, e facendoti (ilERDDAP™amministratore) pagare la tassa di avanzamento dei dati a AWS.
- Se i file sono in un secchio S3 pubblico, la richiesta dell'utente di scaricare un file verrà reindirizzata all'URL AWS S3 per quel file, in modo che i dati non fluiscano attraversoERDDAP™, riducendo così il carico suERDDAP. E se i file sono in un Amazon Open Data (gratis) secchio pubblico, poi tu (ilERDDAP™amministratore) non dovrà pagare alcuna tassa di egresso dei dati a AWS. Così, c'è un grande vantaggio che serve i dati da pubblico (non privato) Secchi S3 e un enorme vantaggio per servire i dati da Amazon Open Data (gratis) Secchi.
ERDDAP™e AWS S3 Buckets
ERDDAP™e AWS S3 Buckets
Fortunatamente, dopo molto sforzo,ERDDAP™ha una serie di caratteristiche che permettono di affrontare i problemi inerenti al lavoro con l'accesso a livello di blocco di S3 ai file in modo ragionevolmente efficiente:
- \[Disclaimer: Lavorare con i secchi AWS S3 è molto lavoro in più. AWS è un enorme ecosistema di servizi e caratteristiche. C'è molto da imparare. Ci vuole tempo e fatica, ma è fattibile. Sii paziente e farai funzionare le cose. Cerca/chiedi aiuto
(Documentazione AWS, siti web comeStack Overflow, e il regolare
ERDDAP™opzioni di supporto) se/quando vi bloccate.\]
- Può essere difficile perfino scoprire la struttura della directory e i nomi dei file dei file in un secchio S3.ERDDAP™ha una soluzione per questo problema: EDDTableFromFileNames ha uno speciale\\\*dall'inizioopzione che consente di fare un EDDTableFromFileNames dataset che consente agli utenti di navigare il contenuto di un secchio S3 (e scaricare i file) tramite il dataset"files"opzione. C'è unesempio di questo di seguito.
- ERDDAP™può leggere i dati dafile di dati compressi esternamente, quindi va bene se i file su S3 vengono memorizzati come.gz♪.gzip♪.bz2, .Z, o altri tipi di file di dati compressi esternamente, che possono drammaticamente (2 - 20X) ridurre i costi di archiviazione dei file. Non c'è spesso alcuna penalità di tempo per l'utilizzo di file compressi esternamente, dal momento che il tempo salvato trasferendo un file più piccolo da S3 aERDDAPapprossimativamente bilancia il tempo extra necessario perERDDAP™decomprimere il file. Per utilizzare questa funzione, è sufficiente assicurarsi che il set di dati<fileNameRegex> consente il tipo di file compresso (ad esempio, aggiungendo (|.gz) alla fine del regex) .
- Per il caso più comune, dove hai unERDDAP™installato sul PC per il test/sviluppo e dove il dataset ha file di dati binari che vengono memorizzati come oggetti in un secchio S3, un approccio per ottenere il dataset inERDDAP™è:
-
Crea una directory sul tuo PC per tenere alcuni file di dati di prova.
-
Scarica due file di dati dalla sorgente alla directory appena creata.
-
UsoGenerareDatasetsXmlper generare il pezzo didatasets.xmlper il dataset basato sui due file di dati locali.
-
Verificare che tale dataset funzioni come desideratoDasDdse/o il tuo localeERDDAP.
I seguenti passaggi fanno una copia di quel dataset (che otterrà i dati dal secchio S3) su un pubblicoERDDAP.
-
Copia il pezzo didatasets.xmlper il dataset aldatasets.xmlper il pubblicoERDDAP™che servirà i dati.
-
Creare una directory sul pubblicoERDDAPIl disco rigido locale per contenere una cache di file temporanei. La directory non userà molto spazio su disco (vedi cacheSizeGB qui sotto) .
-
Modificare il valore del dataset<fileDir> tag in modo che punti alla directory appena creato (anche se la directory è vuota) .
-
Aggiungi uncachedall'Urltag che specifica il nome del secchio del dataset e il prefisso opzionale (i.e., directory) nella specificaAws S3 URL Formato cheERDDAP™richiede.
-
Aggiungi un [<cacheSizeGB>] (# Cachefromurl #) tag al set di dati xml (ad esempio, 10 è un buon valore per la maggior parte dei set di dati) per direERDDAP™per limitare la dimensione della cache locale (cioè, non cercare di nascondere tutti i file remoti) .
-
Vedi se funziona in pubblicoERDDAP. Nota che la prima voltaERDDAP™carica il dataset, ci vorrà molto tempo per caricare, perchéERDDAP™ha bisogno di scaricare e leggere tutti i file di dati.
-
Se il dataset è un'enorme raccolta di file di dati grigliati, questo richiederà molto tempo e sarà impraticabile. In alcuni casi, per i file di dati grigliati,ERDDAP™può estrarre le informazioni necessarie (ad esempio, il punto di tempo per i dati in un file di dati grigliato) dal nome del file ed evitare questo problema. VediAggregazione tramite Nome di file.
- Opzionalmente (ma soprattutto per EDDTableFromFiles datasets) , si può aggiungere unnPartitag al dataset da raccontareERDDAPutilizzare più di 1 thread quando si risponde alla richiesta di dati di un utente. Ciò minimizza gli effetti del ritardo che si verifica quandoERDDAP™legge i file di dati da (telecomando) Secchi AWS S3 nella cache locale e (Forse) decomprimendoli.
AWS S3 Dati aperti
Come parte diNOAA'Big Data Program♪NOAAha partnership con cinque organizzazioni, tra cui AWS, "per esplorare i potenziali vantaggi di memorizzare copie di osservazioni chiave e uscite di modelli nel Cloud per consentire il calcolo direttamente sui dati senza richiedere ulteriore distribuzione". AWS include i dataset che ottiene daNOAAcome parte del suo programma per offrire accesso pubblico a una grande collezione diDati aperti su AWS S3da qualsiasi computer, se si tratta di un'istanza di calcolo Amazon (un computer affittato) sulla rete AWS o il proprio PC su qualsiasi rete. L'esempio seguente presuppone che si sta lavorando con un set di dati accessibile pubblicamente.
Accedere ai file in un secchio AWS S3
Per un secchio dati S3 privato, il proprietario del secchio deve darvi accesso al secchio. (Vedere la documentazione AWS.)
In tutti i casi, avrete bisogno di un account AWS perché il SDK AWS perJava (cheERDDAP™utilizza per recuperare informazioni sul contenuto di un secchio) richiede le credenziali dell'account AWS. (più su questo sotto)
ERDDAP™può accedere solo ai secchi AWS S3 se si specifica il [<Condividi su Google (# Cachefromurl #) O<fileDir>) in un formato specifico:
https://bucketName.s3.aws-region.amazonaws.com/prefix/
dove
- Il secchioName è la forma corta del nome del secchio, ad esempio noa-goes17 .
- La regione aws, ad esempio, noi-est-1, è dalla colonna "Regione" in una delle tabelleAWS Service Endpointsdove si trova il secchio.
- Il prefisso è facoltativo. Se presente, deve finire con'/'.
Per esempio, https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Questo formato URL è una delle raccomandazioni AWS S3: vediAccedere a un secchioequesta descrizione dei prefissi.ERDDAP™richiede di combinare l'URL del secchio e il prefisso opzionale in un URL al fine di specificare<cacheFromUrl> (o<fileDir>) dove si trovano i file.
Test pubblico AWS S3 Secchi
Per i secchi pubblici, è possibile e dovrebbe testare l'URL del secchio della directory AWS S3 nel browser, ad esempio, https://noaa-goes17.s3.us-east-1.amazonaws.com Se l'URL del secchio è corretto e appropriato perERDDAP, restituirà un documento XML che ha (parziale) elenco dei contenuti di quel secchio. Purtroppo, l'URL completo (i.e., secchio URL più prefisso) cheERDDAP™vuole per un dato dataset non funziona in un browser. AWS non offre un sistema per navigare la gerarchia di un secchio facilmente nel browser. (Se non è corretto, si prega di e-mail Chris. John a Noaa.gov. In caso contrario, Amazon, si prega di aggiungere il supporto per questo!)
Visualizzare il contenuto di un secchio
Secchi S3 spesso contengono un paio di categorie di file, in un paio di sottodirectory pseudo, che potrebbero diventare un paio diERDDAP™Datasets. Per fare ilERDDAP™datasets, è necessario conoscere la directory di partenza per<cacheFromUrl> (o<fileDir>) e il formato dei nomi dei file che identificano quel sottoinsieme di file. Se si tenta di visualizzare l'intero contenuto di un secchio in un browser, S3 vi mostrerà solo i primi 1000 file, che è insufficiente. Attualmente, il modo migliore per visualizzare tutto il contenuto di un secchio è quello di fare unEDDTableFromFileNamesset di dati (sul tuo PCERDDAP™e/o sul tuo pubblicoERDDAP) , che ti dà anche un modo semplice per navigare la struttura della directory e scaricare i file. The<fileDir> per questo sarà l'URL che hai fatto sopra, ad esempio, https://noaa-goes17.s3.us-east-1.amazonaws.com .\[Perché AWS S3 non offre un modo semplice e veloce per chiunque di farlo senza un account AWS?\]Si noti che quando faccio questo sul mio PC su una rete non-Amazon, sembra che Amazon rallenta la risposta a un trickle (circa 100 (?) file per chunk) dopo i primi pezzi (di 1000 file per pezzo) sono scaricati. Dal momento che i secchi possono avere un numero enorme di file (noaa-goes17 ha 26 milioni) , ottenere tutti i contenuti di un secchio può prendere EDDTableFromFileNames diverse ore (Ad esempio, 12!) per finire.\[Amazon, è così?!\]
Fare un EDDTable FromFileNames Dataset con un secchio AWS S3
Se si dispone di un nome di secchio, ma non hanno già un elenco di file nel secchio S3 o il prefisso che identifica la posizione dei file rilevanti nel secchio, utilizzare le istruzioni qui sotto per fare un EDDTableFromFileNames dataset in modo da poter navigare la gerarchia directory del secchio S3 tramiteERDDAP'"files"sistema.
- Aprire un account AWS ERDDAP™utilizza ilAWS SDK perJavaper ottenere informazioni di secchio da AWS, quindi è necessariocreare e attivare un account AWS. E' un bel lavoro, con un sacco di cose da imparare.
- Metti le credenziali AWS doveERDDAP™può trovarli. Seguire le istruzioniImpostare Credenziali AWS e Regione per lo SviluppoCosìERDDAP™ (specificamente, il SDK AWS perJava) sarà in grado di trovare e utilizzare le credenziali AWS. SeERDDAP™non riesci a trovare le credenziali, vedrai un Java.lang. IllegalArgumentException: il file del profilo non può essere un errore nullERDDAPIl file log.txt.
Presa per Linux e Mac OS: il file delle credenziali deve essere nella home directory dell'utente che esegue Tomcat (eERDDAP) (per questo paragrafo, assumiamo user=tomcat) in un file chiamato ~/.aws/credentials . Non presumere che ~ è /home/tomcat -- effettivamente utilizzare cd ~ per scoprire dove il sistema operativo pensa ~ per user=tomcat è. Crea la directory se non esiste. Inoltre, dopo aver messo in atto il file delle credenziali, assicurarsi che l'utente e il gruppo per il file siano tomcat e quindi utilizzare le credenziali chmod 400 per assicurarsi che il file sia in sola lettura per user=tomcat.
- Creare l'URL del secchio nelformato cheERDDAP™richiedePer esempio, https://noaa-goes17.s3.us-east-1.amazonaws.com e (per secchi pubblici) provarlo in un browser per assicurarsi che ritorni un documento XML che ha una lista parziale del contenuto di quel secchio.
- UsoGenerareDatasetsXmlper creare unEDDTableFromFileNamesdataset:
-
Per la directory di avvio, utilizzare questa sintassi: \\. daOnTheFly, * per esempio, \*\**dall'inizio, https://noaa-goes17.s3.us-east-1.amazonaws.com/
-
Nome file regex? .
-
Ricorrente? vero
-
ricarica EveryNMinutes? 10080
-
Istituzione?NOAA
-
Riepilogo? niente (ERDDAP™creerà automaticamente un riassunto decente.)
-
titolo? niente (ERDDAP™creerà automaticamente un titolo decente.) Come al solito, è necessario modificare l'XML risultante per verificare la correttezza e apportare miglioramenti prima del blocco dei set di dati utilizzandolo indatasets.xml.
-
- Se si seguono le istruzioni sopra e caricare il dataset inERDDAP, hai creato un dataset EDDTableFromFiles. Come esempio, e per rendere più facile per chiunque di navigare e scaricare i file dai secchi AWS Open Data, abbiamo creato EDDTableFromFileNames datasets (vedere l'elenco a
https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ ) per quasi tuttiAWS S3 Secchi di dati aperti.
\[I pochi secchi che non abbiamo incluso hanno un gran numero di file nella directory root (più che può essere scaricato in una quantità ragionevole di tempo) , o non consentire l'accesso pubblico (Non dovrebbero essere tutti pubblici?) , o sono Secchi di Paga di Richiesta (ad esempio, Sentinel) .\]
Se fai clic su"files"link per uno di questi set di dati, è possibile sfogliare l'albero della directory e i file in quel secchio S3. A causa della via\\\*dall'OnTheFly EDDTableFromFiles funziona, questi elenchi di directory sono sempre perfettamente aggiornati perchéERDDAP™Li mette in moto. Se fai clic sull'albero della directory su un nome del file reale e fai clic sul nome del file,ERDDAP™reindirizza la tua richiesta a AWS S3 in modo da poter scaricare il file direttamente da AWS. Allora puoi ispezionare quel file.
Problemi? Se il tuo EDDTableFromFiles non verrà caricatoERDDAP™ (o DasDds) , guarda nel file log.txt per un messaggio di errore. Se vedi un Java.lang. IllegalArgumentException: il file del profilo non può essere un errore nullo, il problema è che il SDK AWS perJava (usato daERDDAP) non trova il file delle credenziali. Vedere le istruzioni delle credenziali sopra.
È spiacevole che AWS non permetta semplicemente alle persone di utilizzare un browser per visualizzare il contenuto di un secchio pubblico.
Poi si può fareERDDAP™datasets che danno agli utenti l'accesso ai dati nei file.
Vedere le istruzioni inERDDAP™e S3 Buckets (sopra) .
Per il campione EDDTableFromFileNames dataset che hai fatto sopra, se si fa un po 'in giro con la directory e i nomi di file nell'albero della directory, diventa chiaro che i nomi delle directory di livello superiore (ad esempio, ABI-L1b-RadC) corrisponde a quello cheERDDAP™chiamerebbe set di dati separati. Il secchio con cui lavori può essere simile. Si potrebbe quindi perseguire la creazione di set di dati separati inERDDAP™per ciascuno di questi set di dati, utilizzando, ad esempio,
https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
come<cacheFromUrl>. Purtroppo, per questo esempio particolare, i dataset nel secchio sembrano tutti essere set di dati di livello 1 o livello 2, cheERDDAP™ non è particolarmente buono a, perché il dataset è una raccolta più complicata di variabili che utilizzano dimensioni diverse.
File NcML
I file NcML consentono di specificare le modifiche on-the-fly a una o più sorgenti originaliNetCDF (v3 o v4) .nc, .grib, .bufr, o.hdf (v4 o v5) file, e poi hannoERDDAP™tratta il.nci file ml come i file sorgente.ERDDAP™i set di dati accetteranno.ncfile ml ogni volta.nci file sono attesi. I file NcML Devono avere l'estensione.ncml. Vedere laUnidataDocumentazione NcML. NcML è utile perché si può fare alcune cose con esso (ad esempio, apportando diverse modifiche a diversi file in una raccolta, incluso l'aggiunta di una dimensione con un valore specifico a un file) che non puoi fareERDDAP'datasets.xml.
- Modifiche a un.ncl'ultimo tempo modificato del file ml causerà il caricamento del file ogni volta che il dataset viene ricaricato, ma le modifiche al sottostante.nci file di dati non saranno notati direttamente.
- Punti positivi: NcML is\*Molto bene.\*sensibile all'ordine di alcuni elementi nel file NcML. Pensa a NcML come specificare una serie di istruzioni nell'ordine specificato, con l'intenzione di cambiare i file sorgente (lo stato all'inizio/inizio del file NcML) nei file di destinazione (lo stato alla fine/in basso del file NcML) .
Un'alternativa a NcML è ilNetCDFOperatori (NCO) . La grande differenza è che NcML è un sistema per fare cambiamenti sul volo (in modo che i file sorgente non siano modificati) , mentreNCOpuò essere utilizzato per apportare modifiche (o nuove versioni di) I file. EntrambiNCOe NcML sono molto, molto flessibile e consentono di fare quasi qualsiasi cambiamento si può pensare ai file. Per entrambi, può essere difficile capire esattamente come fare quello che si desidera fare -- controllare il web per esempi simili. Entrambi sono strumenti utili per la preparazione di netCDF eHDFfile da utilizzareERDDAP, in particolare per apportare modifiche al di là di quantoERDDAPIl sistema di manipolazione puo' fare.
Esempio #1: Aggiungere una dimensione temporale con un valore unico Ecco un.ncfile ml che crea una nuova dimensione esterna (tempo, con 1 valore: 1041379200) e aggiunge quella dimensione alla variabile pic nel file denominato 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>
Esempio #2: Cambiare un Valore Tempo esistente A volte la fonte.ncfile ha già una dimensione del tempo e il valore del tempo, ma il valore è errato (per i tuoi scopi) . Questo.ncil file ml dice: per il file di dati denominato ""19810825230030-NCEI...", per la variabile di dimensione"time", impostare l'attributo unità di essere 'secondi dal 1970-01-01T00:00:00Z' e impostare il valore di tempo di essere 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>
NetCDFOperatori (NCO)
"Gli operatori netCDF (NCO) compongono una dozzina di programmi standalone, linea di comando che prendono netCDF\[v3 o v4\]♪HDF \[v4 o v5\]♪\[.grib, .bufr,\]e/oDAPfile come input, quindi utilizzare (ad esempio, derivano nuovi dati, statistiche di calcolo, stampa, iperslab, manipolano i metadati) e l'output dei risultati a schermo o file in formati di testo, binario o netCDF.NCOaiuta l'analisi dei dati scientifici grigliati. Lo stile delle copertureNCOconsente agli utenti di manipolare e analizzare i file in modo interattivo, o con script espressivi che evitano alcuni overhead di ambienti di programmazione di livello superiore." (dalNCOhomepage) .
Un'alternativa aNCOèNCML. La grande differenza è che NcML è un sistema per fare cambiamenti sul volo (in modo che i file sorgente non siano modificati) , mentreNCOpuò essere utilizzato per apportare modifiche (o nuove versioni di) I file. EntrambiNCOe NcML sono molto, molto flessibile e consentono di fare quasi qualsiasi cambiamento si può pensare ai file. Per entrambi, può essere difficile capire esattamente come fare quello che si desidera fare -- controllare il web per esempi simili. Entrambi sono strumenti utili per la preparazione di netCDF eHDFfile da utilizzareERDDAP, in particolare per apportare modifiche al di là di quantoERDDAPIl sistema di manipolazione puo' fare.
Per esempio, è possibile utilizzareNCOper rendere le unità del tempo variabile coerente in un gruppo di file in cui non erano coerenti originariamente. Oppure, puoi usareNCOda applicarescale\_factoreadd\_offsetin un gruppo di file dovescale\_factoreadd\_offsethanno valori diversi in diversi file sorgente. (Oppure, ora puoi occuparti di questi problemiERDDAP™viaEDDGridDaNcFilesUnpacked, che è una varianteEDDGridFromNcFiles che disacco i dati imballati e standardizza i valori di tempo a basso livello al fine di affrontare un file di raccolta che hanno diversiscale\_factoreadd\_offset, o diverse unità temporali.)
NCOè Software Libero e Open Source che utilizzaGPL 3.0La patente.
Esempio #1: rendere le unità coerenti
EDDGridDaFiles ed EDDTable Da File insistere che le unità per una determinata variabile siano identiche in tutti i file. Se alcuni dei file sono banalmente (non funzionale) diversi da altri (ad esempio, unità temporali di
"secondi dal 1970-01-01 00:00:00:00 UTC" contro
"seconds since 1970-01-01T00:00:00Z"# Potresti usare #NCO'Ncatted. cambiare le unità in tutti i file per essere identici con
nco/ncatted -a unit,time,o,c,'seconds from 1970-01-01T00:00:00:00Z' \*.nc
\[Per molti problemi come questo in EDDTableDa... File datasets, è ora possibile utilizzarestandardizzare Cosa?per direERDDAPstandardizzare i file sorgente in cui vengono lettiERDDAP.\]
Limiti alla dimensione di un Dataset
Vedrete molti riferimenti a "2 miliardi" di seguito. Più precisamente, questo è un riferimento a 2,147,483,647 (2.31-1) , che è il valore massimo di un intero a 32 bit firmato. In alcune lingue del computer, ad esempioJava (cheERDDAP™è scritto in) , questo è il più grande tipo di dati che può essere utilizzato per molte strutture di dati (per esempio, la dimensione di un array) .
Per valori di stringa (per esempio, per nomi variabili, nomi di attributo, valori di attributo String e valori di dati di stringa) , il numero massimo di caratteri per String inERDDAP™- 2 miliardi. Ma in quasi tutti i casi, ci saranno problemi piccoli o grandi se uno String supera una dimensione ragionevole (ad esempio, 80 caratteri per nomi e nomi di attributo variabili e 255 caratteri per la maggior parte dei valori di attributo String e valori di dati) . Ad esempio, le pagine web che visualizzano nomi variabili lunghi saranno goffamente larghe e i nomi variabili lunghi saranno troncati se superano il limite del tipo di file di risposta.
Per i set di dati grigliati:
- Il numero massimo diaxisVariables è di circa 2 miliardi. Il numero massimo didataVariables è di circa 2 miliardi. Ma se un dataset ha >100 variabili, sarà ingombrante per gli utenti da utilizzare. E se un dataset ha >1 milioni di variabili, il server avrà bisogno di un sacco di memoria fisica e ci saranno altri problemi.
- La dimensione massima di ogni dimensione (axisVariable) è ~2 miliardi di valori.
- Credo che il numero totale massimo di cellule (il prodotto di tutte le dimensioni) è illimitato, ma può essere ~9e18.
Per set di dati tabulari:
- Il numero massimo didataVariables è di circa 2 miliardi. Ma se un dataset ha >100 variabili, sarà ingombrante per gli utenti da utilizzare. E se un dataset ha >1 milioni di variabili, il server avrà bisogno di un sacco di memoria fisica e ci saranno altri problemi.
- Il numero massimo di fonti (per esempio, file) che può essere aggregato è ~2 miliardi.
- In alcuni casi, il numero massimo di righe da una fonte individuale (per esempio, un file, ma non un database) è ~2 miliardi di file.
- Non credo ci siano altri limiti.
Per i set di dati grigliati e tabulari, ci sono alcuni limiti interni sulla dimensione del sottoinsieme che possono essere richiesti da un utente in una singola richiesta (spesso legato a >2 miliardi di qualcosa o ~9e18 di qualcosa) , ma è molto più probabile che un utente colpirà i limiti specifici del tipo di file.
- NetCDFversione 3.nci file sono limitati a 2GB byte. (Se questo è davvero un problema per qualcuno, fammi sapere: Potrei aggiungere il supporto perNetCDFversione 3.ncEstensione a 64 bit oNetCDFVersione 4, che aumenterebbe significativamente il limite, ma non infinitamente.)
- Browser crash dopo solo ~500MB di dati, quindiERDDAP™limita la risposta.htmlTablerichieste a ~400MB di dati.
- Molti programmi di analisi dei dati hanno limiti simili (per esempio, la dimensione massima di una dimensione è spesso ~2 miliardi di valori) , quindi non c'è motivo di lavorare duramente per aggirare i limiti specifici del tipo di file.
- I limiti specifici del tipo di file sono utili in quanto impediscono richieste ingenue di quantità veramente enormi di dati (per esempio, "darmi tutto questo dataset" quando il dataset ha 20TB di dati) , che richiederebbe settimane o mesi per scaricare. Più a lungo il download, più probabilmente fallirà per una varietà di motivi.
- I limiti specifici del tipo di file sono utili in quanto costringono l'utente a trattare con sottoinsiemi di dimensioni ragionevoli (per esempio, trattare con un grande dataset grigliato tramite file con dati da un punto di volta ogni) .
Passare a ACDD-1.3
Noi (in particolareGenerareDatasetsXml) attualmente consigliamoVersione ACDD 1.3, che è stato ratificato all'inizio del 2015 e che è denominato "ACDD-1.3" nell'attributo delle Convenzioni globali. Prima diERDDAP™versione 1.62 (pubblicato nel giugno 2015) ♪ERDDAP™usato/ricomposto l'originale, versione 1.0, delNetCDFConvegno Attributo per Dataset Discoveryche è stato indicato come "UnidataDataset Discovery v1.0" nelle Convenzioni globali eMetadata\_Conventionsattributi.
Se i tuoi set di dati utilizzano le versioni precedenti di ACDD, noi RECOMMEND che si passa a ACDD-1.3. Non e' difficile. ACDD-1.3 è altamente compatibile con la versione 1.0. Per passare, per tutti i set di dati (eccettoEDDGridDa Erddap e EDDTable DaErddap datasets) :
- Rimuovere il nuovo deprecato globaleMetadata\_Conventionsattributo aggiungendo (o modificando l'esistenteMetadata\_Conventionsattributo)
<att name="Metadata\\_Conventions">null</att>
a livello globale del dataset<addAttributes>. 2. Se il dataset ha un attributo Conventions nel mondo<addAttributes>, cambiare tutto "UnidataDataset Discovery v1.0" riferimenti a "ACDD-1.3". Se il dataset non ha un attributo Conventions nel mondo<addAttributes>, quindi aggiungere uno che si riferisce a ACDD-1.3. Per esempio,
<att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>
3. Se il dataset ha un livello globalestandard\_name\_vocabularyattributo, si prega di modificare il formato del valore a, ad esempio,
<att name="standard\\_name\\_vocabulary">CF Standard Name Table v65</att>
Se il riferimento è a una versione precedente dellaTabella dei nomi standard CF. è probabilmente una buona idea passare alla versione attuale (65, come scriviamo questo) , poiché vengono aggiunti nuovi nomi standard a quella tabella con versioni successive, ma i vecchi nomi standard sono raramente deprecati e mai rimossi. 4. Anche se ACDD-1.0 includeva attributi globali percreator\_name♪creator\_email♪creator\_url♪GenerareDatasetsXmlnon li ha aggiunti automaticamente fino a qualche volta intornoERDDAP™v1.50. Si tratta di informazioni importanti:
- creator\_nameconsente agli utenti di conoscere/citare il creatore del dataset.
- creator\_emaildice agli utenti l'indirizzo email preferito per contattare il creatore del dataset, ad esempio se hanno domande sul dataset.
- creator\_urldà agli utenti un modo per saperne di più sul creatore.
- ERDDAP™utilizza tutte queste informazioni quando si generano documenti metadati FGDC e ISO 19115-2/19139 per ogni dataset. Questi documenti sono spesso utilizzati da servizi di ricerca esterni.
Si prega di aggiungere questi attributi al dataset globale<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>
Tutto qui. Spero non sia stato troppo difficile.
Zar
A partire dalla versione 2.25ERDDAP™può leggere locale File Zarr utilizzandoEDDTableFromNcFileseEDDGridDa NcFiles.
(A partire da agosto 2019) Possiamo facilmente sbagliare, ma non siamo ancora convinti cheZar, o sistemi simili che rompe i file di dati in piccoli pezzi, sono grandi soluzioni al problema diERDDAP™dati di lettura memorizzati in servizi cloud come Amazon AWS S3. Zarr è una grande tecnologia che ha mostrato la sua utilità in una varietà di situazioni, non siamo sicuri cheERDDAP+S3 sarà una di quelle situazioni. Per lo più stiamo dicendo: prima di correre per fare lo sforzo per memorizzare tutti i nostri dati in Zarr, facciamo alcuni test per vedere se è in realtà una soluzione migliore.
I problemi di accesso ai dati nel cloud sono latenza (il ritardo per ottenere i dati) e accesso a livello di file (piuttosto che l'accesso a livello di blocco) . Zarr risolve il problema di accesso a livello di file, ma non fa nulla sulla latenza. Rispetto al semplice download del file (così può essere letto come file locale con accesso a livello di blocco) , Zarr può anche esacerbare il problema di latenza perché, con Zarr, la lettura di un file ora comporta una serie di diverse chiamate per leggere diverse parti del file (ciascuno con il proprio lag) . Il problema della latenza può essere risolto parallelizzando le richieste, ma è una soluzione di livello superiore, non dipendente da Zarr.
E con Zarr (come con database relazionali) , perdiamo la convenienza di avere un file di dati essere un semplice, singolo file che è possibile verificare facilmente l'integrità di, o fare / scaricare una copia di.
ERDDAP™ (a partire da v2) ha un sistema per mantenere una cache locale di file da un'origine URL (ad esempio, S3) (v.<cacheFromUrl> e<cacheMaxGB>] (# Cachefromurl #) ). E il nuovo [<) (#Nthreads) dovrebbe ridurre al minimo il problema di latenza parallelizzando il recupero dei dati ad un livello elevato.<cacheFromUrl> sembra funzionare molto bene per molti scenari. (Non siamo sicuri di quanto benefico<nThreads> è senza ulteriori test.) Ammettiamo che non abbiamo fatto test di temporizzazione su un'istanza AWS con una buona connessione di rete, ma abbiamo testato con successo con varie fonti di URL remote di file. EERDDAP'<cacheFromUrl> funziona con qualsiasi tipo di file di dati (ad esempio,.nc♪.hdf,.jsonlCSV) , anche se compressa esternamente (ad esempio,.gz) , senza modifiche ai file (ad esempio, riscrivendoli come collezioni Zarr) .
È probabile che diversi scenari favoriranno diverse soluzioni, ad esempio, solo bisogno di leggere parte di un file una volta (Zarr vincerà) , vs. bisogno di leggere tutti i file una volta, vs. bisogno di leggere parte o tutti i file ripetutamente (<cacheFromUrl> vincerà).
Per lo più stiamo dicendo: prima di correre per fare lo sforzo per memorizzare tutti i nostri dati in Zarr, facciamo alcuni test per vedere se è in realtà una soluzione migliore.
-
- No.
Elenco dei tipi Datasets
Se hai bisogno di aiuto per scegliere il tipo di dataset giusto, vediScegliere il tipo Dataset.
I tipi di dataset rientrano in due categorie. (Perche'?)
EDDGrid
- EDDGrid datasets gestiscono dati grigliati.
- InEDDGriddataset, le variabili di dati sono array multidimensionali di dati.
- C'è una variabile di asse per ogni dimensione. Le variabili di asse devono essere specificate nell'ordine in cui le variabili di dati le utilizzano.
- InEDDGriddatasets, tutte le variabili di dati (Condividi) tutte le variabili dell'asse. (Perche'? E se non lo facessero?)
- Valori di Dimensione Ordinati - In tuttoEDDGridset di dati, ogni dimensione DEVE essere in ordine ordinato (salire o scendere) . Ciascuno può essere distanziato in modo irregolare. Non ci possono essere legami. Questo è un requisito delCF metadati standard. Se i valori di qualsiasi dimensione non sono in ordine ordinato, il dataset non verrà caricato eERDDAP™identificherà il primo valore non selezionato nel file di registro, BigParentDirectory /logs/log.txt .
Alcune sottoclassi hanno restrizioni aggiuntive (in particolare,EDDGridAggregateExistingDimension richiede che la dimensione esterna (più sinistra, prima) sia ascendente.
I valori di dimensione non assortiti indicano quasi sempre un problema con il dataset sorgente. Questo più comunemente si verifica quando un file misnamed o inappropriato è incluso nell'aggregazione, che porta ad una dimensione temporale non assortita. Per risolvere questo problema, vedere il messaggio di errore nelERDDAP™log.txt file per trovare il valore temporale offensivo. Quindi guardare nei file sorgente per trovare il file corrispondente (o uno prima o uno dopo) non appartiene all'aggregazione.
- Vedere la descrizione più completa dellaEDDGridmodello di dati.
- TheEDDGridi tipi di dataset sono:
- EDDGridDa AudioFilesaggrega i dati da un gruppo di file audio locali.
- EDDGridDamascogestisce i dati grigliati daDAPserver.
- EDDGridDaEDDTableconsente di convertire un set di dati tabulari in un set di dati grigliato.
- EDDGridDa Erddapgestisce i dati grigliati da un telecomandoERDDAP.
- EDDGridDa Etopogestisce solo i dati di topografia ETOPO integrati.
- EDDGridDa Filiè la superclasse di tuttiEDDGridDa... cinque classi.
- EDDGridDaMergeIRFilesaggrega i dati di un gruppo di MergeIR locale.gzfile.
- EDDGridDa NcFilesaggrega i dati da un gruppo di localiNetCDF (v3 o v4) .nce file correlati.
- EDDGridDaNcFilesUnpackedè una variante seEDDGridFromNcFiles che aggrega anche i dati di un gruppo di localiNetCDF (v3 o v4) .nce file correlati, cheERDDAP™disacco a basso livello.
- EDDGridLonPM180modifica i valori di longitudine di un bambinoEDDGridin modo che siano nella gamma -180 a 180.
- EDDGridLon0360modifica i valori di longitudine di un bambinoEDDGridin modo che siano nella gamma da 0 a 360.
- EDDGridSideBySideaggregati due o piùEDDGridset di dati fianco a fianco.
- EDDGridAggregateExistingDimensionaggregati due o piùEDDGriddataset, ognuno dei quali ha una diversa gamma di valori per la prima dimensione, ma identici valori per le altre dimensioni.
- EDDGridCopiapuò fare una copia locale di un altroEDDGrid's dati e serve dati dalla copia locale.
- TuttiEDDGriddatasets supporta un'impostazione nThreads, che diceERDDAP™quanti thread da utilizzare quando si risponde a una richiesta. Vedi ilnPartidocumentazione per i dettagli.
EDDTable
- EDDTable i dataset gestiscono i dati tabulari.
- I dati tabulari possono essere rappresentati come una tabella simile al database con righe e colonne. Ogni colonna (una variabile di dati) ha un nome, un insieme di attributi e memorizza solo un tipo di dati. Ogni riga ha un'osservazione (o gruppo di valori correlati) . La fonte di dati può avere i dati in una diversa struttura dei dati, una struttura dei dati più complicata e/o più file di dati, maERDDAP™deve essere in grado di adulare i dati di origine in una tabella simile al database per presentare i dati come set di dati tabulari agli utenti diERDDAP.
- Vedere la descrizione più completa dellaModello di dati EDDTable.
- I tipi di dataset EDDTable sono:
- EDDTableFromAllDatasetsè un dataset di livello superiore che ha informazioni su tutti gli altri set di dati nel vostroERDDAP.
- EDDTableFromAsciiFilesaggrega i dati dai file di dati tabulari ASCII virgola-, tab-, semicolon- o separati dallo spazio.
- EDDTableFromAsciiServiceè la superclasse di tutte le classi EDDTableFromAsciiService.
- EDDTableFromAsciiServiceNOSgestisce i dati da alcuni deiNOAAServizi web NOS.
- EDDTableFromAudioFilesaggrega i dati da un gruppo di file audio locali.
- EDDTEDD OhsXmlFilesaggrega i dati da un insieme di Stazione Meteo Automatica (AWS) File XML.
- EDDTable FromCassandragestisce i dati tabulari da una tabella Cassandra.
- EDDTableFromColumnarAsciiFilesaggrega i dati dai file di dati tabular ASCII con colonne di dati a larghezza fissa.
- EDDTableFromDapSequenzagestisce i dati tabulari daDAPserver di sequenza.
- EDDTableDatabasegestisce i dati tabulari da una tabella di database.
- EDDTEDDEDDGridconsente di creare un dataset EDDTable da unEDDGridDataset.
- EDDTableFromErddapgestisce i dati tabulari da un telecomandoERDDAP.
- EDDTableFromFileNamescrea un set di dati da informazioni su un gruppo di file nel file system del server, ma non serve dati dall'interno dei file.
- EDDTableFromFilesè la superclasse di tutti EDDTableDa...Files classi.
- EDDTableDaHttpGetèERDDAP's solo sistema per l'importazione di dati e l'esportazione di dati.
- EDDTEDDHyraxFile (DEPRECATE) aggrega i dati da file con diverse variabili con dimensioni condivise servite da unHyrax OPeNDAPserver.
- EDDTableFrom non validoaggrega i dati daNetCDF (v3 o v4) .ncfile che utilizzano una specifica, non valida, variante del CF DSG Contiguous Ragged Array (CRA) file. Anche seERDDAP™supporta questo tipo di file, è un tipo di file non valido che nessuno dovrebbe iniziare a usare. I gruppi che attualmente utilizzano questo tipo di file sono fortemente incoraggiati ad utilizzareERDDAP™generare file CF DSG CRA validi e smettere di utilizzare questi file.
- EDDTableFromJsonlCSVFilesaggrega i dati daJSON Linee file CSV.
- EDDTableFromMultidimNcFilesaggrega i dati daNetCDF (v3 o v4) .ncfile con diverse variabili con dimensioni condivise.
- EDDTableFromNcFilesaggrega i dati daNetCDF (v3 o v4) .ncfile con diverse variabili con dimensioni condivise. È bene continuare a utilizzare questo tipo di dataset per i set di dati esistenti, ma per i nuovi set di dati si consiglia di utilizzare EDDTableFromMultidimNcFiles invece.
- EDDTableFromNcCFFilesaggrega i dati daNetCDF (v3 o v4) .ncfile che utilizzano uno dei formati di file specificati dalCFU Geometrie di smorzamento discreto (DSG) convenzioni. Ma per i file che utilizzano una delle varianti multidimensionali CF DSG, utilizzareEDDTableFromMultidimNcFilesInvece.
- EDDTableFromNccsvFilesaggrega i dati daNCCSVFile ASCII .csv.
- EDDTableFromNOS (DEPRECATE) gestisce i dati tabulari dai server XML NOS.
- EDDTable FromOBISgestisce i dati tabulari dai server OBIS.
- EDDTableFromParquetFilesgestisce i dati daParquet.
- EDDTEDDSOSgestisce i dati tabulari daSOSserver.
- EDDTableFromThreddsFiles (DEPRECATE) aggrega i dati da file con diverse variabili con dimensioni condivise servite da unTHREDOPeNDAPserver.
- EDDTEDDWFSFile (DEPRECATE) fa una copia locale di tutti i dati da unArcGISMappaServerWFSserver in modo che i dati possano essere ri-servati rapidamente aERDDAP™utenti.
- EDDTableAggregateRowspuò creare un set di dati EDDTable da un gruppo di set di dati EDDTable.
- EDDTableCopypuò fare una copia locale di molti tipi di set di dati EDDTable e quindi conservare i dati rapidamente dalla copia locale.
-
- No.
Descrizioni dettagliate dei tipi di Dataset
EDDGridDamasco
EDDGridDamasco maniglie variabili di griglia daDAPserver.
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. È possibile raccogliere le informazioni che è necessario modificare che o creare il proprio XML per unEDDGridFromDap dataset guardando i file DDS e DAS del set di dati di origine nel tuo browser (aggiungendo .das e .dds alsourceUrl, per esempio, https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .
- EDDGridFromDap può ottenere dati da qualsiasi variabile multidimensionale da unaDAPserver dati. (Negli episodi precedenti...EDDGridFromDap era limitato alle variabili designate come "grid", ma non è più un requisito.)
- Valori di Dimensione Ordinati - I valori per ogni dimensione DEVE essere in ordine ordinato (salire o scendere) . I valori possono essere irregolari. Non ci possono essere legami. Questo è un requisito delCF metadati standard. Se i valori di qualsiasi dimensione non sono in ordine ordinato, il dataset non verrà caricato eERDDAP™identificherà il primo valore non selezionato nel file di registro, BigParentDirectory /logs/log.txt .
I valori di dimensione non assortiti indicano quasi sempre un problema con il dataset sorgente. Questo più comunemente si verifica quando un file misnamed o inappropriato è incluso nell'aggregazione, che porta ad una dimensione temporale non assortita. Per risolvere questo problema, vedere il messaggio di errore nelERDDAP™log.txt file per trovare il valore temporale offensivo. Quindi guardare nei file sorgente per trovare il file corrispondente (o uno prima o uno dopo) non appartiene all'aggregazione.
EDDGridScheletro di 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>
EDDGridDaEDDTable
EDDGridDaEDDTable consente di convertire un EDDTable dataset tabular in unEDDGridDataset grigliato. Ricordate cheERDDAP™tratta i set di dati comeset di dati grigliati (sottoclassi diEDDGrid) o set di dati tabulari (sottoclassi di EDDTable) .
- Normalmente, se si dispone di dati grigliati, è sufficiente impostare unEDDGridset di dati direttamente. A volte questo non è possibile, per esempio, quando si hanno i dati memorizzati in un database relazionale cheERDDAP™può accedere solo tramite EDDTableFromDatabase.EDDGridDaEDDTable classe ti permette di rimediare a quella situazione.
- Ovviamente, i dati nel dataset EDDTable sottostante devono essere (fondamentalmente) dati grigliati, ma in forma tabulare. Ad esempio, il dataset EDDTable può avere dati CTD: misurazioni della corrente est e nord, a più profondità, più volte. Poiché le profondità sono le stesse ad ogni punto di tempo,EDDGridFromEDDTable può creare un dataset grigliato con un tempo e una dimensione di profondità che accede ai dati tramite il dataset EDDTable sottostante.
- Generare i dati Xml... Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. È possibile raccogliere le informazioni necessarie per migliorare la bozza ruvida.
- Attributi di origine -- Come con tutti gli altri tipi di dataset,EDDGridFromTable ha l'idea che ci siano fonti globaliAttributi eglobaleaddAttributes (specificatodatasets.xml) , che sono combinati per rendere la combinazione globale Attributi, che sono ciò che gli utenti vedono. Per la fonte globaleAttributi,EDDGridFromEDDTable utilizza la combinazione globale Attributi del set di dati EDDTable sottostante. (Se ci pensi per un minuto, ha senso.)
Analogamente, per ciascunoaxisVariableedataVariable'addAttributes♪EDDGridFromEDDTable utilizza la combinazione della variabile Attributi dal set di dati EDDTable sottostante comeEDDGridDalla sorgente della variabile EDTable Attributi. (Se ci pensi per un minuto, ha senso.)
Di conseguenza, se la EDDTable ha buoni metadati,EDDGridDaEDDTable spesso ha pochissimoaddAttributesmetadati -- solo un paio di modifiche qui e là.
-
dataVariablecontroaxisVariableS... Il sottostante EDDTable ha solodataVariableS. AnEDDGridFromEDDTable dataset avrà alcuniaxisVariable# (creato da alcune delle EDDTabledataVariable#) e alcunidataVariable# (creato dal restante EDDTabledataVariable#) .GenerareDatasetsXmlfarà un'ipotesi su cui EDDTabledataVariabledovrebbe diventareEDDGridDaEDDTableaxisVariables, ma è solo un'ipotesi. È necessario modificare l'output di GenerateDatasetsXml per specificare qualedataVariablesaràaxisVariables, e in quale ordine.
-
asseValori -- Non c'è niente di cui parlare l'EDDTable sottostanteEDDGridDaEDDTable i valori possibili delaxisVariables nella versione grigliata del dataset, quindi devi fornire tali informazioni per ogniaxisVariabletramite uno di questi attributi:
- assiValori -- consente di specificare un elenco di valori. Per esempio, <at name="axisValues"tipo="doubleList"\>2, 2.5, 3, 3.5, 4<// Nota l'uso di untipo di datipiù la parola Lista. Inoltre, il tipo di lista (per esempio, doppio) , DEVE corrispondere ai dati Tipo della variabile in EDDTable eEDDGridDatasets.
- asseValuesStartStrideStop -- consente di specificare una sequenza di valori regolarmente distanziati specificando i valori di avvio, passo e stop. Ecco un esempio che è equivalente all'asseValues esempio sopra: <att name="axisValuesStartStrideStop"tipo="doubleList"\>2, 0,5, 4<// Ancora una volta, si noti l'uso di un tipo di dati elenco. Inoltre, il tipo di lista (per esempio, doppio) , DEVE corrispondere ai dati Tipo della variabile in EDDTable eEDDGridDatasets.
Aggiornamenti -- Come non c'è modo diEDDGridDaEDDTable per determinare l'asseValore dall'EDDTable inizialmente, non c'è anche modo affidabile perEDDGridDaEDDTable per determinare dal EDDTable quando l'asseValori sono cambiati (in particolare, quando ci sono nuovi valori per la variabile di tempo) . Attualmente, l'unica soluzione è quella di modificare l'attributo dell'asseValuesdatasets.xmle ricaricare il dataset. Per esempio, si potrebbe scrivere uno script per
- Ricercadatasets.xmlper datasetID= theDatasetID " così si sta lavorando con il corretto dataset.
- Ricercadatasets.xmlper il prossimo evento
il nome della Vergine
così si sta lavorando con la variabile corretta. - Ricercadatasets.xmlper il prossimo evento
<att name="axisValuesStartStrideStop" type="doubleList">
quindi conosci la posizione di partenza del tag. 4. Ricercadatasets.xmlper il prossimo evento
</att>
quindi conosci la posizione finale dei valori dell'asse. 5. Sostituisci il vecchio inizio, stride, ferma i valori con i nuovi valori. 6. ContattareURL della bandieraper il dataset da raccontareERDDAP™per ricaricare il dataset.
Non è l'ideale, ma funziona.
- precisione -- QuandoEDDGridFromEDDTable risponde alla richiesta di dati di un utente, sposta una riga di dati dalla tabella di risposta EDDTable nellaEDDGridgriglia di risposta. Per fare questo, deve capire se i valori "assi" su una determinata riga nella tabella corrispondono a una combinazione di valori di asse nella griglia. Per i tipi di dati interi, è facile determinare se due valori sono uguali. Ma per galleggianti e doppie, questo solleva il problema orribile di numeri di punti galleggiantinon abbinato esattamente. (per esempio, 0.2 versus 0.199999999999996) . A (cercare di) affrontare questo,EDDGridFromTable consente di specificare un attributo di precisione per uno qualsiasi deiaxisVariables, che specifica il numero totale di cifre decimali che devono essere identiche.
- Per esempio,<at name="precision" type="int">5<//
- Per diversi tipi di variabili di dati, ci sono diversi valori di precisione di default. I default sono di solito appropriati. Se non lo sono, è necessario specificare valori diversi.
- PeraxisVariableche sonotempo o tempo Variazioni di francobolli, il default è piena precisione (una corrispondenza esatta) .
- PeraxisVariables che sono galleggianti, la precisione predefinita è 5.
- PeraxisVariables che sono doppie, la precisione predefinita è 9.
- PeraxisVariables che hanno tipi di dati interi,EDDGridFromEDDTable ignora l'attributo di precisione e utilizza sempre la massima precisione (una corrispondenza esatta) .
- ATTENZIONE! Quando si effettua la conversione di un pezzo di dati tabulari in un pezzo di dati grigliati, seEDDGridFromEDDTable non può corrispondere ad un valore "assi" EDDTable ad uno dei prevedibiliEDDGridValori asse daEDDTable,EDDGridDaEDDTable silenziosamente (nessun errore) butta via i dati da quella riga della tabella. Per esempio, ci possono essere altri dati (non sulla griglia) nel Dataset EDDTable. (E se lo sforzo > 1, non è ovvio aEDDGridDaTabella quali valori asse sono valori desiderati e quali sono quelli da saltare a causa del passo.) Quindi, se i valori di precisione sono troppo elevati, l'utente vedrà i valori mancanti nella risposta dei dati quando esistono valori di dati validi.
Al contrario, se i valori di precisione sono troppo bassi, EDDTable "assis" valori che non dovrebbero corrispondereEDDGridDaEDDI valori dell'asse (erroneamente) Corrisponde.
Questi potenziali problemi sono terribili, perché l'utente ottiene i dati sbagliati (o valori mancanti) quando dovrebbero ottenere i dati giusti (o almeno un messaggio di errore) . Questo non è un difettoEDDGridFromTable.EDDGridFromTable non riesce a risolvere questo problema. Il problema è inerente alla conversione dei dati tabulari in dati grigliati (a meno che non possano essere fatte altre ipotesi, ma non possono essere fatte qui) . spetta a te,ERDDAP™amministratore, a prova il tuoEDDGridDaEDDTable accuratamente per garantire che i valori di precisione siano impostati per evitare questi potenziali problemi.
spazio
- spazio-- Questo è un tipo di dataset molto insolito. Dal momento che i tipi di query che possono essere fatti a (gestito da) unEDDGridset di dati (correlato ai range e ai passiaxisVariable#) sono molto diversi dai tipi di query che possono essere fatte a (gestito da) un set di dati EDDTable (solo correlato ai range di alcune variabili) , l'esecuzione delEDDGridDaEDDTable datasets varia notevolmente a seconda della richiesta esatta che viene fatta e la velocità del dataset EDDTable sottostante. Per richieste che hanno un valore di sforzo > 1,EDDGridFromEDDTable può chiedere il sottostante EDDTable per un pezzo relativamente grande di dati (come se stridesse=1) e poi passare attraverso i risultati, mantenendo i dati da alcune righe e gettando via i dati da altri. Se deve passare attraverso un sacco di dati per ottenere i dati di cui ha bisogno, la richiesta richiederà più tempo per riempire.
SeEDDGridFromEDDTable può dire che ci saranno grandi lacune (con righe di dati indesiderati) tra le righe con i dati desiderati,EDDGridFromEDDTable può scegliere di fare diverse sottorequisizioni al sottostante EDDTable invece di una grande richiesta, saltando così le righe indesiderate di dati nelle grandi lacune. La sensibilità per questa decisione è controllata dal gapValore di soglia come specificato nella<gapThreshold> tag (default=1000 righe di dati sorgente) . Impostare il gapTreshold a un numero più piccolo porterà al dataset facendo (in generale) più subrequisiti. Impostare il gapTreshold a un numero più grande porterà al processo di elaborazione dei dati (in generale) meno subrequisiti.
Se il gapThreshold è impostato troppo piccolo,EDDGridFromEDDTable opererà più lentamente perché il overhead di più richieste sarà maggiore del tempo salvato ottenendo alcuni dati in eccesso. Se gapThreshold è impostato troppo grande,EDDGridFromEDDTable opererà più lentamente perché così tanti dati in eccesso saranno recuperati dalla EDDTable, solo per essere scartati. (Come Goldilocks ha scoperto, il mezzo è "solo giusto".) L'overhead per diversi tipi di dataset EDDTable varia notevolmente, quindi l'unico modo per conoscere l'impostazione migliore effettiva per il tuo dataset è attraverso la sperimentazione. Ma non andrai troppo male ad attaccare al default.
Un semplice esempio è: Immagina unEDDGridFromTable con uno soloaxisVariable (tempo, con una dimensione di 100000) UnodataVariable (temperatura) , e il gap predefinitoTreshold di 1000.
- Se un utente richiede temperatura\[0💯5000\], il passo è 100 quindi la dimensione del gap è 99, che è inferiore al gapThreshold. Quindi...EDDGridFromTable farà una sola richiesta a EDDTable per tutti i dati necessari per la richiesta (equivalente a temperatura\[0:5000\]) e buttare via tutte le righe di dati che non ha bisogno.
- Se un utente richiede temperatura\[0:2500:5000\], quel passo è 2500 quindi la dimensione del gap è 2499, che è maggiore del gapThreshold. Quindi...EDDGridFromTable farà richieste separate a EDDTable che sono equivalenti alla temperatura\[0\], temperatura\[2500\], temperatura\[5000\].
Il calcolo della dimensione del gap è più complicato quando ci sono più assi.
Per ogni richiesta dell'utente,EDDGridStampa FromEDDTable messaggi diagnostici relativi a questo nellog.txtfile.
- Se...<logLevel>] (#loglevel) indatasets.xmlè impostato su info, questo stampa un messaggio come Traduzione: Se nOuterAxes=0, gapThreshold non è stato superato e solo una richiesta sarà fatta a EDDTable. Se nOuterAxes>0, gapThreshold è stato superato e nOuterRequests sarà fatto a EDDTable, corrispondente ad ogni combinazione richiesta del nOuterAxes più sinistro. Ad esempio, se il dataset ha 4axisVariableedataVariablea est\[tempo\]\[latitudine\]\[longitudine\]\[profondità\]il più a sinistra (primo) la variabile dell'asse è il tempo.
- Se<logLevel! indatasets.xmlè impostato a tutti, ulteriori informazioni sono scritte al file log.txt.
EDDGridScheletro daEDDTable 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>
EDDERDDAP
EDDGridDa Erddap gestisce i dati grigliati da un telecomandoERDDAP™server. EDDTableFromErddap gestisce i dati tabulari da un telecomandoERDDAP™server.
- EDDGridFromErddap e EDDTableFromErddap si comportano in modo diverso da tutti gli altri tipi di set di dati inERDDAP.
- Come altri tipi di dataset, questi set di dati ottengono informazioni sul set di dati dalla sorgente e la tengono in memoria.
- Come altri tipi di dataset, quandoERDDAP™ricerche per set di dati, visualizza il modulo di accesso dati ( datasetID .html) , o visualizza il modulo Make A Graph ( datasetID .) ♪ERDDAP™utilizza le informazioni sul set di dati che è in memoria.
- EDDGridDa Erddap e EDDTable FromErddap sono la base perreti/clusters/federazionidiERDDAPs, che distribuisce in modo efficiente l'utilizzo della CPU (per lo più per fare mappe) , l'utilizzo della memoria, l'archiviazione dei dataset e l'utilizzo della larghezza di banda di un grande data center.
Redirect
- A differenza di altri tipi di dataset, quandoERDDAP™riceve una richiesta di dati o immagini da questi set di dati,ERDDAP reindirizzamentila richiesta al telecomandoERDDAP™server. Il risultato è:
- Questo è molto efficiente (CPU, memoria e larghezza di banda) , perché altrimenti
- Il compositoERDDAP™deve inviare la richiesta all'altroERDDAP™ (che richiede tempo) .
- L'altroERDDAP™deve ottenere i dati, riformattare e trasmettere i dati al compositoERDDAP.
- Il compositoERDDAP™deve ricevere i dati (usando larghezza di banda) # Riformalo # (utilizzando CPU e memoria) , e trasmettere i dati all'utente (usando larghezza di banda) . Reindirizzando la richiesta e permettendo l'altraERDDAP™inviare la risposta direttamente all'utente, il compositoERDDAP™non passa essenzialmente tempo di CPU, memoria, o larghezza di banda su richiesta.
- Il reindirizzamento è trasparente per l'utente indipendentemente dal software client (un browser o qualsiasi altro software o strumento di riga di comando) .
- Questo è molto efficiente (CPU, memoria e larghezza di banda) , perché altrimenti
- Si può direERDDAP™non reindirizzare le richieste dell'utente impostando<redirect>false</redirect>, ma questo nega la maggior parte dei vantaggi del... FromErddap dataset type (in particolare, disperdendo il carico sul fronteERDDAP™al telecomando/backendERDDAP) .
Abbonamenti
Normalmente, quando unEDDGridDa Erddap e EDDTable Da Erddap sono (re) caricato sul tuoERDDAP, cercano di aggiungere un abbonamento al set di dati remoto tramite il telecomandoERDDAP's sistema di abbonamento e-mail/URL. In questo modo, ogni volta che il set di dati remoto cambia, il telecomandoERDDAP™contattiSet di dati URL della bandierasul tuoERDDAP™in modo che il dataset locale venga ricaricato ASAP e che il dataset locale sia sempre perfettamente aggiornato e mimiti il dataset remoto. Quindi, la prima volta che questo accade, si dovrebbe ottenere una e-mail che richiede di convalidare l'abbonamento. Tuttavia, se il localeERDDAP™non può inviare un'e-mail o se il telecomandoERDDAP's email/URL sistema di abbonamento non è attivo, si dovrebbe e-mail il telecomandoERDDAP™amministratore e richiedere che s/he aggiunga manualmente [<) (# Il cambiamento #) ...</onChange> tags a tutti i relativi set di dati per chiamare il vostro set di datiSet di dati URLs della bandiera. Vedi il tuoERDDAP™report giornaliero per un elenco di setDataset URL della bandierina, ma basta inviare quelli perEDDGridFromErddap e EDDTableFromErddap datasets al telecomandoERDDAP™amministratore.
Non funziona? I tuoi dataset locali non sono sincronizzati con i dataset remoti? Molte cose devono funzionare correttamente per questo sistema in modo che i tuoi set di dati rimangano aggiornati. Controllare ciascuna di queste cose in ordine:
- Il tuoERDDAP™deve essere in grado di inviare e-mail. Vedi le impostazioni dell'email nel tuo setup.xml.
- In generale (ma non sempre) ♪ERDDAP'<baseUrl> e<baseHttpsUrl> non deve avere un numero di porta (ad es. : 8080, : 8443) . Se lo fanno, usa unproxypassper rimuovere il porto dall'url.
- Nel tuo setup.xml,<IscrivitiToRemoteErddapDataset> deve essere impostato a true.
- Quando il tuo EDD locale... FromErddap dataset viene ricaricato, dovrebbe inviare una richiesta al telecomandoERDDAP™abbonarsi al set di dati remoto. Guarda su log.txt per vedere se sta succedendo.
- Si dovrebbe ottenere una e-mail chiedendo di convalidare la richiesta di abbonamento.
- È necessario fare clic sul link in quella e-mail per convalidare la richiesta di abbonamento.
- Il telecomandoERDDAP™dovrebbe dire che la validazione ha avuto successo. In qualsiasi momento, è possibile richiedere un'e-mail dal telecomandoERDDAP™con un elenco degli abbonamenti in sospeso e validi. Vedere il modulo telecomandoErddapBase Ur /erddap/abbonamento/list.html .
- Quando il set di dati remoto cambia (ad esempio, ottiene dati aggiuntivi) , il telecomandoERDDAP™dovrebbe cercare di contattare il flagURL sul vostroERDDAP. Non puoi controllare, ma puoi chiedere all'amministratore del telecomandoERDDAP™per controllare.
- Il tuoERDDAP™dovrebbe ricevere una richiesta per impostare tale flagURL. Guarda nel tuo log.txt per "setDatasetFlag.txt?" richiesta (#) e vedere se c'è un messaggio di errore associato alle richieste.
- Il tuoERDDAP™dovrebbe quindi provare a ricaricare quel dataset (forse non subito, ma ASAP) .
Max aggiornato (tempo) ?
EDDGrid/TableFromErddap datasets modifica solo le informazioni memorizzate su ogni dataset sorgente quando il dataset sorgente è"ricarica"e qualche pezzo di cambiamenti di metadati (ad esempio, la variabile di tempoactual\_range) , generando così una notifica di abbonamento. Se il dataset sorgente ha dati che cambiano frequentemente (ad esempio, nuovi dati ogni secondo) e utilizza"aggiornamento"sistema per rilevare frequenti modifiche ai dati sottostanti,EDDGrid/TableFromErddap non sarà avvisato di questi frequenti cambiamenti fino al successivo set di dati "ricarica", così ilEDDGrid/TableFromErddap non sarà perfettamente aggiornato. È possibile ridurre al minimo questo problema modificando il dataset sorgente<reloadEveryNMinutes> a un valore più piccolo (60? 15?) in modo che ci sono più notifiche di abbonamento per raccontareEDDGrid/TableFromErddap per aggiornare le sue informazioni sul dataset sorgente.
Oppure, se il sistema di gestione dei dati sa quando il dataset sorgente ha nuovi dati (ad esempio, tramite uno script che copia un file di dati in atto) , e se non è super frequente (ad esempio, ogni 5 minuti, o meno frequenti) C'è una soluzione migliore:
- Non usare<updateEveryNMillis> per mantenere aggiornati i dati di origine.
- Impostare il dataset sorgente<reloadEveryNMinutes> a un numero maggiore (1440?) .
- Fai contattare lo script del dataset sorgenteURL della bandierasubito dopo che copia un nuovo file di dati in atto.
Ciò porterà al set di dati di origine essere perfettamente aggiornato e causare la creazione di una notifica di abbonamento, che verrà inviata alEDDGrid/TableFromErddap dataset. Questo porteràEDDGrid/TableFromErddap dataset per essere perfettamente aggiornato (bene, entro 5 secondi dall'aggiunta di nuovi dati) . E tutto ciò che sarà fatto in modo efficiente (senza inutili ricarica dataset) .
No.addAttributes♪axisVariableodataVariable
A differenza di altri tipi di dataset, EDDTableFromErddap eEDDGridI dataset di Erddap non permettono a livello globale<addAttributes>♪<axisVariable> o<dataVariable> sezioni nelledatasets.xmlper quel dataset. Il problema è che permettere a coloro che portano a incongruenze:
- Diciamo che è stato permesso e ha aggiunto un nuovo attributo globale.
- Quando un utente chiede il tuoERDDAP™per gli attributi globali, apparirà il nuovo attributo.
- Ma quando un utente ti chiedeERDDAP™per un file di dati, il tuoERDDAP™reindirizza la richiesta alla fonteERDDAP. Che cosa?ERDDAP™non è a conoscenza del nuovo attributo. Quindi, se crea un file di dati con metadati, ad esempio, un.ncfile, i metadati non avranno il nuovo attributo.
Ci sono due soluzioni:
- Convincere l'amministratore della fonteERDDAP™fare i cambiamenti che si desidera ai metadati.
- Invece di EDDTableFromErddap, usoEDDTableFromDapSequenza. O invece diEDDGridDaErddap, usoEDDGridDamasco. Questi tipi EDD consentono di connettersi in modo efficiente a un set di dati su un telecomandoERDDAP™ (ma senza reindirizzare le richieste di dati) e ti permettono di includere globale<addAttributes>♪<axisVariable> o<dataVariable> sezioni nelledatasets.xml. Un'altra differenza: è necessario iscriversi manualmente al set di dati remoto, in modo che il dataset sul tuoERDDAP™sarà notificato (via ilURL della bandiera) quando ci sono modifiche al set di dati remoto. Così, si sta creando un nuovo dataset, invece di collegare a un set di dati remoto.
Altre note
- Per motivi di sicurezza,EDDGridDa Erddap e EDDTable FromErddap non supporta il [<Per saperne di più (# Accessibleto #) tag e non può essere utilizzato con set di dati remoti che richiedono l'accesso (perché usano [<Per saperne di più (# Accessibleto #) ). VediERDDAP'sistema di sicurezzaper limitare l'accesso ad alcuni set di dati ad alcuni utenti.
- A partire daERDDAP™V2.10,EDDGridDa Erddap e EDDTableFromErddap sostengono il [<accessibileViaFiles>] (#accessibleviafiles) tag. A differenza di altri tipi di dataset, il default è vero, ma i file del dataset saranno accessibiliViaFiles solo se il dataset di origine ha anche<accessibileViaFiles> impostato a true.
- È possibile utilizzareGenerare i dati Programma Xmlper faredatasets.xmlchunk per questo tipo di dataset. Ma è possibile fare questi tipi di set di dati facilmente a mano.
EDDGridDello scheletro di Erddap XML
- EDDGridDello scheletro di Erddap XML dataset è molto semplice, perché l'intento è solo quello di imitare il set di dati remoto che è già adatto per l'uso inERDDAP:
<dataset type="EDDGridFromErddap" datasetID\="..." active\="..." >
<sourceUrl>...</sourceUrl>
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<accessibleViaFiles>...</accessibleViaFiles> <!-- 0 or 1, default=true. -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1
For EDDGridFromErddap, this gets the remote .dds and then gets
the new leftmost (first) dimension values. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<redirect>true(default)|false</redirect> <!-- 0 or 1; -->
</dataset>
EDDTableFromErddap scheletro XML
- Lo scheletro XML per un dataset EDDTableFromErddap è molto semplice, perché l'intento è solo quello di imitare il dataset remoto, che è già adatto per l'uso inERDDAP:
<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>
EDDGridDa Etopo
EDDGridDa Etopo solo serve ilETOPO1 Global 1-Minute Grid Elevation Data Set (Superficie del ghiaccio, griglia registrata, binario, 2byte int: etopo1\_ice\_g\_i2.zip) che è distribuito conERDDAP.
- Solo duedatasetIDs sono sostenuti perEDDGridDa Etopo, in modo da poter accedere ai dati con valori di longitudine da -180 a 180, o valori di longitudine da 0 a 360.
- Non ci sono mai sotto tag, dal momento che i dati sono già descritti all'internoERDDAP.
- Quindi le due opzioni perEDDGridI dataset di Etopo sono (letteralmente) :
<!-- 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" />
EDDGridDa Fili
EDDGridDa Fili è la superclasse di tuttiEDDGridDa... cinque classi. Non puoi usareEDDGridDa Files direttamente. Invece, utilizzare una sottoclasse diEDDGridDaFiles per gestire il tipo di file specifico:
- EDDGridDaMergeIRFilesgestisce i dati da grigliatoMergeIR.gzfile.
- EDDGridDa AudioFilesaggrega i dati da un gruppo di file audio locali.
- EDDGridDa NcFilesgestisce i dati da grigliatoGRIB .grbfile,HDF (v4 o v5) .hdffile,.ncmlfile, eNetCDF (v3 o v4) .ncfile. Questo può funzionare con altri tipi di file (per esempio, BUFR) , semplicemente non l'abbiamo testato -- si prega di inviare alcuni file campione se siete interessati.
- EDDGridDaNcFilesUnpackedè una varianteEDDGridDaNcFiles che gestisce i dati da grigliateNetCDF (v3 o v4) .nce file correlati, cheERDDAP™disacco a basso livello.
Attualmente non sono supportati altri tipi di file. Ma di solito è relativamente facile aggiungere il supporto per altri tipi di file. Contattaci se hai una richiesta. Oppure, se i tuoi dati sono in un vecchio formato di file che ti piacerebbe allontanarti, ti consigliamo di convertire i file per essereNetCDFV.ncfile.NetCDFè un formato binario ampiamente supportato, consente un accesso casuale veloce ai dati, ed è già supportato daERDDAP.
Da file Dettagli
Le seguenti informazioni si applicano a tutte le sottoclassi diEDDGridDa Files.
Aggregazione di una dimensione esistente
Tutte le variazioniEDDGridFromFiles può aggregare i dati dai file locali, dove ogni file ha 1 (o più) valori diversi per il più sinistro (primo) dimensione, di solito\[tempo\], che sarà aggregato. Per esempio, le dimensioni potrebbero essere\[tempo\]\[altitudine\]\[latitudine\]\[longitudine\], e i file potrebbero avere i dati per uno (o pochi) valore del tempo (#) per file. Il dataset risultante appare come se tutti i dati del file fossero stati combinati. I grandi vantaggi dell'aggregazione sono:
- La dimensione del set di dati aggregati può essere molto più grande di un singolo file può essere convenientemente (~ 2 GB) .
- Per i dati in tempo reale, è facile aggiungere un nuovo file con l'ultimo pezzo di dati. Non devi riscrivere l'intero dataset.
I requisiti di aggregazione sono:
- I file locali non hanno lo stessodataVariable# (come definito nel datasetdatasets.xml) . Il dataset avrà ildataVariables definito indatasets.xml. Se un dato file non ha un datodataVariable♪ERDDAP™aggiungerà i valori mancanti come necessario.
- TuttidataVariables DOVE usare lo stessoaxisVariables/dimensioni (come definito nel datasetdatasets.xml) . I file saranno aggregati in base al primo (a sinistra) dimensione, ordinata in ordine crescente.
- Ogni file MAY ha dati per uno o più valori della prima dimensione, ma non ci può essere alcuna sovrapposizione tra i file. Se un file ha più di un valore per la prima dimensione, i valori devono essere ordinati in ordine crescente, senza legami.
- Tutti i file devono avere esattamente gli stessi valori per tutte le altre dimensioni. La precisione del test è determinata damatchAxisNDigits.
- Tutti i file devono avere esattamente lo stessounitàmetadati per tuttiaxisVariableedataVariableS. Se questo è un problema, si può essere in grado di utilizzareNCMLoNCOper risolvere il problema.
Aggregazione tramite Nome file o Metadati globali
Tutte le variazioniEDDGridFromFiles può anche aggregare un gruppo di file aggiungendo un nuovo leftmost (primo) dimensione, di solito tempo, basato su un valore derivato da ogni nome del file o dal valore di un attributo globale che è in ogni file. Ad esempio, il nome del file potrebbe includere il valore di tempo per i dati nel file.ERDDAP™creerebbe poi una nuova dimensione temporale.
A differenza della caratteristica simile in THREDDS,ERDDAP™crea sempre unaxisVariablecon valori numerici (come richiesto da CF) , mai Valori di stringa (che non sono ammessi da CF) . Inoltre,ERDDAP™ordinare i file nell'aggregazione in base al numericoaxisVariablevalore assegnato a ciascun file, in modo che la variabile dell'asse abbia sempre valori ordinati come richiesto dal CF. L'approccio THREDDS di fare un tipo lessicografico basato sui nomi dei file porta ad aggregazioni in cui i valori dell'asse non sono ordinati (che non è consentito da CF) quando i nomi dei file ordinano in modo diverso da quello derivatoaxisVariablevalori.
Creare una di queste aggregazioniERDDAP™, si definirà un nuovo leftmost (primo) axisVariablecon uno speciale, pseudo<sourceName> che diceERDDAP™dove e come trovare il valore per la nuova dimensione da ogni file.
- Il formato per lo pseudosourceNameche ottiene il valore da un nome di file (solo filename.ext) è \\. Nome del file, dati Tipo ♪ estrattoreRegex ♪ catturaGroupNumber*
- Il formato per lo pseudosourceNameche ottiene il valore dal nome del percorso assoluto di un file è \\. PathName, dati Tipo ♪ estrattoreRegex ♪ catturaGroupNumber* \[Per questo, il nome del percorso usa sempre'/'come il carattere separatore directory, mai ''.\]
- Il formato per lo pseudosourceNameche ottiene il valore da un attributo globale è \\. globale: attributo Nome ♪ dati Tipo ♪ estrattoreRegex ♪ catturaGroupNumber*
- Questo pseudosourceNameopzione funziona in modo diverso dagli altri: invece di creare un nuovo leftmost (primo) axisVariable, questo sostituisce il valore della correnteaxisVariablecon un valore estratto dal nome del file (solo filename.ext) . Il formato è \\. sostituire Da FileName, dati Tipo ♪ estrattoreRegex ♪ catturaGroupNumber*
Le descrizioni delle parti da fornire sono:
- attributo Nome -- il nome dell'attributo globale che è in ogni file e che contiene il valore della dimensione.
- dati Tipo -- Questo specifica il tipo di dati che verrà utilizzato per memorizzare i valori. Vedere l'elenco standard didati TipicheERDDAP™supporti, tranne che String non è permesso qui da variabili di asse inERDDAP™non possono essere variabili di stringa.
C'è un dato pseudo aggiuntivoTipo, timeFormat= stringa TimeFormat , che diceERDDAP™che il valore è un tempo di stringaStampunità adatta per tempi di stringa. Nella maggior parte dei casi, la stringTimeFormat di cui hai bisogno sarà una variazione di uno di questi formati:
- yyyy-MM-dd'T'HH:mm:ss.SSSZ -- che ISO 8601:2004 (E) formato orario della data. Potrebbe essere necessario una versione abbreviata di questo, ad esempio,yyyy-MM-dd'T'HH:mm:ss oyyyy-MM-dd.
- yyyMMddHmmss.SSS -- che è la versione compatta del formato data ISO 8601. Potrebbe essere necessario una versione abbreviata di questo, ad esempio, yyyymmddHHmmss o yyyyyMMdd.
- M/d/yyyyy H:mm:ss.SSS -- che è il formato data slash degli Stati Uniti. Potrebbe essere necessario una versione abbreviata di questo, ad esempio, M/d/yyyyy .
- yyyyDDDHmmssSSS -- che è l'anno più il giorno zero-integrato dell'anno (e.g, 001 = 1 gennaio, 365 = 31 dicembre in un anno non adeguato; questo è talvolta erroneamente chiamato la data Julian) . Potrebbe essere necessario una versione abbreviata di questo, ad esempio, yyyyDDD .
Se si utilizza questo pseudo dataTipo, aggiungere questo alla nuova variabile<addAttributes>:
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Se si desidera spostare tutti i valori di tempo, spostare il valore di tempo in unità, ad esempio, 1970-01-01-01T12:00:00Z.
- estrattoreRegex -- Questo èespressione regolare (tutorial) che include un gruppo di cattura (in parentesi) che descrive come estrarre il valore dal nome del file o dal valore dell'attributo globale. Per esempio, dato un nome di file come S19980011998031.L3b\_MO\_CHL.nc, gruppo di cattura #1, "\dtutorial", nell'espressione regolare S (.\dtutorial) .\dtutorial\.L3b.\* cattura le prime 7 cifre dopo 'S': 1998001.
- catturaGroupNumber -- Questo è il numero del gruppo di cattura (in un paio di parentesi) nell'espressione regolare che contiene le informazioni di interesse. Di solito è 1, il primo gruppo di cattura. A volte è necessario utilizzare gruppi di cattura per altri scopi nel regex, quindi il numero di gruppo di cattura importante sarà 2 (il secondo gruppo di cattura) o 3 (il terzo) , ecc.
Un esempio completo diaxisVariableche rende un dataset aggregato con un nuovo asse di tempo che ottiene i valori di tempo dal nome del file di ogni file è
<axisVariable>
<sourceName>\\*\\*\\*fileName,timeFormat=yyyyDDD,S(\\d{7})\\.L3m.\\*,1</sourceName>
<destinationName>time</destinationName>
</axisVariable>
Quando utilizzi i dati pseudo "timeFormat=" Tipo,ERDDAP™aggiungerà 2 attributi alaxisVariablein modo che sembrano provenire dalla fonte:
<att name="standard\\_name">time</att>
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
Quindi, in questo caso,ERDDAP™creerà un nuovo asse chiamato"time"con valori doppi (secondi dal 1970-01-01T00:00:00:00Z) estraendo le 7 cifre dopo "S" e prima ".L3m" nel nome del file e interpretando quelle come valori di tempo formattati come yyyyDDD.
È possibile ignorare il tempo di base predefinito (1970-01-01T00:00:00:00Z) aggiungendo unaggiungereAttribuzioneche specifica un'unità diversa attributo con un tempo di base diverso. Una situazione comune è: ci sono gruppi di file di dati, ciascuno con un composito 1 giorno di un set di dati satellitare, dove si desidera che il valore di tempo sia mezzogiorno del giorno menzionato nel nome del file (il tempo incentrato di ogni giorno) e voglio la variabilelong\_nameper essere "Centered Time". Un esempio che fa questo è:
<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>
Note ore=12 nel tempo di base, che aggiunge 12 ore rispetto al tempo base originale del 1970-01-01T00:00Z.
Un esempio completo diaxisVariableche rende un dataset aggregato con un nuovo asse "run" (con valori int) che ottiene i valori di esecuzione dall'attributo globale "runID" in ogni file (con valori come "r17\_global", dove 17 è il numero di corsa) è
<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>
Notare l'uso del gruppo di cattura numero 2 per catturare le cifre che si verificano dopo 'r' o 's', e prima di "\_global". Questo esempio mostra anche come aggiungere attributi aggiuntivi (ad esempio,ioos\_categorye unità) alla variabile asse.
File compressi esterni
-
Datasets che sono sottoset diEDDGridDaFiles ed EDDTable FromFiles può servire i dati direttamente da file di dati compressi esternamente, compresi.tgz♪.tar.gz♪.tar.gzip♪.gz♪.gzip♪.zip♪.bz2, e file .Z.
-
Questo funziona sorprendentemente bene!
Nella maggior parte dei casi, il rallentamento relativo alla decompressione dei file di dati di piccole e medie dimensioni è minore. Se avete bisogno di risparmiare spazio su disco, incoraggiamo fortemente l'utilizzo di questa funzione, soprattutto per i file più vecchi che sono raramente accessibili. -
Risparmia!
Questa è una delle poche caratteristiche inERDDAP™che ti offre la possibilità di risparmiare un sacco di soldi (anche se al costo di prestazioni leggermente diminuite) . Se il rapporto di compressione è ad esempio, 6:1 (a volte sarà molto più alto) , quindi i file di dati del set di dati avranno bisogno solo di 1/6 lo spazio del disco. Allora forse si può ottenere con 1 RAID (di una data dimensione) invece di 6 RAIDS (della stessa dimensione) . E' un enorme risparmio. Speriamo, la capacità di comprimere alcuni file in una collezione (I più anziani?) e non comprimere gli altri (quelli nuovi?) , e per cambiare che in qualsiasi momento, minimizziamo il lato negativo per comprimere alcuni dei file (accesso più lento) . E se la scelta è tra la memorizzazione dei file su nastro (e accessibile solo su richiesta, dopo un ritardo) vs memorizzarli compressi su un RAID (e accessibile tramiteERDDAP) , allora c'è un enorme vantaggio per l'utilizzo della compressione in modo che gli utenti possano interagire e (relativamente) accesso rapido ai dati. E se questo può risparmiare dall'acquisto di un RAID aggiuntivo, questa funzione può risparmiare circa $30.000. -
Per tuttiEDDGridLe sottoclassi FromFiles, se i file di dati hanno un'estensione che indica che sono file compressi esternamente (Attualmente:.tgz♪.tar.gz♪.tar.gzip♪.gz♪.gzip♪.zip♪.bz2, o) ♪ERDDAP™decomprimerà i file nella directory cache del dataset quando li legge (se non sono già nella cache) . Lo stesso vale per il file binario (ad esempio,.nc) sottoclassi di EDDTableFromFiles.
-
Per le sottoclassi EDDTableFromFiles per i file non-binary (ad esempio, .csv) , i file di dati con un'estensione che indica che sono file compressi esternamente saranno decompressi on-the-fly come il file viene letto.
-
ATTREZZATURA: Se il tipo di file compresso esternamente utilizzato (ad esempio,.tgzo.zip) supporta più di 1 file all'interno del file compresso, il file compresso deve contenere solo 1 file.
-
ATTREZZATURA: Questa funzione presuppone che il contenuto dei file compressi esternamente non cambi, in modo che un file decompresso cache può essere riutilizzato. Se alcuni o tutti i file di un dataset sono a volte modificati, non comprimere quei file. Questo è coerente con l'uso comune, poiché le persone non comprimere normalmente i file che a volte hanno bisogno di cambiare.
-
<fileNameRegex> Per fare questo lavoro, il set di dati<fileNameRegex> deve corrispondere ai nomi dei file compressi. Ovviamente, regexe come .\corrisponderà a tutti i nomi di file. Se si specifica un tipo di file specifico, ad esempio, .\#.nc, quindi è necessario modificare il regex per includere anche l'estensione di compressione, ad esempio, .\ #.nc#.gz(se tutti i file saranno qualcosa..nc.gzfile) .
-
Va bene se il vostro set di dati include un mix di file compressi e non compressi. Questo può essere utile se si crede che alcuni file (ad esempio, i file più vecchi) sarà usato meno spesso e quindi sarebbe utile salvare spazio su disco comprimendoli. Per fare questo lavoro,<fileNameRegex> deve corrispondere ai nomi dei file compressi e non compressi, ad esempio .\o.\#.nc (|#.gz) (dove il gruppo di cattura alla fine di ciò specifica che.gzè facoltativo.
-
E 'bene se si comprime o decomprimere i file specifici nella raccolta in qualsiasi momento. Se il dataset non utilizza [<AggiornamentoOgniNMillis> (#updateeverynmillis #) , impostare il datasetbandieraper direERDDAP™per ricaricare il dataset e quindi notare le modifiche. Interessante, è possibile utilizzare diversi algoritmi di compressione e impostazioni per diversi file nello stesso dataset (ad esempio,.bz2per file raramente utilizzati,.gzper i file non spesso utilizzati e nessuna compressione per i file usati frequentemente) , basta essere sicuri che il regex supporta tutte le estensioni di file che sono in uso, ad esempio, .\*\.nc (|#.gz|#.bz2) .
-
Naturalmente, i rapporti di compressione e le velocità per i diversi algoritmi di compressione variano con il file sorgente e le impostazioni (ad esempio, livello di compressione) . Se si desidera ottimizzare questo sistema per i file, fare un test dei diversi metodi di compressione con i file e con una gamma di impostazioni di compressione. Se vuoi un bene affidabile (non necessariamente il meglio) setup, ti consigliamo leggermentegzip (.gz) .gzipnon rende il file compresso più piccolo (è ragionevolmente vicino) , ma comprime il file molto rapidamente e (più importante perERDDAP™utenti) decomprime il file molto rapidamente. E poi...gzipsoftware viene standard con ogni installazione Linux e Mac OS ed è prontamente disponibile per Windows tramite strumenti gratuiti come 7Zip e Linux componenti aggiuntivi come Git Bash. Ad esempio, per comprimere un file sorgente nel.gzversione del file (stesso nome di file, ma con.gzallegato) , uso (in Linux, Mac OS e Git Bash)
gzip sourceName
Per decomprimere un.gzfile di nuovo all'originale, uso Gunzip sourceName.gz
Per comprimere ciascuno dei file sorgente nella directory e nelle sue sottodirectory, ricorsivamente, utilizzare gzip- No. registaName
Decomprimere ciascuno dei.gzfile in directory e le sue sottodirectory , ricorsivamente, utilizzare Gunzip -r registaName
-
ATTENZIONE: Non comprimere esternamente (gzip) file già compressi internamente! Molti file hanno già compresso i dati internamente. Se tu fossigzipquesti file, i file risultante non saranno molto più piccoli (<5%) eERDDAP™sprecherà tempo decomprimendoli quando ha bisogno di leggerli. Per esempio:
- file di dati: ad esempio,.nc4, e.hdf5 file: Alcuni file usano la compressione interna; alcuni no. Come dire: le variabili compresse hanno attributi "\_ChunkSize". Inoltre, se un gruppo di grigliati.nco.hdfi file sono tutte le dimensioni diverse, sono probabilmente compressi internamente. Se sono tutte le stesse dimensioni, non sono compressi internamente.
- file immagine: ad esempio, .gif, .jpg, and .png
- file audio: ad esempio, .mp3, e .ogg.
- file video: ad esempio, .mp4, .ogv e .webm.
Uno sfortunato caso dispari: .wav file audio sono enormi e non compressi internamente. Sarebbe bello comprimere (gzip) loro, ma generalmente non dovresti perché se lo fai, gli utenti non saranno in grado di riprodurre i file compressi nel loro browser.
-
Caso di prova: compressione (congzip) un dataset con 1523 grigliati.ncfile.
- I dati nei file di origine erano radi (molti valori mancanti) .
- Lo spazio totale del disco è passato da 57 GB prima della compressione a 7 GB dopo.
- Una richiesta di un sacco di dati da un punto di tempo è<1 s prima e dopo la compressione.
- Una richiesta di 1 data point per 365 time point (la situazione peggiore) andò da 4 s a 71 s.
A me che è un ragionevole trade-off per qualsiasi dataset, e certamente per i dataset che sono raramente utilizzati.
-
Compressione interna ed esterna -- Rispetto alla compressione dei file interna offerta da.nc4 e.hdf5 file,ERDDAPL'approccio per i file binari compressi esternamente ha vantaggi e svantaggi. Lo svantaggio è: per una volta letto di una piccola parte di un file, la compressione interna è migliore perchéEDDGridFromFiles ha solo bisogno di decomprimere qualche pezzo (#) del file, non l'intero file. MaERDDAPL'approccio ha alcuni vantaggi:
- ERDDAP™supporta la compressione di tutti i tipi di file di dati (binario e non vincolante, ad esempio,.nc3 e .csv) non solo.nc4 e.hdf4.
- Se la maggior parte di un file deve essere letto più di una volta in un breve periodo di tempo, allora risparmia tempo per decomprimere il file una volta e leggerlo molte volte. Questo accade inERDDAP™quando un utente utilizza Make-A-Graph per il dataset e apporta una serie di piccole modifiche al grafico.
- La capacità di avere file compressi e non file compressi nella stessa collezione, consente di controllare più su quali file sono compressi e che non sono. E questo controllo aggiunto viene senza davvero modificare il file sorgente (dal momento che è possibile comprimere un file con ad esempio,.gze poi decomprimerlo per ottenere il file originale) .
- La capacità di cambiare in qualsiasi momento se un dato file è compresso e come è compresso (diversi algoritmi e impostazioni) ti dà più controllo sulle prestazioni del sistema. E si può facilmente recuperare il file originale non compresso in qualsiasi momento.
Mentre né l'approccio è un vincitore in tutte le situazioni, è chiaro cheERDDAPLa capacità di servire i dati da file compressi esternamente rende la compressione esterna una ragionevole alternativa alla compressione interna offerta da.nc4 e.hdf5. Questo è significativo dato che la compressione interna è uno dei motivi principali che le persone scelgono di utilizzare.nc4 e.hdf5.
Cache decompresso
ERDDAP™rende una versione decompressa di qualsiasi binario compresso (ad esempio,.nc) file di dati quando ha bisogno di leggere il file. I file decompressi sono conservati nella directory del dataset all'interno BigParentDirectory /decompresso/. I file decompressi che non sono stati utilizzati di recente verranno eliminati per liberare lo spazio quando la dimensione del file cumulativo è >10GB. Puoi cambiarlo impostando<decompressoCacheMaxGB> (default = 10) in datasets Xml.xml, ad esempio,
<decompressedCacheMaxGB>40</decompressedCacheMaxGB>
Inoltre, i file decompressi che non sono stati utilizzati negli ultimi 15 minuti verranno eliminati all'inizio di ogni importante reload dataset. Puoi cambiarlo impostando<decompressoCacheMaxMinutesOld> (predefinito = 15) in datasets Xml.xml, ad esempio,
<decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>
I numeri più grandi sono belli, ma la dimensione cumulativa dei file decompressi può causare BigParentDirectory per esaurire lo spazio su disco, che causa gravi problemi.
- Perché decomprimere un file può richiedere una quantità significativa di tempo (da 0,1 a 10 secondi) , i set di dati con file compressi possono beneficiare dell'impostazione del dataset [<) (#Nthreads) impostazione a un numero più alto (2? 3? 4?) . I lati negativi ai numeri ancora più alti (Per esempio, 5? 6? 7?) stanno diminuendo i rendimenti e che la richiesta di un utente può quindi utilizzare un'alta percentuale delle risorse del sistema, rallentando così significativamente l'elaborazione delle richieste di altri utenti. Così, non c'è impostazione nThreads ideale, solo conseguenze diverse in situazioni diverse con impostazioni diverse.
Valori di dimensione ordinati
I valori per ogni dimensione DEVE essere in ordine ordinato (salire o scendere, tranne il primo (a sinistra) dimensione che deve ascendere) . I valori possono essere irregolari. Non ci possono essere legami. Questo è un requisito delCF metadati standard. Se i valori di qualsiasi dimensione non sono in ordine ordinato, il dataset non verrà caricato eERDDAP™identificherà il primo valore non selezionato nel file di registro, BigParentDirectory /logs/log.txt .
I valori di dimensione non assortiti indicano quasi sempre un problema con il dataset sorgente. Questo più comunemente si verifica quando un file misnamed o inappropriato è incluso nell'aggregazione, che porta ad una dimensione temporale non assortita. Per risolvere questo problema, vedere il messaggio di errore nelERDDAP™log.txt file per trovare il valore temporale offensivo. Quindi guardare nei file sorgente per trovare il file corrispondente (o uno prima o uno dopo) non appartiene all'aggregazione.
Regole
I file MAY sono in una directory, o in una directory e le sue sottodirectory (ricorsiva) . Se ci sono un gran numero di file (per esempio, > 1,000) , il sistema operativo (e cosìEDDGridDa Fili) opererà molto più efficiente se si memorizza i file in una serie di sottodirectory (uno all'anno, o uno al mese per dataset con file molto frequenti) , in modo che non ci sono mai un numero enorme di file in una determinata directory.
<Condividi su Google
TuttiEDDGridFromFiles e tutti i dataset EDDTableFromFiles supportano una serie di tag che diconoERDDAP™per scaricare e mantenere una copia di tutti i file di un set di dati remoto, o una cache di alcuni file (scaricato come necessario) . Questo può essere incredibilmente utile. Vedi ilcache Documentazione di FromUrl.
Regia remote e richieste HTTP Range
(AKA Byte Serving, Byte Range Richieste, Accettare-Rangeshttpintestazione)
EDDGridDa NcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles e EDDTableFromNcCFFiles, può a volte servire i dati da.ncfile su server remoti e accesso via HTTP se il server supportaServizio di Bytetramite richieste dell'intervallo HTTP (il meccanismo HTTP per il servizio byte) . Questo è possibile perché netcdf-java (cheERDDAP™usi per leggere.ncfile) supporta la lettura dei dati da remoto.ncfile tramite richieste dell'intervallo HTTP.
Non farlo! È terribile inefficiente e lento. Invece, usare il [<cacheFromUrl> system] (# Cachefromurl #) .
AccessoERDDAP™datasets come file tramite le richieste dell'intervallo byte -- Lo sto facendo, dato che puoi (in teoria) pensare a un dataset inERDDAP™come un gigante.ncfile da appending ".nc" alla base OPenDAPURL per un dato dataset (ad esempio, https://myserver.org/erddap/griddap/datasetID.nc e anche aggiungendo un ?query dopo che per specificare un sottoset) , è forse ragionevole chiedere se è possibile utilizzare netcdf-java,Ferreto altriNetCDFsoftware client per leggere i dati tramite HTTP Range Richieste daERDDAP. La risposta è no, perché non c'è davvero un enorme ".nc"file. Se si desidera fare questo, invece fare una di queste opzioni:
- Uso(OPeN)DAPsoftware client per connettersi ai servizi di griddap offerti daERDDAP. Questo è ciòDAP (e cosìERDDAP) è stato progettato per. È molto efficiente.
- Oppure, scarica il file sorgente (#) dal"files"sistema (o un file subset tramite un.nc? query) al computer e utilizzare netcdf-java,Ferreto altriNetCDFsoftware client per leggere il (Ora) file locale (#) .
Informazioni sul file Cached
QuandoEDDGridFromFiles dataset è prima caricato,EDDGridFromFiles legge informazioni da tutti i file pertinenti e crea tabelle (una riga per ogni file) con informazioni su ogni file valido e ogni "cattivo" (diverso o invalido) file.
- Le tabelle sono memorizzate anche su disco, comeNetCDFV.ncfile in BigParentDirectory / dataset/ ultimo2CharsOfDatasetID / datasetID / in file di nome: dirTable.nc (che contiene un elenco di nomi di directory unici) ♪ file Tabella.nc (che contiene la tabella con le informazioni di ciascun file valido) ♪ BadFiles.nc (che contiene la tabella con le informazioni di ogni file cattivo) .
- Per accelerare l'accesso a unEDDGridDal set di dati di Files (ma a scapito di usare più memoria) , si può usare
true
per direERDDAP™per mantenere una copia delle tabelle di informazioni di file in memoria.
- La copia delle tabelle di informazioni sul file sul disco è utile anche quandoERDDAP™è chiuso e riavviato: salvaEDDGridFromFiles da dover rileggere tutti i file di dati.
- Quando un dataset viene ricaricato,ERDDAP™solo bisogno di leggere i dati in nuovi file e file che sono cambiati.
- Se un file ha una struttura diversa dagli altri file (per esempio, un tipo di dati diverso per una delle variabili, o un valore diverso per il "unità" attributo) ♪ERDDAPaggiunge il file all'elenco dei file "cattivo". Le informazioni sul problema del file saranno scritte al BigParentDirectory /logs/log.txt file.
- Non dovresti mai dover eliminare o lavorare con questi file. Un'eccezione è: se stai ancora apportando modifiche a un datasetdatasets.xmlsetup, potresti voler eliminare questi file per forzaERDDAP™per rileggere tutti i file in quanto i file saranno letti/interpretati in modo diverso. Se hai mai bisogno di eliminare questi file, puoi farlo quandoERDDAP™sta correndo. (Poi impostare unbandieraper ricaricare il dataset ASAP.) Tuttavia,ERDDAP™di solito nota che ildatasets.xmlle informazioni non corrispondono al file Informazioni di tabella ed elimina automaticamente le tabelle di file.
- Se vuoi incoraggiareERDDAP™per aggiornare le informazioni memorizzate (per esempio, se hai appena aggiunto, rimosso o modificato alcuni file nella directory dei dati del set) , usare ilsistema di segnalazionea forzaERDDAP™per aggiornare le informazioni dei file memorizzati nella cache.
Richieste di gestione
Quando viene elaborata la richiesta di dati del cliente,EDDGridFromFiles può guardare rapidamente nella tabella con le informazioni di file valide per vedere quali file hanno i dati richiesti.
Aggiornamento delle informazioni sul file Cached
Ogni volta che il dataset viene ricaricato, le informazioni dei file memorizzati nella cache vengono aggiornate.
- Il dataset viene ricaricato periodicamente come determinato dal<reloadEveryNMinutes> nelle informazioni del set di datidatasets.xml.
- Il dataset viene ricaricato il prima possibile ogni voltaERDDAP™rileva che hai aggiunto, rimosso,toccato (per cambiare l'ultimo file Tempo modificato) , o ha cambiato un file di dati.
- Il dataset viene ricaricato il prima possibile se si utilizzasistema di segnalazione.
Quando il dataset viene ricaricato,ERDDAP™confronta i file attualmente disponibili nelle tabelle delle informazioni sui file memorizzati nella cache. I nuovi file vengono letti e aggiunti alla tabella dei file validi. I file che non esistono più vengono eliminati dalla tabella dei file validi. I file in cui il timestamp del file è cambiato sono letti e le loro informazioni sono aggiornate. Le nuove tabelle sostituiscono i vecchi tavoli in memoria e su disco.
File cattivi
La tabella dei file cattivi e le ragioni per cui i file sono stati dichiarati cattivi (file danneggiato, variabili mancanti, ecc.) è inviato via email all'e-mail Tutto A indirizzo email (probabilmente) ogni volta che il dataset viene ricaricato. È necessario sostituire o riparare questi file il prima possibile.
Variabili mancanti
Se alcuni dei file non hanno alcuni deidataVariables definito nel datasetdatasets.xmlBasta cosi'. QuandoEDDGridFromFiles legge uno di quei file, funzionerà come se il file avesse la variabile, ma con tutti i valori mancanti.
Problemi FTP / Consigli
Se si FTP nuovi file di dati alERDDAP™serverERDDAP™sta correndo, c'è la possibilità cheERDDAP™verrà ricaricato il dataset durante il processo FTP. Succede più spesso di quanto si possa pensare! Se succede, il file sembrerà valido (ha un nome valido) Ma il file non è ancora valido. SeERDDAP™tenta di leggere i dati da quel file non valido, l'errore risultante causerà l'aggiunta del file alla tabella dei file non validi. Non va bene. Per evitare questo problema, utilizzare un nome di file temporaneo quando FTP'ing the file, ad esempio, ABC2005.nc\_TEMP . Poi, il fileNameRegex test (vedi sotto) indicherà che questo non è un file rilevante. Dopo che il processo FTP è completo, rinominare il file nel nome corretto. Il processo di rinominazione causerà che il file diventi rilevante in un istante.
"0 file" Messaggio di errore
Se scappiGenerareDatasetsXmloDasDds, o se si tenta di caricare unEDDGridDa...Files dataset inERDDAP™, e si ottiene un messaggio di errore "0 file" che indica cheERDDAP™trovato 0 file corrispondenti nella directory (quando pensi che ci siano file corrispondenti in quella directory) :
- Controllare che i file sono davvero in quella directory.
- Controlla l'ortografia del nome della directory.
- Controlla il fileNameRegex. E 'davvero, davvero facile fare errori con regexe. Per scopi di prova, prova il regex .\* che dovrebbe corrispondere a tutti i nomi di file. (Vedi questodocumentazione regexetutorial regex.)
- Controllare che l'utente che esegue il programma (ad esempio, user=tomcat (?) per Tomcat/ERDDAP) ha il permesso "leggere" per quei file.
- In alcuni sistemi operativi (per esempio, SELinux) e a seconda delle impostazioni di sistema, l'utente che ha eseguito il programma deve avere 'leggi' il permesso per l'intera catena di directory che porta alla directory che ha i file.
EDDGridDallo scheletro di Files XML
- Lo scheletro XML per tuttiEDDGridLe sottoclassi FromFiles sono:
<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*Dall'AudioFiles
EDDGridDa AudioFiles e EDDTableFromAudioFiles aggregare i dati da una raccolta di file audio locali. (Questi primi sono apparsiERDDAP™v1.82.) La differenza è cheEDDGridDaAudioFiles tratta i dati come set di dati multidimensionali (di solito con 2 dimensioni:\[avvio del file Tempo\]e\[trascorso Tempo in un file\]) , mentre EDDTableFromAudioFiles tratta i dati come dati tabulari (di solito con colonne per il file startTime, il tempo trascorso con il file, e i dati dai canali audio) .EDDGridDaAudioFiles richiede che tutti i file hanno lo stesso numero di campioni, quindi se non è vero, è necessario utilizzare EDDTableFromAudioFiles. In caso contrario, la scelta del tipo EDD da utilizzare è completamente la vostra scelta. Un vantaggio di EDDTableFromAudioFiles: è possibile aggiungere altre variabili con altre informazioni, ad esempio,stationID, stationType. In entrambi i casi, la mancanza di una variabile di tempo unificata rende più difficile lavorare con i dati di questi tipi di EDD, ma non c'era un buon modo per impostare una variabile di tempo unificata.
Vedi le superclassi di questa classe,EDDGridDa FilieEDDTableFromFiles, per informazioni generali su come funziona questa classe e come usarla.
Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Dal momento che i file audio non hanno metadati diversi dalle informazioni relative alla codifica dei dati audio, è necessario modificare l'output da GenerateDatasets Xml per fornire informazioni essenziali (ad esempio, titolo, sommario,creator\_name, istituzione, storia) .
Dettagli:
- Ci sono un gran numero di formati di file audio. Attualmente,ERDDAP™può leggere i dati dalla maggior parte dei file .wav e .au. Attualmente non può leggere altri tipi di file audio, ad esempio, .aiff o .mp3. Se hai bisogno di supporto per altri formati di file audio o altre varianti di .wav e .au, invia la tua richiesta a Chris. John a noaa.gov. Oppure, come soluzione di lavoro è possibile utilizzare in questo momento, è possibile convertire i file audio in PCM\_ SEGNALE (per dati interi) o PCM\_FLOAT (per i dati dei punti galleggianti) .wav file in modo cheERDDAP™può lavorare con loro.
- Attualmente,ERDDAP™può leggere i file audio con ciòJavaLa classe AudioFormat chiama codifica PCM\_FLOAT, PCM\_SIGNED, PCM\_UNSIGNED, ALAW e ULAW.ERDDAP™converte i valori PCM\_UNSIGNED (ad esempio, da 0 a 255) in valori firmati (ad esempio, da -128 a 128) riorganizzando i bit nei valori dei dati.ERDDAP™converte ALAW e ULAW codificati dal loro formato byte codificato nativo in breve (Indice) valori. DaJavavuole bigEndian=true dati,ERDDAP™riorganizza i byte dei dati memorizzati con bigEndian=false (piccolo endiano) per leggere correttamente i valori. Per tutte le altre codifiche (PCM) ♪ERDDAP™legge i dati come è.
- QuandoERDDAP™legge i dati dai file audio, converte i metadati audio disponibili del file in attributi globali. Questo includerà sempre (con valori di esempio visualizzati)
String audioBigEndian "false"; //vero o falso audio Canali 1; String audioCodifica "PCM\_SIGNED"; galleggiante audioFrameRate 96000.0; //al secondo int audioFrameSize 2; //# di byte di dati per frame audio floatSampleRate 96000.0; //al secondo int audioSampleSizeInBits 16; //# di bit per canale per campione
PerERDDAP's finalità, una cornice è sinonimo di un campione, che è i dati per un punto nel tempo. Gli attributi inERDDAP™avrà le informazioni che descrivono i dati come era nei file di origine.ERDDAP™spesso hanno cambiato questo durante la lettura dei dati, ad esempio, PCM\_UNSIGNED, ALAW e dati codificati ULAW vengono convertiti in PCM\_SIGNED, e bigEndian=false i dati vengono convertiti in bigEndian=true dati (che è comeJavavuole leggerlo) . Alla fine, i valori dei datiERDDAP™sarà sempreCodice PCMvalori di dati (cioè, semplici campioni digitalizzati dell'onda sonora) .
- QuandoERDDAP™legge i dati dai file audio, legge l'intero file.ERDDAP™può leggere fino a circa 2 miliardi di campioni per canale. Ad esempio, se il tasso campione è di 44.100 campioni al secondo, 2 miliardi di campioni si traduce in circa 756 minuti di dati sonori per file. Se si dispone di file audio con più di questa quantità di dati, è necessario rompere i file in piccoli pezzi in modo cheERDDAP™può leggerli.
- Perché?ERDDAP™legge interi file audio,ERDDAP™deve avere accesso a una grande quantità di memoria per lavorare con grandi file audio. VediERDDAPImpostazioni di memoria. Ancora una volta, se questo è un problema, una soluzione che è possibile utilizzare in questo momento è quello di rompere i file in piccoli pezzi in modo cheERDDAP™può leggerli con meno memoria.
- Alcuni file audio sono stati scritti in modo non corretto.ERDDAP™fa un piccolo sforzo per affrontare tali casi. Ma in generale, quando c'è un errore,ERDDAP™getterà un'eccezione (e respingere il file) o (se l'errore è inosservabile) leggere i dati (ma i dati saranno errati) .
- ERDDAP™non controlla o altera il volume del suono. Idealmente, i dati audio interi sono scalati per utilizzare l'intera gamma del tipo di dati.
- I file audio e i lettori audio non hanno un sistema per i valori mancanti (ad esempio, -999 o Float.NaN) . Quindi i dati audio non dovrebbero avere valori mancanti. Se ci sono valori mancanti (ad esempio, se è necessario allungare un file audio) , utilizzare una serie di 0's che sarà interpretato come silenzio perfetto.
- QuandoERDDAP™legge i dati dai file audio, crea sempre una colonna chiamata trascorso Tempo con il tempo per ogni campione, in secondi (memorizzato come doppie) , rispetto al primo campione (che è assegnato trascorso Traduzione:) . ConEDDGridDaAudioFiles, questa diventa la variabile dell'asse Time trascorso.
- EDDGridDaAudioFiles richiede che tutti i file abbiano lo stesso numero di campioni. Quindi, se non è vero, è necessario utilizzare EDDTableFromAudioFiles.
- PerEDDGridDaAudioFiles, si consiglia di impostare [<dimensioneValori in memoria>] (#dimensionevalori inmemoria) a falsi (come è raccomandato da GenerateDatasets Xml) , perché la dimensione del tempo ha spesso un numero enorme di valori.
- PerEDDGridDaAudioFiles, si dovrebbe quasi sempre utilizzareEDDGridSistema FromFiles perAggregazione tramite Nome di file, quasi sempre estraendo la data di inizio della registrazione E' ora dei nomi dei file. Per esempio,
<sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
Genera i dati Xml incoraggerà questo e vi aiuterà con questo.
- Per EDDTableFromAudioFiles, si dovrebbe quasi sempre utilizzare il sistema EDDTableFromFiles per\*\**fileName pseudosourceName#per estrarre informazioni dal nome del file (quasi sempre la data di inizio Tempo per la registrazione) e promuoverlo per essere una colonna di dati. Per esempio,
<sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>
Il formato di tempo deve quindi essere specificato come attributo unità:<at name="units">yyyMMdd'\_'HHmmss<//
EDDGridDaMergeIRFiles
EDDGridDaMergeIRFiles aggrega i dati da locali,MergeIRfile, che sono daMissione di misurazione della pioggia tropicale (TRMM) , che è una missione congiunta tra la NASA e la Japan Aerospace Exploration Agency (JAXA) . Merge I file IR possono essere scaricati daNASA.
EDDGridFromMergeIRFiles.java è stato scritto e contribuitoERDDAP™progetto di Jonathan Lafite e Philippe Makowski di R.Tech Engineering (licenza: fonte aperta protetta da copyright) .
EDDGridFromMergeIRFiles è un po' insolito:
- EDDGridFromMergeIRFiles supporta file di dati compressi o non compressi, in qualsiasi combinazione, nello stesso set di dati. Questo consente, ad esempio, di comprimere i file più vecchi che sono raramente accessibili, ma non compressi nuovi file che sono spesso accessibili. Oppure, è possibile modificare il tipo di compressione dall'originale . Z ad esempio,.gz.
- Se si dispone di versioni compresse e non compresse degli stessi file di dati nella stessa directory, assicurarsi che la<fileNameRegex> per il vostro set di dati corrisponde ai nomi dei file che si desidera abbinare e non corrisponde ai nomi dei file che non si desidera abbinare.
- I file di dati di origine non compressi non devono avere estensione del file (cioè, no ". nel nome del file) .
- I file di dati di origine compressa devono avere un'estensione di file, maERDDAP™determina il tipo di compressione controllando il contenuto del file, non guardando l'estensione del file (per esempio, ".Z") . I tipi di compressione supportati includono "gz", "bzip2", "xz", "lzma", "snappy-raw", "snappy-framed", "pack200", e "z". QuandoERDDAP™legge i file compressi, decomprime on-the-fly, senza scrivere a un file temporaneo.
- Tutti i file di dati di origine devono utilizzare il file naming originale: i.e., merg\_ YYYMMDDH \_4km-pixel (dove YYYMMDDH indica l'ora associata ai dati nel file) , più un'estensione del file se il file è compresso.
Vedi la superclasse di questa classe,EDDGridDa Fili, per informazioni generali su come funziona questa classe e come usarla.
Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Puoi quindi modificarlo per affinarlo.
EDDGridDa NcFiles
EDDGridDa NcFiles aggrega i dati da locale, grigliato,GRIB .grb e .grb2file,HDF (v4 o v5) .hdffile,.ncmlfile,NetCDF (v3 o v4) .ncfile, eZarfile (in versione 2.25) . I file Zarr hanno un comportamento leggermente diverso e richiedono sia il fileNameRegex che il pathRegex per includere "zarr".
Questo può funzionare con altri tipi di file (per esempio, BUFR) , non l'abbiamo ancora testato -- si prega di inviare alcuni file campione.
- Per i file GRIB,ERDDAP™farà un file indice .gbx la prima volta che legge ogni file GRIB. Quindi i file GRIB devono essere in una directory in cui il "utente" che ha eseguito Tomcat ha letto il permesso di scrittura.
- Vedi la superclasse di questa classe,EDDGridDa Fili, per informazioni su come funziona questa classe e come usarla.
- A partire daERDDAP™2, del regolamento (CEE) n.EDDGridDa NcFilesEDDGridDa NcFiles Unpacked può leggere i dati da "strutture" in.nc4 e.hdf4 file. Per identificare una variabile che proviene da una struttura, la<sourceName> deve usare il formato: Nome completo della struttura | MemberName , per esempio group1/myStruct|myMember .
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Puoi quindi modificarlo per affinarlo.
Gruppi in file Nc Gridded
I file Netcdf4 possono contenere gruppi. ERDDAP™Basta fare un set di dati dalle variabili in un gruppo e tutti i suoi gruppi genitori. È possibile specificare un nome specifico di gruppo in GenerateDatasets Xml (omettere lo slash trailing) , o usare "" per avere GenerateDatasets Xml cercare tutti i gruppi per le variabili che utilizzano la maggior parte delle dimensioni, o utilizzare "\[radice di radice\]" per avere GenerateDatasets basta cercare variabili nel gruppo root.
La prima cosa che GenerateDatasetsXml fa per questo tipo di dataset dopo aver risposto alle domande è stampare la struttura ncdump-like del file campione. Quindi, se si inserisce alcune risposte goofy per il primo ciclo attraverso GenerateDatasets Xml, almeno sarai in grado di vedere seERDDAP™può leggere il file e vedere quali dimensioni e variabili sono nel file. Quindi è possibile dare risposte migliori per il secondo ciclo attraverso GenerateDatasetsXml.
EDDGridDaNcFilesUnpacked
EDDGridDaNcFilesUnpacked è una varianteEDDGridDa NcFilesche aggrega i dati da locale, grigliatoNetCDF (v3 o v4) .nce file correlati. La differenza è che questa classe disacco ogni file di dati primaEDDGridFromFiles guarda i file:
- Disimballa le variabili che sono imballate conscale\_factore/oadd\_offset.
- Converte \_FillValue emissing\_valuevalori per essere di NaN (o MAX\_VALUE per tipi di dati interi) .
- Converte i valori temporali e timestamp"seconds since 1970-01-01T00:00:00Z".
Il grande vantaggio di questa classe è che fornisce un modo per affrontare diversi valori discale\_factor♪add\_offset, \_FillValue,missing\_value, o unità di tempo in diversi file sorgente in una raccolta. Altrimenti, si dovrebbe utilizzare uno strumento comeNCMLoNCOmodificare ogni file per rimuovere le differenze in modo che i file possano essere gestiti daEDDGridDa NcFiles. Affinché questa classe funzioni correttamente, i file devono seguire gli standard CF per gli attributi correlati.
- Se provi a fare unEDDGridDa NcFiles Unpacked da un gruppo di file con cui hai precedentemente provato e non sei riuscito a usareEDDGridDa NcFiles, cd a BigParentDirectory / dataset/ Last2Letters / datasetID / dove Last2Letters è le ultime 2 lettere delladatasetID♪ ed eliminare tutti i file in quella directory.
- A partire daERDDAP™2, del regolamento (CEE) n.EDDGridDa NcFilesEDDGridDa NcFiles Unpacked può leggere i dati da "strutture" in.nc4 e.hdf4 file. Per identificare una variabile che proviene da una struttura, la<sourceName> deve usare il formato: Nome completo della struttura | MemberName , per esempio group1/myStruct|myMember .
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Puoi quindi modificarlo per affinarlo.
I file Netcdf4 possono contenere gruppi. Vediquesta documentazione.
La prima cosa che GenerateDatasetsXml fa per questo tipo di dataset dopo aver risposto alle domande è stampare la struttura simile a ncdump del file campione prima è disfatto. Quindi, se si inserisce alcune risposte goofy per il primo ciclo attraverso GenerateDatasets Xml, almeno sarai in grado di vedere seERDDAP™può leggere il file e vedere quali dimensioni e variabili sono nel file. Quindi è possibile dare risposte migliori per il secondo ciclo attraverso GenerateDatasetsXml.
EDDGridLonPM180
EDDGridLonPM180 modifica i valori di longitudine di un bambino (chiuso) EDDGriddataset che ha alcuni valori di longitudine superiori a 180 (per esempio, da 0 a 360) in modo che siano nella gamma -180 a 180 (Longitude Plus o Minus 180, da cui il nome) .
- Questo fornisce un modo per rendere i set di dati che hanno valori di longitudine superiori a 180 conformi in / conOGCservizi (per esempioWMSserver inERDDAP) ♪OGCi servizi richiedono valori di longitudine entro -180 a 180.
- Lavorare vicino a una discontinuità provoca problemi, indipendentemente dal fatto che la discontinuità sia a longitudine 0 o a longitudine 180. Questo tipo di dataset ti permette di evitare questi problemi per tutti, offrendo due versioni dello stesso dataset: uno con valori di longitudine nel range da 0 a 360 ("Pacificentrico"?) ♪ uno con valori di longitudine nella gamma -180 a 180 ("Anticentrico"?) .
- Per i set di dati per bambini con tutti i valori di longitudine superiori a 180, tutti i nuovi valori di longitudine sono semplicemente 360 gradi più bassi. Ad esempio, un dataset con valori di longitudine da 180 a 240 diventerebbe un dataset con valori di longitudine da -180 a -120.
- Per i set di dati per bambini che hanno valori di longitudine per tutto il mondo (circa 0 a 360) , il nuovo valore di longitudine sarà riorganizzato per essere (circa) Da -180 a 180: I valori originali da 0 a quasi 180 sono invariati. I valori originali da 180 a 360 vengono convertiti in -180 a 0 e spostati all'inizio della longitudine.
- Per i set di dati per bambini che coprono 180 ma non coprono il globo,ERDDAP™inserisce i valori mancanti come necessario per fare un set di dati che copre il globo. Ad esempio, un dataset bambino con valori di longitudine da 140 a 200 diventerebbe un dataset con valori di longitudine da -180 a 180. I valori dei bambini da 180 a 200 diventerebbero da -180 a -160. Nuovi valori di longitudine sarebbero inseriti da -160 a 140. I valori corrispondenti dei dati saranno \_FillValues. I valori dei bambini da 140 a quasi 180 sarebbero invariati. L'inserimento dei valori mancanti può sembrare strano, ma evita diversi problemi che derivano dall'avere valori di longitudine che saltano improvvisamente (per esempio, da -160 a 140) .
- InGenerareDatasetsXml, c'è uno speciale "dataset type",EDDGridLonPM180Da ErddapCatalog, che consente di generare ildatasets.xmlperEDDGridDataset LonPM180 da ciascuno deiEDDGridset di dati in unERDDAPche hanno valori di longitudine superiori a 180. Questo facilita l'offerta di due versioni di questi set di dati: l'originale, con valori di longitudine nella gamma da 0 a 360, e il nuovo dataset, con valori di longitudine nel range -180 a 180.
I dati del bambino all'interno di ogniEDDGridLonPM180 dataset sarà unEDDGridFromErddap dataset che punta al dataset originale. Il nuovo datasetdatasetIDsarà il nome del dataset originale più "\_LonPM180". Per esempio,
<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>
Metti laEDDGridDataset LonPM180 di seguito il dataset originale indatasets.xml. Questo evita alcuni possibili problemi.
In alternativa, è possibile sostituire ilEDDGridFromErddap dataset bambino con il dataset originaledatasets.xml. Poi, ci sarà solo una versione del dataset: quella con valori di longitudine entro -180 a 180. Lo scoraggiamo perché ci sono momenti in cui ogni versione del dataset è più conveniente.
- Se si offrono due versioni di un dataset, per esempio, uno con longitudine da 0 a 360 e uno con longitudine da -180 a 180:
- È possibile utilizzare l'opzione [<accessibile Via ViaWMS> frattaglie</accessibile Via ViaWMS> (#accessibleviawms) con il dataset 0-360 per disabilitare con forza ilWMSservizio per quel dataset. Quindi, solo la versione LonPM180 del dataset sarà accessibile tramiteWMS.
- Ci sono un paio di modi per mantenere aggiornato il dataset LonPM180 con modifiche al dataset sottostante:
- Se il dataset del bambino è unEDDGridFromErddap dataset che fa riferimento ad un dataset nello stessoERDDAP™, il dataset LonPM180 cercherà di iscriversi direttamente al dataset sottostante in modo che sia sempre aggiornato. Gli abbonamenti diretti non generano e-mail che ti chiedono di convalidare l'abbonamento - la convalida deve essere eseguita automaticamente.
- Se il dataset del bambino non è unEDDGridFromErddap dataset che è sulla stessaERDDAP™, il dataset LonPM180 cercherà di utilizzare il sistema di abbonamento regolare per iscriversi al dataset sottostante. Se hai il sistema di abbonamento nel tuoERDDAP™acceso, si dovrebbe ottenere e-mail chiedendo di convalidare l'abbonamento. Ti prego, fallo.
- Se hai il sistema di abbonamento nel tuoERDDAP™disattivato, il dataset LonPM180 può a volte avere metadati obsoleti fino a quando il dataset LonPM180 viene ricaricato. Quindi, se il sistema di abbonamento è disattivato, si dovrebbe impostare il [<ricarica Tutti i bambini > (#reloadeverynminutes) l'impostazione del dataset LonPM180 a un numero più piccolo, in modo che è più probabile per catturare le modifiche al dataset bambino prima.
EDDGridscheletro di 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 modifica i valori di longitudine di un bambino (chiuso) EDDGriddataset che ha alcuni valori di longitudine inferiori a 0 (per esempio, da -180 a 180) in modo che siano nella gamma da 0 a 360 (da qui il nome) .
- Lavorare vicino a una discontinuità provoca problemi, indipendentemente dal fatto che la discontinuità sia a longitudine 0 o a longitudine 180. Questo tipo di dataset ti permette di evitare questi problemi per tutti, offrendo due versioni dello stesso dataset: uno con valori di longitudine nella gamma -180 a 180 ("Anticentrico"?) . uno con valori di longitudine nel range da 0 a 360 ("Pacificentrico"?) ♪
- Per i dataset bambino con tutti i valori di longitudine inferiori a 0, tutti i nuovi valori di longitudine sono semplicemente 360 gradi più alti. Ad esempio, un dataset con valori di longitudine da -180 a -120 diventerebbe un dataset con valori di longitudine da 180 a 240.
- Per i set di dati per bambini che hanno valori di longitudine per tutto il mondo (circa -180 a 180) , il nuovo valore di longitudine sarà riorganizzato per essere (circa) 0 a 360: I valori originali da -180 a 0 vengono convertiti a 180 a 360 e spostati alla fine della longitudine. I valori originali da 0 a quasi 180 sono invariati.
- Per i set di dati per bambini che coprono lon=0 ma non coprono il globo,ERDDAP™inserisce i valori mancanti come necessario per fare un set di dati che copre il globo. Ad esempio, un dataset bambino con valori di longitudine da -40 a 20 diventerebbe un dataset con valori di longitudine da 0 a 360. I valori dei bambini da 0 a 20 sarebbero invariati. Nuovi valori di longitudine sarebbero inseriti da 20 a 320. I valori corrispondenti dei dati saranno \_FillValues. I valori dei bambini da -40 a 0 diventerebbero da 320 a 360. L'inserimento dei valori mancanti può sembrare strano, ma evita diversi problemi che derivano dall'avere valori di longitudine che saltano improvvisamente (per esempio, dal 20 al 320) .
- InGenerareDatasetsXml, c'è uno speciale "dataset type",EDDGridLon0360Da ErddapCatalog, che consente di generare ildatasets.xmlperEDDGridDataset Lon0360 da ciascuno deiEDDGridset di dati in unERDDAPche hanno valori di longitudine superiori a 180. Questo facilita l'offerta di due versioni di questi set di dati: l'originale, con valori di longitudine nella gamma da 0 a 360, e il nuovo dataset, con valori di longitudine nel range -180 a 180.
I dati del bambino all'interno di ogniEDDGridLon0360 dataset sarà unEDDGridFromErddap dataset che punta al dataset originale. Il nuovo datasetdatasetIDsarà il nome del dataset originale più "\_Lon0360". Per esempio,
<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>
Metti laEDDGridDataset Lon0360 di seguito il dataset originale indatasets.xml. Questo evita alcuni possibili problemi.
In alternativa, è possibile sostituire ilEDDGridFromErddap dataset bambino con il dataset originaledatasets.xml. Poi, ci sarà solo una versione del dataset: quella con valori di longitudine entro 0 a 360. Lo scoraggiamo perché ci sono momenti in cui ogni versione del dataset è più conveniente.
- Se si offrono due versioni di un dataset, per esempio, uno con longitudine da 0 a 360 e uno con longitudine da -180 a 180:
- È possibile utilizzare l'opzione [<accessibile Via ViaWMS> frattaglie</accessibile Via ViaWMS> (#accessibleviawms) con il set da 0 a 360 dati per disabilitare con forzaWMSservizio per quel dataset. Quindi, solo la versione -180 - 180 del dataset sarà accessibile tramiteWMS.
- Ci sono un paio di modi per mantenere aggiornato il dataset Lon0360 con modifiche al dataset sottostante:
- Se il dataset del bambino è unEDDGridFromErddap dataset che fa riferimento ad un dataset nello stessoERDDAP™, il dataset Lon0360 cercherà di iscriversi direttamente al dataset sottostante in modo che sia sempre aggiornato. Gli abbonamenti diretti non generano e-mail che ti chiedono di convalidare l'abbonamento - la convalida deve essere eseguita automaticamente.
- Se il dataset del bambino non è unEDDGridFromErddap dataset che è sulla stessaERDDAP™, il dataset Lon0360 cercherà di utilizzare il sistema di abbonamento regolare per iscriversi al dataset sottostante. Se hai il sistema di abbonamento nel tuoERDDAP™acceso, si dovrebbe ottenere e-mail chiedendo di convalidare l'abbonamento. Ti prego, fallo.
- Se hai il sistema di abbonamento nel tuoERDDAP™disattivato, il dataset Lon0360 può a volte avere metadati obsoleti fino a quando il dataset Lon0360 viene ricaricato. Quindi, se il sistema di abbonamento è disattivato, si dovrebbe impostare il [<ricarica Tutti i bambini > (#reloadeverynminutes) l'impostazione del dataset Lon0360 a un numero più piccolo, in modo che è più probabile per catturare le modifiche al dataset bambino prima.
EDDGridLon0360 scheletro 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 aggregati due o piùEDDGridset di dati (i bambini) fianco a fianco.
- Il dataset risultante ha tutte le variabili di tutti i dataset del bambino.
- Il set di dati del genitore e tutti i dataset del bambinodatasetIDS. Se i nomi in una famiglia sono esattamente gli stessi, il dataset non verrà caricato (con il messaggio di errore che i valori dell'asse aggregato non sono in ordine ordinato) .
- Tutti i bambini DEVE avere gli stessi valori sorgente peraxisVariable#\[1+\] (per esempio, latitudine, longitudine) . La precisione del test è determinata damatchAxisNDigits.
- I bambini possono avere valori di origine diversi peraxisVariable#\[0\] (per esempio, il tempo) , ma di solito sono in gran parte uguali.
- Il set di dati del genitore sembrerà avere tuttiaxisVariable#\[0\]valori sorgente da tutti i bambini.
- Ad esempio, questo consente di combinare un dataset sorgente con un u-component del vettore e un altro dataset sorgente con un v-componente del vettore, in modo che i dati combinati possano essere serviti.
- I bambini creati da questo metodo sono tenuti privatamente. Non sono set di dati accessibili separatamente (ad esempio, per richieste di dati client o perfile di bandiera) .
- I metadati e le impostazioni globali per il genitore provengono dai metadati e dalle impostazioni globali per il primo bambino.
- Se c'è un'eccezione durante la creazione del primo bambino, il genitore non sarà creato.
- Se c'è un'eccezione durante la creazione di altri bambini, questo invia un'e-mail a e-mailEverythingTo (come specificatosetup.xml) e continua con gli altri bambini.
EDDGridScheletro SideBySide XML
<dataset type="EDDGridSideBySide" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<dataset>...</dataset> <!-- 2 or more -->
</dataset>
EDDGridAggregateExistingDimension
EDDGridAggregateExistingDimension aggregati due o piùEDDGriddataset ciascuno dei quali ha una diversa gamma di valori per la prima dimensione, ma identici valori per le altre dimensioni.
- Ad esempio, un dataset bambino potrebbe avere 366 valori (per il 2004) per la dimensione del tempo e un altro bambino potrebbe avere 365 valori (per il 2005) per la dimensione del tempo.
- Tutti i valori per tutte le altre dimensioni (per esempio, latitudine, longitudine) Deve essere identico per tutti i bambini. La precisione del test è determinata damatchAxisNDigits.
- Valori di Dimensione Ordinati - I valori per ogni dimensione DEVE essere in ordine ordinato (salire o scendere) . I valori possono essere irregolari. Non ci possono essere legami. Questo è un requisito delCF metadati standard. Se i valori di qualsiasi dimensione non sono in ordine ordinato, il dataset non verrà caricato eERDDAP™identificherà il primo valore non selezionato nel file di registro, BigParentDirectory /logs/log.txt .
I valori di dimensione non assortiti indicano quasi sempre un problema con il dataset sorgente. Questo più comunemente si verifica quando un file misnamed o inappropriato è incluso nell'aggregazione, che porta ad una dimensione temporale non assortita. Per risolvere questo problema, vedere il messaggio di errore nelERDDAP™log.txt file per trovare il valore temporale offensivo. Quindi guardare nei file sorgente per trovare il file corrispondente (o uno prima o uno dopo) non appartiene all'aggregazione.
- Il set di dati dei genitori e il set di dati dei bambinidatasetIDS. Se i nomi in una famiglia sono esattamente gli stessi, il dataset non verrà caricato (con il messaggio di errore che i valori dell'asse aggregato non sono in ordine ordinato) .
- Attualmente, il dataset bambino DEVE essere unEDDGridFromDap dataset e MUST hanno i valori più bassi della dimensione aggregata (di solito i valori del tempo più antichi) . Tutti gli altri bambini DEVE essere quasi identici dataset (differire solo nei valori per la prima dimensione) e sono specificati solo lorosourceUrl.
- Il dataset aggregato ottiene i suoi metadati dal primo bambino.
- TheGenerare i dati Programma Xmlpuò fare una bozza ruvida deldatasets.xmlper unEDDGridAggregateExistingDimension basato su un insieme di file serviti da unHyraxo server THREDDS. Ad esempio, utilizzare questo input per il programma (il "/1988" nell'URL rende l'esempio più veloce) :
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
È possibile utilizzare il risultato<sourceUrl> tags o eliminarli e slegare il<sourceUrl> tag (in modo che i nuovi file vengano notati ogni volta che il dataset viene ricaricato.
EDDGridAggregateExistingDimension scheletro 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>
EDDGridCopia
EDDGridCopia fa e mantiene una copia locale di un altroEDDGrid's dati e serve dati dalla copia locale.
- EDDGridCopia (e per dati tabulari,EDDTableCopy) è molto facile da usare e molto efficace
soluzione ad alcuni dei maggiori problemi con il servizio dei dati da una fonte di dati remota:
- L'accesso ai dati da una fonte di dati remota può essere lento.
- Può essere lento perché è intrinsecamente lento (ad esempio, un tipo inefficiente di server) ♪
- perché è sopraffatto da troppe richieste,
- o perché il server o il server remoto è limitato alla larghezza di banda.
- Il set di dati remoto a volte non è disponibile (di nuovo, per una varietà di motivi) .
- Affidarsi a una fonte per i dati non scala bene (per esempio, quando molti utenti e moltiERDDAPs utilizzarlo) .
- L'accesso ai dati da una fonte di dati remota può essere lento.
- Come funziona...EDDGridCopia risolve questi problemi facendo automaticamente e mantenendo una copia locale dei dati e servendo i dati dalla copia locale.ERDDAP™può servire i dati dalla copia locale molto, molto rapidamente. E fare una copia locale allevia l'onere sul server remoto. E la copia locale è un backup dell'originale, che è utile nel caso qualcosa accade all'originale.
Non c'è niente di nuovo nel fare una copia locale di un set di dati. Ciò che è nuovo qui è che questa classe lo rende\*facile\*creare e creare\*mantenere\*una copia locale dei dati da una\*varietà\*di tipi di fonti di dati remote e\*aggiungi metadati\*durante la copia dei dati.
- Cavi di dati --EDDGridCopia rende la copia locale dei dati richiedendo pezzi di dati dal telecomando<dataset> . Ci sarà un pezzo per ogni valore del più sinistro (primo) variabile asse.EDDGridLa copia non si basa sui numeri dell'indice del dataset remoto per l'asse -- quelli possono cambiare.
ATTENZIONE: Se la dimensione di un pezzo di dati è così grande (> 2 GB) che provoca problemi,EDDGridLa copia non può essere usata. (Mi dispiace, speriamo di avere una soluzione per questo problema in futuro.)
- \[Un'alternativa aEDDGridRicevuto. Se i dati remoti sono disponibili tramite file scaricabili, non un servizio web, utilizzarecache opzione FromUrl perEDDGridDa Fili, che fa una copia locale dei file remoti e serve i dati dai file locali.\]
- File locali -- Ogni pezzo di dati viene memorizzato in un separatoNetCDFfile in una sottodirectory BigParentDirectory /copia/ datasetID / (come specificatosetup.xml) . I nomi dei file creati dai valori dell'asse vengono modificati per renderli sicuri (per esempio, i trattini sono sostituiti da "x2D") - Questo non riguarda i dati effettivi.
- Nuovi dati -- Ogni voltaEDDGridCopia viene ricaricata, controlla il telecomando<dataset> per vedere quali pezzi sono disponibili. Se il file per un pezzo di dati non esiste già, una richiesta per ottenere il pezzo viene aggiunta a una coda.ERDDAP's taskThread elabora tutte le richieste in coda per pezzi di dati, one-by-one. È possibile vedere le statistiche per il compitoAttività del pane sulPagina di statoe nelRapporto giornaliero. (Sì,ERDDAP™potrebbe assegnare più compiti a questo processo, ma che utilizzerebbe un sacco di larghezza di banda, memoria e tempo della CPU della sorgente di dati remota, e un sacco di tempo localeERDDAPLa larghezza di banda, la memoria e il tempo della CPU, nessuno dei quali è una buona idea.)
NOTA: La prima volta unaEDDGridLa copia è caricata, (se tutto va bene) un sacco di richieste per pezzi di dati saranno aggiunti all'attivitàPadre del pane, ma non saranno stati creati file di dati locali. Così il costruttore fallirà, ma taskThread continuerà a lavorare e creare file locali. Se tutto va bene, il taskThread farà alcuni file di dati locali e il prossimo tentativo di ricaricare il dataset (in ~15 minuti) avrà successo, ma inizialmente con una quantità molto limitata di dati.
NOTA: Dopo che il dataset locale ha alcuni dati e appare nel vostroERDDAP, se il dataset remoto è temporaneamente o permanentemente non accessibile, il dataset locale continuerà a funzionare.
ATTENZIONE: Se il set di dati remoto è grande e/o il server remoto è lento (questo è il problema, non è vero?!) , ci vorrà molto tempo per fare una copia completa locale. In alcuni casi, il tempo necessario sarà inaccettabile. Ad esempio, la trasmissione di 1 TB di dati su una linea T1 (0.15 GB/s) richiede almeno 60 giorni, in condizioni ottimali. Inoltre, utilizza un sacco di larghezza di banda, memoria e tempo della CPU sui computer remoti e locali. La soluzione è quella di inviare un disco rigido all'amministratore del set di dati remoto in modo che s/he possa fare una copia del set di dati e inviare il disco rigido indietro a voi. Utilizzare i dati come punto di partenza eEDDGridCopia aggiungerà i dati ad esso. (Questo è un modoServizio cloud EC2 di Amazongestisce il problema, anche se il loro sistema ha un sacco di larghezza di banda.)
ATTENZIONE: Se un dato valore per il più a sinistra (primo) l'asse variabile scompare dal set di dati remoto,EDDGridCopia NON cancella il file copiato locale. Se vuoi, puoi cancellarlo da solo.
Controllo della copia della griglia Dati
Thedatasets.xmlper questo dataset può avere un tag opzionale
<checkSourceData>true</checkSourceData>
Il valore predefinito è vero. Se/quando lo si imposta a false, il dataset non controllerà mai il dataset sorgente per vedere se ci sono dati aggiuntivi disponibili.
solo da
Si può direEDDGridCopia per fare una copia di un sottoinsieme del dataset sorgente, invece dell'intero dataset sorgente, aggiungendo un tag nel modulo<solo dal punto di vista alcuni Valore </onlySince> al datasetdatasets.xmlSbagliato.EDDGridCopia scarica solo i valori dei dati relativi ai valori della prima dimensione (di solito la dimensione del tempo) che sono più grandi alcuni Valore . alcuni Valore può essere:
-
Un tempo relativo specificato tramitenow- NIENTE . Per esempio,<solo dal punto di vistanow-2 anni</onlySince> dice al dataset di fare solo copie locali dei dati per i dati in cui i valori della dimensione esterna (di solito i valori di tempo) sono negli ultimi 2 anni (che viene rivalutato ogni volta che il dataset viene ricaricato, che è quando cerca nuovi dati da copiare) . Vedere lanow- NIENTE descrizione sintassi. Questo è utile se la prima dimensione ha dati di tempo, che di solito fa.
EDDGridCopia non elimina i file di dati locali che hanno dati che, nel tempo, diventano più vecchi dinow- NIENTE . È possibile eliminare quei file in qualsiasi momento se si sceglie di farlo. Se lo fai, ti consigliamo vivamente di impostare unbandieradopo aver eliminato i file da raccontareEDDGridCopia per aggiornare l'elenco dei file memorizzati nella cache.
-
Un punto fisso nel tempo specificato come una stringa ISO 8601yyyy-MM-ddTHH:mm:ssZ. Per esempio,<Solo dal 2000-01T00:00:00:00:00Z</onlySince> dice al dataset solo per fare copie locali di dati in cui il valore della prima dimensione è \>=2000-01T00:00:00Z . Questo è utile se la prima dimensione ha dati di tempo, che di solito fa.
-
Un numero di punti galleggianti. Per esempio,<solo dal punto di vista>946684800.0<. Le unità saranno le unità di destinazione della prima dimensione. Per esempio, per dimensioni del tempo, le unità inERDDAP™sono sempre"seconds since 1970-01-01T00:00:00Z". Così 946684800.0"seconds since 1970-01-01T00:00:00Z"è equivalente a 2000-01-01T00:00:00Z. Questa è sempre un'opzione utile, ma è particolarmente utile quando la prima dimensione non ha dati di tempo.
EDDGridCopia uso ricomposto
- Creare<Dataset > ingresso (il tipo nativo, nonEDDGridCopia) per la fonte di dati remota. Funziona correttamente, inclusi tutti i metadati desiderati.
- Se è troppo lento, aggiungere il codice XML per avvolgerlo in unEDDGridRicevuto.
- Utilizzare un diversodatasetID (forse cambiandodatasetIDdel vecchiodatasetIDleggermente) .
- Copiare<accessibile A ><reloadEveryNMinutes> e<onChange> dal telecomandoEDDGrid's XML alEDDGridLa copia e' XML. (I loro valoriEDDGridCopia materia; i loro valori per l'insieme dei dati interni diventano irrilevanti.)
- ERDDAP™farà e manterrà una copia locale dei dati.
- ATTENZIONE:EDDGridCopia presume che i valori di dati per ogni pezzo non cambino mai. Se / quando lo fanno, è necessario eliminare manualmente i file chunk in BigParentDirectory /copia/ datasetID / che è cambiato ebandierail set di dati da ricaricare in modo che i pezzi eliminati saranno sostituiti. Se si dispone di un abbonamento e-mail al dataset, si otterrà due e-mail: una quando il dataset prima ricarica e inizia a copiare i dati, e un'altra quando il dataset carica di nuovo (automaticamente) e rileva i nuovi dati locali.
- Tutti i valori dell'asse devono essere uguali. Per ciascuno degli assi tranne il più a sinistra (primo) , tutti i valori devono essere uguali per tutti i bambini. La precisione del test è determinata damatchAxisNDigits.
- Impostazioni, metadati, variabili --EDDGridCopia utilizza le impostazioni, i metadati e le variabili dal dataset di origine allegato.
- Cambiare i metadati -- Se hai bisogno di cambiareaddAttributeso modificare l'ordine delle variabili associate al dataset sorgente:
- CambiareaddAttributesper il dataset sorgente indatasets.xml, come necessario.
- Eliminare uno dei file copiati.
- Impostare unbandieraper ricaricare immediatamente il dataset. Se si utilizza una bandiera e si dispone di un abbonamento e-mail al dataset, si otterrà due e-mail: una quando il dataset ricarica prima e inizia a copiare i dati, e un'altra quando il dataset carica di nuovo (automaticamente) e rileva i nuovi dati locali.
- Il file eliminato verrà rigenerato con i nuovi metadati. Se il dataset sorgente non è mai disponibile, ilEDDGridCopia dataset otterrà metadati dal file rigenerato, dal momento che è il file più giovane.
EDDGridCopia scheletro 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>
EDDTable FromCassandra
EDDTable FromCassandra gestisce i dati da unoCassandratavolo. Cassandra è un database NoSQL.
- ERDDAP™può lavorare con Cassandra v2 e v3 senza modifiche o differenze di configurazione. Abbiamo testato conCassandra v2 e v3 da Apache. È probabile cheERDDAP™può anche lavorare con Cassandra scaricato da DataStax.
- Per il mese di agosto 2019 - maggio 2021, abbiamo avuto difficoltà a ottenere Cassandra di lavorare con AdoptOpenJdkJavav8. Ha lanciato un'ESCEPTION\_ACCESS\_VIOLATION). Ma ora (maggio 2021) , quel problema è andato: possiamo usare con successo Cassandra v2.1.22 e AdoptOpenJdk jdk8u292-b10.
Una tabella
Cassandra non supporta i "joins" nel modo in cui fanno i database relazionali. UnoERDDAP™EDDTableFromCassandra dataset mappe a uno (forse un sottoinsieme di uno) Tavolo Cassandra.
Cassandradatasets.xml
- ERDDAP™viene con la CassandraJavadriver, quindi non è necessario installarlo separatamente.
- Leggi attentamente tutte le informazioni di questo documento su EDDTableFromCassandra. Alcuni dei dettagli sono molto importanti.
- La CassandraJavadriver è destinato a lavorare con Apache Cassandra (1.2+) e DataStax Enterprise (3.1+) . Se si utilizza Apache Cassandra 1.2.x, è necessario modificare il file cassandra.yaml per ogni nodo per impostare start\_native\_transport: true, quindi riavviare ogni nodo.
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. È quindi possibile modificarlo per affinarlo (soprattutto [<partizione Nome chiave» (#partitionkeysourcenames) ). È possibile raccogliere la maggior parte delle informazioni necessarie per creare l'XML per un dataset EDDTableFromCassandra contattando l'amministratore Cassandra e cercando il web.
Genera i dati Xml ha due opzioni speciali per EDDTableFromCassandra:
- Se si entra "!!!LIST!!!" (senza le citazioni) per lo spazio chiave, il programma visualizzerà un elenco di keyspaces
- Se si entra in uno spazio chiave specifico e quindi inserire "!!!LIST!!!" (senza le citazioni) per il nome del tavolo, il programma visualizzerà un elenco di tabelle in quel keyspace e le loro colonne.
Sensibilità del caso
- Case-insensibile Keyspace e nomi della tabella - Cassandra tratta keyspace e nomi da tavolo in modo insensibile. A causa di questo, non dovete mai usare una parola riservata (ma con un caso diverso) come uno spazio chiave Cassandra o un nome da tavolo.
- Nome della colonna insensibile -- Per impostazione predefinita, Cassandra tratta i nomi delle colonne in modo insensibile. Se si utilizza una delle parole riservate di Cassandra come nome di colonna (Ti prego, no!) , tu devi usare
<columnNameQuotes>"<columnNameQuotes>
indatasets.xmlper questo dataset in modo che Cassandra eERDDAP™tratterà i nomi delle colonne in modo sensibile al caso. Questo probabilmente sarà un enorme mal di testa per voi, perché è difficile determinare le versioni caso-sensibili dei nomi delle colonne -- Cassandra mostra quasi sempre i nomi delle colonne come tutti i minuscoli, indipendentemente dal vero caso.
- Lavorare a stretto contatto con l'amministratore Cassandra, che può avere esperienza rilevante. Se il dataset non riesce a caricare, leggeremessaggio di erroreattentamente per scoprire perché.
Cassandra<connessione Proprietà >
Cassandra ha proprietà di connessione che possono essere specificate indatasets.xml. Molti di questi influenzeranno l'andamento della Cassandra-ERDDAP™connessione. Purtroppo, le proprietà di Cassandra devono essere impostate programmaticamente inJava#ERDDAP™deve avere il codice per ogni proprietàERDDAP™supporti. Attualmente,ERDDAP™supporta queste proprietà: (I default visualizzati sono ciò che vediamo. I default del sistema potrebbero essere diversi.)
- Opzioni generali
<connessione Nome di proprietà=" compressione > nessuno|LZ4|snappy </connessione Proprietà (case-insensibile, default=none)
(Consigli generali di compressione: usare 'none' se il collegamento tra Cassandra eERDDAP™è locale/veloce e utilizzare 'LZ4' se la connessione è remota/slow.)
<connessione Nome di proprietà=" credenziali > nome utente/password </connessione Proprietà (E' una lettera'/')
<connessione Nome di proprietà=" metriche > vero|falso </connessione Proprietà (2021-01-25 era predefinito=vero, ora ignorato e sempre falso)
<connessione Nome di proprietà=" porto > Anonimo </connessione Proprietà (default per il protocollo binario nativo=9042)
<connessione Nome di proprietà=" # > vero|falso </connessione Proprietà (default=false)
(Il mio rapido tentativo di usare ssl fallito. Se hai successo, per favore dimmi come hai fatto.) - Opzioni di query
<connessione Nome di proprietà=" consistenza Livello > Tutto|qualsiasi|ciascuno|locale / locale|locale\_quorum|locale\_serial|uno|quorum|seriale|tre|Due </connessione Proprietà (case-insensibili, default=ONE)
<connessione Nome di proprietà=" Preferito > Anonimo </connessione Proprietà (predefinito = 5000)
(Non impostare fetchSize ad un valore più piccolo.)
<connessione Nome di proprietà=" serialConsistencyLevel > Tutto|qualsiasi|ciascuno|locale / locale|locale\_quorum|locale\_serial|uno|quorum|seriale|tre|Due </connessione Proprietà (caso-insensibile, predefinito=SERIAL) - Opzioni di presa
<connessione Nome di proprietà=" collegareTimeoutMillis > Anonimo </connessione Proprietà (predefinito = 5000)
(Non impostare la connessione TimeoutMillis ad un valore più piccolo.)
<connessione Nome di proprietà=" mantenere viva > vero|falso </connessione Proprietà <connessione Nome di proprietà=" Leggi TimeoutMillis > Anonimo </connessione Proprietà (Cassandra's default readTimeoutMillis è 12000, maERDDAP™cambia il default a 120000. Se Cassandra sta lanciando readTimeouts, aumentando questo potrebbe non aiutare, perché Cassandra a volte li lancia prima di questa volta. Il problema è più probabile che si memorizzano troppi dati per partizione Combinazione chiave.)
<connessione Nome di proprietà=" ricevereBufferSize > Anonimo </connessione Proprietà (Non è chiaro ciò che il default riceveBufferSize è. Non impostare questo a un piccolo valore.)
<connessione Nome di proprietà=" Solitario > Anonimo </connessione Proprietà <connessione Nome di proprietà=" TcpNoDelay > vero|falso </connessione Proprietà (default=null)
Se è necessario essere in grado di impostare altre proprietà di connessione, vedere il nostrosezione per ottenere supporto aggiuntivo.
Per una data startup di Tomcat, la connessioneProperties viene utilizzata solo la prima volta che un dataset viene creato per un dato URL Cassandra. Tutti i reload di quel dataset e tutti i successivi dataset che condividono lo stesso URL utilizzeranno quelle connessioni originaliProperties.
CQL
La lingua di query della Cassandra (CQL) è superficiale come SQL, la lingua di query utilizzata dai database tradizionali. Perché?OPeNDAP'le richieste di dati tabulari sono state progettate per imitare le richieste di dati tabular SQL, è possibile perERDDAP™per convertire le richieste di dati tabulari in CQL Bound/PreparedStatements.ERDDAP™registra la dichiarazione inlog.txtcome
dichiarazione come testo: lo stato di testo
La versione dell'affermazione che vedete sarà una rappresentazione del testo dell'affermazione e avrà solo "?", dove saranno collocati i valori di vincolo.
Non così semplice... Purtroppo, CQL ha molte restrizioni su cui le colonne possono essere interrogate con quali tipi di vincoli, ad esempio, le colonne chiave della partizione possono essere limitate con = e IN, quindiERDDAP™invia alcuni vincoli a Cassandra e applica tutti i vincoli dopo che i dati vengono ricevuti da Cassandra. Per aiutareERDDAP™trattare in modo efficiente con Cassandra, è necessario specificare [<partizione Nome chiave» (#partitionkeysourcenames) ♪<clusterColumnSourceNames>] (#clustercolumnsourcenames) E...<indiceColumnSourceNames>] (#indexcolumnsourcenames) indatasets.xmlper questo dataset. Questi sono i modi più importanti per aiutareERDDAP™lavorare in modo efficiente con Cassandra. Se non lo diciERDDAP™queste informazioni, il dataset sarà dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
<partizione KeySourceNames>
Perché le chiavi della partizione giocano un ruolo centrale nelle tabelle Cassandra,ERDDAP™ha bisogno di saperesourceNames e, se pertinente, altre informazioni su come lavorare con loro.
- È necessario specificare un elenco separato da virgola dei nomi delle colonne delle chiavi di partizione indatasets.xmlvia<partizione KeySourceNames>. Esempio semplice,
<partitionKeySourceNames>station, deviceid<partitionKeySourceNames>
Esempio più complesso,
<partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
- TimeStamp Partition Keys -- Se una delle colonne chiave della partizione è una colonna timestamp che ha una versione di un'altra colonna timestamp, specificare questo tramite
partizioneKeySourcName/altroColumnSourceName/time\_precision
dovetime\_precisionè uno deitime\_precisionstringhe utilizzate altrove inERDDAP. Il sentiero Z neltime\_precisionstringa è il default, quindi non importa se latime\_precisionstringa termina in Z o no. Per esempio,ERDDAP™interpreterà la data/sampletime/1970-01-01 come "I vincoli per la data possono essere costruiti da vincoli sull'ora del campione utilizzando questotime\_precision." La conversione effettiva dei vincoli è più complessa, ma questa è la panoramica. Utilizzare questo ogni volta che è rilevante. ConsenteERDDAP™lavorare in modo efficiente con Cassandra. Se questo rapporto tra colonne esiste in una tabella Cassandra e non lo diciERDDAP™, il dataset sarà dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra. - Singola Tasti di partizione del valore -- Se vuoi unERDDAP™dataset per lavorare con un solo valore di una chiave di partizione, specificare partizioneKeySourceName=valore . Non usare preventivi per una colonna numerica, ad esempio, deviceid=1007 Utilizzare le citazioni per una colonna String, per esempio, stationid="Point Pinos"
- Dataset Default Ordinare -- L'ordine della chiave di partizione<dataVariable> è indatasets.xmldetermina l'ordine predefinito dei risultati da Cassandra. Naturalmente, gli utenti possono richiedere un ordine diverso per una data serie di risultati tramite appending &orderBy (" elenco separato da virgola delle variabili ") alla fine della loro domanda.
- Per impostazione predefinita, Cassandra eERDDAP™trattare i nomi delle colonne in modo insensibile. Ma se si impostacolonnaNameQuotes"ERDDAP™tratterà i nomi delle colonne Cassandra in modo sensibile al caso.
<partizione KeyCSV>
Se questo è specificato,ERDDAP™lo userà invece di chiedere a Cassandra per la partizione Informazioni chiave ogni volta che il dataset viene ricaricato. Questo fornisce l'elenco dei valori chiave di partizione distinti, nell'ordine che verranno utilizzati. I tempi devono essere specificati come secondi dal 1970-01-01T00:00:00Z. Ma ci sono anche due modi alternativi speciali per specificare i tempi (ogni codificato come una stringa) :
- tempo (aISO8601 Tempo) (MAY essere codificato come una stringa)
- "tempo" (aISO8601StartTime, strideSeconds, stopTime) " (DEVE essere codificato come una stringa)
Fermati. Il tempo può essere ISO8601 Tempo o "now-tempo (ad esempio, "now-3 minuti") . Fermati. Il tempo non deve essere esattamente un inizio Tempo + x strideSeconds. Una fila con le volte () il valore viene espanso in più righe prima di ogni query, quindi l'elenco della partizione Le chiavi possono essere sempre perfettamente aggiornate. Per esempio,
<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>
si espande in questa tabella di combinazioni di tasti partizione:
deviceid,date
1001,1.4148E9
1001,1.4148864E9
1007,1.4153184E9
1008,1.4154048E9
1009,1.4154912E9
<clusterColumnSourceNames>
Cassandra accetta vincoli SQL-like sulle colonne a grappolo, che sono le colonne che formano la seconda parte della chiave primaria (dopo la chiave della partizione (#) ) . Quindi, è essenziale che identifichi queste colonne tramite<clusterColumnSourceNames>. Questo consenteERDDAP™lavorare in modo efficiente con Cassandra. Se ci sono colonne di cluster e non lo diciERDDAP, il dataset sarà dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
- Per esempio,<clusterColumnSourceNames> myClusterColumn1, myClusterColumn2 </clusterColumnSourceNames>
- Se una tabella Cassandra non ha colonne di cluster, non specificare<clusterColumnSourceNames>, o specificarlo senza valore.
- Per impostazione predefinita, Cassandra eERDDAP™trattare i nomi delle colonne in modo insensibile. Ma se si impostacolonnaNameQuotes"ERDDAP™tratterà i nomi delle colonne Cassandra in modo sensibile al caso.
<indiceColumnSourceNames>
Cassandra accetta'='vincoli sulle colonne indici secondari, che sono le colonne che hai esplicitamente creato indici per via
CREATE INDEX *indexName* ON *keyspace.tableName* (*columnName*);
(Sì, sono necessarie le parentesi.)
Quindi, è molto utile se si identificano queste colonne tramite<IndiceColumnSourceNames>. Questo consenteERDDAP™lavorare in modo efficiente con Cassandra. Se ci sono colonne di indice e non lo diciERDDAP, alcune domande saranno inutilmente, dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
- Per esempio,<indiceColumnSourceNames> myIndexColumn1, myIndexColumn2 </indexColumnSourceNames>
- Se una tabella Cassandra non ha colonne di indice, non specificare<indiceColumnSourceNames>, o specificarlo senza valore.
- ATTENZIONE: Gli indici Cassandra non sono come gli indici dei database. Gli indici Cassandra aiutano solo con'='vincoli. E sono soloraccomandatoper colonne che hanno valori molto meno distinti rispetto ai valori totali.
- Per impostazione predefinita, Cassandra eERDDAP™trattare i nomi delle colonne in modo insensibile. Ma se si impostacolonnaNameQuotes"ERDDAP™tratterà i nomi delle colonne Cassandra in modo sensibile al caso.
<maxRequestFraction>
QuandoERDDAP™ (re) carica un dataset,ERDDAP™ottiene da Cassandra l'elenco di combinazioni distinte delle chiavi di partizione. Per un enorme dataset, il numero di combinazioni sarà enorme. Se si desidera impedire agli utenti di richiedere la maggior parte o tutti i dataset (o anche una richiesta che chiedeERDDAP™per scaricare la maggior parte o tutti i dati per filtrarlo ulteriormente) # You can tell #ERDDAP™solo per consentire richieste che riducono il numero di combinazioni di un certo importo tramite<maxRequestFraction>, che è un numero di punto variabile tra 1e-10 (che significa che la richiesta non può avere più di 1 combinazione in un miliardo) e 1 (il default, il che significa che la richiesta può essere per l'intero dataset) . Ad esempio, se un dataset ha 10000 combinazioni distinte delle chiavi della partizione e maxRequestFraction è impostato a 0.1, poi le richieste che necessitano di dati da 1001 o più combinazioni genereranno un messaggio di errore, ma le richieste che necessitano di dati da 1000 o meno combinazioni saranno consentite.
Generalmente, più grande è il dataset, più basso è necessario impostare<maxRequestFraction>. Così si potrebbe impostare a 1 per un piccolo dataset, 0.1 per un dataset di medie dimensioni, 0.01 per un grande dataset, e 0.0001 per un enorme dataset.
Questo approccio è lontano da perfetto. Essa porterà ad alcune ragionevoli richieste di rigetto e ad alcune richieste troppo grandi. Ma è un problema difficile e questa soluzione è molto meglio di niente.
CassandrasubsetVariables
Come con altri set di dati EDDTable, è possibile specificare un elenco separato da virgola di<dataVariable>destinationNames in un attributo globale chiamato "subsetVariables" per identificare variabili che hanno un numero limitato di valori. Il dataset avrà poi una pagina web .subset e mostra liste di valori distinti per quelle variabili in elenchi a discesa su molte pagine web.
Comprese solo le variabili chiave di partizione e le colonne statiche nell'elenco è STRONGLY ENCOURAGED. Cassandra sarà in grado di generare l'elenco di combinazioni distinte molto rapidamente e facilmente ogni volta che il dataset viene ricaricato. Un'eccezione è chiavi di partizione timestamp che sono versioni grossolane di qualche altra colonna timestamp -- è probabilmente meglio lasciare questi dall'elenco disubsetVariablesdal momento che ci sono un gran numero di valori e non sono molto utili per gli utenti.
Se si include la chiave di non partizione, variabili non statiche nell'elenco, probabilmente sarà Molto bene. computazionalmente costoso per Cassandra ogni volta che il dataset viene ricaricato, perchéERDDAP™deve guardare attraverso ogni riga del dataset per generare le informazioni. Infatti, la query à ̈ probabile che fallisca. Quindi, ad eccezione di piccoli dataset, questo è STRONGLY DISCOURAGED.
Cassandra DataTipe
Perché c'è qualche ambiguità su cuiTipo di dati Cassandramappa a cuiERDDAP™tipi di dati, è necessario specificare un [<dataType>] (#datatype #) tag per ogni [<dataVariable> (#datavariabile #) per direERDDAP™quali datiTipo da usare. Lo standardERDDAP™dati Tipi (e i più comuni tipi di dati Cassandra corrispondenti) sono:
- boolean (boolean) cheERDDAP™poi memorizza come byte
- byte (int, se la gamma è -128 a 127)
- breve (int, se la gamma è -32768 a 32767)
- In (int, contro?, varint?, se la gamma è -2147483648 a 2147483647)
- lungo (bigint, counter?, varint?, se la gamma è -9223372036854775808 a 9223372036854775807)
- galleggiante (galleggiante)
- doppio (doppia, decimale (con possibile perdita di precisione) ♪)
- carbone (ascii o testo, se non hanno mai più di 1 carattere)
- String (ascii, text, varchar, inet, uuid, timeuuid, blob, map, set, list?)
Cassandratimestampè un caso speciale: usoERDDAP'due dati Tipo.
Se specifichi un dati di stringaTipo inERDDAP™per una mappa, un insieme o un elenco di Cassandra, la mappa, il set o l'elenco su ogni riga Cassandra saranno convertiti in una singola stringa su una singola rigaERDDAP™tavolo.ERDDAP™ha un sistema alternativo per le liste; vedi sotto.
tipo Liste...ERDDAP#<dataType>] (#datatype #) tag per CassandradataVariables può includere il regolareERDDAP™dati Tipi (vedi sopra) più diversi dati specialiTipi che possono essere utilizzati per colonne di elenco Cassandra: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, floatList, doubleList, charList, StringList. Quando una di queste colonne di elenco è nei risultati che vengono passati aERDDAP™, ogni riga di dati di origine verrà estesa all'elenco. dimensione () righe di dati inERDDAP; dati semplici Tipi (per esempio, int) in quella riga di dati di origine sarà l'elenco duplicato. dimensione () tempi. Se i risultati contengono più di una variabile di elenco, tutti gli elenchi su una determinata riga di dati DEVE avere la stessa dimensione e DEVE essere liste "parallele" oERDDAP™genererà un messaggio di errore. Ad esempio, per le misurazioni delle correnti da un ADCP, profondità\[0\],\[0\],\[0\], e\[0\]sono tutti correlati, e profondità\[1\],\[1\],\[1\], e\[1\]sono tutti correlati, ... In alternativa, se non vuoiERDDAP™per espandere un elenco in più righeERDDAP™tabella, specificare String comedataVariable'i dati Tipo così l'intero elenco sarà rappresentato come uno String su una riga inERDDAP.
Cassandra TimeStampa dati
I dati del timestamp di Cassandra sono sempre consapevoli dei fusi orari. Se si immetteno dati timestamp senza specificare un fuso orario, Cassandra assume che il timestamp utilizzi il fuso orario locale.
ERDDAP™supporta i dati timestamp e presenta sempre i dati nelZulu/GMT fuso orario. Quindi, se si inserisce i dati timestamp in Cassandra utilizzando un fuso orario diverso da quelloZulu/GMT, ricorda che è necessario fare tutte le domande per i dati timestamp inERDDAP™usandoZulu/GMT fuso orario. Quindi non essere sorpreso quando i valori timestamp che escono daERDDAPsono spostati da diverse ore a causa del commutatore di fuso orario da locale aZuluL'ora della GMT.
- InERDDAP'datasets.xml, nel<dataVariable> tag per una variabile di timestamp, set
<dataType>double</dataType>
e<addAttributes> set
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Suggerimento: Se i dati sono un intervallo di tempo, è utile avere i valori timestamp si riferiscono al centro dell'intervallo di tempo implicito (per esempio, mezzogiorno) . Ad esempio, se un utente ha dati per 2010-03-26T13:00Z da un altro dataset e desidera i dati più vicini da questo dataset Cassandra che ha dati per ogni giorno, quindi i dati per 2010-03-26T12:00Z (rappresentazione dei dati Cassandra per tale data) è ovviamente il migliore (al contrario della mezzanotte prima o dopo, dove è meno evidente che è meglio) .
- ERDDAP™ha una utilità perConvertire un Numerico Tempo di / da un tempo di stress.
- VediCome?ERDDAP™Offerte con il tempo.
Integer nulls
Cassandra sostiene nulls in Cassandra int (ERDDAP™In) e bigint (ERDDAP™lungo) colonne, maERDDAP™non supporta i veri nulls per qualsiasi tipo di dati interi. Per impostazione predefinita, Cassandra integer nulls sarà convertito inERDDAP™a 2147483647 per colonne int, o 9223372036854775807 per colonne lunghe. Questi apparirà come "NaN" in alcuni tipi di file di output di testo (per esempio, .csv) , "" in altri tipi di file di output di testo (per esempio,.htmlTable) , e il numero specifico (2147483647 per valori int mancanti) in altri tipi di file (per esempio, file binari come.nce tappetino) . Un utente può cercare righe di dati con questo tipo di valore mancante facendo riferimento a "NaN", ad esempio "&windSpeed=NaN".
Se si utilizza un altro valore intero per indicare i valori mancanti nella tabella Cassandra, si prega di identificare quel valore indatasets.xml:
<att name="missing\_value" type="int"\>-999</att>
Per colonne a punto galleggiante Cassandra, nulls vengono convertiti in NaNsERDDAP. Per i tipi di dati Cassandra convertiti in stringheERDDAP™, nulls ottenere convertito a vuoto Strings. Non dovrebbe essere un problema.
" ATTENZIONE: Re-preparing già preparato query"
- " ATTENZIONE: Re-preparing già preparato query" in tomcat /logs/catalina.out (o qualche altro file di registro Tomcat)
La documentazione di Cassandra dice che c'è problema se la stessa query è fatta in uno stato preparato due volte (o più) . (Vedi questorapporto bug.) Per evitare di far arrabbiare Cassandra,ERDDAP™caches all ReadydStatements in modo da poterli riutilizzare. Quella cache è persa se/quando Tomcat/ERDDAP™è riavviata, ma penso che vada bene perché gli Stati preparatori sono associati a una data sessione (traJavae Cassandra) , che è anche perso. Quindi, potete vedere questi messaggi. Non conosco nessun'altra soluzione. Fortunatamente, è un avvertimento, non un errore (anche se Cassandra minaccia che può portare a problemi di prestazione) .
Cassandra sostiene che gli Stati preparati sono buoni per sempre, quindiERDDAPGli Stati Preparad non dovrebbero mai diventare out-of-date/invalid. Se questo non è vero, e si ottiene errori su alcuni Stati preparati essere out-of-date/invalid, allora è necessario riavviareERDDAP™per liberareERDDAPE' la cache di ReadydStatements.
Cassandra Sicurezza
Quando si lavora con Cassandra, è necessario fare le cose il più in modo sicuro e sicuro possibile per evitare di consentire a un utente dannoso di danneggiare la Cassandra o ottenere l'accesso ai dati a cui non dovrebbero avere accesso.ERDDAP™Cerca anche di fare le cose in modo sicuro.
- Vi incoraggiamo a prepararviERDDAP™per connettersi a Cassandra come utente Cassandra che ha solo accesso rilevante tavolo (#) e ha solo privilegi READ.
- Vi invitiamo a impostare il collegamento daERDDAP™a Cassandra così che
- usa sempre SSL,
- solo consente connessioni da un indirizzo IP (o un blocco di indirizzi) e da quelloERDDAP™utente, e
- trasferisce solo le password nel loro MD5 hashed form.
- \[PROBLEMI DI LAVORO\]La connessioneProprietà (inclusa la password!) sono memorizzati come testo normale indatasets.xml. Non abbiamo trovato un modo per consentire all'amministratore di inserire la password di Cassandra durante ilERDDAP's startup in Tomcat (che si verifica senza input utente) , quindi la password deve essere accessibile in un file. Per rendere questo più sicuro:
-
(ilERDDAP™amministratore) dovrebbe essere il proprietario didatasets.xmle avere accesso READ e WRITE.
- Fai un gruppo che include solo user=tomcat. Utilizzare chgrp per rendere che il gruppo perdatasets.xml, con solo privilegi READ.
- Utilizzare chmod per assegnare privilegi o-rwx (nessun accesso READ o WRITE per "altri utenti") perdatasets.xml.
-
- QuandoERDDAP™, la password e altre proprietà di connessione sono memorizzate in "privato"Javavariabili.
- Le richieste dei clienti sono analizzate e verificate per la validità prima di generare le richieste CQL per Cassandra.
- Le richieste a Cassandra sono fatte con CQL Bound/PreparedStatements, per evitare l'iniezione CQL. In ogni caso, Cassandra è intrinsecamente meno sensibile all'iniezione di CQL rispetto ai database tradizionali.SQL injection.
Velocità di cassandra
Cassandra può essere veloce o lento. Ci sono alcune cose che puoi fare per farlo in fretta:
- In generale - La natura di CQL è che le query sonodichiarativo. Specificano solo ciò che l'utente vuole. Non includono una specifica o suggerimenti per come la query deve essere gestita o ottimizzata. Quindi non c'è modo diERDDAP™generare la query in modo tale che aiuti Cassandra ad ottimizzare la query (o in qualsiasi modo specifica come la query deve essere gestita) . In generale, spetta all'amministratore Cassandra impostare le cose (per esempio, indici) ottimizzare per alcuni tipi di query.
- Specificare le colonne timestamp che sono relative a tasti di partizione timestamp di precisione di coarser via [<partizione Nome chiave» (#partitionkeysourcenames) è il modo più importante per aiutareERDDAP™lavorare in modo efficiente con Cassandra. Se questo rapporto esiste in un tavolo Cassandra e non lo diciERDDAP™, il dataset sarà dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
- Specificare le colonne del cluster tramite [<clusterColumnSourceNames>] (#clustercolumnsourcenames) è il secondo modo più importante per aiutareERDDAP™lavorare in modo efficiente con Cassandra. Se ci sono colonne di cluster e non lo diciERDDAP, un grande sottoinsieme delle possibili query per i dati sarà inutilmente, dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
- #Indiciper Variabili Comunemente Constrained -- È possibile accelerare alcune query creando indici per colonne Cassandra che sono spesso costrette con vincoli "=".
Cassandra non può fare indici per le colonne di elenco, set o mappa.
- Specificare le colonne dell'indice tramite [<indiceColumnSourceNames>] (#indexcolumnsourcenames) è un modo importante per aiutareERDDAP™lavorare in modo efficiente con Cassandra. Se ci sono colonne di indice e non lo diciERDDAP, alcune domande per i dati saranno inutilmente, dolorosamente lento inERDDAP™e usare tonnellate di risorse Cassandra.
Cassandra Stats
- Messaggi diagnostici "Cassandra stats"-- Per ogniERDDAP™query utente a un dataset Cassandra,ERDDAP™stamperà una linea nel file di registro, BigParentDirectory /logs/log.txt, con alcune statistiche relative alla query, per esempio,
\\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405
Utilizzando i numeri nell'esempio precedente, questo significa:
- QuandoERDDAP™Ultimo (re) caricato questo dataset, Cassandra dettoERDDAP™che ci sono state 10000 combinazioni distinte delle chiavi della partizione.ERDDAP™memorizzato tutte le combinazioni distinte in un file.
- A causa dei vincoli dell'utente,ERDDAP™identificato 2 combinazioni su 10000 che potrebbero avere i dati desiderati. Allora...ERDDAP™farà 2 chiamate a Cassandra, una per ogni combinazione delle chiavi di partizione. (Ecco cosa richiede Cassandra.) Chiaramente, è problematico se un grande dataset ha un gran numero di combinazioni delle chiavi di partizione e una data richiesta non riduce drasticamente questo. È possibile richiedere che ogni richiesta ridurre lo spazio chiave impostando [<MaxRequestFraction>] (# Maxrequestfraction) . Qui, 2/10000=2e-4, che è inferiore alla maxRequestFraction (0,1) , così la richiesta è stata consentita.
- Dopo aver applicato i vincoli sulle chiavi della partizione,colonne di clusterecolonne indiceche sono stati inviatiERDDAP™, Cassandra ha restituito 1200 file di dati aERDDAP™nel Risultato.
- Il Risultato Set deve aver avutodati Traduzione: qualche tipo Elencocolonne (con una media di 10 elementi per lista) perchéERDDAP™ampliato le 1200 file da Cassandra in 12000 righe inERDDAP.
- ERDDAP™applica sempre tutti i vincoli dell'utente ai dati di Cassandra. In questo caso, i vincoli che Cassandra non aveva mosso hanno ridotto il numero di file a 7405. Questo è il numero di righe inviate all'utente.
L'uso più importante di questi messaggi diagnostici è quello di assicurarsi cheERDDAP™sta facendo quello che pensi stia facendo. Se non lo è (per esempio, non sta riducendo il numero di combinazioni distinte come previsto?) Poi puoi usare le informazioni per cercare di capire cosa sta succedendo.
- Ricerca e sperimentazione per trovare e impostare meglio [<connessioneProperty>] (#cassandra-connectionproperty) 's.
- Controllare la velocità della connessione di rete tra Cassandra eERDDAP. Se la connessione è lenta, vedere se è possibile migliorare. La situazione migliore è quandoERDDAP™è in esecuzione su un server collegato allo stesso (veloce) passare come server che esegue il nodo Cassandra a cui si collega.
- Sii paziente. Leggi attentamente le informazioni qui e nella documentazione Cassandra. Esperimento. Controlla il tuo lavoro. Se la Cassandra...ERDDAP™il collegamento è ancora più lento di quanto ci si aspetta, si prega di includere lo schema della tabella Cassandra e il vostroERDDAP™pezzo didatasets.xmle vedere il nostrosezione per ottenere supporto aggiuntivo.
- Se tutto il resto fallisce, considerare la memorizzazione dei dati in una raccolta diNetCDFV.ncfile (soprattutto.ncfile che utilizzanoCFU Geometrie di smorzamento discreto (DSG) Contiguous Ragged Array strutture di dati e così può essere gestito conERDDAP'EDDTableFromNcCFFiles) . Se sono organizzati logicamente (ciascuno con i dati per un pezzo di spazio e tempo) ♪ERDDAP™può estrarre i dati da loro molto rapidamente.
EDDTableFromCassandra scheletro 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>
EDDTableFromDapSequenza
EDDTableFromDapSequenza gestisce variabili all'interno di sequenze di 1 e 2 livelli daDAPserver comeDAPPER (era https://www.pmel.noaa.gov/epic/software/dapper/ , ora interrotto) .
-
Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Puoi quindi modificarlo per affinarlo. È possibile raccogliere le informazioni necessarie guardando i file DDS e DAS del set di dati di origine nel browser (aggiungendo .das e .dds alsourceUrl(un esempio è stato https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds ).
-
Una variabile è in unaDAPsequenza se la risposta .dds indica che la struttura dei dati che tiene la variabile è una "sequenza" (caso insensibile) .
-
In alcuni casi, si vedrà una sequenza all'interno di una sequenza, una sequenza di 2 livelli -- EDDTableFromDapSequence gestisce anche questi.
EDDTableFromDapSequence scheletro 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>
EDDTableDatabase
EDDTableDatabase gestisce i dati da una tabella di database relazionale ovista.
Una tabella o vista
Se i dati che si desidera servire sono in due o più tabelle (e quindi ha bisogno di un JOIN per estrarre i dati da entrambe le tabelle contemporaneamente) # Devi farne uno #denormalizzato (già entrato) tavolo ovista con tutti i dati che si desidera rendere disponibili come dataset inERDDAP.
Per grandi database complessi, può avere senso separare diversi pezzi come tabelle denormalizzate, ciascuno con un diverso tipo di dati, che diventerà set di dati separati inERDDAP.
Fare un tavolo denormalizzato per l'usoERDDAP™Potrebbe sembrare un'idea folle per te. Ti prego, fidati di noi. Ci sono diversi motivi per cuiERDDAP™opere con tavoli denormalizzati:
- È molto più facile per gli utenti. QuandoERDDAP™presenta il dataset come una, semplice, denormalizzata, singola tabella, è molto facile per chiunque comprendere i dati. La maggior parte degli utenti non hanno mai sentito parlare di tabelle normalizzate, e pochissime comprendono le chiavi, le chiavi estere o le unioni di tabella, e quasi certamente non conoscono i dettagli dei diversi tipi di unioni, o come specificare l'SQL per fare un'unione (o più unioni) correttamente. Utilizzando un tavolo denormalizzato evita tutti quei problemi. Questa sola ragione giustifica l'uso di una singola tabella denormalizzata per la presentazione di un set di datiERDDAP™utenti.
- Tabelle normalizzate (più tabelle relative a colonne chiave) sono grandi per la memorizzazione dei dati in un database. Ma anche in SQL, il risultato che viene restituito all'utente è un denormalizzato (un) tavolo singolo. Così sembra ragionevole presentare il dataset agli utenti come un enorme, denormalizzato, singola tabella da cui possono quindi richiedere sottoinsiemi (ad esempio, mostrami le righe della tabella in cui la temperatura> 30) .
- È possibile apportare modificheERDDAP™senza cambiare i tavoli. ERDDAP™ha alcuni requisiti che possono essere diversi da come hai impostato il tuo database. Per esempio,ERDDAP™richiede che i dati timestamp vengano memorizzati in campi 'timestamp con timezone'. Facendo una tabella / vista separata perERDDAP™, si possono fare questi cambiamenti quando si effettua il tavolo denormalizzato perERDDAP. Così, non è necessario apportare modifiche ai vostri tavoli.
- ERDDAP™ricreare una parte della struttura dei tavoli normalizzati. È possibile specificare quali colonne di dati provengono dalle tabelle "outer" e quindi hanno un numero limitato di valori distinti.ERDDAP™raccoglierà tutte le diverse combinazioni di valori in queste colonne e le presenterà agli utenti su uno speciale . sottoset pagina web che aiuta gli utenti a selezionare rapidamente i sottoset del dataset. I valori distinti per ogni colonna sono mostrati anche negli elenchi a discesa sulle altre pagine web del set di dati.
- Una tabella denormalizzata rende i dati di consegna da voi aERDDAPamministratore facile. Sei l'esperto di questo dataset, quindi ha senso che si prendono le decisioni su quali tabelle e quali colonne unirsi e come unirsi a loro. Quindi non devi consegnarci. (o peggio, gli utenti finali) diverse tabelle e istruzioni dettagliate per unirsi a loro, basta darci accesso al tavolo denormalizzato.
- Una tabella denormalizzata consente un accesso efficiente ai dati. La forma denormalizzata è di solito più veloce da accedere rispetto alla forma normalizzata. I gruppi possono essere lenti. Le unioni multiple possono essere molto lente.
Per ottenere i dati da due o più tabelle nel databaseERDDAP™, ci sono tre opzioni:
- Opzione consigliata: È possibile creare un file a valore di virgola o separato dalla scheda con i dati dalla tabella denormalizzata. Se il dataset è enorme, allora ha senso creare diversi file, ciascuno con un sottoinsieme coeso della tabella denormalizzata (per esempio, i dati da un intervallo di tempo più piccolo) .
Il grande vantaggio è cheERDDAP™sarà in grado di gestire le richieste degli utenti per i dati senza ulteriori sforzi dal database. Quindi...ERDDAP™non sarà un peso sul tuo database o un rischio di sicurezza. Questa è l'opzione migliore in quasi tutte le circostanze perchéERDDAP™di solito può ottenere i dati dai file più velocemente di un database (se convertiamo i file .csv a.ncFile CF) . (Parte della ragione è cheERDDAP+files è un sistema di sola lettura e non deve affrontare i cambiamenti durante la fornituraACIDIO (Atomicità, resistenza, isolamento, durata) .) Inoltre, probabilmente non avrete bisogno di un server separato in quanto possiamo memorizzare i dati su uno dei nostri RAID e accedervi con un server esistenteERDDAP™su un server esistente.
- Ok Opzione: Hai impostato un nuovo database su un computer diverso con la tabella denormalizzata. Dal momento che questo database può essere un database gratuito e open source come MariaDB, MySQL e PostgreSQL, questa opzione non deve costare molto.
Il grande vantaggio è cheERDDAP™sarà in grado di gestire le richieste degli utenti per i dati senza ulteriori sforzi dal database corrente. Quindi...ERDDAP™Non sarà un peso sul tuo database attuale. Questo elimina anche un sacco di preoccupazioni di sicurezza dalERDDAP™non avrà accesso al database corrente.
-
Opzione scoraggiata: Possiamo connetterciERDDAP™al tuo database attuale. Per fare questo, è necessario:
- Creare una tabella o una visualizzazione separata con la tabella denormalizzata dei dati.
- Creare un utente "erddap" che ha accesso di sola lettura solo alla tabella denormalizzata (#) .
Questa è un'opzione se i dati cambiano molto frequentemente e si desidera dareERDDAP™l'accesso istantaneo a tali modifiche; tuttavia, anche così, può avere senso utilizzare l'opzione di file sopra e periodicamente (ogni 30 minuti?) sostituire il file che ha i dati di oggi. Gli enormi svantaggi di questo approccio sono cheERDDAP™le richieste dell'utente probabilmente metteranno un peso insopportabile sul tuo database e cheERDDAP™connessione è un rischio di sicurezza (anche se possiamo ridurre / gestire il rischio) .
Rendere il tavolo denormalizzato o la vista perERDDAP™è una buona opportunità per fare alcuni cambiamenti cheERDDAP™ha bisogno, in un modo che non influisce sui vostri tavoli originali:
- Modificare la data e i campi/colonne timestamp per utilizzare i datiTipo che le chiamate Postgrestimestamp con fuso orario (o l'equivalente nel tuo database) . I timestamp senza informazioni sul fuso orario non funzionano correttamenteERDDAP.
- Fare indici per le colonne che gli utenti spesso cercano.
- Essere molto consapevoli diil caso dei nomi del campo/colonna (per esempio, utilizzare tutte le minuscole) quando li digiti.
- Non usare parole riservate per la tabella e per i nomi campo/colonna.
Se hai bisogno di aiuto per fare la tabella o la visualizzazione denormalizzata, contatta l'amministratore del database. Se si desidera parlare di questo approccio intero o strategizzare come meglio farlo, si prega di e-mail Chris. John a noaa.gov.
database indatasets.xml
È difficile creare il correttodatasets.xmlinformazioni necessarie perERDDAP™stabilire una connessione al database. Sii paziente. Sii metodico.
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. Puoi quindi modificarlo per affinarlo.
Genera i dati Xml ha tre opzioni speciali per EDDTableFromDatabase:
- Se si entra "!!!LIST!!!" (senza le citazioni) per il nome del catalogo, il programma visualizzerà un elenco dei nomi del catalogo.
- Se si entra "!!!LIST!!!" (senza le citazioni) per il nome dello schema, il programma visualizzerà un elenco dei nomi degli schemi.
- Se si entra "!!!LIST!!!" (senza le citazioni) per il nome del tavolo, il programma visualizzerà un elenco di tabelle e le loro colonne. La prima voce "!!!LIST!!!" che fai è quella che verrà utilizzata.
- Leggi attentamente tutte le informazioni di questo documento su EDDTableFromDatabase.
- È possibile raccogliere la maggior parte delle informazioni necessarie per creare l'XML per un set di dati EDDTableFromDatabase contattando l'amministratore del database e cercando il web.
- Sebbene i database trattino spesso i nomi delle colonne e i nomi delle tabelle in modo caso-insensibile, sono casi-sensibili inERDDAP. Quindi, se un messaggio di errore dal database dice che un nome della colonna è sconosciuto (per esempio, "Unknown identificatore= ' colonna\_name ") anche se sai che esiste, prova a usare tutte le capitali, per esempio, COLUMN , che è spesso la vera, caso sensibile versione del nome della colonna.
- Lavorare a stretto contatto con l'amministratore del database, che può avere esperienza rilevante. Se il dataset non riesce a caricare, leggeremessaggio di erroreattentamente per scoprire perché.
Driver per il dispositivo JDBC
-
[JDBC Driver e<autistaName> (#jdbc-driver) -- È necessario ottenere il file .jar del driver JDBC 3 o JDBC 4 appropriato per il database e Mettilo dentro. tomcat /webapps/erddap/WEB-INF/lib dopo l'installazioneERDDAP. Allora, nel tuodatasets.xmlper questo dataset, è necessario specificare il<driverName> per questo driver, che è (purtroppo) diverso dal nome del file. Cerca sul web per il driver JDBC per il tuo database e il driverName cheJavadeve usarlo.
- Per MariaDB, prova https://mariadb.com/kb/en/about-the-mariadb-java-client/
The<driverName> da utilizzaredatasets.xml (vedi sotto) è probabilmente org.mariadb.jdbc. Driver. - Per MySQL e Amazon RDS, prova https://dev.mysql.com/downloads/connector/j/
The<driverName> da utilizzaredatasets.xml (vedi sotto) è probabilmente com.mysql.jdbc. Driver. - PerOracle♪ https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html . The<driverName> da utilizzaredatasets.xml (vedi sotto) è probabilmente oracle.jdbc.driver.OracleDriver.
- Per Postgresql, abbiamo il driver JDBC 4 da https://mvnrepository.com/artifact/org.postgresql/postgresql
The<driverName> da utilizzaredatasets.xml (vedi sotto) è probabilmente org.postgresql. Driver. - Per SQL Server, è possibile ottenere il driver JTDS JDBC da https://jtds.sourceforge.net . The<driverName> da utilizzaredatasets.xml (vedi sotto) è probabilmente net.sourceforge.jtds.jdbc. Driver.
- Per MariaDB, prova https://mariadb.com/kb/en/about-the-mariadb-java-client/
Dopo aver messo il driver JDBC .jar inERDDAP™lib directory, è necessario aggiungere un riferimento a quel file .jar nei file di script .bat e/o .sh per GenerateDatasets Xml, DasDds e ArchiveADataset che sono in tomcat /webapps/erddap/WEB-INF/ directory; altrimenti, otterrai una ClassNotFoundException quando eseguirai questi script.
Purtroppo, JDBC è a volte la fonte di problemi. Nel suo ruolo di intermediario traERDDAP™e il database, a volte apporta sottili modifiche alla richiesta SQL standard/generic del databaseERDDAP™crea, causando così problemi (per esempio, relativo aidentificatori superiori/bassie relative adate/ora) . Si prega di essere paziente, leggere attentamente le informazioni qui, controllare il vostro lavoro, e vedere il nostrosezione per ottenere supporto aggiuntivo.
Database<connessione Proprietà >
- [<connessioneProperty>] (#database-connectionproperty) -- Neldatasets.xmlper il dataset, è necessario definire diverse connessioni Tag di proprietà da raccontareERDDAP™come connettersi al database (per esempio, per specificare il nome utente, la password, la connessione ssl edimensione del fetch) . Questi sono diversi per ogni situazione e sono un po' difficili da capire. Cerca sul web esempi di utilizzo di un driver JDBC per connettersi al tuo database. The<connessioneProperty> nomi (per esempio, "utente", "password", e "ssl") , e alcuni dei valori di connessioneProperty possono essere trovati cercando il web per "JDBC proprietà di connessione database Tipo " (per esempio,Oracle, MySQL, Amazon RDS, MariaDB, PostgreSQL) .
Quotazioni per i nomi e la sensibilità del caso
- Citazioni per nomi di campo/colonna; Sensibilità dei casi- Per impostazione predefinita, EDDTableFromDatabase mette le doppie citazioni standard ANSI-SQL intorno ai nomi di campo/colonna nelle dichiarazioni SELECT nel caso in cui si abbia usato una parola riservata come nome di campo/colonna, o un personaggio speciale in un nome campo/colonna. Le doppie citazioni inoltre ostacolano alcuni tipi di attacchi SQL injection. Si può direERDDAP™utilizzare ", ', o senza preventivi via<colonnaNameQuotes> indatasets.xmlper questo dataset.
Per molti database, l'utilizzo di qualsiasi tipo di preventivi fa sì che il database funzioni con nomi di campo/colonna in modo sensibile (invece del caso database predefinito in modo insensibile) . I database mostrano spesso nomi di file/colonna come tutti i casi superiori, quando in realtà la forma sensibile del caso è diversa. InERDDAP™, si prega di trattare sempre i nomi delle colonne del database come caso sensibile.
- Per Maria DB, devi eseguire il database con*--sql-mode=ANSI\_QUOTES.
- Per MySQL e Amazon RDS, è necessario eseguire il database con*--sql-mode=ANSI\_QUOTES.
- Oraclesupporta le doppie citazioni standard ANSI-SQLper impostazione predefinita.
- PostgreSQL supporta le doppie citazioni standard ANSI per impostazione predefinita.
Non usare una parola riservata per un database, un catalogo, uno schema o un nome della tabella.ERDDAP™non cita.
Se possibile, utilizzare tutti i minuscoli per database, catalogo, schema, nomi di tabella e nomi di campo quando si crea la tabella del database (o vista) e quando si riferisce ai nomi di campo/colonna indatasets.xmlinERDDAP. In caso contrario, è possibile ottenere un messaggio di errore che dice che il database, catalogo, schema, tabella e / o campo non è stato trovato. Se si ottiene quel messaggio di errore, provare a utilizzare la versione caso-sensibile, la versione di tutti i casi superiori, e la versione tutta minuscola del nome inERDDAP. Uno di loro può funzionare. In caso contrario, è necessario modificare il nome di database, catalogo, schema e / o tabella a tutti i casi più bassi.
Database<dati Tipo >
- Database[<dataType>] (#datatype #) Tag -- Perché c'è qualche ambiguità su cuitipi di dati del databasemappa a cuiERDDAP™tipi di dati, è necessario specificare un [<dataType>] (#datatype #) tag per ogni [<dataVariable> (#datavariabile #) per direERDDAP™quali datiTipo da usare. Parte del problema è che diversi set di dati utilizzano termini diversi per i vari tipi di dati -- quindi cercare sempre di abbinare le definizioni, non solo i nomi. Vedi la descrizionestandardERDDAP™dati Tipi, che include riferimenti ai corrispondenti tipi di dati SQL.Data e timestampsono casi speciali: usoERDDAP'due dati Tipo.
Data del database
Alcune colonne dell'ora della data del database non hanno un fuso orario esplicito. Tali colonne sono guai perERDDAP. I database supportano il concetto di data (con o senza tempo) senza un fuso orario, come una gamma approssimativa di tempo. MaJava (e cosìERDDAP) si occupa solo di data+ora istantanea con un fuso orario. Così si può sapere che i dati dell'ora della data si basano su un fuso orario locale (con o senza l'ora legale) o il GMT/Zulufuso orario, maJava (eERDDAP) No. In origine pensavamo che avremmo potuto risolvere questo problema. (ad esempio, specificando un fuso orario per la colonna) , ma il database+JDBC+Javale interazioni hanno reso questa una soluzione inaffidabile.
- Allora...ERDDAP™richiede di memorizzare tutti i dati di data e di data nella tabella del database con un tipo di dati del database che corrisponde al tipo JDBC "timestamp with time zone" (idealmente, che utilizza il GMT/Zulufuso orario) .
- InERDDAP'datasets.xml, nel<dataVariable> tag per una variabile di timestamp, set
e<addAttributes> set
<att name="units">seconds since 1970-01-01T00:00:00Z</att>
- Suggerimento: Se i dati sono un intervallo di tempo, è utile avere i valori timestamp si riferiscono al centro dell'intervallo di tempo implicito (per esempio, mezzogiorno) . Ad esempio, se un utente ha dati per 2010-03-26T13:00Z da un altro dataset e desidera i dati più vicini da un dataset database che ha dati per ogni giorno, quindi i dati del database per 2010-03-26T12:00Z (rappresentazione dei dati per tale data) è ovviamente il migliore (al contrario della mezzanotte prima o dopo, dove è meno evidente che è meglio) .
- ERDDAP™ha una utilità perConvertire un Numerico Tempo di / da un tempo di stress.
- VediCome?ERDDAPOfferte con il tempo.
Integer nulls
I database supportano nulls integer (int, piccolo, minuscolo) colonne, maERDDAP™non supporta i veri nulls. Il database nulls sarà convertito inERDDAP™127 per colonne di byte, 255 per colonne di ubyte, 32767 per colonne corte, 65535 per colonne di cava us, 2147483647 per colonne di int, 4294967295 per colonne di uint, 9,223,372,036,854,775,807 per colonne lunghe, o 18446744073709551615 per colonne ulong. Se si utilizzano tali default, si prega di identificare quellimissing\_values per gli utenti del datasetERDDAP™con
<att name="\_FillValue" type="int"\>2147483647</att>
o
<att name="\_FillValue" type="short"\>32767</att>
In alternativa, è possibile utilizzare il "missing\_value"attributo invece di "\_FillValue". Genera i dati Xml aggiunge automaticamente questi attributi \_FillValue quando genera il suggeritodatasets.xmlper set di dati del database.
Per le colonne dei punti galleggianti del database, nulls vengono convertiti in NaNsERDDAP. Per i tipi di dati del database convertiti in stringheERDDAP™, nulls ottenere convertito a vuoto Strings.
Sicurezza del database
- Quando si lavora con i database, è necessario fare le cose il più in modo sicuro e sicuro possibile per evitare che un utente dannoso danneggia il database o ottenere l'accesso ai dati a cui non dovrebbero avere accesso.ERDDAP™Cerca anche di fare le cose in modo sicuro.
- Considerare la replica, su un computer diverso, le tabelle di database e database con i dati che si desideraERDDAP™per servire. (Sì, per banche dati commerciali comeOracle, questo comporta costi aggiuntivi di licenza. Ma per i database open source, come PostgreSQL, MySQL, Amazon RDS e MariaDB, questo non costa nulla.) Questo ti dà un alto livello di sicurezza e impedisce ancheERDDAP™richieste da rallentare il database originale.
- Vi incoraggiamo a prepararviERDDAP™per connettersi al database come utente del database che ha solo accesso al rilevante database (#) e ha solo privilegi READ.
- Vi invitiamo a impostare il collegamento daERDDAP™al database in modo che
- usa sempre SSL,
- solo consente connessioni da un indirizzo IP (o un blocco di indirizzi) e da quelloERDDAP™utente, e
- trasferisce solo le password nel loro MD5 hashed form.
- \[PROBLEMI DI LAVORO\]La connessioneProprietà (inclusa la password!) sono memorizzati come testo normale indatasets.xml. Non abbiamo trovato un modo per consentire all'amministratore di inserire la password del database durante ilERDDAP's startup in Tomcat (che si verifica senza input utente) , quindi la password deve essere accessibile in un file. Per rendere questo più sicuro:
-
(ilERDDAP™amministratore) dovrebbe essere il proprietario didatasets.xmle avere accesso READ e WRITE.
- Fai un gruppo che include solo user=tomcat. Utilizzare chgrp per rendere che il gruppo perdatasets.xml, con solo privilegi READ.
- Utilizzare chmod per assegnare privilegi o-rwx (nessun accesso READ o WRITE per "altri utenti") perdatasets.xml.
-
- QuandoERDDAP™, la password e altre proprietà di connessione sono memorizzate in "privato"Javavariabili.
- Le richieste dei clienti vengono analizzate e verificate per la validità prima di generare le richieste SQL per il database.
- Le richieste al database sono effettuate con SQL ReadydStatements, per evitareSQL injection.
- Le richieste al database vengono inviate con l'esecuzione Query (non eseguireStato) limitare le richieste di sola lettura (così tentato SQL injection per modificare il database fallirà per questo motivo, troppo) .
SQL SQL
- Perché?OPeNDAP'le richieste di dati tabulari sono state progettate per imitare le richieste di dati schedari SQL, è facile perERDDAP™per convertire le richieste di dati tabulari in semplici SQL ReadydStatements. Per esempio, ilERDDAP™richiesta
time,temperature&time>=2008-01-01T00:00:00Z&time<=2008-02-01T00:00:00Z
verrà convertito in SQL ReadydStatement
SELECT "time", "temperature" FROM *tableName*
WHERE "time" >= 2008-01-01T00:00:00Z AND "time" <= 2008-02-01T00:00:00Z
ERDDAP™richieste con &distinct () e/oorderBy ( variabili ) aggiungerà DISTINCT e/o ORDINE variabili alla dichiarazione preparata da SQL. In generale, questo rallenterà notevolmente la risposta dal database. ERDDAP™registra lo stato preparato inlog.txtcome
statement=*thePreparedStatement*
Questa sarà una rappresentazione del testo dello stato preparato, che può essere leggermente diversa dall'attuale stato preparato. Ad esempio, nello stato preparato, i tempi sono codificati in modo speciale. Ma nella rappresentazione del testo, appaiono come ISO 8601 date times.
Velocità del database
- I database possono essere lenti. Ci sono alcune cose che puoi fare:
- In generale - La natura di SQL è che le query sonodichiarativo. Specificano solo ciò che l'utente vuole. Non includono una specifica o suggerimenti per come la query deve essere gestita o ottimizzata. Quindi non c'è modo diERDDAP™generare la query in modo tale che aiuta il database ad ottimizzare la query (o in qualsiasi modo specifica come la query deve essere gestita) . In generale, spetta all'amministratore del database impostare le cose (per esempio, indici) ottimizzare per alcuni tipi di query.
Impostare la dimensione del pezzo
I database riportano i dati aERDDAP™in pezzi. Per impostazione predefinita, diversi database restituiscono un diverso numero di righe nei blocchi. Spesso questo numero è molto piccolo e così molto inefficiente. Ad esempio, il default perOracle10! Leggi la documentazione di JDBC per il driver JDBC del tuo database per trovare la proprietà di connessione da impostare per aumentare questo, e aggiungerlo alla descrizione del set di dati nelladatasets.xml. Per esempio, Per MySQL e Amazon RDS, utilizzare
<connectionProperty name="defaultFetchSize">10000</connectionProperty>
Per MariaDB, attualmente non c'è modo di cambiare la dimensione del fetch. Ma è una funzione richiesta, quindi cercare il web per vedere se questo è stato implementato. PerOracle, uso
<connectionProperty name="defaultRowPrefetch">10000</connectionProperty>
Per PostgreSQL, utilizzare
<connectionProperty name="defaultRowFetchSize">10000</connectionProperty>
ma sentitevi liberi di cambiare il numero. Impostare il numero troppo grande causeràERDDAP™utilizzare un sacco di memoria e essere più probabile che esca dalla memoria.
Condizioni di connessione
Ogni database ha altre proprietà di connessione che possono essere specificate indatasets.xml. Molti di questi influenzeranno le prestazioni del database aERDDAP™connessione. Si prega di leggere la documentazione per il driver JDBC del database per vedere le opzioni. Se si trovano proprietà di connessione che sono utili, si prega di inviare un'e-mail con i dettagli pererd dot data at noaa dot gov.
- Fare un tavolo -- Probabilmente otterrete risposte più veloci se periodicamente (Ogni giorno? quando ci sono nuovi dati?) generare una tabella reale (simile a come hai generato il VIEW) e direERDDAP™per ottenere i dati dalla tabella invece del VIEW. Poiché qualsiasi richiesta al tavolo può essere soddisfatta senza JOINing un'altra tabella, la risposta sarà molto più veloce.
- Sottovuoto della tabella - MySQL e Amazon RDS risponderanno molto più velocemente se si utilizzaTABELLA. Maria DB risponderà molto più velocemente se si utilizzaTABELLA. PostgreSQL risponderà molto più velocemente se siVACUOil tavolo. Oraclenon ha o ha bisogno di un comando analogo.
- #Indiciper Variabili Comunemente Constrained -- È possibile accelerare molte/most query creando indici nel database per le variabili (che le banche dati chiamano "colonne") che sono spesso ostacolati nella query dell'utente. In generale, queste sono le stesse variabili specificate da [<subsetVariables> (# Subsetvariables #) e/o le variabili di latitudine, longitudine e tempo.
Utilizzare la connessione Pooling
Normalmente,ERDDAP™rende una connessione separata al database per ogni richiesta. Questo è l'approccio più affidabile. L'alternativa più veloce è quella di utilizzare un DataSource che supporta la connessione pooling. Per impostare, specificare (per esempio)
<dataSourceName>java:comp/env/jdbc/postgres/erddap</dataSourceName>
vicino a<sourceUrl><driverName>, e<connessione Proprietà > E in tomcat /conf/context.xml, definire una risorsa con le stesse informazioni, ad esempio,
<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"/>
Informazioni generali sull'utilizzo di un DataSource https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . VediInformazioni su Tomcat DataSourceeEsempi di Tomcat DataSourceo cercare il web per esempi di utilizzo di DataSources con altri server di applicazione.
- Se tutto il resto fallisce, considerare la memorizzazione dei dati in una raccolta diNetCDFV.ncfile (soprattutto.ncfile che utilizzanoCFU Geometrie di smorzamento discreto (DSG) Contiguous Ragged Array strutture di dati e così può essere gestito conERDDAP'EDDTableFromNcCFFiles) . Se sono organizzati logicamente (ciascuno con i dati per un pezzo di spazio e tempo) ♪ERDDAP™può estrarre i dati da loro molto rapidamente.
EDDTableFromDatabase scheletro 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>
EDDTEDDEDDGrid
EDDTEDDEDDGrid consente di creare un dataset EDDTable da qualsiasiEDDGridDataset.
- Alcuni motivi comuni per farlo sono:
- Questo consente al dataset di essere queried conOPeNDAPvincoli di selezione, che è un tipo di "query by value" (che un utente può aver richiesto) .
- Il dataset è intrinsecamente un dataset tabulare.
- Il valore dell'attributo globale "maxAxis0" (di solito di tipo="int") ♪ (il default è 10) sarà utilizzato per limitare il numero di assi\[0\] (di solito"time"asse) valori del chiusoEDDGriddataset a cui è possibile accedere per richiesta di dati. Se non si desidera che ci sia alcun limite, specificare un valore di 0. Questa impostazione è importante perché, altrimenti, sarebbe troppo facile per un utente chiedere EDDTableFromEDDGridper guardare attraverso tutti i dati del dataset grigliato. Ci vorrà molto tempo e quasi certamente fallire con un errore di timeout. Questa è l'impostazione che rende sicuro avere EDDTableFromEDDGridset di dati nel tuoERDDAPsenza paura che porterà ad un uso irragionevole delle risorse di calcolo.
- Se il allegatoEDDGridè unEDDGridDa Erddape ilERDDAP™è lo stessoERDDAP, poi EDDTableFromEDDGridutilizzerà sempre la versione attualmente disponibile del dataset di riferimento direttamente. Questo è un modo molto efficiente per EDDTableFromEDDGridper accedere ai dati grigliati.
- Questa classe è [<ricarica Tutti i bambini > (#reloadeverynminutes) è ciò che conta. Il chiusoEDDGrid'<reloadEveryNMinutes> è ignorato.
- Se un valore per [<AggiornamentoOgniNMillis> (#updateeverynmillis #) viene fornito per questo dataset, viene ignorato. Il chiusoEDDGrid'<updateEveryNMillis> è ciò che conta.
- GenerareDatasetsXmlha un'opzione per il tipo di dataset=EDDTableFromEDDGridche chiede l'URL di unERDDAP (di solito lo stessoERDDAP) (terminare in "/erddap/") e un'espressione regolare. Genera i dati Xml genererà quindi l'XML per un EDDTableFromEDDGriddataset per ogni dataset grigliato nelERDDAP™che hadatasetIDche corrisponde all'espressione regolare (utilizzare .\* per abbinare tuttidatasetIDs per set di dati grigliati) .
Il pezzo di XML generato da GenerateDatasetsXml per ogni dataset include:
- AdatasetIDche èEDDGrid'datasetIDpiù "\_AsATable".
- Un nuovo attributo globale sommario che è ilEDDGrid's sommario più un nuovo primo paragrafo che descrive ciò che questo dataset è.
- Un nuovo titolo attributo globale che è ilEDDGridIl titolo più ", (Come tavolo) ".
- Un nuovo attributo globale maxAxis0 con un valore di 10.
EDDTEDDEDDGridscheletro XML
<dataset type="EDDTableFromEDDGrid" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1.
For EDDTableFromEDDGrid, this calls lowUpdate() of the underlying
EDDGrid. -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataset>...</dataset> <!-- 1
Any type of EDDGrid dataset. You can even use an
EDDGridFromERDDAP™ to access an independent EDDGrid dataset on
this server. -->
</dataset>
EDDTableFromFileNames
EDDTableFromFileNames crea un set di dati da informazioni su un gruppo di file nel file system del server, incluso un URL per ogni file in modo che gli utenti possano scaricare i file tramiteERDDAP'"files"sistema. A differenza di tuttiEDDTableFromFilessottoclassi, questo tipo di dataset non serve i dati dall'interno dei file.
- EDDTableFromFileNames è utile quando:
- Hai un gruppo di file che si desidera distribuire come file interi perché non contengono "dati" nello stesso modo in cui i file di dati regolari hanno dati. Ad esempio, file di immagine, file video, documenti di Word, file di foglio di calcolo Excel, file di presentazione di PowerPoint o file di testo con testo non strutturato.
- Hai un gruppo di file che hanno dati in un formato cheERDDAP™Non riesco ancora a leggere. Ad esempio, un progetto-specifico, personalizzato, format binario.
EDDTableFromFileNames dati
- I dati in un set di dati EDDTableFromFileNamesè un tavolo cheERDDAP™crea on-the-fly con informazioni su un gruppo di file locali. Nella tabella, c'è una riga per ogni file. Quattro attributi speciali neldatasets.xmlper questo datasetdeterminare quali file saranno inclusi in questo dataset:
file Di
- <fileDir> - Questo specifica la directory sorgente nel file system del server con i file per questo dataset. I file che sono effettivamente situati nel file system del server nel<fileDir> apparirà nella colonna url di questo set di dati all'interno di una directory virtuale denominata https://serverUrl/erddap/files/datasetID/ . Per esempio, se ildatasetIDè jplMURSST. e il<fileDir> è /home/data/mur/ , e quella directory ha un file chiamato jplMURSST20150103000000.png, poi l'URL che verrà mostrato agli utenti per quel file sarà https://serverUrl/erddap/jplMURSST/jplMURSST20150103000000.png .
Oltre a utilizzare una directory locale per<fileDir>, è anche possibile specificare l'URL di una pagina web remota, simile alla directory. Questo funziona con:
- Dataset non aggregati in THREDDS, ad esempio, https://data.nodc.noaa.gov/thredds/catalog/aquarius/nodc\\_binned\\_V3.0/monthly/ \[2020-10-21 Questo server non è più affidabile disponibile.\]
- Dataset non aggregati inHyraxPer esempio, https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/
- La maggior parte degli elenchi di directory simili a Apache, ad esempio, https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/
da OnTheFly
\\\*dall'inizio-- Per alcuni enormi secchi S3 (come noaa-goes17, che ha 26 milioni di file) , può prendereERDDAP™fino a 12 ore per scaricare tutte le informazioni sul contenuto del secchio (e poi ci sono altri problemi) . Per aggirare questo, c'è un modo speciale per usare<fileDir> in EDDTableFromFileNames per creare un set di dati con la directory e i nomi di file da un secchio AWS S3. Il dataset non avrà l'elenco di tutte le directory e i nomi dei file del secchio S3 che un utente può cercare tramite richieste al dataset. Ma il dataset otterrà i nomi di directory e file on-the-fly se l'utente attraversa la gerarchia della directory con il dataset's"files"opzione. Così, questo consente agli utenti di navigare la gerarchia dei file del secchio S3 e i file tramite il dataset"files"sistema. Per fare questo, invece di specificare l'URL per il secchio S3 come "Starting directory" (in GenerateDatasets Xml) o<fileDigital (indatasets.xml) , uso:
\\*\\*\\*fromOnTheFly,*theS3BucketUrl*
per esempio:
\\*\\*\\*fromOnTheFly,https://noaa-goes17.s3.us-east-1.amazonaws.com/
Vedere la documentazione perlavorare con S3 Buckets inERDDAP™, in particolare la descrizione del formato specifico che deve essere utilizzato per l'URL del secchio S3. E vedi questi dettagli e un esempiodi utilizzo\\\*dallFly.
ricorsi
- <recursive> -- File in sottodirectory<fileDir> con nomi che corrispondono<fileRegex> apparirà nelle stesse sottodirectory"files"URL se<recursive> è impostato a true. Il default è falso.
- [<percorsoRegex> (Traduzione:) -- Se recursive=true, Solo i nomi delle directory che corrispondono al pathRegex (default=.\*) sarà accettato. Se recursive=false, questo viene ignorato. Questo è raramente usato, ma può essere molto utile in circostanze insolite. (Vedi questodocumentazione regexetutorial regex.)
fileRegex
- <fileRegex> Solo i nomi dei file in cui l'intero nome del file (non incluso il nome della directory) corrispondere<fileRegex> sarà incluso in questo dataset. Per esempio, jplMURSST.{14}\.png . (Vedi questodocumentazione regexetutorial regex.)
Da File Names Tabella dati Contenuto
Nella tabella, ci saranno colonne con:
-
url... L'URL che gli utenti possono utilizzare per scaricare il file tramiteERDDAP'"files"sistema.
-
nome... Il nome del file (senza un nome di directory) .
-
ultimomodificato -- L'ultima volta che il file è stato modificato (memorizzato come doppie con"seconds since 1970-01-01T00:00:00Z") . Questa variabile è utile perché gli utenti possono vedere se / quando il contenuto di un dato file è cambiato. Questa variabile è unatempo Variazione del timbro, così i dati possono apparire come valori numerici (secondi dal 1970-01-01T00:00:00:00Z) o un valore di stringa (ISO 8601:2004 (E) formato) , a seconda della situazione.
-
taglia -- La dimensione del file in byte, memorizzato come doppie. Sono memorizzati come doppie perché alcuni file possono essere più grandi di ints permettono e i lunghi non sono supportati in alcuni tipi di file di risposta. I doppi daranno la dimensione esatta, anche per i file molto grandi.
-
colonne aggiuntive definite dallaERDDAP™amministratore con le informazioni estratte dal nome del file (per esempio, il tempo associato ai dati nel file) in base a due attributi specificati nei metadati per ogni colonna aggiuntiva/dataVariable:
- estrattoRegex -- Questo èespressione regolare (tutorial) . L'intero regex deve corrispondere all'intero nome del file (non incluso il nome della directory) . Il regex deve includere almeno un gruppo di cattura (una sezione di un'espressione regolare che è racchiusa da parentesi) cheERDDAP™utilizza per determinare quale sezione del nome del file da estrarre per diventare dati.
- estratto Gruppo... Questo è il numero del gruppo di cattura (#1 è il primo gruppo di cattura) nell'espressione regolare. Il default è 1. Un gruppo di cattura è una sezione di un'espressione regolare che è racchiusa da parentesi.
Ecco due esempi:
<dataVariable>
<sourceName>time</sourceName>
<destinationName>time</destinationName>
<dataType>String</dataType>
<addAttributes>
<att name="extractRegex">jplMURSST(.{14})\\.png</att>
<att name="extractGroup" type="int">1</att>
<att name="units">yyyyMMddHHmmss</att>
</addAttributes>
</dataVariable>
<dataVariable>
<sourceName>day</sourceName>
<destinationName>day</destinationName>
<dataType>int</dataType>
<addAttributes>
<att name="extractRegex">jplMURSST.{6}(..).{6}\\.png</att>
<att name="extractGroup" type="int">1</att>
<att name="ioos\\_category">Time</att>
</addAttributes>
</dataVariable>
Nel caso della variabile di tempo, se un file ha il nome jplMURSST20150103000000.png, l'estrattoRegex corrisponderà al nome del file, estrae i caratteri che corrispondono al primo gruppo di cattura ("20150103000000") come dataType=String, quindi utilizzareunità adatta per tempi di stringaper analizzare le stringhe in valori di dati temporali (2015-01-03T00:00:00:00Z) .
Nel caso della variabile di giorno, se un file ha il nome jplMURSST20150103000000.png, l'estrattoRegex corrisponderà al nome del file, estrae i caratteri che corrispondono al primo gruppo di cattura ("03") #<dataType>] (#datatype #) \=int, dando un valore di dati di 3.
Altre informazioni
- No!<AggiornamentoOgniNMillis> (#updateeverynmillis #) -- Questo tipo di dataset non ha bisogno e non può utilizzare<updateEveryNMillis> tag perché le informazioni servite da EDDTableFromFileNames sono sempre perfettamente aggiornate perchéERDDAP™chiede il file system per rispondere a ogni richiesta di dati. Anche se ci sono un numero enorme di file, questo approccio dovrebbe funzionare ragionevolmente bene. Una risposta può essere lenta se ci sono un numero enorme di file e il dataset non è stato interrogato per un po '. Ma per diversi minuti dopo, il sistema operativo mantiene le informazioni in una cache, quindi le risposte dovrebbero essere molto veloci.
- È possibile utilizzareGenerare i dati Programma Xmlper faredatasets.xmlchunk per questo tipo di dataset. È possibile aggiungere / definire colonne aggiuntive con informazioni estratte dal nome del file, come mostrato sopra.
EDDTableFromFileNames scheletro XML
<dataset type="EDDTableFromFileNames" datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<fileDir>...</fileDir>
<recursive>...</recursive> <!-- true or false (the default) -->
<pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
match the pathRegex (default=".\*") will be accepted. -->
<fileNameRegex>...</fileNameRegex>
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more.
Each dataVariable MUST include <dataType> tag. -->
</dataset>
EDDTableFromFiles
EDDTableFromFiles è la superclasse di tutti EDDTableDa...Files classi. Non è possibile utilizzare EDDTableFromFiles direttamente. Invece, utilizzare una sottoclasse di EDDTableFromFiles per gestire il tipo di file specifico:
- EDDTableFromAsciiFilesaggrega i dati dai file di dati tabulari ASCII virgola-, tab-, semicolon- o separati dallo spazio.
- EDDTableFromAudioFilesaggrega i dati da un gruppo di file audio locali.
- EDDTEDD OhsXmlFilesaggrega i dati da un insieme di Stazione Meteo Automatica (AWS) File XML.
- EDDTableFromColumnarAsciiFilesaggrega i dati dai file di dati tabular ASCII con colonne di dati a larghezza fissa.
- EDDTEDDHyraxFile (DEPRECATE) aggrega i dati con diverse variabili, ciascuna con dimensioni condivise (per esempio, tempo, altitudine (o profondità) , latitudine, longitudine) , e servito da unHyrax OPeNDAPserver.
- EDDTableFrom non validoaggrega i dati daNetCDF (v3 o v4) .ncfile che utilizzano una specifica, non valida, variante del CF DSG Contiguous Ragged Array (CRA) file. Anche seERDDAP™supporta questo tipo di file, è un tipo di file non valido che nessuno dovrebbe iniziare a usare. I gruppi che attualmente utilizzano questo tipo di file sono fortemente incoraggiati ad utilizzareERDDAP™generare file CF DSG CRA validi e smettere di utilizzare questi file.
- EDDTableFromJsonlCSVFilesaggrega i dati daJSON Linee file CSV.
- EDDTableFromMultidimNcFilesaggrega i dati daNetCDF (v3 o v4) .nc (o.ncml) file con diverse variabili, ciascuna con dimensioni condivise (per esempio, tempo, altitudine (o profondità) , latitudine, longitudine) .
- EDDTableFromNcFilesaggrega i dati daNetCDF (v3 o v4) .nc (o.ncml) file con diverse variabili, ciascuna con dimensioni condivise (per esempio, tempo, altitudine (o profondità) , latitudine, longitudine) . È bene continuare a utilizzare questo tipo di dataset per i set di dati esistenti, ma per i nuovi set di dati si consiglia di utilizzare EDDTableFromMultidimNcFiles invece.
- EDDTableFromNcCFFilesaggrega i dati daNetCDF (v3 o v4) .nc (o.ncml) file che utilizzano uno dei formati di file specificati dalCFU Geometrie di smorzamento discreto (DSG) convenzioni. Ma per i file che utilizzano una delle varianti multidimensionali CF DSG, utilizzareEDDTableFromMultidimNcFilesInvece.
- EDDTableFromNccsvFilesaggrega i dati daNCCSVFile ASCII .csv.
- EDDTableFromParquetFilesgestisce i dati daParquet.
- EDDTableFromThreddsFiles (DEPRECATE) aggrega i dati da file con diverse variabili con dimensioni condivise servite da unTHREDOPeNDAPserver.
- EDDTEDDWFSFile (DEPRECATE) fa una copia locale di tutti i dati da unArcGISMappaServerWFSserver in modo che i dati possano essere ri-servati rapidamente aERDDAP™utenti.
Attualmente non sono supportati altri tipi di file. Ma di solito è relativamente facile aggiungere il supporto per altri tipi di file. Contattaci se hai una richiesta. Oppure, se i tuoi dati sono in un vecchio formato di file che ti piacerebbe allontanarti, ti consigliamo di convertire i file per essereNetCDFV.ncfile (e soprattutto.ncfile conCFU Geometrie di smorzamento discreto (DSG) Contiguous Ragged Array struttura dei dati --ERDDAP™può estrarre i dati da loro molto rapidamente) .NetCDFè un formato binario ampiamente supportato, consente un accesso casuale veloce ai dati, ed è già supportato daERDDAP.
Da Files Dettagli
Le seguenti informazioni si applicano a tutte le sottoclassi di EDDTableFromFiles.
Aggregazione
Questa classe aggrega i dati dai file locali. Ogni file contiene (relativamente) piccola tabella di dati.
- Il dataset risultante appare come se tutte le tabelle del file fossero state combinate (tutte le righe di dati dal file #1, più tutte le righe dal file #2, ...) .
- I file non devono tutti avere tutte le variabili specificate. Se un dato file non ha una variabile specificata,ERDDAP™aggiungerà i valori mancanti come necessario.
- Le variabili in tutti i file devono avere gli stessi valori per i fileadd\_offset♪missing\_value♪# Filtro # Valore♪scale\_factoreunitàattributi attributi attributi attributi attributi (se c'è) .ERDDAP™controlli, ma è un test imperfetto -- se ci sono valori diversi,ERDDAPnon sa quale sia corretto e quindi quali file sono invalidi. Se questo è un problema, si può essere in grado di utilizzareNCMLoNCOper risolvere il problema.
File compressi
I file di dati di origine per tutte le sottoclassi EDDTableFromFiles possono essere compressi esternamente (ad esempio,.tgz♪.tar.gz♪.tar.gzip♪.gz♪.gzip♪.zip♪.bz2, o) . Vedere laDocumentazione esterna dei file compressi.
Informazioni sul file Cached
- Quando un Dataset EDDTableFromFiles viene caricato per la prima volta, EDDTableFromFiles legge informazioni da tutti i file pertinenti e crea tabelle (una riga per ogni file) con informazioni su ogni file valido e ogni "cattivo" (diverso o invalido) file.
- Le tabelle sono memorizzate anche su disco, comeNetCDFV.ncfile in BigParentDirectory / dataset/ ultimo2CharsOfDatasetID / datasetID / in file di nome: dirTable.nc (che contiene un elenco di nomi di directory unici) ♪ file Tabella.nc (che contiene la tabella con le informazioni di ciascun file valido) ♪ BadFiles.nc (che contiene la tabella con le informazioni di ogni file cattivo) .
- Per accelerare l'accesso a un set di dati EDDTableFromFiles (ma a scapito di usare più memoria) , si può usare
[<fileTableInMemory>true</fileTableInMemory>] (#filetableinmemory #)
per direERDDAP™per mantenere una copia delle tabelle di informazioni di file in memoria. - La copia delle tabelle di informazioni sul file sul disco è utile anche quandoERDDAP™è chiuso e riavviato: salva EDDTable FromFiles da dover rileggere tutti i file di dati.
- Quando un dataset viene ricaricato,ERDDAP™solo bisogno di leggere i dati in nuovi file e file che sono cambiati.
- Se un file ha una struttura diversa dagli altri file (per esempio, un tipo di dati diverso per una delle variabili, o un valore diverso per il "unità" attributo) ♪ERDDAPaggiunge il file all'elenco dei file "cattivo". Le informazioni sul problema del file saranno scritte al BigParentDirectory /logs/log.txt file.
- Non dovresti mai dover eliminare o lavorare con questi file. Un'eccezione è: se stai ancora apportando modifiche a un datasetdatasets.xmlsetup, potresti voler eliminare questi file per forzaERDDAP™per rileggere tutti i file in quanto i file saranno letti/interpretati in modo diverso. Se hai mai bisogno di eliminare questi file, puoi farlo quandoERDDAP™sta correndo. (Poi impostare unbandieraper ricaricare il dataset ASAP.) Tuttavia,ERDDAP™di solito nota che ildatasets.xmlle informazioni non corrispondono al file Informazioni di tabella ed elimina automaticamente le tabelle di file.
- Se vuoi incoraggiareERDDAP™per aggiornare le informazioni memorizzate (per esempio, se hai appena aggiunto, rimosso o modificato alcuni file nella directory dei dati del set) , usare ilsistema di segnalazionea forzaERDDAP™per aggiornare le informazioni dei file memorizzati nella cache.
Richieste di gestione
- ERDDAP™le richieste di dati schedari possono mettere vincoli su qualsiasi variabile.
- Quando la richiesta di dati del cliente viene elaborata, EDDTableFromFiles può guardare rapidamente nella tabella con le informazioni di file valide per vedere quali file potrebbero avere dati rilevanti. Ad esempio, se ogni file sorgente ha i dati per un booy fisso-location, EDDTableFromFiles può determinare in modo molto efficiente quali file potrebbero avere i dati all'interno di un determinato range di longitudine e la latitudine.
- Poiché la tabella di informazioni dei file valida include il valore minimo e massimo di ogni variabile per ogni file valido, EDDTableFromFiles può spesso gestire altre domande in modo abbastanza efficiente. Ad esempio, se alcuni dei booy non hanno un sensore di pressione dell'aria, e un cliente richiede i dati per airPressure!=NaN, EDDTableFromFiles può determinare in modo efficiente quali boe hanno i dati di pressione dell'aria.
Aggiornamento delle informazioni sul file Cached
Ogni volta che il dataset viene ricaricato, le informazioni dei file memorizzati nella cache vengono aggiornate.
- Il dataset viene ricaricato periodicamente come determinato dal<reloadEveryNMinutes> nelle informazioni del set di datidatasets.xml.
- Il dataset viene ricaricato il prima possibile ogni voltaERDDAP™rileva che hai aggiunto, rimosso,toccato (per cambiare l'ultimo file Tempo modificato) , o ha cambiato un file di dati.
- Il dataset viene ricaricato il prima possibile se si utilizzasistema di segnalazione.
Quando il dataset viene ricaricato,ERDDAP™confronta i file attualmente disponibili nella tabella delle informazioni sui file memorizzati nella cache. I nuovi file vengono letti e aggiunti alla tabella dei file validi. I file che non esistono più vengono eliminati dalla tabella dei file validi. I file in cui il timestamp del file è cambiato sono letti e le loro informazioni sono aggiornate. Le nuove tabelle sostituiscono i vecchi tavoli in memoria e su disco.
File cattivi
La tabella dei file cattivi e le ragioni per cui i file sono stati dichiarati cattivi (file danneggiato, variabili mancanti, valori asse errati, ecc.) è inviato via email all'e-mail Tutto A indirizzo email (probabilmente) ogni volta che il dataset viene ricaricato. È necessario sostituire o riparare questi file il prima possibile.
Variabili mancanti
Se alcuni dei file non hanno alcuni deidataVariables definito nel datasetdatasets.xmlBasta cosi'. Quando EDDTableFromFiles legge uno di quei file, funzionerà come se il file avesse la variabile, ma con tutti i valori mancanti.
Vicino a Real Time Data
- EDDTableFromFiles tratta le richieste di dati molto recenti come un caso speciale. Il problema: Se i file che compongono il dataset vengono aggiornati frequentemente, è probabile che il dataset non verrà aggiornato ogni volta che un file viene modificato. Quindi EDDTableFromFiles non sarà a conoscenza dei file modificati. (Si potrebbe usaresistema di segnalazione, ma questo potrebbe portare aERDDAP™ricaricare il dataset quasi continuamente. Quindi nella maggior parte dei casi, non lo consigliamo.) Invece, EDDTableFromFiles tratta questo dal seguente sistema: QuandoERDDAP™riceve una richiesta di dati entro le ultime 20 ore (per esempio, 8 ore fa fino a Ora) ♪ERDDAP™cercherà tutti i file che hanno dati nelle ultime 20 ore. Così,ERDDAP™non ha bisogno di avere dati perfettamente aggiornati per tutti i file al fine di trovare gli ultimi dati. Si dovrebbe ancora impostare [<ricarica Tutti i bambini > (#reloadeverynminutes) a un valore ragionevolmente piccolo (per esempio, 60) , ma non deve essere piccolo (per esempio, 3) .
-
Non raccomandato organizzazione di dati in tempo quasi reale nei file: Se, ad esempio, si dispone di un dataset che memorizza i dati per numerose stazioni (o buoi, o traiettoria, ...) per molti anni, è possibile organizzare i file in modo che, per esempio, c'è un file per stazione. Ma poi, ogni volta che arrivano nuovi dati per una stazione, è necessario leggere un grande vecchio file e scrivere un grande nuovo file. E quandoERDDAP™ricarica il dataset, nota che alcuni file sono stati modificati, quindi legge completamente quei file. E' inefficiente.
-
Consigliato organizzazione di dati in tempo quasi reale nei file: Memorizzare i dati in blocchi, ad esempio, tutti i dati per una stazione/buoy/traiettoria per un anno (o un mese) . Poi, quando arriva un nuovo dato, solo il file con quello di quest'anno (o mese) i dati sono interessati.
-
Il meglio: UsoNetCDFV.ncfile con dimensione illimitata (tempo) . Quindi, per aggiungere nuovi dati, puoi semplicemente aggiungere i nuovi dati senza dover leggere e riscrivere l'intero file. Il cambiamento è reso molto efficiente e essenzialmente atomico, quindi il file non è mai in uno stato incoerente.
-
Altrimenti: Se non si utilizza.ncfile con dimensione illimitata (tempo) , allora, quando è necessario aggiungere nuovi dati, è necessario leggere e riscrivere l'intero file interessato (Speriamo piccolo perché ha solo un anno (o mese) valore dei dati) . Fortunatamente, tutti i file per gli anni precedenti (o mesi) per quella stazione rimane invariata.
-
In entrambi i casi, quandoERDDAP™ricarica il dataset, la maggior parte dei file sono invariati; solo alcuni, piccoli file sono cambiati e devono essere letti.
Regole
I file possono essere in una directory, o in una directory e le sue sottodirectory (ricorsiva) . Se ci sono un gran numero di file (per esempio, > 1,000) , il sistema operativo (e quindi EDDTableFromFiles) opererà molto più efficiente se si memorizza i file in una serie di sottodirectory (uno all'anno, o uno al mese per dataset con file molto frequenti) , in modo che non ci sono mai un numero enorme di file in una determinata directory.
Regia remote e richieste HTTP Range
-
Regia remote e richieste HTTP Range (AKA Byte Serving, Byte Range Richieste) -- EDDGridDa NcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles e EDDTableFromNcCFFiles, a volte possono servire i dati da.ncfile su server remoti e accesso via HTTP se il server supportaServizio di Bytetramite richieste dell'intervallo HTTP (il meccanismo HTTP per il servizio byte) . Questo è possibile perché netcdf-java (cheERDDAP™usi per leggere.ncfile) supporta la lettura dei dati da remoto.ncfile tramite richieste dell'intervallo HTTP.
Non farlo!
Invece, usare il [<cacheFromUrl> system] (# Cachefromurl #) .
CacheFromUrl
- [ ** <Condividi su Google ** ] (# Cachefromurl #) - No.
TuttiEDDGridFromFiles e tutti i dataset EDDTableFromFiles supportano una serie di tag che diconoERDDAP™per scaricare e mantenere una copia di tutti i file di un set di dati remoto, o una cache di alcuni file (scaricato come necessario) . Questa è una caratteristica incredibilmente utile.
-
The<cacheFromUrl> tag consente di specificare un URL con un elenco dei file di un set di dati remoto da un elenco di file remoto.
- Dataset non aggregati in THREDDS, ad esempio, https://data.nodc.noaa.gov/thredds/catalog/aquarius/nodc\\_binned\\_V3.0/monthly/ \[2020-10-21 Questo server non è più affidabile disponibile.\]
- Dataset non aggregati inHyraxPer esempio, https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/
- La maggior parte degli elenchi di directory simili a Apache, ad esempio, https://www.ncei.noaa.gov/data/global-precipitation-climatology-project-gpcp-daily/
- Secchi S3, ad esempio,
https://noaa-goes17.s3.us-east-1.amazonaws.com/
Tuttavia, questo può richiedere un account AWS e una maggiore configurazione. Vedilavorare con S3 Buckets inERDDAP™. Inoltre, di solito non è necessario utilizzare la cache FromUrl con file in secchi S3 se i file sono file ASCII (ad esempio, .csv) perchéERDDAP™può leggere efficacemente i dati dal secchio direttamente tramite un flusso.
ERDDAP™copiare o memorizzare questi file nel dataset<directory fileDir>. Se hai bisogno di supporto per un altro tipo di elenco di file remoto (ad esempio, FTP) , per favore e-mail la vostra richiesta a Chris. John a noaa.gov.
- Il valore predefinito per il<cacheFromUrl> tag è null. Se non si specifica un valore per<cacheFromUrl> tag, il sistema di copia/cache non verrà utilizzato per questo set di dati.
- Se il dataset è<fileRegex> l'impostazione è qualcosa di diverso da .\*,ERDDAP™scarica solo i file che corrispondono al fileRegex.
- Se il dataset è<l'impostazione recursive> è vera e i file remoti sono in sottodirectory,ERDDAP™guarderà in sottodirectory remote che corrispondono al dataset [<percorsoRegex> (Traduzione:) , creare la stessa struttura directory localmente, e mettere i file locali nelle stesse sottodirectory.
- In GenerateDatasets Xml, se si specifica un<cacheFromUrl> valore, Generare Datasets Xml creerà il locale<directory fileDir> e copiare 1 file remoto in esso. Genera i dati Xml poi genererà ildatasets.xmlchunk basato su quel file campione (specificare il campione Traduzione:) .
- Se l'origine dei dati è remotaERDDAP™, usoEDDGridDa ErddapoEDDTableFromErddapinvece di<cacheFromUrl>. Da quella parte, il tuo locale.ERDDAP™sembrerà avere il dataset, ma non avrà bisogno di memorizzare nessuno dei dati a livello locale. L'unico motivo per usare<cacheFromUrl> per ottenere i dati da un telecomandoERDDAP™è quando si dispone di un altro motivo per cui si desidera avere una copia locale dei file di dati. In tal caso:
- Questo dataset cercherà di sottoscrivere il dataset sul telecomandoERDDAPin modo che le modifiche a quel dataset chiameranno la bandiera di questo dataset Url, causando questo dataset locale per ricaricare e scaricare i file remoti modificati. Così, il dataset locale sarà aggiornato molto presto dopo che le modifiche sono effettuate al dataset remoto.
- È necessario inviare e-mail all'amministratore del telecomandoERDDAP™a chiederedatasets.xmlper il set di dati remoto in modo da poter effettuare l'impostazione dei dati nel tuo localeERDDAP™sembra il set di dati nel telecomandoERDDAP.
- Se l'origine dei dati è remotaERDDAP™, il dataset locale cercherà di sottoscrivere il dataset remoto.
- Se l'abbonamento riesce, ogni volta che il telecomandoERDDAPricarica e ha nuovi dati, metterà in contatto il flagURL per questo dataset, causandogli di ricaricare e scaricare i nuovi e/o i file di dati modificati.
- Se l'abbonamento non funziona (per qualsiasi ragione) o se si desidera semplicemente garantire che il dataset locale è aggiornato, è possibile impostare unbandieraper il dataset locale, quindi verrà ricaricato, quindi controllerà per i file di dati remoti nuovi e/o modificati.
- Se la fonte di dati non è un telecomandoERDDAP: il dataset controllerà per i file remoti nuovi e/o modificati ogni volta che si ricarica. Normalmente, questo è controllato da [<ricarica Tutti i bambini > (#reloadeverynminutes) . Ma se si sa quando ci sono nuovi file remoti, è possibile impostare unbandieraper il dataset locale, in modo da ricaricare e controllare i file di dati remoti nuovi e/o modificati. Se questo accade di routine in un certo momento del giorno (ad esempio, alle 7) , si può fare un lavoro cron per usarecurlper contattare la bandiera Url per questo set di dati, in modo da ricaricare e controllare per i file di dati remoti nuovi e/o modificati.
-
The<cacheSizeGB> tag specifica la dimensione della cache locale. Probabilmente è solo necessario utilizzare questo quando si lavora con sistemi di archiviazione cloud comeAmazon S3che è un sistema di archiviazione comunemente usato che fa parte diServizi web Amazon (AWS) . Il valore predefinito è -1.
- Se il valore è<* (ad esempio, il valore predefinito di -1) ♪
ERDDAP™scarica e manterrà un copia completa di tutti i file di dataset remoto nel dataset<fileDir>.
- Questa è l'impostazione che è raccomandato ogni volta che possibile.
- Ogni volta che il dataset viene ricaricato, confronta i nomi, le dimensioni e gli ultimi tempi modificati dei file remoti e dei file locali, e scarica tutti i file remoti che sono nuovi o modificati.
- Se un file che era sul server remoto scompare,ERDDAP™non cancellerà il corrispondente file locale (altrimenti, se qualcosa era temporaneamente sbagliato con il server remoto,ERDDAP™potrebbe eliminare alcuni o tutti i file locali!) .
- Con questa impostazione, di solito si imposta<updateEveryNMillis> a -1, dal momento che il dataset è a conoscenza di quando ha copiato nuovi file di dati in atto.
- Se il valore è >0,
ERDDAP™scaricherà i file dal set di dati remoto come necessario in un locale cache (nel dataset's<fileDir>) con una dimensione di soglia di quel numero specificato di GB.
- La cache deve essere abbastanza grande da contenere almeno diversi file di dati.
- In generale, più grande la cache, meglio è, perché il prossimo file di dati richiesto sarà più probabile che già sia nella cache.
- Caching dovrebbe essere utilizzato solo quandoERDDAP™è in esecuzione in un server cloud computing (ad esempio, un'istanza di calcolo AWS) e i file remoti in un sistema di archiviazione cloud (ad esempio, AWS S3) .
- Quando lo spazio del disco utilizzato dai file locali supera la cache SizeGB,ERDDAP™sarà presto (forse non subito) eliminare alcuni dei file memorizzati nella cache (attualmente, sulla base del minimo recentemente usato (LRU) algoritmo) fino a quando lo spazio del disco utilizzato dai file locali è<0.75\*cacheSizeGB (il "canale") . Sì, ci sono casi in cui LRU esegue molto male -- non c'è un algoritmo perfetto.
- ERDDAP™non cercherà mai di eliminare un file cache cheERDDAP™ha iniziato a usare negli ultimi 10 secondi. Questo è un sistema imperfetto per affrontare il sistema cache e il sistema di lettore di file di dati è stato integrato solo liberamente. A causa di questa regola,ERDDAP™Potrebbe non essere in grado di eliminare abbastanza file per raggiungere il suo obiettivo, in tal caso stamperà un AVVERTENZA al file log.txt, e il sistema sprecherà molto tempo cercando di indiscrererere la cache, ed è possibile che la dimensione dei file nella cache possa superare notevolmente la cacheSizeGB. Se questo accade, utilizzare un'impostazione cacheSizeGB più grande per quel dataset.
- Attualmente,ERDDAP™mai controlla se il server remoto ha una nuova versione di un file che è nella cache locale. Se avete bisogno di questa funzione, si prega di e-mail Chris. John a noaa.gov.
- Anche se l'uso degli stessi nomi dei tag potrebbe implicare che il sistema di copia e il sistema di cache utilizzano lo stesso sistema sottostante, che non è corretto.
- Il sistema di copia avvia proattivamente le attivitàPer scaricare nuovi e modificati i file ogni volta che il set di dati viene ricaricato. Solo i file che sono stati copiati nella directory locale sono disponibili tramite laERDDAP™Dataset.
- Il sistema cache ottiene l'elenco dei file remoto ogni volta che il dataset viene ricaricato e fa finta che tutti questi file siano disponibili tramite ilERDDAP™Dataset. È interessante notare che tutti i file remoti appaiono anche nelle pagine /file/ del dataset e sono disponibili per il download (anche se forse solo dopo un ritardo mentre il file viene scaricato per la prima volta dal server remoto alla cache locale.)
- I set di dati che utilizzano cacheSizeGB possono beneficiare di unnPartiimpostazione superiore a 1, perché questo permetterà al dataset di scaricare più di 1 file remoto alla volta.
- Se il valore è<* (ad esempio, il valore predefinito di -1) ♪
ERDDAP™scarica e manterrà un copia completa di tutti i file di dataset remoto nel dataset<fileDir>.
-
The<cachePartialPathRegex> tag è un tag raramente usato che può specificare un'alternativa per il set di dati [<percorsoRegex> (Traduzione:) . Il default è nullo.
- Utilizzare questo solo se si copia l'intero dataset tramite il default<cacheSizeGB> valore di -1. Con<cacheSizeGB> valori di >1, questo verrà ignorato perché non è sensibile.
- Vedi [la documentazione per<percorsoRegex> (Traduzione:) per la guida su come costruire il regex.
- Se questo è specificato, verrà utilizzato ogni volta che il dataset viene ricaricato, tranne la prima volta che un dataset viene ricaricato all'inizio di un mese.
- Questo è utile quando il dataset remoto viene memorizzato in un labirinto di sottodirectory e quando la maggior parte di quei file raramente, se mai, cambiano. (<tossicità NASA<tosse > Si potrebbe, ad esempio, specificare un<cachePartialPathRegex> che corrisponde solo all'anno corrente o al mese corrente. Questi regexe sono molto difficili da specificare, perché tutti i nomi dei percorsi parziali e completi devono corrispondere al<cachePartialPathRegex> e perché<cachePartialPathRegex> deve lavorare con gli URL remoti e le directory locali. Un vero esempio di vita è:
-
<cacheFromUrl>https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/</cacheFromUrl>
\\>!-- \\[2020-10-21 This server is no longer reliably available.\\] For most types of remote directories, omit the filename (e.g., contents.html for Hyrax). -->
<fileDir>/u00/satellite/MUR41/</fileDir>
<fileNameRegex>\\*\\.nc</fileNameRegex>
<recursive>true</recursive>
<pathRegex>.\\*</pathRegex>
<cachePartialPathRegex>.\\*/v4\\.1/(|2018/(|01./))</cachePartialPathRegex>
L'URL di esempio sopra ha i file in sottodirectory in base all'anno (ad esempio, 2018) e giorno dell'anno (ad esempio, 001, 002, ..., 365 o 366) . Nota che<cachePartialPathRegex> inizia con .\*, poi ha una specifica sottodirectory comune agli URL remoti e alle directory locali, ad esempio /v4\.1/ poi ha una serie di gruppi di cattura nidificati dove la prima opzione non è nulla e la seconda opzione è un valore specifico.
L'esempio di cui sopra corrisponderà solo alle directory per i secondi 10 giorni del 2018, ad esempio,
https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/2018/010/ \[2020-10-21 Questo server non è più affidabile disponibile.\]
e giorno 011, 012, ..., 019.
(Vedi questodocumentazione regexetutorial regex.)
Se hai bisogno di aiuto per creare<cachePartialPathRegex>, si prega di e-mail il<cacheFromUrl> a Chris. John a noaa.gov.
- Un approccio comune: Se si desidera utilizzare<cachePartialPathRegex>, non utilizzarlo inizialmente, perché si desideraERDDAP™per scaricare tutti i file inizialmente. DopoERDDAP™ha scaricato tutti i file, aggiungerlo al pezzo di datasetdatasets.xml.
Migliaia di file
Se il tuo dataset ha molte migliaia di file,ERDDAP™può essere lento a rispondere alle richieste di dati da tale dataset. Ci sono due problemi qui:
- Il numero di file per directory. Internamente,ERDDAP™opera alla stessa velocità indipendentemente dal fatto che i file n siano in una directory o dispersi in diverse directory. Ma c'è un problema: Più file in una determinata directory, più lento è il sistema operativo a restituire l'elenco dei file nella directory (per file) aERDDAP. Il tempo di risposta potrebbe essere O (N log n) . È difficile dire quanti file in una directory sono troppi, ma 10.000 sono probabilmente troppi. Quindi, se la configurazione sta generando un sacco di file, una raccomandazione qui potrebbe essere: mettere i file in subdirectories logicamente organizzato (ad esempio, stazione o stazione/anno) .
Un altro motivo per usare sottodirectory: se un utente vuole usareERDDAP'"files"sistema per trovare il nome del file più vecchio per la stazione X, è più veloce e più efficiente se i file sono in stazioni / anni subdirectories, perché molto meno informazioni devono essere trasferite.
- Il numero totale di file.
Per set di dati tabulari,ERDDAP™tiene traccia della gamma di valori per ogni variabile in ogni file. Quando un utente fa una richiesta,ERDDAP™deve leggere tutti i dati da tutti i file che potrebbero avere dati corrispondenti alla richiesta dell'utente. Se l'utente chiede i dati da un tempo limitato (ad esempio, un giorno o un mese) AlloraERDDAP™non dovrà aprire troppi file nel tuo dataset. Ma ci sono casi estremi in cui quasi ogni file potrebbe avere dati corrispondenti (ad esempio, quando l'acquaTemperatura=13.2C) . Da quando ci vuoleERDDAP™un po' di tempo (in parte il tempo di ricerca sull'HDD, in parte il tempo di leggere l'intestazione del file) solo per aprire un dato file (e di più se ci sono un sacco di file nella directory) , c'è una pena di tempo significativa se il numero totale di file cheERDDAP™deve aprire è molto grande. Anche l'apertura di 1000 file richiede tempo significativo. Quindi ci sono vantaggi per consolidare periodicamente i file giornalieri in pezzi più grandi (ad esempio, 1 stazione per 1 anno) . Capisco che potrebbe non volerlo fare per vari motivi, ma porta a risposte molto più veloci. In casi estremi (ad esempio, mi occupo di un set di dati GTSPP che ha ~35 milioni di file sorgente) , servire i dati da un numero enorme di file sorgente è poco pratico perchéERDDAPLa risposta alle domande semplici può richiedere ore e usare tonnellate di memoria. Consolidando i file sorgente in un numero più piccolo (per GTSPP, ho 720 ora, 2 al mese) ♪ERDDAP™può rispondere ragionevolmente rapidamente. VediMilioni di file
N.B. Solid State Drives sono grandi! Il modo più veloce, più semplice, più economico per aiutareERDDAP™affare con un numero enorme di (piccola) file è quello di utilizzare un'unità di stato solido. VediSolid State Drives sono grandi!
Milioni di file
-
Alcuni dataset hanno milioni di file sorgente.ERDDAP™può gestire questo, ma con risultati misti.
- Per richieste che coinvolgono solo variabili elencate in [<subsetVariables> (# Subsetvariables #) ♪ERDDAP™ha tutte le informazioni necessarie già estratte dai file di dati e memorizzate in un file, in modo da poter rispondere molto, molto rapidamente.
- Per altre richieste,ERDDAP™può eseguire la scansione del datasetinformazioni di file memorizzatee capire che solo alcuni dei file potrebbero avere dati rilevanti per la richiesta e quindi rispondere rapidamente.
- Ma per altre richieste (per esempio, acquaTemperatura=18 gradi\_C) dove qualsiasi file potrebbe avere dati rilevanti,ERDDAP™deve aprire un gran numero di file per vedere se ciascuno dei file ha dati rilevanti per la richiesta. I file sono aperti in modo sequenziale. Su qualsiasi sistema operativo e su qualsiasi file system (diversi da unità di stato solide) Ci vuole molto tempo. (CosìERDDAP™risponde lentamente) e davvero lega il file system (CosìERDDAP™risponde lentamente ad altre richieste) .
Fortunatamente, c'è una soluzione.
- Impostare il dataset su un non pubblicoERDDAP™ (il tuo personal computer?) .
- Creare ed eseguire uno script che richiede una serie di.ncFile CF, ciascuno con un grande pezzo del dataset, di solito un periodo di tempo (ad esempio, tutti i dati per un determinato mese) . Scegliere il periodo di tempo in modo che tutti i file risultante siano inferiori a 2GB (ma sperabilmente maggiore di 1GB) . Se il dataset ha dati in tempo quasi reale, eseguire lo script per rigenerare il file per il periodo di tempo corrente (ad esempio, questo mese) frequentemente (ogni 10 minuti? ogni ora?) . Richieste diERDDAP™per.ncI file CF creano unNetCDFV.ncfile che utilizzaCFU Geometrie di smorzamento discreto (DSG) Contiguous Ragged Array strutture dati).
- Impostare unEDDTableFromNcCFFilesdataset sul tuo pubblicoERDDAP™che ottiene i dati dal.nc (CFU) file.ERDDAP™può estrarre i dati da questi file molto rapidamente. E visto che ora ci sono decine o centinaia (invece di milioni) di file, anche seERDDAP™deve aprire tutti i file, può farlo rapidamente.
Sì, questo sistema richiede un po 'di tempo e di sforzo per impostare, ma funziona molto, molto bene. La maggior parte delle richieste di dati può essere gestita 100 volte più velocemente di prima. \[Bob sapeva che era una possibilità, ma è stato Kevin O'Brien a fare questo e ha mostrato che funziona bene. Ora, Bob utilizza questo per il dataset GTSPP che ha circa 18 milioni di file sorgente e cheERDDAP™ora serve via circa 500.nc (CFU) file.\]
N.B. Solid State Drives sono grandi! Il modo più veloce, più semplice, più economico per aiutareERDDAP™affare con un numero enorme di (piccola) file è quello di utilizzare un'unità di stato solido. VediSolid State Drives sono grandi!
File enormi
- Un unico file di dati enorme (in particolare enormi file di dati ASCII) può causare un OutOfMemoryError. Se questo è il problema, dovrebbe essere ovvio perchéERDDAP™non verrà caricato il dataset. La soluzione, se possibile, è quella di dividere il file in più file. Idealmente, è possibile dividere il file in blocchi logici. Ad esempio, se il file ha 20 mesi di valore di dati, dividerlo in 20 file, ciascuno con 1 mese di valore di dati. Ma ci sono vantaggi anche se il file principale è diviso arbitrariamente. Questo approccio ha molteplici vantaggi: a) Questo ridurrà la memoria necessaria per leggere i file di dati a 1/20, perché solo un file viene letto alla volta. b) Spesso,ERDDAP™può trattare le richieste molto più velocemente perché deve solo guardare in uno o pochi file per trovare i dati per una determinata richiesta. c) Se la raccolta dei dati è in corso, i 20 file esistenti possono rimanere invariati, e devi solo modificare un, piccolo, nuovo file per aggiungere il valore dei dati del mese successivo al dataset.
Problemi FTP / Consigli
- Se si FTP nuovi file di dati alERDDAP™serverERDDAP™sta correndo, c'è la possibilità cheERDDAP™verrà ricaricato il dataset durante il processo FTP. Succede più spesso di quanto si possa pensare! Se succede, il file sembrerà valido (ha un nome valido) Ma il file non è valido. SeERDDAP™tenta di leggere i dati da quel file non valido, l'errore risultante causerà l'aggiunta del file alla tabella dei file non validi. Non va bene. Per evitare questo problema, utilizzare un nome di file temporaneo quando FTP'ing the file, ad esempio, ABC2005.nc\_TEMP . Poi, il fileNameRegex test (vedi sotto) indicherà che questo non è un file rilevante. Dopo che il processo FTP è completo, rinominare il file nel nome corretto. Il processo di rinominazione causerà che il file diventi rilevante in un istante.
Nome file estrae
\[Questa funzione è DEPRECATED. Per favore\*\**fileName pseudosourceNameInvece.\]
EDDTableFromFiles ha un sistema per estrarre uno String da ogni nome di file e usarlo per rendere una variabile di dati pseudo. Attualmente, non c'è alcun sistema per interpretare queste stringhe come date/ora. Ci sono diversi tag XML per impostare questo sistema. Se non hai bisogno di parte o di tutto questo sistema, non specificare questi tag o utilizzare i valori ".
- preExtractRegex è unespressione regolare (tutorial) usato per identificare il testo da rimuovere dall'inizio del nome del file. La rimozione avviene solo se il regex è abbinato. Questo di solito inizia con "^" per corrispondere all'inizio del nome del file.
- post ExtractRegex è un'espressione regolare utilizzata per identificare il testo da rimuovere dalla fine del nome del file. La rimozione avviene solo se il regex è abbinato. Questo di solito termina con "$" per corrispondere alla fine del nome del file.
- estrattoreRegex Se presente, questa espressione regolare viene utilizzata dopo preExtractRegex e postExtractRegex per identificare una stringa da estrarre dal nome del file (per esempio, ilstationID) . Se il regex non è abbinato, l'intero nome del file viene utilizzato (meno preExtract e post Estratto) . Utilizzare ".\*" per abbinare l'intero nome del file che viene lasciato dopo preExtractRegex e postExtractRegex.
- colonna NameForExtract è il nome sorgente della colonna di dati per le stringhe estratte. AdataVariablecon questosourceNamedeve essere neldataVariableelenco (con qualsiasi tipo di dati, ma di solito String) .
Ad esempio, se un dataset ha file con nomi come XYZAble.nc, XYZBaker.nc, XYZCharlie.nc, ... e vuoi creare una nuova variabile (stationID) quando ogni file viene letto che avrà valori ID stazione (Able, Baker, Charlie, ...) estratti dai nomi dei file, è possibile utilizzare questi tag:
- <PreExtractRegex>^XYZ</preExtractRegex> Il primo ^ è un carattere speciale espressione regolare che forzaERDDAP™cercare XYZ all'inizio del nome del file. Questo causa XYZ, se trovato all'inizio del nome del file, da rimuovere (per esempio, il nome del file XYZAble.ncdiventa Able.nc) .
- <PostExtractRegex>\.nc!</PostExtractRegex> Il $ alla fine è un carattere speciale espressione regolare che forzaERDDAP™per cercare.ncalla fine del nome del file. Poiché . è un carattere speciale espressione regolare (che corrisponde a qualsiasi carattere) , è codificato come \. Qui (perché 2E è il numero di carattere esadecimale per un periodo) . Questo provoca.nc, se trovato alla fine del nome del file, da rimuovere (per esempio, il nome parziale del file Able.ncdiventa Able) .
- <EsclusoRegex>.</estrattore L'espressione regolare .\* corrisponde a tutti i caratteri rimanenti (per esempio, il nome parziale del file Able diventa l'estratto del primo file) .
- <colonnaNameForExtract>stationID</columnNameForExtract> Questo diceERDDAP™per creare una nuova colonna sorgente chiamatastationIDquando si legge ogni file. Ogni riga di dati per un dato file avrà il testo estratto dal suo nome di file (per esempio, Able) come il valore nelstationIDcolonna.
Nella maggior parte dei casi, ci sono numerosi valori per queste etichette di estratto che produrranno gli stessi risultati -- espressioni regolari sono molto flessibili. Ma in alcuni casi, c'è solo un modo per ottenere i risultati desiderati.
PseudosourceName#
Ogni variabile in ogni datasetERDDAP™ha un<sourceName> (#) che specifica il nome della sorgente per la variabile. EDDTableFromFiles supporta alcuni pseudosourceNames che estrae un valore da qualche altro luogo (ad esempio, il nome del file o il valore di un attributo globale) e promuovere tale valore per essere una colonna di valori costanti per quel pezzo di dati (ad esempio, la tabella dei dati di quel file) . Per queste variabili, è necessario specificare il tipo di dati della variabile tramite il [<dataType>] (#datatype #) tag. Se le informazioni estratte sono una stringa dateTime, specificare il formato della stringa dateTime nella stringa dataunità attributo. Lo pseudosourceNamele opzioni sono:
globale:sourceName#
Un attributo globale dei metadati in ogni file di dati sorgente può essere promosso come colonna di dati. Se una variabile è<sourceName> ha il formato
<sourceName>global:*attributeName*</sourceName>
alloraERDDAP™sta leggendo i dati da un file,ERDDAP™cercherà un attributo globale di quel nome (per esempio, PI) e creare una colonna riempita con il valore dell'attributo. Questo è utile quando l'attributo ha valori diversi in diversi file sorgente, perché altrimenti, gli utenti vedranno solo uno di quei valori per l'intero dataset. Per esempio,
<sourceName>global:PI</sourceName>
Quando si promuove un attributo per essere dati,ERDDAP™rimuove l'attributo corrispondente. Questo è appropriato perché il valore è presumibilmente diverso in ogni file; mentre nel dataset aggregatoERDDAP™avrà un solo valore. Se si desidera, è possibile aggiungere un nuovo valore per l'attributo per l'intero dataset aggiungendo<# attributo Nome > nuovo Valore </att> al set di dati globale [<addAttributes> (#addattributes) . Per gli attributi globaliERDDAP™richiede, ad esempio, l'istituzione, È necessario aggiungere un nuovo valore per l'attributo.
variabile:sourceName#
L'attributo dei metadati di una variabile in ogni file può essere promosso come colonna di dati. Se una variabile è<sourceName\> ha il formato
<sourceName>variable:*variableName*:*attributeName*<sourceName>
alloraERDDAP™sta leggendo i dati da un file,ERDDAP™cercherà l'attributo specificato (per esempio, ID) della variabile specificata (per esempio, strumento) e creare una colonna riempita con il valore dell'attributo. La variabile genitore (per esempio, strumento) non deve essere uno deidataVariables incluso nella definizione del datasetERDDAP. Per esempio,
<sourceName>variable:instrument:ID</sourceName>
Questo è utile quando l'attributo ha valori diversi in diversi file sorgente, perché altrimenti, gli utenti vedranno solo uno di quei valori per l'intero dataset.
Quando si promuove un attributo per essere dati,ERDDAP™rimuove l'attributo corrispondente. Questo è appropriato perché il valore è presumibilmente diverso in ogni file; mentre nel dataset aggregatoERDDAP™avrà un solo valore. Se si desidera, è possibile aggiungere un nuovo valore per l'attributo per l'intero dataset aggiungendo<# attributo Nome > nuovo Valore </att> alla variabile [<addAttributes> (#addattributes) . Per attributi cheERDDAP™richiede, ad esempio,ioos\_category (a seconda della configurazione) , È necessario aggiungere un nuovo valore per l'attributo.
fileNamesourceName#
È possibile estrarre parte del file di un nome e promuovere che per essere una colonna di dati. Il formato per questo pseudo [<sourceName> (#) è
<sourceName>\\*\\*\\*fileName,*regex*,*captureGroupNumber*</sourceName>
Per esempio,
<sourceName>\\*\\*\\*fileName,A(\\d{12})\\.slcpV1.nc,1</sourceName>
Quando EDDTableFromFiles sta leggendo i dati da un file, si assicurerà il fileName (per esempio, A201807041442.slcpV1.nc) corrisponde all'espressione regolare specificata ("regex") ed estrarre il specificato (in questo caso, il primo) gruppo di cattura (che è una parte circondata da parentesi) , per esempio, "201807041442". (Vedi questodocumentazione regexetutorial regex.) Il regex può essere specificato come una stringa con o senza citazioni circostanti. Se il regex è specificato come una stringa con citazioni circostanti, la stringa deve esserestringa in stile JSON (con caratteri speciali scappati con caratteri \) . Il numero di gruppo di cattura è di solito 1 (il primo gruppo di cattura) , ma può essere qualsiasi numero.
NomesourceName#
È possibile estrarre parte del percorso completo di un file Nome (/directories/fileName.ext) e promuovere che sia una colonna di dati. Il formato per questo pseudo [<sourceName> (#) è
<sourceName>\\*\\*\\*pathName,*regex*,*captureGroupNumber*<sourceName>
Per esempio,
<sourceName>\\*\\*\\*pathName,/data/myDatasetID/(\\[A-Z0-9\\]\\*)/B(\\d{12}).nc,1</sourceName>
Quando EDDTableFromFiles sta leggendo i dati da un file, si assicurerà il percorso completoName (per esempio, /data/myDatasetID/BAY17/B201807041442.nc. Per questo test, i separatori di directory saranno sempre'/'♪ ') corrisponde all'espressione regolare specificata ("regex") ed estrarre il specificato (in questo caso, il primo) gruppo di cattura (che è una parte circondata da parentesi) , per esempio, "BAY17". (Vedi questodocumentazione regexetutorial regex.) Il regex può essere specificato come una stringa con o senza citazioni circostanti. Se il regex è specificato come una stringa con citazioni circostanti, la stringa deve essere unastringa in stile JSON (con caratteri speciali scappati con caratteri \) . Il numero di gruppo di cattura è di solito 1 (il primo gruppo di cattura) , ma può essere qualsiasi numero.
"0 file" Messaggio di errore
- Se scappiGenerareDatasetsXmloDasDdso se provi a caricare un EDDTableDa... File dataset inERDDAP™, e si ottiene un messaggio di errore "0 file" che indica cheERDDAP™trovato 0 file corrispondenti nella directory (quando pensi che ci siano file corrispondenti in quella directory) :
- Controllare che i file sono davvero in quella directory.
- Controlla l'ortografia del nome della directory.
- Controlla il fileNameRegex. E 'davvero, davvero facile fare errori con regexe. Per scopi di prova, prova il regex .\* che dovrebbe corrispondere a tutti i nomi di file. (Vedi questodocumentazione regexetutorial regex.)
- Controllare che l'utente che esegue il programma (ad esempio, user=tomcat (?) per Tomcat/ERDDAP) ha il permesso "leggere" per quei file.
- In alcuni sistemi operativi (per esempio, SELinux) e a seconda delle impostazioni di sistema, l'utente che ha eseguito il programma deve avere 'leggi' il permesso per l'intera catena di directory che porta alla directory che ha i file.
standardizzare Cosa?
- Quando qualsiasi sottoclasse di EDDTableFromFiles aggrega un insieme di file sorgente, per una determinata variabile, tutti i file di origine devono avere valori di attributo identici per diversi attributi:scale\_factor♪add\_offset,missing\_value, \_FillValore e unità). Pensateci: se un file ha ventoSpeed unit=knots e un altro ha ventoSpeed unit=m/s, i valori di dati dei due file non dovrebbero essere inclusi nello stesso set di dati aggregati. Così, quando EDDTableFromFiles crea il dataset, legge i valori dell'attributo da un file, quindi rifiuta tutti i file che hanno valori diversi per quegli attributi importanti. Per la maggior parte delle collezioni di file, questo non è un problema perché gli attributi di tutte le variabili sono coerenti. Tuttavia, per altre collezioni di file, questo può portare a 1%, 10%, 50%, 90%, o anche il 99% dei file che vengono rifiutati come file "cattivo". E' un problema.
EDDTableFrom file ha un sistema per affrontare questo problema: standardizzare Cosa? La standardizzazione Quale impostazione dice EDDTableFromFiles per standardizzare i file non appena li legge, prima EDDTableFromFiles guarda gli attributi per vedere se sono coerenti.
Il lato flip è: se il dataset non ha questo problema, non usare standardizzare Cosa? standardizzare Quali sono i rischi potenziali (discusso di seguito) e inefficienze. Quindi, se non avete realmente bisogno delle caratteristiche di standardizzare Non c'è bisogno di affrontare i potenziali rischi e inefficienze. La più grande inefficienza è: Quando vari standardize Quali opzioni sono utilizzate da un dataset, implica che i file di origine stanno memorizzando i dati in modi significativamente diversi (ad esempio, con diversiscale\_factoreadd\_offset, o con stringhe di tempo utilizzando diversi formati) . Così, per un dato vincolo in una richiesta dell'utente, non c'è modo perERDDAP™fare un unico limite di livello sorgente che può essere applicato a tutti i file sorgente. Quindi...ERDDAP™può applicare solo i vincoli colpiti a un livello più alto. Quindi...ERDDAP™deve leggere i dati da più file prima di applicare i vincoli più alti, livello di destinazione. Così le richieste ai set di dati che utilizzano standardizzare Ciò che richiede più tempo per essere elaborato.
Per utilizzare questo sistema, è necessario specificare
<standardizeWhat>*standardizeWhat*</standardizeWhat>
neldatasets.xmlper l'EDDTableDa... Dataset file(nel<dataset> tag).
The standardizzare Cosa? valore specifica quali cambiamenti EDDTableFromFiles dovrebbero cercare di applicare. I cambiamenti sono la somma di una qualche combinazione di:
- Un pacchetto
Questo fa molte operazioni comuni e sicure per standardizzare le colonne numeriche nei file:
- Sescale\_factore/oadd\_offsetattributi sono presenti, rimuoverli e applicarli per disfare i valori dei dati.
- Unpack attributi imballati (ad esempio, reale\_min, reale\_max,actual\_range♪data\_min♪data\_max, dati\_range,valid\_min♪valid\_max♪valid\_range) , se presente, se la variabile è stata imballata, e se i valori dell'attributo sono stati imballati (questo è difficile, ma ragionevolmente affidabile) .
- Se \_FillValore e/omissing\_valuesono presenti, convertire questi valori di dati inERDDAPvalori mancanti "standard": MAX\_VALUE per i tipi interi (ad esempio, 127 per byte, 32.767 per corto, e 2.147,483,647 per ints, 9223372036854775807 per lunghi) e NaN per doppi e galleggianti.
- Rimuovere il vecchio \_FillValue e/omissing\_valueattributi attributi attributi attributi attributi (se c'è) , e sostituirli con solo \_FillValue=\[ilERDDAP™valore mancante standard\].
- Standardizzare i tempi numerici Se una colonna numerica ha unità di tempo numeriche in stile CF (" tempoUnisciti da baseTime ", ad esempio, "giorni dal 1900-01-01") , questo converte la data Valori del tempo"seconds since 1970-01-01T00:00:00Z"valori e modifica l'attributo delle unità per indicarlo. Se questa è selezionata e c'è la possibilità che questa variabile abbiascale\_factoroadd\_offset, #1 DEVE essere selezionato anche.
- Applicare lo stressmissing\_value
Se una colonna di stringa ha \_FillValue e/omissing\_valueattributi, questo converte quei valori in "" e rimuove gli attributi. - Trova Numericomissing\_value
Se una colonna numerica non ha \_FillValue omissing\_valueattributi, questo cerca di identificare un numerico non definitomissing\_value (Ad esempio, -999, 9999, 1e37f) e convertire le istanze di esso ai valori "standard" (MAX\_VALUE per tipi interi, e NAN per doppie e galleggianti) . Questa opzione ha un rischio: se il più grande o il più piccolo valore di dati valido sembra un valore mancante (ad esempio, 999) , quindi i valori di dati validi saranno convertiti in valori mancanti (ad esempio, NaN) . - Cambia la stringa "N/A" a " Per ogni colonna String, convertire diverse stringhe comunemente utilizzate per indicare un valore di stringa mancante in "". Attualmente, questo cerca "., "...", "-", "?", "??", "N/A", "NA", "none", "non applicabile", "null", "non noto", "non specificato". La ricerca della stringa è caso-insensibile e applicata dopo che le stringhe sono trim'd. "nd" e "altro" non sono specificamente sulla lista. Questa opzione ha un rischio: Le stringhe che si considerano valide possono essere convertite in ".
- Standardizzare a String ISO 8601 DateTimes Per ogni colonna String, cercare di convertire non-purely-numeric String dateTimes (ad esempio, "Jan 2, 2018") a ISO 8601 Data di stringaTimes ("2018-01-02") . Nota che tutti i valori di dati per la colonna devono utilizzare lo stesso formato, altrimenti questa opzione non farà alcuna modifica a una determinata colonna. Questa opzione ha un rischio: Se c'è una colonna con valori di stringa che sembrano una data comune Formato del tempo, saranno convertiti in ISO 8601 String dateTimes.
- Standardize Compact DateTimes a ISO 8601 DateTimes Per ogni colonna di tipo String o integer, prova a convertire data di stringa puramente numericaTimes (ad esempio, "20180102") a ISO 8601 Data di stringaTimes ("2018-01-02") . Nota che tutti i valori di dati per la colonna devono utilizzare lo stesso formato, altrimenti questa opzione non farà alcuna modifica a una determinata colonna. Questa opzione ha un rischio: Se c'è una colonna con valori non compatti I tempi ma sembrano compatti dateTimes, saranno convertiti in ISO 8601 String dateTimes.
- Standardizzare le unità Questo cerca di standardizzare la stringa delle unità per ogni variabile. Per esempio, "metri al secondo", "metro/secondo","m.s^-1"♪"m s-1", "m.s-1" tutti saranno convertiti in "m.s-1". Questo non cambia i valori dei dati. Questo funziona bene per validoUDUNITSunità stringhe, ma può avere problemi con stringhe non valide o complesse. È possibile affrontare i problemi specificando coppie specifiche in<standardizzare le unità inERDDAP' \[tomcat\]/webapps/erddap/WEB-INF/classes/gov/noa/pfel/erddap/util/messages.xml file. Si prega di e-mail eventuali modifiche apportate a Chris. John a noa.gov in modo che possano essere incorporati nei messaggi di default.xml. Questa opzione ha un rischio: Questo può raggruppare alcune unità complesse o non valide; tuttavia, è possibile utilizzare il work-around descritto sopra per aggirare i problemi se si verificano.
Il valore predefinito di standardize Cos'e' 0, che non fa niente.
Se / quando si cambia il valore di standardizzare La prossima volta che il dataset viene ricaricato,ERDDAP™rileggerà tutti i file di dati per il dataset al fine di ricostruire la mini-database con informazioni su ogni file. Se il dataset ha un sacco di file, questo richiederà molto tempo.
Note:
- Una cosa difficile è... La standardizzazione Quale impostazione viene utilizzata per tutte le colonne nel file sorgente. Così, per esempio, utilizzando #2048 potrebbe convertire con successo una colonna di stringa compatta dateTimes in ISO 8601 String dateTimes, ma potrebbe anche erroneamente convertire una colonna con Strings che solo capita di assomigliare a dateTimes compatto.
- datasets.xmle generareDatasets Xml -
È particolarmente difficile ottenere le impostazioni corrette indatasets.xmlper far funzionare il tuo dataset come vuoi. Il miglior approccio (come sempre) è:
- UsoGenerareDatasetsXmle specificare il valore di standardizzare Cosa vorresti usare?
- UsoDasDdsper garantire che il dataset carichi correttamente e riflette la standardizzazione Che impostazione hai specificato.
- Testare il set di dati a mano quando è inERDDAP™garantire che le variabili interessate funzionino come previsto.
- Rischi - Opzioni #256 e sopra sono più rischiosi, vale a dire, c'è una maggiore probabilità cheERDDAP™farà un cambiamento che non dovrebbe essere fatto. Per esempio, l'opzione #2048 potrebbe accidentalmente convertire una variabile con stringhe di ID della stazione che tutti appena capita di guardare le date "compatte" ISO 8601 (ad esempio, 20180102) in ISO 8601"extended"date ("2018-01-02") .
- Rallenta dopo un cambiamento... Dal momento che il valore di standardizzare Ciò che cambia i valori di dati che EDDTableFromFiles vede per ogni file di dati, se si modifica la standardizzazione Quale impostazione, EDDTableFromFiles getterà via tutte le informazioni memorizzate nella cache su ogni file (che include il minimo e max per ogni variabile di dati in ogni file) e rileggere ogni file di dati. Se un dataset ha un gran numero di file, questo può essere molto tempo di consumo, quindi ci vorrà molto tempo per il dataset di ricaricare la prima voltaERDDAP™lo ricarica dopo aver fatto il cambiamento.
- Euristica - Opzioni #256 e sopra usare euristica per fare i loro cambiamenti. Se si imbatte in una situazione in cui gli euristici prendono una cattiva decisione, si prega di inviare una descrizione del problema a Chris. John a Noaa. gov così possiamo migliorare l'euristica.
- Alternative -- Se una delle opzioni standardizeWhat non risolve un problema per un dato set di dati, si può essere in grado di risolvere il problema facendo un.ncfile mla parallelo ogni file di dati e definire le modifiche alle cose nei file in modo che i file siano coerenti. Allora di' all'EDDTableDa... Dataset file per aggregare.ncfile ml.
O, usoNCOeffettuare modifiche ai file in modo che i file siano coerenti.
Colonne separate per anno, mese, data, ora, minuto, secondo
È abbastanza comune per i file di dati tabular avere colonne separate per anno, mese, data, ora, minuto, secondo. PrimaERDDAP™v2.10, l'unica soluzione era quella di modificare il file di dati per combinare quelle colonne in una colonna di tempo unificata. ConERDDAP™2.10+, è possibile utilizzare [<sourceName>= espressione <sourceName> (#) per direERDDAP™come combinare le colonne di origine per fare una colonna di tempo unificata, quindi non è più necessario modificare il file di origine.
<skipHeaderToRegex>
- [<FORMAZIONE PROFESSIONALE (# Skipheadertoregex #) --
Opzionale. (Per EDDTableFromAsciiFiles e EDDTableFromColumnarAsciiFiles solo set di dati.)
Quando EDDTableFromAsciiFiles legge un file di dati, ignorerà tutte le righe fino a e compresa la linea che corrisponde a questa espressione regolare. Il default è "", che non utilizza questa opzione. Un esempio è
<skipHeaderToRegex>\\\*\\\*\\\* END OF HEADER.\\*<skipHeaderToRegex>
che ignorerà tutte le righe fino a e tra cui una linea che inizia con "\*\*FINE DI HEADER».
Quando si utilizza questo tag,<colonnaNamesRow> e<firstDataRow> agire come se l'intestazione è stata rimossa prima della lettura del file. Ad esempio, useresti la colonnaNamesRow=0 se i nomi delle colonne sono sulla riga subito dopo l'intestazione.
Se si desidera utilizzare generare Datasets Xml con un set di dati che ha bisogno di questo tag:
- Fare un nuovo, temporaneo, file campione copiando un file esistente e rimuovendo l'intestazione.
- Correre genera Datasets Xml e specificare il file campione.
- Aggiungere manualmente il<skipHeaderToRegex> tag aldatasets.xmlSbagliato.
- Eliminare il file temporaneo e campione.
- Utilizzare il dataset inERDDAP.
<skipLinesRegex>
Opzionale. (Per EDDTableFromAsciiFiles e EDDTableFromColumnarAsciiFiles solo set di dati.)
Quando EDDTableFromAsciiFiles legge un file di dati, ignorerà tutte le linee che corrispondono a questa espressione regolare. Il default è "", che non utilizza questa opzione. Un esempio è
<skipLinesRegex>#.\\*<skipLinesRegex>
che ignorerà tutte le linee che iniziano con "#".
Quando si utilizza questo tag,<colonnaNamesRow> e<firstDataRow> agire come se tutte le linee corrispondenti fossero state rimosse prima che il file venga letto. Ad esempio, useresti la colonnaNamesRow=0 anche se ci sono diverse linee che iniziano con, ad esempio, "#" all'inizio del file.
EDDTableFromFiles scheletro XML
<dataset type="EDDTableFrom...Files" datasetID\="..." active\="..." >
<nDimensions>...</nDimensions> <!-- This was used prior to ERDDAP™
version 1.30, but is now ignored. -->
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
EDDTableFromFiles subclasses, this uses Java's WatchDirectory system
to notice new/deleted/changed files quickly and efficiently. -->
<standardizeWhat>...</standardizeWhat> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<nThreads>...</nThreads> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<specialMode>mode</specialMode> <-- This rarely-used, OPTIONAL tag
can be used with EDDTableFromThreddsFiles to specify that special,
hard-coded rules should be used to determine which files should
be downloaded from the server. Currently, the only valid mode
is SAMOS which is used with datasets from
https://tds.coaps.fsu.edu/thredds/catalog/samos to download only the
files with the last version number. -->
<sourceUrl>...</sourceUrl> <-- For subclasses like
EDDTableFromHyraxFiles and EDDTableFromThreddsFiles, this is where
you specify the base URL for the files on the remote server.
For subclasses that get data from local files, ERDDAP™ doesn't use
this information to get the data, but does display the
information to users. So I usually use "(local files)". -->
<fileDir>...</fileDir> <-- The directory (absolute) with the data
files. -->
<recursive>true|false</recursive> <!-- 0 or 1. Indicates if
subdirectories of fileDir have data files, too. -->
<pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
match the pathRegex (default=".\") will be accepted. -->
<fileNameRegex>...</fileNameRegex> <-- 0 or 1. A regular expression
(tutorial) describing valid data file names, for example,
".\\.nc" for all .nc files. -->
<accessibleViaFiles>true|false(default)</accessibleViaFiles>
<!-- 0 or 1 -->
<metadataFrom>...</metadataFrom> <-- The file to get metadata
from ("first" or "last" (the default) based on file's
lastModifiedTime). -->
<charset>...</charset>
<!-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
only) This OPTIONAL tag specifies the character set (case
sensitive!) of the source files, for example, ISO-8859-1
(the default) and UTF-8. -->
<skipHeaderToRegex>...</skipHeaderToRegex>
<skipLinesRegex>...</skipLinesRegex>
<columnNamesRow>...</columnNamesRow> <-- (For EDDTableFromAsciiFiles
only) This specifies the number of the row with the column
names in the files. (The first row of the file is "1".
Default = 1.) If you specify 0, ERDDAP™ will not look for
column names and will assign names: Column#1, Column#2, ... -->
<firstDataRow>...</firstDataRow>
<-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
only) This specifies the number of the first row with data in the
files. (The first row of the file is "1". Default = 2.) -->
<dimensionsCSV>...</dimensionsCSV> <-- (For EDDTableFromNcFiles
and EDDTableFromMultidimNcFiles only) This is a comma-separated
list of dimension fullNames. If specified, ERDDAP™ will only read
variables in the source files which use some or all of these
dimensions, plus all of the scalar variables. If a dimension
is in a group, you must specify its fullName,
e.g., "groupName/dimensionName". -->
<-- The next four tags are DEPRECATED. For more information, see
File Name Extracts. -->
<preExtractRegex>...</preExtractRegex>
<postExtractRegex>...</postExtractRegex>
<extractRegex>...</extractRegex>
<columnNameForExtract>...</columnNameForExtract>
<sortedColumnSourceName>...</sortedColumnSourceName>
<-- The sourceName of the numeric column that the data files are
usually already sorted by within each file, for example, "time".
Don't specify this or use an empty string if no variable is
suitable. It is ok if not all files are sorted by this column.
If present, this can greatly speed up some data requests.
For EDDTableFromHyraxFiles, EDDTableFromNcFiles and
EDDTableFromThreddsFiles, this must be the leftmost (first) axis variable.
EDDTableFromMultidimNcFiles ignores this because it has a better
system. -->
<sortFilesBySourceNames>...</sortFilesBySourceNames>
<-- This is a space-separated list of sourceNames
which specifies how the internal list of files should be sorted
(in ascending order), for example "id time".
It is the minimum value of the specified columns in each file
that is used for sorting.
When a data request is filled, data is obtained from the files
in this order. Thus it determines the overall order of the data
in the response. If you specify more than one column name, the
second name is used if there is a tie for the first column; the
third is used if there is a tie for the first and second
columns; ... This is OPTIONAL (the default is
fileDir+fileName order). -->
<sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
<fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or
false (the default)) -->
<cacheFromUrl>...</cacheFromUrl> <!-- 0 or 1 -->
<cacheSizeGB>...</cacheSizeGB> <!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
<-- For EDDTableFromHyraxFiles, EDDTableFromMultidimNcFiles,
EDDTableFromNcFiles, EDDTableFromNccsvFiles, and
EDDTableFromThreddsFiles, the source's axis variables (for
example, time) needn't be first or in any specific order. -->
</dataset>
EDDTableFromAsciiService
EDDTableFromAsciiService è essenzialmente un raschietto dello schermo. Si intende trattare con fonti di dati che hanno un semplice servizio web per la richiesta di dati (spesso un modulo HTML su una pagina web) e che può restituire i dati in qualche formato ASCII strutturato (per esempio, un formato di testo ASCII a valore di virgola o colonnare, spesso con altre informazioni prima e/o dopo i dati) .
EDDTableFromAsciiService è la superclasse di tutte le classi EDDTableFromAsciiService. Non è possibile utilizzare EDDTableFromAsciiService direttamente. Invece, utilizzare una sottoclasse di EDDTableFromAsciiService per gestire tipi specifici di servizi:
- EDDTableFromAsciiServiceNOSottiene i dati daNOAAI servizi ASCII di NOS.
Attualmente non sono supportati altri tipi di servizio. Ma di solito è relativamente facile sostenere altri servizi se lavorano in modo simile. Contattaci se hai una richiesta.
Dettagli
Le seguenti informazioni si applicano a tutte le sottoclassi di EDDTableFromAsciiService.
- Constraints --ERDDAP™le richieste di dati schedari possono mettere vincoli su qualsiasi variabile. Il servizio sottostante può o non può consentire vincoli su tutte le variabili. Per esempio, molti servizi supportano solo vincoli sui nomi delle stazioni, latitudine, longitudine e tempo. Così quando una sottoclasse di EDDTableFromAsciiService ottiene una richiesta di un sottoinsieme di un dataset, passa il maggior numero possibile di vincoli al servizio dati sorgente e quindi applica i restanti vincoli ai dati restituiti dal servizio, prima di consegnare i dati all'utente.
- Gamma valida -- A differenza di molti altri tipi di dataset, EDDTableFromAsciiService di solito non conosce la gamma di dati per ogni variabile, in modo da non poter rifiutare rapidamente le richieste di dati al di fuori della gamma valida.
- Parsing the ASCII Text Response -- Quando EDDTableFromAsciiService riceve una risposta da un servizio di testo ASCII, deve convalidare che la risposta ha il formato e le informazioni attesi, e poi estrarre i dati. È possibile specificare il formato utilizzando vari tag speciali nel blocco di XML per questo set di dati:
- <prima di Data1> attraverso<primaData10> tags -- È possibile specificare una serie di pezzi di testo (quante ne vuoi, fino a 10) che EDDTableFromAsciiService deve cercare nell'intestazione del testo ASCII restituito dal servizio con<prima di Data1> attraverso<prima diData10>. Ad esempio, questo è utile per verificare che la risposta include le variabili attesi utilizzando le unità attesi. L'ultimo tag precedenteData che si specifica identifica il testo che si verifica prima dell'avvio dei dati.
- <dopoData> -- Questo specifica il testo che EDDTableFromAsciiService cercherà nel testo ASCII restituito dal servizio che significa la fine dei dati.
- <No. -- Se EDDTableFromAsciiService trova questo testo nel testo ASCII restituito dal servizio, si conclude che non ci sono dati che corrispondono alla richiesta.
EDDTableFromAsciiService scheletro XML
<dataset type="EDDTableFromAsciiService..." datasetID\="..." active\="..." >
<accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
<graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
<reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
<defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
<defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
<addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
<fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
<iso19115File>...</iso19115File> <!-- 0 or 1 -->
<onChange>...</onChange> <!-- 0 or more -->
<sourceUrl>...</sourceUrl>
<beforeData1>...<beforeData1> <!-- 0 or 1 -->
...
<beforeData10>...<beforeData10> <!-- 0 or 1 -->
<afterData>...<afterData> <!-- 0 or 1 -->
<noData>...<noData> <!-- 0 or 1 -->
<addAttributes>...</addAttributes> <!-- 0 or 1 -->
<dataVariable>...</dataVariable> <!-- 1 or more -->
</dataset>
EDDTableFromAsciiServiceNOS
EDDTableFromAsciiServiceNOS rende i set di dati EDDTable dai servizi di dati di testo ASCII offerti daNOAA'Servizio Oceano Nazionale (NOS) . Per informazioni su come funziona questa classe e come usarla, vedere la superclasse di questa classeEDDTableFromAsciiService. È improbabile che chiunque altro che Bob Simons abbia bisogno di usare questa sottoclasse.
Poiché i dati all'interno della risposta da un servizio NOS utilizzano un formato di testo colonnare ASCII, le variabili di dati diverse da latitudine e longitudine devono avere un attributo speciale che specifica quali caratteri di ogni linea di dati contengono i dati della variabile, ad esempio,
<att name="responseSubstring">17, 25</att>
EDDTableFromAllDatasets
EDDTableFromAllDatasets è un dataset di livello superiore che ha informazioni su tutti gli altri set di dati che sono attualmente caricati nel vostroERDDAP. A differenza di altri tipi di dataset, non vi è alcuna specifica per ilallDatasetsdataset indatasets.xml.ERDDAP™crea automaticamente un EDDTableFromAllDatasets dataset (condatasetID=allDatasets) . Così, unallDatasetsdataset sarà creato in ogniERDDAP™installazione e funzionerà allo stesso modo in ciascunoERDDAP™installazione.
TheallDatasetsdataset è un set di dati tabulari. Ha una riga di informazioni per ogni dataset. Ha colonne con informazioni su ogni dataset, ad esempio,datasetID, accessibile, istituzione, titolo, minLongitude, maxLongitude, minLatitudine, maxLatitude, minTime, maxTime, ecc. Perché?allDatasetsè un dataset tabulare, è possibile query lo stesso modo in cui è possibile query qualsiasi altro set di dati tabulari inERDDAP™, e è possibile specificare il tipo di file per la risposta. Questo consente agli utenti di cercare set di dati di interesse in modi molto potenti.
EDDTableFromAsciiFiles
EDDTableFromAsciiFiles aggrega i dati dai file di dati tabulari ASCII virgola-, tab-, semicolon- o separati dallo spazio.
- Il più delle volte, i file avranno nomi di colonne sulla prima riga e dati a partire dalla seconda riga. (Qui, la prima riga del file è chiamata numero di riga 1.) Ma puoi usare<colonnaNamesRow> e<primoDataRow> nel tuodatasets.xmlfile per specificare un numero di riga diverso.
- ERDDAP™consente alle righe di dati di avere diversi numeri di valori di dati.ERDDAP™presuppone che i valori di dati mancanti siano le colonne finali della riga.ERDDAP™assegna i valori di valore mancanti standard per i valori di dati mancanti. (aggiunto v1.56)
- I file ASCII sono facili da lavorare, ma non sono il modo più efficiente per memorizzare / recuperare i dati. Per una maggiore efficienza, salvare i file comeNetCDFV.ncfile (con una dimensione, "row", condivisa da tutte le variabili) Invece. PuoiusoERDDAP™per generare i nuovi file.
- Vedi la superclasse di questa classe,EDDTableFromFiles, per informazioni su come funziona questa classe e come usarla.
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. A causa della totale mancanza di metadati nei file ASCII, è sempre necessario modificare i risultati di GenerateDatasetsXml.
- ATTENZIONE: QuandoERDDAP™legge i file di dati ASCII, se trova un errore su una determinata linea (ad esempio, numero errato di articoli) , registra un messaggio di avviso (" ATTENZIONE: Bad line (#) di dati" ... con un elenco delle linee sbagliate su linee successive) alfile log.txte poi continua a leggere il resto del file di dati. Così, è vostra responsabilità guardare periodicamente (o scrivere uno script per farlo) per quel messaggio nel registro. txt in modo da poter risolvere i problemi nei file di dati.ERDDAP™è impostato in questo modo in modo che gli utenti possono continuare a leggere tutti i dati validi disponibili anche se alcune linee del file hanno difetti.
EDDTEDD OhsXmlFiles
EDDTEDD OhsXmlFiles aggrega i dati da un insieme di Stazione Meteo Automatica (AWS) File di dati XML utilizzando l'API XML di WeatherBug Rest (non più attivo) .
- Questo tipo di file è un modo semplice ma inefficiente per memorizzare i dati, perché ogni file di solito sembra contenere l'osservazione da un solo punto di tempo. Quindi ci può essere un gran numero di file. Se si desidera migliorare le prestazioni, considerare il consolidamento di gruppi di osservazioni (Una settimana vale?) inNetCDFV.ncfile (meglio:.ncfile conCFU Geometrie di smorzamento discreto (DSG) Formato di Array Ragged Contiguous) e utilizzandoEDDTableFromMultidimNcFiles (oEDDTableFromNcCFFiles) per servire i dati. PuoiusoERDDAP™per generare i nuovi file.
- Vedi la superclasse di questa classe,EDDTableFromFiles, per informazioni su come funziona questa classe e come usarla.
EDDTableFromColumnarAsciiFiles
EDDTableFromColumnarAsciiFiles aggrega i dati dai file di dati tabular ASCII con colonne di larghezza fissa.
-
Il più delle volte, i file avranno nomi di colonne sulla prima riga e dati a partire dalla seconda riga. La prima riga / riga nel file è chiamata riga #1. Ma puoi usare<colonnaNamesRow> e<primoDataRow> nel tuodatasets.xmlfile per specificare un numero di riga diverso.
-
The<addAttributes> per ciascuno<dataVariable> per questi set di dati DEVE includere questi due attributi speciali:
- <at name="startColumn"> Integro <att> -- specifica la colonna del carattere in ogni riga che è l'inizio di questa variabile di dati.
- <int name="stopColumn"> Integro <att> -- specifica la colonna del carattere in ogni riga che è la 1 dopo la fine di questa variabile di dati.
La prima colonna del carattere è chiamata colonna #0. Per esempio, per questo file che ha valori temporali abutting valori di temperatura:
0 1 2 <-- character column number 10's digit
0123456789012345678901234567 <-- character column number 1's digit
time temp
2014-12-01T12:00:00Z12.3
2014-12-02T12:00:00Z13.6
2014-12-03T12:00:00Z11.0
la variabile di dati di tempo avrebbe
<att name="startColumn">0<att>
<att name="stopColumn">20<att>
e la variabile di dati di tempo avrebbe
<att name="startColumn">20<att>
<att name="stopColumn">24<att>
Questi attributi devono essere specificati per tutte le variabili trannevalore fissoenome file-source-nomivariabili.
- I file ASCII sono facili da lavorare, ma non sono un modo efficiente per memorizzare / recuperare i dati. Per una maggiore efficienza, salvare i file comeNetCDFV.ncfile (con una dimensione, "row", condivisa da tutte le variabili) Invece. PuoiusoERDDAP™per generare i nuovi file.
- Vedi la superclasse di questa classe,EDDTableFromFiles, per informazioni su come funziona questa classe e come usarla.
- Si consiglia vivamente di utilizzareGenerare i dati Programma Xmlper fare una bozza ruvida deldatasets.xmlchunk per questo dataset. A causa della difficoltà di determinare le posizioni di avvio e di fine per ogni colonna di dati e la totale mancanza di metadati nei file ASCII, è sempre necessario modificare i risultati da GenerateDatasetsXml.
EDDTableDaHttpGet
EDDTable FromHttpGet è diverso da tutti gli altri tipi di dataset inERDDAP™in quanto dispone di un sistema in cui specifici "autori" possono aggiungere dati, rivedere i dati, o eliminare i dati dal dataset da regolariHTTP GEToPOSTrichieste da un programma per computer, uno script o un browser. Il dataset è queryable dagli utenti nello stesso modo in cui tutti gli altri set di dati EDDTable sono queryable inERDDAP. Vedi la descrizione della superclasse di questa classe,EDDTableFromFiles, per leggere le caratteristiche che vengono ereditate da quella superclasse.
Le caratteristiche uniche di EDDTableFromHttpGet sono descritte di seguito. È necessario leggere tutta questa sezione iniziale e comprenderla; altrimenti, si possono avere aspettative irrealistiche o mettersi nei guai che è difficile da risolvere.
Uso intenso
Questo sistema è destinato a:
- Tabella (in situ) dati, non dati grigliati.
- Dati in tempo reale - L'obiettivo è quello di consentire un autore (ad esempio, il sensore, uno script QC automatizzato o uno specifico umano) per modificare il dataset (tramite un.insert o comando .delete) e rendere tale cambiamento accessibileERDDAP™utenti, tutto in meno di 1 secondo, e possibilmente molto più veloce. La maggior parte di questo 1 secondo è l'ora della rete.ERDDAP™può elaborare la richiesta in circa 1 ms e i dati sono immediatamente accessibili agli utenti. Questo èveloce♪robustoesistema affidabile.
- Quasi qualsiasi frequenza di dati - Questo sistema può accettare dati non frequenti (ad esempio, ogni giorno) attraverso dati molto frequenti (ad esempio, dati 100 Hz) . Se si ottimizza il sistema, può gestire i dati di frequenza superiore (forse 10 KHz dati se si va agli estremi) .
- Dati da un sensore o una raccolta di sensori simili.
- Versione/Scienza reproducibile/DOIS... Situazioni in cui è necessario essere in grado di apportare modifiche ai dati (ad esempio, cambiare una bandiera di controllo di qualità) , sapere quale autore ha fatto ogni cambiamento, conoscere il timestamp di quando l'autore ha fatto il cambiamento, e (su richiesta) essere in grado di vedere i dati originali prima della modifica è stato fatto. Pertanto, questi set di dati sono idonei perDOI#. perché incontranoDOIrequisito che il dataset non si muova, tranne per aggregazione. In generale, nei pressi di dataset in tempo reale non sono ammissibili perDOIs perché i dati sono spesso retroattivamente modificati (ad esempio, per scopi QA/QC) .
Una volta che i dati sono in un dataset EDDTableFromHttpGet, qualsiasi utente può richiedere i dati nello stesso modo in cui richiedono i dati da qualsiasi altro dataset EDDTable.
Sperimentale: Attenzione
Poiché questo sistema è nuovo e poiché i dati ambientali persi non possono essere recuperati, si dovrebbe trattare EDDTableFromHttpGet come sperimentale. Se si sta passando da un altro sistema, si prega di eseguire il vecchio sistema e il nuovo sistema in parallelo fino a quando si è sicuri che il nuovo sistema funziona bene (settimane o mesi, non solo ore o giorni) . In tutti i casi, assicurarsi che il sistema archivia separatamente gli URL .insert e .delete che vengono inviati al dataset EDDTableFromHttpGet (anche se solo nei registri di Apache e/o Tomcat) Almeno per un po'. E in tutti i casi, assicurarsi che i file di dati creati dal dataset EDDTableFromHttpGet siano regolarmente supportati da dispositivi di archiviazione dati esterni. (Nota:r. può eseguire il backup dei file di dati creati da EDDTableFromHttpGet molto efficiente.)
.inserto e .delete
Per qualsiasi dataset inERDDAP™quando invii una richiestaERDDAP™per un sottoinsieme dei dati in un dataset, specificare il tipo di file che si desidera per la risposta, ad esempio, .csv,.htmlTable♪.nc♪.json. EDDTableDaHttp Ottenere estende questo sistema per supportare due ulteriori "file type" che possono inserire (o cambiamento) o eliminare i dati nel set di dati:
- .inserzione
- La richiesta è formattata come una risposta standard del modulo HTML, con coppie key=value, separate da '&'. Per esempio,
https://some.erddap.url/erddap/tabledap/myDataset**.insert**?stationID=46088&time=2016-03-30T12:37:55Z&latitude=10.1&longitude=-150.1&airTemp=17.23&waterTemp=12.3&author=JohnSmith\_someKey1
diceERDDAP™per aggiungere o modificare i dati perstationID=46088 per il tempo specificato. - L'autore di questo cambiamento è JohnSmith e la chiave è SomeKey1.
- L'URL deve includere valori validi (valori non mancanti) per tuttihttpOttenere necessarioVariables
- Se i valori delhttpOttenere richiesto Variabili nella richiesta (ad esempio,stationIDe il tempo) corrispondere i valori su una riga già nel dataset, i nuovi valori in modo efficace sovrascrivere i valori vecchi (anche se i valori vecchi sono ancora accessibili se l'utente richiede dati da un precedenteversionedel set di dati) .
- L'URL .insert non deve mai includere ×tamp= (ERDDAP™genera quel valore) o & quot; (che è specificato da .insert (che è il comando=0) o .delete (che è il comando= 1) ) .
- Se l'URL .insert non specifica i valori per altre colonne che sono nell'set dati, si presume che siano i valori mancanti nativi (MAX\_VALUE per tipi di dati interi, NaN per galleggianti e doppie, e "" per archi) .
- .
- La richiesta è formattata come una risposta standard del modulo HTML, con coppie key=value, separate da '&'. Per esempio,
https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
diceERDDAP™cancellare i dati perstationID=46088 al momento specificato. - L'autore di questo cambiamento è JohnSmith e la chiave è SomeKey1.
- L'URL deve specificarehttpOttenere necessarioVariablesnella richiesta (ad esempio,stationIDe il tempo) . Se questi valori corrispondono ai valori su una riga già nel dataset (che di solito saranno) , i valori vecchi vengono eliminati efficacemente (anche se i valori vecchi sono ancora accessibili se un utente richiede dati da un precedenteversionedel set di dati) .
- Non è necessario specificare i valori per non-HttpGetRequiredVariables, diverso dall'autore, che è necessario per autenticare la richiesta.
- La richiesta è formattata come una risposta standard del modulo HTML, con coppie key=value, separate da '&'. Per esempio,
https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
- La richiesta è formattata come una risposta standard del modulo HTML, con coppie key=value, separate da '&'. Per esempio,
https://some.erddap.url/erddap/tabledap/myDataset**.insert**?stationID=46088&time=2016-03-30T12:37:55Z&latitude=10.1&longitude=-150.1&airTemp=17.23&waterTemp=12.3&author=JohnSmith\_someKey1
Dettagli:
- .insert e .delete le richieste sono formattate come risposte standard del modulo HTML, con coppie key=value, separate da '&'. I valori devono essereper cento codificato. Così, è necessario codificare caratteri speciali nella forma %HH, dove HH è il valore esadecimale 2 cifre del carattere. Di solito, è sufficiente convertire alcuni dei caratteri di punteggiatura: % in %25, & in %26, " in %22,<in %3C, = in %3D, > in %3E, + in %2B,|in %7C,\[in %5B,\]in %5D, spazio in %20, e convertire tutti i caratteri sopra #127 nella loro forma UTF-8 e quindi per cento codificare ogni byte del modulo UTF-8 nel formato %H (chiedere aiuto a un programmatore) .
- .insert e .delete le richieste devono includerehttpOttenere necessarioVariablesPer esempio,stationIDe il tempo. Per le richieste .insert, si presume che le variabili non specificate nella richiesta siano valori mancanti (MAX\_VALUE per le variabili integer, NaN per le variabili float e doppie, e una stringa vuota per le variabili di stringa) . Per richieste .delete, valori per non-HttpGetRequired Variabili (diverso dall'autore, che è richiesto) sono ignorati.
- .insert e .delete le richieste devono includere il nome dell'autore e la chiave dell'autore tramite un parametro nel form author= autore come ultimo parametro nella richiesta. Richiedendo questo per essere ultimo assicura che l'intera richiesta è stata ricevuta daERDDAP. Solo l'autore (non la chiave) verrà memorizzato nel file di dati. È necessario specificare l'elenco dei permessi autore 's tramite l'attributo globalehttpGetKeys
- .insert e .delete parametri possono essere scalari (singolo) valori o array di qualsiasi lunghezza nel modulo\[valore1,valore2,valore3,...,valoreN\]. Per una determinata richiesta, tutte le variabili con array devono avere array con lo stesso numero di valori (altrimenti è un errore) . Se una richiesta ha valori scalari e array, i valori scalari vengono replicati per diventare array con la stessa lunghezza degli array specificati, ad esempio, &stationID= 46088 potrebbe essere trattato come &stationID=\[46088,46088,46088\]. Arrays sono la chiave peralto rendimento. Senza array, sarà difficile per .insert o .delete più di 8 righe di dati al secondo da un autore remoto (a causa di tutta la testata della rete) . Con array, sarà facile da .insert o .delete più di 1000 righe di dati al secondo da un sensore remoto.
- .insert e .delete accettano (senza un messaggio di errore) numeri di punti fluttuanti quando sono previsti interi. In questi casi, il dataset completa i valori degli interi.
- .insert e .delete accettano (senza un messaggio di errore) numeri di punti interi e fluttuanti che sono fuori gamma del tipo di dati della variabile. In questi casi, il dataset memorizza i valori comeERDDAPvalori nativi mancanti per quel tipo di dati (MAX\_VALUE per tipi interi e NaN per galleggianti e doppie) .
Risposta
Se l'URL .insert o .delete riesce, il codice di risposta HTTP sarà 200 (Ok.) e la risposta sarà il testo con un.jsonoggetto, ad esempio,
{
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-11-05T22:12:19.517Z",
"numericTimestamp":1.541455939517+E9
}
Si noti che i timestamp hanno precisione di millisecondo.
Se l'URL .insert o .delete non riesce, otterrete un codice di risposta HTTP diverso da 200 (Ok.) , ad esempio, Errore 403 Proibiti se invii un valore non corretto dell'autore\_key.ERDDAP™invia il codice di risposta HTTP (no, ad esempio,.jsonerrore formattato) perché è così che le cose vengono fatte in internet e perché gli errori possono verificarsi ovunque nel sistema (ad esempio, nella rete, che restituisce un errore HTTP) . Se l'errore viene daERDDAP™, la risposta può includere qualche testo (non.json) con una spiegazione più dettagliata di ciò che è andato storto, ma il codice di risposta HTTP (200=Okay, qualsiasi altro problema) è il modo corretto per verificare se il .insert o .delete è riuscito. Se il controllo del codice di risposta HTTP non è possibile o è scomodo, cercare "status":"successo" nel testo di risposta che dovrebbe essere un'indicazione affidabile di successo.
File di registro
Quando EDDTableFromHttpGet riceve comandi .insert e .delete, semplicemente aggiunge le informazioni al file relativo in un insieme di file di registro, ognuno dei quali è una tabella memorizzata in unJSON Linee file CSV. Quando un utente effettua una richiesta di dati,ERDDAP™legge rapidamente i relativi file di registro, applica le modifiche al dataset nell'ordine che sono stati fatti, e quindi filtra la richiesta tramite vincoli dell'utente come qualsiasi altroERDDAP™richiesta di dati. La partizionamento dei dati in vari file di registro, la memorizzazione di vari pezzi di informazioni (ad esempio, il timestamp del comando, e se il comando era .insert o .delete) , e vari aspetti della configurazione del dataset, tutto rende possibile perERDDAPper memorizzare i dati e recuperare i dati da questo dataset molto rapidamente e molto efficiente.
Sicurezza e Autore
Ogni comando .insert e .delete deve includere &author= autore come ultimo parametro, dove autore\_key è composto dall'identificatore dell'autore (hai scelto: nome, iniziali, pseudonimo, numero) Una chiave segreta. TheERDDAP™l'amministratore lavorerà con gli autori per generare l'elenco dei valori validi dell'autore\_key, che possono essere modificati in qualsiasi momento. Quando EDDTableFromHttpGet riceve un comando .insert o .delete, si assicura che l'autoreID\_key sia l'ultimo parametro e valido. Poiché è l'ultimo parametro, indica che l'intera riga di comando ha raggiuntoERDDAP™e non era troncato. La chiave segreta assicura che solo gli autori specifici possano inserire o eliminare i dati nel dataset.ERDDAP™poi estrae l'autoreID e salva che nella variabile dell'autore, in modo che chiunque possa vedere chi è stato responsabile di una data modifica al dataset. I comandi .insert e .delete possono essere effettuati solo tramitehttps: (sicuro) ERDDAP™URLs. Ciò assicura che le informazioni trasferite siano tenute segrete durante il transito.
timestamp
Come parte del sistema di log, EDDTableFromHttpGet aggiunge un timestamp (il tempo cheERDDAPricevuto la richiesta) a ogni comando che memorizza nei file di registro. Perché?ERDDAP™genera il timestamp, non gli autori, non importa se diversi autori stanno facendo cambiamenti da computer con orologi impostati a tempi leggermente diversi. Il timestamp indica in modo affidabile il momento in cui il cambiamento è stato fatto al dataset.
HTTP POST
- "E HTTP POST?!"
HTTPPOST è l'alternativa migliore (rispetto aHTTP GET) per l'invio di informazioni da un client a un server HTTP. Se è possibile, o se si desidera davvero migliorare la sicurezza, utilizzare POST invece di GET per inviare le informazioni aERDDAP. POST è più sicuro perché: con GET ehttps, l'URL viene trasmesso in modo sicuro, ma l'intero URL (compresi i parametri, compreso l'autore\_key) sarà scritto a Apache, Tomcat, eERDDAP™file di registro, dove qualcuno potrebbe leggerli se i file non sono adeguatamente protetti. Con POST, i parametri vengono trasmessi in modo sicuro e non sono scritti ai file di registro. POST è un po 'più difficile per i clienti di lavorare con e non è supportato come ampiamente dal software client, ma i linguaggi di programmazione lo supportano. Il contenuto che si invia al dataset tramite GET o POST sarà lo stesso, appena formattato in modo diverso.
httpOttenere richiesto Attributo globale variabili
Una parte essenziale di ciò che rende il lavoro di questo sistema è l'attributo globale richiestohttpOttenere richiesto Variabili, che è un elenco separato da virgoladataVariablenomi sorgente che identificano in modo univoco una riga di dati. Questo dovrebbe essere il più minimo possibile e quasi sempre includerà la variabile di tempo. Per esempio, ecco i consigliatihttpOttenere richiesto Variabili per ciascuno deiCFU Geometrie di smorzamento discreto (DSG) (Naturalmente, i nomi ID possono essere diversi nel vostro set di dati.) :
- Per il TimeSeries:stationID♪
- Per la traiettoria: traiettoriaID, tempo
- Per il profilo: tempo (il tempo di assumere è il profilo\_id) , profondità
- Per il tempo Profilo:stationID♪ (il tempo di assumere è il profilo\_id) , profondità
- Per la traiettoria Profilo: trajectoryID, time (il tempo di assumere è il profilo\_id) , profondità
Prendere TimeSeries come esempio: Data un comando .insert che includestationID=46088 e ora=2016-06-23T19:53:00Z (e altri valori per altre variabili) :
- Se non ci sono dati esistenti per quella stazione e quella volta, l'effetto sarà quello di aggiungere i dati al dataset.
- Se ci sono dati esistenti per quella stazione e quella volta, l'effetto sarà quello di sostituire la riga esistente di dati con questi nuovi dati. (Certo, da quandoERDDAP™mantiene il registro di ogni comando che riceve, i vecchi dati sono ancora nel registro. Se un utente richiede dati da una versione del dataset prima di questa modifica, vedranno i dati precedenti.)
httpOttieni la Struttura delle Direttive
-
httpOttenere la direzione Struttura Attributi globali e dati (Log) Nome di file
Parte di ciò che rende l'intero sistema funziona in modo efficiente è cheERDDAP™crea un insieme di dati (registro) file, ciascuno con un pezzo diverso del dataset. Se queste sono impostate bene,ERDDAP™sarà in grado di rispondere rapidamente alla maggior parte delle richieste di dati. Questa configurazione è specificata dalhttpGetDirectoryStructure attributo globale, che è uno String che sembra un nome relativo di file, ad esempio, "stationID/10years", ma è in realtà una specifica per la struttura della directory. Le parti di ciò indicano come directory e nomi di file per i dati (registro) i file saranno costruiti.- Se una parte è un intero (>= 1) più un tempoPeriod (millisecondo, secondo, minuto, ora, data, mese, anno, o loro plurali) , ad esempio, 10 anni, quindi il dataset EDDTableFromHttpGet prenderà il valore del tempo per la riga dei dati (ad esempio, 2016-06-23T19:53:00Z) , calcolare il tempo troncato a quella precisione (ad esempio, 2010) , e fare una cartella o fileName da quello.
L'obiettivo è quello di ottenere un pezzo ragionevolmente grande di dati in ogni file, ma molto meno di 2GB.
- In caso contrario, la parte delle specifiche deve essere unadataVariable'sourceNamePer esempio,stationID. In questo caso, EDDTableFromHttpGet farà una cartella o un nome file dal valore di quella variabile per la nuova riga di dati (ad esempio, "46088") .
Poiché i dati di comando .insert e .delete vengono memorizzati in dati specifici (registro) file, EDDTableFromHttpGet di solito ha solo bisogno di aprire uno o pochi dati (registro) file per trovare i dati per una determinata richiesta utente. E perché ogni dato (registro) file ha tutte le informazioni pertinenti per il suo pezzo del dataset, è veloce e facile per EDDTableFromHttpGet per fare una versione specifica (o la versione corrente) del dataset per i dati in quel file (e non devono generare la versione richiesta dell'intero dataset) .
Le linee guida generali si basano sulla quantità e la frequenza dei dati. Se assumiamo 100 byte per riga di dati, allora...
| Frequency <br>of measurements | Recommended <br>httpGetDirectoryStructure |
| --- | --- |
| \\>=1 per second | *featureID*/1year/1day |
| \\>=1 per minute | *featureID*/2months |
| \\>=1 per hour | *featureID*/10years |
| \\>=1 per day | *featureID* |
Ad esempio, se la struttura della directory èstationID/2 mesi e si inserisce i dati da due stazioni (46088 e 46155) con i valori di tempo da dicembre 2015 a maggio 2016, EDDTableFromHttp Get creerà directory di nome 46088 e 46155 e creerà file in ogni nome 2015-11.jsonl, 2016-01.jsonl, 2016-03.jsonl, 2016-05.jsonI (ogni possesso di 2 mesi di dati per la stazione rilevante) . In qualsiasi momento in futuro, se si utilizza .insert o .delete per modificare o eliminare i dati per, ad esempio, stazione 46088 al 2016-04-05T14:45:00Z, EDDTableFromHttp Get appenderà quel comando a 46088/2016-03.jsonl, i dati pertinenti (registro) file. E chiaramente, è bene aggiungere i dati per altre stazioni in qualsiasi momento in futuro, dal momento che il dataset sarà semplicemente creare directory aggiuntive se necessario per tenere i dati dalle nuove stazioni.
httpGetKeys
Ogni EDDTable Da parte sua Ottenere dataset deve avere un attributo globalehttpGetKeys che specifica l'elenco degli autori consentiti e le loro chiavi segrete come una lista separata da virgole autore Per esempio, JohnSmith\_someKey1, HOBOLogger\_someKey2, QCScript59\_someKey3 .
- autore\_key sono casi-sensibili e devono essere completamente caratteri ASCII (#33 - #126, e senza virgola, " o ' caratteri
- Le chiavi sono come password, quindi devono essere >=8 caratteri, difficili da indovinare, e senza parole del dizionario interno. Dovresti trattarli come trattare le password -- tenerle private.
- Il primo carattere '\' separa l'autore dalla chiave, quindi il nome dell'autore non può includere un carattere '\' (ma una chiave può) .
- Qualsiasi autore può avere uno o più autori\_key, ad esempio, JohnSmith\_some Key1, JohnSmith\_some Key7, ecc.
- È possibile modificare il valore di questo attributo in qualsiasi momento. Le modifiche hanno effetto la prossima volta che il dataset viene caricato.
- Queste informazioni saranno rimosse dal datoset globaleAttributi prima che venga reso pubblico.
- Ogni richiesta al set di dati per inserire o eliminare i dati deve includere un &author= autore parametro. Dopo aver verificato la validità della chiave,ERDDAP™salva solo la parte dell'autore (non la chiave) nel file di dati.
Impostazione
Ecco i passaggi consigliati per configurare un set di dati EDDTableFromHttpGet:
-
Fare la directory principale per tenere i dati di questo dataset. Per questo esempio, usiamo /data/testGet/ . L'utente che esegue GenerateDatasetsXml e l'utente in esecuzioneERDDAP™devono entrambi avere accesso lettura-scrittura a questa directory.
-
Utilizzare un editor di testo per fare un campione.jsonil file CSV con l'estensione.jsonL in quella directory. Il nome non è importante. Per esempio, si potrebbe chiamare campione.jsonI Fare una linea 2.jsonl file CSV, con i nomi delle colonne sulla prima riga e i valori fittizi/tipici (del corretto tipo di dati) sulla seconda linea. Ecco un file campione che è adatto per una raccolta difeatureType=TempoRicerca i dati che misurano la temperatura dell'aria e dell'acqua. \[PerfeatureType=Traiettoria, potresti cambiarestationIDessere traiettoriaID.\]
\[PerfeatureType=Profilo, potresti cambiarestationIDper essere profileID e aggiungere una variabile di profondità.\]\["stationID""time", "latitude", "longitude", "airTemp", "waterTemp", "timestamp", "author", "command"\] \["myStation", "2018-06-25T17:00:00Z", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, "SomeBody", 0\]
Nota:
- I valori di dati reali non importa perché alla fine cancellerai questo file, ma dovrebbero essere del tipo di dati corretto. In particolare, la variabile di tempo dovrebbe utilizzare lo stesso formato che i dati reali dalla fonte utilizzeranno.
- Per tutte le variabili,sourceNamesarà ugualedestinationName, quindi utilizzare i nomi variabili corretti / finali ora, tra cui tempo, latitudine, longitudine e talvolta profondità o altitudine se le variabili con tali informazioni saranno incluse.
- Ci sarà quasi sempre una variabile tempo di nome che registra il tempo dell'osservazione è stato fatto. Può essere dataType String conunità adatta per tempi di stringa (ad esempio,yyyy-MM-dd'T'HH:mm:ss.SSSZ) o dati Tipo doppio conunità adatta per tempi numerici (ad esempio, secondi dal 1970-01-01T00:00:00Z, o qualche altro tempo base) .
- Tre delle colonne (di solito gli ultimi tre) deve essere timestamp, autore, comando.
- La colonna timestamp verrà utilizzata da EDDTableFromHttpGet per aggiungere un timestamp che indica quando ha aggiunto una data linea di dati al file di dati. Avrà datiTipo doppio e unità secondi dal 1970-01-01T00:00:00Z.
- La colonna dell'autore con i datiType String sarà utilizzata per registrare quale autore autorizzato ha fornito i dati di questa linea. Gli autori autorizzati sono specificati dahttpattributo globale GetKeys. Anche se le chiavi sono specificate come autore e sono nell'URL "richiesta" in quel modulo, solo la parte dell'autore viene salvata nel file di dati.
- La colonna di comando con dataType byte indica se i dati su questa linea sono un'inserzione (0) o una cancellazione (1) .
-
Eseguire GenerateDatasets Xml e dillo
- Il tipo di set di dati è EDDTableFromHttpGet
- La directory è (per questo esempio) / dati/test Vai!
- Il file campione è (per questo esempio) /dati/testGet/startup.jsonI
- ThehttpOttenere richiesto Variabili sono (per questo esempio) stationID♪ Vedi la descrizionehttpOttenere necessarioVariablessotto.
- Se i dati vengono raccolti ogni 5 minuti, ilhttpGetDirectoryStructure per questo esempio èstationID/2 mesi. Vedi la descrizionehttpOttieni la Struttura delle Direttivesotto.
- ThehttpGetKeys
Aggiungi l'output (il pezzo didatasets.xmlper il dataset) adatasets.xml. 4. Modificadatasets.xmlchunk per questo set di dati per renderlo corretto e completo. Precisamente, sostituire tutto il??? con il contenuto corretto. 5. Per il<fileTableInMemory> impostazione:
- Impostare questo a true se il dataset di solito ottiene frequenti richieste .insert e/o .delete (ad esempio, più spesso di una volta ogni 10 secondi) . Questo aiuta EDDTableFromHttpGet rispondere più velocemente alle richieste .insert e/o .delete. Se si imposta questo a true, EDDTableFromHttpGet salverà ancora il fileTable e le informazioni relative al disco periodicamente (come necessario, circa ogni 5 secondi) .
- Metti questo al falso (il default) se il dataset di solito riceve richieste di infrequenza .insert e/o .delete (ad esempio, meno di una volta ogni 10 secondi) .
- Nota: È possibile usare<cacheFromUrl> e impostazioni correlate indatasets.xmlper EDDTable Da parte sua Ottenere set di dati come un modo per fare e mantenere una copia locale di un remoto EDDTableFromHttpGet dataset su un altroERDDAP. Tuttavia, in questo caso, questo dataset locale respingerà qualsiasi richiesta .insert e .delete.
Utilizzo di EDDTable DaHttpGet Datasets
- Gli autori possono fare "richiesta" cheinserire i dati o eliminare i dati dal dataset.
- Dopo che i dati reali sono stati inseriti nel dataset, è possibile eliminare il file di dati del campione originale.
- Gli utenti possono richiedere i dati dal dataset come fanno per qualsiasi altro dataset EDDTable inERDDAP. Se la richiesta non include un vincolo sulla colonna timestamp, la richiesta ottiene i dati dalla versione corrente del dataset (il file di log dopo l'elaborazione di tutti i comandi di inserimento e cancellazione e ri-sorzionando dalhttpOttenere necessarioVariables) .
- Gli utenti possono anche fare richieste specifiche per EDDTableFromHttpGet datasets:
- Se la richiesta include una<o<= vincolo della colonna timestamp, quindiERDDAP™elabora le righe del file di registro fino al timestamp specificato. In effetti, questo elimina temporaneamente tutte le modifiche apportate al dataset da quel valore timestamp. Per ulteriori informazioni, vedereVersione.
- Se la richiesta include un >, >=, o = vincolo della colonna timestamp, ad esempio, ×tamp<=0, alloraERDDAP™restituisce i dati dai file di dati come è, senza elaborare i comandi di inserimento e cancellazione.
- In futuro, immaginiamo che gli strumenti saranno costruiti (Da noi? Da te?) per lavorare con questi set di dati. Ad esempio, ci potrebbe essere uno script che legge i file di registro grezzi, applica una diversa equazione, e genera / aggiorna un diverso dataset con quelle informazioni derivate. Si noti che lo script può ottenere i dati originali tramite una richiesta diERDDAP™ (che ottiene i dati nel formato del file che è più facile per lo script di lavorare con) e generare / aggiornare il nuovo dataset tramite .insert "richiedi" perERDDAP. Lo script non ha bisogno di accesso diretto ai file di dati; può essere su qualsiasi computer dell'autore autorizzato.
Informazioni dettagliate su EDDTableFromHttpGet
Gli argomenti sono:
- Non cambiare la configurazione!
- CRUDIO
- InvalidRichiesta
- Velocità
- Robusto
- Affidabilità del sistema
- Versione
- "E HTTP PUT e DELETE?"
- Note
- Grazie a CHORDS per l'idea di base.
Ecco le informazioni dettagliate:
Non cambiare la configurazione!
Una volta che il dataset è stato creato e hai aggiunto i dati ad esso:
- Non aggiungere o rimuovere alcundataVariableS.
- Non cambiaresourceNameodestinationNamedelladataVariableS.
- Non modificare i dati Tipo didataVariableS. Ma puoi cambiaredataVariableI metadati.
- Non cambiarehttpOttenere richiesto Variabili attributo globale.
- Non cambiarehttpGetDirectoryStructure attributo globale.
Se è necessario modificare una di queste cose, fare un nuovo dataset e trasferire tutti i dati al nuovo dataset.