Skip to main content

Arbeiten mit demdatasets.xmlDatei

\[Diese Webseite wird nur von Interesse seinERDDAP™Administratoren.\]

Nachdem Sie demERDDAP™ Installationsanleitung, Sie müssen diedatasets.xmlDatei in Tomcat /content/erddap/ um die Datensätze zu beschreiben, die SieERDDAP™Installation wird dienen.

Sie können ein Beispiel sehendatasets.xmlauf GitHub.

    • Ja.

Einleitung

Einige Montage erforderlich

Einrichten eines DatensatzesERDDAP™Es geht nicht nur darum, auf das Verzeichnis oder die URL des Datensatzes hinzuweisen. Sie müssen ein Stück XML schreiben fürdatasets.xmldie den Datensatz beschreibt.

  • Für gegitterte Datensätze, um den Datensatz konform zu machenERDDAP's Datenstruktur für netzgebundene Daten, müssen Sie eine Teilmenge der Variablen des Datensatzes identifizieren, die die gleichen Dimensionen teilen. (Warum? Wie?)
  • Die aktuellen Metadaten des Datensatzes werden automatisch importiert. Aber wenn Sie diese Metadaten ändern oder andere Metadaten hinzufügen möchten, müssen Sie sie indatasets.xml. UndERDDAP™andere Metadaten benötigt, einschließlichGlobale Attribute (wie folgt:infoUrl, Institution,sourceUrl, Zusammenfassung und Titel) undVariable Attribute (wie folgt:long\_nameund Einheiten) . Wie die Metadaten, die derzeit im Datensatz enthalten sind, dem Datensatz beschreibende Informationen hinzufügen, werden die vonERDDAP™fügt dem Datensatz beschreibende Informationen hinzu. Die zusätzlichen Metadaten sind eine gute Ergänzung zu Ihrem Datensatz und hilftERDDAP™tun Sie eine bessere Aufgabe, Ihre Daten an Benutzer zu präsentieren, die nicht mit ihr vertraut sind.
  • ERDDAP™Sie müssen besondere Dinge mit derLänge, Breite, Höhe (oder Tiefe) und Zeitvariablen.

Wenn Sie in diese Ideen einkaufen und den Aufwand zur Erstellung des XML fürdatasets.xml, Sie erhalten alle Vorteile vonERDDAP™, einschließlich:

  • Volltextsuche nach Datensätzen
  • Suche nach Datensätzen nach Kategorie
  • Datenzugriffsformulare ( datasetID .html) so können Sie eine Untermenge von Daten in vielen verschiedenen Dateiformaten anfordern
  • Formulare für Diagramme und Karten ( datasetID .graph)
  • Web Map Service (WMS) für gegitterte Datensätze
  • RESTfulZugriff auf Ihre Daten

Das machendatasets.xmlnimmt großen Aufwand für die ersten wenigen Datensätze, es wird leichter . Nach dem ersten Datensatz können Sie oft eine Menge Ihrer Arbeit für den nächsten Datensatz wiederverwenden. Glücklicherweise,ERDDAP™kommt mit zweiWerkzeugeum Ihnen zu helfen, das XML für jeden Datensatz zu erstellendatasets.xml. Wenn du feststeckst, siehst du unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.

Datenanbieter Formblatt

Wenn ein Datenanbieter zu Ihnen kommt, in der Hoffnung, einige Daten zu Ihrem hinzufügenERDDAP, kann es schwierig und zeitraubend sein, alle Metadaten zu sammeln (Informationen zum Datensatz) benötigt, um den Datensatz inERDDAP. Viele Datenquellen (z.B. .csv-Dateien, Excel-Dateien, Datenbanken) keine internen Metadaten haben, alsoERDDAP™hat ein Data Provider-Formular, das Metadaten des Datenanbieters erfasst und dem Datenanbieter eine andere Anleitung gibt, einschließlich umfassender Anleitung fürDaten in Datenbanken. Die vorgelegten Informationen werden in diedatasets.xmlFormat und dann an dieERDDAP™Administrator (du) und geschrieben (anhängig) bis BigParentDirectory /logs/dataProviderForm.log . So automatisiert die Form den Prozess der Eingabe eines Datensatzes inERDDAP, aber dieERDDAP™Der Administrator muss diedatasets.xmlchunk und behandeln Sie die Datendatei (S) vom Anbieter oder der Verbindung zur Datenbank.

Die Einreichung von Datendateien aus externen Quellen ist ein großes Sicherheitsrisiko, alsoERDDAP™damit nicht umgehen. Sie müssen eine Lösung finden, die für Sie und den Datenanbieter funktioniert, zum Beispiel E-Mail (für kleine Dateien) , ziehen aus der Wolke (zum Beispiel DropBox oder Google Drive) , eine Sftp-Seite (mit Passwörtern) , oder Sneaker Netto (USB-Stick oder externe Festplatte) . Sie sollten wahrscheinlich nur Dateien von Menschen akzeptieren, die Sie kennen. Sie müssen die Dateien für Viren scannen und andere Sicherheitsvorkehrungen.

Es gibt keinen Link inERDDAP™zum Datenträgerformular (z.B. auf derERDDAP™Startseite) . Stattdessen, wenn jemand Ihnen sagt, sie wollen ihre Daten von IhremERDDAP, Sie können ihnen eine E-Mail senden und so etwas sagen: Ja, wir können Ihre Daten inERDDAP. Um zu beginnen, füllen Sie bitte das Formular aus https://yourUrl/erddap/dataProviderForm.html (oderhttp://wennhttps://ist nicht aktiviert) . Nachdem Sie fertig sind, werde ich Sie kontaktieren, um die letzten Details auszuarbeiten. Wenn Sie sich das Formular ansehen möchten (ohne Ausfüllen) , Sie können das Formular aufERD'ERDDAP:Einleitung,Teil 1,Teil 2,Teil 3, undTeil 4. Diese Links auf derERD ERDDAP™senden Sie mir Informationen, nicht Sie, also senden Sie keine Informationen mit ihnen, es sei denn, Sie möchten tatsächlich Daten an dieERD ERDDAP.

Wenn Sie das Data Provider-Formular von Ihrem entfernen möchtenERDDAP™, gesetzt

<dataProviderFormActive>false</dataProviderFormActive>  

in der Datei setup.xml.

Der Impuls dafür warNOAA2014Öffentlicher Zugang zu Forschungsergebnissen (PARR) Richtlinie, die alles erfordertNOAAüber Steuergelder finanzierte Umweltdaten werden über einen Datendienst bereitgestellt (nicht nur Dateien) innerhalb von 12 Monaten der Schöpfung. So gibt es ein erhöhtes Interesse an der NutzungERDDAP™Datensätze über einen Service ASAP zur Verfügung zu stellen. Wir brauchten einen effizienteren Umgang mit einer Vielzahl von Datenanbietern.

Feedback/Vorschläge? Dieses Formular ist neu, bitte E-Mailerd dot data at noaa dot govwenn Sie Feedback oder Vorschläge zur Verbesserung dieser haben.

Werkzeuge

ERDDAP™kommt mit zwei Befehlszeilenprogrammen, die Tools sind, um Ihnen zu helfen, das XML für jeden Datensatz zu erstellen, den Sie möchtenERDDAP™zu dienen. Sobald Sie eingerichtet habenERDDAP™und lauf es (mindestens ein Mal) , Sie können diese Programme im Tomcat /webapps/erdap/WEB-INF-Verzeichnis. Es gibt Linux/Unix Shell-Skripte (mit der Erweiterung .sh) und Windows-Scripte (mit der Erweiterung .bat) für jedes Programm.\[Führen Sie diese Tools auf Linux wie derselbe Benutzer aus (Tomcat?) Das wird Tomcat laufen.\]Wenn Sie jedes Programm ausführen, wird es Ihnen Fragen stellen. Geben Sie für jede Frage eine Antwort ein und drücken Sie dann Enter. Oder drücken Sie ^C, um ein Programm jederzeit zu verlassen.

Das Programm läuft nicht?

  • Wenn Sie ein unbekanntes Programm erhalten (oder ähnliches) Fehlermeldung, das Problem ist wahrscheinlich, dass das Betriebssystem nicht finden konnteJava. Sie müssen herausfinden, woJavaist auf Ihrem Computer, dann bearbeiten Sie die Java-Referenz in der .bat oder .sh-Datei, die Sie versuchen zu verwenden.
  • Wenn Sie eine jar-Datei erhalten, die nicht gefunden wurde oder die Klasse nicht die Fehlermeldung gefunden hat, dannJavakonnte keine der in der .bat oder .sh-Datei aufgeführten Klassen finden, die Sie verwenden möchten. Die Lösung ist herauszufinden, wo die .jar-Datei ist, und bearbeiten Sie die java Referenz auf sie in der .bat oder .sh-Datei.
  • Wenn Sie eine Version vonJavaDas ist zu alt für ein Programm, das Programm wird nicht laufen und Sie werden eine Fehlermeldung wie sehen Ausnahme im Gewinde "main" java.lang.UnsupportedClassVersionError: einige/Klasse/Name : Unsupported major.minor version EinigeNumber
    Die Lösung ist, die neueste Version zu aktualisierenJavaund stellen Sie sicher, dass die .sh- oder .bat-Datei für das Programm es verwendet.

Die Werkzeuge drucken verschiedene Diagnosenachrichten:

  • Das Wort "ERROR" wird verwendet, wenn etwas so falsch ging, dass das Verfahren nicht abgeschlossen. Obwohl es ärgerlich ist, einen Fehler zu bekommen, zwingt der Fehler, sich mit dem Problem zu befassen.
  • Das Wort "WARNING" wird verwendet, wenn etwas schief ging, aber das Verfahren konnte abgeschlossen werden. Das sind ziemlich selten.
  • Alles andere ist nur eine informative Nachricht. Sie können \-verbose hinzufügenGenerateDatasetsXmloderDasDdsBefehlszeile, um zusätzliche informative Nachrichten zu erhalten, die manchmal hilft, Probleme zu lösen.

Die beiden Werkzeuge sind eine große Hilfe, aber Sie müssen noch alle diese Anweisungen auf dieser Seite sorgfältig lesen und wichtige Entscheidungen selbst treffen.

GenerateDatasetsXml

  • GenerateDatasetsXml ist ein Befehlszeilenprogramm, das einen groben Entwurf des Datensatzes XML für nahezu jede Art von Datensatz erzeugen kann.

Wir STRONGLY EMPFEHLEN, dass Sie GenerateDatasets verwenden Xml statt Stücke vondatasets.xmlvon Hand, weil:

  • Datensätze generieren Xml funktioniert in Sekunden. Das mit der Hand zu tun ist mindestens eine Stunde Arbeit, selbst wenn Sie wissen, was Sie tun.
  • Datensätze generieren Xml macht einen besseren Job. Dies von Hand zu tun erfordert umfangreiche Kenntnisse, wieERDDAP™Arbeiten. Es ist unwahrscheinlich, dass Sie einen besseren Job von Hand tun. (Bob Simons verwendet immer GenerateDatasets Xml für den ersten Entwurf, und er schriebERDDAP.)
  • Datensätze generieren Xml generiert immer ein gültiges Stückdatasets.xml. Irgendein Stückdatasets.xmldass Sie schreiben wird wahrscheinlich mindestens ein paar Fehler, die verhindernERDDAP™vom Laden des Datensatzes. Es dauert oft Stunden, um diese Probleme zu diagnostizieren. Verschwende deine Zeit nicht. Let Generate Datensätze Xml machen die harte Arbeit. Dann können Sie die .xml per Hand verfeinern, wenn Sie wollen.

Wenn Sie die GenerateDatasets verwenden Xml Programm:

  • Unter Windows, das erste Mal, wenn Sie GenerateDatasetsXml ausführen, müssen Sie die Datei GenerateDatasetsXml.bat mit einem Texteditor bearbeiten, um den Pfad zur Java zu ändern. exe Datei, so dass WindowsJava.
  • Datensätze generieren Xml bittet Sie zunächst, den EDDType anzugeben (Erd Dap Dataset Typ) des Datensatzes. SieheListe der Datensätze (in diesem Dokument) um herauszufinden, an welchem Typ für den Datensatz Sie arbeiten. Neben den regulären EDDTypen gibt es auch einigeSonder-/Pseudo-Datensatztypen (z.B. einen, der einen THREDDS-Katalog kriechen, um einen Bruch vondatasets.xmlfür jeden der Datensätze im Katalog) .
  • Datensätze generieren Xml stellt Ihnen dann eine Reihe von Fragen, die speziell auf diesen EDDType. Die Fragen sammeln die fürERDDAP™Zugriff auf die Quelle des Datensatzes. Was zu verstehenERDDAP™fragt nach, siehe die Dokumentation für den EDDType, die Sie durch Klicken auf den gleichen Datensatztyp imListe der Datensätze.

Wenn Sie einen String mit Sonderzeichen eingeben müssen (z.B. Weißraumzeichen am Anfang oder Ende, Nicht-ASCII-Zeichen) , geben Sie einJSON-Stil String (mit speziellen Zeichen entkommen mit \ Zeichen) . Zum Beispiel, um nur ein Tab-Zeichen eingeben, geben Sie "\t" (mit den umliegenden Doppel-Zitaten, die sagen,ERDDAP™dass dies ein JSON-Strang ist.

  • Oft wird eine Ihrer Antworten nicht das sein, was GenerateDatasetsXml braucht. Sie können dann wieder versuchen, mit überarbeiteten Antworten auf die Fragen, bis GenerateDatasets Xml kann die Quelldaten erfolgreich finden und verstehen.
  • Wenn Sie die Fragen richtig beantworten (oder ausreichend korrekt) , GenerateDatasets Xml wird sich mit der Datenquelle verbinden und grundlegende Informationen sammeln (z.B. variable Namen und Metadaten) . Für Datensätze, die von lokalenNetCDF .ncund verwandten Dateien, GenerateDatasets Xml druckt oft die ncdump-ähnliche Struktur der Datei, nachdem sie die Datei zuerst liest. Dies kann Ihnen Informationen geben, um die Fragen besser auf einer nachfolgenden Schleife durch GenerateDatasetsXml zu beantworten.
  • Datensätze generieren Xml generiert dann einen groben Entwurf des Datensatzes XML für diesen Datensatz.
  • Diagnostische Informationen und der grobe Entwurf des Datensatzes XML werden in BigParentDirectory /logs/GenerateDatasetsXml.log .
  • Der grobe Entwurf des Datensatzes XML wird in BigParentDirectory /logs/GenerateDatasetsXml.out .

"0 Dateien" Fehlermeldung

Wenn Sie GenerateDatasets ausführen Xml oderDasDds, oder wenn Sie versuchen, eineEDDGridVon...Files oder EDDTableFrom... Dateien-Datensatz inERDDAP™, und Sie erhalten eine "0 Dateien" Fehlermeldung, dassERDDAP™gefunden 0 passende Dateien im Verzeichnis (wenn Sie denken, dass es passende Dateien in diesem Verzeichnis) :

  • Überprüfen Sie, ob Sie den vollständigen Namen des Verzeichnisses angegeben haben. Und wenn Sie den Beispieldateinamen angegeben haben, stellen Sie sicher, dass Sie den vollständigen Namen der Datei, einschließlich des vollständigen Verzeichnisnamens, angegeben haben.

  • Überprüfen Sie, ob die Dateien wirklich in diesem Verzeichnis sind.

  • Überprüfen Sie die Rechtschreibung des Verzeichnisnamens.

  • Überprüfen Sie die DateiNameRegex. Es ist wirklich, wirklich einfach, Fehler mit Regexes zu machen. Für Testzwecke, versuchen Sie die regex .\*, die alle Dateinamen entsprechen sollte. (Sieheregex dokumentationundNach oben.)

  • Überprüfen Sie, ob der Benutzer, der das Programm läuft (z.B., user=tomcat (?) für Tomcat/ERDDAP) hat 'lesen' Erlaubnis für diese Dateien.

  • In einigen Betriebssystemen (zum Beispiel SELinux) und je nach Systemeinstellungen, muss der Benutzer, der das Programm ausgeführt hat, 'lesen' Berechtigung für die gesamte Kette von Verzeichnissen, die zu dem Verzeichnis führen, das die Dateien hat.

  • Wenn Sie Probleme haben, die Sie nicht lösen können,Anfrage Supportmit so viel Information wie möglich. Ähnlich, wenn es wie der entsprechende EDDType für einen bestimmten Datensatz scheint, funktioniert nicht mit diesem Datensatz, oder wenn es keinen entsprechenden EDDType gibt, bitte eine Datei einreichenProblem bei GitHubmit den Details (und eine Musterdatei, falls relevant) .  

Sie müssen die Ausgabe von GenerateDatasets bearbeiten Xml, um es besser zu machen.

 

  • DISCLAIMER: DER CHUNKdatasets.xmlMADE BE GenerateDatasets Xml ISN'T PERFECT. Sie müssen die XML BEFORE in einem ÖFFENTLICHENERDDAP. Datensätze generieren Xml RELIES ON A LOT of RULES-OF-THUMB WHICH AREN'T ALWAYS CORRECT. Sie haben die Möglichkeit, den CORRECTNESS des XML so zu ändern, dass Sie aufERDDAPSdatasets.xmlFILE.

    (Fun Fact: Ich schreie nicht. Aus historischen Rechtsgründen müssen Disclaimer in allen Kappen geschrieben werden.)

Die Ausgabe von GenerateDatasetsXml ist ein grober Entwurf. Sie werden es fast immer bearbeiten müssen. Wir haben enorme Anstrengungen unternommen, um die Produktion so schnell wie möglich fertig zu machen, aber es gibt Grenzen. Oft sind benötigte Informationen einfach nicht aus den Quell-Metadaten verfügbar.

Ein grundlegendes Problem ist, dass wir ein Computerprogramm fragen (GenerateDatasetsXml) eine Aufgabe zu tun, wo, wenn Sie die gleiche Aufgabe zu 100 Personen, würden Sie 100 verschiedene Ergebnisse erhalten. Es gibt keine einzige "richtige" Antwort. Offensichtlich kommt das Programm am nächsten, um Bobs Geist zu lesen (nicht deine) , aber auch so, es ist nicht ein all-verstehendes KI-Programm, nur ein Haufen von Heuristiken kobbelt zusammen, um eine KI-ähnliche Aufgabe zu tun. (An jenem Tag eines allverständigen KI-Programms kann kommen, aber es hat noch nicht. Wenn/wenn es das tut, können wir Menschen größere Probleme haben. Seien Sie vorsichtig, was Sie wünschen.)

  • Für Informationszwecke zeigt die Ausgabe die globale QuelleAttribute und variable sourceAttributes als Kommentare.ERDDAP™verbindet sourceAttributes undaddAttributes (die vorangegangen sind) um die Kombination zu machen Attribute, die dem Benutzer angezeigt werden. (Und andere Attribute werden automatisch zu Längen-, Breiten-, Höhen-, Tiefen- und Zeitvariablen hinzugefügt, wennERDDAP™macht tatsächlich den Datensatz) .  

  • Wenn Sie kein sourceAttribute mögen, überschreiben Sie es, indem Sie ein addAttribute mit dem gleichen Namen, aber einen anderen Wert (oder kein Wert, wenn Sie es entfernen möchten) .  

  • AlleaddAttributessind computergenerierte Vorschläge. Bearbeiten Sie sie! Wenn du kein AddAttribute magst, ändere es.  

  • Wenn Sie andere hinzufügen möchtenaddAttributesFüge sie hinzu.  

  • Wenn Sie einedestinationName, ändern. Aber nicht ändernsourceNameS.  

  • Sie können die Reihenfolge derdataVariables oder sie entfernen.

    • Sie können dann verwendenDasDds (siehe unten) wiederholt das XML für diesen Datensatz testen, um sicherzustellen, dass der resultierende Datensatz angezeigt wird, wie Sie es inERDDAP.
    • Fühlen Sie sich frei, kleine Änderungen an derdatasets.xmlchunk, die beispielsweise erzeugt wurde, liefern eine bessereinfoUrl, Zusammenfassung oder Titel.

doNotAddStandardNames

Wenn Sie \-doNotAddStandardNames als Befehlszeilenparameter einschließen, wenn Sie ausführen Datensätze Xml, erzeugen Datensätze Xml wird nicht hinzugefügtstandard\_namein deraddAttributesfür andere Variablen als Variablen, genannt Breite, Länge, Höhe, Tiefe oder Zeit (die offensichtlich sindstandard\_nameS) . Dies kann nützlich sein, wenn Sie die Ausgabe aus der Erzeugung verwenden Datensätze Xml direkt inERDDAP™ohne die Ausgabe zu bearbeiten, weil Datensätze Xml erraten oftstandard\_names falsch. (Beachten Sie, dass wir immer empfehlen, dass Sie die Ausgabe bearbeiten, bevor Sie sie inERDDAP.) Mit diesem Parameter werden andere kleinere verwandte Effekte haben, weil die erratenstandard\_namehäufig für andere Zwecke verwendet wird, z.B. um ein neues zu schaffenlong\_name, und die colorBar-Einstellungen zu erstellen.

Schrift

Als Alternative zur interaktiven Beantwortung der Fragen an der Tastatur und Schleife, um zusätzliche Datensätze zu erzeugen, können Sie Befehlszeilenargumente bereitstellen, um alle Fragen zu beantworten, um einen Datensatz zu erzeugen. Datensätze generieren Xml verarbeitet diese Parameter, schreibt die Ausgabe in die Ausgabedatei und verlässt das Programm.

Um dies einzurichten, verwenden Sie zuerst das Programm im interaktiven Modus und schreiben Sie Ihre Antworten auf. Hier ist ein Teilbeispiel: Sagen wir, Sie führen das Skript: ./GenerateDatasetsXml.sh Geben Sie dann ein: EDDTableFromAsciiFiles Geben Sie dann ein: /u00/data/ Geben Sie dann ein: Geben Sie dann ein: /u00/data/sampleFile.asc Geben Sie dann ein: ISO-8859-1

Um dies nicht interaktiv auszuführen, verwenden Sie diese Befehlszeile: ./GenerateDatasetsXml.sh EDDTableFromAsciiFiles /u00/data/ .\*\.asc /u00/data/sampleFile.asc ISO-8859-1 Also im Grunde, Sie nur alle Antworten auf der Kommandozeile. Dies sollte für Datensätze nützlich sein, die sich häufig in einer Weise ändern, die re-running GenerateDatasets erfordert Xml (insbesondereEDDGridVonThreddsCatalog) .

Details:

  • Enthält ein Parameter einen Raum oder ein bestimmtes Zeichen, so kodiert der Parameter als einJSON-Stil String, z.B. "mein Parameter mit Räumen und zwei\nLinien".
  • Wenn Sie einen leeren String als Parameter angeben möchten, verwenden Sie: nichts
  • Wenn Sie den Standardwert eines Parameters angeben möchten, verwenden Sie: default  
  • Datensätze generieren Xml unterstützt a -i Datensätze XmlName # Tag und Tag Befehlszeilenparameter, der den Ausgang in den angegebenendatasets.xmlDatei (Der Standard ist Tomcat /Fortsetzung/Erlaubung/datasets.xml) . Datensätze generieren Xml sucht zwei Zeilen in Datensätzen XmlName:
        <!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->  

und

        <!-- End GenerateDatasetsXml #*tagName someDatetime* -->  

und ersetzt alles zwischen diesen Zeilen durch den neuen Inhalt, und ändert die irgendwannDatetime.

  • Der -i-Schalter wird nur bearbeitet (und Änderungendatasets.xmlwerden nur gemacht) wenn Sie GenerateDatasets ausführen Xml mit Kommandozeilen-Argumenten, die alle Antworten auf alle Fragen für eine Schleife des Programms angeben. (Siehe oben 'Schrift'.) (Das Denken ist: Dieser Parameter ist für die Verwendung mit Skripten. Wenn Sie das Programm im interaktiven Modus verwenden (Eingabe von Informationen auf der Tastatur) , Sie werden wahrscheinlich einige falsche chunks von XML generieren, bevor Sie die, die Sie wollen.)
  • Werden die Anfangs- und Endzeilen nicht gefunden, so werden diese Zeilen und der neue Inhalt vorab eingefügt.</erddapDatasets>.
  • Es gibt auch eine (Kapital i) Schalter für Testzwecke, die das gleiche wie -i, aber erstellt eine Datei namensdatasets.xml Datum und ändert sich nichtdatasets.xml.
  • Nicht ausführen GenerateDatasets Xml mit -i in zwei Prozessen auf einmal. Es gibt eine Chance, dass nur eine Reihe von Änderungen beibehalten werden. Es könnte ernste Probleme geben (zum Beispiel beschädigte Dateien) .

Wenn Sie "GenerateDatasetsXml -verbose" verwenden, wird es mehr Diagnosenachrichten als üblich drucken.

Sonder-/Pseudo-Datensatztypen

Im Allgemeinen die EDDType Optionen in GenerateDatasets Xml Übereinstimmung der in diesem Dokument beschriebenen EDD-Typen (sieheListe der Datensätze) und erzeugen einesdatasets.xmlchunk, um einen Datensatz aus einer bestimmten Datenquelle zu erstellen. Es gibt einige Ausnahmen und Sonderfälle:

EDDGridVon Erddap

Dieser EDDType generiert alledatasets.xmlbenötigte StückeEDDGridVon ErddapDatensätze aus allenEDDGridDatensets in einer FernbedienungERDDAP. Sie haben die Möglichkeit, das Original zu haltendatasetIDS (die einige duplizieren könnendatasetIDschon in deinerERDDAP) oder neue Namen generieren, die einzigartig werden (aber in der Regel nicht als menschlich lesbar) .  

EDDTableFromErddap

Dieser EDDType generiert alledatasets.xmlbenötigte StückeEDDTableFromErddapDatensätze von allen EDDTable-Datensätzen in einer FernbedienungERDDAP. Sie haben die Möglichkeit, das Original zu haltendatasetIDS (die einige duplizieren könnendatasetIDschon in deinerERDDAP) oder neue Namen generieren, die einzigartig werden (aber in der Regel nicht als menschlich lesbar) .  

EDDGridVonThreddsCatalog

Dieser EDDType generiert alledatasets.xmlfür alleEDDGridVonDapDatensätze, die sie finden können, indem sie durch einen THREDDS wiederkehren (Teil) Katalog. Es gibt viele Formen von THREDDS Katalog URLs. Diese Option REQUIRES eine THREDDS .xml URL mit /catalog/ darin zum Beispiel https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml oder https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(ein verwandter .html-Katalog ist bei https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html , die fürEDDGridVonThreddsCatalog). Wenn Sie Probleme mitEDDGridVonThredds Katalog:

  • Stellen Sie sicher, dass die URL, die Sie verwenden, gültig ist, enthält /catalog/ und endet mit /catalog.xml .
  • Wenn möglich, nutzen Sie eine öffentliche IP-Adresse (zum Beispiel, https://oceanwatch.pfeg.noaa.gov ) in der URL keine lokale numerische IP-Adresse (zum Beispiel, https://12.34.56.78 ) . Wenn die THREDDS nur über die lokale numerische IP-Adresse erreichbar ist, können Sie [<ConvertToPublicSourceUrl>] (#converttopublicsourceurl) alsoERDDAP™Benutzer sehen die öffentliche Adresse, obwohlERDDAP™erhält Daten von der lokalen numerischen Adresse.
  • Wenn Sie Probleme haben, die Sie nicht lösen können,die Fehlersuche Tipps überprüfen.
  • Der Low-Level-Code hierfür verwendet jetzt dieUnidatanetcdf-java Katalog Raupencode (Drredds. Katalogklassen) so dass es alle THREDDS Kataloge handhaben kann (die überraschenderweise komplex sein kann) DankUnidatafür diesen Code.  
EDDGridLonPM180FromErddapCatalog

Dieser EDDType erzeugt diedatasets.xmlzu machenEDDGridLonPM180Datensätze aus allenEDDGridDatensätze in einemERDDAPdie alle Längenwerte größer als 180 haben.

  • Wenn möglich, nutzen Sie eine öffentliche IP-Adresse (zum Beispiel, https://oceanwatch.pfeg.noaa.gov ) in der URL keine lokale numerische IP-Adresse (zum Beispiel, https://12.34.56.78 ) . WennERDDAP™nur über die lokale numerische IP-Adresse erreichbar ist, können Sie [<ConvertToPublicSourceUrl>] (#converttopublicsourceurl) alsoERDDAP™Benutzer sehen die öffentliche Adresse, obwohlERDDAP™erhält Daten von der lokalen numerischen Adresse.  
EDDGridLon0360FromErddapCatalog

Dieser EDDType erzeugt diedatasets.xmlzu machenEDDGridLon0360Datensätze aus allenEDDGridDatensätze in einemERDDAPdie Längenwerte kleiner als 0 haben.

  • Wenn möglich, nutzen Sie eine öffentliche IP-Adresse (zum Beispiel, https://oceanwatch.pfeg.noaa.gov ) in der URL keine lokale numerische IP-Adresse (zum Beispiel, https://12.34.56.78 ) . WennERDDAP™nur über die lokale numerische IP-Adresse erreichbar ist, können Sie [<ConvertToPublicSourceUrl>] (#converttopublicsourceurl) alsoERDDAP™Benutzer sehen die öffentliche Adresse, obwohlERDDAP™erhält Daten von der lokalen numerischen Adresse.  
EDDsFromFiles

Bei einem Startverzeichnis durchläuft diese das Verzeichnis und alle Unterverzeichnisse und versucht, für jede Gruppe von Datendateien einen Datensatz zu erstellen, den es findet.

  • Dies geht davon aus, dass der Datensatz, wenn ein Datensatz gefunden wird, alle Unterverzeichnisse enthält.
  • Wird ein Datensatz gefunden, werden ähnliche Geschwister als separate Datensätze behandelt. (z.B. werden die Verzeichnisse für die 1990er Jahre, die 2000er Jahre, die 2010er Jahre, separate Datensätze generieren) . Sie sollten leicht von Hand zu kombinieren sein -- ändern Sie einfach den ersten Datensatz<fileDir> zum Stammverzeichnis und alle nachfolgenden Geschwisterdatensätze löschen.
  • Dies wird nur versuchen, ein Stück vondatasets.xmlfür den häufigsten Dateierweiterungstyp in einem Verzeichnis (nicht Zählen .md5, die ignoriert wird) . Also, gegeben ein Verzeichnis mit 10.ncDateien und 5.txt Dateien, ein Datensatz wird für die.ncNur Dateien.
  • Dies geht davon aus, dass alle Dateien in einem Verzeichnis mit der gleichen Erweiterung im selben Datensatz gehören. Wenn ein Verzeichnis einige.ncDateien mit SST-Daten und einigen.ncDateien mit Chlorophyll-Daten, nur eine Probe.ncDatei wird gelesen (SST? Chlorophyll?) und nur ein Datensatz wird für diese Art von Datei erstellt. Dieser Datensatz wird wahrscheinlich nicht laden, weil Komplikationen versuchen, zwei Arten von Dateien in den gleichen Datensatz laden.
  • Wenn es weniger als 4 Dateien mit der häufigsten Erweiterung in einem Verzeichnis gibt, wird davon ausgegangen, dass sie keine Datendateien sind und nur das Verzeichnis überspringen.
  • Wenn es 4 oder mehr Dateien in einem Verzeichnis, aber dies kann nicht erfolgreich ein Stück vondatasets.xmlfür die Dateien (zum Beispiel einen nicht unterstützten Dateityp) , dies wird eineEDDTableFromFileNamesDatensatz für die Dateien.
  • Am Ende der Diagnosen, die dies in die Log-Datei schreibt, kurz vor derdatasets.xmlchunks, dies wird eine Tabelle mit einer Zusammenfassung von Informationen, die durch alle Unterverzeichnisse gesammelt werden. Die Tabelle listet alle Unterverzeichnisse auf und gibt die häufigsten Arten von Dateierweiterungen an, die Gesamtzahl der Dateien und welche Art von Datensätzen für diese Dateien erstellt wurden. (wenn) . Wenn Sie mit einer komplexen, tief geschachtelten Dateistruktur konfrontiert sind, beachten Sie die Ausführung von GenerateDatasets Xml mit EDDType=EDDsFromFiles nur um diese Informationen zu generieren,
  • Diese Option kann nicht eine große Aufgabe, den besten EDDType für eine bestimmte Gruppe von Datendateien zu erraten, aber es ist schnell, einfach und lohnt einen Versuch. Wenn die Quelldateien geeignet sind, funktioniert es gut und ist ein guter erster Schritt bei der Generierung derdatasets.xmlfür ein Dateisystem mit vielen Unterverzeichnissen, jeweils mit Datendateien aus verschiedenen Datensätzen.  
EDDTableFromEML und EDDTableFromEMLBatch

Diese spezielle EDDType erzeugt diedatasets.xmlum einEDDTableFromAsciiFilesDatensatz aus jedem der in einerÖkologische MetadatenspracheXML-Datei. Die "Batch"-Variante arbeitet an allen EML-Dateien in einem lokalen oder Remote-Verzeichnis. Bitte sehen Sie die separateDokumentation für EDDTableFromEML.  

EDDTableFromInPort

Diese spezielle EDDType erzeugt diedatasets.xmlum einEDDTableFromAsciiFilesDatensatz aus der Information in einemInport-xmlDatei. Wenn Sie Zugriff auf die Quelldatendatei erhalten können (die inport-xml-Datei sollte Hinweise haben, wo sie finden) , Sie können einen Arbeitsdatensatz inERDDAP.

Die folgenden Schritte zeigen, wie man GenerateDatasets verwendet Xml mit einer inport-xml-Datei, um einen Arbeitsdatensatz inERDDAP.

  1. Sobald Sie Zugriff auf die inport-xml-Datei haben (entweder als URL oder als lokale Datei) : Run GenerateDatasets Xml, geben Sie EDDType=EDDTableFromInPort an, geben Sie die inport-xml URL oder den vollständigen Dateinamen an, welcheChild=0 und geben Sie die anderen angeforderten Informationen an (wenn bekannt) . (An dieser Stelle müssen Sie nicht die Quelldatendatei haben oder ihren Namen angeben.) Die Einstellung, dieChild=0 sagt GenerateDatasets Xml zum Ausschreiben der Informationen für alle von<Entity-attribute-Information><Entity>'s in der inport-xml-Datei (wenn es) . Es druckt auch eine Hintergrundinformationen Zusammenfassung, einschließlich aller Download-urls in der inport-xml-Datei aufgelistet.
  2. Sehen Sie durch alle Informationen (einschließlich der Hintergrundinformationen, die Datasets generieren Xml Drucke) und besuchen Sie das download-url (S) um zu versuchen, die Quelldatendatei zu finden (S) . Wenn Sie es finden (sie) , herunterladen (sie) in ein Verzeichnis, das zugänglich istERDDAP. (Wenn Sie keine Quelldaten-Dateien finden können, gibt es keinen Punkt beim Weiterfahren.)
  3. Start Generieren Datensätze Xml wieder. Wenn die Quelldatendatei einer der inport-xml-Datei entspricht<Entity-attribute-Information><Unternehmen>'s, angeben, welcheChild= Das ist die Sache. (z.B. 1, 2, 3, ...) .ERDDAP™wird versuchen, die Spaltennamen in der Quelldatendatei an Namen in der Entity-Information anzupassen, und die Aufforderung, Abweichungen zu akzeptieren/abzuwerfen/fixieren. Oder wenn die inport-xml-Datei keine hat<Entity-attribute-Information><Entity>'s, angeben, welcheChild=0.
  4. Im Stückdatasets.xmldie von GenerateDatasets gemacht wurde Xml, die [globale<addAttributes> (#global-attributes) nach Bedarf/erwartet.
  5. Im Stückdatasets.xmldie von GenerateDatasetsXml gemacht wurde, fügen Sie die [<dataVariable> (#datavariable) Informationen nach Bedarf/erwartet, um jede der Variablen zu beschreiben. Stellen Sie sicher, dass Sie jede Variable richtig identifizieren (<sourceName> (#sourcename) (wie es in der Quelle erscheint) , (<destinationName> (#destinationname) (die mehr Einschränkungen auf erlaubten Zeichen alssourceName) , (<Einheiten (#units) (besonders wenn esZeit- oder Zeitstempelvariablewo die Einheiten das Format angeben müssen) , und (<missing\_value> (#missing_value) ,
  6. Wenn Sie in der Nähe der Fertigstellung sind, verwenden Sie wiederholt dieDasDdsTool, um schnell zu sehen, ob die Datensatzbeschreibung gültig ist und ob der Datensatz inERDDAP™wie du willst.  

Es wäre toll, wenn Gruppen, die InPort verwenden, ihre Datensätze zu dokumentieren, auch verwenden würdenERDDAP™die tatsächlichen Daten zur Verfügung zu stellen:

  • ERDDAP™ist eine Lösung, die sofort verwendet werden kann, damit Sie erfüllen könnenNOAA'Öffentlicher Zugang zu Forschungsergebnissen (PARR) AnforderungenIm Moment, nicht zu einer gewissen Zeit in der Zukunft.
  • ERDDAP™stellt die tatsächlichen Daten den Nutzern zur Verfügung, nicht nur die Metadaten. (Wie gut sind Metadaten ohne Daten?)
  • ERDDAP™unterstützt Metadaten (insbesondere die Einheiten von Variablen) , im Gegensatz zu anderen Datenserver-Software berücksichtigt werden. (Wie gut sind Daten ohne Metadaten?) Um Software zu verwenden, die keine Metadaten unterstützt, ist es, die Daten einzuladen, missverstanden und missverwendet zu werden.
  • ERDDAP™ist frei und Open-Source-Software im Gegensatz zu einer anderen Software betrachtet werden. Fortschreitende EntwicklungERDDAP™wird bereits bezahlt. Unterstützung fürERDDAP™Benutzer sind kostenlos.
  • ERDDAP's Aussehen kann leicht angepasst werden, um Ihre Gruppe zu reflektieren und hervorzuheben (nichtERDoderERDDAP) .
  • ERDDAP™bietet einen konsistenten Zugriff auf alle Datensätze.
  • ERDDAP™kann Daten aus vielen Arten von Datendateien und aus relationalen Datenbanken lesen.
  • ERDDAP™kann mit großen Datensätzen umgehen, einschließlich Datensätze, in denen die Quelldaten in vielen Datendateien liegen.
  • ERDDAP™kann auf Anfrage des Nutzers Daten an viele Arten von Datendateien schreiben, einschließlich wissenschaftlicher Datendateitypen wie netCDF, ESRI .csv undODV .txt.
  • ERDDAP™kann benutzerdefinierte Grafiken und Karten von Untergruppen der Daten erstellen, basierend auf den Spezifikationen des Benutzers.
  • ERDDAP™kann mit Nicht-Daten-Datensätzen wie Sammlungen von Bild-, Video- oder Audiodateien umgehen.
  • ERDDAP™wurde installiert und verwendetmehr als 60 Institutionen weltweit.
  • ERDDAP™wird als einer der Datenserver aufgeführt, die für die Nutzung innerhalb derNOAAin derNOAADatenschutzrichtlinie, im Gegensatz zu einer anderen Software betrachtet werden.
  • ERDDAP™ist ein Produkt vonNMFS/NOAA, so verwenden Sie es innerhalbNMFSundNOAAsollte ein Punkt des Stolzes seinNMFSundNOAA.

Bitte geben SieERDDAP™einen Versuch. Wenn Sie Hilfe benötigen, schreiben Sie bitte eine Nachricht in derERDDAP™Google-Gruppe.  

AddFillValueAttribute

Diese spezielle EDDType Option ist kein Datensatztyp. Es ist ein Tool, das \_FillValue Attribute zu einigen Variablen in einigen Datensätzen hinzufügen kann. Vgl.AddFillValueAttribute.  

findenDuplicate Zeit

Diese spezielle EDDType Option ist kein Datensatztyp. Stattdessen sagt es GenerateDatasets Xml zur Suche durch eine Sammlung von gegitterten.nc (und verwandt) Dateien, um eine Liste von Dateien mit doppelten Zeitwerten zu finden und auszudrucken. Wenn es die Zeitwerte betrachtet, wandelt es sie von den ursprünglichen Einheiten in"seconds since 1970-01-01"falls verschiedene Dateien verschiedene Einheiten Strings verwenden. Sie müssen das Startverzeichnis bereitstellen (mit oder ohne Nachschub) , der Dateiname regulärer Ausdruck (z.B.,.nc ) , und der Name der Zeitvariable in den Dateien.  

ncdump

Diese spezielle EDDType Option ist kein Datensatztyp. Stattdessen sagt es GenerateDatasets Xml zum Druckenncdump\-ähnlicher Ausdruck eines.nc,.ncml oder.hdfDatei. Es verwendet tatsächlich die netcdf-java'sNCdump, die ein begrenzteres Werkzeug als die C-Version von NCdump ist. Wenn Sie diese Option verwenden, GenerateDatasetsXml wird Sie bitten, eine der Optionen zu verwenden: "-h" (Kopf) , "-c" (Koordinaten vars) , "-vall" (Standard) "-v var1;var2", "-v var1 (0,0:10,0:20) ". Dies ist nützlich, denn ohne ncdump ist es schwer zu wissen, was in einem.nc,.ncml oder.hdfDatei und damit, welche EDDType Sie für GenerateDatasets festlegen sollten Xml. Für einen.ncml-Datei, dies wird die ncdump Ausgabe für das Ergebnis der.ncÄnderungen der Datei in der zugrunde liegenden Datei.ncoder.hdfDatei.  

DasDds

  • DasDds ist ein Befehlszeilenprogramm, das Sie verwenden können, nachdem Sie einen ersten Versuch im XML für einen neuen Datensatz indatasets.xml. Mit DasDds können Sie das XML wiederholt testen und verfeinern. Wenn Sie das DasDds-Programm verwenden:
    1. Unter Windows, das erste Mal, wenn Sie DasDds ausführen, müssen Sie das DasDds bearbeiten. bat-Datei mit einem Text-Editor, um den Pfad zur Java zu ändern. exe Datei, so dass WindowsJava.
    2. DasDds fragt Sie nach demdatasetIDfür den Datensatz, an dem Sie arbeiten.
    3. DasDds versucht, den Datensatz mit diesem zu erstellendatasetID.
      • DasDds druckt immer viele Diagnosenachrichten. Wenn Sie "DasDds -verbose" verwenden, wird DasDds mehr Diagnosenachrichten als üblich drucken.
      • Für die Sicherheit löscht DasDds immer alle Datensatzinformationen (Dateien) für den Datensatz vor dem Versuch, den Datensatz zu erstellen. Dies entspricht der Einstellung aharte FlaggeFür aggregierte Datensätze können Sie die DateiNameRegex vorübergehend anpassen, um die Anzahl der Dateien zu begrenzen, die der Datenkonstruktor findet.
      • Wenn der Datensatz nicht geladen wird (aus welchem Grund) , DasDds wird Ihnen die Fehlermeldung für den ersten Fehler anzeigen. Versuchen Sie nicht zu erraten, was das Problem sein könnte. Lesen Sie die ERROR-Nachricht sorgfältig.
        Falls erforderlich, lesen Sie die vorhergehenden Diagnosenachrichten, um weitere Hinweise und Informationen zu finden.
      • Machen Sie eine Änderung im XML des Datensatzes, um THAT Problem zu lösen
        und lass DasDds versuchen, den Datensatz wieder zu erstellen.
      • Wenn Sie immer wieder jedes Problem lösen, werden Sie schließlich alle Probleme lösen
        und der Datensatz wird geladen.
    4. Alle DasDds Ausgänge (Diagnosen und Ergebnisse) auf den Bildschirm geschrieben und BigParentDirectory /logs/DasDds.log .
    5. Wenn DasDds den Datensatz erstellen kann, zeigt DasDds Ihnen dann die.das (Datensatz Attributstruktur) ,.ddd (Datensatz Deskriptor Struktur) , und.timeGaps (Zeitlücken) Informationen für den Datensatz auf Ihrem Bildschirm und schreiben Sie sie an BigParentDirectory /logs/DasDds.out .
    6. Oft möchten Sie eine kleine Änderung im XML des Datensatzes vornehmen, um die Metadaten des Datensatzes zu reinigen und DasDds neu zu führen.

Bonus Drittanbieter-Tool:ERDDAP- Lint

ERDDAP-lint ist ein Programm von Rob Fuller und Adam Leadbetter des Irish Marine Institute, das Sie verwenden können, um die Metadaten IhrerERDDAP™Datensätze.ERDDAP-lint "enthält Regeln und eine einfache statische Web-Anwendung für die Durchführung einiger Überprüfungstests gegen IhreERDDAP™Server. Alle Tests werden im Webbrowser durchgeführt." Wie dieUnix/Linux Lint Tool, Sie können die bestehenden Regeln bearbeiten oder neue Regeln hinzufügen. Vgl.ERDDAP- Lintfür weitere Informationen.

Dieses Tool ist besonders nützlich für Datensätze, die Sie vor einiger Zeit erstellt haben und jetzt mit Ihren aktuellen Metadatenpräferenzen aktualisiert werden wollen. Zum Beispiel frühe Versionen von GenerateDatasets Xml hat sich nicht darum bemüht, weltweit zu schaffencreator\_name,creator\_email, creator\_type odercreator\_urlMetadaten. Sie könnten benutzenERDDAP-die Datensätze zu identifizieren, die diesen Metadaten-Attributen fehlen.

Dank Rob und Adam für die Erstellung dieses Tools und die BereitstellungERDDAP™Gemeinschaft.  

Die Grundstruktur derdatasets.xmlDatei

Die gewünschten und optionalen Tags in adatasets.xmlDatei (und die Anzahl der Zeiten, die sie erscheinen können) sind unten dargestellt. In der Praxis, Ihrdatasets.xmlwird viel haben<dataset>s Tags und nur die anderen Tags innerhalb<erdddapDatasets> nach Bedarf.

 <?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>

Es ist möglich, dass in Zukunft andere Kodierungen erlaubt werden, aber jetzt wird nur ISO-8859-1 empfohlen.  

XI

Neu in Version 2.25 ist Unterstützung für XInclude. Dies erfordert, dass Sie den SAX Parser verwenden<VerwendungSaxParser>true</useSaxParser> in Ihrem setup.xml. Dies kann es Ihnen ermöglichen, jeden Datensatz in einer eigenen Datei zu schreiben, dann enthalten sie alle in der Hauptsachedatasets.xml, Teile von Datensatzdefinitionen wiederverwenden, oder beide. Wenn Sie ein Beispiel sehen möchten,EDDTestDataset.javasetzt XInclude ein, um variable Definitionen wiederzuverwenden.  

    • Ja.

Anmerkungen

Arbeiten mit demdatasets.xmlDatei ist ein nicht-triviales Projekt. Bitte lesen Sie alle diese Notizen sorgfältig. Nach der AuswahlDatensatztyp, bitte lesen Sie die ausführliche Beschreibung davon sorgfältig.  

Auswahl des Datensatztyps

In den meisten Fällen gibt es nur einenERDDAP™Datensatztyp, der für eine bestimmte Datenquelle geeignet ist. In einigen Fällen (z.B.,.ncDateien) , es gibt ein paar Möglichkeiten, aber in der Regel eine von ihnen ist definitiv am besten. Die erste und größte Entscheidung, die Sie treffen müssen, ist: ist es angemessen, den Datensatz als Gruppe von multidimensionalen Arrays zu behandeln (wenn ja, sehen SieEDDGridDatensatztypen) oder als Datenbank-ähnliche Datentabelle (wenn ja, sehen SieEDDTable Datensatztypen) .  

Die Daten als I

In der Regel gibt es keine Notwendigkeit, die Datenquelle zu ändern (z.B. die Dateien in einen anderen Dateityp konvertieren) undERDDAP™kann es dienen. Eine der Annahmen vonERDDAP™ist, dass die Datenquelle verwendet wird, wie es ist. Normalerweise funktioniert das gut. Einige Ausnahmen sind:

  • Beziehungsdatenbanken und Cassandra --ERDDAP™können Daten direkt aus relationalen Datenbanken und Cassandra dienen. Aber für Sicherheits-, Lastausgleichs- und Leistungsprobleme können Sie eine andere Datenbank mit den gleichen Daten einrichten oder die Daten speichern.NetCDFV3.ncDateien und habenERDDAP™den Daten aus der neuen Datenquelle dienen. Vgl.EDDTableFromDatabaseundEDDTableFromCassandra.
  • Nicht unterstützte Datenquellen --ERDDAP™kann eine große Anzahl von Arten von Datenquellen unterstützen, aber die Welt ist gefüllt mit 1000's (Millionen?) von verschiedenen Datenquellen (insbesondere Datendateistrukturen) . wennERDDAP™unterstützt Ihre Datenquelle nicht:
    • Ist die DatenquelleNetCDF .ncDateien, können Sie verwendenNcMLdie Datendateien auf dem Flug ändern oder verwendenNCOum die Datendateien dauerhaft zu ändern.
    • Sie können die Daten an einen Datenquellentyp schreiben, derERDDAP™unterstützt.NetCDF-3.ncDateien sind eine gute, allgemeine Empfehlung, weil sie binäre Dateien sind, dieERDDAP™kann sehr schnell lesen. Für tabellarische Daten, betrachten Sie die Speicherung der Daten in einer Sammlung.ncDateien, die dieCF Diskrete Sampling Geometrien (DSG) Contiguous Ragged Array Datenstrukturen und so mitERDDAP'EDDTableFromNcCFFiles) Wenn sie logisch organisiert sind (jeder mit Daten für ein Stück Raum und Zeit) ,ERDDAP™kann Daten sehr schnell aus ihnen extrahieren.
    • Sie können verlangen, dass die Unterstützung dieser Datenquelle hinzugefügt wirdERDDAP™durch E-Mail an Chris. John bei noaa.gov.
    • Sie können die Unterstützung für diese Datenquelle hinzufügen, indem Sie den Code schreiben, um es selbst zu handhaben. Vgl.dieERDDAP™Programmer's Guide
  • Geschwindigkeit --ERDDAP™kann Daten aus einigen Datenquellen viel schneller als andere lesen. Zum Beispiel lesenNetCDFV3.ncDateien sind schnell und lesen ASCII Dateien ist langsamer. Und wenn es ein großes (>1000) oder groß (> 10.000) Anzahl der Quelldatendateien,ERDDAP™wird auf einige Datenanfragen langsam reagieren. Normalerweise ist der Unterschied für den Menschen nicht spürbar. Allerdings, wenn Sie denkenERDDAP™ist für einen bestimmten Datensatz langsam, Sie können das Problem lösen, indem Sie die Daten zu einem effizienteren Setup schreiben (meist: ein paar, gut strukturiert,NetCDFV3.ncDateien) . Für tabellarische Daten siehedieser Rat.  

Hinweis

Es ist oft einfacher, das XML für einen Datensatz zu generieren, indem eine Kopie einer Arbeitsdatensatz-Beschreibung in dataset.xml erstellt und dann modifiziert wird.

Kodierung von Sonderzeichen

Seitdatasets.xmlist eine XML-Datei, Sie müssen& Codierung"&", "<", und ">" in allen Inhalten als "&amp", "<", und "&gt". Falsch:<Titel Zeit und Zeit</Titel Richtig:<Titel Zeit und Zeit</Titel  

XML toleriert keine Syntaxfehler

Nachdem Sie die dataset.xml-Datei bearbeiten, ist es eine gute Idee, zu überprüfen, ob das Ergebnis istgut ausgebildetes XMLindem Sie den XML-Text in einen XML-Checker wie einfügenxmlvalidierung.  

Tipps zur Fehlerbehebung

  • Andere Möglichkeiten, Probleme mit Datensätzen zu diagnostizieren
    Zusätzlich zu den beiden wichtigstenWerkzeuge,
  • Pressemitteilungist eine Log-Datei mit allenERDDAPDiagnosenachrichten.
  • DieTagesberichthat mehr Informationen als die Statusseite, einschließlich einer Liste von Datensätzen, die nicht geladen und die Ausnahmen (Fehler) sie generierten.
  • DieStatusseiteist eine schnelle Möglichkeit zu überprüfenERDDAP's Status von jedem Web-Browser. Es enthält eine Liste von Datensätzen, die nicht geladen wurden (jedoch nicht die damit verbundenen Ausnahmen) und AufgabeDurchlesen von Statistiken (den Fortschritt zeigenEDDGridKopieundEDDTableCopyDatensätze und alleEDDGridVonFilesoderEDDTableFromFilesDatensätze, dieCacheFromUrl (nicht kache GrößeGB) ) .
  • Wenn du feststeckst, siehst du unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.  

Sondervariablen

  • Die Länge, Breite, Höhe (oder Tiefe) , und Zeit (LLAT) Variable destinationNames sind besonders.
  • Im Allgemeinen:
    • LLAT-Variablen werden bekannt gemachtERDDAP™wenn die Achsgröße (fürEDDGridDatensätze) oder Datenvariablen (für EDDTable-Datensätze) destinationNameist "Länge", "Länge", "Halte", "Tiefe" oder"time".
    • Wir ermutigen Sie dringend, diese Standardnamen für diese Variablen zu verwenden, wenn möglich. Keiner von ihnen ist erforderlich. Wenn Sie diese speziellen Variablennamen nicht verwenden,ERDDAP™wird ihre Bedeutung nicht erkennen. Beispielsweise werden LLAT-Variablen speziell von Make A Graph behandelt ( datasetID .graph) : Wenn die X Axis-Variable "Länge" ist und die Y Axis-Variable "Länge" ist, erhalten Sie eine Karte (mit einer Standardprojektion, und mit einer Landmaske, politischen Grenzen, etc.) anstatt eines Diagramms.
    • ERDDAP™wird automatisch viele Metadaten zu LLAT-Variablen hinzufügen (zum Beispiel "ioos\_category", "Einheiten", und mehrere standardbezogene Attribute wie "\_CoordinateAxisType") .
    • ERDDAP™automatisch, on-the-fly, addieren viele globale Metadaten bezogen auf die LLAT-Werte des ausgewählten Datensubsets (zum Beispiel "geospatial\_lon\_min") .
    • Clients, die diese Metadatenstandards unterstützen, können die zusätzlichen Metadaten nutzen, um die Daten in Zeit und Raum zu positionieren.
    • Clients werden es leichter finden, Abfragen zu generieren, die LLAT-Variablen enthalten, weil die Variablennamen in allen relevanten Datensätzen gleich sind.
  • Für die Variable "Länge" und die Variable "Länge":
    • Verwenden Sie diedestinationName"Länge" und "Länge" nur, wennEinheitensind Grad\_östlich bzw. Grad\_north. Wenn Ihre Daten diesen Anforderungen nicht entsprechen, verwenden Sie verschiedene Variablennamen (z.B. x, y, lonRadians, latRadians) .
    • Wenn Sie Längen- und Breitendaten in verschiedenen Einheiten ausgedrückt haben und somit mit unterschiedlichendestinationNames, zum Beispiel, lonRadians und latRadians, Machen Sie einen Graph ( datasetID .graph) wird Grafiken machen (z.B. Zeitreihen) anstatt Karten.
  • Für die "Halte"-Variable und die "Tiefe"-Variable:
    • Verwenden Sie diedestinationName"Höhe" zur Identifizierung der Entfernung der Daten über dem Meeresspiegel (positive="up"-Werte) . Optional können Sie "Höhe" für Entfernungen unterhalb des Meeresspiegels verwenden, wenn die Werte unter dem Meer negativ sind (oder wenn Sie beispielsweise verwenden, (<att name="scale\_factor"typ="int">- 1</att> (#scale_factor) die Tiefenwerte in Höhenwerte umwandeln.
    • Verwenden Sie diedestinationName"tiefe" zur Identifizierung der Datenabstand unter dem Meeresspiegel (positive="down"-Werte) .
    • Ein Datensatz kann sowohl "Höhen" als auch "tiefen" Variablen nicht haben.
    • Für diese variablen Namen, dieEinheitenmuss "m", "Meter" oder "Meter" sein. Wenn die Einheiten anders sind (zum Beispiel, Fathoms) , Sie können verwenden (<att name="scale\_factor> einige Wert </att> (#scale_factor) und [<att name="units">meter</att> (#units) die Einheiten in Meter umwandeln.
    • Wenn Ihre Daten diesen Anforderungen nicht entsprechen, verwenden Sie eine anderedestinationName (z.B. oberhalbGround, Entfernung Zum Thema) .
    • Wenn Sie das vertikale CRS kennen, geben Sie es bitte in den Metadaten an, z.B. "EPSG:5829" (momentane Höhe über dem Meeresspiegel) , "EPSG:5831" (momentane Tiefe unter dem Meeresspiegel) , oder "EPSG:5703" (NAVD88 Höhe) .
  • Für"time"Variable:
    • Verwenden Sie diedestinationName "time"nur für Variablen, die das gesamte Datum+Zeit enthalten (oder Datum, wenn das alles vorhanden ist) . Wenn zum Beispiel separate Spalten für Datum und Uhrzeit vorhanden sind, verwenden Sie nicht den variablen Namen"time".
    • Vgl.Einheitenfür weitere Informationen über das Attribut Einheiten für Zeit und ZeitStamp-Variablen.
    • Die Zeitvariable und verwandtZeit Stamp Variablensind einzigartig, indem sie immer Datenwerte aus dem Zeitformat der Quelle konvertieren (Was auch immer es ist) in einen numerischen Wert (Sekunden seit 1970-0100:00Z) oder einen String-Wert (ISO 8601:2004 (E) Format) , je nach Situation.
    • Wenn ein Benutzer Zeitdaten anfordert, können sie ihn anfordern, indem er die Zeit als Zahlenwert angibt. (Sekunden seit 1970-0100:00Z) oder einen String-Wert (ISO 8601:2004 (E) Format) .
    • ERDDAP™hat ein DienstprogrammNumerisch umrechnen Zeit für/von einer Streichzeit.
    • Vgl.WieERDDAPAngebote mit Zeit.

Warum nur zwei grundlegende Datenstrukturen?

  • Da es für menschliche Kunden und Computer-Clients schwierig ist, mit einem komplexen Satz von möglichen Datensatzstrukturen umzugehen,ERDDAP™verwendet nur zwei grundlegende Datenstrukturen:
  • Sicherlich können nicht alle Daten in diesen Strukturen ausgedrückt werden, aber viel davon kann. Insbesondere Tabellen sind sehr flexible Datenstrukturen (den Erfolg von relationalen Datenbankprogrammen ansehen) .
  • Dies erleichtert die Datenabfrage.
  • Dadurch haben Datenantworten eine einfache Struktur, die es einfacher macht, die Daten in einer größeren Vielfalt von Standarddateitypen zu bedienen (die oft nur einfache Datenstrukturen unterstützen) . Das ist der Hauptgrund, warum wirERDDAP™Hier entlang.
  • Dies wiederum macht es für uns sehr einfach (oder jeder) um Client-Software zu schreiben, die mit allen arbeitetERDDAP™Datensätze.
  • Dies erleichtert den Vergleich von Daten aus verschiedenen Quellen.
  • Wir sind uns sehr bewusst, dass Sie, wenn Sie mit Daten in anderen Datenstrukturen arbeiten, zunächst denken können, dass dieser Ansatz vereinfacht oder unzureichend ist. Aber alle Datenstrukturen haben Abschlüsse. Keine ist perfekt. Selbst die do-it-all Strukturen haben ihre Nachteile: Die Zusammenarbeit mit ihnen ist komplex und die Dateien können nur mit speziellen Softwarebibliotheken geschrieben oder gelesen werden. Wenn Sie annehmenERDDAP's Ansatz genug, um mit ihm zu arbeiten, können Sie feststellen, dass es seine Vorteile hat (insbesondere die Unterstützung für mehrere Dateitypen, die die Datenantworten halten können) . DieERDDAP™Diashow (insbesondere dieDatenstrukturen Folie) spricht viel über diese Probleme.
  • Und selbst wenn dieser Ansatz für Sie seltsam klingt, die meistenERDDAP™Clients werden nie bemerken -- sie werden einfach sehen, dass alle Datensätze eine schöne einfache Struktur haben und sie werden dankbar sein, dass sie Daten aus einer Vielzahl von Quellen in einer Vielzahl von Dateiformaten zurückgegeben bekommen können.  

Abmessungen

  • Was ist, wenn die Rastervariablen im Quelldatensatz DON'T die gleichen Achsenvariablen teilen?
    InEDDGriddatasets, alle Datenvariablen MUST (Anteil) alle Achsgrößen. Wenn also ein Quelldatensatz einige Variablen mit einem Satz von Dimensionen und andere Variablen mit einem anderen Satz von Dimensionen aufweist, müssen Sie zwei Datensätze inERDDAP. Zum Beispiel könnten Sie einen machenERDDAP™Datensatz mit dem Titel "Einige Titel (an der Oberfläche) ", um Variablen zu halten, die nur verwenden\[Zeit\]\[Breite\]\[Länge\]Abmessungen und eine andereERDDAP™Datensatz mit dem Titel "Einige Titel (in Tiefen) "um die Variablen zu halten, die\[Zeit\]\[Höhe\]\[Breite\]\[Länge\]. Oder vielleicht können Sie die Datenquelle ändern, um eine Dimension mit einem einzigen Wert hinzuzufügen (z.B. Höhe =) die Variablen konsistent zu machen.

ERDDAP™nicht mit komplizierteren Datensätzen umgehen (zum Beispiel Modelle, die ein Netz von Dreiecken verwenden) Gut. Sie können diese Datensätze inERDDAP™indem zwei oder mehr Datensätze inERDDAP™ (so dass alle Datenvariablen in jedem neuen Datensatz den gleichen Satz von Achsenvariablen teilen) , aber das ist nicht, was die Nutzer wollen. Für einige Datensätze können Sie eine regelmäßige netzgebundene Version des Datensatzes und das Angebot berücksichtigen, dass zusätzlich zu den ursprünglichen Daten. Einige Client-Software kann nur mit einem regulären Netz umgehen, so dass Sie dadurch zusätzliche Clients erreichen.  

Projektierte Gridded Data

Einige Gitterdaten haben eine komplexe Struktur. Zum Beispiel Satellitenebene 2 ("Unterweg") Daten verwenden keine einfache Projektion. Modelle (und andere) oft mit gegitterten Daten auf verschiedenen nicht-zylindrischen Projektionen arbeiten (z.B. conic, polar stereographic, tripolar) oder in unstrukturierten Gittern (eine komplexere Datenstruktur) . Einige Endbenutzer wollen diese Daten, wie es ist, so gibt es keinen Verlust an Informationen. Für diese Kunden,ERDDAP™den Daten dienen kann, wie dies ist, nur wennERDDAP™Administrator bricht den ursprünglichen Datensatz in ein paar Datensätze, wobei jeder Teil Variablen enthält, die die gleichen Achsenvariablen teilen. Ja, das scheint den Beteiligten seltsam zu sein und es ist anders als die meistenOPeNDAPServer. Aber...ERDDAP™betont die Bereitstellung der Daten in vielen Formaten. Das ist möglich, weilERDDAP™verwendet/erfordert eine einheitlichere Datenstruktur. Obwohl es ein wenig abscheulich ist (d.h., anders als erwartet) ,ERDDAP™kann die projizierten Daten verbreiten.

\[Ja.ERDDAP™könnte lockerere Anforderungen an die Datenstruktur haben, aber die Anforderungen an die Ausgabeformate behalten. Aber das würde zu Verwirrung unter vielen Benutzern führen, insbesondere Neulinge, da viele scheinbar gültige Anfragen an Daten mit unterschiedlichen Strukturen ungültig wären, weil die Daten nicht in den Dateityp passen würden. Wir kommen immer wieder zum aktuellen Systemdesign.\]

Einige Endbenutzer wollen Daten in einer Lat lon zylindrischen Projektion wie Equirectangular / Plate Carrée oder Mercator) für einfache Handhabung in verschiedenen Situationen. Für diese Situationen ermutigen wir dieERDDAP™Administrator, um einige andere Software zu verwenden (NCO?Matlab? R? IDV? ...?) um die Daten auf eine geographische (Equirectangular Projektion / Platte Carrée) oder anderen zylindrischen Vorsprung und dienen dieser Form der Daten inERDDAP™als anderer Datensatz. Dies ist ähnlich, was Menschen tun, wenn sie Satelliten Level 2 Daten in Level 3 Daten konvertieren. Ein solches Werkzeug istNCOdie Erweiterungsoptionen für Regrid-Daten bietet.

GIS und Reprojektion von Daten

Da die GIS-Welt oft kartenorientiert ist, bieten GIS-Programme in der Regel Unterstützung für die Reprojektierung der Daten, d.h. die Aufzeichnung der Daten auf einer Karte mit einer anderen Projektion.

Derzeit,ERDDAP™hat keine Werkzeuge, um Daten neu zu projizieren. Stattdessen empfehlen wir Ihnen, ein externes Werkzeug zu verwenden, um eine Variante des Datensatzes zu erstellen, wo Daten aus seiner ursprünglichen Form auf ein rechteckiges neu projiziert wurden. (Länge der Breite) Array geeignet fürERDDAP.

Unserer Meinung nach die CF/DAPDie Welt ist etwas anders als die GIS-Welt und arbeitet auf etwas niedrigerem Niveau.ERDDAP™reflektiert das. Im Allgemeinen,ERDDAP™ist in erster Linie mit Daten zu arbeiten (nicht Karten) und will sich nicht ändern (z.B. Reprojekt) diese Daten. FürERDDAP™, Gitterdaten werden oft/normal/vorzugsweise mit Lat-lon-Werten und einem zylindrischen Vorsprung und nicht einigen x-y-Werten der Projektion zugeordnet. In jedem FallERDDAP™nichts mit der Projektion der Daten zu tun; es leitet die Daten einfach durch, wie mit seiner aktuellen Projektion, über die Theorie, dass eine Reprojektion eine signifikante Änderung der Daten ist undERDDAP™will nicht mit signifikanten Veränderungen involviert sein. Auch spätere Nutzer könnten die Daten naiv wieder neu projizieren, was nicht so gut wäre wie nur eine Reprojektion. (Also, wenn dieERDDAP™Administrator will die Daten in einer anderen Projektion anbieten, fein; nur die Daten offline neu projizieren und anbieten, dass als ein anderer Datensatz inERDDAP. Viele satellitengestützte Datensätze werden als das angeboten, was die NASA Level 2 nennt (Schweine) und als Ebene 3 (Ausgewählte Projektion) Versionen.) WannERDDAP™Karten machen (direkt oder viaWMSoder KML) ,ERDDAP™derzeit nur bietet, Karten mit der Equirectangular / Platte Carrée Projektion zu machen, die glücklicherweise von den meisten Mapping-Programmen akzeptiert wird.

Wir ermutigenERDDAP™Administratoren verwenden einige andere Software (NCO?Matlab? R? IDV? ...?) um die Daten auf eine geographische (Equirectangular Projektion / Platte Carrée) oder anderen zylindrischen Vorsprung und dienen dieser Form der Daten inERDDAP™als anderer Datensatz. Dies ist ähnlich, was Menschen tun, wenn sie Satelliten Level 2 Daten in Level 3 Daten konvertieren. Ein solches Werkzeug istNCOdie Erweiterungsoptionen für Regrid-Daten bietet.

Wir hoffen, dassERDDAP™werden in Zukunft Karten mit anderen Projektionen anbieten können. Wir hoffen auch, in Zukunft bessere Verbindungen zur GIS-Welt zu haben (andere als der StromWMSService) . Es ist schrecklich, dass in dieser "modernen" Welt die Verbindungen zwischen den CF/DAPDie Welt und die GIS-Welt sind immer noch so schwach. Beides ist auf der To Do-Liste. (Wenn Sie helfen möchten, vor allem mit der VerbindungERDDAP™auf MapServer, bitte E-Mail Chris. John bei noaa.gov.)

Datentypen

ERDDAP™unterstützt die folgenden Datentypen (die Namen sind empfindlich;'u'prefix steht für "unsigned"; die Anzahl der Namen in anderen Systemen ist die Anzahl der Bits) :

Byte

  • Byte ganze Werte mit einem Bereich von -128 bis 127 signiert. In anderen Systemen wird dies manchmal int8 genannt. Das nennt man "tinyint" von SQL und Cassandra. ERDDAP™konvertiertBorolenaus einigen Quellen (z.B. SQL und Cassandra) in Bytes inERDDAP™mit einem Wert von 0=false, 1=true und 127=missing\_value.

Ubyte

  • Ubyte unsignierte ganze Werte mit einem Bereich von 0 bis 255 aufweist. In anderen Systemen wird dies manchmal uint8 genannt.

kurz

  • kurz hat ganze Werte mit einem Bereich von -32768 bis 32767 signiert. In anderen Systemen wird dies manchmal int16 genannt. Das nennt man "smallint" von SQL und Cassandra.

Ussur

  • Ussur unsignierte ganze Werte mit einem Bereich von 0 bis 65535 aufweist. In anderen Systemen wird dies manchmal uint16 genannt.

in

  • in hat ganze Werte mit einem Bereich von -2147483648 bis 2147483647 signiert. In anderen Systemen wird dies manchmal int32 genannt. Dies nennt man "integer|Numerisch (?) " von SQL und "int" von Cassandra.

U.S.

  • U.S. unsignierte ganze Werte mit einem Bereich von 0 bis 4294967295 aufweist. In anderen Systemen wird dies manchmal uint32 genannt.

lang

  • lang hat ganze Werte mit einem Bereich von -9223372036854775808 bis 9223372036854775807 unterschrieben. In anderen Systemen wird dies manchmal int64 genannt. Das nennt man "bigint|Numerisch (?) " von SQL und "bigint" von Cassandra. Weil viele Dateitypen keine langen Daten unterstützen, wird ihre Verwendung entmutigt. Wenn möglich, verwenden Sie doppelt statt (siehe unten) .

Ulong

  • Ulong unsignierte ganze Werte mit einem Bereich von 0 bis 18446744073709551615 In anderen Systemen wird dies manchmal uint64 genannt. Da viele Dateitypen ulong-Daten nicht unterstützen, wird ihre Verwendung entmutigt. Wenn möglich, verwenden Sie doppelt statt (siehe unten) .

Flossen

  • Flossen ist ein IEEE 754 Schwimmer mit einer Reichweite von etwa +/- 3.402823466e+38. In anderen Systemen wird dies manchmal Float32 genannt. Dies nennt man "real|Flossen (?) |Dezimal (?) |Numerisch (?) " von SQL und "float" von Cassandra. Der Sonderwert NaN bedeutet Nicht-a-Number. ERDDAP™konvertiert positive und negative Infinity-Werte in NaN.

Doppelzimmer

  • Doppelzimmer ist ein IEEE 754 Doppel mit einer Reichweite von ca. +/- 1.7976931348623157E+308. In anderen Systemen wird dies manchmal Float64 genannt. Dies nennt man "Doppelpräzision|Flossen (?) |Dezimal (?) |Numerisch (?) " von SQL und "double" von Cassandra. Der Sonderwert NaN bedeutet Nicht-a-Number. ERDDAP™konvertiert positive und negative Infinity-Werte in NaN.

!

  • ! ist ein Single, 2-Byte (16-Bit) Unicode UCS-2 Zeichenvon\u0000 (#0) durch\uffff (#65535) . \uffff's Definition ist nicht-a-Character, analog zu einem doppelten Wert von NaN. Die Verwendung von char ist entmutigt, weil viele Dateitypen entweder keine Zeichen unterstützen oder nur 1-Byte Zeichen unterstützen (siehe unten) . Betrachten Sie stattdessen String. Benutzer können Char-Variablen verwenden, um Grafiken zu erstellen.ERDDAP™die Zeichen in ihre Unicode-Code-Punkt-Nummer umwandeln, die als numerische Daten verwendet werden können.

Streichung

  • Streichung eine Sequenz von 0 oder mehr, 2-Byte (16-Bit) Unicode UCS-2 Zeichen. ERDDAP™verwendet/interpretiert eine 0-Länge-String als fehlender Wert.ERDDAP™unterstützt keine echte Null-String. Die theoretische maximale Stringlänge beträgt 2147483647 Zeichen, aber es gibt wahrscheinlich verschiedene Probleme an verschiedenen Stellen auch bei etwas kürzeren Strings. VerwendungERDDAP's String for SQL's Charakter, varchar, Charakter variierend, binär, varbinary, Intervall, Array, Multiset, xml, und jeder andere Datenbank-Datentyp, der nicht sauber mit jedem anderen passtERDDAP™Datentyp. VerwendungERDDAP's String for Cassandras "Text" und jeder andere Cassandra-Datentyp, der nicht sauber mit jedem anderen passtERDDAP™Datentyp.  

VorERDDAP™v2.10,ERDDAP™nicht unterstützte unsignierte ganze Typen intern und bot begrenzte Unterstützung in seinen Datenlesern und Autoren.

Datentyp Einschränkungen

Sie können denken,ERDDAP™als System mit virtuellen Datensätzen, das durch das Lesen von Daten aus der Quelle eines Datensatzes in ein internes Datenmodell und Schreiben von Daten an verschiedene Dienste (z.(OPeN)DAP,WMS) und Dateitypen in Reaktion auf Benutzeranfragen.

  • Jeder Eingabeleser unterstützt eine Teilmenge der Datentypen, dieERDDAP™unterstützt. So lesen Sie Daten inERDDAPDie internen Datenstrukturen sind kein Problem.
  • Jeder Ausgabeschreiber unterstützt auch eine Teilmenge von Datentypen. Das ist ein Problem, weilERDDAPmuss beispielsweise lange Daten in Dateitypen drücken, die keine langen Daten unterstützen.  

Im Folgenden sind Erläuterungen zu den Einschränkungen (oder keine) von verschiedenen Output-Autoren und wieERDDAP™behandelt die Probleme. Solche Komplikationen sind ein inhärenter BestandteilERDDAPDas Ziel, verschiedene Systeme interoperabel zu machen.

ASCII

  • ASCII (.csv,.tsv, usw.) Textdateien -
    • Alle numerischen Daten werden über ihre String-Darstellung geschrieben (mit fehlenden Datenwerten, die als 0-Länge-Strings angezeigt werden) .

    • ObwohlERDDAP™schreibt lange und ulong Werte korrekt an ASCII Textdateien, viele Leser (z.B. Tabellenkalkulationsprogramme) kann nicht richtig mit langen und ulong Werten umgehen und sie stattdessen in doppelte Werte umwandeln (mit Präzisionsverlust in einigen Fällen) .

    • Char- und String-Daten werden über JSON Strings geschrieben, die alle Unicode-Zeichen verarbeiten (insbesondere die "ungewöhnlichen" Zeichen jenseits der ASCII #127, z.B. der Euro-Zeichen erscheint als "\u20ac") .

JSON

  • JSON (.json,.jsonlCSV, usw.) Textdateien -
    • Alle numerischen Daten werden über ihre String-Darstellung geschrieben.
    • Char- und String-Daten werden als JSON Strings geschrieben, die alle Unicode-Zeichen verarbeiten (insbesondere die "ungewöhnlichen" Zeichen jenseits der ASCII #127, z.B. der Euro-Zeichen erscheint als "\u20ac") .
    • Fehlende Werte für alle numerischen Datentypen erscheinen als Null.  

.nc3 Dateien

  • .nc3 Dateien unterstützen keine unsignierten Ganzzahl-Datentypen. Vor CF v1.9 unterstützte CF nicht unbezeichnete Ganzzahltypen. Um damit zu umgehen,ERDDAP™2.10+ folgt dem NUG-Standard und fügt immer ein "\_Unsigned"-Attribut mit einem Wert von "true" oder "false" hinzu, um anzuzeigen, ob die Daten aus einer nicht signierten oder signierten Variablen stammen. Alle Ganzzahl-Attribute werden als signierte Attribute geschrieben (z.B. Byte) mit signierten Werten (z.B. ein Ubyteactual\_rangeAttribut mit den Werten 0 bis 255 erscheint als Byte-Attribut mit den Werten 0 bis -1 (die Inverse des Komplementwerts der beiden Out-of-Range-Werte). Es gibt keine einfache Möglichkeit zu wissen, welche (signierten) Ganzzahl-Attribute als unbesignierte Attribute gelesen werden sollen.ERDDAP™unterstützt das Attribut "\_Unsigned", wenn es liest.nc3 Dateien.
  • .nc3 Dateien unterstützen nicht die langen oder ulong Datentypen.ERDDAP™behandelt dies, indem sie vorübergehend in Doppelvariablen umwandeln. Doppel können alle Werte bis zu +/- 9,007,199,254,740,992 genau darstellen 2^53. Das ist eine unvollkommene Lösung.Unidataweigert sich, ein kleineres Upgrade zu machen.nc3 dies und die damit verbundenen Probleme zu behandeln, indem.ncANHANG (eine große Veränderung) als Lösung.
  • Die CF-Spezifikation (Vor v1.9) sagte er unterstützt einen Datentyp, aber es ist unklar, ob char nur als Bausteine von Zeichenarrays gedacht ist, die effektiv Strings sind. Fragen an ihre Mailingliste ergaben nur verwirrende Antworten. Wegen dieser Komplikationen ist es am besten, Char Variablen in zu vermeidenERDDAP™und verwenden String-Variablen wann immer möglich.
  • Traditionell,.nc3 Dateien nur unterstützt Strings mit ASCII-codiert (7-Bit, #0 - #127) Zeichen. NUG (undERDDAP) sich ausdehnen (~2017 ~) mit dem Attribut "\_Encoding" mit einem Wert von "ISO-8859-1" (eine Erweiterung von ASCII, die alle 256 Werte jedes 8-Bit-Zeichens definiert) oder "UTF-8", um anzuzeigen, wie die String-Daten kodiert werden. Andere Kodierungen können legal sein, werden aber entmutigt.  

.nc4 Dateien

  • .nc4 Dateien unterstützen alleERDDAPDatentypen.

NCCSV Dateien

NCCSV 1.0-Dateien unterstützen keine unsignierten ganzzahligen Datentypen. NCCSV 1.1+ Dateienalle unsignierten Ganzzahl-Datentypen unterstützen.  

DAP

  • (OPeN)DAP (.das, .dds, .asc ASCII Dateien und .dods binäre Dateien) - Ja.
    • (OPeN)DAPbehandelt kurze, ushort, int, uint, Float und doppelte Werte richtig.
    • (OPeN)DAPhat einen "byte" Datentyp, den er als unbezeichnet definiert, während historisch THREDDS undERDDAP™haben "byte" wie unterschrieben behandelt(OPeN)DAPDienstleistungen. Um das besser zu behandeln,ERDDAP™2.10+ folgt dem NUG-Standard und fügt immer ein "\_Unsigned"-Attribut mit einem Wert von "true" oder "false" hinzu, um anzuzeigen, ob die Daten das sind, wasERDDAP™telefonieren perte oder ubyte. Alle Byte- und Ubyte-Attribute werden als "byte"-Attribute mit signierten Werten geschrieben (z.B. ein Ubyteactual\_rangeAttribut mit den Werten 0 bis 255 erscheint als Byte-Attribut mit den Werten 0 bis -1 (die Inverse des Komplementwerts der beiden Out-of-Range-Werte). Es gibt keinen einfachen Weg zu wissen, welche "byte" Attribute als Ubyte-Attribute gelesen werden sollen.
    • (OPeN)DAPunterstützt nicht unterzeichnete oder unbezeichnete Sehnen.ERDDAP™behandelt dies, indem sie vorübergehend zu Doppelvariablen und Attributen umwandeln. Doppel können alle Werte bis 9,007,199,254,740,992 genau darstellen 2^53. Das ist eine unvollkommene Lösung.OPeNDAP (die Organisation) weigert sich, ein kleineres Upgrade zu machenDAP2.0, um sich mit diesem und verwandten Problemen zu befassen,DAPANHANG (eine große Veränderung) als Lösung.
    • Weil(OPeN)DAPhat keinen separaten Zeichentyp und unterstützt technisch nur 1-Byte ASCII Zeichen (#0 - #127) in Strings, char-Datenvariablen erscheinen als 1-Charakter-lange Strings in(OPeN)DAP.das, .ddds und .dods Antworten.
    • Technisch gesehen,(OPeN)DAPSpezifikation unterstützt nur Strings mit ASCII-codierten Zeichen (#0 - #127) . NUG (undERDDAP) sich ausdehnen (~2017 ~) mit dem Attribut "\_Encoding" mit einem Wert von "ISO-8859-1" (eine Erweiterung von ASCII, die alle 256 Werte jedes 8-Bit-Zeichens definiert) oder "UTF-8", um anzuzeigen, wie die String-Daten kodiert werden. Andere Kodierungen können legal sein, werden aber entmutigt.  

Datentyp Kommentare

  • Aufgrund der schlechten Unterstützung für lange, ulong und Char-Daten in vielen Dateitypen, entmutigen wir die Verwendung dieser Datentypen inERDDAP. Wenn möglich, verwenden Sie doppelt statt lang und ulong, und verwenden Sie String anstelle von char.  
  • Metadaten - Weil(OPeN)DAP's .das und .dds Antworten unterstützen nicht lange oder ulong Attribute oder Datentypen (und stattdessen zeigen sie als Doppel) , Sie können stattdessen verwendenERDDAP's tabellarische Darstellung von Metadaten, wie in derhttp.../erdap/ Informationen / datasetID .html Webseite (zum Beispiel, https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (die Sie auch in anderen Dateitypen erhalten können, z.B. .csv,.htmlTable,.itx,.json,.jsonlCSV1,.jsonlCSV,.jsonlKVP,.mat,.nc,.nccsv,.tsv,.xhtml) oder.nccsvAntwort von Metadaten (zum Beispiel, https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata wenn.nccsvMetadaten sind nur für tabellarische Datensätze verfügbar) , die beide alle Datentypen unterstützen (insbesondere, lang, ulong und char) .  

Mediendateien

Nicht alle Daten sind Arrays von Zahlen oder Text. Einige Datensätze bestehen aus oder beinhalten Mediendateien, wie Bild-, Audio- und Videodateien.ERDDAP™hat einige Besonderheiten, um es Benutzern zu erleichtern, Zugang zu Mediendateien zu erhalten. Es ist ein zweistufiger Prozess:  

  1. Machen Sie jede Datei über eine eigene URL zugänglich, über ein System, das Byte Range Requests unterstützt. Der einfachste Weg, dies zu tun, ist, die Dateien in einem Verzeichnis, dasERDDAP™hat Zugang zu. (Wenn sie in einem Container wie ein.zipDatei, entpacken Sie sie, obwohl Sie die.zipauch für Benutzer.) Dann machen Sie einenEDDTableFromFileNamesDatensatz, um diese Dateien überERDDAP™, insbesondere überERDDAP'"files"System.

Alle Dateien, die über EDDTableFromFileNames undERDDAP'"files"SystemunterstützungByte-Range-Anfragen. Normalerweise, wenn ein Client (z.B. ein Browser) stellt eine Anfrage an eine URL, es bekommt die gesamte Datei als Antwort. Aber mit einer Byte-Range-Anfrage gibt die Anfrage eine Reihe von Bytes aus der Datei an, und der Server gibt nur diese Bytes zurück. Dies ist hier relevant, weil die Audio- und Videoplayer in Browsern nur funktionieren, wenn die Datei über Byte-Range-Anfragen aufgerufen werden kann.

Optional: Wenn Sie mehr als einen Datensatz mit zugehörigen Mediendateien haben, können Sie nur einen EDDTableFromFileNames erstellen, der für jede Gruppe von Dateien einen Unterordner hat. Der Vorteil ist, dass, wenn Sie neue Mediendateien für einen neuen Datensatz hinzufügen möchten, alles, was Sie tun müssen, einen neuen Ordner erstellen und die Dateien in diesen Ordner stecken. Der Ordner und Dateien werden automatisch zum EDDTableFromFileNames-Datensatz hinzugefügt.

  1. Optional: Wenn Sie einen Datensatz haben, der Referenzen zu Mediendateien enthält, fügen Sie ihn hinzuERDDAP. Zum Beispiel können Sie eine .csv-Datei mit einer Zeile für jedes Mal, wenn jemand einen Wal und eine Spalte sah, die den Namen einer Bilddatei, die mit diesem Sehen zusammenhängt, enthält. Wenn der Name der Bilddatei nur der Dateiname ist, z.B. Img20141024T192403Z, keine vollständige URL, dann müssen Sie hinzufügenDateiAccessBase Url und/oder DateiAccessSuffixAttribute zu den Metadaten dafürdataVariabledie die baseURL und Suffix für diese Dateinamen angibt. Wenn Sie die Dateien über EDDTableFromFileNames zugänglich gemacht haben, wird die URL im Formular BasisUrl /erddap/files/ datasetID / Zum Beispiel
        <att name="fileAccessBaseUrl">*someBaseURL*</a>  
<att name="fileAccessSuffix">.png</a>

Wenn es.zipoder eine andere Containerdatei mit allen Mediendateien, die mit einer Datenvariable zusammenhängen, empfehlen wir Ihnen, diese Datei auch für Benutzer zugänglich zu machen. (Schritt 1 oben) und dann mit einemDateiAccessArchive UrlAttribut.

\[BeginnenERDDAP™V1.82\]Wenn Sie den ersten Schritt oben tun (oder beide Schritte) , dann, wenn ein Benutzer dieERDDAP™ "files"System für diesen Datensatz (oder fragt, ob eine Teilmenge des Datensatzes über eine.htmlTableBitte, wenn Sie den zweiten Schritt getan haben) ,ERDDAP™wird links vom Dateinamen ein '?'-Symbol zeigen. Wenn der Benutzer über dieses Symbol schwebt, werden sie einen Popup sehen, der das Bild oder einen Audioplayer oder einen Videoplayer zeigt. Browser unterstützen nur eine begrenzte Anzahl von Arten von

  • Bild (in der Regel .gif, .jpg und .png) ,
  • Audio (in der Regel .mp3, .ogg und .wav) , und
  • Videodateien (in der Regel .mp4, .ogv und . Weber) .

Der Support variiert mit verschiedenen Versionen verschiedener Browser auf verschiedenen Betriebssystemen. Wenn Sie also eine Wahl haben, welche Dateityp zu bieten ist, ist es sinnvoll, diese Typen anzubieten.

Oder, wenn ein Benutzer auf den Dateinamen auf einenERDDAP™Web-Seite, ihr Browser zeigt die Bild-, Audio- oder Videodatei als separate Webseite. Dies ist meist nützlich, um ein sehr großes Bild oder Video skaliert auf Vollbild zu sehen, anstatt in einem Popup.

Arbeiten mit AWS S3 Dateien

Amazon Web Service (AWS) ist ein VerkäuferCloud ComputingDienstleistungen.S3ist ein von AWS angebotenes Objektspeichersystem. Anstelle des hierarchischen Systems von Verzeichnissen und Dateien eines traditionellen Dateisystems (wie eine Festplatte in Ihrem PC) , S3 bietet nur "Buckets", die "Objekte" halten (wir rufen sie an"files") .

Für ASCII-Dateien (z.B., .csv) ,ERDDAP™kann mit den Dateien in den Eimern direkt arbeiten. Das einzige, was Sie tun müssen, ist, die<fileDir> für den Datensatz mit einem bestimmten Format für den AWS-Bucket, z. https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Sie sollten nicht verwenden<CacheFromUrl>. Siehe unten für Details.

Aber für binäre Dateien (z.B.,.nc, .grib, .bufr.hdfDateien) , Sie müssen die<ccheFromUrl> System unten beschrieben.ERDDAP, netcdf-java (dieERDDAP™verwendet, um Daten aus diesen Dateien zu lesen) , und andere wissenschaftliche Datensoftware entwickelt, um mit Dateien in einem traditionellen Dateisystem zu arbeiten, das bietetBlockhöheZugriff auf Dateien (die es erlaubt, Stücke einer Datei zu lesen) , aber S3 nur AngeboteDateiebene (Gegenstand) Zugriff auf Dateien (die nur das Lesen der gesamten Datei erlaubt) . AWS bietet eine Alternative zu S3,Elastic Block Store (EBS) ), die den Zugriff auf den Blockpegel auf Dateien unterstützt, aber es ist teurer als S3, so wird es selten für die Massenspeicherung großer Mengen von Datendateien verwendet. (Also, wenn Leute sagen, Daten in der Cloud zu speichern (S3) ist billig, es ist in der Regel ein Äpfel zu Orangen Vergleich.)

S3 Schnallen

Der Inhalt eines Eimers. Schlüssel. Objekte.
Technisch sind S3 Eimer nicht in einer hierarchischen Dateistruktur wie ein Dateisystem auf einem Computer organisiert. Stattdessen enthalten Eimer nur "Objekte" (Dateien) , von denen jeder einen "Schlüssel" hat (Name) . Ein Beispiel für einen Schlüssel darin, dass noaaa-goes17 Bucket ist

ABI-L1b-RadC/2019/235/22/OR\\_ABI-L1b-RadC-M6C01\\_G17\\_s20192352201196\\_e20192352203569\\_c20192352204013.nc

Das entsprechende URl für dieses Objekt ist

https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/2019/235/22/OR\_ABI-L1b-RadC-M6C01\_G17\_s20192352201196\_e20192352203569\_c20192352204013.nc

AWS unterstützt eine kleine Variation, wie diese URL aufgebaut ist, aberERDDAP™erfordert dieses ein bestimmtes Format:    https://bucketName.s3.region.amazonaws.com/key
Es ist üblich, wie mit diesem Beispiel, Schlüsselnamen wie einen hierarchischen Pfad plus einen Dateinamen aussehen zu lassen, aber technisch nicht. Da es üblich und nützlich ist,ERDDAP™behandelt Schlüssel mit /'s, als ob sie ein hierarchischer Pfad plus Dateiname sind, und diese Dokumentation wird sich auf sie als solche beziehen. Wenn die Schlüssel eines Eimers nicht verwenden /'s (z.B. ein Schlüssel wie ABI-Lib.2018.052.22.OR\_ABI-L1b-RadM2-M3C10\_G16\_s20180522247575), dannERDDAP™wird nur den ganzen Schlüssel als langen Dateinamen behandeln.

Private vs Öffentliche Buckets -- Der Administrator für den S3 Eimer kann den Eimer und seinen Inhalt öffentlich oder privat machen. Falls öffentlich, kann jede Datei im Bucket von jedem heruntergeladen werden, der die URL für die Datei verwendet. Amazon hat eineOffene DatenProgramm, das öffentliche Datensätze beherbergt (einschließlich Daten vonNOAA, NASA und USGS) kostenlos und lädt nicht für jeden, die Dateien von diesen Eimern herunterladen. Wenn ein Eimer privat ist, sind Dateien im Eimer nur für autorisierte Benutzer zugänglich und AWS berechnet eine Gebühr (normalerweise vom Besitzer des Eimers bezahlt) zum Herunterladen von Dateien auf einen nicht-AWS S3 Computer.ERDDAP™kann mit Daten in öffentlichen und privaten Eimern arbeiten.

AWS Credentials

Um es so zu machen,ERDDAP™kann den Inhalt von privaten Eimern lesen, Sie benötigen AWS Anmeldeinformationen und Sie müssen eine Anmeldedatei an der Standard Stelle speichern, soERDDAP™die Informationen finden. Siehe das AWS SDK fürJava2.x Dokumentation:Standard-Anmeldeinformationen festlegen. (Die Option, die Werte als zu speichernJavaKommandozeilenparameter in\[Tomcat\]/bin/setenv.sh kann eine gute Option sein.)

AWS / Dateien/

  • /Dateien/ System -- DieERDDAP™ /Dateien/ Systemermöglicht es Benutzern, die Quelldateien für einen Datensatz herunterzuladen. Wir empfehlen Ihnen, dies für alle Datensätze mit Quelldateien zu aktivieren, da viele Benutzer die Original-Quelldateien herunterladen möchten.
    • Wenn die Dateien in einem privaten S3-Bucket sind, wird die Anfrage des Benutzers, eine Datei herunterzuladen, vonERDDAP™, die die Daten aus der Datei liest und dann an den Benutzer übermittelt, wodurch die Last auf IhremERDDAP™, mit eingehender und ausgehender Bandbreite, und machen Sie (dieERDDAP™Administrator) die Datenausgangsgebühr an AWS bezahlen.
    • Wenn die Dateien in einem öffentlichen S3-Bucket sind, wird die Anfrage des Benutzers, eine Datei herunterzuladen, auf die AWS S3 URL für diese Datei umgeleitet, so dass die Daten nicht durchlaufen werdenERDDAP™, so dass die BelastungERDDAP. Und wenn die Dateien in einem Amazon Open Data sind (kostenlos) öffentliche Eimer, dann Sie (dieERDDAP™Administrator) muss keine Daten-Egressgebühr an AWS zahlen. So gibt es einen großen Vorteil, Daten von der Öffentlichkeit zu bedienen (nicht privat) S3 Eimer und ein großer Vorteil, um Daten von Amazon Open Data zu bedienen (kostenlos) Eimer.

ERDDAP™und AWS S3 Buckets

ERDDAP™und AWS S3 Buckets
Glücklicherweise, nach viel Mühe,ERDDAP™hat eine Reihe von Funktionen, die es ermöglichen, mit den inhärenten Problemen der Arbeit mit S3 Block-Level-Zugang zu Dateien auf eine vernünftige Weise effizient zu behandeln:

  • \[Disclaimer: Die Arbeit mit AWS S3 Eimern ist viel extra Arbeit. AWS ist ein riesiges Ökosystem von Dienstleistungen und Funktionen. Es gibt viel zu lernen. Es braucht Zeit und Mühe, aber es ist machbar. Sei geduldig und du kriegst Sachen. Hilfe suchen (AWS Dokumentation, Webseiten wieStack Overflow, und ERDDAP™Support-Optionen) wenn/wenn du feststeckst.\]
     
  • Es kann schwer sein, sogar die Verzeichnisstruktur und Dateinamen der Dateien in einem S3 Bucket zu finden.ERDDAP™hat eine Lösung für dieses Problem: EDDTableFromFileNames hat ein besonderes\*\*Mehr InformationenOption, mit der Sie einen EDDTableFromFileNames-Datensatz erstellen können, mit dem Benutzer den Inhalt eines S3-Buckets durchsuchen können (und Dateien herunterladen) über den Datensatz"files"Option. Es gibt eineBeispiel dafür unten.  
  • ERDDAP™kann Daten auslesenextern komprimierte Datendateien, so ist es gut, wenn die Dateien auf S3 gespeichert werden, wie.gz,.gzip,.bz2, .Z oder andere Arten von extern komprimierten Datendateien, die dramatisch (2 - 20X) die Kosten für die Dateispeicherung senken. Es gibt oft keine Zeitstrafe für die Verwendung von extern komprimierten Dateien, da die Zeit gespeichert, indem eine kleinere Datei von S3 aufERDDAPdie fürERDDAP™die Datei zu dekomprimieren. Um diese Funktion zu nutzen, müssen Sie nur sicherstellen, dass der Datensatz<DateiNameRegex> ermöglicht den komprimierten Dateityp (z.B. durch Hinzufügen (|.gz) bis zum Ende des Regex) .  
  • Für den häufigsten Fall, wo Sie eineERDDAP™installiert auf Ihrem PC für Test/Entwicklung und wo der Datensatz binäre Datendateien hat, die als Objekte in einem S3-Bucket gespeichert werden, ein Ansatz, um den Datensatz inERDDAP™ist:
    1. Erstellen Sie ein Verzeichnis auf Ihrem PC, um ein paar Testdateien zu halten.

    2. Laden Sie zwei Datendateien von der Quelle in das gerade erstellte Verzeichnis herunter.

    3. VerwendungGenerateDatasetsXmlum den Haufen vondatasets.xmlfür den Datensatz basierend auf den beiden lokalen Datendateien.

    4. Überprüfen Sie, ob der Datensatz beliebig funktioniert mitDasDdsund/oder Ihr LokalERDDAP.

      Die folgenden Schritte machen eine Kopie dieses Datensatzes (die Daten vom S3-Bucket erhalten) in der ÖffentlichkeitERDDAP.

    5. Kopieren Sie das Stückdatasets.xmlfür den Datensatzdatasets.xmlfür die ÖffentlichkeitERDDAP™die den Daten dienen.

    6. Erstellen Sie ein Verzeichnis in der ÖffentlichkeitERDDAP's lokale Festplatte, um einen Cache von temporären Dateien zu halten. Das Verzeichnis wird nicht viel Speicherplatz verwenden (siehe cacheSizeGB unten) .

    7. Änderung des Wertes des Datensatzes<fileDir> tag so dass es auf das gerade erstellte Verzeichnis verweist (obwohl das Verzeichnis leer ist) .

    8. EineCacheFromUrltag, der den Namen des Datensatzes und optionales Präfix angibt (i.e., Verzeichnis) in derS3 URL Formatieren Sie dasERDDAP™Anforderungen.

    9. Fügen Sie ein [<CacheSizeGB> (#cachefromurl) tag to the dataset's xml (z.B. 10 ist ein guter Wert für die meisten Datensätze) zu sagenERDDAP™die Größe des lokalen Caches zu begrenzen (d.h., versuchen Sie nicht, alle Remote-Dateien) .

    10. Sehen Sie, ob das in der Öffentlichkeit funktioniertERDDAP. Beachten Sie, dass das erste MalERDDAP™lädt den Datensatz, es dauert eine lange Zeit zu laden, weilERDDAP™muss alle Datendateien herunterladen und lesen.

Wenn der Datensatz eine riesige Sammlung von riesigen Datendateien ist, wird dies sehr lange dauern und unpraktisch sein. In einigen Fällen für netzgebundene Datendateien,ERDDAP™kann die benötigten Informationen extrahieren (z.B. der Zeitpunkt für die Daten in einer netzgebundenen Datendatei) aus dem Dateinamen und vermeiden Sie dieses Problem. Vgl.Aggregat über Dateinamen.

  1. Optional (aber vor allem für EDDTableFromFiles-Datensätze) , Sie können einnThreadstag zum Datensatz zu sagenERDDAPmehr als 1 Thread zu verwenden, wenn Sie auf die Anforderung eines Benutzers für Daten reagieren. Dies minimiert die Auswirkungen der Verzögerung, die auftritt, wennERDDAP™liest Datendateien von (Fernbedienung) AWS S3 Eimer in den lokalen Cache und (vielleicht) sie zu dekomprimieren.

AWS S3 Open Data

Als Teil desNOAA'Großes Datenprogramm,NOAAhat Partnerschaften mit fünf Organisationen, darunter AWS, "um die potenziellen Vorteile der Speicherung von Kopien von Schlüsselbeobachtungen und Modellausgängen in der Cloud zu untersuchen, um das Computing direkt auf die Daten zu ermöglichen, ohne dass eine weitere Distribution erforderlich ist". AWS enthält die Datensätze, die vonNOAAim Rahmen seines Programms den öffentlichen Zugang zu einer großen Sammlung vonDaten auf AWS S3 öffnenvon jedem Computer, ob es sich um eine Amazon-Compute-Instanz handelt (einen gemieteten Computer) auf dem AWS-Netzwerk oder Ihrem eigenen PC auf jedem Netzwerk. Das folgende Beispiel geht davon aus, dass Sie mit einem öffentlich zugänglichen Datensatz arbeiten.

Zugriff auf Dateien in einem AWS S3 Bucket

Für einen privaten S3-Datenbecher muss der Besitzer des Eimers Ihnen den Zugang zum Eimer geben. (Siehe die AWS-Dokumentation.)

In allen Fällen benötigen Sie ein AWS-Konto, da das AWS SDK fürJava (dieERDDAP™verwendet, um Informationen über den Inhalt eines Eimers abzurufen) erfordert AWS-Account-Anmeldeinformationen. (Mehr dazu unten)

ERDDAP™kann nur auf AWS S3 Eimer zugreifen, wenn Sie die [<CacheFromUrl> (#cachefromurl) (oder<DateiDir>) in einem bestimmten Format: https://bucketName.s3.aws-region.amazonaws.com/prefix/
wenn

  • Der bucketName ist die kurze Form des Bucketnamens, z.B. noaa-goes17 .
  • Die aws-Region, z.B. us-east-1, stammt aus der Spalte "Region" in einem der Tabellen derAWS Service Endpointswo sich der Eimer tatsächlich befindet.
  • Das Präfix ist optional. Wenn vorhanden, muss es enden mit'/'.

Zum Beispiel https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Dieses URL-Format ist eine der AWS S3 Empfehlungen: sieheZugang zu einem Eimerunddiese Beschreibung von Präfixen.ERDDAP™erfordert, dass Sie die Bucket-URL und das optionale Präfix in eine URL kombinieren, um die<ccheFromUrl> (oder<DateiDir>), wo sich die Dateien befinden.

Test Public AWS S3 Buckets

Für öffentliche Eimer können und sollten Sie die Eimer-URL des AWS S3 Verzeichnisses in Ihrem Browser testen, z.B. https://noaa-goes17.s3.us-east-1.amazonaws.com Wenn die Bucket-URL korrekt ist und fürERDDAP, es wird ein XML-Dokument zurückgeben, das (Teil) Auflistung der Inhalte dieses Eimers. Leider die volle URL (d.h., Bucket URL plus Präfix) dassERDDAP™will für einen bestimmten Datensatz funktioniert nicht in einem Browser. AWS bietet kein System, um die Hierarchie eines Eimers einfach in Ihrem Browser zu durchsuchen. (Wenn das falsch ist, mailen Sie Chris. John bei noaa.gov. Ansonsten, Amazon, bitte fügen Sie Unterstützung für diese!)

Die Inhalte eines Bucket ansehen

S3 Eimer enthalten oft ein paar Kategorien von Dateien, in einigen Pseudo-Unterverzeichnissen, die ein paar werden könnteERDDAP™Datensätze. Um dieERDDAP™datasets, Sie müssen das Startverzeichnis für<ccheFromUrl> (oder<fileDir>) und das Format der Dateinamen, die diese Untermenge von Dateien identifizieren. Wenn Sie versuchen, den gesamten Inhalt eines Eimers in einem Browser anzuzeigen, S3 zeigt Ihnen nur die ersten 1000 Dateien, die nicht ausreichend sind. Derzeit ist der beste Weg für Sie, alle Inhalte eines Eimers anzusehen, um einenEDDTableFromFileNamesDatensatz (auf Ihrem PCERDDAP™und/oderERDDAP) , die Ihnen auch eine einfache Möglichkeit gibt, die Verzeichnisstruktur zu durchsuchen und Dateien herunterzuladen. Die<fileDir> dafür wird die oben gemachte URL sein, z.B. https://noaa-goes17.s3.us-east-1.amazonaws.com .\[Warum bietet AWS S3 nicht einen schnellen und einfachen Weg, um das ohne AWS-Konto zu tun?\]Beachten Sie, dass, wenn ich dies auf meinem PC auf einem nicht-Amazon-Netzwerk, es scheint, dass Amazon verlangsamt die Antwort auf einen Trickle (etwa 100 (?) Dateien pro Stück) nach den ersten paar Stücken (von 1000 Dateien pro Stück) werden heruntergeladen. Da Eimer möglicherweise eine große Anzahl von Dateien haben (noaaa-goes17 hat 26 Millionen) , alle Inhalte eines Eimers zu erhalten, kann EDDTableFromFileNames mehrere Stunden dauern (z.B. 12!) zu beenden.\[Amazon, ist das richtig?!\]

EDDTable erstellen FromFileNames Dataset mit AWS S3 Bucket

Wenn Sie einen Bucket-Namen haben, aber nicht bereits eine Liste von Dateien im S3-Bucket oder das Präfix, das den Standort der entsprechenden Dateien im Bucket identifiziert, verwenden Sie die folgenden Anweisungen, um einen EDDTableFromFileNames-Datensatz zu erstellen, so dass Sie die Verzeichnishierarchie des S3-Buckets überERDDAP'"files"System.

  1. AWS-Konto eröffnen ERDDAP™Verwendung vonAWS SDK fürJavaBucket-Informationen von AWS zu erhalten, also müssen Sieein AWS-Konto erstellen und aktivieren. Das ist ein ziemlich großer Job, mit vielen Dingen zu lernen.  
  2. Legen Sie Ihre AWS-Ergebnisse, woERDDAP™kann sie finden. Folgen Sie den Anweisungen beiAWS-Erstellungs- und Entwicklungsregion einrichtenalsoERDDAP™ (speziell das AWS SDK fürJava) wird in der Lage sein, Ihre AWS-Anmeldeinformationen zu finden und zu verwenden. wennERDDAP™die Anmeldeinformationen nicht finden können, sehen Sie eine java.lang. IllegalArgumentException: Profildatei kann nicht null Fehler seinERDDAP's log.txt-Datei.

Hinweis für Linux und Mac OS: Die Anmeldedatei muss im Home-Verzeichnis des Benutzers sein, der Tomcat läuft (undERDDAP) (für diesen Absatz übernehmen wir user=tomcat) in einer Datei namens ~/.aws/credentials . Nehmen Sie nicht an, dass ~ /home/tomcat -- tatsächlich verwenden cd ~ um herauszufinden, wo das Betriebssystem denkt ~ für user=tomcat ist. Erstellen Sie das Verzeichnis, wenn es nicht existiert. Auch, nachdem Sie die Anmeldeinformationen Datei in Platz gesetzt, stellen Sie sicher, dass der Benutzer und die Gruppe für die Datei sind tomcat und dann verwenden chmod 400 Anmeldeinformationen, um sicherzustellen, dass die Datei nur für user=tomcat gelesen wird.

  1. Erstellen Sie die Bucket URL in derFormat:ERDDAP™Anforderungen, z. https://noaa-goes17.s3.us-east-1.amazonaws.com , und (für öffentliche Eimer) testen Sie es in einem Browser, um sicherzustellen, dass es ein XML-Dokument zurückgibt, das eine teilweise Auflistung der Inhalte dieses Eimers hat.  
  2. VerwendungGenerateDatasetsXmlum einEDDTableFromFileNamesDatensatz:
    • Für das Startverzeichnis verwenden Sie diese Syntax: \\( vonOnTheFly, IhrBucketUrl* zum Beispiel, \\\*vonTheFly, https://noaa-goes17.s3.us-east-1.amazonaws.com/

    • Dateiname regex? .

    • Rekursiv? wahr

    • Nachladen EveryNMinutes? 10080

    • infoUrl? https://registry.opendata.aws/noaa-goes/

    • Institution?NOAA

    • Zusammenfassung? nichts (ERDDAP™wird automatisch eine anständige Zusammenfassung erstellen.)

    • Titel? nichts (ERDDAP™wird automatisch einen anständigen Titel erstellen.) Wie üblich, sollten Sie das resultierende XML bearbeiten, um die Korrektheit zu überprüfen und Verbesserungen vor dem Bruch von Datensätzen vorzunehmen, indem Sie es indatasets.xml.

  3. Wenn Sie die oben genannten Anweisungen befolgen und den Datensatz ladenERDDAP, Sie haben einen EDDTableFromFiles Datensatz erstellt. Als Beispiel haben wir EDDTableFromFileNames-Datensätze erstellt, um es jedem zu erleichtern, Dateien aus den AWS Open Data-Buckets zu durchsuchen und herunterzuladen. https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ ) für fast alleAWS S3 Open Data Eimer. \[Die wenigen Eimer, die wir nicht enthalten haben entweder eine große Anzahl von Dateien im Rootverzeichnis (mehr als in angemessener Zeit heruntergeladen werden kann) , oder den öffentlichen Zugang nicht zulassen (sollen sie nicht alle öffentlich sein?) , oder sind Forderer bezahlt Eimer (z.B. Sentinel) .\]
    Wenn Sie auf die"files"Link für einen dieser Datensätze, Sie können den Verzeichnisbaum und Dateien in diesem S3 Bucket durchsuchen. Wegen des Weges\\\*fromOnTheFly EDDTableFromFiles funktioniert, diese Verzeichnis-Listen sind immer perfekt aktuell, weilERDDAP™sie auf-die-fly. Wenn Sie den Verzeichnisbaum auf einen tatsächlichen Dateinamen klicken und auf den Dateinamen klicken,ERDDAP™wird Ihre Anfrage an AWS S3 umleiten, damit Sie die Datei direkt von AWS herunterladen können. Sie können diese Datei dann inspizieren.

Ärger? Wenn Ihr EDDTableFromFiles nicht geladen wirdERDDAP™ (oder DasDds) , suchen Sie in der log.txt-Datei für eine Fehlermeldung. Wenn Sie eine java.lang. IllegalArgumentException: Profildatei kann nicht null Fehler sein, das Problem ist, dass das AWS SDK fürJava (verwendet,ERDDAP) die Anmeldedatei nicht finden. Siehe oben die Anmeldehinweise.  

Es ist bedauerlich, dass AWS nicht einfach Menschen erlaubt, einen Browser zu verwenden, um den Inhalt eines öffentlichen Eimers anzuzeigen.

Dann können SieERDDAP™Datensätze, die den Benutzern Zugriff auf die Daten in den Dateien geben.
Siehe die Anweisungen inERDDAP™und S3 Schnallen (oben) . Für den Datensatz EDDTableFromFileNames, den Sie oben gemacht haben, wenn Sie mit dem Verzeichnis und den Dateinamen im Verzeichnisbaum ein wenig herumspielen, wird deutlich, dass die Verzeichnisnamen der obersten Ebene (z.B. ABI-L1b-RadC) entsprechen, wasERDDAP™würde separate Datensätze anrufen. Der Eimer, mit dem Sie arbeiten, kann ähnlich sein. Sie könnten dann die Erstellung von separaten Datensätzen inERDDAP™für jeden dieser Datensätze, z. https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
als<ccheFromUrl>. Leider scheinen für dieses spezielle Beispiel die Datensätze im Eimer alle Level 1 oder Level 2 Datensätze zu sein, dieERDDAP™ ist nicht besonders gut, weil der Datensatz eine kompliziertere Erfassung von Variablen ist, die verschiedene Dimensionen verwenden.  

NcML-Dateien

NcML-Dateien lassen Sie on-the-fly Änderungen an einer oder mehreren Originalquelle angebenNetCDF (v3 oder v4) .nc.grib, .bufr oder.hdf (v4 oder v5) Dateien und dann habenERDDAP™behandeln die.ncml Dateien als Quelldateien.ERDDAP™datasets akzeptiert.ncml Dateien wann immer.ncDateien werden erwartet. Die NcML-Dateien haben die Erweiterung.ncml. SieheUnidataNcML-Dokumentation. NcML ist nützlich, weil Sie einige Dinge damit machen können (zum Beispiel verschiedene Änderungen an verschiedenen Dateien in einer Sammlung vorzunehmen, einschließlich Hinzufügen einer Dimension mit einem bestimmten Wert zu einer Datei) , dass Sie nicht mitERDDAP'datasets.xml.

  • Änderungen an einer.ncDie letzteModified-Zeit der ml-Datei wird dazu führen, dass die Datei neu geladen wird, wenn der Datensatz neu geladen wird, aber Änderungen an der zugrunde liegenden.ncDatendateien werden nicht direkt bemerkt.
  • Hinweis: NcML ist\*sehr\*empfindlich auf die Reihenfolge einiger Elemente in der NcML-Datei. Denken Sie an NcML als Angabe einer Reihe von Anweisungen in der angegebenen Reihenfolge, mit der Absicht, die Quelldateien zu ändern (der Zustand am Start/top der NcML-Datei) in die Zieldateien (der Zustand am Ende/unten der NcML-Datei) .

Eine Alternative zu NcML ist dieNetCDFBetreiber (NCO) . Der große Unterschied ist, dass NcML ein System ist, um Änderungen zu machen (so dass die Quelldateien nicht verändert werden) , währendNCOkann verwendet werden, um Änderungen an (oder neue Versionen) die Dateien. BeideNCOund NcML sind sehr, sehr flexibel und ermöglichen es Ihnen, fast jede Änderung, die Sie an die Dateien denken können. Für beide kann es schwierig sein, genau herauszufinden, wie Sie tun, was Sie tun wollen -- überprüfen Sie das Web für ähnliche Beispiele. Beide sind nützliche Werkzeuge zur Vorbereitung von netCDF undHDFDateien zur Verwendung mitERDDAP, vor allem, um Änderungen darüber hinaus vorzunehmen, wasERDDAP's Manipulation System kann tun.

Beispiel #1: Hinzufügen einer Zeitdimension mit einem Einzelwert Hier ist ein.ncml-Datei, die eine neue äußere Dimension erzeugt (Zeit, mit 1 Wert: 1041379200) und fügt diese Dimension der Bildvariablen in der Datei A2003001.L3m\_DAY\_PIC\_pic\_4km hinzu.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>

Beispiel #2: Änderung eines bestehenden Zeitwerts Manchmal die Quelle.ncDatei hat bereits eine Zeitdimension und Zeitwert, aber der Wert ist falsch (für Ihre Zwecke) . Das.ncml-Datei sagt: für die Datendatei ""19810825230030-NCEI...", für die Dimensionsvariable"time", setzen Sie die Einheiten Attribut 'Sekunden seit 1970-01T00:00:00Z' und setzen Sie den Zeitwert auf 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>

NetCDFBetreiber (NCO)

"Die Netzbetreiber (NCO) umfassen ein Dutzend Standalone, Kommandozeilenprogramme, die netCDF\[v3 oder v4\],HDF \[v4 oder v5\],\[.grib, .bufr,\]und/oderDAPDateien als Eingabe, dann bedienen (z.B. neue Daten ableiten, Statistiken berechnen, Druck, Hyperslab, Metadaten manipulieren) und die Ergebnisse auf Bildschirm oder Dateien in Text-, Binär- oder NetCDF-Formaten ausgeben.NCOUnterstützung bei der Analyse von netzgebundenen wissenschaftlichen Daten. Der Shell-Command-StilNCOermöglicht es Benutzern, Dateien interaktiv zu manipulieren und zu analysieren, oder mit ausdrucksstarken Skripten, die einige Overhead von höheren Programmierumgebungen vermeiden." (vonNCOHomepage) .

Eine Alternative zuNCOistNcML. Der große Unterschied ist, dass NcML ein System ist, um Änderungen zu machen (so dass die Quelldateien nicht verändert werden) , währendNCOkann verwendet werden, um Änderungen an (oder neue Versionen) die Dateien. BeideNCOund NcML sind sehr, sehr flexibel und ermöglichen es Ihnen, fast jede Änderung, die Sie an die Dateien denken können. Für beide kann es schwierig sein, genau herauszufinden, wie Sie tun, was Sie tun wollen -- überprüfen Sie das Web für ähnliche Beispiele. Beide sind nützliche Werkzeuge zur Vorbereitung von netCDF undHDFDateien zur Verwendung mitERDDAP, vor allem, um Änderungen darüber hinaus vorzunehmen, wasERDDAP's Manipulation System kann tun.

Zum Beispiel können Sie verwendenNCOdie Einheiten der Zeitvariablen in einer Gruppe von Dateien konsistent zu machen, wo sie ursprünglich nicht konsistent waren. Oder Sie können verwendenNCOAnwendungscale\_factorundadd\_offsetin einer Gruppe von Dateien, in denenscale\_factorundadd\_offsetverschiedene Werte in verschiedenen Quelldateien haben. (Oder Sie können jetzt mit diesen Problemen inERDDAP™überEDDGridVonNcFilesUnpacked, die eine Variante vonEDDGridFromNcFiles, die gepackte Daten entpackt und Zeitwerte auf einem niedrigen Niveau standardisiert, um mit einer Sammlungsdatei zu umgehen, die verschiedenescale\_factors undadd\_offset, oder verschiedene Zeiteinheiten.)

NCOist Freie und Open Source Software, die dieGPL 3.0Lizenz.

Beispiel #1: Einheiten konsistent machen EDDGridVonFiles und EDDTable Aus Dateien bestehen darauf, dass die Einheiten für eine bestimmte Variable in allen Dateien identisch sein. Wenn einige der Dateien trivial sind (nicht funktionell) anders als andere (z.B. Zeiteinheiten von "Sekunden seit 1970-01 00:00:00 Uhr UTC" versus "seconds since 1970-01-01T00:00:00Z", Sie könnten verwendenNCO'nkaten. die Einheiten in allen Dateien zu ändern identisch mit nco/ncatted -a units,time,o,c,'seconds since 1970-01-01T00:00Z' \*.nc
\[Für viele Probleme wie diese in EDDTableFrom... Dateien Datensätze, können Sie jetzt verwendenStandardisierung Was?zu sagenERDDAPdie Quelldateien zu standardisieren, wie sie eingelesen werdenERDDAP.\]

Grenzwerte für die Größe eines Datensatzes

Sie werden viele Hinweise auf "2 Milliarden" unten sehen. Genauer gesagt, das ist ein Hinweis auf 2,147,483.647 (2^31-1) , das ist der maximale Wert einer 32-Bit signierten Ganzzahl. In einigen Computersprachen zum BeispielJava (dieERDDAP™wird eingeschrieben) , das ist der größte Datentyp, der für viele Datenstrukturen verwendet werden kann (beispielsweise die Größe eines Arrays) .

Für Streichwerte (beispielsweise für Variablennamen, Attributnamen, String Attributwerte und String-Datenwerte) , die maximale Anzahl der Zeichen pro String inERDDAP™ist ~2 Milliarden. Aber in fast allen Fällen wird es kleine oder große Probleme geben, wenn ein String eine angemessene Größe überschreitet (z.B. 80 Zeichen für variable Namen und Attributnamen und 255 Zeichen für die meisten String Attributwerte und Datenwerte) . Zum Beispiel werden Webseiten, die lange Variablennamen anzeigen, umständlich breit und lange Variablennamen gekürzt, wenn sie die Grenze des Antwortdateityps überschreiten.

Für gegitterte Datensätze:

  • Die maximale AnzahlaxisVariables ist ~2 Milliarden. Die maximale AnzahldataVariables ist ~2 Milliarden. Aber wenn ein Datensatz > 100 Variablen hat, wird es für Benutzer schwer zu verwenden sein. Und wenn ein Datensatz > 1 Million Variablen hat, wird Ihr Server eine Menge physischen Speicher benötigen und es werden andere Probleme.
  • Die maximale Größe jeder Dimension (axisVariable) ist ~2 Milliarden Werte.
  • Ich denke, die maximale Gesamtzahl der Zellen (das Produkt aller Dimensionsgrößen) ist unbegrenzt, aber es kann ~9e18 sein.

Für tabellarische Datensätze:

  • Die maximale AnzahldataVariables ist ~2 Milliarden. Aber wenn ein Datensatz > 100 Variablen hat, wird es für Benutzer schwer zu verwenden sein. Und wenn ein Datensatz > 1 Million Variablen hat, wird Ihr Server eine Menge physischen Speicher benötigen und es werden andere Probleme.
  • Die maximale Anzahl der Quellen (zum Beispiel Dateien) Das kann aggregiert werden ist ~2 Milliarden.
  • In einigen Fällen die maximale Anzahl von Zeilen aus einer einzelnen Quelle (zum Beispiel eine Datei, aber keine Datenbank) ist ~2 Milliarden Zeilen.
  • Ich glaube nicht, dass es andere Grenzen gibt.

Für sowohl gitterförmige als auch tabellarische Datensätze gibt es einige interne Grenzwerte für die Größe der Teilmenge, die von einem Benutzer in einer einzigen Anfrage angefordert werden können (oft mit >2 Milliarden von etwas oder ~9e18 von etwas verwandt) , aber es ist viel wahrscheinlicher, dass ein Benutzer die datentypspezifischen Grenzen trifft.

  • NetCDFVersion 3.ncDateien sind auf 2GB Bytes begrenzt. (Wenn das wirklich ein Problem für jemanden ist, lassen Sie mich wissen: Ich könnte Unterstützung für dieNetCDFVersion 3.nc64-Bit-Erweiterung oderNetCDFVersion 4, die die Grenze deutlich erhöhen würde, aber nicht unendlich.)
  • Browser abstürzen nach nur ~500MB der Daten, soERDDAP™die Antwort auf.htmlTableAnfragen an ~400MB der Daten.
  • Viele Datenanalyseprogramme haben ähnliche Grenzen (zum Beispiel, die maximale Größe einer Dimension ist oft ~2 Milliarden Werte) , so gibt es keinen Grund, hart zu arbeiten um die datentypspezifischen Grenzen zu bekommen.
  • Die datentypspezifischen Grenzen sind nützlich, indem sie naive Anfragen für wirklich riesige Datenmengen verhindern (z.B. "Gib mir all diesen Datensatz", wenn der Datensatz 20TB von Daten aufweist) , die Wochen oder Monate dauern würde, um herunterzuladen. Je länger der Download, desto wahrscheinlicher wird es aus verschiedenen Gründen scheitern.
  • Die datentypspezifischen Grenzen sind nützlich, indem sie den Benutzer dazu zwingen, sich mit maßgebenden Teilmengen zu befassen. (z.B. über Dateien mit Daten von jeweils einem Zeitpunkt einen großen netzgebundenen Datensatz zu behandeln) .  

Wechseln zu ACDD-1.3

Wir (insbesondereGenerateDatasetsXml) aktuell empfehlenACDD-Version 1.3, die Anfang 2015 ratifiziert wurde und im globalen Konventsattribut als "ACDD-1.3" bezeichnet wird. VorherERDDAP™Version 1.62 (veröffentlicht im Juni 2015) ,ERDDAP™das Original, Version 1.0, desNetCDFAttribut Convention for Dataset Discoverydie als " bezeichnet wurdeUnidataDataset Discovery v1.0" in den globalen Konventionen undMetadata\_ConventionsAttribute.

Wenn Ihre Datensätze frühere Versionen von ACDD verwenden, freuen wir uns, dass Sie auf ACDD-1.3 wechseln. Es ist nicht schwer. ACDD-1.3 ist sehr rückwärtskompatibel mit Version 1.0. Um zu wechseln, für alle Datensätze (ausgenommenEDDGridVonErddap und EDDTable AusErddap-Datensätze) :

  1. Entfernen Sie die neu deprecated globalMetadata\_ConventionsAttribut durch Hinzufügen (oder durch Änderung der bestehendenMetadata\_ConventionsEigenschaften)
        <att name="Metadata\\_Conventions">null</att>  

zum globalen Datensatz<addAttributes>.   2. Wenn der Datensatz ein Attribute von Konventionen im globalen<addAttributes>, alle ändern "UnidataDataset Discovery v1.0" verweist auf "ACDD-1.3". Wenn der Datensatz kein Konventsattribut im globalen<addAttributes>, dann fügen Sie einen, der sich auf ACDD-1.3 bezieht. Zum Beispiel

        <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>  

  3. Wenn der Datensatz global iststandard\_name\_vocabularyAttribut, ändern Sie bitte das Format des Wertes auf z.B.

        <att name="standard\\_name\\_vocabulary">CF Standard Name Table v65</att>  

Wenn die Referenz auf eine ältere Version derCF Standard-Namenstabelle. es ist wahrscheinlich eine gute Idee, auf die aktuelle Version zu wechseln (65, wie wir das schreiben) , da neue Standardnamen zu dieser Tabelle mit folgenden Versionen hinzugefügt werden, aber alte Standardnamen werden selten depreciert und nie entfernt.   4. Obwohl ACDD-1.0 globale Attribute fürcreator\_name,creator\_email,creator\_url,GenerateDatasetsXmlhat sie nicht automatisch hinzugefügt, bis irgendwann umERDDAP™v1.50. Dies sind wichtige Informationen:

  • creator\_namelässt Benutzer den Schöpfer des Datensatzes erkennen/ ansagen.
  • creator\_emailerklärt den Benutzern die bevorzugte E-Mail-Adresse, um den Schöpfer des Datensatzes zu kontaktieren, beispielsweise wenn sie Fragen zum Datensatz haben.
  • creator\_urlgibt Benutzern einen Weg, um mehr über den Schöpfer zu erfahren.
  • ERDDAP™verwendet alle diese Informationen bei der Generierung von FGDC und ISO 19115-2/19139 Metadatendokumenten für jeden Datensatz. Diese Dokumente werden oft von externen Suchdiensten verwendet.

Bitte fügen Sie diese Attribute dem globalen Datensatz hinzu<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>

Das ist es. Ich hoffe, das war nicht zu hart.  

Zar

Ab Version 2.25ERDDAP™kann lokal lesen Zarr Dateien mitEDDTableFromNcFisundEDDGridVon NcFiles.

(Ab August 2019) Wir könnten leicht falsch sein, aber wir sind noch nicht überzeugt, dassZar, oder ähnliche Systeme, die Datendateien in kleinere Stücke zerlegen, sind große Lösungen für das Problem derERDDAP™Daten, die in Cloud-Diensten wie Amazon AWS S3 gespeichert werden. Zarr ist eine großartige Technologie, die ihre Nützlichkeit in einer Vielzahl von Situationen gezeigt hat, wir sind einfach nicht sicher, dassERDDAP+S3 wird eine dieser Situationen sein. Meistens sagen wir: Bevor wir die Mühe machen, alle unsere Daten in Zarr zu speichern, machen wir einige Tests, um zu sehen, ob es tatsächlich eine bessere Lösung ist.

Die Probleme mit dem Zugriff auf Daten in der Cloud sind Latenz (die Verzögerung zuerst Daten erhalten) und Zugriff auf Dateiebene (anstatt zu blockieren) . Zarr löst das Problem auf Dateiebene, tut aber nichts über Latenz. Im Vergleich zum Download der Datei (so kann es als lokale Datei mit Block-Level-Zugang gelesen werden) , Zarr kann sogar das Latenz-Problem verschlimmern, weil mit Zarr, Lesen einer Datei jetzt eine Reihe von mehreren Aufrufen beinhaltet, um verschiedene Teile der Datei zu lesen (mit eigener Lagune) . Das Latenzproblem kann durch Parallelisierung der Anträge gelöst werden, das ist jedoch eine höhere Lösung, die nicht von Zarr abhängig ist.

Und mit Zarr (wie bei relationalen Datenbanken) , wir verlieren die Bequemlichkeit, eine Datendatei zu haben, ist eine einfache, einzelne Datei, die Sie leicht die Integrität zu überprüfen, oder eine Kopie von machen / herunterladen können.

ERDDAP™ (als v2) hat ein System zur Aufrechterhaltung eines lokalen Cache von Dateien aus einer URL-Quelle (z.B. S3) (siehe [<ccheFromUrl> und<CacheMaxGB> (#cachefromurl) ) Und der neue<nThreads>] (#nthreads) sollte das Latenzproblem durch Parallelisierung der Datenabrufung auf hohem Niveau minimieren.<ccheFromUrl> scheint für viele Szenarien sehr gut zu arbeiten. (Wir sind nicht sicher, wie nützlich<nThreads> ist ohne weitere Tests.) Wir geben zu, dass wir keine Timing-Tests an einer AWS-Instanz mit einer guten Netzwerkverbindung gemacht haben, aber wir haben erfolgreich mit verschiedenen Remote-URL-Quellen von Dateien getestet. UndERDDAP'<cacheFromUrl> arbeitet mit jeder Art von Datendatei (z.B.,.nc,.hdf, .csv,.jsonlCSV) , auch wenn extern komprimiert (z.B.,.gz) , ohne Änderungen der Dateien (z.B. sie als Zarr-Sammlungen neu schreiben) .

Es ist wahrscheinlich, dass verschiedene Szenarien verschiedene Lösungen bevorzugen, z.B. nur einen Teil einer Datei einmal lesen müssen (Zarr gewinnt) , vs. müssen alle Datei einmal lesen, vs. müssen Teil oder alle Datei mehrmals lesen (<ccheFromUrl> gewinnt).

Meistens sagen wir: Bevor wir die Mühe machen, alle unsere Daten in Zarr zu speichern, machen wir einige Tests, um zu sehen, ob es tatsächlich eine bessere Lösung ist.

    • Ja.

Liste der Arten Datensätze

Wenn Sie Hilfe benötigen, um den richtigen Datensatztyp auszuwählen, sieheAuswahl des Datensatztyps.

Die Arten von Datensätzen fallen in zwei Kategorien. (Warum?)

EDDGrid

  • EDDGrid datasets verarbeiten netzgebundene Daten.
    • InEDDGridDatensätze, Datenvariablen sind mehrdimensionale Datenfelder.
    • Für jede Dimension muss eine Achsgröße vorhanden sein. Axis-Variablen MUST werden in der Reihenfolge angegeben, in der die Datenvariablen sie verwenden.
    • InEDDGriddatasets, alle Datenvariablen MUST (Anteil) alle Achsgrößen. (Warum? Und wenn sie es nicht tun?)
    • Sortierte Maßwerte - In allenEDDGridDatensätze, jede Dimension MUST in sortierter Reihenfolge (aufsteigen oder absteigen) . Jeder kann unregelmäßig beabstandet sein. Es kann keine Krawatten geben. Dies ist eine Forderung derCF metadata standard. Wenn die Werte der Dimension nicht in sortierter Reihenfolge sind, wird der Datensatz nicht geladen undERDDAP™den ersten ungebrochenen Wert in der Protokolldatei identifizieren, BigParentDirectory /logs/log.txt .

Einige Unterklassen haben zusätzliche Einschränkungen (insbesondereEDDGridAggregateExistingDimension erfordert, dass die äußere (links, erste) Dimension aufsteigt.

Unsortierte Dimensionswerte geben fast immer ein Problem mit dem Quelldatensatz an. Dies geschieht am häufigsten, wenn in der Aggregation eine fehlerhafte oder unangemessene Datei enthalten ist, die zu einer ungestörten Zeitdimension führt. Um dieses Problem zu lösen, siehe die Fehlermeldung in derERDDAP™log.txt Datei, um den absteigenden Zeitwert zu finden. Dann schauen Sie in die Quelldateien, um die entsprechende Datei zu finden (oder vor oder nach) Das gehört nicht zur Aggregation.

  • Siehe die vollständigere Beschreibung derEDDGridDatenmodell.
  • DieEDDGridDatensatztypen sind:
    • EDDGridVonAudioFilesaggregiert Daten aus einer Gruppe von lokalen Audiodateien.
    • EDDGridVonDapnetzgebundene Daten vonDAPServer.
    • EDDGridVonEDDTableSie können einen tabellarischen Datensatz in einen netzgebundenen Datensatz konvertieren.
    • EDDGridVon Erddapnetzgebundene Daten von einer FernbedienungERDDAP.
    • EDDGridVon Etopobehandelt nur die eingebauten ETOPO-Topographiedaten.
    • EDDGridVonFilesist die Superklasse von allenEDDGridVon...Files-Kursen.
    • EDDGridVonMergeIRFilesaggregierte Daten aus einer Gruppe von lokalen MergeIR.gzDateien.
    • EDDGridVon NcFilesaggregierte Daten aus einer Gruppe von lokalenNetCDF (v3 oder v4) .ncund verwandte Dateien.
    • EDDGridVonNcFilesUnpackedeine Variante ist, wennEDDGridFromNcFiles, die auch Daten aus einer Gruppe von lokalenNetCDF (v3 oder v4) .ncund verwandten Dateien, dieERDDAP™entpackt auf einem niedrigen Niveau.
    • EDDGridLonPM180die Längenwerte eines Kindes modifiziertEDDGridso dass sie im Bereich -180 bis 180 liegen.
    • EDDGridLon0360die Längenwerte eines Kindes modifiziertEDDGridso dass sie im Bereich 0 bis 360 liegen.
    • EDDGridSideBysideAggregate zwei oder mehrEDDGridDatensätze nebeneinander.
    • EDDGridGesamtexistierteDimensionAggregate zwei oder mehrEDDGridDatensätze, die jeweils einen unterschiedlichen Wertebereich für die erste Dimension aufweisen, jedoch gleiche Werte für die anderen Dimensionen.
    • EDDGridKopiekann eine lokale Kopie eines anderen machenEDDGrid's Daten und dient Daten aus der lokalen Kopie.  
  • AlleEDDGriddatasets unterstützen eine nThreads-Einstellung, dieERDDAP™wie viele Threads zu verwenden, wenn auf eine Anfrage reagiert. SiehenThreadsDokumentation für Details.  

EDDTable

  • EDDTable datasets verarbeiten tabellarische Daten.
    • Tabulardaten können als Datenbank-ähnliche Tabelle mit Zeilen und Spalten dargestellt werden. Jede Spalte (eine Datengröße) hat einen Namen, eine Reihe von Attributen und speichert nur eine Art von Daten. Jede Zeile hat eine Beobachtung (oder Gruppe von verwandten Werten) . Die Datenquelle kann die Daten in einer anderen Datenstruktur, einer komplizierteren Datenstruktur und/oder mehreren Datendateien aufweisen, aberERDDAP™muss in der Lage sein, die Quelldaten in eine Datenbank-ähnliche Tabelle zu platzieren, um die Daten als tabellarischer Datensatz an Nutzer vonERDDAP.
    • Siehe die vollständigere Beschreibung derEDDTable Datenmodell.
    • Die EDDTable-Datensatztypen sind:
    • Ja.

Detaillierte Beschreibungen von Datensatztypen

EDDGridVonDap

EDDGridVonDap Griffe Rastervariablen vonDAPServer.

  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Sie können die Informationen sammeln, die Sie benötigen, um diese zu tweak oder erstellen Sie Ihr eigenes XML für einEDDGridFromDap dataset durch einen Blick auf die DDS- und DAS-Dateien des Quelldatensatzes in Ihrem Browser (durch Hinzufügen von .das und .dds zusourceUrlz.B. https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .  
  • EDDGridFromDap kann Daten von jeder mehrdimensionalen Variablen aus einerDAPDatenserver. (Zuvor,EDDGridVonDap war auf Variablen beschränkt, die als "Grid" bezeichnet werden, aber das ist keine Anforderung mehr.)
     
  • Sortierte Maßwerte - Die Werte für jede Dimension MUST sind in sortierter Reihenfolge (aufsteigen oder absteigen) . Die Werte können unregelmäßig beabstandet sein. Es kann keine Krawatten geben. Dies ist eine Forderung derCF metadata standard. Wenn die Werte der Dimension nicht in sortierter Reihenfolge sind, wird der Datensatz nicht geladen undERDDAP™den ersten ungebrochenen Wert in der Protokolldatei identifizieren, BigParentDirectory /logs/log.txt .

Unsortierte Dimensionswerte geben fast immer ein Problem mit dem Quelldatensatz an. Dies geschieht am häufigsten, wenn in der Aggregation eine fehlerhafte oder unangemessene Datei enthalten ist, die zu einer ungestörten Zeitdimension führt. Um dieses Problem zu lösen, siehe die Fehlermeldung in derERDDAP™log.txt Datei, um den absteigenden Zeitwert zu finden. Dann schauen Sie in die Quelldateien, um die entsprechende Datei zu finden (oder vor oder nach) Das gehört nicht zur Aggregation.

EDDGridVonDap Skelett 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>

 

EDDGridVonEDDTable

EDDGridVonEDDTable Sie können einen EDDTable tabular dataset in einEDDGridnetzgebundener Datensatz. Denken Sie daran,ERDDAP™behandelt Datensätze als entwedernetzgebundene Datensätze (UnterklassenEDDGrid) oder tabellarische Datensätze (Unterklassen von EDDTable) .

  • In der Regel, wenn Sie gegitterte Daten haben, haben Sie einfach eineEDDGridDatensatz direkt. Manchmal ist dies beispielsweise nicht möglich, wenn Sie die in einer relationalen Datenbank gespeicherten Daten haben, dieERDDAP™kann nur über EDDTableFromDatabase zugreifen.EDDGridVonEDDTable Klasse können Sie diese Situation beheben.  
  • Offensichtlich müssen die Daten im zugrunde liegenden EDDTable-Datensatz sein (grundsätzlich) netzgebundene Daten, aber in tabellarischer Form. Beispielsweise kann der EDDTable-Datensatz CTD-Daten aufweisen: Messungen von Ost- und Nordstrom, in mehreren Tiefen, mehrmals. Da die Tiefen an jedem Zeitpunkt gleich sind,EDDGridFromEDDTable kann einen netzgebundenen Datensatz mit einer Zeit und einer Tiefendimension erstellen, die über den zugrunde liegenden EDDTable-Datensatz auf die Daten zugreift.  
  • Datensätze generieren Xml -- Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Sie können die Informationen sammeln, die Sie benötigen, um den groben Entwurf zu verbessern.  
  • Quelle Attributes -- Wie bei allen anderen Arten von Datensätzen,EDDGridFromTable hat die Idee, dass es globale SourceAttribute undweltweitaddAttributes (spezifiziertdatasets.xml) , die zusammengeführt werden, um die globale Attribute, die Nutzer sehen. Für globale SourceAttributes,EDDGridFromEDDTable nutzt die globale Kombination Attribute des zugrunde liegenden EDDTable-Datensatzes. (Wenn Sie eine Minute darüber nachdenken, ergibt es Sinn.)

In ähnlicher Weise für jedeaxisVariableunddataVariable'addAttributes,EDDGridFromEDDTable verwendet die Variables kombiniert Attribute aus dem zugrunde liegenden EDDTable-Datensatz als derEDDGridFromEDDTable Variables sourceAttributes. (Wenn Sie eine Minute darüber nachdenken, ergibt es Sinn.)

Infolgedessen, wenn das EDDTable gute Metadaten hat,EDDGridFromEDDTable braucht oft sehr wenigaddAttributesmetadata -- nur ein paar Tweets hier und da.

  • dataVariables versaxisVariable-- Der zugrunde liegende EDDTable hat nurdataVariableS. EineEDDGridVonEDDTable Datensatz wird einigeaxisVariableS (erstellt von einigen der EDDTabledataVariableS) und einigedataVariableS (erstellt aus dem verbleibenden EDDTabledataVariableS) .GenerateDatasetsXmlwird raten, was EDDTabledataVariables sollteEDDGridVonEDDTableaxisVariables, aber es ist nur eine Vermutung. Sie müssen die Ausgabe von GenerateDatasetsXml ändern, um anzugeben, welchedataVariables will werdenaxisVariables, und in welcher Reihenfolge.  

  • -- Es gibt nichts über die zugrunde liegende EDDTable zu sagenEDDGridFromEDDTable die möglichen Werte deraxisVariables in der gerasteten Version des Datensatzes, so dass Sie diese Informationen für jedenaxisVariableüber eines dieser Attribute:

    • axiValues -- lässt Sie eine Liste von Werten angeben. Zum Beispiel <att name="axisWerte"Typ="doubleList"\>2, 2,5, 3, 3,5, 4</att> die Verwendung einesDatentypund das Wort List. Auch die Art der Liste (zum Beispiel doppelt) , MUST entspricht den Daten Typ der Variable im EDDTable undEDDGridVonEDDTable Datensätze.
    • achsValuesStartStrideStop -- lässt Sie eine Folge von regelmäßigen Abstandswerten angeben, indem Sie die Start-, Stride- und Stoppwerte angeben. Hier ein Beispiel, das der obigen Achse entspricht: <att name="axisValuesStartStrideStop"Typ="doubleList"\>2, 0,5, 4</att> Beachten Sie erneut die Verwendung eines Listendatentyps. Auch die Art der Liste (zum Beispiel doppelt) , MUST entspricht den Daten Typ der Variable im EDDTable undEDDGridVonEDDTable Datensätze.  

Updates -- So wie es keinen Weg gibtEDDGridVonEDDTable zur Bestimmung der AchsenWerte aus dem EDDTable gibt es auch keine zuverlässige Möglichkeit fürEDDGridVonEDDTable aus dem EDDTable zu bestimmen, wenn sich die AchsenWerte geändert haben (insbesondere bei neuen Werten für die Zeitvariable) . Derzeit ist die einzige Lösung, das axiValues Attribut indatasets.xmlund den Datensatz neu laden. Zum Beispiel könnten Sie ein Skript schreiben, um

  1. Suchedatasets.xmlfür datasetID= Die DatensatzID " so arbeiten Sie mit dem richtigen Datensatz.
  2. Suchedatasets.xmlfür das nächste Auftreten DerVariablesSourceName
    so arbeiten Sie mit der richtigen Variable.
  3. Suchedatasets.xmlfür das nächste Auftreten
        <att name="axisValuesStartStrideStop" type="doubleList">  

so dass Sie die Startposition des Tags kennen. 4. Suchedatasets.xmlfür das nächste Auftreten

        </att>  

so kennen Sie die Endposition der Achsenwerte. 5. Ersetzen Sie die alten Start-, Stride-, Stop-Werte mit den neuen Werten. 6. KontaktZurück zur Übersichtfür den Datensatz zu sagenERDDAP™um den Datensatz neu zu laden.

Das ist nicht ideal, aber es funktioniert.  

  • Präzision -- WannEDDGridFromEDDTable reagiert auf die Anforderung eines Benutzers für Daten, es bewegt eine Reihe von Daten aus der EDDTable Antworttabelle in dieEDDGridAntwortgitter. Dazu muss es herausfinden, ob die "Achse"-Werte auf einer bestimmten Zeile in der Tabelle eine Kombination von Achswerten im Raster übereinstimmen. Für ganzzahlige Datentypen ist es leicht festzustellen, ob zwei Werte gleich sind. Aber für Schwimmer und Doppel bringt dies das schreckliche Problem der schwimmenden Punktzahlen aufnicht genau übereinstimmen. (beispielsweise 0,2 versus 0,199999999999999996) . Zu (versuchen,) damit umgehen,EDDGridFromTable lässt Sie ein Präzisionsattribut für jedes deraxisVariables, die die Gesamtzahl der Dezimalstellen angibt, die identisch sein muss.
    • Zum Beispiel<beit name="precision" type="int">5</att>
    • Für verschiedene Arten von Datenvariablen gibt es unterschiedliche Standardgenauigkeitswerte. Die Standardeinstellungen sind in der Regel angemessen. Wenn sie nicht sind, müssen Sie verschiedene Werte angeben.
    • FüraxisVariables, dieZeit oder Zeit Stamp Variablen, der Standard ist volle Präzision (eine genaue Übereinstimmung) .
    • FüraxisVariables, die Floaten sind, die Standardgenauigkeit ist 5.
    • FüraxisVariables, die doppelt sind, die Standardgenauigkeit ist 9.
    • FüraxisVariables mit ganzzahligen Datentypen,EDDGridFromEDDTable ignoriert das Präzisionsattribut und verwendet immer volle Präzision (eine genaue Übereinstimmung) .  
    • WARNING! Bei der Umwandlung eines Bruchs von tabellarischen Daten in einen Bruch von netzgebundenen Daten, wennEDDGridFromEDDTable kann nicht mit einem EDDTable "axis" Wert zu einem der erwartetenEDDGridVonEDDTable Achswerte,EDDGridFromEDDTable leise (kein Fehler) wirft die Daten von dieser Zeile der Tabelle weg. Es können beispielsweise andere Daten vorliegen (nicht auf dem Gitter) im EDDTable-Datensatz. (Und wenn Stride > 1, es ist nicht offensichtlich,EDDGridVonTabelle, welche Achswerte Sollwerte sind, und welche derjenige ist, der wegen des Verlaufs übersprungen werden soll.) Wenn also die Genauigkeitswerte zu hoch sind, sieht der Benutzer bei der Datenantwort fehlende Werte, wenn tatsächlich gültige Datenwerte vorliegen.

Umgekehrt, wenn die Präzisionswerte zu niedrig gesetzt werden, EDDTable "Achse" Werte, die nicht übereinstimmen solltenEDDGridVonEDDTable Achswerte werden (fälschlich) Match.

Diese potentiellen Probleme sind schrecklich, weil der Benutzer die falschen Daten erhält (oder fehlende Werte) wenn sie die richtigen Daten erhalten sollten (oder zumindest eine Fehlermeldung) . Das ist kein Fehler.EDDGridVonTabelle.EDDGridFromTable kann dieses Problem nicht lösen. Das Problem ist die Umwandlung von tabellarischen Daten in netzgebundene Daten. (wenn nicht andere Annahmen gemacht werden können, aber sie können hier nicht gemacht werden) . Es liegt an dir, dieERDDAP™Administrator, an Testen Sie IhreEDDGridAusgewählt um sicherzustellen, dass die Genauigkeitswerte eingestellt werden, um diese potenziellen Probleme zu vermeiden.

LückeThreshold

  • LückeThreshold-- Dies ist eine sehr ungewöhnliche Art von Datensatz. Da die Arten von Abfragen, die gemacht werden können (von) eineEDDGridDatensatz (mit den Bereichen und Striden deraxisVariableS) sind sehr verschieden von den Arten von Abfragen, die gemacht werden können (von) ein EDDTable Datensatz (nur mit den Bereichen einiger Variablen verbunden) , die LeistungEDDGridVonEDDTable-Datensätzen werden je nach exakter Anforderung und der Geschwindigkeit des zugrunde liegenden EDDTable-Datensatzes stark variieren. Für Anträge mit einem Stridewert > 1.EDDGridFromEDDTable kann das zugrunde liegende EDDTable für einen relativ großen Datenbruch fragen (als ob Stride=1) und dann durch die Ergebnisse, halten die Daten aus einigen Zeilen und wegwerfen die Daten von anderen. Wenn es eine Menge Daten durchsieben muss, um die benötigten Daten zu erhalten, wird die Anfrage länger dauern, um zu füllen.

wennEDDGridFromEDDTable kann sagen, dass es große Lücken werden (mit Zeilen von unerwünschten Daten) zwischen den Zeilen mit gewünschten Daten,EDDGridFromEDDTable kann wählen, um mehrere Subrequests zum zugrunde liegenden EDDTable anstelle einer großen Anfrage zu machen, wodurch die unerwünschten Datenzeilen in den großen Lücken überspringen. Die Sensitivität für diese Entscheidung wird durch den in der<LückeThreshold> tag (default=1000 Zeilen Quelldaten) . Einstellen von LückeThreshold zu einer kleineren Zahl führt zu dem Datensatz (allgemein) mehr Unterforderungen. Einstellen von LückeThreshold zu einer größeren Zahl führt zu dem Datensatz (allgemein) weniger Unterforderungen.

Wenn LückeThreshold zu klein gesetzt ist,EDDGridFromEDDTable wird langsamer arbeiten, weil die Überleitung von mehreren Anfragen größer als die Zeit, die gespeichert wird, indem Sie einige überschüssige Daten erhalten. Wenn LückeThreshold zu groß ist,EDDGridFromEDDTable wird langsamer arbeiten, weil so viel überschüssige Daten aus dem EDDTable abgerufen werden, nur um verworfen zu werden. (Wie Goldilocks entdeckte, ist die Mitte "nur richtig".) Der Overhead für verschiedene Arten von EDDTable-Datensätzen variiert stark, so dass die einzige Möglichkeit, die eigentliche beste Einstellung für Ihren Datensatz zu kennen, über Experimente besteht. Aber Sie gehen nicht zu weit falsch an der Standardeinstellung festhalten.

Ein einfaches Beispiel ist: Imagine anEDDGridFromTable mit nur einemaxisVariable (Zeit mit einer Größe von 100000) , einsdataVariable (Temperatur) , und die StandardlückeThreshold von 1000.

  • Wenn ein Benutzer Temperatur anfordert\[0💯5000\], der Streifen ist 100, so dass die Spaltgröße 99 ist, die kleiner ist als die LückeThreshold. So.EDDGridFromTable stellt nur eine Anfrage an EDDTable für alle Daten, die für die Anfrage benötigt werden (äquivalent zur Temperatur\[0:5000\]) und alle Datenreihen wegwerfen, die es nicht braucht.
  • Wenn ein Benutzer Temperatur anfordert\[0:2500:5000\], dass Streifen ist 2500, so dass die Spaltgröße 2499, die größer als die LückeThreshold ist. So.EDDGridFromTable stellt separate Anfragen an EDDTable, die der Temperatur entsprechen\[0)\]Temperatur\[2500\]Temperatur\[5000\].

Die Berechnung der Spaltgröße ist komplizierter, wenn mehrere Achsen vorhanden sind.

Für jede Benutzeranforderung,EDDGridFromEDDTable druckt Diagnose-Nachrichten dazu in derPressemitteilungDatei.

  • wenn<logLevel> (#loglevel) indatasets.xmlwird auf info gesetzt, dies druckt eine Nachricht wie \* nOuterAxes=1 von 4 nOuterRequests=22 Wenn nOuterAxes=0, LückeThreshold wurde nicht überschritten und nur eine Anfrage an EDDTable gestellt. Wenn nOuterAxes>0, LückeThreshold wurde überschritten und nOuterRequests auf EDDTable gestellt werden, entsprechend jeder gewünschten Kombination der linkssten nOuterAxes. Hat der Datensatz beispielsweise 4axisVariables unddataVariableWie östlich\[Zeit\]\[Breite\]\[Länge\]\[Tiefe\], links (erste) Achsgröße ist Zeit.
  • wenn<logLevel> indatasets.xmlwird auf alle gesetzt, weitere Informationen werden in der log.txt-Datei geschrieben.  

EDDGridVonEDDTable Skelett XML

 <dataset type="EDDGridFromEDDTable" datasetID\="..." active\="..." >
    <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
    <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
    <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
    <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
    <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1.
     For EDDGridFromEDDTable, this only works if the underlying EDDTable
     supports updateEveryNMillis. -->
    <gapThreshold>...</gapThreshold> <!-- 0 or 1. The default is 1000. >
    <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
    <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
    <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
    <iso19115File>...</iso19115File> <!-- 0 or 1 -->
    <onChange>...</onChange> <!-- 0 or more -->
    <addAttributes>...</addAttributes> <!-- 0 or 1 -->
    <axisVariable>...</axisVariable> <!-- 1 or more -->
    <dataVariable>...</dataVariable> <!-- 1 or more -->
    <dataset>...</dataset> <!-- The underlying source EDDTable dataset. -->
 </dataset>

EDD*FromERDDAP

EDDGridVon Erddap netzgebundene Daten von einer FernbedienungERDDAP™Server. EDDTableFromErddap behandelt tabellarische Daten von einer FernbedienungERDDAP™Server.

  • EDDGridFromErddap und EDDTableFromErddap verhalten sich anders als alle anderen Arten von Datensätzen inERDDAP.
    • Wie andere Arten von Datensätzen erhalten diese Datensätze Informationen über den Datensatz aus der Quelle und halten es im Speicher.
    • Wie andere Arten von Datensätzen, wennERDDAP™sucht nach Datensätzen, zeigt das Datenzugriffsformular an ( datasetID .html) , oder zeigt das Formular Make A Graph ( datasetID .graph) ,ERDDAP™verwendet die Information über den Datensatz, der im Speicher ist.
    • EDDGridVonErddap und EDDTable FromErddap ist die Basis fürNetz/Kunden/FöderationenvonERDDAPs, die die CPU-Nutzung effizient verteilen (meist für Kartenherstellung) , Speichernutzung, Datenspeicherung und Bandbreitennutzung eines großen Rechenzentrums.

Redirect

  • Im Gegensatz zu anderen Arten von Datensätzen, wennERDDAP™von diesen Datensätzen eine Anforderung an Daten oder Bilder erhält,ERDDAP Umleitungendie Anfrage an die FernbedienungERDDAP™Server. Das Ergebnis ist:
    • Dies ist sehr effizient (CPU, Speicher und Bandbreite) , weil sonst
      1. Der VerbundERDDAP™muss die Anfrage an den anderen sendenERDDAP™ (die Zeit braucht) .
      2. Der andereERDDAP™die Daten zu erhalten, zu reformieren und die Daten an den Verbund zu übermittelnERDDAP.
      3. Der VerbundERDDAP™muss die Daten empfangen (mit Bandbreite) , reformieren (mit CPU und Speicher) , und die Daten an den Benutzer übertragen (mit Bandbreite) . Durch Umleitung des Antrags und Genehmigung des anderenERDDAP™die Antwort direkt an den Benutzer zu senden, den VerbundERDDAP™verbringt im Wesentlichen keine CPU-Zeit, Speicher oder Bandbreite auf der Anfrage.
    • Die Umleitung ist für den Benutzer unabhängig von der Client-Software transparent (ein Browser oder ein anderes Software- oder Befehlszeilentool) .
  • Sie können es sagenERDDAP™keine Benutzerwünsche durch Einstellung umleiten<Umleitung>false</redirect>, aber diese negiert die meisten der Vorteile des ...FromErddap dataset Typs (insbesondere die Belastung des vorderen EndesERDDAP™in der Ferne/BackdERDDAP) .    

Abonnements

Normalerweise, wenn einEDDGridVonErddap und EDDTable Von Erddap sind (Wiederholen) beladen auf IhreERDDAP, sie versuchen, ein Abonnement zum Remote-Datensatz über die Fernbedienung hinzuzufügenERDDAP's E-Mail/URL Abonnement System. Auf diese Weise, wenn sich der Remote-Datensatz ändert, die FernbedienungERDDAP™KontaktePressemitteilungen Seite nicht gefundenauf deinerERDDAP™so dass der lokale Datensatz ASAP neu geladen wird und der lokale Datensatz immer perfekt aktuell ist und den Remote-Datensatz mimiert. So, das erste Mal, dass dies passiert, sollten Sie eine E-Mail anfordern, dass Sie das Abonnement validieren. jedoch, wenn die lokaleERDDAP™kann keine E-Mail senden oder wenn die FernbedienungERDDAP's E-Mail/URL-Abonnement-System ist nicht aktiv, Sie sollten die Fernbedienung e-MailERDDAP™verwalter und anfordern, dass s/he manuell hinzufügen [<onChange> (#onchange) ...</onChange>-Tags zu allen relevanten Datensätzen, um Ihren Datensatz zu nennenPressemitteilungen Flaggen-URL. Sehen Sie?ERDDAP™täglicher Bericht für eine Liste von setDataset Fahnen-URLs, aber senden Sie einfach die fürEDDGridFromErddap und EDDTableFromErddap-Datensätze zur FernbedienungERDDAP™Administrator.

Funktioniert das nicht? Sind Ihre lokalen Datensätze nicht mit den entfernten Datensätzen synchron? Mehrere Dinge müssen für dieses System korrekt funktionieren, damit Ihre Datensätze aktuell bleiben. Überprüfen Sie jedes dieser Dinge in Ordnung:

  1. IhrERDDAP™muss in der Lage sein, E-Mails auszusenden. Sehen Sie die E-Mail-Einstellungen in Ihrem setup.xml.
  2. Allgemein (aber nicht immer) , duERDDAP'<baseUrl> und<baseHttpsUrl>must keine Portnummer haben (:8080, :8443) . Wenn sie es tun, benutzen Sie eineProxypassden Hafen vom Url zu entfernen.
  3. In Ihrem Setup.xml,<abonnierenToRemoteErdddapDataset> muss auf true gesetzt werden.
  4. Wenn Ihr lokaler EDD... FromErddap-Datensatz wird neu geladen, es sollte eine Anfrage an die Fernbedienung sendenERDDAP™den Remote-Datensatz abonnieren. Sieh log.txt an, um zu sehen, ob das passiert.
  5. Sie sollten eine E-Mail, die Sie bitten, die Abonnement-Anfrage zu validieren.
  6. Sie müssen auf den Link in dieser E-Mail klicken, um die Abonnement-Anfrage zu validieren.
  7. Die FernbedienungERDDAP™sollte sagen, dass die Validierung erfolgreich war. Zu jeder Zeit können Sie eine E-Mail von der Fernbedienung anfordernERDDAP™mit einer Liste Ihrer ausstehenden und gültigen Abonnements. Siehe das Formular RemoteErddapBase Url /erddap/subscriptions/list.html .
  8. Wenn sich der Remote-Datensatz ändert (z.B. erhält zusätzliche Daten) , die FernbedienungERDDAP™sollte versuchen, das FlagURL auf IhremERDDAP. Sie können das nicht überprüfen, aber Sie können den Administrator der Fernbedienung fragenERDDAP™um das zu überprüfen.
  9. IhrERDDAP™eine Aufforderung zur Festlegung dieses FlagURL erhalten. Schauen Sie in Ihrem log.txt für "setDatasetFlag.txt?" Anfrage (S) und sehen, ob eine Fehlermeldung mit den Anfragen verknüpft ist.
  10. IhrERDDAP™sollte dann versuchen, diesen Datensatz neu zu laden (vielleicht nicht sofort, aber ASAP) .  

Aktuelles max (Zeit) ?

EDDGrid/TableFromErddap-Datensätze ändern nur ihre gespeicherten Informationen über jeden Quelldatensatz, wenn der Quelldatensatz"Reload"und einige Metadatenänderungen (z.B. die Zeitvariableactual\_range) , wodurch eine Abonnement-Benachrichtigung erzeugt wird. Hat der Quelldatensatz Daten, die sich häufig ändern (zum Beispiel neue Daten jede Sekunde) und nutzt die"update"System, um häufige Änderungen der zugrunde liegenden Daten zu bemerken,EDDGrid/TableFromErddap wird nicht über diese häufigen Änderungen informiert, bis der nächste Datensatz "Reload", also dieEDDGrid/TableFromErddap wird nicht perfekt auf dem neuesten Stand sein. Sie können dieses Problem durch Änderung des Quelldatensatzes minimieren<reloadEveryNMinutes> auf einen kleineren Wert (60? 15?) so dass es mehr Abonnement-Benachrichtigungen, um dieEDDGrid/TableFromErddap, um seine Informationen über den Quelldatensatz zu aktualisieren.

Oder wenn Ihr Datenmanagementsystem weiß, wann der Quelldatensatz neue Daten hat (z.B. über ein Skript, das eine Datendatei kopiert) , und wenn das nicht super häufig ist (z.B. alle 5 Minuten oder weniger häufig) Es gibt eine bessere Lösung:

  1. Nicht verwenden<updateEveryNMillis>, um den Quelldatensatz aktuell zu halten.
  2. Den Quelldatensatz festlegen<reloadEveryNMinutes> auf eine größere Anzahl (1440?) .
  3. Lassen Sie das Skript den Quelldatensatz kontaktierenZurück zur Übersichtrechts nachdem es eine neue Datendatei kopiert.  

Dies führt dazu, dass der Quelldatensatz perfekt aktuell ist und dazu führt, dass er eine Abonnement-Benachrichtigung generiert, die an dieEDDGrid/TableFromErddap Datensatz. Das führtEDDGrid/TableFromErddap-Datensatz ist perfekt auf dem neuesten Stand (gut, innerhalb von 5 Sekunden neue Daten hinzugefügt) . Und alles, was effizient getan wird (ohne unnötige Datensatz-Reloads) .  

NeinaddAttributes,axisVariable, oderdataVariable

Im Gegensatz zu anderen Arten von Datensätzen, EDDTableFromErddap undEDDGridFromErddap-Datensätze erlauben keine globale<addAttributes>,<axisVariable> oder<dataVariable> Abschnitte imdatasets.xmlfür diesen Datensatz. Das Problem besteht darin, dass es zu Unstimmigkeiten führen würde:

  1. Sagen wir, es war erlaubt und Sie haben ein neues globales Attribut hinzugefügt.
  2. Wenn ein Benutzer fragtERDDAP™für die globalen Attribute erscheint das neue Attribut.
  3. Aber wenn ein Benutzer fragtERDDAP™für eine Datendatei,ERDDAP™leitet die Anfrage an die Quelle umERDDAP. DasERDDAP™ist sich des neuen Attributs nicht bewusst. Wenn es also eine Datendatei mit Metadaten erstellt, z.B. a.ncDatei, die Metadaten haben nicht das neue Attribut.

Es gibt zwei Work-arounds:

  1. Überzeugen Sie den Admin der QuelleERDDAP™die Änderungen vorzunehmen, die Sie den Metadaten wünschen.
  2. Statt EDDTableFromErddap verwendenEDDTableFromDapSequenz. Oder stattEDDGridAusErdddap, verwendenEDDGridVonDap. Diese EDD-Typen ermöglichen es Ihnen, effizient mit einem Datensatz auf einem Remote zu verbindenERDDAP™ (aber ohne Umleitung von Datenanfragen) und sie ermöglichen es Ihnen, die globale<addAttributes>,<axisVariable> oder<dataVariable> Abschnitte imdatasets.xml. Ein anderer Unterschied: Sie müssen manuell den Remote-Datensatz abonnieren, so dass der Datensatz auf IhremERDDAP™wird notifiziert (über dieZurück zur Übersicht) wenn Änderungen am Remote-Datensatz vorhanden sind. So erstellen Sie einen neuen Datensatz, anstatt mit einem Remote-Datensatz zu verknüpfen.  

Anmerkungen

  • Aus SicherheitsgründenEDDGridVonErddap und EDDTable FromErdddap unterstützt nicht die [<zugänglichzu> (#accessibleto) tag und kann nicht mit Remote-Datensätzen verwendet werden, die einloggen müssen (weil sie verwenden [<zugänglichzu> (#accessibleto) ) Vgl.ERDDAP'Sicherheitssystemzur Einschränkung des Zugriffs auf einige Datensätze auf einige Benutzer.  
  • Beginnen mitERDDAP™v2.10,EDDGridFromErddap und EDDTableFromErdap unterstützen die [<zugänglichViaFiles>] (#accessibleviafiles) tag. Im Gegensatz zu anderen Arten von Datensätzen ist der Standard zwar zutreffend, aber die Dateien des Datensatzes werden nur dann zugänglich sein, wenn der Quelldatensatz auch<zugänglichViaFiles> auf true gesetzt.  
  • Sie können dieDatensätze generieren Xml Programmum diedatasets.xmlchunk für diese Art von Datensatz. Aber Sie können diese Arten von Datensätzen leicht von Hand.  

EDDGridVonErddap Skelett XML

  • EDDGridVonErddap Skelett XML-Datensatz ist sehr einfach, da die Absicht nur ist, den Remote-Datensatz zu mimieren, der bereits für den Einsatz 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 Skelett XML

  • Das skeleton XML für einen EDDTableFromErdap-Datensatz ist sehr einfach, da die Absicht nur den entfernten Datensatz mimieren soll, der bereits für den Einsatz 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>

EDDGridVon Etopo

EDDGridVon Etopo dient nurETOPO1 Global 1-Minute Gridded Eleved Datensatz (Eisoberfläche, Gitter registriert, binär, 2byte int: etopo1\_ice\_g\_i2.zip) die mitERDDAP.

  • Nur zweidatasetIDs werden unterstütztEDDGridFromEtopo, so dass Sie auf die Daten mit Längenwerten -180 bis 180 oder Längenwerte 0 bis 360 zugreifen können.
  • Es gibt niemals Sub-Tags, da die Daten bereits innerhalb beschrieben werdenERDDAP.
  • Also die beiden Optionen fürEDDGridFromEtopo-Datensätze sind (wörtlich) :
      <!-- 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" />

EDDGridVonFiles

EDDGridVonFiles ist die Superklasse von allenEDDGridVon...Files-Kursen. Sie können nicht verwendenEDDGridVonFiles direkt. Verwenden Sie stattdessen eine Unterklasse vonEDDGridVonFiles zum Umgang mit dem spezifischen Dateityp:

Derzeit werden keine anderen Dateitypen unterstützt. Aber es ist in der Regel relativ einfach, Unterstützung für andere Dateitypen hinzuzufügen. Kontaktieren Sie uns, wenn Sie eine Anfrage haben. Oder, wenn Ihre Daten in einem alten Dateiformat sind, von dem Sie wegziehen möchten, empfehlen wir, die Dateien zu konvertierenNetCDFV3.ncDateien.NetCDFist ein breit unterstütztes, binäres Format, ermöglicht schnellen Zugriff auf die Daten und wird bereits vonERDDAP.

Von Dateien Details

Die folgenden Informationen gelten für alle Unterklassen vonEDDGridVonFiles.

Aggregation einer vorhandenen Dimension

Alle VariationenEDDGridFromFiles kann Daten aus lokalen Dateien zusammenfassen, wobei jede Datei 1 (oder mehr) unterschiedliche Werte für links (erste) Dimension, in der Regel\[Zeit\], die aggregiert werden. Beispielsweise könnten die Abmessungen\[Zeit\]\[Höhe\]\[Breite\]\[Länge\], und die Dateien können die Daten für eine (oder ein paar) Zeitwert (S) pro Datei. Der resultierende Datensatz erscheint, als ob alle Daten der Datei zusammengefasst wurden. Die großen Vorteile der Aggregation sind:

  • Die Größe des aggregierten Datensatzes kann viel größer sein als eine einzelne Datei kann bequem sein (~2GB) .
  • Für Nah-Real-Time-Daten ist es einfach, eine neue Datei mit dem neuesten Datenklumpen hinzuzufügen. Sie müssen den gesamten Datensatz nicht neu schreiben.

Die Aggregationsanforderungen sind:

  • Die lokalen Dateien müssen nicht die gleichen habendataVariableS (wie im Datensatz definiertdatasets.xml) . Der Datensatz wirddataVariables definiert indatasets.xml. Wenn eine bestimmte Datei keine gegebene Datei hatdataVariable,ERDDAP™wird bei Bedarf fehlende Werte hinzufügen.
  • AlledataVariableUMWELTaxisVariables/Dimensionen (wie im Datensatz definiertdatasets.xml) . Die Dateien werden basierend auf dem ersten aggregiert (links-most) Dimension, in aufsteigender Reihenfolge sortiert.
  • Jede Datei MAY hat Daten für einen oder mehrere Werte der ersten Dimension, aber es kann keine Überschneidung zwischen Dateien sein. Wenn eine Datei mehr als einen Wert für die erste Dimension hat, werden die Werte MUST in aufsteigender Reihenfolge sortiert, ohne Krawatten.
  • Alle Dateien haben genau die gleichen Werte für alle anderen Dimensionen. Die Genauigkeit der Prüfung wird durchMatchAxisNDigits.
  • Alle Dateien haben genau das gleicheEinheitenMetadaten für alleaxisVariables unddataVariableS. Wenn dies ein Problem ist, können SieNcMLoderNCOum das Problem zu beheben.  
Aggregation über Dateinamen oder globale Metadaten

Alle VariationenEDDGridFromFiles kann auch eine Gruppe von Dateien aggregieren, indem ein neues linkmost (erste) Dimension, in der Regel Zeit, basierend auf einem Wert, der von jedem Dateinamen oder vom Wert eines globalen Attributs abgeleitet wird, das in jeder Datei ist. Beispielsweise kann der Dateiname den Zeitwert für die Daten in der Datei enthalten.ERDDAP™würde dann eine neue Zeitdimension schaffen.

Im Gegensatz zu der ähnlichen Funktion in THREDDS,ERDDAP™immer schafftaxisVariablemit Zahlenwerten (nach Bedarf durch CF) , nie String Werte (die von CF nicht zugelassen werden) . Auch,ERDDAP™wird die Dateien in der Aggregation basierend auf der numerischenaxisVariableWert, der jeder Datei zugeordnet ist, so dass die Achsgröße immer sortierte Werte nach CF haben wird. Der THREDDS-Ansatz, basierend auf den Dateinamen eine lexicographische Sortierung durchzuführen, führt zu Aggregationen, bei denen die Achsenwerte nicht sortiert werden (die von CF nicht zugelassen werden) wenn die Dateinamen anders sortieren als die abgeleitetenaxisVariableWerte.

Um eine dieser Aggregate einzurichtenERDDAP™, Sie definieren ein neues linkmost (erste) axisVariablemit einem speziellen Pseudo<sourceName>, dieERDDAP™wo und wie man den Wert für die neue Dimension aus jeder Datei findet.

  • Das Format für das PseudosourceNameder den Wert eines Dateinamens erhält (nur Dateiname.ext) ist \\( DateiName, Daten Typ , ExtraktRegex , FanggruppeAnzahl*
  • Das Format für das PseudosourceNamedie den Wert von dem absoluten Pfadnamen einer Datei erhält \\( PfadName, Daten Typ , ExtraktRegex , FanggruppeAnzahl* \[Dazu verwendet der Pfadname immer'/'als Verzeichniszeichen, nie ''.\]
  • Das Format für das PseudosourceNamedie den Wert eines globalen Attributs erhält \\( global: Eigenschaften Name , Daten Typ , ExtraktRegex , FanggruppeAnzahl*
  • Dieses PseudosourceNameDie Option funktioniert anders als die anderen: anstatt ein neues linkmost zu erstellen (erste) axisVariable, dies ersetzt den Wert des StromsaxisVariablemit einem Wert aus dem Dateinamen (nur Dateiname.ext) . Das Format ist \\( ersetzen FromFileName, Daten Typ , ExtraktRegex , FanggruppeAnzahl*  

Die Beschreibungen der zu liefernden Teile sind:

  • Eigenschaften Name -- der Name des globalen Attributs, das in jeder Datei ist und den Dimensionswert enthält.
  • Daten Typ -- Dies gibt den Datentyp an, mit dem die Werte gespeichert werden. Siehe die StandardlisteDaten ArtendassERDDAP™unterstützt, außer dass String hier nicht erlaubt ist, da Achsengrößen inERDDAP™kann nicht String-Variablen sein.

Es gibt einen zusätzlichen PseudodatenTyp, timeFormat= Zeichen Zeitformat , was sagtERDDAP™dass der Wert ein String timeStamp istEinheiten geeignet für Stringzeiten. In den meisten Fällen wird das stringTimeFormat, das Sie benötigen, eine Variation eines dieser Formate sein:

  • yyyy-MM-dd'T'HH:mm:ss.SSSZ -- die ISO 8601:2004 (E) Datum Zeitformat. Sie können eine verkürzte Version davon benötigen, z.B.yyyy-MM-dd'T'HH:mm:ss oderyyyy-MM-dd.
  • yyyyMMddHHmmss.SSS -- die kompakte Version des ISO 8601 Datumsformats. Sie können eine verkürzte Version dieser benötigen, z.B. yyyyMMdHHmmss oder yyyyMMddd.
  • M/d/yyyy H:mm:ss.SSS -- das ist das US-Slash-Datumsformat. Sie können eine verkürzte Version dieser, z.B. M/d/yyyy benötigen.
  • yyyyDDDHHmmsSSS -- das ist das Jahr plus der null-gepolsterte Tag des Jahres (z.B. 001 = Jan 1, 365 = Dec 31 in einem Nicht-Leap-Jahr; dies wird manchmal irrtümlich als das Julianische Datum bezeichnet) . Sie können eine verkürzte Version dieser benötigen, z.B. yyyyDDD .

Wenn Sie diesen Pseudodatentyp verwenden, fügen Sie diese der neuen Variablen hinzu<addAttributes>

        <att name="units">seconds since 1970-01-01T00:00:00Z</att>  

Wenn Sie alle Zeitwerte verschieben möchten, verschieben Sie den Zeitwert in Einheiten, z. 1970-01T12:00Z.

  • ExtraktRegex -- Das ist dieregelmäßiger Ausdruck (Tutorial) die eine Fanggruppe umfasst (in Klammern) die beschreibt, wie der Wert aus dem Dateinamen oder dem globalen Attributwert extrahiert wird. Zum Beispiel bei einem Dateinamen wie S19980011998031.L3b\_MO\_CHL.nc, Fanggruppe #1, "\dTutorial", im regulären Ausdruck S ((\dTutorial) (\dTutorial\.L3b.\* erfasst die ersten 7 Ziffern nach 'S': 1998001.
  • FanggruppeNumber -- Dies ist die Anzahl der Fanggruppe (innerhalb eines Klammerpaares) im regelmäßigen Ausdruck, der die Informationen von Interesse enthält. Es ist in der Regel 1, die erste Fanggruppe. Manchmal müssen Sie Capture-Gruppen für andere Zwecke im Regex verwenden, so dass dann die wichtige Capture-Gruppe Nummer 2 (die zweite Fanggruppe) oder 3 (die dritte) , usw.

Ein vollständiges Beispiel einesaxisVariabledie einen aggregierten Datensatz mit einer neuen Zeitachse macht, die die Zeitwerte aus dem Dateinamen jeder Datei erhält

      <axisVariable>
<sourceName>\\*\\*\\*fileName,timeFormat=yyyyDDD,S(\\d{7})\\.L3m.\\*,1</sourceName>
<destinationName>time</destinationName>
</axisVariable>

Wenn Sie die Pseudodaten "timeFormat=" verwenden Art,ERDDAP™2 Attribute zu demaxisVariableso dass sie von der Quelle kommen scheinen:

    <att name="standard\\_name">time</att>  
<att name="units">seconds since 1970-01-01T00:00:00Z</att>

Also in diesem Fall,ERDDAP™eine neue Achse namens"time"mit Doppelwerten (Sekunden seit 1970-0100:00Z) durch Extrahieren der 7 Ziffern nach 'S' und vor ".L3m" im Dateinamen und Dolmetschen der als yyyyDDD formatierten Zeitwerte.

Sie können die Standard-Basiszeit überschreiben (1970-01T00:00 UhrZ) durch Hinzufügen einesAddAttributedie ein anderes Einheitenattribut mit einer anderen Basiszeit angibt. Eine häufige Situation ist: Es gibt Gruppen von Datendateien, jede mit einem 1 Tag zusammengesetzt eines Satellitendatensatzes, wo Sie wollen, dass der Zeitwert Mittag des im Dateinamen genannten Tages sein (die zentrierte Zeit jedes Tages) und wollen die Variablelong\_name"Mitte Zeit" zu sein. Ein Beispiel dafür ist:

      <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>

Anmerkung Stunden=12 in der Basiszeit, die 12 Stunden relativ zur ursprünglichen Basiszeit von 1970-01-01T00:00Z addiert.

Ein vollständiges Beispiel einesaxisVariabledie einen aggregierten Datensatz mit einer neuen "run" Achse macht (mit Int-Werten) die die Run-Werte aus dem "runID" globalen Attribut in jeder Datei erhält (mit Werten wie "r17\_global", wobei 17 die Laufnummer ist) ist

      <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>

Beachten Sie die Verwendung der Erfassungsgruppe Nummer 2 zur Erfassung der nach 'r' oder 's' auftretenden Stellen und vor "\_global". Dieses Beispiel zeigt auch, wie man zusätzliche Attribute hinzufügt (z.B.,ioos\_categoryund Einheiten) zur Achsgröße.  

Extern komprimierte Dateien

  • Datensätze, die Teilmengen vonEDDGridVonFiles und EDDTable FromFiles kann Daten direkt von extern komprimierten Datendateien, einschließlich.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2, und .Z Dateien.  

  • Das funktioniert überraschend gut!
    In den meisten Fällen ist die Verlangsamung im Zusammenhang mit der Dekomprimierung kleiner und mittlerer Dateien gering. Wenn Sie Speicherplatz benötigen, empfehlen wir die Verwendung dieser Funktion, insbesondere für ältere Dateien, die selten aufgerufen werden.  

  • Sparen Sie Geld!
    Dies ist eine der wenigen Features inERDDAP™das bietet Ihnen eine Chance, viel Geld zu sparen (obwohl zu den Kosten der leicht verringerten Leistung) . Ist das Kompressionsverhältnis z.B. 6:1 (manchmal wird es viel höher) , dann werden die Datendateien des Datensatzes nur 1/6 des Speicherplatzes benötigen. Dann können Sie vielleicht mit 1 RAID (einer bestimmten Größe) anstatt 6 RAIDS (der gleichen Größe) . Das ist eine enorme Kostenersparnis. Hoffentlich die Fähigkeit, einige Dateien in einer Sammlung zu komprimieren (die älteren?) und nicht komprimieren andere (die neueren?) , und um das jederzeit zu ändern, lassen Sie uns den Nachteil minimieren, einige der Dateien zu komprimieren (langsamer Zugang) . Und wenn die Wahl zwischen dem Speichern der Dateien auf Band (und nur auf Anfrage nach einer Verzögerung zugänglich) vs speichern sie komprimiert auf einem RAID (und viaERDDAP) , dann gibt es einen großen Vorteil mit Kompression, so dass Benutzer interaktiv und (relativ) schnellen Zugriff auf die Daten. Und wenn dies Sie vor dem Kauf einer zusätzlichen RAID speichern kann, kann diese Funktion Sie ungefähr $30.000 speichern.  

  • Für alleEDDGridFromFiles Subclasses, wenn die Datendateien eine Erweiterung haben, die angibt, dass sie extern komprimierte Dateien sind (aktuell:.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2oder .Z) ,ERDDAP™dekomprimiert die Dateien in das Cache-Verzeichnis des Datensatzes, wenn es sie liest (wenn sie nicht schon im Cache sind) . Das gleiche gilt für binäre Datei (z.B.,.nc) Unterklassen von EDDTableFromFiles.  

  • Für EDDTableFromFiles Unterklassen für nicht-binäre Dateien (z.B., .csv) , Datendateien mit einer Erweiterung, die angeben, dass sie extern komprimierte Dateien sind, werden beim Lesen der Datei auf-the-fly komprimiert.  

  • ANFORDERUNG: Wenn die Art der extern komprimierten Datei verwendet wird (z.B.,.tgzoder.zip) unterstützt mehr als 1 Datei innerhalb der komprimierten Datei, die komprimierte Datei muss nur 1 Datei enthalten.  

  • ANFORDERUNG: Diese Funktion geht davon aus, dass sich der Inhalt der extern komprimierten Dateien nicht ändert, so dass eine cached dekomprimierte Datei wieder verwendet werden kann. Wenn einige oder alle Datendateien eines Datensatzes manchmal geändert werden, komprimieren Sie diese Dateien nicht. Dies entspricht der gemeinsamen Nutzung, da Menschen normalerweise keine Dateien komprimieren, die sie manchmal ändern müssen.  

  • <DateiNameRegex> Um diese Arbeit zu machen, ist der Datensatz<fileNameRegex> muss den Namen der komprimierten Dateien entsprechen. Natürlich, regexes wie .\wird alle Dateinamen entsprechen. Wenn Sie einen bestimmten Dateityp angeben, z.B., .\\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.nc, dann müssen Sie den Regex ändern, um die Kompressionserweiterung zu enthalten, z.B., .\ \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.nc\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.gz(wenn alle Dateien werden Was?.nc.gzDateien) .  

  • Es ist gut, wenn Ihr Datensatz eine Mischung aus komprimierten und nicht komprimierten Dateien enthält. Dies kann nützlich sein, wenn Sie glauben, dass einige Dateien (z.B. ältere Dateien) wird weniger oft verwendet werden und daher wäre es nützlich, Speicherplatz durch Zusammendrücken zu speichern. Um diese Arbeit zu machen, die<fileNameRegex> muss den komprimierten und nicht komprimierten Dateien Namen entsprechen, z.B. .\oder\\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.nc (|\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.gz) (wo die Fanggruppe am Ende davon angibt, dass.gzist optional.  

  • Es ist in Ordnung, wenn Sie bestimmte Dateien in der Sammlung jederzeit komprimieren oder dekomprimieren. Wenn der Datensatz nicht verwendet wird [<UpdateEveryNMillis>] (#updateeverynmillis) , den Datensatz einstellenFlaggezu sagenERDDAP™um den Datensatz neu zu laden und so die Änderungen zu bemerken. Interessanterweise können Sie verschiedene Kompressionsalgorithmen und Einstellungen für verschiedene Dateien im gleichen Datensatz verwenden (z.B.,.bz2für selten verwendete Dateien,.gzfür nicht häufig verwendete Dateien und keine Komprimierung für häufig verwendete Dateien) , stellen Sie einfach sicher, dass der regex alle in Gebrauch befindlichen Dateierweiterungen unterstützt, z.B. .\*\.nc (|\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.gz|\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \\\\\\\\\\\\\\\\\\\\\\.bz2) .  

  • Selbstverständlich variieren Kompressionsverhältnisse und Geschwindigkeiten für die verschiedenen Kompressionsalgorithmen mit der Quelldatei und den Einstellungen (z.B. Druckniveau) . Wenn Sie dieses System für Ihre Dateien optimieren möchten, machen Sie einen Test der verschiedenen Kompressionsmethoden mit Ihren Dateien und mit einer Reihe von Kompressionseinstellungen. Wenn Sie sicher gut wollen (nicht unbedingt das Beste) Setup, wir werden leicht empfehlengzip (.gz) .gzipmacht die kleinste komprimierte Datei nicht (es ist ziemlich nah) , aber es komprimiert die Datei sehr schnell und (wichtiger fürERDDAP™Benutzer) dekomprimiert die Datei sehr schnell. Plus,gzipSoftware kommt standardmäßig mit jeder Linux- und Mac OS-Installation und ist für Windows über kostenlose Tools wie 7Zip und Linux Add-ons wie Git Bash verfügbar. Zum Beispiel, um eine Quelldatei in die.gzVersion der Datei (gleichen Dateinamen, aber mit.gzanhängig) , Verwendung (in Linux, Mac OS und Git Bash)
    gzip sourceName
    Um eine.gzzurück zum Original, verwenden Pistolenverschluss sourceName.gz
    Um jede der Quelldateien im Verzeichnis und seinen Unterverzeichnissen zu komprimieren, verwenden Sie gzip-r RegieName
    Um jeden der.gzDateien im Verzeichnis und dessen Unterverzeichnisse, wiederkehrend, verwenden Reißverschlüsse RegieName
     

  • WARNING: Nicht extern komprimieren (gzip) Dateien, die bereits intern komprimiert sind! Viele Dateien haben bereits komprimierte Daten intern. Wenn Siegzipdiese Dateien, die resultierenden Dateien werden nicht viel kleiner sein (<5 % undERDDAP™wird Zeit verlieren, sie zu dekomprimieren, wenn es sie lesen muss. Zum Beispiel:

    • Datendateien: z..nc4 und.hdf5 Dateien: Einige Dateien verwenden interne Kompression; einige nicht. Wie zu sagen: komprimierte Variablen haben "\_ChunkSize" Attribute. Auch, wenn eine Gruppe von Gittern.ncoder.hdfDateien sind alle unterschiedlichen Größen, sie sind wahrscheinlich intern komprimiert. Sind sie alle gleich groß, werden sie nicht intern komprimiert.

    • Bilddateien: z.B. .gif, .jpg und .png

    • Audiodateien: z.B. .mp3, und .ogg.

    • Videodateien: z.B. .mp4, .ogv und .webm.

Ein unglücklicher seltsamer Fall: .wav Audiodateien sind riesig und nicht intern komprimiert. Es wäre schön zu komprimieren (gzip) Sie, aber in der Regel sollten Sie nicht, weil, wenn Sie tun, Benutzer nicht in der Lage, die komprimierten Dateien in ihrem Browser zu spielen.  

  • Testfall: Komprimierung (mitgzip) ein Datensatz mit 1523 gerastet.ncDateien.

    • Die Daten in den Quelldateien waren spärlich (viele fehlende Werte) .
    • Der gesamte Speicherplatz ging von 57 GB vor der Kompression auf 7 GB nach.
    • Eine Anfrage für viele Daten ab einem Zeitpunkt ist<1 s vor und nach der Kompression.
    • Eine Anfrage an 1 Datenpunkt für 365 Zeitpunkte (die schlimmste Situation) von 4 s auf 71 s.  

Für mich ist das ein vernünftiger Kompromiss für jeden Datensatz, und sicherlich für Datensätze, die selten verwendet werden.  

  • Interne gegen externe Kompression -- Im Vergleich zur internen Dateikompression, die von.nc4 und.hdf5 Dateien,ERDDAP's Ansatz für extern komprimierte binäre Dateien hat Vorteile und Nachteile. Der Nachteil ist: Zum einen ist die interne Komprimierung eines kleinen Teils einer Datei besser, weilEDDGridFromFiles muss nur ein paar Stück dekomprimieren (S) der Datei, nicht die gesamte Datei. Aber...ERDDAP's Ansatz hat einige Vorteile:

    • ERDDAP™unterstützt die Komprimierung aller Arten von Dateien (binär und nichtbinär, z..nc3 und csv) nicht nur.nc4 und.hdf4.
    • Wenn der Großteil einer Datei mehr als einmal in kurzer Zeit gelesen werden muss, spart es Zeit, die Datei einmal zu dekomprimieren und mehrmals zu lesen. Das passiert.ERDDAP™wenn ein Benutzer Make-A-Graph für den Datensatz verwendet und eine Reihe von kleinen Änderungen im Diagramm macht.
    • Die Fähigkeit, komprimierte Dateien und nicht komprimierte Dateien in derselben Sammlung zu haben, ermöglicht Ihnen mehr Kontrolle darüber, welche Dateien komprimiert werden und welche nicht. Und diese zusätzliche Kontrolle kommt ohne wirklich die Quelldatei ändern (da Sie eine Datei mit z.B. komprimieren können,.gzund dann dekomprimieren es, um die ursprüngliche Datei zu erhalten) .
    • Die Fähigkeit, jederzeit zu ändern, ob eine bestimmte Datei komprimiert wird und wie sie komprimiert wird (verschiedene Algorithmen und Einstellungen) gibt Ihnen mehr Kontrolle über die Leistung des Systems. Und Sie können leicht die ursprüngliche unkomprimierte Datei jederzeit wiederherzustellen.

Während weder Ansatz ein Gewinner in allen Situationen ist, ist klar, dassERDDAPDie Fähigkeit, Daten von extern komprimierten Dateien zu bedienen, macht die externe Komprimierung zu einer vernünftigen Alternative zur internen Komprimierung, die von.nc4 und.hdf5. Das ist wichtig, da die interne Komprimierung einer der Hauptgründe ist, aus denen die Menschen wählen, zu verwenden.nc4 und.hdf5.  

Dekomprimiert Cache

ERDDAP™macht eine dekomprimierte Version jeder komprimierten binären (z.B.,.nc) Datendatei, wenn sie die Datei lesen muss. Die dekomprimierten Dateien werden innerhalb des Verzeichnisses des Datensatzes gespeichert BigParentDirectory /dekomprimiert/ . Dekomprimierte Dateien, die vor kurzem nicht verwendet wurden, werden gelöscht, um Platz zu freizuschalten, wenn die kumulative Dateigröße >10GB ist. Sie können das durch Einstellung ändern<dekomprimiertCacheMaxGB> (Standardeinstellungen) in Datensätzen Xml.xml, z.

        <decompressedCacheMaxGB>40</decompressedCacheMaxGB>  

Auch dekomprimierte Dateien, die in den letzten 15 Minuten nicht verwendet wurden, werden zu Beginn jedes großen Datensatz-Reloads gelöscht. Sie können das durch Einstellung ändern<dekomprimiertCacheMaxMinutesAlt> (Standardeinstellungen) in Datensätzen Xml.xml, z.

        <decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>  

Größere Zahlen sind nett, aber die kumulative Größe der dekomprimierten Dateien kann verursachen BigParentDirectory aus dem Festplattenraum zu laufen, was schwere Probleme verursacht.  

  • Weil eine Datei dekomprimiert kann eine erhebliche Zeit dauern (0,1 bis 10 Sekunden) , Datensätze mit komprimierten Dateien können von der Einstellung des Datensatzes profitieren [<nThreads>] (#nthreads) Einstellung zu einer höheren Zahl (2? 3? 4?) . Die Nachteile zu noch höheren Zahlen (z.B. 5? 6? 7?) schwächende Renditen sind und dass die Anfrage eines Benutzers dann einen hohen Prozentsatz der Ressourcen des Systems verwenden kann, wodurch die Bearbeitung der Anfragen anderer Benutzer erheblich verlangsamt wird. So gibt es keine ideale nThreads Einstellung, nur verschiedene Konsequenzen in verschiedenen Situationen mit unterschiedlichen Einstellungen.  

Sortierte Maßwerte

Die Werte für jede Dimension MUST sind in sortierter Reihenfolge (aufsteigend oder absteigend, mit Ausnahme der ersten (links-most) Dimension, die aufsteigen muss) . Die Werte können unregelmäßig beabstandet sein. Es gibt keine Krawatten. Dies ist eine Forderung derCF metadata standard. Wenn die Werte der Dimension nicht in sortierter Reihenfolge sind, wird der Datensatz nicht geladen undERDDAP™den ersten ungebrochenen Wert in der Protokolldatei identifizieren, BigParentDirectory /logs/log.txt .

Unsortierte Dimensionswerte geben fast immer ein Problem mit dem Quelldatensatz an. Dies geschieht am häufigsten, wenn in der Aggregation eine fehlerhafte oder unangemessene Datei enthalten ist, die zu einer ungestörten Zeitdimension führt. Um dieses Problem zu lösen, siehe die Fehlermeldung in derERDDAP™log.txt Datei, um den absteigenden Zeitwert zu finden. Dann schauen Sie in die Quelldateien, um die entsprechende Datei zu finden (oder vor oder nach) Das gehört nicht zur Aggregation.

Verzeichnisse

Die Dateien MAY sind in einem Verzeichnis oder in einem Verzeichnis und seinen Unterverzeichnissen (rekursiv) . Wenn es eine große Anzahl von Dateien (zum Beispiel > 1.000) , das Betriebssystem (und damitEDDGridVonFiles) wird viel effizienter arbeiten, wenn Sie die Dateien in einer Reihe von Unterverzeichnissen speichern (eins pro Jahr, oder eins pro Monat für Datensätze mit sehr häufigen Dateien) , so dass es nie eine große Anzahl von Dateien in einem bestimmten Verzeichnis.  

<ccheFromUrl>

AlleEDDGridFromFiles und alle EDDTableFromFiles-Datensätze unterstützen eine Reihe von Tags, die sagenERDDAP™eine Kopie aller Dateien eines entfernten Datensatzes herunterladen und aufrecht erhalten, oder einen Cache von wenigen Dateien (nach Bedarf heruntergeladen) . Das kann unglaublich nützlich sein. SieheCache VonUrl Dokumentation.

Remote Directories und HTTP Range Requests

(AKA Byte Servieren, Byte Range Anfragen, Akzept-RangeshttpKopf)
EDDGridVonNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles und EDDTableFromNcCFFiles, kann manchmal Daten von.ncDateien auf Remoteservern und über HTTP aufgerufen, wenn der Server unterstütztByte Servierenüber HTTP-Bereichsanfragen (der HTTP-Mechanismus für Byte-Dienst) . Dies ist möglich, weil netcdf-java (dieERDDAP™Anwendungen zum Lesen.ncDateien) unterstützt Lesedaten von Remote.ncDateien über HTTP-Bereichsanfragen.

Tu das nicht! Es ist schrecklich ineffizient und langsam. Verwenden Sie stattdessen die [<cacheFromUrl> System) (#cachefromurl) .

ZugangERDDAP™datasets als Dateien über Byte range Requests -- Wenn du das hier umdrehst, (in der Theorie) einen Datensatz inERDDAP™als Riese.ncDatei per Appending ".nc" zur Basis OPenDAPURL für einen bestimmten Datensatz (z.B., https://myserver.org/erddap/griddap/datasetID.nc und auch durch Hinzufügen einer ?query danach eine Untermenge angeben) , es ist vielleicht vernünftig zu fragen, ob Sie netcdf-java verwenden können,Ferret, oder andereNetCDFClient-Software zum Lesen von Daten über HTTP Range Anfragen vonERDDAP. Die Antwort ist nein, denn es gibt nicht wirklich eine riesige ".nc" Datei. Wenn Sie dies tun möchten, tun Sie stattdessen eine dieser Optionen:

  • Verwendung(OPeN)DAPClient-Software zur Verbindung mit den vonERDDAP. Das ist, wasDAP (und damitERDDAP) wurde entworfen. Es ist sehr effizient.
  • Oder die Quelldatei herunterladen (S) von"files"System (oder eine Subsetdatei über eine.nc? Anfrage) auf Ihren Computer und verwenden netcdf-java,Ferret, oder andereNetCDFClient-Software zum Lesen der (Jetzt) lokale Datei (S) .  

Gespeicherte Dateiinformationen

WennEDDGridFromFiles-Datensatz wird zuerst geladen,EDDGridFromFiles liest Informationen aus allen relevanten Dateien und erstellt Tabellen (eine Zeile für jede Datei) mit Informationen über jede gültige Datei und jedes "bad" (anders oder ungültig) Datei.

  • Die Tabellen werden auch auf der Festplatte gespeichert, wieNetCDFV3.ncDateien in BigParentDirectory /Datensatz/ Letzte2CharsOfDatasetID / datasetID / in Dateien benannt: schmutzig.nc (die eine Liste der eindeutigen Verzeichnisnamen enthält) , Datei Tabelle.nc (die die Tabelle mit den Informationen jeder gültigen Datei hält) , BadFiles.nc (die die Tabelle mit den Informationen jeder schlechten Datei hält) .
  • Um den Zugang zu einem zu beschleunigenEDDGridVonFiles-Datensatz (aber auf Kosten der Verwendung von mehr Speicher) , Sie können verwenden

true
zu sagenERDDAP™eine Kopie der Dateiinformationstabellen im Speicher zu halten.

  • Die Kopie der Datei-Informationstabellen auf der Festplatte ist auch nützlich, wennERDDAP™wird geschlossen und neu gestartet: es spartEDDGridVonFiles, alle Datendateien neu zu lesen.
  • Wenn ein Datensatz neu geladen wird,ERDDAP™muss nur die Daten in neuen Dateien und Dateien lesen, die sich geändert haben.
  • Wenn eine Datei eine andere Struktur als die anderen Dateien hat (beispielsweise einen anderen Datentyp für eine der Variablen oder einen anderen Wert für die "Einheiten" Attribut) ,ERDDAPfügt die Datei in die Liste der "schlechten" Dateien. Informationen Ã1⁄4ber das Problem mit der Datei werden in der BigParentDirectory /logs/log.txt Datei.
  • Sie sollten nie mit diesen Dateien löschen oder arbeiten müssen. Eine Ausnahme ist: wenn Sie noch Änderungen an einem Datensatz vornehmendatasets.xmlsetup, Sie können diese Dateien löschen möchten, um zu zwingenERDDAP™alle Dateien neu zu lesen, da die Dateien anders gelesen/interpretiert werden. Wenn Sie jemals diese Dateien löschen müssen, können Sie es tun, wennERDDAP™läuft. (Dann setzen Sie einFlaggeum den Datensatz ASAP neu zu laden.) AllerdingsERDDAP™in der Regel bemerkt, dassdatasets.xmlInformationen passen nicht zur Datei Tabelleninformationen und löschen die Dateitabellen automatisch.
  • Wenn Sie fördern möchtenERDDAP™zur Aktualisierung der gespeicherten Datensatzinformationen (zum Beispiel, wenn Sie gerade hinzugefügt, entfernt oder geändert einige Dateien in das Datenverzeichnis des Datensatzes) , benutzen Sie dieFlaggensystemin KraftERDDAP™um die Cache-Dateiinformationen zu aktualisieren.  

Bearbeitungsanforderungen

Wenn die Datenanforderung eines Clients bearbeitet wird,EDDGridFromFiles kann schnell in der Tabelle mit den gültigen Dateiinformationen sehen, welche Dateien die angeforderten Daten haben.  

Aktualisierung der Cached File Information

Wenn der Datensatz neu geladen wird, wird die geätzte Dateiinformation aktualisiert.

  • Der Datensatz wird, wie durch die<reloadEveryNMinutes> in den Informationen des Datensatzes indatasets.xml.
  • Der Datensatz wird so schnell wie möglich nachgeladen, wennERDDAP™erkennt, dass Sie hinzugefügt, entfernt,anfassend (um die letzte Datei zu ändern Geänderte Zeit) , oder eine Datendatei geändert.
  • Der Datensatz wird so schnell wie möglich nachgeladen, wenn Sie denFlaggensystem.

Wenn der Datensatz neu geladen wird,ERDDAP™vergleicht die aktuell verfügbaren Dateien mit den Cache-Datei-Informationstabellen. Neue Dateien werden gelesen und der gültigen Dateitabelle hinzugefügt. Dateien, die nicht mehr vorhanden sind, werden von der gültigen Dateitabelle fallen gelassen. Dateien, in denen sich der Dateizeitstempel geändert hat, werden gelesen und ihre Informationen werden aktualisiert. Die neuen Tabellen ersetzen die alten Tabellen im Speicher und auf der Festplatte.  

Schlechte Dateien

Die Tabelle der schlechten Dateien und die Gründe, die die Dateien für schlecht erklärt wurden (beschädigte Datei, fehlende Variablen, etc.) wird an die E-Mail geschickt Alles Zur E-Mail-Adresse (wahrscheinlich du) jedes Mal, wenn der Datensatz neu geladen wird. Sie sollten diese Dateien so schnell wie möglich ersetzen oder reparieren.  

Fehlende Variablen

Wenn einige der Dateien nicht einige derdataVariables definiert im Datensatzdatasets.xmlchunk, das ist okay. WannEDDGridFromFiles liest eine dieser Dateien, es wird als ob die Datei die Variable, aber mit allen fehlenden Werten.  

FTP-Fehler/Advice

Wenn Sie FTP neue Datendateien an dieERDDAP™Server währendERDDAP™es läuft, es besteht die Chance,ERDDAP™wird den Datensatz während des FTP-Prozesses neu geladen. Es passiert öfter, als Sie denken könnten! Wenn es passiert, erscheint die Datei gültig (es hat einen gültigen Namen) , aber die Datei ist noch nicht gültig. wennERDDAP™versucht, Daten aus dieser ungültigen Datei zu lesen, der resultierende Fehler wird dazu führen, dass die Datei in der Tabelle der ungültigen Dateien hinzugefügt wird. Das ist nicht gut. Um dieses Problem zu vermeiden, verwenden Sie einen temporären Dateinamen, wenn FTP die Datei, zum Beispiel ABC2005.nc\_TEMP . Dann der DateiNameRegex-Test (siehe unten) wird angeben, dass dies keine relevante Datei ist. Nachdem der FTP-Prozess abgeschlossen ist, umbenennen Sie die Datei in den richtigen Namen. Der Umbenennvorgang bewirkt, dass die Datei in einem Augenblick relevant wird.  

"0 Dateien" Fehlermeldung

Wenn SieGenerateDatasetsXmloderDasDds, oder wenn Sie versuchen, eineEDDGridVon...Files dataset inERDDAP™, und Sie erhalten eine "0 Dateien" Fehlermeldung, dassERDDAP™gefunden 0 passende Dateien im Verzeichnis (wenn Sie denken, dass es passende Dateien in diesem Verzeichnis) :

  • Überprüfen Sie, ob die Dateien wirklich in diesem Verzeichnis sind.
  • Überprüfen Sie die Rechtschreibung des Verzeichnisnamens.
  • Überprüfen Sie die DateiNameRegex. Es ist wirklich, wirklich einfach, Fehler mit Regexes zu machen. Für Testzwecke, versuchen Sie die regex .\*, die alle Dateinamen entsprechen sollte. (Sieheregex dokumentationundNach oben.)
  • Überprüfen Sie, ob der Benutzer, der das Programm läuft (z.B., user=tomcat (?) für Tomcat/ERDDAP) hat 'lesen' Erlaubnis für diese Dateien.
  • In einigen Betriebssystemen (zum Beispiel SELinux) und je nach Systemeinstellungen, muss der Benutzer, der das Programm ausgeführt hat, 'lesen' Berechtigung für die gesamte Kette von Verzeichnissen, die zu dem Verzeichnis führen, das die Dateien hat.  

EDDGridVonFiles Skelett XML

  • Das skeleton XML für alleEDDGridVonFiles Unterklassen ist:

  <dataset type="EDDGridFrom...Files" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
        EDDGridFromFiles subclasses, this uses Java's WatchDirectory system
        to notice new/deleted/changed files quickly and efficiently. -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <fileDir>...</fileDir> <-- The directory (absolute) with the
        data files. -->
      <recursive>true|false</recursive> <!-- 0 or 1. Indicates if
        subdirectories of fileDir have data files, too. -->
      <pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
        match the pathRegex (default=".\") will be accepted. -->
      <fileNameRegex>...</fileNameRegex> <-- 0 or 1. A
        regular expression (tutorial) describing valid data
        file names, for example, ".\
\.nc" for all .nc files. -->
      <accessibleViaFiles>true|false(default)</accessibleViaFiles>
        <!-- 0 or 1 -->
      <metadataFrom>...</metadataFrom> <-- The file to get
        metadata from ("first" or "last" (the default) based on file's
        lastModifiedTime). -->
      <fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or
        false (the default)) -->
      <cacheFromUrl>...</cacheFromUrl> <!-- 0 or 1 -->
      <cacheSizeGB>...</cacheSizeGB> <!-- 0 or 1 -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <axisVariable>...</axisVariable> <!-- 1 or more -->
      <dataVariable>...</dataVariable> <!-- 1 or more -->
  </dataset>

EDD*FromAudioFiles

EDDGridVonAudioFiles und EDDTableFromAudioFiles aggregierte Daten aus einer Sammlung lokaler Audiodateien. (Diese ersten erschienen inERDDAP™v1.82.) Der Unterschied ist:EDDGridFromAudioFiles behandelt die Daten als mehrdimensionaler Datensatz (in der Regel mit 2 Abmessungen:\[Dateistart Zeit\]und\[abgelaufen Zeit innerhalb einer Datei\]) , während EDDTableFromAudioFiles die Daten als tabellarische Daten behandelt (in der Regel mit Spalten für die Datei startTime, die elapsedTime mit der Datei, und die Daten aus den Audiokanälen) .EDDGridFromAudioFiles erfordert, dass alle Dateien die gleiche Anzahl von Proben haben, also wenn das nicht wahr ist, müssen Sie EDDTableFromAudioFiles verwenden. Ansonsten ist die Wahl, welche EDD-Typ zu verwenden ist ganz Ihre Wahl. Ein Vorteil von EDDTableFromAudioFiles: Sie können andere Variablen mit anderen Informationen hinzufügen, z.stationIDStationType. In beiden Fällen erschwert das Fehlen einer einheitlichen Zeitvariable die Arbeit mit den Daten dieser EDD-Typen, aber es gab keine gute Möglichkeit, eine einheitliche Zeitvariable einzurichten.

Sehen Sie die Superklassen dieser Klasse,EDDGridVonFilesundEDDTableFromFiles, für allgemeine Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Da Audiodateien keine anderen Metadaten als Informationen zur Kodierung der Tondaten haben, müssen Sie die Ausgabe von GenerateDatasets bearbeiten. Xml zur Bereitstellung wesentlicher Informationen (z.B. Titel, Zusammenfassung,creator\_name, Institution, Geschichte) .

Details:

  • Es gibt eine Vielzahl von Audio-Dateiformaten. Derzeit,ERDDAP™kann Daten aus den meisten .wav und .au Dateien lesen. Es kann derzeit keine anderen Arten von Audiodateien lesen, z.B. .aiff oder .mp3. Wenn Sie Unterstützung für andere Audiodateiformate oder andere Varianten von .wav und .au benötigen, senden Sie bitte Ihre Anfrage an Chris. John bei noaa.gov. Oder als Workaround können Sie Ihre Audiodateien in PCM\_ konvertieren SIGNIEREN (für ganze Zahlen) oder PCM\_FLOAT (für schwimmende Punktdaten) .wav Dateien so, dassERDDAP™kann mit ihnen arbeiten.
  • Derzeit,ERDDAP™kann Audiodateien lesen mit wasJavaDie AudioFormat-Klasse ruft PCM\_FLOAT, PCM\_SIGNED, PCM\_UNSIGNED, ALAW und ULAW-Kodierungen an.ERDDAP™wandelt PCM\_UNSIGNED-Werte um (z.B. 0 bis 255) in signierten Werten (z.B. -128 bis 128) durch Neuanordnung der Bits in den Datenwerten.ERDDAP™ALAW und ULAW kodiert aus ihrem nativen kodierten Byte-Format in Kürze (In den Warenkorb) Werte. SeitJavawill bigEndian=true data,ERDDAP™die Bytes der mit bigEndian=false gespeicherten Daten umwandeln (kleine ende) um die Werte korrekt zu lesen. Für alle anderen Kodierungen (PCM) ,ERDDAP™liest die Daten wie es ist.
  • WannERDDAP™liest Daten aus Audiodateien, es wandelt die verfügbaren Audio-Metadaten der Datei in globale Attribute um. Dies wird immer (mit angezeigten Probenwerten)

String audioBigEndian "false"; //wahr oder falsch In den Warenkorb Kanäle 1 String Audiocodierung "PCM\_SIGNED"; Float AudioFrameRate 96000.0; //per Sekunde int audioFrameSize 2; //# von Datenbytes pro Frame Schwimmer AudioSampleRate 96000.0; //per Sekunde int audioSampleSizeInBits 16; //# von Bits pro Kanal pro Probe

FürERDDAP's Zwecke, ein Rahmen ist synonym für eine Probe, die die Daten für einen Zeitpunkt. Die Attribute inERDDAP™die Informationen, die die Daten beschreiben, wie es in den Quelldateien war.ERDDAP™hat dies beim Lesen der Daten oft geändert, z.B. werden PCM\_UNSIGNED, ALAW und ULAW kodierte Daten in PCM\_SIGNED umgewandelt und BigEndian=false Daten in BigEndian=true-Daten umgewandelt. (wieJavawill es lesen) . Am Ende werden Datenwerte inERDDAP™wird immerPCM-codiertDatenwerte (d.h. einfache digitalisierte Proben der Schallwelle) .

  • WannERDDAP™liest Daten aus Audiodateien, es liest die gesamte Datei.ERDDAP™kann so viele wie etwa 2 Milliarden Proben pro Kanal lesen. Wenn die Probenrate beispielsweise 44.100 Proben pro Sekunde beträgt, überträgt 2 Milliarden Proben etwa 756 Minuten Schalldaten pro Datei. Wenn Sie Audiodateien mit mehr als dieser Datenmenge haben, müssen Sie die Dateien in kleinere Stücke zerlegen, so dassERDDAP™kann sie lesen.
  • WeilERDDAP™liest ganze Audiodateien,ERDDAP™muss Zugriff auf eine große Menge Speicher haben, um mit großen Audiodateien zu arbeiten. Vgl.ERDDAPSpeichereinstellungen. Auch wenn dies ein Problem ist, ist ein Workaround, den Sie jetzt verwenden können, um die Dateien in kleinere Stücke zu zerlegen, so dassERDDAP™kann sie mit weniger Gedächtnis lesen.
  • Einige Audiodateien wurden falsch geschrieben.ERDDAP™macht einen kleinen Aufwand, sich mit solchen Fällen zu beschäftigen. Aber im Allgemeinen, wenn es einen Fehler gibt,ERDDAP™wird eine Ausnahme werfen (und lehnen diese Datei ab) oder (wenn der Fehler nicht erkennbar ist) die Daten lesen (aber die Daten werden falsch sein) .
  • ERDDAP™die Lautstärke nicht überprüft oder verändert. Idealerweise werden ganzzahlige Audiodaten für den gesamten Bereich des Datentyps skaliert.
  • Audiodateien und Audioplayer haben kein System für fehlende Werte (z.B. -999 oder Float.NaN) . Audiodaten sollten also keine fehlenden Werte haben. Wenn fehlende Werte vorhanden sind (z.B., wenn Sie eine Audiodatei verlängern müssen) , verwenden Sie eine Reihe von 0's, die als perfekte Stille interpretiert werden.
  • WannERDDAP™liest Daten aus Audiodateien, es erstellt immer eine Spalte namens elapsed Zeit mit der Zeit für jede Probe, in Sekunden (als Doppel gespeichert) , relativ zur ersten Probe (die abgelaufen ist Zeit = 0,0 s) . mitEDDGridFromAudioFiles, dies wird die elapsedTime-Achsenvariable.
  • EDDGridFromAudioFiles erfordert, dass alle Dateien die gleiche Anzahl von Proben haben. Wenn das nicht wahr ist, müssen Sie EDDTableFromAudioFiles verwenden.
  • FürEDDGridFromAudioFiles, wir empfehlen, dass Sie [<DimensionValuesInMemory>] (#dimensionvaluesinmemory) zu falsch (wie empfohlen von GenerateDatasets Xml) , weil die Zeitdimension oft eine große Anzahl von Werten hat.
  • FürEDDGridVonAudioFiles sollten Sie fast immer dieEDDGridFromFiles System fürAggregat über Dateinamen, fast immer durch Extraktion des Anfangsdatums der Aufnahme Zeit aus den Dateinamen. Zum Beispiel
    <sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

Datensätze generieren Xml wird dies fördern und Ihnen dabei helfen.

  • Für EDDTableFromAudioFiles sollten Sie fast immer das EDDTableFromFiles-System für\\\*fileName pseudosourceNameSInformationen aus dem Dateinamen zu extrahieren (fast immer das Startdatum Zeit für die Aufnahme) und fördern es, eine Datenspalte zu sein. Zum Beispiel
    <sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

Das Zeitformat sollte dann als Attribute der Einheiten angegeben werden:<att name="units">yyMMdd'\_'HHmmss</att>  

EDDGridVonMergeIRFiles

EDDGridVonMergeIRFiles aggregierte Daten von lokalen,MergeIRDateien, die von derTropische Regenmessmission (TRMM) , die eine gemeinsame Mission zwischen der NASA und der Japan Aerospace Exploration Agency ist (JAXA) . Verschmelzung IR-Dateien können vonNASA.

EDDGridVonMergeIRFiles.java wurde geschrieben und zumERDDAP™Projekt von Jonathan Lafite und Philippe Makowski von R.Tech Engineering (Lizenz: urheberrechtlich geschützte Open Source) .

EDDGridFromMergeIRFiles ist ein wenig ungewöhnlich:

  • EDDGridFromMergeIRFiles unterstützt komprimierte oder unkomprimierte Quelldatendateien in jeder Kombination in demselben Datensatz. So können Sie zum Beispiel ältere Dateien komprimieren, die selten aufgerufen werden, aber neue Dateien, die oft aufgerufen werden, nicht komprimieren. Oder Sie können die Art der Kompression aus dem Original ändern. Z beispielsweise.gz.
  • Wenn Sie komprimierte und unkomprimierte Versionen der gleichen Datendateien im gleichen Verzeichnis haben, stellen Sie bitte sicher, dass<fileNameRegex> für Ihren Datensatz stimmt mit den Dateinamen überein, die Sie übereinstimmen möchten und nicht mit den Dateinamen überein, die Sie nicht übereinstimmen möchten.
  • Unkomprimierte Quelldatendateien dürfen keine Dateierweiterung haben (d.h. kein "." im Dateinamen) .
  • Komprimierte Quelldatendateien müssen eine Dateierweiterung haben, aberERDDAP™bestimmt die Art der Komprimierung, indem Sie den Inhalt der Datei inspizieren, nicht indem Sie die Dateierweiterung der Datei ansehen (zum Beispiel ".Z") . Die unterstützten Kompressionstypen umfassen "gz", "bzip2", "xz", "lzma", "snappy-raw", "snappy-framed", "pack200" und "z". WannERDDAP™liest komprimierte Dateien, es dekomprimiert on-the-fly, ohne in eine temporäre Datei zu schreiben.
  • Alle Quelldatendateien müssen das ursprüngliche Dateinamenssystem verwenden: d.h. merg\_ YYYMMDDH \_4km-pixel (wenn YYYMMDDH die der Daten in der Datei zugeordnete Zeit angibt) , plus eine Dateierweiterung, wenn die Datei komprimiert wird.

Sehen Sie die Superklasse dieser Klasse,EDDGridVonFiles, für allgemeine Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.  

EDDGridVon NcFiles

EDDGridVon NcFiles aggregierte Daten von lokalen, netzgebundenen,GRIB .grb und .grb2Dateien,HDF (v4 oder v5) .hdfDateien,.ncmlDateien,NetCDF (v3 oder v4) .ncDateien undZarDateien (ab Version 2.25) . Zarr-Dateien haben etwas anderes Verhalten und erfordern entweder die DateiNameRegex oder den PfadRegex, um "zarr" einzuschließen.

Dies kann mit anderen Dateitypen funktionieren (zum Beispiel BUFR) , wir haben es einfach nicht getestet -- bitte senden Sie uns einige Musterdateien.

  • Für GRIB-Dateien,ERDDAP™wird eine .gbx-Index-Datei zum ersten Mal, wenn sie jede GRIB-Datei liest. So müssen die GRIB-Dateien in einem Verzeichnis sein, in dem der "Benutzer", der Tomcat lief, die Lese- und Schreibgenehmigung hat.
  • Sehen Sie die Superklasse dieser Klasse,EDDGridVonFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.
  • Beginnen mitERDDAP™V2.12,EDDGridVonNcFiles undEDDGridVon NcFiles Entpackt können Daten von "Strukturen" in.nc4 und.hdf4 Dateien. Um eine Variable zu identifizieren, die von einer Struktur stammt,<sourceName> muss das Format verwenden: Vollständiger StructureName | MitgliedName , zum Beispiel group1/myStruct|myMember .
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Gruppen in Gridded Nc Dateien

Netcdf4 Dateien können Gruppen enthalten. ERDDAP™macht nur einen Datensatz aus den Variablen in einer Gruppe und all ihren Elterngruppen. Sie können einen bestimmten Gruppennamen in GenerateDatasets angeben Xml (den nachlaufenden Wimpern) , oder verwenden Sie ", um GenerateDatasets zu haben Xml sucht alle Gruppen für die Variablen, die die meisten Dimensionen verwenden, oder "\[Wurzeln\]" GenerateDatasets nur nach Variablen in der Wurzelgruppe suchen.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantworten, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

EDDGridVonNcFilesUnpacked

EDDGridVonNcFilesUnpacked eine Variante vonEDDGridVon NcFilesdie Daten von lokalen, netzgebundenenNetCDF (v3 oder v4) .ncund verwandte Dateien. Der Unterschied ist, dass diese Klasse jede Datendatei entpackt, bevorEDDGridFromFiles betrachtet die Dateien:

  • Es entpackt Variablen, die mitscale\_factorund/oderadd\_offset.
  • Es konvertiert \_FillValue undmissing\_valueWerte für NaN's (oder MAX\_VALUE für ganze Datentypen) .
  • Es wandelt Zeit- und Zeitstempelwerte in"seconds since 1970-01-01T00:00:00Z".

Der große Vorteil dieser Klasse ist, dass es eine Möglichkeit bietet, mit verschiedenen Werten vonscale\_factor,add\_offset, \_FillValue,missing\_value, oder Zeiteinheiten in verschiedenen Quelldateien in einer Sammlung. Ansonsten müsst ihr ein Werkzeug wieNcMLoderNCOum jede Datei zu ändern, um die Unterschiede zu entfernen, so dass die Dateien vonEDDGridVon NcFiles. Damit diese Klasse richtig funktioniert, müssen die Dateien den CF-Standards für die zugehörigen Attribute folgen.

  • Wenn versuchen, einen zu machenEDDGridVon NcFiles Entpackt aus einer Gruppe von Dateien, mit denen Sie vorher versucht und nicht verwendetEDDGridVonNcFiles, cd bis BigParentDirectory /Datensatz/ Letzte2Briefe / datasetID / wenn Letzte2Briefe die letzten 2 Buchstaben derdatasetID, und alle Dateien in diesem Verzeichnis löschen.
  • Beginnen mitERDDAP™V2.12,EDDGridVonNcFiles undEDDGridVon NcFiles Entpackt können Daten von "Strukturen" in.nc4 und.hdf4 Dateien. Um eine Variable zu identifizieren, die von einer Struktur stammt,<sourceName> muss das Format verwenden: Vollständiger StructureName | MitgliedName , zum Beispiel group1/myStruct|myMember .
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Netcdf4 Dateien können Gruppen enthalten. Vgl.Diese Dokumentation.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantwortet haben, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei vor Es ist ausgepackt. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

EDDGridLonPM180

EDDGridLonPM180 die Längenwerte eines Kindes modifiziert (eingeschlossen) EDDGridDatensatz, der Längenwerte größer als 180 aufweist (beispielsweise 0 bis 360) so dass sie im Bereich -180 bis 180 liegen (Longitude Plus oder Minus 180, daher der Name) .

  • Dies bietet eine Möglichkeit, Datensätze zu erstellen, die Längenwerte über 180 konform in/mit habenOGCDienstleistungen (zum Beispiel dieWMSServer inERDDAP) , seit allemOGCDienstleistungen benötigen Längenwerte innerhalb von -180 bis 180.
  • Die Arbeit in der Nähe einer Diskontinuität verursacht Probleme, unabhängig davon, ob die Diskontinuität in der Länge 0 oder in der Länge 180 liegt. Dieser Datensatztyp lässt Sie diese Probleme für jeden vermeiden, indem Sie zwei Versionen desselben Datensatzes anbieten: mit Längenwerten im Bereich 0 bis 360 ("Pacificentric"?) , mit Längenwerten im Bereich -180 bis 180 ("Atlanticentric"?) .
  • Für Kinderdatensätze mit allen Längenwerten größer als 180 sind alle neuen Längenwerte einfach um 360 Grad niedriger. Beispielsweise würde ein Datensatz mit Längenwerten von 180 bis 240 zu einem Datensatz mit Längenwerten von -180 bis -120 werden.
  • Für Kinderdatensätze, die Längenwerte für den gesamten Globus haben (etwa 0 bis 360) , der neue Längenwert wird umgerechnet (grob) - 180 bis 180: Die ursprünglichen 0 bis fast 180 Werte sind unverändert. Die ursprünglichen 180 bis 360 Werte werden in -180 bis 0 umgerechnet und zum Beginn des Longitude-Arrays verschoben.
  • Für Kinderdatensätze, die sich um 180, aber nicht um die Welt kümmern,ERDDAP™fügt fehlende Werte nach Bedarf ein, um einen Datensatz zu erstellen, der den Globus abdeckt. Beispielsweise würde ein Kinderdatensatz mit Längenwerten von 140 bis 200 zu einem Datensatz mit Längenwerten von -180 bis 180 werden. Die Kinderwerte von 180 bis 200 werden -180 bis -160. Neue Längenwerte würden von -160 bis 140 eingefügt. Die entsprechenden Datenwerte sind \_FillValues. Die Kinderwerte von 140 bis fast 180 wären unverändert. Das Einfügen von fehlenden Werten mag seltsam erscheinen, aber es vermeidet mehrere Probleme, die sich daraus ergeben, dass Längenwerte plötzlich springen (z.B. von -160 bis 140) .
  • InGenerateDatasetsXml, gibt es einen speziellen "Datensatztyp",EDDGridLonPM180FromErddapCatalog, mit dem Sie diedatasets.xmlfürEDDGridLonPM180 Datensätze aus jedem derEDDGridDatensätze in einemERDDAPdie alle Längenwerte größer als 180 haben. Dies erleichtert das Angebot von zwei Versionen dieser Datensätze: das Original, mit Längenwerten im Bereich 0 bis 360, und den neuen Datensatz mit Längenwerten im Bereich -180 bis 180.

Der Kinderdatensatz innerhalb jedesEDDGridLonPM180 Datensatz wird einEDDGridVonErddap-Datensatz, der auf den ursprünglichen Datensatz verweist. Der neue DatensatzdatasetIDwird der Name des ursprünglichen Datensatzes plus "\_LonPM180" sein. Zum Beispiel

    <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>

Legen Sie dieEDDGridLonPM180 Datensatz unten den ursprünglichen Datensatz indatasets.xml. Das vermeidet mögliche Probleme.

Alternativ können Sie dieEDDGridFromErddap Kinderdatensatz mit dem Originaldatensatzdatasets.xml. Dann wird es nur eine Version des Datensatzes geben: die mit Längenwerten innerhalb von -180 bis 180. Wir entmutigen dies, weil es Zeiten gibt, in denen jede Version des Datensatzes bequemer ist.

  • Wenn Sie zwei Versionen eines Datensatzes anbieten, zum Beispiel eine mit Länge 0 bis 360 und eine mit Länge -180 bis 180:
    • Sie können die optionale [<zugänglich ViaWMS>false</erreichbar ViaWMS> (#accessibleviawms) mit dem 0-360 Datensatz, um dieWMSService für diesen Datensatz. Dann wird nur die LonPM180 Version des Datensatzes überWMS.
    • Es gibt ein paar Möglichkeiten, den LonPM180-Datensatz mit Änderungen am zugrunde liegenden Datensatz aktuell zu halten:
      • Wenn der Kinderdatensatz einEDDGridFromErddap-Datensatz, der einen Datensatz im gleichenERDDAP™, der LonPM180-Datensatz versucht, den zugrunde liegenden Datensatz direkt zu abonnieren, so dass er immer aktuell ist. Direkte Abonnements erzeugen keine E-Mails, die Sie bitten, das Abonnement zu validieren - Validierung sollte automatisch erfolgen.
      • Wenn der Kinderdatensatz nicht einEDDGridFromErddap-Datensatz, der auf der gleichenERDDAP™, der LonPM180-Datensatz wird versuchen, das reguläre Abonnement-System zu verwenden, um den zugrunde liegenden Datensatz zu abonnieren. Wenn Sie das Abonnementsystem in IhremERDDAP™Sie sollten E-Mails bekommen, die Sie bitten, das Abonnement zu validieren. Bitte.
      • Wenn Sie das Abonnementsystem in IhremERDDAP™Ausgeschaltet, der LonPM180-Datensatz kann manchmal veraltete Metadaten haben, bis der LonPM180-Datensatz neu geladen wird. Wenn das Abonnement-System ausgeschaltet ist, sollten Sie die [<Nachladen AllNMinutes>] (#reloadeverynminutes) Einstellung des LonPM180-Datensatzes auf eine kleinere Anzahl, so dass es wahrscheinlicher ist, Änderungen des Kinderdatensatzes früher zu erfassen.

EDDGridLonPM180 Skelett XML

  <dataset type="EDDGridLonPM180" datasetID\="..." active\="..." >
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
        EDDGridFromDap, this gets the remote .dds and then gets the new
        leftmost (first) dimension values. -->
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <dataset>...</dataset> <!-- The child EDDGrid dataset. -->
  </dataset>

EDDGridLon0360

EDDGridLon0360 die Längenwerte eines Kindes modifiziert (eingeschlossen) EDDGridDatensatz, der einige Längenwerte unter 0 hat (z.B. -180 bis 180) so dass sie im Bereich von 0 bis 360 liegen (also der Name) .

  • Die Arbeit in der Nähe einer Diskontinuität verursacht Probleme, unabhängig davon, ob die Diskontinuität in der Länge 0 oder in der Länge 180 liegt. Dieser Datensatztyp lässt Sie diese Probleme für jeden vermeiden, indem Sie zwei Versionen desselben Datensatzes anbieten: mit Längenwerten im Bereich -180 bis 180 ("Atlanticentric"?) . mit Längenwerten im Bereich 0 bis 360 ("Pacificentric"?) ,
  • Für Kinderdatensätze mit allen Längenwerten unter 0 sind alle neuen Längenwerte einfach um 360 Grad höher. Beispielsweise würde ein Datensatz mit Längenwerten von -180 bis -120 zu einem Datensatz mit Längenwerten von 180 bis 240 werden.
  • Für Kinderdatensätze, die Längenwerte für den gesamten Globus haben (etwa -180 bis 180) , der neue Längenwert wird umgerechnet (grob) 0 bis 360: Die ursprünglichen -180 bis 0-Werte werden in 180 bis 360 umgerechnet und zum Ende des Längenfeldes verschoben. Die ursprünglichen 0 bis fast 180 Werte sind unverändert.
  • Für Kinder-Datensätze, die lon=0 überspannen, aber nicht den Globus abdecken,ERDDAP™fügt fehlende Werte nach Bedarf ein, um einen Datensatz zu erstellen, der den Globus abdeckt. Beispielsweise würde ein Kinderdatensatz mit Längenwerten von -40 bis 20 zu einem Datensatz mit Längenwerten von 0 bis 360 werden. Die Kinderwerte von 0 bis 20 wären unverändert. Von 20 bis 320 würden neue Längenwerte eingefügt. Die entsprechenden Datenwerte sind \_FillValues. Die Kinderwerte von -40 bis 0 würden 320 bis 360 werden. Das Einfügen von fehlenden Werten mag seltsam erscheinen, aber es vermeidet mehrere Probleme, die sich daraus ergeben, dass Längenwerte plötzlich springen (z.B. von 20 bis 320) .
  • InGenerateDatasetsXml, gibt es einen speziellen "Datensatztyp",EDDGridLon0360Von ErddapCatalog, mit dem Sie diedatasets.xmlfürEDDGridLon0360 Datensätze von jedem derEDDGridDatensätze in einemERDDAPdie alle Längenwerte größer als 180 haben. Dies erleichtert das Angebot von zwei Versionen dieser Datensätze: das Original, mit Längenwerten im Bereich 0 bis 360, und den neuen Datensatz mit Längenwerten im Bereich -180 bis 180.

Der Kinderdatensatz innerhalb jedesEDDGridLon0360 Datensatz wird einEDDGridVonErddap-Datensatz, der auf den ursprünglichen Datensatz verweist. Der neue DatensatzdatasetIDwird der Name des ursprünglichen Datensatzes plus "\_Lon0360" sein. Zum Beispiel

    <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>

Legen Sie dieEDDGridDatensatz von Lon0360 unten den ursprünglichen Datensatz indatasets.xml. Das vermeidet mögliche Probleme.

Alternativ können Sie dieEDDGridFromErddap Kinderdatensatz mit dem Originaldatensatzdatasets.xml. Dann wird es nur eine Version des Datensatzes geben: die mit Längenwerten innerhalb von 0 bis 360. Wir entmutigen dies, weil es Zeiten gibt, in denen jede Version des Datensatzes bequemer ist.

  • Wenn Sie zwei Versionen eines Datensatzes anbieten, zum Beispiel eine mit Länge 0 bis 360 und eine mit Länge -180 bis 180:
    • Sie können die optionale [<zugänglich ViaWMS>false</erreichbar ViaWMS> (#accessibleviawms) mit dem Datensatz von 0 bis 360, um dieWMSService für diesen Datensatz. Dann wird nur die -180 bis 180 Version des Datensatzes überWMS.
    • Es gibt ein paar Möglichkeiten, den Lon0360 Datensatz mit Änderungen am zugrunde liegenden Datensatz aktuell zu halten:
      • Wenn der Kinderdatensatz einEDDGridFromErddap-Datensatz, der einen Datensatz im gleichenERDDAP™, der Lon0360-Datensatz wird versuchen, den zugrunde liegenden Datensatz direkt zu abonnieren, so dass er immer aktuell ist. Direkte Abonnements erzeugen keine E-Mails, die Sie bitten, das Abonnement zu validieren - Validierung sollte automatisch erfolgen.
      • Wenn der Kinderdatensatz nicht einEDDGridFromErddap-Datensatz, der auf der gleichenERDDAP™, der Lon0360-Datensatz wird versuchen, das reguläre Abonnementsystem zu verwenden, um den zugrunde liegenden Datensatz zu abonnieren. Wenn Sie das Abonnementsystem in IhremERDDAP™Sie sollten E-Mails bekommen, die Sie bitten, das Abonnement zu validieren. Bitte.
      • Wenn Sie das Abonnementsystem in IhremERDDAP™Ausgeschaltet, der Lon0360 Datensatz kann manchmal veraltete Metadaten haben, bis der Lon0360 Datensatz neu geladen wird. Wenn das Abonnement-System ausgeschaltet ist, sollten Sie die [<Nachladen AllNMinutes>] (#reloadeverynminutes) Setzen des Lon0360 Datensatzes auf eine kleinere Anzahl, so dass es wahrscheinlicher ist, Änderungen des Kinderdatensatzes früher zu erfassen.

EDDGridLon0360 Skelett XML

  <dataset type="EDDGridLon0360" datasetID\="..." active\="..." >
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
        EDDGridFromDap, this gets the remote .dds and then gets the new
        leftmost (first) dimension values. -->
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <dataset>...</dataset> <!-- The child EDDGrid dataset. -->
  </dataset>

EDDGridSideByside

EDDGridSideByside Aggregate zwei oder mehrEDDGridDatensätze (die Kinder) Seite an Seite.

  • Der resultierende Datensatz hat alle Variablen aus allen Kinderdatensätzen.
  • Der Elterndatensatz und alle Kinderdatensätze MUST haben verschiedenedatasetIDS. Wenn alle Namen in einer Familie genau die gleichen sind, wird der Datensatz nicht geladen (mit der Fehlermeldung, dass die Werte der aggregierten Achse nicht sortiert sind) .
  • Alle Kinder haben die gleichen Quellwerte füraxisVariableS\[1+\] (zum Beispiel Breite, Länge) . Die Genauigkeit der Prüfung wird durchMatchAxisNDigits.
  • Die Kinder können unterschiedliche Quellwerte füraxisVariableS\[0)\] (zum Beispiel, Zeit) , aber sie sind in der Regel weitgehend gleich.
  • Der Elterndatensatz scheint alle zu habenaxisVariableS\[0)\]Quellenwerte aller Kinder.
  • So können Sie beispielsweise einen Quelldatensatz mit einem Vektor u-Komponente und einem anderen Quelldatensatz mit einem Vektor v-Komponente kombinieren, so dass die kombinierten Daten bedient werden können.
  • Kinder, die durch diese Methode geschaffen werden, werden privat gehalten. Sie sind nicht separat zugängliche Datensätze (beispielsweise durch Client-Datenanfragen oder durchFlaggen-Dateien) .
  • Die globalen Metadaten und Einstellungen für den Elternteil stammen aus den globalen Metadaten und Einstellungen für das erste Kind.
  • Wenn es eine Ausnahme beim Erstellen des ersten Kindes gibt, wird der Elternteil nicht erstellt.
  • Wenn es eine Ausnahme beim Erstellen von anderen Kindern gibt, sendet dies eine E-Mail an emailEverythingTo (wie angegebenSetup.xml) und geht mit den anderen Kindern weiter.

EDDGridSideBySide Skelett XML

  <dataset type="EDDGridSideBySide" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <dataset>...</dataset> <!-- 2 or more -->
  </dataset>

EDDGridGesamtexistierteDimension

EDDGridGesamtexistierteDimension Aggregate zwei oder mehrEDDGridDatensätze, die jeweils einen unterschiedlichen Wertebereich für die erste Dimension aufweisen, jedoch gleiche Werte für die anderen Dimensionen.

  • Beispielsweise kann ein Kind-Datensatz 366 Werte haben (für 2004) für die Zeitdimension und ein anderes Kind könnte 365 Werte haben (für 2005) für die Zeitdimension.
  • Alle Werte für alle anderen Abmessungen (zum Beispiel Breite, Länge) Seien Sie einfach für alle Kinder identisch. Die Genauigkeit der Prüfung wird durchMatchAxisNDigits.
  • Sortierte Maßwerte - Die Werte für jede Dimension MUST sind in sortierter Reihenfolge (aufsteigen oder absteigen) . Die Werte können unregelmäßig beabstandet sein. Es kann keine Krawatten geben. Dies ist eine Forderung derCF metadata standard. Wenn die Werte der Dimension nicht in sortierter Reihenfolge sind, wird der Datensatz nicht geladen undERDDAP™den ersten ungebrochenen Wert in der Protokolldatei identifizieren, BigParentDirectory /logs/log.txt .

Unsortierte Dimensionswerte geben fast immer ein Problem mit dem Quelldatensatz an. Dies geschieht am häufigsten, wenn in der Aggregation eine fehlerhafte oder unangemessene Datei enthalten ist, die zu einer ungestörten Zeitdimension führt. Um dieses Problem zu lösen, siehe die Fehlermeldung in derERDDAP™log.txt Datei, um den absteigenden Zeitwert zu finden. Dann schauen Sie in die Quelldateien, um die entsprechende Datei zu finden (oder vor oder nach) Das gehört nicht zur Aggregation.

  • Der Elterndatensatz und der Kinderdatensatz MUST haben unterschiedlichedatasetIDS. Wenn alle Namen in einer Familie genau die gleichen sind, wird der Datensatz nicht geladen (mit der Fehlermeldung, dass die Werte der aggregierten Achse nicht sortiert sind) .
  • Derzeit ist der Kinderdatensatz MUST einEDDGridFromDap-Datensatz und MUST haben die niedrigsten Werte der aggregierten Dimension (meist die ältesten Zeitwerte) . Alle anderen Kinder müssen fast identische Datensätze sein (nur in den Werten für die erste Dimension) und werden von nur ihrensourceUrl.
  • Der aggregierte Datensatz erhält seine Metadaten vom ersten Kind.
  • DieDatensätze generieren Xml Programmeinen groben Entwurf desdatasets.xmlfür eineEDDGridAggregateExistingDimension basiert auf einer Reihe von Dateien, die von einemHyraxoder THREDDS-Server. Verwenden Sie beispielsweise diesen Eingang für das Programm (das "/1988" in der URL macht das Beispiel schneller) :
      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

Sie können das Ergebnis verwenden<sourceUrl> tags oder löschen sie und uncomment the<sourceUrl> tag (so dass neue Dateien jedes Mal bemerkt werden, wenn der Datensatz neu geladen wird.

EDDGridGesamtexistierteDimension Skelett XML

  <dataset type="EDDGridAggregateExistingDimension" datasetID\="..."
        active\="..." >
      <dataset>...</dataset> <!-- This is a regular EDDGridFromDap dataset
        description child with the lowest values for the aggregated
        dimensions. -->
      <sourceUrl>...</sourceUrl> <!-- 0 or many; the sourceUrls for
        other children. These children must be listed in order of
        ascending values for the aggregated dimension. -->
      <sourceUrls serverType="..." regex="..." recursive="true"
        pathRegex\=".\"
        >https://someServer/someDirectory/someSubdirectory/catalog.xml</sourceUrls>
        <!-- 0 or 1. This specifies how to find the other children,
        instead of using separate sourceUrl tags for each child. The
        advantage of this is: new children will be detected each time
        the dataset is reloaded. The serverType must be "thredds",
        "hyrax", or "dodsindex".         An example of a regular expression (regex) (tutorial) is .\
\.nc
        recursive can be "true" or "false".
        Only directory names which match the
        <pathRegex>
        (default=".\*") will be accepted.
        A thredds catalogUrl MUST include "/thredds/catalog/".
        An example of a thredds catalogUrl is
        https://thredds1.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/
          chla/catalog.xml

        An example of a hyrax catalogUrl is
        https://opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/
        flk/1988/contents.html

        An example of a dodsindex URL is
        https://opendap.jpl.nasa.gov/opendap/GeodeticsGravity/tellus/L3/mascon/RL06/JPL/v02/CRI/netcdf/contents.html
        (Note the "OPeNDAP logo at the top of the page.)
        When these children are sorted by filename, they must be in
        order of ascending values for the aggregated dimension. -->
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <dimensionValuesInMemory>...</dimensionValuesInMemory> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
  </dataset>

EDDGridKopie

EDDGridKopie macht und pflegt eine lokale Kopie eines anderenEDDGrid's Daten und dient Daten aus der lokalen Kopie.

  • EDDGridKopie (und für tabellarische Daten,EDDTableCopy) ist sehr einfach zu bedienen und sehr effektiv Lösung für einige der größten Probleme mit der Verwendung von Daten aus einer entfernten Datenquelle:
    • Der Zugriff auf Daten von einer entfernten Datenquelle kann langsam sein.
      • Es kann langsam sein, weil es inhärent langsam ist (beispielsweise eine ineffiziente Art von Servern) ,
      • weil es von zu vielen Anträgen überwältigt wird,
      • oder weil Ihr Server oder der Remoteserver Bandbreite begrenzt ist.
    • Der Remote-Datensatz ist manchmal nicht verfügbar (wieder, aus verschiedenen Gründen) .
    • Die Wiederherstellung auf einer Quelle für die Daten skaliert nicht gut (zum Beispiel, wenn viele Benutzer und vieleERDDAPs nutzen es) .  
  • Wie es funktioniert --EDDGridKopieren löst diese Probleme durch automatisches Erstellen und Aufrechterhalten einer lokalen Kopie der Daten und das Servieren von Daten aus der lokalen Kopie.ERDDAP™kann sehr schnell Daten aus der lokalen Kopie bedienen. Und eine lokale Kopie entlastet die Last auf dem Remoteserver. Und die lokale Kopie ist eine Sicherung des Originals, was nützlich ist, falls etwas mit dem Original passiert.

Es gibt nichts Neues über eine lokale Kopie eines Datensatzes. Was hier neu ist, ist, dass diese Klasse es macht\*leicht\*zu erstellen und\*Pflege\*eine lokale Kopie von Daten aus einer\*Sorte\*von Arten von Remote-Datenquellen und\*Metadaten hinzufügen\*beim Kopieren der Daten.

  • Datenbestände --EDDGridKopieren macht die lokale Kopie der Daten, indem Sie Daten von der Fernbedienung anfordern<Datensatz>. Es wird ein Stück für jeden Wert des linken (erste) Achse variabel.EDDGridKopieren verlässt sich nicht auf die Indexnummern des Remote-Datensatzes für die Achse - die können sich ändern.

WARNING: Wenn die Größe eines Datens so groß ist (> 2GB) dass es Probleme verursacht,EDDGridKopie kann nicht verwendet werden. (Wir hoffen, dass wir in Zukunft eine Lösung für dieses Problem haben.)

  • \[Eine Alternative zuEDDGridKopieren - Wenn die Remote-Daten über herunterladbare Dateien verfügbar sind, nicht über einen Webservice, verwenden SieCache AusUrl Option fürEDDGridVonFiles, die eine lokale Kopie der Remote-Dateien macht und die Daten aus den lokalen Dateien bedient.\]
  • Lokale Dateien Jeder Datenbruch wird in einem separatenNetCDFDatei in einem Unterverzeichnis BigParentDirectory / Kopieren/ datasetID / (wie angegebenSetup.xml) . Dateinamen, die von Achsenwerten erstellt werden, werden geändert, um sie Datei-Name-sicher zu machen (z.B. werden Bindestriche durch "x2D" ersetzt) -- das beeinflusst die tatsächlichen Daten nicht.  
  • Neue Daten -- Jedes MalEDDGridKopie wird neu geladen, es prüft die Fernbedienung<dataset>, um zu sehen, welche Stücke zur Verfügung stehen. Wenn die Datei für einen Datenklumpen nicht bereits vorhanden ist, wird eine Anfrage, den Bruch zu bekommen, zu einer Warteschlange hinzugefügt.ERDDAP's taskThread verarbeitet alle gelöschten Anfragen nach Datenschlangen, einzeln. Sie können Statistiken für die Aufgabe sehenDeine Tätigkeit auf derStatusseiteundTagesbericht. (Ja.ERDDAP™könnte diesem Prozess mehrere Aufgaben zuordnen, aber das würde viele der Bandbreite, Speicher und CPU-Zeit der Remote-Datenquelle nutzen, und viele der lokalenERDDAPBandbreite, Speicher und CPU-Zeit, von denen keine gute Idee ist.)

HINWEIS: Das erste Mal einEDDGridKopie wird geladen, (wenn alles gut geht) Es werden viele Anfragen an Datenknöpfe der TaskThread's Queue hinzugefügt, aber keine lokalen Datendateien werden erstellt. So wird der Konstrukteur scheitern, aber TaskThread wird weiterhin arbeiten und lokale Dateien erstellen. Wenn alles gut geht, wird die TaskThread einige lokale Datendateien machen und der nächste Versuch, den Datensatz neu zu laden (in ~15 Minuten) wird erfolgreich, aber zunächst mit einer sehr begrenzten Datenmenge.

HINWEIS: Nachdem der lokale Datensatz einige Daten und erscheint in IhremERDDAP, wenn der Remote-Datensatz vorübergehend oder dauerhaft nicht zugänglich ist, wird der lokale Datensatz noch funktionieren.

WARNING: Wenn der Remote-Datensatz groß ist und/oder der Remote-Server langsam ist (Das ist das Problem, oder?!) , es dauert eine lange Zeit, um eine vollständige lokale Kopie zu machen. In einigen Fällen wird die erforderliche Zeit inakzeptabel sein. Beispielsweise sendet 1 TB von Daten über eine T1-Leitung (0,15 GB/s) mindestens 60 Tage unter optimalen Bedingungen. Darüber hinaus verwendet es viele Bandbreite, Speicher und CPU-Zeit auf den Remote- und lokalen Computern. Die Lösung besteht darin, eine Festplatte an den Administrator des Remote-Datensatzes zu senden, damit s/he eine Kopie des Datensatzes erstellen und die Festplatte wieder an Sie senden kann. Verwenden Sie diese Daten als Ausgangspunkt undEDDGridKopieren wird dazu Daten hinzufügen. (Das ist eine ArtAmazons EC2 Cloud Servicebehandelt das Problem, auch wenn ihr System viel Bandbreite hat.)

WARNING: Wenn ein bestimmter Wert für das linkeste (erste) Achsgröße verschwindet vom entfernten Datensatz,EDDGridKopieren löscht NICHT die lokale kopierte Datei. Wenn Sie wollen, können Sie es selbst löschen.

Grid Copy checkSource Daten

Diedatasets.xmlfür diesen Datensatz kann ein optionales Tag

    <checkSourceData>true</checkSourceData>  

Der Standardwert ist wahr. Wenn/wenn Sie es auf false setzen, wird der Datensatz niemals den Quelldatensatz überprüfen, um zu sehen, ob zusätzliche Daten verfügbar sind.

Nur für

Sie können es sagenEDDGridKopieren, um eine Kopie einer Untermenge des Quelldatensatzes anstelle des gesamten Quelldatensatzes zu erstellen, indem ein Tag in der Form hinzugefügt wird<nurSince> einige Wert </onlySince> auf den Datensatzdatasets.xmlBlödsinn.EDDGridKopieren wird nur Datenwerte herunterladen, die mit den Werten der ersten Dimension zusammenhängen (in der Regel die Zeitdimension) die größer sind als einige Wert . einige Wert kann sein:

  • Eine übernow- nUnits . Zum Beispiel<nurSince>now-2 Jahre</onlySince> sagt dem Datensatz, nur lokale Kopien der Daten für Daten zu machen, wo die Werte der äußeren Dimension (meist Zeitwerte) sind innerhalb der letzten 2 Jahre (die jedes Mal neu bewertet wird, wenn der Datensatz neu geladen wird, was ist, wenn es nach neuen Daten sucht, um zu kopieren) . Siehenow- nUnits Syntax Beschreibung. Dies ist nützlich, wenn die erste Dimension Zeitdaten hat, was sie gewöhnlich tut.

    EDDGridKopieren gelöscht keine lokalen Datendateien, die Daten haben, die im Laufe der Zeit älter werden alsnow- nUnits . Sie können diese Dateien jederzeit löschen, wenn Sie wählen. Wenn Sie das tun, empfehlen wir Ihnen, eineFlaggenach dem Löschen der DateienEDDGridKopieren, um die Liste der Cache-Dateien zu aktualisieren.

  • Ein fester Zeitpunkt, der als ISO 8601-String angegeben istyyyy-MM-ddTHH:mm:ssZ. Zum Beispiel<NurSeit 2000>-01T00:00 UhrZ</onlySince> sagt den Datensatz nur, um lokale Kopien von Daten zu machen, wo der Wert der ersten Dimension \>=2000-01T00:00Z . Dies ist nützlich, wenn die erste Dimension Zeitdaten hat, was sie gewöhnlich tut.  

  • Eine schwimmende Punktzahl. Zum Beispiel<nurSince>946684800.0</onlySince> . Die Einheiten werden die Zieleinheiten der ersten Dimension sein. Beispielsweise für Zeitabmessungen die Einheiten inERDDAP™immer"seconds since 1970-01-01T00:00:00Z". So 946684800.0"seconds since 1970-01-01T00:00:00Z"entspricht 2000-01T00:00Z. Dies ist immer eine nützliche Option, ist aber besonders nützlich, wenn die erste Dimension keine Zeitdaten hat.

EDDGridKopie Recomended use

  1. Erstellen Sie die<Datensatz> Eintrag (der einheimische Typ, nichtEDDGridKopie) für die Remote-Datenquelle. Machen Sie es richtig, einschließlich aller gewünschten Metadaten.
  2. Wenn es zu langsam ist, fügen Sie XML-Code hinzu, um es in einemEDDGridDatensatz kopieren.
    • Verwenden Sie ein anderesdatasetID (vielleicht durch VeränderungdatasetIDvon der altendatasetIDleicht) .
    • Kopieren Sie die<zugänglich Zu><reloadEveryNMinutes> und<aufChange> von der FernbedienungEDDGridXML in derEDDGridCopy's XML. (Ihre Werte fürEDDGridKopieren von Materie; ihre Werte für den inneren Datensatz sind irrelevant.)
  3. ERDDAP™eine lokale Kopie der Daten erstellen und pflegen.  
  • WARNING:EDDGridKopieren geht davon aus, dass sich die Datenwerte für jedes Stück nie ändern. Wenn/wenn sie es tun, müssen Sie die chunk-Dateien manuell löschen BigParentDirectory / Kopieren/ datasetID / die geändert undFlaggeder zu ladende Datensatz, so dass die gelöschten Stücke ersetzt werden. Wenn Sie ein E-Mail-Abonnement zum Datensatz haben, erhalten Sie zwei E-Mails: eine, wenn der Datensatz zuerst neu geladen und die Daten kopiert, und eine andere, wenn der Datensatz wieder geladen wird. (automatisch) und erkennt die neuen lokalen Datendateien.  
  • Alle Achswerte müssen gleich sein. Für jede der Achsen mit Ausnahme des linken (erste) , alle Werte müssen für alle Kinder gleich sein. Die Genauigkeit der Prüfung wird durchMatchAxisNDigits.  
  • Einstellungen, Metadaten, Variablen --EDDGridKopieren verwendet Einstellungen, Metadaten und Variablen aus dem beigefügten Quelldatensatz.  
  • Metadaten ändern -- Wenn Sie etwas ändern müssenaddAttributesoder die Reihenfolge der dem Quelldatensatz zugeordneten Variablen ändern:
    1. Änderung deraddAttributesfür den Quelldatensatz indatasets.xml, wie nötig.
    2. Löschen Sie eine der kopierten Dateien.
    3. Stellen Sie einFlaggeum den Datensatz sofort neu zu laden. Wenn Sie ein Flag verwenden und ein E-Mail-Abonnement zum Datensatz haben, erhalten Sie zwei E-Mails: eine, wenn der Datensatz zuerst neu geladen wird und die Daten kopiert, und eine andere, wenn der Datensatz wieder geladen wird. (automatisch) und erkennt die neuen lokalen Datendateien.
    4. Die gelöschte Datei wird mit den neuen Metadaten regeneriert. Wenn der Quelldatensatz jemals nicht verfügbar ist,EDDGridKopieren von Datensatz erhält Metadaten aus der regenerierten Datei, da es die jüngste Datei ist.

EDDGridKopie Skelett XML

  <dataset type="EDDGridCopy" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaFiles>true|false(default)</accessibleViaFiles>
        <!-- 0 or 1 -->
      <accessibleViaWMS>...</accessibleViaWMS> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <matchAxisNDigits>...</matchAxisNDigits> <!-- 0 or 1 -->
      <fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or false
        (the default)) -->
      <checkSourceData>...</checkSourceData> <!-- 0 or 1 -->
      <onlySince>...</onlySince> <!-- 0 or 1 -->
      <dataset>...</dataset> <!-- 1 -->
  </dataset>

EDDTableFromCassandra

EDDTableFromCassandra behandelt Daten von einemCassandraTisch. Cassandra ist eine NoSQL-Datenbank.

  • ERDDAP™kann mit Cassandra v2 und v3 ohne Änderungen oder Unterschiede im Setup arbeiten. Wir haben getestet mitCassandra v2 und v3 von Apache. WahrscheinlichERDDAP™kann auch mit Cassandra von DataStax heruntergeladen arbeiten.  
  • Für Aug 2019 - Mai 2021 hatten wir Probleme, Cassandra mit AdoptOpenJdk zu arbeitenJavav8. Es war eine EXCEPTION\_ACCESS\_VIOLATION. Aber jetzt (Mai 2021) , dieses Problem ist weg: wir können Cassandra v2.1.22 und AdoptOpenJdk jdk8u292-b10 erfolgreich verwenden.  

Eine Tabelle

Cassandra unterstützt "Joins" nicht so, wie relationale Datenbanken funktionieren. EinERDDAP™EDDTableFromCassandra dataset maps to one (vielleicht eine Untermenge eines) Cassandra Tisch.

Cassandradatasets.xml

  • ERDDAP™kommt mit der CassandraJavaTreiber, so dass Sie es nicht separat installieren müssen.
  • Lesen Sie sorgfältig alle Informationen dieses Dokuments über EDDTableFromCassandra. Einige der Details sind sehr wichtig.
  • Die CassandraJavader Fahrer soll mit Apache Cassandra arbeiten (1.2+) und DataStax Enterprise (3.1+) . Wenn Sie Apache Cassandra 1.2.x verwenden, müssen Sie die cassandra.yaml-Datei für jeden Knoten bearbeiten, um start\_native\_transport einzustellen: true, dann starten Sie jeden Knoten neu.
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Sie können das dann bearbeiten, um es abzustimmen (insbesondere [<Partition KeySourceNames>] (#partitionkeysourcenames) ) Sie können die meisten Informationen sammeln, die Sie benötigen, um das XML für einen EDDTableFromCassandra-Datensatz zu erstellen, indem Sie den Cassandra-Administrator kontaktieren und das Internet durchsuchen.

Datensätze generieren Xml hat zwei spezielle Optionen für EDDTableFromCassandra:

  1. Wenn Sie "!!!LIST!!!" eingeben (ohne die Zitate) für den Schlüsselbereich wird das Programm eine Liste von Schlüsselbereichen anzeigen
  2. Wenn Sie einen bestimmten Schlüsselbereich eingeben und dann "!!!LIST!!!" eingeben (ohne die Zitate) für den Tabellennamen wird das Programm eine Liste von Tabellen in diesem Schlüsselraum und ihren Spalten anzeigen.
Fallempfindlichkeit
  • Case-insensitiver Schlüsselraum und Tabellennamen - Cassandra behandelt Schlüssel- und Tischnamen auf fallunempfindliche Weise. Aus diesem Grund verwenden Sie NIE ein reserviertes Wort (aber mit einem anderen Fall) als Cassandra-Schlüsselraum oder Tischname.
  • Fallunempfindliche Säulennamen -- Cassandra behandelt standardmäßig Spaltennamen auf fallunempfindliche Weise. Wenn Sie eines der reservierten Wörter von Cassandra als Spaltenname verwenden (Bitte nicht!) , Sie müssen verwenden
        <columnNameQuotes>"<columnNameQuotes>  

indatasets.xmlfür diesen Datensatz, so dass Cassandra undERDDAP™wird die Spaltennamen auf eine fallempfindliche Weise behandeln. Dies wird wahrscheinlich ein massiver Kopfschmerz für Sie sein, weil es schwer ist, die case-sensitiven Versionen der Spaltennamen zu bestimmen -- Cassandra zeigt fast immer die Spaltennamen als alle Kleinbuchstaben, unabhängig vom wahren Fall.

  • Arbeiten Sie eng mit dem Cassandra-Administrator zusammen, der möglicherweise über relevante Erfahrungen verfügt. Wenn der Datensatz nicht geladen wird, lesen Sie dieFehlermeldungsorgfältig, um herauszufinden, warum.  

Cassandra<Verbindung Eigentum >

Cassandra verfügt über Verbindungseigenschaften, die indatasets.xml. Viele von ihnen werden die Leistung der Cassandra-ERDDAP™Verbindung. Leider müssen Cassandra-Eigenschaften programmatisch inJava, soERDDAP™muss Code für jede Eigenschaft habenERDDAP™unterstützt. Derzeit,ERDDAP™unterstützt diese Eigenschaften: (Die gezeigten Standardeinstellungen sind das, was wir sehen. Die Standardeinstellungen Ihres Systems können unterschiedlich sein.)

  • Allgemeine Optionen
    <Verbindung Immobilienname=" Kompression > keine|LZ4|knackig </ Verbindung Insgesamt (Case-insensitive, default=none)
    (Allgemeine Kompressionsberatung: Verwenden Sie 'none', wenn die Verbindung zwischen Cassandra undERDDAP™ist lokal / schnell und verwenden Sie 'LZ4', wenn die Verbindung entfernt / langsam ist.)
    <Verbindung Immobilienname=" Anmeldeinformationen > Benutzername/Passwort </ Verbindung Insgesamt (Das ist ein Literal'/')
    <Verbindung Immobilienname=" Metriken > wahr|falsch </ Verbindung Insgesamt (2021-01-25 war default=true, jetzt ignoriert und immer falsch)
    <Verbindung Immobilienname=" Hafen > Integer </ Verbindung Insgesamt (Standard für natives binäres Protokoll=9042)
    <Verbindung Immobilienname=" Sl. > wahr|falsch </ Verbindung Insgesamt (default=false)
    (Mein schneller Versuch, Ssl zu benutzen, hat versagt. Wenn es dir gelingt, sag mir bitte, wie du es getan hast.)
  • Abfrageoptionen
    <Verbindung Immobilienname=" Konsistenz Ebene > alle|alle|je\_quorum|Lokalität|Lokalität|Lokalität|eine|quorum|Serie|drei|zwei </ Verbindung Insgesamt (Case-insensitive, default=ONE)
    <Verbindung Immobilienname=" fetchSize > Integer </ Verbindung Insgesamt (Standard=5000)
    (Setzen Sie fetchSize nicht auf einen kleineren Wert.)
    <Verbindung Immobilienname=" SeriellConsistencyLevel > alle|alle|je\_quorum|Lokalität|Lokalität|Lokalität|eine|quorum|Serie|drei|zwei </ Verbindung Insgesamt (Case-insensitive, default=SERIAL)
  • Socket Optionen
    <Verbindung Immobilienname=" Verbindung TimeoutMillis > Integer </ Verbindung Insgesamt (Standard=5000)
    (Nicht anschließen TimeoutMillis auf einen kleineren Wert.)
    <Verbindung Immobilienname=" haltenAlive > wahr|falsch </ Verbindung Insgesamt <Verbindung Immobilienname=" lesenTimeoutMillis > Integer </ Verbindung Insgesamt (Cassandra's default readTimeoutMillis ist 12000, aberERDDAP™ändert den Standard auf 120000. Wenn Cassandra ReadTimeouts wirft, kann dies nicht helfen, denn Cassandra wirft sie manchmal vor dieser Zeit. Das Problem ist wahrscheinlicher, dass Sie zu viele Daten pro Partition speichern Schlüsselkombination.)
    <Verbindung Immobilienname=" erhaltenBufferSize > Integer </ Verbindung Insgesamt (Es ist unklar, was der StandardempfangBufferSize ist. Setzen Sie das nicht auf einen kleinen Wert.)
    <Verbindung Immobilienname=" In den Warenkorb > Integer </ Verbindung Insgesamt <Verbindung Immobilienname=" tcpNoDelay > wahr|falsch </ Verbindung Insgesamt (Standard=null)

Wenn Sie in der Lage sein müssen, andere Verbindungseigenschaften einzustellen, siehe unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.

Für ein gegebenes Starten von Tomcat werden die Verbindungseigenschaften nur zum ersten Mal verwendet, wenn ein Datensatz für eine bestimmte Cassandra URL erstellt wird. Alle Reloads dieses Datensatzes und alle nachfolgenden Datensätze, die die gleiche URL teilen, werden diese Originalverbindung verwenden.

CQL

Die Cassandra Query Sprache (CQL) oberflächlich wie SQL, die von traditionellen Datenbanken verwendete Abfragesprache. WeilOPeNDAP's tabellarische Datenanfragen wurden entworfen, um SQL tabular Datenanfragen zu mimieren, ist es möglich,ERDDAP™um tabellarische Datenanforderungen in CQL Bound/PreparedStatements zu konvertieren.ERDDAP™protokolliert die Aussage inPressemitteilungwie Erklärung als Text: theStatementAsText
Die Version der Erklärung, die Sie sehen, wird eine Textdarstellung der Erklärung sein und wird nur "?" haben, wo die Strengewerte platziert werden.  
Nicht so einfach... Leider hat CQL viele Einschränkungen, auf denen Spalten abgefragt werden können, mit welchen Zwängen z.B. Partitionsschlüsselspalten mit = und IN eingeschränkt werden können.ERDDAP™sendet einige Zwänge an Cassandra und wendet alle Zwänge an, nachdem die Daten von Cassandra empfangen wurden. HilfeERDDAP™Sie müssen effizient mit Cassandra umgehen [<Partition KeySourceNames>] (#partitionkeysourcenames) , [<ClusterColumnSourceNamen>] (#clustercolumnsourcenames) , und<IndexColumnSourceNames>] (#indexcolumnsourcenames) indatasets.xmlfür diesen Datensatz. Dies sind die wichtigsten Möglichkeiten, um zu helfenERDDAP™effizient mit Cassandra arbeiten. Wenn du es nicht sagstERDDAP™diese Informationen, der Datensatz wird schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.  

<Partition KeySourceNames>

Weil Partitionsschlüssel eine zentrale Rolle in Cassandra Tabellen spielen,ERDDAP™muss sie kennensourceNames und gegebenenfalls weitere Informationen darüber, wie mit ihnen gearbeitet werden kann.

  • Sie müssen eine comma-separierte Liste der Partitionsschlüssel Quellspaltennamen indatasets.xmlüber<Partition KeySourceNames>. Einfaches Beispiel,
        <partitionKeySourceNames>station, deviceid<partitionKeySourceNames>  

Mehr komplexes Beispiel,

        <partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
  • TimeStamp Partition Keys -- Ist eine der Partitionsschlüsselspalten eine Zeitstempelsäule, die eine gröbere Version einer anderen Zeitstempelsäule aufweist, geben Sie diese über PartitionKeySourcName/otherColumnSourceName/time\_precision
    wenntime\_precisionist einer dertime\_precisionStrings, anderweitig inERDDAP. Der Weg Z imtime\_precisionstring ist der Standard, also spielt es keine Rolle, ob dietime\_precisionString endet in Z oder nicht. Zum BeispielERDDAP™Datum/Sampletime/1970-01 "Datumskonstraten können aus den Einschränkungen der Stichprobenzeit aufgebaut werden, indem diesetime\_precision." Die tatsächliche Umwandlung von Zwängen ist komplexer, aber das ist der Überblick. Verwenden Sie dies, wenn es relevant ist. Es ermöglichtERDDAP™effizient mit Cassandra arbeiten. Wenn diese Beziehung zwischen Spalten in einer Cassandra-Tabelle existiert und Sie nicht sagenERDDAP™, der Datensatz wird schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.
  • Einheit Werte Partitionsschlüssel -- Wenn du willstERDDAP™Datensatz, um mit nur einem Wert einer Partitionsschlüssel zu arbeiten, PartitionKeySourceName=Wert . Verwenden Sie keine Zitate für eine numerische Spalte, beispielsweise deviceid=1007 Verwenden Sie Zitate für eine String-Säule, z.B. stationid="Point Pinos"
  • Datensatz Standard Sortieren von Bestellung -- Die Reihenfolge der Partitionsschlüssel<dataVariable> indatasets.xmlbestimmt die Standard-Sortenfolge der Ergebnisse von Cassandra. Natürlich können Benutzer eine andere Sortierreihenfolge für eine bestimmte Reihe von Ergebnissen durch Appending & anfordernorderBy (" Komma-separierte Variablenliste ") bis zum Ende ihrer Abfrage.
  • Standardmäßig, Cassandra undERDDAP™Behandeln Sie Spaltennamen auf fallunempfindliche Weise. Aber wenn Sie setzenSpalteNameQuoteszu "ERDDAP™wird Cassandra Spaltennamen auf eine fallempfindliche Weise behandeln.  

<Partition Schlüsselwörter >

Wenn dies angegeben ist,ERDDAP™wird es verwenden, anstatt Cassandra für die Partition zu fragen Schlüsselinformationen jedes Mal, wenn der Datensatz neu geladen wird. Dies liefert die Liste der verschiedenen Partitionsschlüsselwerte, in der Reihenfolge, die sie verwendet werden. Die Zeiten müssen als Sekunden seit 1970-01-01T00:00Z angegeben werden. Aber es gibt auch zwei spezielle alternative Möglichkeiten, Zeiten festzulegen (jeder als Zeichenkette kodiert) :

  1. Zeit (CAS-Nr. Zeit) (MAY als String kodiert werden)
  2. "Zeiten (anISO8601StartTime, strideSeconds, stopTime) " (MUST als String kodiert)
    Stopp Zeit kann ein ISO8601 Zeit oder ein "now-nUnits" Zeit (z.B. "now-3 Minuten") . Stopp Zeit muss kein genaues Spiel des Starts sein Zeit + x strideSeconds. Eine Reihe mit einer Zeit () Wert wird in mehrere Zeilen vor jeder Abfrage erweitert, so dass die Liste der Partition Schlüssel können immer perfekt aktuell sein. Zum Beispiel
    <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>

erweitert sich in diese Tabelle der Partitionsschlüsselkombinationen:

    deviceid,date
1001,1.4148E9
1001,1.4148864E9
1007,1.4153184E9
1008,1.4154048E9
1009,1.4154912E9

<ClusterColumnSourceNames>

Cassandra akzeptiert SQL-ähnliche Einschränkungen auf Clusterspalten, die die Spalten sind, die den zweiten Teil des Primärschlüssels bilden (nach dem Partitionsschlüssel (S) ) . So ist es wichtig, dass Sie diese Spalten über<ClusterColumnSourceNames>. Dies ermöglichtERDDAP™effizient mit Cassandra arbeiten. Wenn es Clusterspalten gibt und Sie nicht sagenERDDAP, der Datensatz wird schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.

  • Zum Beispiel<ClusterColumnSourceNamen> myClusterColumn1, myClusterColumn2 </clusterColumnSourceNamen>
  • Wenn eine Cassandra-Tabelle keine Clusterspalten hat, geben Sie entweder nicht an<ClusterColumnSourceNames> oder ohne Wert angeben.
  • Standardmäßig, Cassandra undERDDAP™Behandeln Sie Spaltennamen auf fallunempfindliche Weise. Aber wenn Sie setzenSpalteNameQuoteszu "ERDDAP™wird Cassandra Spaltennamen auf eine fallempfindliche Weise behandeln.  

<indexColumnSourceNames>

Cassandra akzeptiert'='Zwänge auf sekundären Indexspalten, die die Spalten sind, die Sie explizit Indexe für via erstellt haben

    CREATE INDEX *indexName* ON *keyspace.tableName* (*columnName*);  

(Ja, die Klammern sind erforderlich.)
So ist es sehr nützlich, wenn Sie diese Spalten über<indexColumnSourceNames>. Dies ermöglichtERDDAP™effizient mit Cassandra arbeiten. Wenn es Indexspalten gibt und Sie nicht sagenERDDAP, einige Fragen werden unnötig sein, schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.

  • Zum Beispiel<indexColumnSourceNamen> myIndexColumn1, myIndexColumn2 </indexColumnSourceNamen>
  • Wenn eine Cassandra-Tabelle keine Indexspalten hat, geben Sie entweder nicht an<indexColumnSourceNames> oder ohne Wert angeben.
  • WARNING: Cassandra-Indizes sind nicht wie Datenbankindizes. Cassandra-Indizes helfen nur mit'='Einschränkungen. Und sie sind nurempfohlenfür Spalten, die deutlich weniger als Gesamtwerte aufweisen.
  • Standardmäßig, Cassandra undERDDAP™Behandeln Sie Spaltennamen auf fallunempfindliche Weise. Aber wenn Sie setzenSpalteNameQuoteszu "ERDDAP™wird Cassandra Spaltennamen auf eine fallempfindliche Weise behandeln.  

<maxRequestFraction>

WannERDDAP™ (Wiederholen) einen Datensatz lädt,ERDDAP™bekommt von Cassandra die Liste der verschiedenen Kombinationen der Partitionsschlüssel. Für einen riesigen Datensatz wird die Anzahl der Kombinationen groß sein. Wenn Sie verhindern möchten, dass Nutzeranfragen den meisten oder allen Datensatz anfordern (oder sogar eine Anfrage, die fragtERDDAP™die meisten oder alle Daten herunterladen, um sie weiter zu filtern) , you can tellERDDAP™nur um Anträge zuzulassen, die die Anzahl der Kombinationen um einen gewissen Betrag reduzieren<maxRequestFraction>, die eine schwimmende Punktzahl zwischen 1e-10 ist (was bedeutet, dass der Antrag nicht mehr als 1 Kombination in einer Milliarde benötigen kann) und 1 (der Standard, was bedeutet, dass die Anforderung für den gesamten Datensatz sein kann) . Wenn beispielsweise ein Datensatz 10000 verschiedene Kombinationen der Partitionsschlüssel aufweist und maxRequestFraction auf 0,1 gesetzt ist, dann Anfragen, die Daten aus 1001 oder mehr Kombinationen benötigen, eine Fehlermeldung erzeugen, jedoch Anträge, die Daten von 1000 oder weniger Kombinationen benötigen, sind zulässig.

Im Allgemeinen, je größer der Datensatz, desto niedriger sollten Sie festlegen<maxRequestFraction>. So können Sie es auf 1 für einen kleinen Datensatz, 0,1 für einen mittleren Datensatz, 0,01 für einen großen Datensatz und 0,0001 für einen riesigen Datensatz setzen.

Dieser Ansatz ist nicht perfekt. Es wird dazu führen, dass einige vernünftige Anträge abgelehnt werden und einige zu große Anträge erlaubt werden. Aber es ist ein schwieriges Problem, und diese Lösung ist viel besser als nichts.

CassandrasubsetVariables

Wie bei anderen EDDTable-Datensätzen können Sie eine komma-separierte Liste angeben<dataVariable>destinationNames in einem globalen Attribut namens "subsetVariables" Variablen zu identifizieren, die eine begrenzte Anzahl von Werten aufweisen. Der Datensatz hat dann eine .subset-Webseite und zeigt Listen von verschiedenen Werten für diese Variablen in Dropdown-Listen auf vielen Webseiten.

Inklusive nur Partitionsschlüsselgrößen und statische Spalten in der Liste ist STRONGLY ENCOURAGED. Cassandra wird in der Lage sein, die Liste der verschiedenen Kombinationen sehr schnell und einfach zu erzeugen, wenn der Datensatz neu geladen wird. Eine Ausnahme sind Zeitstempel-Partitionsschlüssel, die grobe Versionen einer anderen Zeitstempelsäule sind -- es ist wahrscheinlich am besten, diese aus der Liste dersubsetVariablesda es eine große Anzahl von Werten gibt und sie für Benutzer nicht sehr nützlich sind.

Wenn Sie nicht-Partition-Taste, nicht-statische Variablen in der Liste enthalten, wird es wahrscheinlich sein sehr rechnerisch teuer für Cassandra jedes Mal, wenn der Datensatz neu geladen wird, weilERDDAP™muss jede Zeile des Datensatzes durchschauen, um die Informationen zu generieren. In der Tat ist die Abfrage wahrscheinlich scheitern. Abgesehen von sehr kleinen Datensätzen ist dies also STRONGLY DISCOURAGED.

Datentypen von Cassandra

Denn es gibt etwas Mehrdeutigkeit darüberCassandra DatentypenKarte, dieERDDAP™Datentypen, Sie müssen eine [<DatenTyp>] (#datatype) Tag für jeden [<dataVariable> (#datavariable) zu sagenERDDAP™welche Datentyp zu verwenden. Der StandardERDDAP™Daten Arten (und den häufigsten entsprechenden Cassandra-Datentypen) sind:

  • Borolen (Borolen) , dieERDDAP™dann speichert als Bytes
  • Byte (int, wenn der Bereich -128 bis 127)
  • kurz (int, wenn der Bereich -32768 bis 32767)
  • in (int, Zähler?, varint?, wenn der Bereich ist -2147483648 bis 2147483647)
  • lang (bigint, counter?, varint?, wenn der Bereich ist -9223372036854775808 bis 9223372036854775807)
  • Flossen (Flossen)
  • Doppelzimmer (doppelt, dezimal (mit möglichem Präzisionsverlust) , Zeitstempel)
  • ! (ascii oder text, wenn sie nie mehr als 1 Zeichen haben)
  • Streichung (ascii, text, varchar, inet, uuid, timeuuid, blob, map, set, list?)

Cassandra'sZeitstempelist ein Sonderfall:ERDDAPDoppeldaten Typ.

Wenn Sie einen String-Datentyp angebenERDDAP™für eine Cassandra-Karte, Set oder Liste, die Karte, das Set oder die Liste auf jeder Cassandra-Reihe wird in eine einzelne Zeile in derERDDAP™Tisch.ERDDAP™hat ein alternatives System für Listen; siehe unten.

Typ Listen --ERDDAP's [<DatenTyp>] (#datatype) Tag für CassandradataVariables kann die regelmäßigeERDDAP™Daten Arten (siehe oben) plus mehrere spezielle DatenTypen, die für Cassandra Listenspalten verwendet werden können: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, floatList, doubleList, charList, StringList. Wenn eine dieser Listenspalten sich in den Ergebnissen befindet, die anERDDAP™, jede Zeile der Quelldaten wird auf Liste erweitert. Größe () Datenreihen inERDDAP; einfache Daten Arten (z.B. int) in dieser Quelldatenzeile wird doppelte Liste. Größe () Zeiten. Wenn die Ergebnisse mehr als eine Listenvariable enthalten, haben alle Listen auf einer bestimmten Datenzeile die gleiche Größe und müssen "parallele" Listen sein, oderERDDAP™wird eine Fehlermeldung generieren. Beispielsweise bei Strommessungen aus einem ADCP, Tiefe\[0)\], uCurrent\[0)\], vCurrent\[0)\]und zCurrent\[0)\]alle verwandt sind und Tiefe\[1\], uCurrent\[1\], vCurrent\[1\]und zCurrent\[1\]sind alle verwandt, ... Alternativ, wenn Sie nicht wollenERDDAP™eine Liste in mehrere Zeilen in derERDDAP™Tabelle, String als diedataVariableDaten Geben Sie so die gesamte Liste als ein String auf einer Zeile inERDDAP.

Cassandra TimeStamp Daten

Die Zeitstempeldaten von Cassandra sind sich immer der Zeitzonen bewusst. Wenn Sie Zeitstempeldaten ohne Angabe einer Zeitzone eingeben, geht Cassandra davon aus, dass der Zeitstempel die lokale Zeitzone nutzt.

ERDDAP™unterstützt Zeitstempeldaten und stellt immer die Daten in derZulu/GMT Zeitzone. Also, wenn Sie Zeitstempeldaten in Cassandra mit einer anderen Zeitzone alsZulu/GMT, denken Sie daran, dass Sie alle Anfragen für Zeitstempeldaten inERDDAP™Verwendung vonZulu/GMT Zeitzone. Also nicht überrascht sein, wenn die Zeitstempelwerte, die ausERDDAPwerden wegen des Zeitzonenschalters von Ort zu Ort um mehrere Stunden verschobenZulu-GMT-Zeit.

  • InERDDAP'datasets.xmlin der<dataVariable> tag für eine Zeitstempelvariable, Set
          <dataType>double</dataType>  

und in<addAttributes> eingestellt

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Vorschlag: Wenn die Daten ein Zeitbereich sind, ist es sinnvoll, die Zeitstempelwerte auf die Mitte des implizierten Zeitbereichs bezogen zu haben. (zum Beispiel, Mittag) . Wenn zum Beispiel ein Benutzer Daten für 2010-03-26T13:00Z von einem anderen Datensatz hat und die nächsten Daten von diesem Cassandra Datensatz, der Daten für jeden Tag hat, dann die Daten für 2010-03-26T12:00Z (die Cassandra-Daten zu diesem Zeitpunkt) ist offensichtlich das Beste (im Gegensatz zur Mitternacht vor oder nach, wo es weniger offensichtlich ist, was am besten ist) .
  • ERDDAP™hat ein DienstprogrammNumerisch umrechnen Zeit für/von einer Streichzeit.
  • Vgl.WieERDDAP™Angebote mit Zeit.  

Integer null

Cassandra unterstützt Nullen in Cassandra int (ERDDAP™in) und Bigint (ERDDAP™lang) Spalten, aberERDDAP™unterstützt keine wahren Nullen für einen ganzzahligen Datentyp. Standardmäßig werden Cassandra ganze Nulls inERDDAP™bis 2147483647 für Int-Säulen oder 9223372036854775807 für lange Spalten. Diese erscheinen als "NaN" in einigen Arten von Textausgabedateien (z.B. .csv) , "" in anderen Textausgabedateien (zum Beispiel,.htmlTable) , und die spezifische Zahl (2147483647 für fehlende Intwerte) in anderen Arten von Dateien (zum Beispiel binäre Dateien wie.ncund Matte) . Ein Benutzer kann nach Zeilen von Daten mit dieser Art von fehlendem Wert suchen, indem er sich auf "NaN", z.B. "&windSpeed=NaN" bezieht.

Wenn Sie einen anderen Ganzzahlwert verwenden, um fehlende Werte in Ihrer Cassandra-Tabelle anzuzeigen, bitte diesen Wert indatasets.xml:

<att name="missing\_value" type="int"\>-999</att>

Für Cassandra Floating Point Spalten, Nullen werden in NaNs umgewandelt inERDDAP. Für Cassandra-Datentypen, die in Strings umgewandelt werdenERDDAP™, nulls werden in leere Strings umgewandelt. Das sollte kein Problem sein.

"WARNUNG: Re-preparing bereits vorbereitete Abfrage"

  • "WARNUNG: Re-preparing bereits vorbereitete Abfrage" in Tomcat /logs/catalina.out (oder eine andere Tomcat Protokolldatei)
    Cassandra-Dokumentation sagt, dass es Probleme gibt, wenn die gleiche Abfrage in eine vorbereiteteStatement zweimal gemacht wird (oder mehr) . (SieheFehlerbericht.) Um Cassandra nicht sauer zu machen,ERDDAP™Caches alle VorbereiteteStatements, so dass es sie wiederverwenden kann. Der Cache ist verloren, wenn/wenn Tomcat/ERDDAP™ist neu gestartet, aber ich denke, das ist okay, weil die Vorbereitungen mit einer bestimmten Sitzung verbunden sind (zwischenJavaund Cassandra) , die auch verloren geht. Sie können diese Nachrichten sehen. Ich kenne keine andere Lösung. Glücklicherweise ist es eine Warnung, kein Fehler (Obwohl Cassandra droht, dass es zu Leistungsproblemen führen kann) .

Cassandra behauptet, dass Vorbereitete Bestimmungen für immer gut sind, alsoERDDAP"s cached PreparedStatements sollten nie außer-of-date/invalid. Wenn das nicht wahr ist, und Sie Fehler über bestimmte VorbereiteteStatements erhalten, die nicht aktuell/ungültig sind, dann müssen Sie neu startenERDDAP™zu klärenERDDAP's Cache of ReadydStatements.

Cassandra Sicherheit

Vgl.Sicherung Cassandra

Wenn Sie mit Cassandra arbeiten, müssen Sie die Dinge so sicher und sicher wie möglich zu tun, um einen bösartigen Benutzer zu vermeiden, um Ihre Cassandra zu beschädigen oder Zugriff auf Daten zu erhalten, die sie nicht haben sollten.ERDDAP™versucht, die Dinge auch sicher zu machen.

  • Wir ermutigen Sie zur EinrichtungERDDAP™um Cassandra als Cassandra-Nutzer zu verbinden, der nur Zugriff auf die relevant Tabelle (S) und hat nur READ Privilegien.
  • Wir ermutigen Sie, die Verbindung vonERDDAP™nach Cassandra, so dass es
    • immer verwendet SSL,
    • nur Verbindungen von einer IP-Adresse (oder einen Adressblock) und von der einenERDDAP™Benutzer und
    • nur Passwörter in ihrem MD5 Hashed-Form.
  • \[VERFAHREN\]Die Verbindung Vorteile (einschließlich des Passworts!) als Klartext gespeichert werdendatasets.xml. Wir haben keinen Weg gefunden, damit der Administrator das Cassandra-Passwort eingeben kann.ERDDAPStart in Tomcat (die ohne Benutzereingabe erfolgt) , so muss das Passwort in einer Datei zugänglich sein. Um dies sicherer zu machen:
    • Du (dieERDDAP™Administrator) sollte der Eigentümer seindatasets.xmlund haben READ und WRITE Zugriff.
    • Machen Sie eine Gruppe, die nur user=tomcat enthält. Verwenden Sie chgrp, um die Gruppe fürdatasets.xml, mit nur READ Privilegien.
    • Verwenden Sie chmod, um o-rwx Privilegien zuzuordnen (kein READ- oder WRITE-Zugang für "andere" Benutzer) fürdatasets.xml.
  • WannERDDAP™, das Passwort und andere Verbindungseigenschaften werden in "private" gespeichertJavaVariablen.
  • Anfragen von Kunden werden vor der Generierung der CQL-Anfragen für Cassandra auf Gültigkeit geprüft.
  • Anfragen an Cassandra werden mit CQL Bound/PreparedStatements gestellt, um CQL Injektion zu verhindern. In jedem Fall ist Cassandra inhärent weniger anfällig für CQL-Injektion als herkömmliche Datenbanken sindSQL-Injektion.  

Cassandra Geschwindigkeit

Cassandra kann schnell oder langsam sein. Es gibt einige Dinge, die Sie tun können, um es schnell zu machen:

  • Im Allgemeinen - Die Art von CQL ist, dass Abfragen sinddeclaration. Sie geben nur an, was der Benutzer will. Sie enthalten keine Spezifikation oder Hinweise, wie die Abfrage bearbeitet oder optimiert werden soll. So gibt es keinen WegERDDAP™die Abfrage so zu generieren, dass sie Cassandra hilft, die Abfrage zu optimieren (oder in irgendeiner Weise spezifiziert, wie die Abfrage bearbeitet werden soll) . Im Allgemeinen liegt es an dem Cassandra-Administrator, Dinge einzurichten (z.B. Indizes) für bestimmte Arten von Abfragen zu optimieren.  
  • Angabe der Zeitstempelsäulen, die mit gröberen Präzisions-Zeitstempel-Partitionschlüsseln über [<Partition KeySourceNames>] (#partitionkeysourcenames) ist der wichtigste Weg zu helfenERDDAP™effizient mit Cassandra arbeiten. Wenn diese Beziehung in einem Cassandra-Tisch existiert und Sie nicht sagenERDDAP™, der Datensatz wird schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.  
  • Angabe der Clusterspalten über [<ClusterColumnSourceNamen>] (#clustercolumnsourcenames) ist der zweitwichtigste Weg zu helfenERDDAP™effizient mit Cassandra arbeiten. Wenn es Clusterspalten gibt und Sie nicht sagenERDDAP, eine große Teilmenge der möglichen Abfragen für Daten wird unnötig, schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.  
  • Make-upIndexfür gebräuchliche Variablen -- Sie können einige Abfragen beschleunigen, indem Sie Indexe für Cassandra Spalten erstellen, die oft mit "=" Einschränkungen eingeschränkt sind.

Cassandra kann keine Indexe für Listen-, Set- oder Kartenspalten erstellen.

  • Angabe der Indexspalten über [<IndexColumnSourceNames>] (#indexcolumnsourcenames) ist eine wichtige HilfeERDDAP™effizient mit Cassandra arbeiten. Wenn es Indexspalten gibt und Sie nicht sagenERDDAP, einige Abfragen für Daten werden unnötig, schmerzlich langsam inERDDAP™und nutzen Tonnen von Cassandra-Ressourcen.  

Cassandra St. Petersburg

  • "Cassandra stats" Diagnosenachrichten-- Für jedenERDDAP™Benutzeranfrage an einen Cassandra-Datensatz,ERDDAP™wird eine Zeile in der Protokolldatei drucken, BigParentDirectory /logs/log.txt, mit einigen Statistiken zur Abfrage, zum Beispiel
        \\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405  

Mit den Zahlen im obigen Beispiel bedeutet dies:

  • WannERDDAP™Letzter Beitrag (Wiederholen) diesen Datensatz geladen, Cassandra sagteERDDAP™dass es 10000 verschiedene Kombinationen der Partitionsschlüssel gab.ERDDAP™alle verschiedenen Kombinationen in einer Datei kaschiert.
  • Aufgrund der Zwänge des Benutzers,ERDDAP™identifizierte 2 Kombinationen aus dem 10000, die die gewünschten Daten haben könnten. Also,ERDDAP™2 Anrufe nach Cassandra, eine für jede Kombination der Partitionsschlüssel. (Das erfordert Cassandra.) Offensichtlich ist es schwierig, wenn ein großer Datensatz eine große Anzahl von Kombinationen der Partitionsschlüssel hat und eine bestimmte Anfrage das nicht drastisch reduziert. Sie können verlangen, dass jede Anfrage den Schlüsselraum durch die Einstellung reduzieren [<maxRequestFraction> (#maxrequestfraction) . Hier, 2/10000=2e-4, das ist weniger als die maxRequestFraction (0,1 mg/kg) , so war die Anfrage erlaubt.
  • Nach der Anwendung der Zwänge auf den Partitionsschlüsseln,Clusterspalten, undIndexspaltendie vonERDDAP™, Cassandra lieferte 1200 Datenzeilen anERDDAP™im ResultSet.
  • Das Ergebnis sie/Sie hattenDaten Typ Art ListeSpalten (mit einem Durchschnitt von 10 Artikeln pro Liste) , weilERDDAP™erweitert die 1200 Reihen von Cassandra in 12000 Reihen inERDDAP.
  • ERDDAP™alle Einschränkungen des Nutzers auf die Daten von Cassandra. In diesem Fall verringerten die Beschränkungen, die Cassandra nicht behandelt hatte, die Anzahl der Zeilen auf 7405. Das ist die Anzahl der Zeilen, die an den Benutzer gesendet werden.

Die wichtigste Verwendung dieser Diagnosenachrichten ist, sicherzustellen, dassERDDAP™tut, was du denkst, es tut. Wenn es nicht ist (z.B. reduziert sie die Anzahl der verschiedenen Kombinationen nicht wie erwartet?) , dann können Sie die Informationen verwenden, um herauszufinden, was falsch läuft.  

  • Forschung und Experimente, um besser zu finden und zu setzen [<AnschlussProperty> (#cassandra-connectionproperty) 's.  
  • Überprüfen Sie die Geschwindigkeit der Netzverbindung zwischen Cassandra undERDDAP. Wenn die Verbindung langsam ist, sehen Sie, ob Sie sie verbessern können. Die beste Situation ist, wennERDDAP™wird auf einem Server ausgeführt, der mit demselben verbunden ist (schnell) schaltet als Server den Cassandra-Knoten, an den Sie sich anschließen.  
  • Bitte geduldig sein. Lesen Sie die Informationen hier und in der Cassandra Dokumentation sorgfältig. Experiment. Überprüfen Sie Ihre Arbeit. Wenn die Cassandra...ERDDAP™Verbindung ist immer noch langsamer als Sie erwarten, beinhalten Sie bitte das Schema Ihrer Cassandra-Tabelle und IhrERDDAP™ein Stückdatasets.xmlund unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.  
  • Wenn alles versagt, die Speicherung der Daten in einer SammlungNetCDFV3.ncDateien (insbesondere.ncDateien, die dieCF Diskrete Sampling Geometrien (DSG) Contiguous Ragged Array Datenstrukturen und so mitERDDAP'EDDTableFromNcCFFiles) . Wenn sie logisch organisiert sind (jeder mit Daten für ein Stück Raum und Zeit) ,ERDDAP™kann Daten sehr schnell aus ihnen extrahieren.  

EDDTableFromCassandra Skelett XML

  <dataset type="EDDTableFromCassandra" datasetID\="..." active\="..." >
      <ipAddress>...</ipAddress>
        <!-- The Cassandra URL without the port number, for example,
        127.0.0.1 REQUIRED. -->
      <connectionProperty name="name">value</connectionProperty>
        <!-- The names (for example, "readTimeoutMillis") and values
          of the Cassandra properties that ERDDAP™ needs to change.
          0 or more. -->
      <keyspace>...</keyspace> <!-- The name of the keyspace that has
        the table. REQUIRED. -->
      <tableName>...</tableName> <!-- The name of the table, default = "".
        REQUIRED. -->
      <partitionKeySourceNames>...<partitionKeySourceNames>
        <!-- REQUIRED. -->
      <clusterColumnSourceNames>...<clusterColumnSourceNames>
        <!-- OPTIONAL. -->
      <indexColumnSourceNames>...<indexColumnSourceNames> <!-- OPTIONAL. -->
      <maxRequestFraction>...<maxRequestFraction>
        <!-- OPTIONAL double between 1e-10 and 1 (the default). -->
      <columnNameQuotes>...<columnNameQuotes> <!-- OPTIONAL.
        Options: \[nothing\] (the default) or ". -->
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more.
         Each dataVariable MUST include a <dataType> tag. See
           Cassandra DataTypes.
         For Cassandra timestamp columns, set dataType=double and
         units=seconds since 1970-01-01T00:00:00Z -->
  </dataset>

EDDTableFromDapSequenz

EDDTableFromDapSequenz behandelt Variablen innerhalb 1- und 2-Level-Sequenzen ausDAPServer wieDAPPER (wart auf https://www.pmel.noaa.gov/epic/software/dapper/ , jetzt eingestellt) .

  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern. Sie können die Informationen sammeln, die Sie benötigen, indem Sie sich die DDS- und DAS-Dateien des Quelldatensatzes in Ihrem Browser anschauen ( indem Sie .das und .dds in den Browser einfügen.sourceUrl(ein Beispiel war https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds )

  • Eine Variable ist inDAPSequenz, wenn die Antwort .dds anzeigt, dass die Datenstruktur, die die Variable hält, eine "Sequenz" ist (Fall unempfindlich) .

  • In einigen Fällen sehen Sie eine Sequenz innerhalb einer Sequenz, eine 2-stufige Sequenz -- EDDTableFromDapSequence behandelt diese auch.

EDDTableFromDapSequence Skelett XML

  <dataset type="EDDTableFromDapSequence" datasetID\="..." active\="..." >
      <sourceUrl>...</sourceUrl>
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <outerSequenceName>...</outerSequenceName>
        <!-- The name of the outer sequence for DAP sequence data.
        This tag is REQUIRED. -->
      <innerSequenceName>...</innerSequenceName>
        <!-- The name of the inner sequence for DAP sequence data.
        This tag is OPTIONAL; use it if the DAP data is a two level
        sequence. -->
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
      <sourceCanConstrainStringEQNE>true|false</sourceCanConstrainStringEQNE>
      <sourceCanConstrainStringGTLT>true|false</sourceCanConstrainStringGTLT>
      <sourceCanConstrainStringRegex>...</sourceCanConstrainStringRegex>
      <skipDapperSpacerRows>...</skipDapperSpacerRows>
        <!-- skipDapperSpacerRows specifies whether the dataset
        will skip the last row of each innerSequence other than the
        last innerSequence (because Dapper servers put NaNs in the
        row to act as a spacer). This tag is OPTIONAL. The default
        is false. It is recommended that you set this to true for
        all Dapper sources and false for all other data sources. -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more -->
    </dataset>

EDDTableFromDatabase

EDDTableFromDatabase behandelt Daten aus einer relationalen Datenbanktabelle oderBlick

Eine Tabelle oder Ansicht

Wenn die Daten, die Sie bedienen möchten, in zwei oder mehr Tabellen (und braucht daher eine JOIN, um Daten aus beiden Tabellen auf einmal zu extrahieren) , Sie müssen einen machendenormalisiert (bereits verbunden) Tabelle oderBlick mit allen Daten, die Sie als Datensatz zur Verfügung stellen möchtenERDDAP.

Für große, komplexe Datenbanken kann es sinnvoll sein, mehrere Blöcke als denormalisierte Tabellen zu trennen, die jeweils mit einer anderen Art von Daten, die getrennte Datensätze inERDDAP.

Eine denormalisierte Tabelle für den Einsatz inERDDAP™klingt wie eine verrückte Idee. Bitte vertrauen Sie uns. Es gibt mehrere Gründe, warumERDDAP™Arbeiten mit denormalisierten Tabellen:

  • Es ist für Benutzer enorm einfacher. WannERDDAP™präsentiert den Datensatz als eine, einfache, denormalisierte, einzelne Tabelle, es ist sehr einfach für jeden, die Daten zu verstehen. Die meisten Benutzer haben nie von normalisierten Tabellen gehört, und sehr wenige verstehen Schlüssel, fremde Schlüssel, oder Tisch schließt, und sie fast sicher nicht wissen, die Details der verschiedenen Arten von Joins, oder wie man den SQL angeben, um einen Join zu tun (oder mehrere Verbindungen) richtig. Die Verwendung einer denormalisierten Tabelle vermeidet all diese Probleme. Allein aus diesem Grund wird die Verwendung einer denormalisierten Einzeltabelle zur Darstellung eines Datensatzes gerechtfertigt,ERDDAP™Benutzer.  
  • Normalisierte Tabellen (mehrere Tabellen, die durch Schlüsselspalten verwandt sind) groß sind, um Daten in einer Datenbank zu speichern. Aber auch in SQL ist das Ergebnis, das an den Benutzer zurückgegeben wird, ein denormalisiert (mit) Einzeltisch. So scheint es sinnvoll, den Datensatz den Benutzern als eine riesige, denormalisierte, einzelne Tabelle, aus der sie dann Subsets anfordern können (z.B., zeigen Sie mir Zeilen der Tabelle, wo Temperatur > 30) .  
  • Sie können Änderungen vornehmenERDDAP™ohne Ihre Tische zu ändern. ERDDAP™hat ein paar Anforderungen, die sich von der Einrichtung Ihrer Datenbank unterscheiden können. Zum BeispielERDDAP™erfordert, dass Zeitstempeldaten in "Zeitstempel mit Zeitzone"-Feldern gespeichert werden. Durch eine separate Tabelle/Ansicht fürERDDAP™, Sie können diese Änderungen vornehmen, wenn Sie die denormalisierte Tabelle fürERDDAP. So müssen Sie keine Änderungen an Ihren Tabellen vornehmen.  
  • ERDDAP™wird einige der Struktur der normalisierten Tabellen neu erstellen. Sie können angeben, welche Datenspalten aus den Tabellen 'outer' stammen und daher eine begrenzte Anzahl von eindeutigen Werten aufweisen.ERDDAP™wird alle verschiedenen Kombinationen von Werten in diesen Spalten sammeln und den Benutzern auf einem speziellen . subset web-Seite, die Benutzer hilft schnell wählen Untergruppen des Datensatzes. Die einzelnen Werte für jede Spalte werden auch in Dropdown-Listen auf den anderen Webseiten des Datensatzes angezeigt.  
  • Eine denormalisierte Tabelle macht die Daten von Ihnen auf dieERDDAPAdministrator einfach. Sie sind der Experte für diesen Datensatz, so ist es sinnvoll, dass Sie die Entscheidungen treffen, über welche Tabellen und welche Spalten Sie beitreten und wie Sie sie beitreten können. Du musst uns also nicht übergeben. (oder schlechter, die Endbenutzer) mehrere Tabellen und ausführliche Anweisungen, wie man ihnen beitritt, müssen Sie uns nur Zugang zu der denormalisierten Tabelle geben.  
  • Eine denormalisierte Tabelle ermöglicht einen effizienten Zugriff auf die Daten. Die denormalisierte Form ist in der Regel schneller Zugang als die normalisierte Form. Teilnehmer können langsam sein. Mehrere Verbindungen können sehr langsam sein.  

Um die Daten aus zwei oder mehr Tabellen in der Datenbank inERDDAP™, es gibt drei Optionen:  

  • Empfohlene Option: Sie können eine Komma- oder Tab-Separated-Wert-Datei mit den Daten aus der denormalisierten Tabelle erstellen. Wenn der Datensatz riesig ist, dann ist es sinnvoll, mehrere Dateien zu erstellen, jede mit einer zusammenhängenden Teilmenge der denormalisierten Tabelle (beispielsweise Daten aus einem kleineren Zeitbereich) .

Der große Vorteil hier ist, dassERDDAP™wird in der Lage sein, Benutzeranfragen für Daten ohne weiteren Aufwand durch Ihre Datenbank zu bearbeiten. So.ERDDAP™wird keine Belastung für Ihre Datenbank oder ein Sicherheitsrisiko sein. Dies ist die beste Option unter fast allen Umständen, weilERDDAP™kann in der Regel Daten von Dateien schneller als von einer Datenbank erhalten (wenn wir die .csv-Dateien in.ncCF-Dateien) . (Teil des Grunds ist, dassERDDAP+files ist ein schreibgeschütztes System und muss sich nicht mit Änderungen beschäftigen, während die BereitstellungINSGESAMT (Atomkraft, Konsistenz, Isolation, Haltbarkeit) .) Außerdem brauchen Sie wahrscheinlich keinen separaten Server, da wir die Daten auf einer unserer RAIDs speichern und mit einem vorhandenen Zugriff darauf zugreifen können.ERDDAP™auf einem vorhandenen Server.

  • Okay Option: Sie haben eine neue Datenbank auf einem anderen Computer mit nur der denormalisierten Tabelle eingerichtet. Da diese Datenbank eine kostenlose und offene Quelldatenbank wie MariaDB, MySQL und PostgreSQL sein kann, muss diese Option nicht viel kosten.

Der große Vorteil hier ist, dassERDDAP™wird in der Lage sein, Benutzeranfragen für Daten ohne weiteren Aufwand durch Ihre aktuelle Datenbank zu bearbeiten. So.ERDDAP™wird keine Belastung für Ihre aktuelle Datenbank sein. Dies eliminiert auch viele Sicherheitsbedenken, daERDDAP™hat keinen Zugriff auf Ihre aktuelle Datenbank.

  • Offene Option: Wir können verbindenERDDAP™in Ihre aktuelle Datenbank. Dazu müssen Sie:

    • Erstellen Sie eine separate Tabelle oder Ansicht mit der denormalisierten Datentabelle.
    • Erstellen Sie einen "erddap" Benutzer, der nur auf die denormalisierte Tabelle zugreifen kann (S) .  

Dies ist eine Option, wenn sich die Daten sehr häufig ändern und Sie geben möchtenERDDAP™Benutzer sofortigen Zugriff auf diese Änderungen; aber auch so kann es sinnvoll sein, die Dateioption oben und periodisch zu verwenden (alle 30 Minuten?) ersetzen Sie die Datei, die die heutigen Daten hat. Die großen Nachteile dieses Ansatzes sind:ERDDAP™Benutzeranfragen werden wahrscheinlich eine unerträglich große Belastung für Ihre Datenbank undERDDAP™Verbindung ist ein Sicherheitsrisiko (obwohl wir das Risiko minimieren / verwalten können) .

Den denormalisierten Tisch oder die Ansicht fürERDDAP™ist eine gute Gelegenheit, einige Änderungen zu machen, dieERDDAP™Bedürfnisse, in einer Weise, die Ihre ursprünglichen Tabellen nicht beeinflusst:

  • Ändern Sie Datums- und Zeitstempelfelder/Spalten, um die Daten zu verwendenType, dass Postgres AnrufeZeitstempel mit Zeitzone (oder das Äquivalent in Ihrer Datenbank) . Timestamps ohne Zeitzoneninformationen funktionieren nicht korrekt inERDDAP.
  • Erstellen Sie Indexe für die Spalten, die Benutzer oft suchen.
  • Seien Sie sehr bewusstder Fall der Feld-/Spaltennamen (zum Beispiel, verwenden Sie alle Kleinbuchstaben) wenn du sie eingibst.
  • Verwenden Sie keine reservierten Wörter für die Tabelle und für die Feld-/Säulennamen.

Wenn Sie Hilfe benötigen, um die denormalisierte Tabelle oder Ansicht zu machen, wenden Sie sich bitte an Ihren Datenbankadministrator. Wenn Sie über diesen ganzen Ansatz sprechen möchten oder überlegen möchten, wie es am besten zu tun ist, mailen Sie Chris. John bei noaa.gov.

Datenbankdatasets.xml

Es ist schwierig, das richtige zu schaffendatasets.xmlInformationen, die fürERDDAP™eine Verbindung zur Datenbank herzustellen. Sei geduldig. Sei methodisch.

  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Datensätze generieren Xml hat drei spezielle Optionen für EDDTableFromDatabase:

  1. Wenn Sie "!!!LIST!!!" eingeben (ohne die Zitate) für den Katalognamen wird das Programm eine Liste der Katalognamen anzeigen.
  2. Wenn Sie "!!!LIST!!!" eingeben (ohne die Zitate) für den Schemanamen wird das Programm eine Liste der Schemanamen anzeigen.
  3. Wenn Sie "!!!LIST!!!" eingeben (ohne die Zitate) für den Tabellennamen wird das Programm eine Liste von Tabellen und deren Spalten anzeigen. Der erste Eintrag "!!!LIST!!!" ist derjenige, der verwendet wird.
  • Lesen Sie sorgfältig alle Informationen dieses Dokuments über EDDTableFromDatabase.
  • Sie können die meisten Informationen sammeln, die Sie benötigen, um das XML für einen EDDTableFromDatabase-Datensatz zu erstellen, indem Sie den Datenbankadministrator kontaktieren und das Internet durchsuchen.
  • Obwohl Datenbanken häufig Spaltennamen und Tabellennamen auf fallunempfindliche Weise behandeln, sind sie inERDDAP. Wenn eine Fehlermeldung aus der Datenbank sagt, dass ein Spaltenname unbekannt ist (z.B. "Unbekannte Kennung= ' Spalte\_Name ") auch wenn Sie wissen, dass es existiert, versuchen Sie, alle Kapitale, zum Beispiel, COLUMN , die oft die wahre, case-sensitive Version des Spaltennamens ist.
  • Arbeiten Sie eng mit dem Datenbankadministrator zusammen, der möglicherweise über relevante Erfahrungen verfügt. Wenn der Datensatz nicht geladen wird, lesen Sie dieFehlermeldungsorgfältig, um herauszufinden, warum.  

JDBC Treiber

  • [JDBC Treiber und<FahrerName> (#jdbc-Treiber) -- Sie müssen die entsprechende JDBC 3 oder JDBC 4 Treiber .jar-Datei für Ihre Datenbank erhalten und in den Warenkorb Tomcat /webapps/erdap/WEB-INF/lib nach der InstallationERDDAP. Dann in deinemdatasets.xmlfür diesen Datensatz müssen Sie die<driverName> für diesen Treiber, der (leider) anders als der Dateiname. Suche im Web für den JDBC-Treiber für Ihre Datenbank und den TreiberNamen, dassJavamuss es benutzen.

Nachdem Sie den JDBC Treiber .jar inERDDAP™lib-Verzeichnis, müssen Sie einen Verweis auf die .jar-Datei in den .bat und/oder .sh-Scriptdateien für GenerateDatasets hinzufügen Xml, DasDds und ArchiveADataset, die im Tomcat /webapps/erddap/WEB-INF/ Verzeichnis; andernfalls erhalten Sie eine ClassNotFoundException, wenn Sie diese Skripte ausführen.

Leider ist JDBC manchmal die Quelle der Probleme. In seiner Rolle als zwischengeschaltetERDDAP™und die Datenbank, es manchmal macht subtile Änderungen an der Standard/generischen Datenbank SQL-Anforderung, dassERDDAP™schafft und dadurch Probleme verursacht (zum Beispiel, bezogen aufobere/niedrige Kennungenund im Zusammenhang mitDatum/Zeitzone) . Bitte geduldig sein, die Informationen hier sorgfältig lesen, Ihre Arbeit überprüfen und unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.

Datenbank<Verbindung Eigentum >

  • (<AnschlussProperty> (#database-connectionproperty) -- In derdatasets.xmlfür Ihren Datensatz müssen Sie mehrere Verbindung definieren Objekt-Tags zu sagenERDDAP™wie Sie mit Ihrer Datenbank verbinden (zum Beispiel, um den Benutzernamen, das Passwort, die ssl-Verbindung anzugeben, undFanggröße) . Diese sind für jede Situation anders und sind etwas schwer zu finden. Suchen Sie im Web Beispiele für die Verwendung eines JDBC-Treibers, um mit Ihrer Datenbank zu verbinden. Die<VerbindungProperty> Namen (zum Beispiel "Benutzer", "Passwort", und "ssl") , und ein Teil der Verbindung Werte erhalten Sie, indem Sie das Web nach "JDBC-Verbindungseigenschaften suchen Datenbank Typ " (zum Beispiel,Oracle, MySQL, Amazon RDS, MariaDB, PostgreSQL) .  

Zitate für Namen und Case Sensitivity

  • Zitate für Field/Column Names; Case Sensitivity- Standardmäßig legt EDDTableFromDatabase ANSI-SQL-Standard-Doppel-Zitate um Feld-/Spaltennamen in SELECT-Anweisungen, falls Sie ein reserviertes Wort als Feld/Spalte-Name verwendet haben, oder ein besonderes Zeichen in einem Feld/Spalte-Namen. Die doppelten Zitate vereiteln auch bestimmte Arten von SQL-Injektionsangriffen. Du kannst es sagen.ERDDAP™", ', oder keine Zitate über<SpalteNameQuotes> indatasets.xmlfür diesen Datensatz.

Für viele Datenbanken führt die Verwendung beliebiger Zitate dazu, dass die Datenbank mit Feld-/Spaltennamen in einem Fall empfindlich arbeitet (anstatt des Standard-Datenbank-Falls unempfindlich) . Datenbanken zeigen oft Datei-/Spaltennamen als alle Großbuchstaben, wenn in der Realität das Fall sensible Form ist anders. InERDDAP™, bitte behandeln Sie immer Datenbankspalten Namen als Case sensitive.

Verwenden Sie kein reserviertes Wort für den Namen einer Datenbank, eines Katalogs, eines Schemas oder einer Tabelle.ERDDAP™keine Zitate um sie herum.

Wenn möglich, verwenden Sie alle Kleinbuchstaben für Datenbank, Katalog, Schema, Tabellennamen und Feldnamen bei der Erstellung der Datenbanktabelle (oder Ansicht) und wenn es um die Feld-/Spaltennamen indatasets.xmlinERDDAP. Ansonsten können Sie eine Fehlermeldung erhalten, dass die Datenbank, Katalog, Schema, Tabelle und/oder Feld nicht gefunden wurde. Wenn Sie diese Fehlermeldung erhalten, versuchen Sie mit der case-sensitiven Version, der gesamten Großbuchstabenversion und der gesamten Kleinbuchstabenversion des Namens inERDDAP. Einer von ihnen kann arbeiten. Falls nicht, müssen Sie den Namen der Datenbank, Katalog, Schema und/oder Tabelle in alle Kleinbuchstaben ändern.

Datenbank<Daten Art und Weise

  • Datenbank(<DatenTyp>] (#datatype) Tags -- Denn es gibt etwas Mehrdeutigkeit darüberDatenbank-DatentypenKarte, dieERDDAP™Datentypen, Sie müssen eine [<DatenTyp>] (#datatype) Tag für jeden [<dataVariable> (#datavariable) zu sagenERDDAP™welche DatenTyp zu verwenden. Ein Teil des Problems ist, dass verschiedene Datensätze unterschiedliche Begriffe für die verschiedenen Datentypen verwenden -- also versuchen Sie immer, die Definitionen zu entsprechen, nicht nur die Namen. Siehe die Beschreibung derStandardERDDAP™Daten Arten, die Hinweise auf die entsprechenden SQL-Datentypen enthält.Datum und Uhrzeitsind spezielle Fälle:ERDDAPDoppeldaten Typ.  

Datenbank Datum Zeitdaten

Einige Datenbankterminzeitspalten haben keine explizite Zeitzone. Solche Spalten sind Schwierigkeiten fürERDDAP. Datenbanken unterstützen das Konzept eines Datums (mit oder ohne Zeit) ohne Zeitzone, als ungefährer Zeitbereich. Aber...Java (und damitERDDAP) beschäftigt sich nur mit aktuellen Datums-Zeiten mit einer Zeitzone. So können Sie wissen, dass die Datumsdaten auf einer lokalen Zeitzone basieren (mit oder ohne Sommerzeit) oder das GMT/ZuluZeitzone, aberJava (undERDDAP) Nicht. Wir dachten, wir könnten dieses Problem lösen. (z.B. durch Angabe einer Zeitzone für die Spalte) , aber die Datenbank+JDBC+JavaInteraktionen machten das zu einer unzuverlässigen Lösung.

  • Also,ERDDAP™erfordert, dass Sie alle Datums- und Datumszeitdaten in der Datenbanktabelle mit einem Datenbankdatentyp speichern, der dem JDBC-Typ "Zeitstempel mit Zeitzone" entspricht (ideal, die den GMT/ZuluZeitzone) .
  • InERDDAP'datasets.xmlin der<dataVariable> tag für eine Zeitstempelvariable, Set

      <dataType>double</dataType>

und in<addAttributes> eingestellt

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Vorschlag: Wenn die Daten ein Zeitbereich sind, ist es sinnvoll, die Zeitstempelwerte auf die Mitte des implizierten Zeitbereichs bezogen zu haben. (zum Beispiel, Mittag) . Wenn zum Beispiel ein Benutzer Daten für 2010-03-26T13:00Z von einem anderen Datensatz hat und die nächsten Daten von einem Datenbankdatensatz, der Daten für jeden Tag hat, dann die Datenbankdaten für 2010-03-26T12:00Z (Daten zu diesem Zeitpunkt) ist offensichtlich das Beste (im Gegensatz zur Mitternacht vor oder nach, wo es weniger offensichtlich ist, was am besten ist) .
  • ERDDAP™hat ein DienstprogrammNumerisch umrechnen Zeit für/von einer Streichzeit.
  • Vgl.WieERDDAPAngebote mit Zeit.

Integer null

Datenbanken unterstützen Nullen in ganzzahliger (Int, klein, winzig) Spalten, aberERDDAP™unterstützt keine wahren Nullen. Datenbank-Nulls werden inERDDAP™127 für Byte-Säulen, 255 für Ubyte-Säulen, 32767 für kurze Spalten, 65535 für ushort-Säulen, 2147483647 für Int-Säulen, 4294967295 für uint-Säulen, 9,223,372,036,854,775.807 für lange Spalten, oder 18446744073709551615 für ulong-Säulen. Wenn Sie diese Standardeinstellungen verwenden, identifizieren Sie diesemissing\_values für die Benutzer des Datensatzes inERDDAP™mit

<att name="\_FillValue" type="int"\>2147483647</att>

oder

<att name="\_FillValue" type="short"\>32767</att>

Alternativ können Sie das "missing\_value"Attribut statt "\_FillValue". Datensätze generieren Xml fügt automatisch diese \_FillValue-Attribute hinzu, wenn es die vorgeschlagenen generiertdatasets.xmlfür Datenbankdatensätze.

Für Datenbank-Schwebungspunktspalten werden Nullen in NaNs umgewandeltERDDAP. Für Datenbank-Datentypen, die in Strings umgewandelt werdenERDDAP™, nulls werden in leere Strings umgewandelt.

Datenbank Sicherheit

  • Wenn Sie mit Datenbanken arbeiten, müssen Sie die Dinge so sicher und sicher wie möglich tun, um zu vermeiden, dass ein schädlicher Benutzer Ihre Datenbank beschädigen oder Zugriff auf Daten gewinnen, auf die sie nicht zugreifen sollten.ERDDAP™versucht, die Dinge auch sicher zu machen.
    • In Anbetracht der Replikation, auf einem anderen Computer, die Datenbank und Datenbanktabellen mit den Daten, die Sie wollenERDDAP™zu dienen. (Ja, für kommerzielle Datenbanken wieOracle, dies beinhaltet zusätzliche Lizenzgebühren. Aber für Open Source-Datenbanken wie PostgreSQL, MySQL, Amazon RDS und MariaDB kostet dies nichts.) Dies gibt Ihnen ein hohes Maß an Sicherheit und verhindert auchERDDAP™Anfragen von der Verlangsamung der ursprünglichen Datenbank.
    • Wir ermutigen Sie zur EinrichtungERDDAP™eine Verbindung zur Datenbank als Datenbankbenutzer, der nur Zugriff auf die relevant Datenbank (S) und hat nur READ Privilegien.
    • Wir ermutigen Sie, die Verbindung vonERDDAP™in die Datenbank, so dass es
      • immer verwendet SSL,
      • nur Verbindungen von einer IP-Adresse (oder einen Adressblock) und von der einenERDDAP™Benutzer und
      • nur Passwörter in ihrem MD5 Hashed-Form.
    • \[VERFAHREN\]Die Verbindung Vorteile (einschließlich des Passworts!) als Klartext gespeichert werdendatasets.xml. Wir haben keinen Weg gefunden, damit der Administrator das Datenbank-Passwort eingeben kann.ERDDAPStart in Tomcat (die ohne Benutzereingabe erfolgt) , so muss das Passwort in einer Datei zugänglich sein. Um dies sicherer zu machen:
      • Du (dieERDDAP™Administrator) sollte der Eigentümer seindatasets.xmlund haben READ und WRITE Zugriff.
      • Machen Sie eine Gruppe, die nur user=tomcat enthält. Verwenden Sie chgrp, um die Gruppe fürdatasets.xml, mit nur READ Privilegien.
      • Verwenden Sie chmod, um o-rwx Privilegien zuzuordnen (kein READ- oder WRITE-Zugang für "andere" Benutzer) fürdatasets.xml.
    • WannERDDAP™, das Passwort und andere Verbindungseigenschaften werden in "private" gespeichertJavaVariablen.
    • Anfragen von Clients werden vor der Generierung der SQL-Anfragen für die Datenbank auf Gültigkeit geprüft.
    • Anfragen an die Datenbank werden mit SQL-Vorbereitungen gestellt, um zu verhindernSQL-Injektion.
    • Anfragen an die Datenbank werden mit Ausführung eingereicht Abfrage (nicht ausgeführtStatement) um nur zu lesende Anfragen zu begrenzen (so versuchte SQL-Injektion, um die Datenbank zu ändern, aus diesem Grund auch) .  

SQL

  • WeilOPeNDAP's tabellarische Datenanfragen wurden entworfen, um SQL tabular Datenanfragen zu mimieren, es ist einfach fürERDDAP™um tabellarische Datenanforderungen in einfache SQL-vorbereiteteStatements zu konvertieren. Zum Beispiel dieERDDAP™Anfrage senden
    time,temperature&time>=2008-01-01T00:00:00Z&time&lt;=2008-02-01T00:00:00Z  

wird in die SQL-Vorbereitung umgewandelt

    SELECT "time", "temperature" FROM *tableName*  
WHERE "time" >= 2008-01-01T00:00:00Z AND "time" &lt;= 2008-02-01T00:00:00Z

ERDDAP™Anfragen an &distinct () und/oderorderBy ( Variablen ) DISTINCT und/oder ORDER BY hinzufügen Variablen auf die SQL vorbereitete Aussage. In der Regel wird dies die Antwort aus der Datenbank stark verlangsamen. ERDDAP™protokolliert die VorbereitetePressemitteilungwie

    statement=*thePreparedStatement*  

Dies wird eine Textdarstellung des Vorbereitenden Staates sein, die sich von der eigentlichen Vorbereitung unterscheiden kann. Beispielsweise werden in der Vorbereitung Zeiten in besonderer Weise kodiert. Aber in der Textdarstellung erscheinen sie als ISO 8601 Datumszeiten.  

Datenbankgeschwindigkeit

  • Datenbanken können langsam sein. Es gibt einige Dinge, die Sie tun können:
    • Im Allgemeinen - Die Natur von SQL ist, dass Abfragen sinddeclaration. Sie geben nur an, was der Benutzer will. Sie enthalten keine Spezifikation oder Hinweise, wie die Abfrage bearbeitet oder optimiert werden soll. So gibt es keinen WegERDDAP™die Abfrage so zu generieren, dass sie der Datenbank hilft, die Abfrage zu optimieren (oder in irgendeiner Weise spezifiziert, wie die Abfrage bearbeitet werden soll) . Im Allgemeinen liegt es an dem Datenbankadministrator, Dinge einzurichten (z.B. Indizes) für bestimmte Arten von Abfragen zu optimieren.
Legen Sie die Federgröße

Datenbanken geben die Daten anERDDAP™in Stücken. Standardmäßig geben verschiedene Datenbanken eine andere Anzahl von Zeilen in den Stücken zurück. Oft ist diese Zahl sehr klein und so sehr ineffizient. Zum Beispiel der Standard fürOracle10! Lesen Sie die JDBC-Dokumentation für den JDBC-Treiber Ihrer Datenbank, um die eingestellte Verbindungseigenschaft zu finden, um dies zu erhöhen, und fügen Sie diese der Beschreibung des Datensatzes indatasets.xml. Zum Beispiel Für MySQL und Amazon RDS verwenden

        <connectionProperty name="defaultFetchSize">10000</connectionProperty>  

Für MariaDB gibt es derzeit keine Möglichkeit, die Fetchgröße zu ändern. Aber es ist eine angeforderte Funktion, so suchen Sie das Web, um zu sehen, ob dies umgesetzt wurde. FürOracle, Verwendung

        <connectionProperty name="defaultRowPrefetch">10000</connectionProperty>  

Für PostgreSQL verwenden

        <connectionProperty name="defaultRowFetchSize">10000</connectionProperty>  

aber fühlen Sie sich frei, die Zahl zu ändern. Setzen der Zahl zu groß wird verursachenERDDAP™viel Speicher zu verwenden und wahrscheinlicher aus dem Speicher laufen.

Verbindungsvorteile

Jede Datenbank verfügt über andere Verbindungseigenschaften, die indatasets.xml. Viele von ihnen werden die Leistung der Datenbank beeinflussenERDDAP™Verbindung. Bitte lesen Sie die Dokumentation für den JDBC Treiber Ihrer Datenbank, um die Optionen zu sehen. Wenn Sie Verbindungseigenschaften finden, die nützlich sind, senden Sie bitte eine E-Mail mit den Details anerd dot data at noaa dot gov.

  • Tisch machen -- Sie werden wahrscheinlich schneller reagieren, wenn Sie periodisch (täglich? Wann gibt es neue Daten?) eine aktuelle Tabelle erstellen (wie Sie die VIEW generiert haben) und sagenERDDAP™um Daten von der Tabelle anstelle der VIEW zu erhalten. Da jede Anforderung an die Tabelle dann erfüllt werden kann, ohne eine andere Tabelle zu JOINing, wird die Antwort viel schneller sein.
  • Vakuum der Tabelle - MySQL und Amazon RDS werden viel schneller reagieren, wenn SieTABELLE OPTIMISCHUNG. Maria DB wird viel schneller reagieren, wenn SieTABELLE OPTIMISCHUNG. PostgreSQL wird viel schneller reagieren, wenn SieVACUUMdie Tabelle. Oraclehat oder braucht keinen analogen Befehl.
  • Make-upIndexfür gebräuchliche Variablen -- Sie können viele / die meisten Abfragen beschleunigen, indem Sie Indexe in der Datenbank für die Variablen erstellen (welche Datenbanken "Spalten" nennen) die oft in der Abfrage des Benutzers eingeschränkt sind. Im allgemeinen sind dies die gleichen Variablen, die von [<subsetVariables> (#subsetvariables) und/oder die Breite, Länge und Zeitvariablen.
Verwenden Sie die Verbindung Pooling

Normalerweise,ERDDAP™eine separate Verbindung zur Datenbank für jede Anfrage. Dies ist der zuverlässigste Ansatz. Die schnellere Alternative besteht darin, eine DataSource zu verwenden, die die Verbindung Pooling unterstützt. Um es einzurichten, geben Sie an (beispielsweise)

        <dataSourceName>java:comp/env/jdbc/postgres/erddap</dataSourceName>  

Direkt nebenan<sourceUrl><TreiberName>, und<Verbindung Eigentum. Und in Tomcat /conf/context.xml, definieren Sie eine Ressource mit den gleichen Informationen, zum Beispiel

        <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"/>

Allgemeine Informationen über die Nutzung einer DataSource finden Sie unter https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . Vgl.Tomcat DataSource InformationenundTomcat DataSource Beispieleoder das Web nach Beispielen der Verwendung von DataSources mit anderen Anwendungsservern suchen.

  • Wenn alles versagt, die Speicherung der Daten in einer SammlungNetCDFV3.ncDateien (insbesondere.ncDateien, die dieCF Diskrete Sampling Geometrien (DSG) Contiguous Ragged Array Datenstrukturen und so mitERDDAP'EDDTableFromNcCFFiles) . Wenn sie logisch organisiert sind (jeder mit Daten für ein Stück Raum und Zeit) ,ERDDAP™kann Daten sehr schnell aus ihnen extrahieren.  

EDDTableFromDatenbank Skelett XML

  <dataset type="EDDTableFromDatabase" datasetID\="..." active\="..." >
      <sourceUrl>...</sourceUrl>
        <!-- The format varies for each type of database, but will be
          something like:
          For MariaDB: jdbc:mariadb://xxx.xxx.xxx.xxx:3306/databaseName
          For MySql jdbc:mysql://xxx.xxx.xxx.xxx:3306/databaseName
          For Amazon RDS: jdbc:mysql://xxx.xxx.xxx.xxx:3306/databaseName
          For Oracle: jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:databaseName
          For Postgresql: jdbc:postgresql://xxx.xxx.xxx.xxx:5432/databaseName
          where xxx.xxx.xxx.xxx is the host computer's numeric IP address
          followed by :PortNumber (4 digits), which may be different for your
          database. REQUIRED. -->
      <driverName\>...</driverName>
        <!-- The high-level name of the database driver, for example,
          "org.postgresql.Driver". You need to put the actual database
          driver .jar file (for example, postgresql.jdbc.jar) in
          tomcat/webapps/erddap/WEB-INF/lib. REQUIRED. -->
      <connectionProperty name="name">value</connectionProperty>
        <!-- The names (for example, "user", "password", and "ssl")
          and values of the properties needed for ERDDAP™ to establish
          the connection to the database. 0 or more. -->
      <dataSourceName>...</dataSourceName> <!-- 0 or 1 -->
      <catalogName>...</catalogName>
        <!-- The name of the catalog which has the schema which has the
          table, default = "". OPTIONAL. Some databases don't use
          this. -->
      <schemaName>...</schemaName> <!-- The name of the
        schema which has the table, default = "". OPTIONAL. -->
      <tableName>...</tableName> <!-- The name of the
        table, default = "". REQUIRED. -->
      <columnNameQuotes><columnNameQuotes> <!-- OPTIONAL. Options:
        " (the default), ', \[nothing\]. -->
      <orderBy>...</orderBy> <!-- A comma-separated list of
        sourceNames to be used in an ORDER BY clause at the end of the
        every query sent to the database (unless the user's request
        includes an &orderBy() filter, in which case the user's
        orderBy is used). The order of the sourceNames is important.
        The leftmost (first) sourceName is most important; subsequent
        sourceNames are only used to break ties. Only relevant
        sourceNames are included in the ORDER BY clause for a given user
        request. If this is not specified, the order of the returned
        values is not specified. Default = "". OPTIONAL. -->
      <sourceCanOrderBy>no(default)|partial|yes</sourceCanOrderBy>
        <!-- 0 or 1 -->
      <sourceCanDoDistinct>no(default)|partial|yes</sourceCanDoDistinct>
        <!-- 0 or 1 -->
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more.
        Each dataVariable MUST include a <dataType> tag.
        See Database DataTypes.
        For database date and timestamp columns, set dataType=double and
        units=seconds since 1970-01-01T00:00:00Z -->
  </dataset>

EDDTableFromEDDGrid

EDDTableFromEDDGrid lässt Sie einen EDDTable-Datensatz von jedem erstellenEDDGridDatensatz.

  • Einige häufige Gründe dafür sind:
    • Damit kann der Datensatz mitOPeNDAPAuswahlzwänge, die eine Art von "Quicky by Value" sind (die ein Benutzer angefordert haben kann) .
    • Der Datensatz ist inhärent ein tabellarischer Datensatz.
  • Der Wert des globalen Attributs "maxAxis0" (in der Regel von Typ="int") , (der Standard ist 10) wird verwendet, um die Anzahl der Achsen zu begrenzen\[0)\] (in der Regel"time"Achse) Werte der eingeschlossenenEDDGridDatensatz, auf den pro Datenanforderung zugegriffen werden kann. Wenn Sie nicht wollen, dass es eine Grenze gibt, geben Sie einen Wert von 0 an. Diese Einstellung ist wichtig, denn sonst wäre es für einen Benutzer zu einfach, EDDTableFrom zu fragenEDDGridalle Daten des netzgebundenen Datensatzes durchschauen. Das würde lange dauern und mit einem Timeout-Fehler fast sicher scheitern. Dies ist die Einstellung, die es sicher macht, EDDTableFrom habenEDDGridDatensätze in IhremERDDAPohne Angst, dass sie zu einer unangemessenen Nutzung von Rechenressourcen führen.
  • wenn der eingeschlosseneEDDGrideinEDDGridVon ErddapundERDDAP™gleichERDDAP, dann EDDTableFromEDDGridwird immer die aktuell verfügbare Version des referenzierten Datensatzes direkt verwenden. Dies ist ein sehr effizienter Weg für EDDTableFromEDDGridZugriff auf die gegitterten Daten.
  • Diese Klasse ist [<Nachladen AllNMinutes>] (#reloadeverynminutes) zählt. Die eingeschlossenenEDDGrid'<reloadEveryNMinutes> wird ignoriert.
  • Wenn ein Wert für [<UpdateEveryNMillis>] (#updateeverynmillis) wird für diesen Datensatz geliefert, wird ignoriert. Die eingeschlossenenEDDGrid'<updateEveryNMillis> ist, was zählt.
  • GenerateDatasetsXmlhat eine Option für dataset type=EDDTableFromEDDGriddie nach der URL einesERDDAP (in der Regel gleichERDDAP) (Ende in "/erddap/") und einen regelmäßigen Ausdruck. Datensätze generieren Xml generiert dann das XML für ein EDDTableFromEDDGridDatensatz für jeden netzgebundenen Datensatz imERDDAP™diedatasetIDdie dem regulären Ausdruck entspricht (verwenden .\* für alledatasetIDs für Rasterdatensätze) .

Das von GenerateDatasetsXml für jeden Datensatz generierte XML-Qucks umfasst:

  • AdatasetIDdieEDDGrid'datasetIDplus "\_AsATable".
  • Ein neues globales Gesamtattribut, dasEDDGridZusammenfassung plus einen neuen ersten Absatz, der beschreibt, was dieser Datensatz ist.
  • Ein neues Titel globales Attribut, dasEDDGridTitel plus ", (Als Tabelle) ".
  • Ein neues maxAxis0 globales Attribut mit einem Wert von 10.

EDDTableFromEDDGridSkelette 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 erstellt einen Datensatz aus Informationen über eine Gruppe von Dateien im Dateisystem des Servers, einschließlich einer URL für jede Datei, so dass Benutzer die Dateien über herunterladen könnenERDDAP'"files"System. Im Gegensatz zu allenEDDTableFromFilesUnterklassen, dieser Datensatztyp dient nicht Daten innerhalb der Dateien.

  • EDDTableFromFileNames ist nützlich, wenn:
    • Sie haben eine Gruppe von Dateien, die Sie als ganze Dateien verbreiten möchten, weil sie nicht enthalten "Daten" in der gleichen Weise, dass regelmäßige Datendateien haben Daten. Zum Beispiel Bilddateien, Videodateien, Word-Dokumente, Excel-Tabellendateien, PowerPoint-Präsentationsdateien oder Textdateien mit unstrukturiertem Text.
    • Sie haben eine Gruppe von Dateien, die Daten in einem Format haben, dasERDDAP™kann noch nicht gelesen werden. Beispielsweise ein projektspezifisches, benutzerdefiniertes, binäres Format.  

EDDTableFromFileNames Daten

Datei R
  • <DateiDir> -- Dies gibt das Quellverzeichnis im Dateisystem des Servers mit den Dateien für diesen Datensatz an. Die Dateien, die tatsächlich im Dateisystem des Servers in<fileDir> erscheint in der url Spalte dieses Datensatzes innerhalb eines virtuellen Verzeichnisses namens https://serverUrl/erddap/files/datasetID/ . Zum Beispiel, wenndatasetIDist jplMURSST, und<DateiDir> ist /home/data/mur/ und das Verzeichnis hat eine Datei namens jplMURSST20150103000000.png, dann wird die URL, die den Benutzern für diese Datei angezeigt wird, https://serverUrl/erddap/jplMURSST/jplMURSST20150103000000.png .

Neben der Verwendung eines lokalen Verzeichnisses für die<fileDir>, Sie können auch die URL einer entfernten, verzeichnisartigen Webseite angeben. Das funktioniert mit:

vonOnTheFly

\*\*Mehr Informationen-- Für einige riesige S3 Eimer (wie noaa-goes17, die 26 Millionen Dateien hat) , es kann nehmenERDDAP™bis zu 12 Stunden, um alle Informationen über den Inhalt des Eimers herunterzuladen (und dann gibt es andere Probleme) . Um dies zu erreichen, gibt es eine besondere Art zu verwenden<fileDir> in EDDTableFromFileNames, um einen Datensatz mit dem Verzeichnis und Dateinamen aus einem AWS S3 Bucket zu erstellen. Der Datensatz verfügt nicht über die Liste aller S3-Bucket-Verzeichnisse und Dateinamen, die ein Benutzer über Anfragen an den Datensatz suchen kann. Aber der Datensatz wird die Namen von Verzeichnissen und Dateien auf dem Flug erhalten, wenn der Benutzer die Verzeichnishierarchie mit dem Datensatz durchläuft"files"Option. Dadurch können Benutzer die Dateihierarchie und Dateien des S3-Buckets über den Datensatz durchsuchen"files"System. Um dies zu tun, anstatt die URL für den S3 Bucket als "Starting-Verzeichnis" anzugeben (in GenerateDatasets Xml) oder<DateiDir> (indatasets.xml) , verwenden:

\\*\\*\\*fromOnTheFly,*theS3BucketUrl*  

zum Beispiel:

\\*\\*\\*fromOnTheFly,https://noaa-goes17.s3.us-east-1.amazonaws.com/  

Siehe Dokumentation fürArbeiten mit S3 Buckets inERDDAP™, insbesondere die Beschreibung des spezifischen Formats, das für S3 bucket URL verwendet werden muss. Und sehen diese Details und ein BeispielVerwendung\\\* von OnTheFly.

rekursiv
  • <recursive> -- Dateien in Unterverzeichnissen<DateiDir> mit Namen übereinstimmen<DateiRegex> erscheint in den gleichen Unterverzeichnissen in der"files"URL, wenn<recursive> ist auf true gesetzt. Der Standard ist falsch.
  • (<PfadRegex> (#pathregex) -- Wenn recursive=true, Nur Verzeichnisnamen, die dem Pfad entsprechenRegex (Standard="\*") wird akzeptiert. Wenn recursive=false, wird dies ignoriert. Dies wird selten verwendet, kann aber unter ungewöhnlichen Umständen sehr nützlich sein. (Sieheregex dokumentationundNach oben.)
DateiRegex
  • <DateiRegex> -- Nur die Dateinamen, in denen der ganze Dateiname (nicht einschließlich des Verzeichnisnamens) mit der<fileRegex> wird in diesem Datensatz enthalten sein. Zum Beispiel jplMURSST.{14}\.png. (Sieheregex dokumentationundNach oben.)
     
Aus Dateinamen Datentabelle Inhalt

In der Tabelle gibt es Spalten mit:

  • url -- Die URL, mit der Benutzer die Datei herunterladen könnenERDDAP'"files"System.

  • Name -- Der Name der Datei (ohne Verzeichnisnamen) .

  • Zuletzt geändert -- Als die Datei zuletzt geändert wurde (als Doppelspeicher mit"seconds since 1970-01-01T00:00:00Z") . Diese Variable ist nützlich, weil Benutzer sehen können, ob / wenn der Inhalt einer bestimmten Datei zuletzt geändert wird. Diese Variable istZeit Stempelvariable, so können die Daten als numerische Werte erscheinen (Sekunden seit 1970-0100:00Z) oder einen String-Wert (ISO 8601:2004 (E) Format) , je nach Situation.

  • -- Die Größe der Datei in Bytes, gespeichert als Doppel. Sie werden als Doppel gespeichert, da einige Dateien größer sein können als Ints erlauben und lange nicht in einigen Antwort-Dateitypen unterstützt werden. Doubles geben die genaue Größe, auch für sehr große Dateien.

  • durch dieERDDAP™Administrator mit Informationen aus dem Dateinamen (beispielsweise die den Daten in der Datei zugeordnete Zeit) basierend auf zwei Attributen, die Sie in den Metadaten für jede weitere Spalte/dataVariable:

    • AuszugRegex -- Das ist einregelmäßiger Ausdruck (Tutorial) . Der gesamte Regex muss mit dem gesamten Dateinamen übereinstimmen (nicht einschließlich des Verzeichnisnamens) . Der Regex muss mindestens eine Fanggruppe umfassen (einen Abschnitt eines regelmäßigen Ausdrucks, der von Klammern umschlossen wird) dieERDDAP™verwendet, um festzustellen, welcher Abschnitt des Dateinamens zu extrahieren, um Daten zu werden.
    • Extrakt Gruppe -- Dies ist die Anzahl der Fanggruppe (#1 ist die erste Fanggruppe) im regulären Ausdruck. Der Standard ist 1. Eine Fanggruppe ist ein Teil eines regelmäßigen Ausdrucks, der von Klammern eingeschlossen wird.

Hier sind zwei Beispiele:

            <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>

Im Falle der Zeitvariable, wenn eine Datei den Namen jplMU hatRSST20150103000000.png, der ExtraktRegex wird mit dem Dateinamen übereinstimmen, die Zeichen, die der ersten Erfassungsgruppe entsprechen, extrahieren („20150103000000“) als dataType=String, dann verwenden Sie dieEinheiten geeignet für Stringzeitendie Strings in Zeitdatenwerte zu parsieren (2015-01-03T00:00:00Z) .

Im Falle der Tagesvariable, wenn eine Datei den Namen jplMU hatRSST20150103000000.png, der ExtraktRegex wird mit dem Dateinamen übereinstimmen, die Zeichen, die der ersten Erfassungsgruppe entsprechen, extrahieren ("03") wie folgt:<DatenTyp>] (#datatype) \=int, ergibt einen Datenwert von 3.

Weitere Informationen

  • Nein.<UpdateEveryNMillis>] (#updateeverynmillis) -- Diese Art von Datensatz braucht nicht und kann die<updateEveryNMillis> tag, weil die von EDDTableFromFileNames gelieferten Informationen immer perfekt aktuell sind, weilERDDAP™sucht das Dateisystem, um auf jede Anforderung von Daten zu reagieren. Auch wenn es eine große Anzahl von Dateien gibt, sollte dieser Ansatz vernünftig funktionieren. Eine Antwort kann langsam sein, wenn es eine große Anzahl von Dateien und der Datensatz wurde nicht für eine Weile abgefragt. Aber für einige Minuten danach, das Betriebssystem hält die Informationen in einem Cache, so dass Antworten sollten sehr schnell sein.  
  • Sie können dieDatensätze generieren Xml Programmum diedatasets.xmlchunk für diese Art von Datensatz. Sie können zusätzliche Spalten hinzufügen/definieren mit Informationen aus dem Dateinamen, wie oben gezeigt.  

EDDTableFromFileNames skeleton 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 ist die Superklasse aller EDDTableFrom...Files-Klassen. Sie können EDDTableFromFiles nicht direkt verwenden. Verwenden Sie stattdessen eine Unterklasse von EDDTableFromFiles, um den spezifischen Dateityp zu handhaben:

  • EDDTableFromAsciiFilesaggregiert Daten aus Komma-, Tab-, Semikolon- oder platzgetrennten tabellarischen ASCII-Datendateien.
  • EDDTableFromAudioFilesaggregiert Daten aus einer Gruppe von lokalen Audiodateien.
  • EDDTableFrom AwsXmlFilesaggregierte Daten von einem Satz von Automatischer Wetterstation (AWS) XML-Dateien.
  • EDDTableFromColumnarAsciiFilesaggregiert Daten aus tabellarischen ASCII-Datendateien mit festbreiten Datenspalten.
  • EDDTableFromHyraxDateien (DEPRECATE) aggregierte Daten mit mehreren Variablen, jeweils mit gemeinsamen Abmessungen (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) , und serviert vonHyrax OPeNDAPServer.
  • EDDTableFromInvalidCRAFilesaggregierte Daten ausNetCDF (v3 oder v4) .ncDateien, die eine bestimmte, ungültige Variante des CF DSG Contiguous Ragged Array verwenden (CRA) Dateien. ObwohlERDDAP™unterstützt diesen Dateityp, es ist ein ungültiger Dateityp, den niemand verwenden sollte. Gruppen, die derzeit diesen Dateityp verwenden, werden stark ermutigt,ERDDAP™um gültige CF DSG CRA-Dateien zu generieren und mit diesen Dateien zu stoppen.
  • EDDTableFromJsonlCSVFisaggregierte Daten ausJSON Zeilen CSV-Dateien.
  • EDDTableFromMultidimNcFilesaggregierte Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien mit mehreren Variablen, jeweils mit gemeinsamen Abmessungen (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) .
  • EDDTableFromNcFisaggregierte Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien mit mehreren Variablen, jeweils mit gemeinsamen Abmessungen (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) . Es ist gut, diesen Datensatztyp für bestehende Datensätze weiterzuverwenden, aber für neue Datensätze empfehlen wir stattdessen EDDTableFromMultidimNcFiles.
  • EDDTableFromNcCFFilesaggregierte Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien, die eines der durch dieCF Diskrete Sampling Geometrien (DSG) Konventionen. Aber für Dateien mit einer der multidimensionalen CF DSG-Varianten verwendenEDDTableFromMultidimNcFilesstatt.
  • EDDTableFromNccsvFilesaggregierte Daten ausNCCSVASCII .csv Dateien.
  • EDDTableFromParquetFisDaten vonParkett.
  • EDDTableFromThreddsFiles (DEPRECATE) aggregierte Daten aus Dateien mit mehreren Variablen mit gemeinsamen Dimensionen, die von einemTHREDOPeNDAPServer.
  • EDDTableFromWFSDateien (DEPRECATE) eine lokale Kopie aller Daten aus einerArcGISKartenserverWFSServer so dass die Daten dann schnell reserviert werden können, umERDDAP™Benutzer.

Derzeit werden keine anderen Dateitypen unterstützt. Aber es ist in der Regel relativ einfach, Unterstützung für andere Dateitypen hinzuzufügen. Kontaktieren Sie uns, wenn Sie eine Anfrage haben. Oder, wenn Ihre Daten in einem alten Dateiformat sind, von dem Sie wegziehen möchten, empfehlen wir, die Dateien zu konvertierenNetCDFV3.ncDateien (und insbesondere.ncDateien mit derCF Diskrete Sampling Geometrien (DSG) Contiguous Ragged Array Datenstruktur --ERDDAP™Daten aus ihnen sehr schnell extrahieren) .NetCDFist ein breit unterstütztes, binäres Format, ermöglicht schnellen Zugriff auf die Daten und wird bereits vonERDDAP.

VonFiles Details

Die folgenden Informationen gelten für alle Unterklassen von EDDTableFromFiles.

Aggregat

Diese Klasse aggregiert Daten aus lokalen Dateien. Jede Datei hält eine (relativ) kleine Datentabelle.

  • Der resultierende Datensatz erscheint, als wären alle Tabellen der Datei zusammengefasst worden. (alle Zeilen von Daten aus Datei #1, plus alle Zeilen aus Datei #2, ...) .
  • Die Dateien müssen nicht alle angegebenen Variablen haben. Wenn eine bestimmte Datei keine angegebene Variable hat,ERDDAP™wird bei Bedarf fehlende Werte hinzufügen.
  • Die Variablen in allen Dateien MUST haben für dieadd\_offset,missing\_value,) Wert,scale\_factor, undEinheitenAttribute (wenn) .ERDDAP™Kontrollen, aber es ist ein unvollkommener Test -- wenn es verschiedene Werte gibt,ERDDAPweiß nicht, was richtig ist und daher welche Dateien ungültig sind. Wenn dies ein Problem ist, können SieNcMLoderNCOum das Problem zu beheben.  
Komprimierte Dateien

Die Quelldatendateien für alle EDDTableFromFiles Unterklassen können extern komprimiert werden (z.B.,.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2oder .Z) . SieheExtern komprimierte Dateien Dokumentation.  

Gespeicherte Dateiinformationen
  • Wenn ein EDDTableFromFiles-Datensatz zuerst geladen wird, liest EDDTableFromFiles Informationen aus allen relevanten Dateien und erstellt Tabellen (eine Zeile für jede Datei) mit Informationen über jede gültige Datei und jedes "bad" (anders oder ungültig) Datei.
    • Die Tabellen werden auch auf der Festplatte gespeichert, wieNetCDFV3.ncDateien in BigParentDirectory /Datensatz/ Letzte2CharsOfDatasetID / datasetID / in Dateien benannt: schmutzig.nc (die eine Liste der eindeutigen Verzeichnisnamen enthält) , Datei Tabelle.nc (die die Tabelle mit den Informationen jeder gültigen Datei hält) , BadFiles.nc (die die Tabelle mit den Informationen jeder schlechten Datei hält) .
    • Um den Zugriff auf einen EDDTableFromFiles Datensatz zu beschleunigen (aber auf Kosten der Verwendung von mehr Speicher) , Sie können verwenden (<DateiTableInMemory>wahr</fileTableInMemory>] (#filetableinmemory)
      zu sagenERDDAP™eine Kopie der Dateiinformationstabellen im Speicher zu halten.
    • Die Kopie der Datei-Informationstabellen auf der Festplatte ist auch nützlich, wennERDDAP™wird geschlossen und neu gestartet: es speichert EDDTable VonFiles, alle Datendateien neu zu lesen.
    • Wenn ein Datensatz neu geladen wird,ERDDAP™muss nur die Daten in neuen Dateien und Dateien lesen, die sich geändert haben.
    • Wenn eine Datei eine andere Struktur als die anderen Dateien hat (beispielsweise einen anderen Datentyp für eine der Variablen oder einen anderen Wert für die "Einheiten" Attribut) ,ERDDAPfügt die Datei in die Liste der "schlechten" Dateien. Informationen Ã1⁄4ber das Problem mit der Datei werden in der BigParentDirectory /logs/log.txt Datei.
    • Sie sollten nie mit diesen Dateien löschen oder arbeiten müssen. Eine Ausnahme ist: wenn Sie noch Änderungen an einem Datensatz vornehmendatasets.xmlsetup, Sie können diese Dateien löschen möchten, um zu zwingenERDDAP™alle Dateien neu zu lesen, da die Dateien anders gelesen/interpretiert werden. Wenn Sie jemals diese Dateien löschen müssen, können Sie es tun, wennERDDAP™läuft. (Dann setzen Sie einFlaggeum den Datensatz ASAP neu zu laden.) AllerdingsERDDAP™in der Regel bemerkt, dassdatasets.xmlInformationen passen nicht zur Datei Tabelleninformationen und löschen die Dateitabellen automatisch.
    • Wenn Sie fördern möchtenERDDAP™zur Aktualisierung der gespeicherten Datensatzinformationen (zum Beispiel, wenn Sie gerade hinzugefügt, entfernt oder geändert einige Dateien in das Datenverzeichnis des Datensatzes) , benutzen Sie dieFlaggensystemin KraftERDDAP™um die Cache-Dateiinformationen zu aktualisieren.  
Bearbeitungsanforderungen
  • ERDDAP™tabellarische Datenanforderungen können Einschränkungen auf jede Variable setzen.
    • Wenn die Datenanforderung eines Clients bearbeitet wird, können EDDTableFromFiles schnell in die Tabelle mit den gültigen Dateiinformationen schauen, um zu sehen, welche Dateien relevante Daten haben könnten. Wenn z.B. jede Quelldatei die Daten für einen Fix-Location-Buoy hat, kann EDDTableFromFiles sehr effizient bestimmen, welche Dateien Daten in einem bestimmten Längenbereich und Breitenbereich haben können.
    • Da die gültige Dateiinformationstabelle den minimalen und maximalen Wert jeder Variablen für jede gültige Datei enthält, kann EDDTableFromFiles oft mit anderen Abfragen ganz effizient umgehen. Wenn zum Beispiel einige der Bojen keinen Luftdrucksensor haben und ein Client Daten für airPressure anfordert!=NaN, EDDTableFromFiles kann effizient bestimmen, welche Bojen Luftdruckdaten haben.  
Aktualisierung der Cached File Information

Wenn der Datensatz neu geladen wird, wird die geätzte Dateiinformation aktualisiert.

  • Der Datensatz wird, wie durch die<reloadEveryNMinutes> in den Informationen des Datensatzes indatasets.xml.
  • Der Datensatz wird so schnell wie möglich nachgeladen, wennERDDAP™erkennt, dass Sie hinzugefügt, entfernt,anfassend (um die letzte Datei zu ändern Geänderte Zeit) , oder eine Datendatei geändert.
  • Der Datensatz wird so schnell wie möglich nachgeladen, wenn Sie denFlaggensystem.

Wenn der Datensatz neu geladen wird,ERDDAP™vergleicht die aktuell verfügbaren Dateien mit der Cache-Datei-Informationstabelle. Neue Dateien werden gelesen und der gültigen Dateitabelle hinzugefügt. Dateien, die nicht mehr vorhanden sind, werden von der gültigen Dateitabelle fallen gelassen. Dateien, in denen sich der Dateizeitstempel geändert hat, werden gelesen und ihre Informationen werden aktualisiert. Die neuen Tabellen ersetzen die alten Tabellen im Speicher und auf der Festplatte.  

Schlechte Dateien

Die Tabelle der schlechten Dateien und die Gründe, die die Dateien für schlecht erklärt wurden (beschädigte Datei, fehlende Variablen, falsche Achsenwerte, etc.) wird an die E-Mail geschickt Alles Zur E-Mail-Adresse (wahrscheinlich du) jedes Mal, wenn der Datensatz neu geladen wird. Sie sollten diese Dateien so schnell wie möglich ersetzen oder reparieren.  

Fehlende Variablen

Wenn einige der Dateien nicht einige derdataVariables definiert im Datensatzdatasets.xmlchunk, das ist okay. Wenn EDDTableFromFiles eine dieser Dateien liest, wird es handeln, als ob die Datei die Variable hatte, aber mit allen fehlenden Werten.  

In Echtzeit Daten
  • EDDTableFromFiles behandelt Anträge auf sehr aktuelle Daten als Sonderfall. Das Problem: Wenn die Dateien, die den Datensatz erstellen, häufig aktualisiert werden, ist es wahrscheinlich, dass der Datensatz nicht jedes Mal aktualisiert wird, wenn eine Datei geändert wird. EDDTableFromFiles wird sich also der geänderten Dateien nicht bewusst sein. (Sie könnten dieFlaggensystem, aber das könnte dazu führenERDDAP™Nachladen des Datensatzes fast kontinuierlich. In den meisten Fällen empfehlen wir es nicht.) Stattdessen befasst sich EDDTableFromFiles mit dem folgenden System: WannERDDAP™innerhalb der letzten 20 Stunden eine Anfrage an Daten (zum Beispiel vor 8 Stunden bis jetzt) ,ERDDAP™wird alle Dateien, die alle Daten in den letzten 20 Stunden suchen. SoERDDAP™muss nicht perfekt aktuelle Daten für alle Dateien haben, um die neuesten Daten zu finden. Sie sollten immer noch einstellen [<Nachladen AllNMinutes>] (#reloadeverynminutes) zu einem recht kleinen Wert (beispielsweise 60) , aber es muss nicht winzig sein (beispielsweise 3) .  
    • Nicht empfohlen Organisation von Echtzeitdaten in den Dateien: Wenn Sie beispielsweise einen Datensatz haben, der Daten für zahlreiche Stationen speichert (oder Boje, oder Trajektorie, ...) für viele Jahre, Sie könnten die Dateien so arrangieren, dass zum Beispiel gibt es eine Datei pro Station. Aber dann, jedes Mal, wenn neue Daten für eine Station ankommen, müssen Sie eine große alte Datei lesen und eine große neue Datei schreiben. Und wannERDDAP™reloadt den Datensatz, es bemerkt, dass einige Dateien geändert wurden, so dass es diese Dateien vollständig liest. Das ist ineffizient.  

    • Empfohlen Organisation von Echtzeitdaten in den Dateien: Speichern Sie die Daten in Stücken, zum Beispiel alle Daten für eine Station/Buoy/Trajektorie für ein Jahr (oder einen Monat) . Dann, wenn ein neues Datum ankommt, nur die Datei mit der diesjährigen (oder Monat) Daten sind betroffen.

    • Am besten: VerwendungNetCDFV3.ncDateien mit einer unbegrenzten Dimension (Zeit) . Dann, um neue Daten hinzuzufügen, können Sie einfach die neuen Daten anhängen, ohne die gesamte Datei lesen und neu schreiben zu müssen. Die Änderung wird sehr effizient und im Wesentlichen atomar gemacht, so dass die Datei nie in einem inkonsistenten Zustand ist.

    • Ansonsten: Wenn Sie nicht/kann nicht verwenden.ncDateien mit einer unbegrenzten Dimension (Zeit) , dann, wenn Sie neue Daten hinzufügen müssen, müssen Sie die gesamte betroffene Datei lesen und neu schreiben (hoffentlich klein, weil es nur ein Jahr hat (oder Monat) Datenwert) . Glücklicherweise alle Dateien für die letzten Jahre (oder Monate) für diese Station unverändert bleiben.

In beiden Fällen, wennERDDAP™reloadt den Datensatz, die meisten Dateien sind unverändert; nur wenige kleine Dateien haben sich geändert und müssen gelesen werden.  

Verzeichnisse

Die Dateien können in einem Verzeichnis oder in einem Verzeichnis und seinen Unterverzeichnissen sein. (rekursiv) . Wenn es eine große Anzahl von Dateien (zum Beispiel > 1.000) , das Betriebssystem (und damit EDDTableFromFiles) wird viel effizienter arbeiten, wenn Sie die Dateien in einer Reihe von Unterverzeichnissen speichern (eins pro Jahr, oder eins pro Monat für Datensätze mit sehr häufigen Dateien) , so dass es nie eine große Anzahl von Dateien in einem bestimmten Verzeichnis.  

Remote Directories und HTTP Range Requests
  • Remote Directories und HTTP Range Requests (AKA Byte Servieren, Byte Range Anfragen) -- EDDGridFromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles und EDDTableFromNcCFFile können manchmal Daten von.ncDateien auf Remoteservern und über HTTP aufgerufen, wenn der Server unterstütztByte Servierenüber HTTP-Bereichsanfragen (der HTTP-Mechanismus für Byte-Dienst) . Dies ist möglich, weil netcdf-java (dieERDDAP™Anwendungen zum Lesen.ncDateien) unterstützt Lesedaten von Remote.ncDateien über HTTP-Bereichsanfragen.

    Tu das nicht!
    Verwenden Sie stattdessen die [<cacheFromUrl> System) (#cachefromurl) .

CacheFromUrl
  • ( ** <ccheFromUrl> ** ! (#cachefromurl) - Ja. AlleEDDGridFromFiles und alle EDDTableFromFiles-Datensätze unterstützen eine Reihe von Tags, die sagenERDDAP™eine Kopie aller Dateien eines entfernten Datensatzes herunterladen und aufrecht erhalten, oder einen Cache von wenigen Dateien (nach Bedarf heruntergeladen) . Dies ist eine unglaublich nützliche Funktion.
    • Die<Mit dem ccheFromUrl>-Tag können Sie eine URL mit einer Liste der Dateien eines entfernten Datensatzes aus einer entfernten Dateiliste angeben.

      ERDDAP™wird diese Dateien im Datensatz kopieren oder abspeichern<DateiDir> Verzeichnis. Wenn Sie Unterstützung für eine andere Art von Remote-Datei-Liste benötigen (z.B. FTP) , bitte E-Mail Ihre Anfrage an Chris. John bei noaa.gov.

      • Der Standardwert für die<ccheFromUrl> tag ist null. Wenn Sie keinen Wert für die<ccheFromUrl> tag, das Copy/cache-System wird nicht für diesen Datensatz verwendet werden.
      • Wenn der Datensatz<DateiRegex> Einstellung ist etwas anderes als .\*,ERDDAP™wird nur Dateien herunterladen, die mit der DateiRegex übereinstimmen.
      • Wenn der Datensatz<rekursive>-Einstellung ist wahr und die Remote-Dateien sind in Unterverzeichnissen,ERDDAP™wird in Remote-Unterverzeichnisse, die dem Datensatz entsprechen [<PfadRegex> (#pathregex) , erstellen Sie die gleiche Verzeichnisstruktur lokal und setzen Sie die lokalen Dateien in die gleichen Unterverzeichnisse.
      • In GenerateDatasets Xml, wenn Sie eine<cacheFromUrl> Wert, Generieren Datensätze Xml erstellt die lokale<fileDir>-Verzeichnis und kopieren Sie 1 Remote-Datei in sie. Datensätze generieren Xml erzeugt danndatasets.xmlchunk basierend auf dieser Sample-Datei (Angabe der Stichprobe Datei=nothing) .
      • Wenn die Datenquelle eine Fernbedienung istERDDAP™, VerwendungEDDGridVon ErddapoderEDDTableFromErddapanstatt<ccheFromUrl>. So, Ihr EinheimischerERDDAP™erscheint, um den Datensatz zu haben, muss aber keine der Daten lokal speichern. Der einzige Grund zur Verwendung<cacheFromUrl>, um Daten von einer Fernbedienung zu erhaltenERDDAP™ist, wenn Sie einen anderen Grund haben, warum Sie eine lokale Kopie der Datendateien haben möchten. In diesem Fall:
        • Dieser Datensatz versucht, den Datensatz auf der Fernbedienung zu abonnierenERDDAPso dass Änderungen an diesem Datensatz die Flagge dieses Datensatzes rufen Url, wodurch dieser lokale Datensatz die geänderten Remote-Dateien neu laden und herunterladen. So wird der lokale Datensatz sehr bald nach Änderungen am Remote-Datensatz aktuell sein.
        • Sie sollten den Administrator der Fernbedienung e-MailERDDAP™um diedatasets.xmlfür den Remote-Datensatz, damit Sie den Datensatz in Ihrem lokalenERDDAP™aussehen wie der Datensatz in der FernbedienungERDDAP.
      • Wenn die Datenquelle eine Fernbedienung istERDDAP™, der lokale Datensatz versucht, den Remote-Datensatz zu abonnieren.
        • Erfolgt das Abonnement, wann immer die FernbedienungERDDAPreloads und hat neue Daten, wird es das FlagURL für diesen Datensatz kontaktieren, wodurch es die neuen und/oder geänderten Datendateien neu laden und herunterladen kann.
        • Wenn das Abonnement versagt (aus welchem Grund) oder wenn Sie einfach sicherstellen möchten, dass der lokale Datensatz aktuell ist, können Sie eineFlaggefür den lokalen Datensatz, so wird es neu geladen, so wird es für neue und/oder geänderte Remote-Datendateien überprüfen.
      • Wenn die Datenquelle keine Fernbedienung istERDDAP: Der Datensatz überprüft nach neuen und/oder geänderten Remote-Dateien, wenn er neu geladen wird. Normalerweise wird dies von [<Nachladen AllNMinutes>] (#reloadeverynminutes) . Aber wenn Sie wissen, wann es neue Remote-Dateien gibt, können Sie eineFlaggefür den lokalen Datensatz, so wird es nach neuen und/oder geänderten Remote-Datendateien neu laden und überprüfen. Wenn dies routinemäßig zu einer bestimmten Tageszeit geschieht (z.B. um 7 Uhr) , Sie können einen Cron Job zu verwendencurlum die Flagge zu kontaktieren Url für diesen Datensatz, so wird es nach neuen und/oder geänderten Remote-Datendateien neu laden und überprüfen.
    • Die<ccheSizeGB> tag gibt die Größe des lokalen Cache an. Sie müssen dies wahrscheinlich nur bei der Arbeit mit Cloud-Speichersystemen wieAmazon S3das ein häufig verwendetes Speichersystem ist, das Teil vonAmazon Web Services (AWS) . Der Standard ist -1.

      • Ist der Wert<= 0 (z.B. der Standardwert von -1) , ERDDAP™wird herunterladen und pflegen vollständige Kopie alle Dateien des Remote-Datensatzes im Datensatz<DateiDir>.
        • Dies ist die Einstellung, die bei Bedarf empfohlen wird.
        • Jedes Mal, wenn der Datensatz neu geladen wird, vergleicht er die Namen, Größen und lastModified Zeiten der Remote-Dateien und der lokalen Dateien und lädt alle Remote-Dateien, die neu sind oder geändert haben.
        • Wenn eine Datei, die auf dem Remote-Server war, verschwindet,ERDDAP™die entsprechende lokale Datei nicht löschen (ansonsten, wenn etwas vorübergehend falsch mit dem Remote-Server war,ERDDAP™kann einige oder alle lokalen Dateien löschen!) .
        • Mit dieser Einstellung, in der Regel werden Sie<updateEveryNMillis> bis -1, da sich der Datensatz bewusst ist, wann er neue Datendateien kopiert hat.
      • wenn der Wert > 0 ist, ERDDAP™wird Dateien vom Remote-Datensatz nach Bedarf in einen lokalen Cache (im Datensatz)<fileDir>) mit einer Schwellengröße dieser angegebenen Anzahl von GB.
        • Der Cache muss groß genug sein, um mindestens mehrere Dateien zu halten.
        • Generell, je größer der Cache, desto besser, weil die nächste angeforderte Datendatei wahrscheinlicher bereits im Cache sein wird.
        • Caching sollte nur verwendet werden, wennERDDAP™läuft in einem Cloud Computing Server (z.B. eine AWS-Rechnungsinstanz) und die Remote-Dateien in einem Cloud-Speichersystem (z.B. AWS S3) .
        • Wenn der Speicherplatz der lokalen Dateien den Cache überschreitet GrößeGB,ERDDAP™wird bald (vielleicht nicht sofort) Löschen Sie einige der Cache-Dateien (aktuell, basierend auf dem Least (LRU) Algorithmus) bis der von den lokalen Dateien verwendete Speicherplatz<CacheSizeGB (die "Galerie") . Ja, es gibt Fälle, in denen LRU sehr schlecht ausführt -- es gibt keinen perfekten Algorithmus.
        • ERDDAP™wird nie versuchen, eine Cache-Datei zu löschen, dieERDDAP™begann in den letzten 10 Sekunden zu verwenden. Dies ist ein unvollkommenes System, um das Cache-System zu behandeln und das Datendateileser-System nur lose integriert. Wegen dieser Regel,ERDDAP™kann nicht in der Lage sein, genug Dateien zu löschen, um sein Ziel zu erreichen, in welchem Fall wird es eine WARNING auf die log.txt-Datei drucken, und das System wird viel Zeit verlieren, um den Cache zu streichen, und es ist möglich, dass die Größe der Dateien im Cache den cacheSizeGB erheblich überschreiten kann. Wenn dies jemals geschieht, verwenden Sie eine größere ccheSizeGB-Einstellung für diesen Datensatz.
        • Derzeit,ERDDAP™nie überprüft, ob der Remote-Server eine neuere Version einer Datei hat, die sich im lokalen Cache befindet. Wenn Sie diese Funktion benötigen, mailen Sie bitte Chris. John bei noaa.gov.
      • Obwohl die Verwendung der gleichen Tag-Namen könnte bedeuten, dass das Kopiersystem und das Cache-System das gleiche zugrunde liegende System verwenden, das ist nicht korrekt.
        • Das Kopiersystem startet proaktiv TaskThread-Aufgaben zum Herunterladen neuer und geänderter Dateien jedes Mal, wenn der Datensatz neu geladen wird. Nur Dateien, die tatsächlich in das lokale Verzeichnis kopiert wurden, sind über dieERDDAP™Datensatz.
        • Das Cache-System erhält die Remote-Dateiliste jedes Mal, wenn der Datensatz neu geladen wird und gibt vor, dass alle diese Dateien über dieERDDAP™Datensatz. Interessanterweise erscheinen alle Remote-Dateien sogar in den /files/ Webseiten des Datensatzes und stehen zum Download bereit (obwohl vielleicht erst nach einer Verzögerung, während die Datei zuerst vom Remote-Server zum lokalen Cache heruntergeladen wird.)
      • Datensätze, die cacheSizeGB verwenden, können von der Verwendung einesnThreadsSetzen größer als 1, weil dies dem Datensatz ermöglicht, mehr als 1 Remote-Datei zu einem Zeitpunkt herunterzuladen.
    • Die<cchePartialPathRegex> tag ist ein selten verwendeter Tag, der eine Alternative für den Datensatz angeben kann [<PfadRegex> (#pathregex) . Der Standard ist null.

      • Verwenden Sie dies nur, wenn Sie den gesamten Datensatz über den Standard kopieren.<ccheSizeGB> Wert von -1. Mit<ccheSizeGB> Werte von >1, dies wird ignoriert, weil es nicht-sensisch ist.
      • Siehe [die Dokumentation für<PfadRegex> (#pathregex) zur Anleitung zum Aufbau des Regex.
      • Wenn dies angegeben wird, wird es jedes Mal verwendet, wenn der Datensatz neu geladen wird, außer dass zum ersten Mal ein Datensatz zu Beginn eines Monats neu geladen wird.
      • Dies ist nützlich, wenn der Remote-Datensatz in einem Labyrinth von Unterverzeichnissen gespeichert ist und wenn die überwiegende Mehrheit dieser Dateien selten, wenn überhaupt, ändern. (<Husten NASA<Husten Sie könnten z.B. eine<cachePartialPathRegex> die gerade zum laufenden Jahr oder zum aktuellen Monat passt. Diese Regexes sind sehr knifflig zu spezifizieren, da alle Teil- und Vollwegnamen mit dem<cchePartialPathRegex> und weil<cchePartialPathRegex> muss mit den entfernten URLs und den lokalen Verzeichnissen arbeiten. Ein echtes Lebensbeispiel ist:
            <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>

Die oben stehende Beispiel-URL hat Dateien in Unterverzeichnissen basierend auf dem Jahr (z.B., 2018) und Tag des Jahres (z.B. 001, 002, ..., 365 oder 366) . Anmerkung:<CachePartialPathRegex> beginnt mit .\* hat dann ein bestimmtes Unterverzeichnis, das den entfernten URLs und den lokalen Verzeichnissen gemeinsam ist, z.B. /v4\.1/ hat dann eine Reihe von geschachtelten Fanggruppen, wo die erste Option ist nichts und die zweite Option ist ein bestimmter Wert.

Das obige Beispiel passt nur zu Verzeichnissen für die zweiten 10 Tage 2018, z. https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/2018/010/ \[2020-10-21 Dieser Server ist nicht mehr zuverlässig verfügbar.\]
und Tag 011, 012, ..., 019. (Sieheregex dokumentationundNach oben.)
Wenn Sie Hilfe benötigen<cachePartialPathRegex>, bitte E-Mail an die<ccheFromUrl> zu Chris. John bei noaa.gov.

  • Ein gemeinsamer Ansatz: Wenn Sie verwenden möchten<cachePartialPathRegex>, benutzen Sie es nicht zunächst, weil Sie möchtenERDDAP™alle Dateien zunächst herunterladen. NachERDDAP™hat alle Dateien heruntergeladen, fügen Sie es zum Datensatz's chunk ofdatasets.xml.  
Tausende von Dateien

Wenn Ihr Datensatz viele Tausende von Dateien hat,ERDDAP™kann langsam auf Datenanfragen aus diesem Datensatz reagieren. Es gibt hier zwei Fragen:  

  1. Die Anzahl der Dateien pro Verzeichnis. Intern,ERDDAP™arbeitet mit der gleichen Geschwindigkeit, unabhängig davon, ob n Dateien in einem Verzeichnis oder in mehreren Verzeichnissen dispergiert sind.   Aber es gibt ein Problem: Je mehr Dateien in einem bestimmten Verzeichnis, desto langsamer wird das Betriebssystem die Liste der Dateien im Verzeichnis zurückgeben (pro Datei) bisERDDAP. Die Antwortzeit könnte O sein (n log n) . Es ist schwer zu sagen, wie viele Dateien in einem Verzeichnis zu viele sind, aber 10.000 sind wahrscheinlich zu viele. Wenn Ihr Setup viele Dateien generiert, könnte eine Empfehlung hier sein: setzen Sie die Dateien in logisch organisierte Unterverzeichnisse (z.B. Station oder Station/Jahr) .

Ein weiterer Grund, Unterverzeichnisse zu verwenden: wenn ein Benutzer verwenden möchteERDDAP'"files"System, um den Namen der ältesten Datei für Station X zu finden, ist es schneller und effizienter, wenn die Dateien in Station / Jahr Unterverzeichnisse sind, weil viel weniger Informationen übertragen werden müssen.

  1. Die Gesamtzahl der Dateien. Für tabellarische Datensätze,ERDDAP™hält den Überblick über den Wertebereich für jede Variable in jeder Datei. Wenn ein Benutzer eine Anfrage macht,ERDDAP™muss alle Daten aus allen Dateien lesen, die Daten haben könnten, die der Anfrage des Benutzers entsprechen. Wenn der Benutzer Daten aus einer begrenzten Zeit fordert (z.B. einen Tag oder einen Monat) , dannERDDAP™muss nicht zu viele Dateien in Ihrem Datensatz öffnen. Aber es gibt extreme Fälle, in denen fast jede Datei passende Daten haben könnte (z.B. bei WasserTemperatur = 13,2C) . Da es dauertERDDAP™ein wenig Zeit (zum Teil die Suchzeit auf der Festplatte, zum Teil die Zeit, die Datei Header zu lesen) nur um eine bestimmte Datei zu öffnen (und mehr, wenn es viele Dateien im Verzeichnis gibt) , es gibt eine erhebliche Zeitstrafe, wenn die Gesamtzahl der Dateien, dieERDDAP™zu öffnen ist sehr groß. Sogar das Öffnen von 1000 Dateien dauert erhebliche Zeit. So gibt es Vorteile, die täglichen Dateien in größere Stücke periodisch zu konsolidieren (z.B. 1 Station für 1 Jahr) . Ich verstehe, dass Sie dies aus verschiedenen Gründen nicht tun wollen, aber es führt zu viel schnelleren Antworten. In extremen Fällen (z.B. beschäftige ich mich mit einem GTSPP-Datensatz, der ~35 Millionen Quelldateien hat) , die Verwendung von Daten aus einer großen Anzahl von Quelldateien ist unpraktisch, weilERDDAPDie Antwort auf einfache Abfragen kann Stunden dauern und Tonnen des Speichers verwenden. Durch die Konsolidierung von Quelldateien in eine kleinere Anzahl (für GTSPP, ich habe jetzt 720, 2 pro Monat) ,ERDDAP™kann vernünftig schnell reagieren. Vgl.Millionen von Dateien
     

N.B. Solid State Drives sind großartig! Die schnellste, einfachste, günstigste Art zu helfenERDDAP™mit einer großen Anzahl von (klein) Dateien ist eine solide Zustand Laufwerk zu verwenden. Vgl.Solid State Drives sind großartig!
 

Millionen von Dateien
  • Einige Datensätze haben Millionen Quelldateien.ERDDAP™kann damit umgehen, aber mit gemischten Ergebnissen.

    • Für Anfragen, die nur Variablen beinhalten, die in [<subsetVariables> (#subsetvariables) ,ERDDAP™hat alle benötigten Informationen bereits aus den Datendateien extrahiert und in einer Datei gespeichert, so dass sie sehr, sehr schnell reagieren kann.
    • Für andere Anträge,ERDDAP™kann den Datensatz scannenInformationen zur Dateiund herauszufinden, dass nur einige der Dateien Daten haben könnten, die für die Anfrage relevant sind und so schnell reagieren.
    • Aber für andere Anfragen (z.B. WasserTemperatur = 18 Grad\_C) wenn eine Datei relevante Daten haben könnte,ERDDAP™muss eine große Anzahl von Dateien öffnen, um zu sehen, ob jede der Dateien Daten hat, die für die Anfrage relevant sind. Die Dateien werden sequentiell geöffnet. Auf jedem Betriebssystem und jedem Dateisystem (andere als Festkörperantriebe) , das dauert lange (alsoERDDAP™reagiert langsam) und wirklich bindet das Dateisystem (alsoERDDAP™reagiert langsam auf andere Anfragen) .

Glücklicherweise gibt es eine Lösung.

  1. Einrichten des Datensatzes auf einer Nicht-öffentlichkeitERDDAP™ (Ihr Computer?) .
  2. Erstellen und Ausführen eines Skripts, das eine Reihe von.ncCF-Dateien, jeweils mit einem großen Stück des Datensatzes, in der Regel eine Zeitspanne (zum Beispiel alle Daten für einen bestimmten Monat) . Wählen Sie den Zeitraum, so dass alle resultierenden Dateien weniger als 2GB sind (aber hoffentlich größer als 1GB) . Wenn der Datensatz Daten in Echtzeit hat, führen Sie das Skript aus, um die Datei für den aktuellen Zeitraum zu regenerieren (z.B. diesen Monat) häufig (alle 10 Minuten? Jede Stunde?) . Anfragen anERDDAP™für.ncCF-Dateien erstellenNetCDFV3.ncDatei, die dieCF Diskrete Sampling Geometrien (DSG) Contiguous Ragged Array Datenstrukturen).
  3. Einrichten einesEDDTableFromNcCFFilesDatensatz auf Ihrem PublikumERDDAP™die Daten von der.nc (CF) Dateien.ERDDAP™kann Daten aus diesen Dateien sehr schnell extrahieren. Und da es jetzt Dutzende oder Hunderte gibt (statt Millionen) von Dateien, auch wennERDDAP™muss alle Dateien öffnen, kann es so schnell.

Ja, dieses System braucht Zeit und Mühe, um einzurichten, aber es funktioniert sehr, sehr gut. Die meisten Datenanforderungen können 100 Mal schneller bearbeitet werden als zuvor. \[Bob wusste, dass dies eine Möglichkeit war, aber es war Kevin O'Brien, der das zuerst tat und zeigte, dass es gut funktioniert. Jetzt. Bob nutzt dies für den GTSPP-Datensatz, der über 18 Millionen Quelldateien verfügt und derERDDAP™dient nun über ca. 500.nc (CF) Dateien.\]

N.B. Solid State Drives sind großartig! Die schnellste, einfachste, günstigste Art zu helfenERDDAP™mit einer großen Anzahl von (klein) Dateien ist eine solide Zustand Laufwerk zu verwenden. Vgl.Solid State Drives sind großartig!
 

Riesige Dateien
  • Eine einzige riesige Datendatei (besonders große ASCII Datendateien) kann einen OutOfMemoryError verursachen. Wenn dies das Problem ist, sollte es offensichtlich sein, weilERDDAP™wird den Datensatz nicht laden. Die Lösung, wenn möglich, ist, die Datei in mehrere Dateien zu teilen. Idealerweise können Sie die Datei in logische Stücke teilen. Zum Beispiel, wenn die Datei 20 Monate Wert von Daten hat, teilen Sie sie in 20 Dateien, jeweils mit 1 Monat Wert von Daten. Aber es gibt Vorteile, auch wenn die Hauptdatei willkürlich aufgeteilt wird. Dieser Ansatz hat mehrere Vorteile: a) Dies reduziert den Speicher, der benötigt wird, um die Datendateien auf 1/20th zu lesen, da nur eine Datei zu einem Zeitpunkt gelesen wird. b) Oft,ERDDAP™kann mit Anfragen viel schneller umgehen, weil es nur in einem oder einigen Dateien suchen muss, um die Daten für eine bestimmte Anfrage zu finden. c) Wenn die Datenerfassung fortgesetzt wird, können die vorhandenen 20 Dateien unverändert bleiben, und Sie müssen nur eine, kleine, neue Datei ändern, um den Datenwert des nächsten Monats zum Datensatz hinzuzufügen.  
FTP-Fehler/Advice
  • Wenn Sie FTP neue Datendateien an dieERDDAP™Server währendERDDAP™es läuft, es besteht die Chance,ERDDAP™wird den Datensatz während des FTP-Prozesses neu geladen. Es passiert öfter, als Sie denken könnten! Wenn es passiert, erscheint die Datei gültig (es hat einen gültigen Namen) , aber die Datei ist nicht gültig. wennERDDAP™versucht, Daten aus dieser ungültigen Datei zu lesen, der resultierende Fehler wird dazu führen, dass die Datei in der Tabelle der ungültigen Dateien hinzugefügt wird. Das ist nicht gut. Um dieses Problem zu vermeiden, verwenden Sie einen temporären Dateinamen, wenn FTP die Datei, zum Beispiel ABC2005.nc\_TEMP . Dann der DateiNameRegex-Test (siehe unten) wird angeben, dass dies keine relevante Datei ist. Nachdem der FTP-Prozess abgeschlossen ist, umbenennen Sie die Datei in den richtigen Namen. Der Umbenennvorgang bewirkt, dass die Datei in einem Augenblick relevant wird.
Dateiname extrahiert

\[Diese Funktion ist DEPRECATED. Bitte benutzen\\\*fileName pseudosourceNamestatt.\]
EDDTableFromFiles verfügt über ein System zum Extrahieren eines Strings aus jedem Dateinamen und dazu, eine Pseudodatenvariable zu machen. Derzeit gibt es kein System, diese Strings als Termine/Zeiten zu interpretieren. Es gibt mehrere XML-Tags, um dieses System einzurichten. Wenn Sie keinen Teil oder das ganze System benötigen, geben Sie diese Tags einfach nicht an oder verwenden Sie "" Werte.

  • preExtractRegex ist einregelmäßiger Ausdruck (Tutorial) verwendet, um Text vom Anfang des Dateinamens zu entfernen. Die Entfernung erfolgt nur, wenn der Regex angepasst ist. Dies beginnt in der Regel mit "^" zum Beginn des Dateinamens.
  • Post ExtractRegex ist ein regelmäßiger Ausdruck, der verwendet wird, um Text zu identifizieren, der vom Ende des Dateinamens entfernt wird. Die Entfernung erfolgt nur, wenn der Regex angepasst ist. Dies endet in der Regel mit "$" bis zum Ende des Dateinamens.
  • ExtraktRegex Wenn vorhanden, wird dieser reguläre Ausdruck nach preExtractRegex und postExtractRegex verwendet, um einen String zu identifizieren, der aus dem Dateinamen extrahiert werden soll (zum Beispiel diestationID) . Wenn der Regex nicht angepasst ist, wird der gesamte Dateiname verwendet (Minus preExtract und post Extrakt) . Verwenden Sie ".\*", um den gesamten Dateinamen zu entsprechen, der nach preExtractRegex und postExtractRegex hinterlassen wird.
  • Spalte NameForExtract ist der Datenspalten-Quellenname für die extrahierten Strings. AdataVariablemit diesemsourceNamemuss in derdataVariables Liste (mit jedem Datentyp, aber in der Regel String) .

Zum Beispiel, wenn ein Datensatz Dateien mit Namen wie XYZAble hat.nc, XYZBaker.nc, XYZCharlie.nc, ... und Sie wollen eine neue Variable erstellen (stationID) wenn jede Datei gelesen wird, die Stations-ID-Werte hat (Able, Baker, Charlie, ...) aus den Dateinamen extrahiert, können Sie diese Tags verwenden:

  • <VorExtractRegex>^XYZ</preExtractRegex> Die erste ^ ist ein regulärer Ausdruck, der besondere Charakter hat,ERDDAP™XYZ am Anfang des Dateinamens suchen. Dies bewirkt, dass XYZ, wenn am Anfang des Dateinamens gefunden, entfernt wird (zum Beispiel der Dateiname XYZAble.ncwird able.nc) .
  • <PostExtractRegex>\\.nc$</postExtractRegex> Die $ am Ende ist ein regelmäßiger Ausdruck besondere Charakter, die KräfteERDDAP™um zu suchen.ncam Ende des Dateinamens. Da . ist ein regelmäßiger Ausdruck Spezialcharakter (die jedem Charakter entspricht) , es ist codiert als \. Hier. (weil 2E die hexadezimale Zeichennummer für einen Zeitraum ist) . Diese Ursachen.nc, wenn am Ende des Dateinamens gefunden, entfernt werden (zum Beispiel den Teildateinamen Abgeltung.ncwird able) .
  • <AuszugRegex></extractRegex> Der regelmäßige Ausdruck entspricht allen übrigen Zeichen (zum Beispiel den Teildateinamen Able wird der Extrakt für die erste Datei) .
  • <SpalteNameForExtract>stationID</columnNameForExtract> Das sagt:ERDDAP™eine neue Quellspalte erstellenstationIDbeim Lesen jeder Datei. Jede Zeile der Daten für eine bestimmte Datei wird den Text aus seinem Dateinamen extrahiert (zum Beispiel, Ab) als der Wert in derstationIDSpalte.

In den meisten Fällen gibt es zahlreiche Werte für diese Extrakt-Tags, die die gleichen Ergebnisse liefern -- regelmäßige Ausdrücke sind sehr flexibel. Aber in einigen Fällen gibt es nur eine Möglichkeit, die gewünschten Ergebnisse zu erhalten.  

PseudonymsourceNameS

Jede Variable in jedem DatensatzERDDAP™hat eine<sourceName> (#sourcename) die den Namen der Quelle für die Variable angibt. EDDTableFromFiles unterstützt einige PseudossourceNames, die einen Wert von einem anderen Ort extrahieren (z.B. den Namen der Datei oder den Wert eines globalen Attributs) und fördern diesen Wert als eine Spalte konstanter Werte für den Datenspalt (z.B. die Datentabelle der Datei) . Für diese Variablen müssen Sie den Datentyp der Variable über die [<DatenTyp>] (#datatype) tag. Wenn die extrahierten Informationen ein DatumTime-String sind, geben Sie das Format der DatumTime-String in derEigenschaften. Das PseudosourceNameOptionen sind:  

global:sourceNameS

Ein globales Metadaten-Attribut in jeder Quelldatendatei kann als eine Datenspalte gefördert werden. Wenn eine Variable<sourceName> hat das Format

        <sourceName>global:*attributeName*</sourceName>

dannERDDAP™die Daten aus einer Datei liest,ERDDAP™wird nach einem globalen Attribut dieses Namens suchen (z.B. PI) und erstellen Sie eine Spalte, die mit dem Wert des Attributs gefüllt ist. Dies ist nützlich, wenn das Attribut in verschiedenen Quelldateien unterschiedliche Werte hat, da ansonsten Benutzer nur einen dieser Werte für den gesamten Datensatz sehen würden. Zum Beispiel

        <sourceName>global:PI</sourceName>

Wenn Sie ein Attribut als Daten fördern,ERDDAP™entfernt das entsprechende Attribut. Dies ist angemessen, weil der Wert in jeder Datei vermutlich unterschiedlich ist; während im aggregierten Datensatz inERDDAP™es wird nur einen Wert haben. Wenn Sie wollen, können Sie einen neuen Wert für das Attribut für den gesamten Datensatz hinzufügen, indem Sie<att name=" Eigenschaften Name > neue Wert </att> zum globalen Datensatz [<addAttributes> (#addattributes) . Für globale Attribute, dieERDDAP™erfordert z.B. Institution, Sie müssen einen neuen Wert für das Attribut hinzufügen.  

Variable:sourceNameS

Das Metadaten-Attribut einer Variablen in jeder Datei kann als Datenspalte gefördert werden. Wenn eine Variable<sourceName\> hat das Format

        <sourceName>variable:*variableName*:*attributeName*<sourceName>

dannERDDAP™die Daten aus einer Datei liest,ERDDAP™wird das angegebene Attribut suchen (z.B. ID) der angegebenen Größe (zum Beispiel Instrument) und erstellen Sie eine Spalte, die mit dem Wert des Attributs gefüllt ist. Die Elternvariable (zum Beispiel Instrument) muss nicht einer vondataVariables in der Definition des Datensatzes inERDDAP. Zum Beispiel

        <sourceName>variable:instrument:ID</sourceName>

Dies ist nützlich, wenn das Attribut in verschiedenen Quelldateien unterschiedliche Werte hat, da ansonsten Benutzer nur einen dieser Werte für den gesamten Datensatz sehen würden.

Wenn Sie ein Attribut als Daten fördern,ERDDAP™entfernt das entsprechende Attribut. Dies ist angemessen, weil der Wert in jeder Datei vermutlich unterschiedlich ist; während im aggregierten Datensatz inERDDAP™es wird nur einen Wert haben. Wenn Sie wollen, können Sie einen neuen Wert für das Attribut für den gesamten Datensatz hinzufügen, indem Sie<att name=" Eigenschaften Name > neue Wert </att> zur Variablen [<addAttributes> (#addattributes) . Für Attribute, dieERDDAP™erfordert beispielsweiseioos\_category (je nach Einrichtung) , Sie müssen einen neuen Wert für das Attribut hinzufügen.

DateinamesourceNameS

Sie können einen Teil der Dateinamen einer Datei extrahieren und diese als Datenspalte fördern. Das Format für dieses Pseudo [<sourceName> (#sourcename) ist

        <sourceName>\\*\\*\\*fileName,*regex*,*captureGroupNumber*</sourceName>

Zum Beispiel

        <sourceName>\\*\\*\\*fileName,A(\\d{12})\\.slcpV1.nc,1</sourceName>

Wenn EDDTableFromFiles die Daten aus einer Datei liest, stellt sie sicher, dass die DateiName (zum Beispiel A201807041442.slcpV1.nc) entspricht dem angegebenen regulären Ausdruck ("regex") und die angegebenen (in diesem Fall die erste) Fanggruppe (das ein von Klammern umgebener Teil ist) , zum Beispiel "201807041442". (Sieheregex dokumentationundNach oben.) Der Regex kann als String mit oder ohne umliegende Zitate angegeben werden. Wenn der Regex als String mit umliegenden Zitaten angegeben ist, muss der StringJSON-Stil String (mit speziellen Zeichen entkommen mit \ Zeichen) . Die Fanggruppe Nummer ist in der Regel 1 (die erste Fanggruppe) , aber kann jede Nummer sein.  

PfadNamesourceNameS

Sie können einen Teil des vollen Pfads einer Datei extrahieren Name (/verzeichnisse/fileName.ext) und fördern, dass es sich um eine Datenspalte handelt. Das Format für dieses Pseudo [<sourceName> (#sourcename) ist

        <sourceName>\\*\\*\\*pathName,*regex*,*captureGroupNumber*<sourceName>

Zum Beispiel

        <sourceName>\\*\\*\\*pathName,/data/myDatasetID/(\\[A-Z0-9\\]\\*)/B(\\d{12}).nc,1</sourceName>

Wenn EDDTableFromFiles die Daten aus einer Datei liest, wird es sicherstellen, dass der vollständige PfadName (zum Beispiel /data/myDatasetID/BAY17/B201807041442.nc. Für diesen Test werden die Verzeichnistrenner immer'/', nie ') entspricht dem angegebenen regulären Ausdruck ("regex") und die angegebenen (in diesem Fall die erste) Fanggruppe (das ein von Klammern umgebener Teil ist) , zum Beispiel "BAY17". (Sieheregex dokumentationundNach oben.) Der Regex kann als String mit oder ohne umliegende Zitate angegeben werden. Wenn der Regex als String mit umliegenden Zitaten angegeben ist, muss der String einJSON-Stil String (mit speziellen Zeichen entkommen mit \ Zeichen) . Die Fanggruppe Nummer ist in der Regel 1 (die erste Fanggruppe) , aber kann jede Nummer sein.  

"0 Dateien" Fehlermeldung
  • Wenn SieGenerateDatasetsXmloderDasDds, oder wenn Sie versuchen, ein EDDTableFrom zu laden... Dateien-Datensatz inERDDAP™, und Sie erhalten eine "0 Dateien" Fehlermeldung, dassERDDAP™gefunden 0 passende Dateien im Verzeichnis (wenn Sie denken, dass es passende Dateien in diesem Verzeichnis) :
    • Überprüfen Sie, ob die Dateien wirklich in diesem Verzeichnis sind.
    • Überprüfen Sie die Rechtschreibung des Verzeichnisnamens.
    • Überprüfen Sie die DateiNameRegex. Es ist wirklich, wirklich einfach, Fehler mit Regexes zu machen. Für Testzwecke, versuchen Sie die regex .\*, die alle Dateinamen entsprechen sollte. (Sieheregex dokumentationundNach oben.)
    • Überprüfen Sie, ob der Benutzer, der das Programm läuft (z.B., user=tomcat (?) für Tomcat/ERDDAP) hat 'lesen' Erlaubnis für diese Dateien.
    • In einigen Betriebssystemen (zum Beispiel SELinux) und je nach Systemeinstellungen, muss der Benutzer, der das Programm ausgeführt hat, 'lesen' Berechtigung für die gesamte Kette von Verzeichnissen, die zu dem Verzeichnis führen, das die Dateien hat.  
Standardisierung Was?
  • Wenn jede Unterklasse von EDDTableFromFiles eine Reihe von Quelldateien aggregiert, für eine bestimmte Variable, alle Quelldateien MUST haben identische Attributwerte für mehrere Attribute:scale\_factor,add\_offset, \_Unsigned,missing\_value, \_FillValue und Einheiten). Denken Sie darüber nach: Wenn eine Datei WindSpeed-Einheiten=Knoten hat und eine andere WindSpeed-Einheiten=m/s hat, sollten die Datenwerte aus den beiden Dateien nicht in demselben aggregierten Datensatz enthalten sein. Wenn EDDTableFromFiles den Datensatz zuerst erstellt, liest er die Attributwerte aus einer Datei, lehnt dann alle Dateien ab, die für diese wichtigen Attribute unterschiedliche Werte haben. Für die meisten Sammlungen von Dateien ist dies kein Problem, weil die Attribute aller Variablen konsistent sind. Für andere Sammlungen von Dateien kann dies jedoch zu 1%, 10%, 50%, 90% oder sogar 99% der Dateien als "schlechte" Dateien abgelehnt. Das ist Ärger.

EDDTableFrom Dateien hat ein System, um dieses Problem zu lösen: standardisieren Was? Die Standardisierung Welche Einstellung sagt EDDTableFromFiles, um die Dateien zu standardisieren, sobald es sie liest, bevor EDDTableFromFiles die Attribute betrachtet, um zu sehen, ob sie konsistent sind.

Die Flip-Seite ist: Wenn der Datensatz dieses Problem nicht hat, verwenden Sie nicht standardisieren Was? Standardisierung Was potentielle Risiken hat (weiter unten) und Ineffizienzen. Also, wenn Sie nicht wirklich die Funktionen der Standardisierung benötigen Was, es gibt keine Notwendigkeit, sich den potenziellen Risiken und Unwirksamkeiten zu stellen. Die größte Ineffizienz ist: Wenn verschiedene Standardisierung Welche Optionen werden von einem Datensatz verwendet, es impliziert, dass die Quelldateien Daten auf signifikant unterschiedliche Weise speichern (z.B. mit unterschiedlichenscale\_factorundadd\_offset, oder mit Zeitzeichenfolgen mit verschiedenen Formaten) . So gibt es für eine bestimmte Einschränkung in einer Benutzeranforderung keine Möglichkeit fürERDDAP™um eine einzige Source-Level-Beschränkung zu machen, die auf alle Quelldateien angewendet werden kann. So.ERDDAP™die betroffenen Zwänge nur auf höherer Ebene anwenden können. So.ERDDAP™muss die Daten aus mehr Dateien vor der Anwendung der höheren, Ziel-Ebene Einschränkungen lesen. Anfragen an Datensätze, die standardisieren Was dauert länger zu verarbeiten.

Um dieses System zu verwenden, müssen Sie angeben

    <standardizeWhat>*standardizeWhat*</standardizeWhat>  

in derdatasets.xmlfür den EDDTableFrom... Dateidatensatz(in der<Datensatz> tag).

Die Standardisierung Was? Wert gibt an, welche Änderungen EDDTableFromFiles versuchen sollten, anzuwenden. Die Änderungen sind die Summe einiger Kombinationen von:

  1. Entpacken Dies macht viele häufige und sichere Operationen, um numerische Spalten in den Dateien zu standardisieren:
    • wennscale\_factorund/oderadd\_offsetAttribute sind vorhanden, entfernen und anwenden, um die Datenwerte auszupacken.
    • Entpacken Sie verpackte Attribute (z.B. Ist\_min, Ist\_max,actual\_range,data\_min,data\_max, Daten\_range,valid\_min,valid\_max,valid\_range) , wenn vorhanden, wenn die Variable verpackt wurde und wenn die Attributwerte verpackt wurden (das ist knifflig, aber vernünftig zuverlässig) .
    • Wenn \_FillValue und/odermissing\_valuediese Datenwerte inERDDAP"Standard" fehlende Werte: MAX\_VALUE für ganze Typen (z.B. 127 für Bytes, 32,767 für kurz, und 2,147,483,647 für Ints, 9223372036854775807 für lange) und NaN für Doppel und Schwimmer.
    • Entfernen Sie die alte \_FillValue und/odermissing\_valueAttribute (wenn) , und ersetzen sie mit nur \_FillValue=\[dieERDDAP™Standard fehlender Wert\].  
  2. Standardisierte numerische Zeiten Wenn eine numerische Spalte numerische Zeiteinheiten im CF-Stil hat (" ZeitEinstellungen seit Basiszeit ", z.B. "Tage seit 1900-01-01") , Dies konvertiert das Datum Zeitwerte in"seconds since 1970-01-01T00:00:00Z"Werte und Änderungen des Attributs Einheiten, um das anzuzeigen. Wenn dies gewählt wird und es besteht die Chance, dass diese Variablescale\_factoroderadd\_offset, #1 MUST auch ausgewählt werden.  
  3. Anwenden von Stringmissing\_value
    Wenn eine String-Spalte \_FillValue und/odermissing\_valueAttribute, dies wandelt diese Werte in "" um und entfernt die Attribute.  
  4. Finden Sie Numerischmissing\_value
    Wenn eine numerische Spalte nicht \_FillValue odermissing\_valueAttribute, dies versucht, eine undefinierte numerischemissing\_value (z.B. -999, 9999, 1e37f) und die Instanzen davon in die "Standard"-Werte umwandeln (MAX\_VALUE für ganzzahlige Typen und NAN für Doppel und Schwimmer) . Diese Option hat ein Risiko: wenn der größte oder kleinste gültige Datenwert wie ein fehlender Wert aussieht (z.B. 999) , dann werden diese gültigen Datenwerte in fehlende Werte umgewandelt (z.B. NaN) .  
  5. String "N/A" auf " ändern" Für jede String-Spalte wandeln Sie mehrere Strings um, die häufig verwendet werden, um einen fehlenden String-Wert in " anzuzeigen. Derzeit sucht das nach ".", "...", "-", "?", "??", "N/A", "NA", "nein", "nicht anwendbar", "null", "unbekannt", "unspezifiziert". Die Stringsuche ist case-insensitive und nach dem Trimmen der Strings angewendet. "nd" und "ander" sind speziell nicht auf der Liste. Diese Option hat ein Risiko: Strings, die Sie als gültige Werte betrachten, können in " umgewandelt werden.  
  6. Standardisieren nach String ISO 8601 DatumZeiten Für jede String-Spalte, versuchen Sie nicht-purely-numeric String dateTimes zu konvertieren (z.B. "Jan 2, 2018") nach ISO 8601 String dateTimes ("2018-01-02") . Anmerkung dass alle Datenwerte für die Spalte dasselbe Format verwenden müssen, andernfalls wird diese Option keine Änderungen in einer bestimmten Spalte vornehmen. Diese Option hat ein Risiko: Wenn es eine Spalte mit String-Werten gibt, die einfach wie ein gemeinsames Datum aussehen Zeitformat, werden sie in ISO 8601 String dateTimes umgewandelt.  
  7. Standardisieren Kompakte Datumszeiten nach ISO 8601 Datumszeiten Für jede String- oder Ganzzahl-Spalte versuchen Sie, rein numerische String-DatumZeiten zu konvertieren (z.B. "20180102") nach ISO 8601 String dateTimes ("2018-01-02") . Anmerkung dass alle Datenwerte für die Spalte dasselbe Format verwenden müssen, andernfalls wird diese Option keine Änderungen in einer bestimmten Spalte vornehmen. Diese Option hat ein Risiko: Wenn es eine Spalte mit Werten gibt, die kein kompaktes Datum sind Zeiten aber aussehen wie kompakte DateTimes, werden sie in ISO 8601 String dateTimes umgewandelt.  
  8. Standardisieren von Einheiten Dies versucht, die Einheiten String für jede Variable zu standardisieren. Zum Beispiel "Meter pro Sekunde", "Meter/Sekunde","m.s^-1","m s-1", "m.s-1" wird alle in "m.s-1" umgewandelt. Dies ändert die Datenwerte nicht. Dies funktioniert gut für gültigUDUNITSEinheiten Strings, aber kann Probleme mit ungültigen oder komplexen Strings haben. Sie können mit Problemen umgehen, indem Sie bestimmte von zu Paaren in<StandardisierungEinheiten> inERDDAP' \[Tomcat\]/webapps/erdap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml Datei. Bitte mailen Sie alle Änderungen an Chris. John bei noaaa.gov, so dass sie in die Standard-Nachrichten.xml integriert werden können. Diese Option hat ein Risiko: Dies kann einige komplexe oder ungültige Einheiten manipulieren; jedoch können Sie die oben beschriebene Arbeitsumgebung verwenden, um Probleme zu umgehen, wenn sie auftreten.  

Der Standardwert der Standardisierung Was ist 0, was nichts tut.

Wenn/wenn Sie den Wert der Standardisierung ändern Was, das nächste Mal, wenn der Datensatz neu geladen wird,ERDDAP™alle Datendateien für den Datensatz neu zu lesen, um die Mini-Datenbank mit Informationen über jede Datei neu zu erstellen. Wenn der Datensatz viele Dateien hat, dauert dies lange.

Anmerkungen:

  • Ein Trick ist... Die Standardisierung Welche Einstellung wird für alle Spalten in der Quelldatei verwendet. So, zum Beispiel mit #2048 könnte erfolgreich eine Spalte der kompakten String DateTimes in ISO 8601 String dateTimes umwandeln, aber es könnte auch irrtümlich eine Spalte mit Strings umwandeln, die einfach wie kompakte DateTimes aussehen.  
  • datasets.xmlund Datasets generieren Xml - Es ist besonders schwierig, die Einstellungen richtig indatasets.xmlum Ihren Datensatz so zu arbeiten, wie Sie es wollen. Der beste Ansatz (wie immer) ist:
    1. VerwendungGenerateDatasetsXmlund den Wert der Standardisierung angeben Was Sie gerne verwenden möchten.
    2. VerwendungDasDdsum sicherzustellen, dass der Datensatz korrekt geladen und die Standardisierung reflektiert Welche Einstellung, die Sie angegeben haben.
    3. Testen Sie den Datensatz von Hand, wenn er inERDDAP™sicherzustellen, dass die betroffenen Variablen wie erwartet funktionieren.  
  • Risiken - Optionen #256 und oben sind riskanter, d.h. es gibt eine größere Chance, dassERDDAP™wird eine Änderung vornehmen, die nicht gemacht werden sollte. Zum Beispiel, Option #2048 könnte versehentlich eine Variable mit Station ID-Strings konvertieren, die alle nur passieren, um ISO 8601 "compact" Termine aussehen (z.B., 20180102) ISO 8601"extended"Datum ("2018-01-02") .  
  • Langsam nach einer Veränderung -- Da der Wert der Standardisierung Was ändert die Datenwerte, die EDDTableFromFiles für jede Datendatei sieht, wenn Sie die Standardisierung ändern Welche Einstellung, EDDTableFromFiles wird wegwerfen alle cached Informationen über jede Datei (die die min und max für jede Datengröße in jeder Datei enthält) und jede Datendatei erneut lesen. Wenn ein Datensatz eine große Anzahl von Dateien hat, kann dies sehr zeitaufwendig sein, so wird es lange dauern, bis der Datensatz zum ersten Mal neu geladen wirdERDDAP™Nach der Änderung neu laden.  
  • Heuristik - Die Optionen #256 und oben verwenden Heuristiken, um ihre Änderungen vorzunehmen. Wenn Sie über eine Situation kommen, in der die Heuristik eine schlechte Entscheidung treffen, senden Sie bitte eine Beschreibung des Problems an Chris. John bei Noaa. Wir können die Heuristik verbessern.  
  • Alternative -- Wenn eine der standardizeWelche Optionen kein Problem für einen bestimmten Datensatz löst, können Sie das Problem lösen, indem Sie ein.ncml DateiParallel zu jeder Datendatei und Definition von Änderungen an den Dateien, so dass die Dateien konsistent sind. Dann sagen Sie dem EDDTableFrom... Dateien-Datensatz zur Aggregation.ncml Dateien.

Oder, verwendenNCOtatsächlich Änderungen an den Dateien vornehmen, so dass die Dateien konsistent sind.

Separate Säulen für Jahr, Monat, Datum, Stunde, Minute, Zweit

Es ist ziemlich üblich für tabellarische Datendateien separate Spalten für Jahr, Monat, Datum, Stunde, Minute, Sekunde haben. VorERDDAP™v2.10, die einzige Lösung war, die Datendatei zu bearbeiten, um diese Spalten in eine einheitliche Zeitspalte zu kombinieren. mitERDDAP™2.10+, können Sie die (<sourceName>=============================================================================================================================================================================================================================================================== Ausdruck <sourceName> (#sourcename) zu sagenERDDAP™wie Sie die Quellspalten kombinieren, um eine einheitliche Zeitspalte zu erstellen, so dass Sie die Quelldatei nicht mehr bearbeiten müssen.

<ScheckHeaderToRegex>
  • (<SkipHeaderToRegex> (#skipheadertoregex) -- OPTIONAL. (Für EDDTableFromAsciiFiles und EDDTableFromColumnarAsciiFiles nur Datensätze.)
    Wenn EDDTableFromAsciiFiles eine Datendatei liest, wird es alle Zeilen bis und einschließlich der Zeile ignorieren, die diesem regulären Ausdruck entspricht. Der Standard ist ", was diese Option nicht nutzt. Ein Beispiel ist
    <skipHeaderToRegex>\\\*\\\*\\\* END OF HEADER.\\*<skipHeaderToRegex>  

die alle Zeilen bis und einschließlich einer Zeile ignorieren wird, die mit "\\\* END DER HEADER".

Wenn Sie diesen Tag verwenden,<SpalteNamesRow> und<firstDataRow> fungieren als wenn der Header entfernt wurde, bevor die Datei gelesen wird. Sie würden beispielsweise SpalteNamesRow=0 verwenden, wenn die Spaltennamen direkt nach dem Header in der Zeile stehen.

Wenn Sie verwenden möchten generieren Datensätze Xml mit einem Datensatz, der diesen Tag benötigt:

  1. Machen Sie eine neue, temporäre, Sample-Datei, indem Sie eine bestehende Datei kopieren und den Header entfernen.
  2. Start generieren Datensätze Xml und geben Sie diese Musterdatei an.
  3. Manuelles Hinzufügen der<skipHeaderToRegex> tag zumdatasets.xmlBlödsinn.
  4. Löschen Sie die temporäre, Musterdatei.
  5. Verwenden Sie den Datensatz inERDDAP.
<SkipLinesRegex>

OPTIONAL. (Für EDDTableFromAsciiFiles und EDDTableFromColumnarAsciiFiles nur Datensätze.)
Wenn EDDTableFromAsciiFiles eine Datendatei liest, wird es alle Zeilen ignorieren, die diesem regulären Ausdruck entsprechen. Der Standard ist ", was diese Option nicht nutzt. Ein Beispiel ist

    <skipLinesRegex>#.\\*<skipLinesRegex>  

die alle Zeilen ignorieren, die mit "#" beginnen.

Wenn Sie diesen Tag verwenden,<SpalteNamesRow> und<firstDataRow> fungieren, als ob alle übereinstimmenden Zeilen entfernt worden wären, bevor die Datei gelesen wird. Zum Beispiel würden Sie die SpalteNamesRow=0 verwenden, auch wenn es mehrere Zeilen gibt, die zum Beispiel mit "#" beginnen.

EDDTableFromFiles Skelett XML

  <dataset type="EDDTableFrom...Files" datasetID\="..." active\="..." >
      <nDimensions>...</nDimensions> <!-- This was used prior to ERDDAP™
        version 1.30, but is now ignored. -->
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. For
        EDDTableFromFiles subclasses, this uses Java's WatchDirectory system
        to notice new/deleted/changed files quickly and efficiently. -->
      <standardizeWhat>...</standardizeWhat> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <nThreads>...</nThreads> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <specialMode>mode</specialMode> <-- This rarely-used, OPTIONAL tag
        can be used with EDDTableFromThreddsFiles to specify that special,
        hard-coded rules should be used to determine which files should
        be downloaded from the server. Currently, the only valid mode
        is SAMOS which is used with datasets from
        https://tds.coaps.fsu.edu/thredds/catalog/samos to download only the
        files with the last version number. -->
      <sourceUrl>...</sourceUrl> <-- For subclasses like
        EDDTableFromHyraxFiles and EDDTableFromThreddsFiles, this is where
        you specify the base URL for the files on the remote server.
        For subclasses that get data from local files, ERDDAP™ doesn't use
        this information to get the data, but does display the
        information to users. So I usually use "(local files)". -->
      <fileDir>...</fileDir> <-- The directory (absolute) with the data
        files. -->
      <recursive>true|false</recursive> <!-- 0 or 1. Indicates if
        subdirectories of fileDir have data files, too. -->
      <pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
        match the pathRegex (default=".\") will be accepted. -->
      <fileNameRegex>...</fileNameRegex> <-- 0 or 1. A regular expression
        (tutorial) describing valid data file names, for example,
            ".\
\.nc" for all .nc files. -->
      <accessibleViaFiles>true|false(default)</accessibleViaFiles>
        <!-- 0 or 1 -->
      <metadataFrom>...</metadataFrom> <-- The file to get metadata
        from ("first" or "last" (the default) based on file's
        lastModifiedTime). -->
      <charset>...</charset>
        <!-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
        only) This OPTIONAL tag specifies the character set (case
        sensitive!) of the source files, for example, ISO-8859-1
        (the default) and UTF-8. -->
      <skipHeaderToRegex>...</skipHeaderToRegex>
      <skipLinesRegex>...</skipLinesRegex>
      <columnNamesRow>...</columnNamesRow> <-- (For EDDTableFromAsciiFiles
        only) This specifies the number of the row with the column
        names in the files. (The first row of the file is "1".
        Default = 1.) If you specify 0, ERDDAP™ will not look for
        column names and will assign names: Column#1, Column#2, ... -->
      <firstDataRow>...</firstDataRow>
        <-- (For EDDTableFromAsciiFiles and EDDTableFromColumnarAsciiFiles
        only) This specifies the number of the first row with data in the
        files. (The first row of the file is "1". Default = 2.) -->
      <dimensionsCSV>...</dimensionsCSV> <-- (For EDDTableFromNcFiles
        and EDDTableFromMultidimNcFiles only) This is a comma-separated
        list of dimension fullNames. If specified, ERDDAP™ will only read
        variables in the source files which use some or all of these
        dimensions, plus all of the scalar variables. If a dimension
        is in a group, you must specify its fullName,
        e.g., "groupName/dimensionName". -->
      <-- The next four tags are DEPRECATED. For more information, see
        File Name Extracts. -->
      <preExtractRegex>...</preExtractRegex>
      <postExtractRegex>...</postExtractRegex>
      <extractRegex>...</extractRegex>
      <columnNameForExtract>...</columnNameForExtract>
      <sortedColumnSourceName>...</sortedColumnSourceName>
        <-- The sourceName of the numeric column that the data files are
        usually already sorted by within each file, for example, "time".
        Don't specify this or use an empty string if no variable is
        suitable. It is ok if not all files are sorted by this column.
        If present, this can greatly speed up some data requests.
        For EDDTableFromHyraxFiles, EDDTableFromNcFiles and
        EDDTableFromThreddsFiles, this must be the leftmost (first) axis variable.
        EDDTableFromMultidimNcFiles ignores this because it has a better
        system. -->
      <sortFilesBySourceNames>...</sortFilesBySourceNames>
        <-- This is a space-separated list of sourceNames
        which specifies how the internal list of files should be sorted
        (in ascending order), for example "id time".
        It is the minimum value of the specified columns in each file
        that is used for sorting.
        When a data request is filled, data is obtained from the files
        in this order. Thus it determines the overall order of the data
        in the response. If you specify more than one column name, the
        second name is used if there is a tie for the first column; the
        third is used if there is a tie for the first and second
        columns; ... This is OPTIONAL (the default is
        fileDir+fileName order). -->
        
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
      <fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or
        false (the default)) -->
      <cacheFromUrl>...</cacheFromUrl> <!-- 0 or 1 -->
      <cacheSizeGB>...</cacheSizeGB> <!-- 0 or 1 -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more -->
        <-- For EDDTableFromHyraxFiles, EDDTableFromMultidimNcFiles,
        EDDTableFromNcFiles, EDDTableFromNccsvFiles, and
        EDDTableFromThreddsFiles, the source's axis variables (for
        example, time) needn't be first or in any specific order. -->
  </dataset>

EDDTableFromAsciiService

EDDTableFromAsciiService im wesentlichen ein Siebschaber ist. Es soll sich um Datenquellen handeln, die einen einfachen Webdienst zur Anforderung von Daten haben (oft ein HTML-Formular auf einer Webseite) und die die Daten in einem strukturierten ASCII-Format zurückgeben können (z.B. ein Komma-Separated-Wert oder Kolumnar ASCII Textformat, oft mit anderen Informationen vor und/oder nach den Daten) .

EDDTableFromAsciiService ist die Superklasse aller EDDTableFromAsciiService... Klassen. Sie können EDDTableFromAsciiService nicht direkt verwenden. Verwenden Sie stattdessen eine Unterklasse von EDDTableFromAsciiService, um bestimmte Arten von Dienstleistungen zu bewältigen:

Derzeit werden keine anderen Servicetypen unterstützt. Aber es ist in der Regel relativ einfach, andere Dienste zu unterstützen, wenn sie in ähnlicher Weise arbeiten. Kontaktieren Sie uns, wenn Sie eine Anfrage haben.

Details

Die folgenden Informationen gelten für alle Unterklassen von EDDTableFromAsciiService.

  • Einschränkungen --ERDDAP™tabellarische Datenanforderungen können Einschränkungen auf jede Variable setzen. Der zugrunde liegende Dienst kann oder darf keine Einschränkungen für alle Variablen zulassen. Viele Dienstleistungen unterstützen z.B. nur die Einschränkungen bei den Stationsnamen, der Breite, der Länge und der Zeit. Wenn also eine Unterklasse von EDDTableFromAsciiService eine Anforderung für eine Untermenge eines Datensatzes erhält, geht sie dem Quelldatendienst möglichst viele Einschränkungen über und wendet dann die übrigen Einschränkungen auf die vom Dienst zurückgegebenen Daten an, bevor sie die Daten an den Benutzer übergeben.
  • Gültige Reichweite -- Im Gegensatz zu vielen anderen Datensätzen kennt EDDTableFromAsciiService in der Regel nicht den Datenbereich für jede Variable, so dass es nicht schnell Anfragen für Daten außerhalb des gültigen Bereichs ablehnen kann.
  • Parsing the ASCII Text Response -- Wenn EDDTableFromAsciiService eine Antwort von einem ASCII Text Service erhält, muss es bestätigen, dass die Antwort das erwartete Format und die Informationen hat und dann die Daten extrahiert. Für diesen Datensatz können Sie das Format angeben, indem Sie verschiedene spezielle Tags im XML-Chunk verwenden:
    • <VorData1> durch<vorData10> tags -- Sie können eine Reihe von Texten angeben (so viele wie Sie wollen, bis zu 10) dass EDDTableFromAsciiService im Header des ASCII-Textes suchen muss, der vom Dienst zurückgegeben wird,<VorData1> durch<vorData10>. Dies ist zum Beispiel nützlich, um zu überprüfen, ob die Antwort die erwarteten Variablen mit den erwarteten Einheiten enthält. Der letzte vorData-Tag, den Sie angeben, identifiziert den Text, der unmittelbar vor dem Start der Daten auftritt.
    • <nachDaten> -- Dies gibt den Text an, den EDDTableFromAsciiService im von dem Dienst zurückgegebenen ASCII-Text suchen wird, der das Ende der Daten bedeutet.
    • <Keine Daten -- Findet EDDTableFromAsciiService diesen Text im vom Service zurückgegebenen ASCII-Text, so ergibt sich daraus, dass keine Daten vorliegen, die der Anfrage entsprechen.

EDDTableFromAsciiService skeleton 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 macht EDDTable-Datensätze aus den vonNOAA'National Ocean Service (NOS) . Informationen darüber, wie diese Klasse funktioniert und wie sie verwendet wird, siehe die Superklasse dieser KlasseEDDTableFromAsciiService. Es ist unwahrscheinlich, dass jeder andere als Bob Simons diese Unterklasse verwenden muss.

Da die Daten innerhalb der Antwort eines NOS-Dienstes ein spaltäres ASCII-Textformat verwenden, müssen andere Datenvariablen als Breite und Länge ein spezielles Attribut aufweisen, das angibt, welche Zeichen jeder Datenzeile die Daten dieser Variablen enthalten, beispielsweise

<att name="responseSubstring">17, 25</att>  

 

EDDTableFromAllDatasets

EDDTableFromAllDatasets ist ein höherwertiger Datensatz, der Informationen über alle anderen Datensätze hat, die aktuell in IhremERDDAP. Im Gegensatz zu anderen Arten von Datensätzen gibt es keine Spezifikation für dieallDatasetsDatensatz indatasets.xml.ERDDAP™automatisch einen EDDTableFromAllDatasets Datensatz (mitdatasetID=allDatasets) . So eineallDatasetsDatensatz wird in jedemERDDAP™Installation und wird in jedemERDDAP™Installation.

DieallDatasetsdataset ist ein tabellarischer Datensatz. Es hat eine Reihe von Informationen für jeden Datensatz. Es hat Spalten mit Informationen über jeden Datensatz, z.datasetID, zugänglich, Institution, Titel, minLongitude, maxLongitude, minLatitude, maxLatitude, minTime, maxTime, etc. WeilallDatasetsist ein tabellarischer Datensatz, Sie können ihn genauso abfragen, wie Sie jede andere tabellarische Datenmenge inERDDAP™, und Sie können den Dateityp für die Antwort angeben. Dadurch können Benutzer nach Datensätzen von Interesse auf sehr leistungsfähige Weise suchen.  

EDDTableFromAsciiFiles

EDDTableFromAsciiFiles aggregiert Daten aus Komma-, Tab-, Semikolon- oder platzgetrennten tabellarischen ASCII-Datendateien.

  • Meistens haben die Dateien Spaltennamen in der ersten Zeile und Daten beginnend in der zweiten Zeile. (Hier wird die erste Zeile der Datei als Zeilennummer 1 bezeichnet.) Aber Sie können<SpalteNamesRow> und<firstDataRow> in Ihremdatasets.xmlDatei, um eine andere Zeilennummer anzugeben.
  • ERDDAP™die Zeilen der Daten unterschiedliche Zahlen von Datenwerten haben.ERDDAP™nimmt an, dass die fehlenden Datenwerte die letzten Spalten in der Zeile sind.ERDDAP™die standardmäßigen fehlenden Werte für die fehlenden Datenwerte zuordnet. (hinzugefügt v1.56)
  • ASCII-Dateien sind einfach zu arbeiten, aber sie sind nicht die effizienteste Weise, um Daten zu speichern / zu speichern. Für mehr Effizienz speichern Sie die Dateien alsNetCDFV3.ncDateien (mit einer Dimension, "row", geteilt durch alle Variablen) statt. Sie könnenVerwendungERDDAP™die neuen Dateien zu generieren.
  • Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Aufgrund des gesamten Fehlens von Metadaten in ASCII-Dateien müssen Sie immer die Ergebnisse von GenerateDatasetsXml bearbeiten.
  • WARNING: WannERDDAP™liest ASCII-Datendateien, wenn es einen Fehler auf einer bestimmten Zeile findet (z.B. falsche Anzahl von Gegenständen) , es protokolliert eine Warnmeldung ("WARNUNG: Schlechte Linie (S) der Daten" ... mit einer Liste der schlechten Linien auf folgenden Zeilen) in derlog.txt Dateiund dann weiter den Rest der Datendatei lesen. So ist es Ihre Verantwortung, regelmäßig zu schauen (oder ein Skript schreiben, um dies zu tun) für diese Nachricht im Protokoll. txt, damit Sie die Probleme in den Datendateien beheben können.ERDDAP™wird so eingerichtet, dass die Benutzer weiterhin alle verfügbaren gültigen Daten lesen können, obwohl einige Zeilen der Datei Fehler haben.  

EDDTableFrom AwsXmlFiles

EDDTableFrom AwsXmlFiles aggregierte Daten von einem Satz von Automatischer Wetterstation (AWS) XML-Datendateien mit der WeatherBug Rest XML API (die nicht mehr aktiv ist) .

EDDTableFromColumnarAsciiFiles

EDDTableFromColumnarAsciiFiles aggregiert Daten aus tabellarischen ASCII-Datendateien mit festbreiten Spalten.

  • Meistens haben die Dateien Spaltennamen in der ersten Zeile und Daten beginnend in der zweiten Zeile. Die erste Zeile/Reihe in der Datei wird Zeile #1 aufgerufen. Aber Sie können<SpalteNamesRow> und<firstDataRow> in Ihremdatasets.xmlDatei, um eine andere Zeilennummer anzugeben.

  • Die<addAttributes> je<dataVariable> für diese Datensätze sind diese beiden speziellen Attribute enthalten:

    • <att name="startColumn"> ganze <att> -- gibt die Zeichenspalte in jeder Zeile an, die der Beginn dieser Datengröße ist.
    • <att name="stopColumn"> ganze <att> -- gibt die Zeichenspalte in jeder Zeile an, die die 1 nach dem Ende dieser Datengröße ist.

Die erste Zeichenspalte wird Spalte #0 genannt. Beispielsweise für diese Datei, die an Temperaturwerten anliegende Zeitwerte aufweist:

      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

die Zeitdatengröße hätte

      <att name="startColumn">0<att>  
  <att name="stopColumn">20<att>

und die Zeitdatenvariable

      <att name="startColumn">20<att>  
  <att name="stopColumn">24<att>

Diese Attribute müssen nur für alle Variablen angegeben werdenFestwertundDatei-Name-Quelle-NamenVariablen.

  • ASCII-Dateien sind einfach zu arbeiten, aber sie sind keine effiziente Möglichkeit, Daten zu speichern / zu speichern. Für mehr Effizienz speichern Sie die Dateien alsNetCDFV3.ncDateien (mit einer Dimension, "row", geteilt durch alle Variablen) statt. Sie könnenVerwendungERDDAP™die neuen Dateien zu generieren.
  • Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Aufgrund der Schwierigkeit, die Start- und Endpositionen für jede Datenspalte zu bestimmen und den gesamten Mangel an Metadaten in ASCII-Dateien, müssen Sie immer die Ergebnisse von GenerateDatasetsXml bearbeiten.  

EDDTableFromHtpGet

EDDTable FromHttpGet unterscheidet sich von allen anderen Arten von Datensätzen inERDDAP™dass es ein System hat, bei dem bestimmte "Autor" Daten hinzufügen, Daten überarbeiten oder Daten aus dem Datensatz durch regelmäßig löschen könnenHTTP GEToderPOSTAnfragen von einem Computerprogramm, einem Skript oder einem Browser. Der Datensatz ist von Benutzern in der gleichen Weise abfragbar, dass alle anderen EDDTable-Datensätze inERDDAP. Siehe die Beschreibung der Superklasse dieser Klasse,EDDTableFromFiles, um über die Merkmale zu lesen, die von dieser Superklasse geerbt werden.

Die einzigartigen Eigenschaften von EDDTableFromHtpGet werden unten beschrieben. Sie müssen alle diesen ersten Abschnitt lesen und verstehen; andernfalls können Sie unrealistische Erwartungen haben oder sich in Schwierigkeiten, die schwer zu beheben ist.

Vorgesehener Einsatz

Dieses System ist für:

  • Tabelle (in situ) Daten, nicht gegitterte Daten.
  • Echtzeitdaten - Ziel ist es, einen Autor zu ermöglichen (z.B. der Sensor, ein automatisiertes QC-Skript oder ein bestimmter Mensch) eine Änderung des Datensatzes vornehmen (über eine.insert oder .delete Befehl) und diese Änderung zugänglich machenERDDAP™Benutzer, alle in weniger als 1 Sekunde, und möglicherweise viel schneller. Die meisten dieser 1 Sekunde ist die Netzwerkzeit.ERDDAP™kann die Anfrage in ca. 1 ms bearbeiten und die Daten sind den Benutzern sofort zugänglich. Das ist einschnell,robust, undzuverlässiges System.
  • Fast jede Häufigkeit von Daten - Dieses System kann selten Daten akzeptieren (z.B. täglich) durch sehr häufige Daten (z.B. 100 Hz Daten) . Wenn Sie das System optimieren, kann es höhere Frequenzdaten verarbeiten (vielleicht 10 KHz-Daten, wenn Sie zu Extremen gehen) .
  • Daten aus einem Sensor oder einer Sammlung ähnlicher Sensoren.
  • Ausführung/Reproduzierbare Wissenschaft/DOI-- Situationen, in denen Sie Änderungen an den Daten vornehmen müssen (z.B. ein Qualitätskontroll-Flag ändern) , wissen, welchen Autor jede Änderung vorgenommen hat, wissen Sie, wann der Autor die Änderung vorgenommen hat, und (auf Anfrage) die ursprünglichen Daten vor der Änderung sehen zu können. Daher sind diese Datensätze fürDOIS. weil sieDOIAnforderung, dass der Datensatz nicht verändert wird, außer durch Aggregation. In der Regel sind nahe Echtzeit-Datensätze nicht fürDOIs, weil die Daten oft rückwirkend geändert werden (z.B. für QA/QC Zwecke) .  

Sobald Daten in einem EDDTableFromHtpGet-Datensatz sind, kann jeder Benutzer Daten in der gleichen Weise anfordern, dass er Daten von einem anderen EDDTable-Datensatz anfordert.  

Experimentell: Sei vorsichtig

Da dieses System neu ist und verlorene Umweltdaten nicht benötigt werden können, sollten Sie EDDTableFromHttpGet als Experimental behandeln. Wenn Sie von einem anderen System wechseln, führen Sie bitte das alte System und das neue System parallel, bis Sie zuversichtlich sind, dass das neue System gut funktioniert (Wochen oder Monate, nicht nur Stunden oder Tage) . In allen Fällen stellen Sie sicher, dass Ihr System separat die .insert und .delete URLs archiviert, die an den EDDTableFromHtpGet-Datensatz gesendet werden. (auch wenn nur in den Apache- und/oder Tomcat-Logs) zumindest für eine Weile. Und in allen Fällen stellen Sie sicher, dass die von Ihrem EDDTableFromHtpGet-Datensatz erstellten Datendateien routinemäßig auf externe Datenspeicher gesichert werden. (Anmerkung:rsync. kann die von EDDTableFromHtpGet erstellten Datendateien sehr effizient sichern.)
 

.insert und .delete

Für jeden Datensatz inERDDAP™, wenn Sie eine Anfrage sendenERDDAP™für eine Untermenge der Daten in einem Datensatz geben Sie den Dateityp an, den Sie für die Antwort wünschen, z.B. .csv,.htmlTable,.nc,.json. EDDTableFromHtp Erweitern Sie dieses System, um zwei zusätzliche "Dateitypen" zu unterstützen, die einfügen können (oder ändern) oder Daten im Datensatz löschen:

  • .insert
    • Die Anfrage wird wie eine Standard-HTML-Form-Antwort formatiert, mit Schlüssel=Wert-Paare, getrennt durch '&'. Zum Beispiel 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
      sagtERDDAP™die Daten fürstationID= 46088 für die angegebene Zeit.
    • Der Autor dieser Änderung ist JohnSmith und der Schlüssel ist someKey1.
    • Die URL muss gültige Werte enthalten (nicht fehlende Werte) für allehttpErforderliche Optionen
    • Wenn die Werte derhttpErforderlich Variablen in der Anfrage (z.B.,stationIDund Zeit) die Werte in einer Zeile bereits im Datensatz übereinstimmen, die neuen Werte überschreiben die alten Werte effektiv (obwohl die alten Werte noch zugänglich sind, wenn der Benutzer Daten von einem vorherigen anfordertVersiondes Datensatzes) .
    • Die .insert URL darf niemals mit &timestamp= (ERDDAP™erzeugt diesen Wert) oder &command= (die von .insert angegeben wird (der Befehl = 0) oder (das Kommando= 1) ) .
    • Wenn die .insert-URL keine Werte für andere Spalten angibt, die sich im Datensatz befinden, werden diese als native fehlende Werte angenommen. (MAX\_VALUE für ganze Datentypen, NaN für Schwimmer und Doppel, und "" für Streicher) .  
    • .delete
      • Die Anfrage wird wie eine Standard-HTML-Form-Antwort formatiert, mit Schlüssel=Wert-Paare, getrennt durch '&'. Zum Beispiel https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
        sagtERDDAP™um die Daten zu löschenstationID= 46088 zum angegebenen Zeitpunkt.
      • Der Autor dieser Änderung ist JohnSmith und der Schlüssel ist someKey1.
      • Die URL muss diehttpErforderliche Optionenauf Anfrage (z.B.,stationIDund Zeit) . Wenn diese Werte den Werten in einer Zeile bereits im Datensatz entsprechen (die sie normalerweise) , die alten Werte werden effektiv gelöscht (obwohl die alten Werte noch zugänglich sind, wenn ein Benutzer Daten von einem vorherigen anfordertVersiondes Datensatzes) .
      • Es ist nicht erforderlich, Werte für Nicht-HttpGetRequiredVariables, außer Autor, anzugeben, die zur Authentifizierung der Anfrage erforderlich sind.  

Details:

  • .insert und .delete Anfragen werden wie Standard-HTML-Form-Antworte formatiert, mit Schlüssel=Wert-Paare, getrennt durch '&'. Die Werte müssenProzent kodiert. So müssen Sie spezielle Zeichen in das Formular %HH kodieren, wobei HH der 2stellige hexadezimale Wert des Zeichens ist. Normalerweise müssen Sie nur ein paar der Pünktlichkeitszeichen umwandeln: % in %25, & in %26, " in %22,<in %3C, = in %3D, > in %3E, + in %2B,|in %7C,\[in %5B,\]in %5D, Raum in %20, und alle Zeichen über #127 in ihr UTF-8-Formular umwandeln und dann prozentual jeden Byte des UTF-8-Formulars in das %HH-Format kodieren (einen Programmierer um Hilfe bitten) .
  • .insert und .delete Anfragen müssen diehttpErforderliche Optionen, z.stationIDund Zeit. Bei .insert-Anfragen werden als fehlende Werte Variablen angenommen, die in der Anfrage nicht angegeben sind. (MAX\_VALUE für ganzzahlige Variablen, NaN für Schwimmer und Doppelvariablen und eine leere String für Streichvariablen) . Für .delete Anfragen, Werte für nicht-HttpGetErforderlich Variablen (außer Autor, der erforderlich ist) werden ignoriert.
  • .insert und .delete Anfragen müssen den Namen des Autors und den Schlüssel des Autors über einen Parameter in der Form auto= Autor: als letzter Parameter in der Anfrage. Letztes Ersuchen stellt sicher, dass die gesamte Anfrage eingegangen istERDDAP. Nur der Autor (nicht der Schlüssel) wird in der Datendatei gespeichert. Sie müssen die Liste der erlaubt Autor: 's über das globale AttributhttpGetKeys
  • .insert und .delete Parameter können skalar sein (nur) Werte oder Arrays jeder Länge in der Form\[Wert1, Wert2, Wert3,..., WertN\]. Für eine bestimmte Anforderung müssen alle Variablen mit Arrays Arrays mit der gleichen Anzahl von Werten aufweisen (sonst ist es ein Fehler) . Wenn eine Anforderung Skalar- und Array-Werte hat, werden die Skalarwerte repliziert, um Arrays mit der gleichen Länge wie die angegebenen Arrays zu werden, z.B. &stationID= 46088 könnte als & behandelt werdenstationID=\[46088,46088,46088\]. Arrays sind der Schlüssel zuhoher Durchsatz. Ohne Arrays wird es schwierig sein, .insert oder .delete mehr als 8 Datenzeilen pro Sekunde von einem entfernten Autor (wegen der ganzen Oberleitung des Netzes) . Mit Arrays wird es einfach sein, .insert oder .delete mehr als 1000 Datenzeilen pro Sekunde von einem entfernten Sensor.
  • .insert und .delete akzeptieren (ohne Fehlermeldung) schwimmende Punktzahlen, wenn ganze Zahlen erwartet werden. In diesen Fällen rundet der Datensatz die Werte auf ganze Zahlen.
  • .insert und .delete akzeptieren (ohne Fehlermeldung) ganzzahlige und schwimmende Punktzahlen, die außerhalb des Datentyps der Variablen liegen. In diesen Fällen speichert der Datensatz die Werte alsERDDAP"Native fehlende Werte für diesen Datentyp (MAX\_VALUE für ganze Typen und NaN für Schwimmer und Doppel) .  

Antwort

Wenn die .insert oder .delete URL erfolgreich ist, wird der HTTP-Antwortcode 200 sein. (Okay.) und die Antwort wird Text mit.jsonObjekt, z.B.

    {
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-11-05T22:12:19.517Z",
"numericTimestamp":1.541455939517+E9
}

Beachten Sie, dass die Zeitstempel Millisekundengenauigkeit haben.

Wenn die .insert oder .delete URL ausfällt, erhalten Sie einen HTTP-Antwortcode außer 200 (Okay.) , z.B. Fehler 403 Verbieten Sie, wenn Sie einen falschen Autor\_key Wert einreichen.ERDDAP™sendet den HTTP-Antwortcode (nicht, z.B., a.jsonformatiert Fehler) weil so die Dinge im Internet gemacht werden und weil Fehler überall im System auftreten können (z.B. im Netzwerk, das einen HTTP-Fehler zurückgibt) . Wenn der Fehler ausERDDAP™, die Antwort kann einen Text enthalten (nicht.json) mit einer ausführlicheren Erklärung, was schief ging, aber der HTTP-Antwortcode (200=Okay, alles andere ist Ärger) ist der richtige Weg, um zu überprüfen, ob die .insert oder .delete erfolgreich ist. Wenn die Überprüfung des HTTP-Antwort-Codes nicht möglich ist oder unbequem ist, suchen Sie nach "Status":"erfolg" im Antworttext, der ein verlässlicher Hinweis auf Erfolg sein sollte.

Logfiles

Wenn EDDTableFromHttpGet .insert und .delete Befehle erhält, wird die Information einfach in einer Reihe von Logdateien an die betreffende Datei angehängt, von denen jede eine Tabelle ist, die in einerJSON Zeilen CSV-Datei. Wenn ein Benutzer eine Datenanforderung stellt,ERDDAP™schnell die entsprechenden Protokolldateien liest, die Änderungen des Datensatzes in der von ihnen erstellten Reihenfolge anwendet und dann die Anfrage über die Einschränkungen des Benutzers wie jede andere filtertERDDAP™Datenanforderung. Die Partitionierung der Daten in verschiedene Log-Dateien, die Speicherung von verschiedenen Informationen (z.B. der Zeitstempel des Befehls, und ob der Befehl .insert oder .delete war) , und verschiedene Aspekte der Einrichtung des Datensatzes, alle ermöglichen,ERDDAPDaten von diesem Datensatz sehr schnell und sehr effizient speichern und abrufen.  

Sicherheit und Autor

Jeder .insert- und .delete-Befehl muss &author= Autor: als letzter Parameter, in dem Autor\_key aus der Kennung des Autors zusammengesetzt ist (Sie wählten: Name, Initialen, Pseudonym, Nummer) , einen Unterstrich und einen geheimen Schlüssel. DieERDDAP™Administrator arbeitet mit Autoren zusammen, um die Liste der gültigen Autor\_key-Werte zu erstellen, die jederzeit geändert werden können. Wenn EDDTableFromHtpGet einen .insert oder .delete Befehl erhält, stellt es sicher, dass der AutorID\_key der letzte Parameter ist und gültig ist. Weil es der letzte Parameter ist, gibt es an, dass die gesamte Befehlszeile erreicht istERDDAP™und wurde nicht gekürzt. Der geheime Schlüssel sorgt dafür, dass nur bestimmte Autoren Daten in den Datensatz einfügen oder löschen können.ERDDAP™dann extrahiert die AutorID und speichert das in der Autorvariable, so dass jeder sehen kann, wer für eine bestimmte Änderung des Datensatzes verantwortlich war. .insert und .delete Befehle können nur überhttps: (Sicherheit) ERDDAP™URLs. Dadurch wird sichergestellt, dass die übertragenen Informationen während des Transports geheim gehalten werden.  

Zeitstempel

Im Rahmen des Log-Systems fügt EDDTableFromHtpGet einen Zeitstempel hinzu (die Zeit, dieERDDAPdie Anfrage erhalten) zu jedem Befehl, dass es in den Log-Dateien speichert. WeilERDDAP™generiert den Zeitstempel, nicht die Autoren, es spielt keine Rolle, wenn verschiedene Autoren Änderungen von Computern mit Uhren auf etwas unterschiedliche Zeiten eingestellt machen. Der Zeitstempel gibt zuverlässig an, wann die Änderung an den Datensatz vorgenommen wurde.  

POST

  • "Was ist mit HTTP POST?"
    HTTPPOST die bessere Alternative (verglichen mitHTTP GET) zum Senden von Informationen von einem Client an einen HTTP-Server. Wenn Sie können, oder wenn Sie wirklich die Sicherheit verbessern möchten, verwenden Sie POST anstelle von GET, um die Informationen anERDDAP. POST ist sicherer, weil: mit GET undhttps, die URL wird sicher übertragen, aber die gesamte URL (einschließlich der Parameter, einschließlich des Autors\_key) wird in den Apache geschrieben, Tomcat undERDDAP™Log-Dateien, wo jemand sie lesen konnte, wenn die Dateien nicht richtig gesichert sind. Mit POST werden die Parameter sicher übertragen und nicht in die Protokolldateien geschrieben. POST ist ein wenig schwieriger für Kunden zu arbeiten und wird nicht so weit von Client-Software unterstützt, aber Programmiersprachen unterstützen es. Der Inhalt, den Sie über GET oder POST an den Datensatz senden, wird gleich sein, einfach anders formatiert.  

httpErforderlich Variables Globales Attribut

Ein wesentlicher Teil dessen, was diese ganze Systemarbeit macht, ist das notwendige globale AttributhttpErforderlich Variablen, die eine Komma getrennte Liste derdataVariableQuellnamen, die eine Reihe von Daten eindeutig identifizieren. Dies sollte möglichst minimal sein und fast immer die Zeitvariable beinhalten. Zum Beispiel sind hier die empfohlenenhttpErforderlich Variablen für jede derCF Diskrete Sampling Geometrien (DSG) (Natürlich können die ID-Namen in Ihrem Datensatz unterschiedlich sein.) :

  • Für die TimeSerie:stationID, Zeit

  • Für Trajektorie: trajectoryID, Zeit

  • Für Profil: Zeit (vorausgesetzt Zeit ist das Profil\_id) , Tiefe

  • Für die Zeitreihen Profil:stationID, Zeit (vorausgesetzt Zeit ist das Profil\_id) , Tiefe

  • Für Trajektorie Profil: trajectoryID, Zeit (vorausgesetzt Zeit ist das Profil\_id) , Tiefe

TimeSerie als Beispiel: Bei einem .insert Befehl, derstationID=46088 und Zeit=2016-06-23T19:53:00Z (und andere Werte für andere Variablen) :

  • Gibt es für diese Station keine vorhandenen Daten und diese Zeit, so wird der Effekt die Daten zum Datensatz hinzufügen.
  • Gibt es für diese Station bereits vorhandene Daten und diese Zeit, so wird der Effekt sein, die bestehende Datenreihe durch diese neuen Daten zu ersetzen. (Natürlich, seitERDDAP™hält das Protokoll von jedem Befehl, den er erhält, die alten Daten sind noch im Protokoll. Wenn ein Benutzer vor dieser Änderung Daten von einer Version des Datensatzes anfordert, werden die älteren Daten angezeigt.)
     

httpGetDirectoryStructure

  • httpGetDirectory Struktur Globales Attribut und Daten (Protokoll) Dateinamen
    Ein Teil dessen, was dieses ganze System effizient funktioniert, ist, dassERDDAP™erstellt einen Datensatz (Protokoll) Dateien, jeweils mit einem anderen Stück des Datensatzes. Wenn diese gut eingerichtet sind,ERDDAP™kann schnell auf die meisten Datenanforderungen reagieren. Diese Einrichtung wird durch diehttpGetDirectoryStructure Global Attribut, das ist ein String, das wie ein relativer Dateiname aussieht, z.B. "stationID/10years", ist aber eigentlich eine Spezifikation für die Verzeichnisstruktur. Die Teile davon geben an, wie Verzeichnisse und Dateinamen für die Daten (Protokoll) Dateien werden erstellt.

    • Wenn ein Teil eine ganze Zahl ist (>=============================================================================================================================================================================================================================================================== 1) plus eine ZeitPeriod (Millisekunden, Sekunde, Minute, Stunde, Datum, Monat, Jahr oder ihre Pluralen) , z.B. 10 Jahre, dann nimmt der EDDTableFromHtpGet-Datensatz den Zeitwert für die Datenzeile (z.B., 2016-06-23T19:53:00Z) , Berechnung der auf diese Genauigkeit verkürzten Zeit (z.B., 2010) , und machen Sie einen Ordner oder DateiName daraus.

Das Ziel ist es, ein ziemlich großes Stück Daten in jede Datei zu bekommen, aber weit weniger als 2GB.

  • Ansonsten muss der Teil der Spezifikation eindataVariable'sourceName, z.stationID. In diesem Fall macht EDDTableFromHtpGet einen Ordner oder Dateinamen aus dem Wert dieser Variablen für die neue Datenzeile (z.B. "46088") .

Weil die Befehlsdaten .insert und .delete in bestimmten Daten gespeichert werden (Protokoll) Dateien, EDDTableFromHtpGet muss in der Regel nur ein oder ein paar Daten öffnen (Protokoll) Dateien, um die Daten für eine bestimmte Benutzeranforderung zu finden. Und weil jede Daten (Protokoll) Datei hat alle relevanten Informationen für sein Stück des Datensatzes, es ist schnell und einfach für EDDTableFromHttpGet eine bestimmte Version zu machen (oder die aktuelle Version) des Datensatzes für die Daten in dieser Datei (und muss nicht die angeforderte Version des gesamten Datensatzes generieren) .

Allgemeine Leitlinien basieren auf der Menge und Häufigkeit der Daten. Wenn wir 100 Bytes pro Datenzeile annehmen, dann ...

    | 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* |

Zum Beispiel, wenn die VerzeichnisstrukturstationID/2monate und Sie setzen Daten von zwei Stationen (46088 und 46155) mit Zeitwerten von Dezember 2015 bis Mai 2016, EDDTableFromHttp Get wird Verzeichnisse mit 46088 und 46155 erstellen und Dateien in jedem benannten 2015-11 erstellen.jsonL, 2016-01.jsonL, 2016-03.jsonL, 2016-05.jsonL (je 2 Monate Daten für die betreffende Station) . Wenn Sie .insert oder .delete verwenden, um die Daten zu ändern oder zu löschen, zum Beispiel Station 46088 bei 2016-04-05T14:45:00Z, EDDTableFromHttp Holen Sie sich diesen Befehl an 46088/2016-03.jsonl die relevanten Daten (Protokoll) Datei. Und klar ist es, in Zukunft jederzeit Daten für andere Stationen hinzuzufügen, da der Datensatz einfach zusätzliche Verzeichnisse erstellen wird, die benötigt werden, um die Daten von den neuen Stationen zu halten.

httpGetKeys

Jedes EDDTable VonHtp Erhalten Sie Datensatz muss ein globales AttributhttpGetKeys, die die Liste der erlaubten Autoren und ihre geheimen Schlüssel als eine komparierte Liste von Autor: , z. JohnSmith\_someKey1, HOBOLogger\_someKey2, QCScript59\_someKey3 .

  • autor\_key's sind case-sensitive und müssen vollständig ASCII Zeichen sein (#33 - #126, und ohne Komma, " oder " Zeichen
  • Schlüssel sind wie Passwörter, so dass sie >=8 Zeichen, schwer zu erraten, und ohne interne Wörterbuch Wörter. Sie sollten sie behandeln, wie Sie Passwörter behandeln -- halten sie privat.
  • Das erste '\'-Zeichen trennt den Autor vom Schlüssel, so dass der Autorname kein '\'-Zeichen enthalten kann (aber ein Schlüssel kann) .
  • Jeder Autor kann einen oder mehrere Autor\_keys haben, z.B. JohnSmith\_some Schlüssel 1, JohnSmith Schlüssel 7 usw.
  • Sie können den Wert dieses Attributs jederzeit ändern. Die Änderungen wirken beim nächsten Laden des Datensatzes.
  • Diese Informationen werden von den GlobalAttributes des Datensatzes entfernt, bevor sie veröffentlicht werden.
  • Jede Anforderung an den Datensatz zum Einfügen oder Löschen von Daten muss ein &author= Autor: Parameter. nach Überprüfung der Gültigkeit des Schlüssels,ERDDAP™speichert nur den Autor (nicht der Schlüssel) in der Datendatei.

Einrichten

Hier sind die empfohlenen Schritte, um einen EDDTableFromHttpGet Datensatz einzurichten:

  1. Machen Sie das Hauptverzeichnis, um die Daten des Datensatzes zu halten. In diesem Beispiel verwenden wir /data/testGet/ . Der Benutzer läuft GenerateDatasetsXml und der Benutzer läuftERDDAP™muss beide den Zugriff auf dieses Verzeichnis haben.  

  2. Verwenden Sie einen Texteditor, um eine Probe zu erstellen.jsonl CSV-Datei mit der Erweiterung.jsonIn diesem Verzeichnis. Der Name ist nicht wichtig. Zum Beispiel, Sie könnten es Probe nennen.jsonL Machen Sie eine 2 Linie.jsonl CSV-Datei mit Spaltennamen auf der ersten Zeile und Dummy/typischen Werten (der korrekten Datenart) auf der zweiten Linie. Hier ist eine Probendatei, die für eine Sammlung vonfeatureType=TimeSerie Daten, die Luft und Wassertemperatur gemessen. \[FürfeatureType=Trajektory, du könntest ändernstationIDum trajectoryID zu sein.\]
    \[FürfeatureType= Profil, du könntest ändernstationIDprofilID sein und eine Tiefenvariable hinzufügen.\]

    \["stationID","time", "Latitude", "longitude", "airTemp", "waterTemp", "Timestamp", "Autor", "Befehl"\] \["myStation", "2018-06-25T17:00Z", 0.0, 0.0, 0.0, 0.0, 0.0, "SomeBody", 0\]

Anmerkung:

  • Die tatsächlichen Datenwerte sind nicht wichtig, weil Sie diese Datei schließlich löschen, aber sie sollten vom richtigen Datentyp sein. Insbesondere sollte die Zeitvariable das gleiche Format verwenden, das die tatsächlichen Daten aus der Quelle verwenden.
  • Für alle Variablen, diesourceNamewird gleich seindestinationName, so verwenden Sie jetzt die richtigen/finalen Variablennamen, einschließlich Zeit, Breite, Länge und manchmal Tiefe oder Höhe, wenn Variablen mit diesen Informationen enthalten werden.
  • Es wird fast immer eine Variable namens Zeit geben, die die Zeit der Beobachtung aufzeichnet. Es kann sein dataTyp String mitEinheiten geeignet für Stringzeiten (z.B.,yyyy-MM-dd'T'HH:mm:ss.SSSZ) oder Daten Typ Doppel mitEinheiten geeignet für numerische Zeiten (z.B., Sekunden seit 1970-01-01T00:00Z, oder eine andere Basiszeit) .
  • Drei der Spalten (in der Regel die letzten drei) muss Zeitstempel, Autor, Befehl sein.
  • Die Zeitstempelspalte wird von EDDTableFromHttpGet verwendet, um einen Zeitstempel hinzuzufügen, der anzeigt, wann er eine bestimmte Datenzeile in die Datendatei eingefügt hat. Es wird DatenTyp Doppel-und Einheiten Sekunden seit 1970-01-01T00:00Z.
  • Die Autorenspalte mit dataType String wird verwendet, um festzustellen, welche autorisierten Autoren die Daten dieser Zeile zur Verfügung gestellt haben. Autoren werden von derhttpGetKeys globales Attribut. Obwohl die Schlüssel als Autor: und sind in der "Request" URL in diesem Formular, nur der Autor Teil wird in der Datendatei gespeichert.
  • Die Befehlsspalte mit dataTyp Byte gibt an, ob die Daten auf dieser Zeile ein Einfügen sind (0)) oder eine Löschung (1) .  
  1. Generieren Sie Datasets Xml und sagen es

    1. Der Datensatz-Typ ist EDDTableFromHtpGet
    2. Das Verzeichnis ist (für dieses Beispiel) /Daten/Test Steigt ein
    3. Die Stichprobendatei ist (für dieses Beispiel) /data/testGet/startup.jsonL
    4. DiehttpErforderlich Variablen sind (für dieses Beispiel) stationID, Zeit Siehe die BeschreibunghttpErforderliche Optionenunten.
    5. Wenn die Daten alle 5 Minuten erhoben werden,httpGetDirectoryStructure für dieses Beispiel iststationID/2monate . Siehe die BeschreibunghttpGetDirectoryStructureunten.
    6. DiehttpGetKeys

Ausgabe hinzufügen (das Stückdatasets.xmlfür den Datensatz) bisdatasets.xml.   4. Bearbeiten Sie diedatasets.xmlchunk für diesen Datensatz, um es richtig und vollständig zu machen. Bemerkenswert, ersetzen alle?? mit korrektem Inhalt.   5. Für<DateiTableInMemory> Einstellung:

  • Legen Sie dies auf true, wenn der Datensatz in der Regel häufig .insert und/oder .delete Anfragen bekommen wird. (z.B. häufiger als einmal alle 10 Sekunden) . Dies hilft EDDTableFromHtpGet schneller auf .insert und/oder .delete Anfragen reagieren. Wenn Sie dies auf true setzen, wird EDDTableFromHttpGet die Datei noch speichernTabelle und verwandte Informationen auf Festplatte periodisch (nach Bedarf etwa alle 5 Sekunden) .
  • Legen Sie das auf false (Der Standard) wenn der Datensatz in der Regel selten .insert und/oder .delete Anfragen erhalten wird (z.B. weniger als einmal alle 10 Sekunden) .  
  1. Anmerkung: Es ist möglich,<cacheFromUrl> und zugehörige Einstellungen indatasets.xmlfür EDDTable VonHtp Erhalten Sie Datasets als Möglichkeit, eine lokale Kopie eines entfernten EDDTableFromHtpGet-Datensatzes auf einem anderen zu erstellen und zu pflegenERDDAP. Allerdings wird in diesem Fall dieser lokale Datensatz alle .insert und .delete Anfragen ablehnen.

Verwendung von EDDTable VonHttpGet Datasets

  • Autoren können "Requests" machen, dieDaten aus dem Datensatz einfügen oder löschen.  
  • Nachdem echte Daten in den Datensatz eingefügt wurden, können und sollten Sie die Original-Beispieldatendatei löschen.  
  • Benutzer können Daten aus dem Datensatz anfordern, wie sie für jeden anderen EDDTable-Datensatz inERDDAP. Wenn die Anfrage keine Einschränkung auf der Zeitstempelspalte enthält, erhält die Anfrage Daten von der aktuellen Version des Datensatzes (die Protokolldatei nach der Bearbeitung aller Einfügen- und Löschbefehle und Neusortierung durch diehttpErforderliche Optionen) .  
  • Benutzer können auch Anfragen stellen, die für EDDTableFromHttpGet-Datensätze spezifisch sind:
    • Wenn die Anfrage eine<oder<= Beschränkung der Zeitstempelsäule, dannERDDAP™verarbeitet Zeilen der Protokolldatei bis zum angegebenen Zeitstempel. In der Tat löscht dies vorübergehend alle Änderungen, die seit diesem Zeitstempelwert an den Datensatz vorgenommen wurden. Für weitere Informationen sieheAusführung.
    • Wenn die Anfrage eine >, >= oder = Beschränkung der Zeitstempelspalte enthält, z.B.<=0, dannERDDAP™die Daten aus den Datendateien zurückgibt, ohne die Einfügen- und Löschbefehle zu bearbeiten.
  • In Zukunft stellen wir fest, dass Werkzeuge gebaut werden (bei uns? von dir?) für die Arbeit mit diesen Datensätzen. Beispielsweise könnte es ein Skript geben, das die Roh-Log-Dateien liest, eine andere Kalibrierungsgleichung anwendet und einen anderen Datensatz mit diesen abgeleiteten Informationen erzeugt/ aktualisiert. Beachten Sie, dass das Skript die ursprünglichen Daten über eine Anfrage erhalten kann,ERDDAP™ (das die Daten im Dateiformat erhält, die am einfachsten für das Skript ist, mit) und den neuen Datensatz über .insert "Requests" generieren/aktualisierenERDDAP. Das Skript benötigt keinen direkten Zugriff auf die Datendateien; es kann auf dem Computer eines autorisierten Autors sein.  

Detaillierte Informationen zu EDDTableFromHtpGet

Die Themen sind:

Hier die detaillierten Informationen:

Nicht das Setup ändern!

Sobald der Datensatz erstellt wurde und Sie Daten dazu hinzugefügt haben:

  • DON'T hinzufügen oder entfernendataVariableS.
  • DON'T ändern diesourceNameoderdestinationNamevondataVariableS.
  • DON'T die Daten ändern Art derdataVariableS. Aber Sie können diedataVariableMetadaten.
  • DON'T ändern diehttpErforderlich Variables Global Attribut.
  • DON'T ändern diehttpGetDirectoryStructure globales Attribut.

Wenn Sie eines dieser Dinge ändern müssen, machen Sie einen neuen Datensatz und übertragen Sie alle Daten auf den neuen Datensatz.  

AUSBILDUNG

In der Informatik sind die vier Grundbefehle für die Arbeit mit einem DatensatzKREATE, READ, UPDATE, DELETE (AUSBILDUNG) . SQL, die Sprache für die Arbeit mit relationalen Datenbanken, hat das Äquivalent in INSERT, SELECT, UPDATE und DELETE. In EDDTableFromHtpGet,

  • .insert ist eine Kombination aus CREATE und UPDATE.
  • .delete ist DELETE.
  • Das reguläre System zur Anforderung von Teilmengen von Daten ist READ.

So unterstützt EDDTableFromHtpGet alle grundlegenden Befehle für die Arbeit mit einem Datensatz.  

  • .insert oder .delete Anfragen ohne Fehler werden HTTP-Statuscode=200 und ein JSON-Objekt zurückgeben, z.
    {
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-03-26T15:34:05.552Z",
"numericTimestamp":1.522078445552E9
}

Die beiden Zeitstempelwerte beziehen sich auf das gleiche Millisekunden, das ist die Millisekunde, die in der Zeitstempelvariable für die Zeilen von Daten gespeichert wird, die eingefügt oder gelöscht wurden.ERDDAP™wird den Namen und die Formatierung dieser Schlüssel-Wert-Paare in Zukunft nicht ändern.ERDDAP™kann dem JSON-Objekt in Zukunft zusätzliche Schlüsselwertpaare hinzufügen.  

InvalidRequests

Invalid .insert oder .delete Anfragen werden einen anderen HTTP-Fehlerstatuscode als status=200 zurückgeben und keine Änderung an den Datensatz vorgenommen. Dazu gehören Anfragen mit falschen Autorinformationen, falsche Variablennamen, verschiedene Arraylängen für verschiedene Variablen, fehlende Variablen, fehlende Variablenwerte usw. Wenn die Anfrage mehr als eine Datendatei beinhaltet, ist es möglich, dass ein Teil der Anfrage erfolgreich ist und ein Teil ausfällt. Dies sollte jedoch kein Problem sein, wenn der Sensor, der die Anfrage sendet, einen Fehler als kompletten Ausfall behandelt. Zum Beispiel, wenn Sie sagen,ERDDAP™zum Einsatz (oder löschen) die gleichen Daten zweimal in einer Zeile, das Schlimmste ist, dass diese Informationen zweimal gespeichert werden, schließen Sie zusammen in der Protokolldatei. Es ist schwer zu sehen, wie das Probleme verursachen könnte.  

HttpGe-Geschwindigkeit

Für .insert oder .delete Anfragen (nicht zählenhttpKopf) , ballpark die Geschwindigkeit von .insert oder .delete sind 1ms pro .insert mit 1 Datenzeile 2ms pro .insert mit 10 Datenzeilen in Arrays (\[\])
3ms pro .insert mit 100 Datenzeilen in Arrays (\[\])
13ms pro .insert mit 1000 Datenzeilen in Arrays (\[\])
Klare Arrays sind der Schlüssel zuhoher Durchsatz. Ohne Arrays wird es schwierig sein, .insert oder .delete mehr als 8 Datenzeilen pro Sekunde von einem entfernten Autor (wegen der ganzen Oberleitung des Netzes) . Mit Arrays wird es einfach sein, .insert oder .delete mehr als 1000 Datenzeilen pro Sekunde von einem entfernten Sensor.

Mit sehr großen Datenmengen pro Anfrage schlagen Sie Tomcats Grenze auf die maximale Abfragelänge (Standard ist 8KB?) , aber das kann durch die Bearbeitung der maxHtpHeaderSize Einstellung in Ihrem erhöht werden Tomcat /conf/server.xml's HTTP/1.1 Verbindungseingang.

WannERDDAP™liest die JSON Lines CSV-Daten (Protokoll) Dateien, gibt es eine kleine Zeitstrafe im Vergleich zum Lesen binärer Datendateien. Wir fühlten, dass diese Zeit Strafe beim Lesen war ein angemessener Preis für die Geschwindigkeit und Robustheit des Systems beim Schreiben von Daten zu zahlen (die von besonderer Bedeutung ist) .

SSD

Für größere Geschwindigkeit,VerwendungSolid State Drive (SSD) die Daten speichern. Sie haben eine viel schnellere Zugriffszeit (<0,1ms) als Festplattenlaufwerke (3 - 12 ms) . Sie haben auch eine schnellere Datenübertragungsrate (200 - 2500 MB/s) als Festplattenlaufwerk (~200 MB/s) . Ihre Kosten sind in den letzten Jahren erheblich zurückgegangen. Obwohl die frühen SSD Probleme hatten, nachdem eine große Anzahl von Schriften zu einem bestimmten Block, dieses Problem ist jetzt stark reduziert. Wenn Sie nur die SSD verwenden, um die Daten einmal zu schreiben, dann lesen Sie sie oft, sogar eine verbraucherfähige SSD (die erheblich weniger teuer ist als eine unternehmenseigene SSD) sollte lange dauern.

Robust

Wir haben versucht, dieses System so einfach zu bedienen und so robust wie möglich.

  • Das System ist so ausgelegt, dass es mehrere Fäden aufweist. (z.B. der Sensor, ein automatisiertes QC-Skript und ein Mensch) gleichzeitig an demselben Datensatz und sogar der gleichen Datei arbeiten. Ein Großteil davon wird durch Verwendung eines Log-Datei-Ansatzes zur Speicherung der Daten und durch Verwendung eines sehr einfachen Dateityps ermöglicht,JSON Zeilen CSV-Dateien, die Daten zu speichern.
  • Ein weiterer großer Vorteil für JSON Lines CSV ist, dass, wenn eine Datei jemals beschädigt wird (z.B. ungültig wegen eines Fehlers auf einer Zeile) , es ist einfach, die Datei in einem Texteditor zu öffnen und das Problem zu beheben.
  • Ein weiterer Vorteil ist, wenn in einer Datei ein Fehler auf einer Zeile vorliegt, kann das System noch alle Daten auf Zeilen vor und nach der Fehlerzeile lesen. Und das System kann noch weitere .insert und .delete Informationen protokollieren.
  • Ein großer Vorteil der Verwendung von admin-accessible Standard-Dateien (verglichen mit einer relationalen Datenbank oder Cassandra oder einer anderen Software) : Es gibt keine andere Software, die aufrechterhalten werden muss und die ausgeführt werden muss, um Daten zu speichern oder abzurufen. Und es ist einfach, Standarddateien jederzeit und inkremental zu sichern, weil die Daten in Stücken sind (nach einer Weile ändert sich nur die aktuelle Datei für jede Station) . Im Gegensatz dazu braucht es erhebliche Anstrengung und System-Down-Zeit, um externe Backup-Dateien aus Datenbanken und von Cassandra zu machen.  
Systemzuverlässigkeit

Es ist vernünftig, einen Server mitERDDAP™um 99,9% zu haben -- das ist etwa 9 Stunden Ausfallzeit pro Jahr (obwohl, Sie können das in einer schlechten Nacht verwenden!) . Wenn Sie fleißig und glücklich sind, erhalten Sie 99,99% uptime (53 Minuten Ausfallzeit pro Jahr) , da nur ein paar Neustarts für Updates nehmen so viel Zeit. Sie müssten extreme Maßnahmen ergreifen (einen separaten Backup-Server, unterbrechungsfreie Stromversorgung, Backup-Klimaanlage, 24x7x365 Personal, um die Website zu überwachen, etc.) eine schlanke Chance auf 99,999% uptime (5.25 Minuten Ausfallzeit pro Jahr) . Selbst dann ist es extrem unwahrscheinlich, dass Sie 99,999% uptime erreichen (oder sogar 99,99%) weil Probleme oft außerhalb Ihrer Kontrolle sind. Zum Beispiel bieten Amazon Web Service und Google erstaunlich zuverlässige Web-Dienste, aber große Teile davon sind manchmal für Stunden nach unten.

Angesicht, jeder willERDDAP™100 % aufgebrauchen oder zumindest die "sechs neuns" (99,9999% Standzeit entspricht 32 Sekunden Ausfallzeit pro Jahr) , aber es gibt keine Möglichkeit, es zu bekommen, egal wie viel Zeit, Mühe und Geld Sie verbringen.

Aber...ERDDAP™uptime ist hier nicht das eigentliche Ziel. Ziel ist es, eine zuverlässige System Eine, die keine Daten verliert. Das ist ein lösbares Problem.

Die Lösung ist: Erstellen Sie Fehlertoleranz in die Computersoftware, die die Daten anERDDAP. Insbesondere sollte diese Software eine Warteschlange von Daten warten, um zu gehen,ERDDAP. Wenn Daten zur Warteschlange hinzugefügt werden, sollte die Software die Antwort vonERDDAP. Wenn die Antwort keine Daten enthält, die empfangen wurden. Keine Fehler., dann sollte die Software die Daten in der Warteschlange verlassen. Wenn mehr Daten generiert und der Warteschlange hinzugefügt werden, sollte die Software erneut versuchen, die Daten in der Warteschlange einzufügen. (vielleicht mit dem\[\]System) . Es wird gelingen oder scheitern. Wenn es scheitert, wird es später wieder versuchen. Wenn Sie die Software auf diese Weise zu arbeiten schreiben und wenn die Software bereit ist, einige Tage Daten wert zu löschen, haben Sie tatsächlich eine gute Chance, 100% der Daten des Sensors hochzuladen, umERDDAP. Und Sie werden es getan haben, ohne große Anstrengungen oder Kosten.

\[Hintergrund: Das haben wir nicht gedacht.So erreichen Computernetzwerke Zuverlässigkeit. Computernetze sind inhärent unzuverlässig. Wenn Sie also eine Datei von einem Computer auf einen anderen übertragen, weiß/erwartet die Sendesoftware, dass einige Pakete verloren gehen können. Wenn es keine richtige Anerkennung für ein bestimmtes Paket aus dem Empfänger bekommt, resendiert es das verlorene Paket. Mit diesem Ansatz können relativ einfache Sender- und Empfängersoftware ein zuverlässiges Dateiübertragungssystem auf einem unzuverlässigen Netzwerk aufbauen.\]

Warum JSON Lines CSV-Dateien?!

EDDTableFromHtpGet verwendetJSON Zeilen CSV-Dateien. zur Speicherung der Daten. Die Gründe sind:

  • Der Hauptgrund ist: Die Einfachheit von JSON Lines CSV-Dateien bietet eine schnelle, einfache und zuverlässige Möglichkeit, mehrere Threads in eine bestimmte Datei zu schreiben (z.B. durch Synchronisation auf dem Dateinamen) .
  • Wenn eine JSON Lines CSV-Datei jemals beschädigt wurde (z.B. ungültig wegen eines Fehlers auf einer Zeile) , EDDTableFromHtpGet konnte noch alle Daten auf allen Zeilen vor und nach der Fehlerzeile lesen. Und das .insert und .delete System könnte weiterhin neue Daten in die Datendatei hinzufügen.
  • Weil die JSON Lines CSV-Dateien ASCII-Dateien sind, wenn eine Datei jemals beschädigt wurde, wäre es einfach zu beheben (in einem Texteditor) .
  • JSON Lines CSV unterstützt Unicode Strings.
  • JSON Lines CSV unterstützt variable Längenstrings (nicht beschränkt auf eine maximale Länge) .
  • JSON Lines CSV unterstützt 64-bit ganze Zahlen (Länge) .
  • Die formale Natur und zusätzliche Syntax von JSON Lines CSV (vs Oldschool CSV) gibt zusätzliche Sicherheit, dass eine bestimmte Zeile nicht beschädigt wurde.

Wir haben zunächst versucht,.nc3 Dateien mit einer unbegrenzten Dimension. Es gab jedoch Probleme:

  • Das Hauptproblem war: Es gibt keine zuverlässige Möglichkeit, mehrere Threads zu schreiben zu einem.nc3 Datei, auch wenn die Threads zusammenwirken, indem die Texte synchronisiert.
  • Wenn.nc3 Datei wird beschädigt, das .insert und .delete System kann nicht weiterhin die Datei verwenden.
  • Weil.nc3 Dateien sind binär, wenn eine Datei beschädigt wird (die sie aufgrund des Multi-Threading-Problems tun) sie sind extrem hart oder unmöglich zu beheben. Bei der Reparatur gibt es keine Werkzeuge.
  • CF hat keine Möglichkeit, die Kodierung von Strings anzugeben, so gibt es keine offizielle Möglichkeit, Unicode zu unterstützen, z.B. die UTF-8 Kodierung. Wir versuchten, CF zu erhalten, um ein \_Encoding-Attribut zu unterstützen, konnten aber keine Fortschritte erzielen. (Unidata, auf ihren Kredit, unterstützt das \_Encoding Attribut.)
  • .nc3 Dateien unterstützen nur feste Längenstrings. Auch hier versuchten wir, CF zu bekommen undUnidatazur Unterstützung variabler Längenstrings, aber nicht in der Lage, Fortschritte zu erzielen.
  • .nc3 Dateien unterstützen keine einfache Möglichkeit, einzelne Charaktervariablen von String-Variablen zu unterscheiden. Auch hier versuchten wir, CF zu bekommen undUnidatazur Unterstützung eines Systems zur Unterscheidung dieser beiden Datentypen, aber keine Fortschritte erzielt werden konnten.
  • .nc3 Dateien unterstützen nur 8-Bit-Zeichen mit einer nicht spezifizierten Kodierung. Auch hier versuchten wir, CF zu bekommen undUnidataUnterstützung eines Systems zur Angabe der Kodierung, aber keine Fortschritte erzielt werden konnten.
  • .nc3 Dateien unterstützen nicht 64-bit ganze Zahlen (Länge) . Auch hier versuchten wir, CF zu bekommen undUnidataein System für lange zu unterstützen, aber keine Fortschritte zu erzielen.  
Ausführung

Denn EDDTable VonHtp Speichern Sie ein Protokoll aller Änderungen des Datensatzes mit dem Zeitstempel und dem Autor jeder Änderung, es kann schnell diesen Datensatz zu jedem Zeitpunkt neu erstellen. In gewisser Weise gibt es eine Version für jeden Zeitpunkt. Wenn die Datenanforderung eines Benutzers einen Zeitstempel enthält<= Strenge, z.B.<= 2016-06-23T16:32:22.128Z (oder einen beliebigen Zeitpunkt) , aber keine Einschränkung von Autor oder Befehl,ERDDAP™wird auf die Anfrage antworten, indem zunächst eine Version des Datensatzes ab diesem Zeitpunkt generiert wird. Dann,ERDDAP™die anderen Einschränkungen des Benutzers, wie bei jeder anderen Anforderung von Daten ausERDDAP. EDDTableFromHtpGet wird so eingerichtet, dass dieser Prozess auch für sehr große Datensätze sehr schnell und effizient ist.

Ebenso kann ein Benutzer herausfinden, wann der Datensatz zuletzt aktualisiert wurde, indem er ...?timestamp&timestamp=max (Zeitstempel) &distinkt ()

Und für jede Anforderung von Daten, für jede Version des Datensatzes, können Benutzer sehen, welche Autor gemacht, welche Änderungen, und wenn sie sie gemacht.

Dieses Versionssystem ermöglichtReproduzierbare Wissenschaftweil jeder jederzeit Daten von der Version des Datensatzes anfordern kann. Diese feinkörnige Versionierung ist mit jedem anderen System, das wir kennen, nicht möglich. Der zugrunde liegende Mechanismus ist sehr effizient, indem kein zusätzlicher Speicherplatz benötigt wird, und die Verarbeitung ist wirklich minimal.

Nicht jeder hat einen Bedarf an dieser Art von feinkörnigen Versionen, aber es ist außerordentlich nützlich, vielleicht notwendig, im Rahmen einer großen Datenverwaltungsorganisation (z.B. OOI, Earth Cube, Data One undNOAANZEI) wo ein Datensatz mehrere Autoren haben kann (z.B. der Sensor, ein automatisiertes QC-Skript und ein menschlicher Editor) .

\[Geschichte: Die Notwendigkeit für diese Art von Versioning kam zuerst für mich (Bob.) beim Lesen und Besprechen von OOI im Jahr 2008. Zur Zeit hatte OOI ein umständliches, langsames, ineffizientes System für die Versionierung auf Git. Git ist toll für das, was es entworfen wurde, aber nicht das. Im Jahr 2008 habe ich bei einer OOI-Diskussion ein umfangreiches, effizientes Alternativ-zu-OOI-System für das Datenmanagement entwickelt, darunter viele der Funktionen, die ich hinzugefügt habe.ERDDAP™seitdem, und auch dieses Versioning-System. Zu dieser Zeit und seit, OOI war verpflichtet, ihre Versioning-System und nicht interessiert an Alternativen. 2016 fielen andere Aspekte dieses Plans auf und ich begann, ihn umzusetzen. Weil es viele Unterbrechungen gab, an anderen Projekten zu arbeiten, war ich erst 2018 fertig. Selbst jetzt weiß ich kein anderes wissenschaftliches Datensystem, das einen so schnellen und einfachen Zugriff auf eine Version der Daten von jedem Zeitpunkt an bietet, um häufig Datenmengen zu ändern. Einfache Dateisysteme bieten das nicht an. Beziehungsdatenbanken nicht. Cassandra nicht.\]

HTTPS setzen und löschen
  • "Was ist mit HTTPS PUT und DELETE?!"
    Hypertext Transfer Protocol (HTTP) ist die Basis des World Wide Web und der Grund, warum Webseiten-URLs mit " beginnen http://" oder " https://" . HTTPS ist HTTP mit einer zusätzlichen Sicherheitsschicht. Jeden Tag machen Browser, Skripte und Computerprogramme Milliarden von HTTP (S) GET Anfragen, um Informationen von entfernten Quellen zu erhalten. HTTP (S) auch andereVerben, insbesondere PUT (um Daten auf den Server zu drücken) und DELETE (zu DELETE-Daten vom Server) . Ja, PUT und DELETE sind die richtige Möglichkeit, Daten in einen Datensatz über HTTP einzufügen und Daten zu löschen. (S) . GET wird von jeder Software unterstützt, die mit HTTP arbeiten kann (S) . GET ist wirklich einfach zu arbeiten. Jeder weiß schon, wie man mit GET arbeitet und viele wissen, wie man POST verwendet (die in im Wesentlichen gleicher Weise wie GET eingesetzt werden kann) , so haben wir EDDTableFromHtpGet mit GET und POST arbeiten. Sehr wenige Menschen (sogar wenige Computerprogrammierer) haben je mit PUT und DELETE gearbeitet. PUT und DELETE werden in der Regel nur von Computersprachen unterstützt, so dass sie ein geschicktes Programm benötigen. PUT und DELETE sind also in der Regel ein viel mühsamerer Ansatz, da sich die Werkzeuge entwickelt haben.  
HttpGet Hinweise
  • Anmerkungen
    • NeindataVariablekann dataType=char haben. Verwenden Sie stattdessen dataType=String. Wenn Sie wirklich dataType=char benötigen, E-Mail Chris. John bei noaa.gov.  
Danke.
  • Dank CHORDS für die Grundidee.
    Die Grundidee für EDDTableFromHtpGet (d.h. mit einemHTTP GETanfordern, Daten zu einem Datensatz hinzuzufügen) ist von UCAR's (NCAR's?) Cloud-Hosted Echtzeit-Datendienste (CHORDEN) Projekt. Das Format für die Parameter in der Anfrage (wiederholt Name: Name , getrennt von) ist das gleiche Standardformat, das von HTML-Formularen auf Webseiten verwendet wird. Es ist eine einfache und brillante Idee und noch mehr, weil es so perfekt mitERDDAPDas bestehende System zum Umgang mit tabellarischen Daten. Die Idee ist offensichtlich, aber ich (Bob.) hat nicht daran gedacht. EDDTableFromHtp Nutzen Sie diese Grundidee, kombiniert mit unseren Ideen, wie man sie implementiert, um ein System inERDDAP™zum Hochladen von Daten. Die EDDTableFromHtpGet-Implementierung ist außer der Grundidee der Verwendung von GET, um Daten in das System zu schieben, völlig unterschiedlich und völlig unabhängig von CHORDS und hat verschiedene Funktionen (z.B. Logfiles, Aufschlüsselung von Daten, verschiedene Sicherheitssysteme, CRUD-Unterstützung, reproduzierbare Daten) . Unsere Exposition gegenüber CHORDS war nur ein Webinar. Wir haben ihren Code nicht angesehen oder über ihr Projekt gelesen, weil wir sofort wussten, dass wir das System anders umsetzen wollten. Aber wir sind ihnen für die Grundidee dankbar. Der vollständige Verweis auf CHORDS ist Daniels, M. D., Kerkez, B., Chandrasekar, V., Graves, S., Stamps, D. S., Martin, C., Dye, M., Gooch, R., Bartos, M., Jones, J., Keiser, K. (2014) . Cloud-Hosted Echtzeit-Datendienste für die Geowissenschaften (CHORDEN) Software. UCAR/NCAR -- Erdbeobachtungslabor. https://doi.org/10.5065/d6v1236q
     

EDDTableFromHyraxDateien

EDDTableFromHyraxDateien (depretiert) aggregiert Datendateien mit mehreren Variablen, jeweils mit einer oder mehreren gemeinsamen Abmessungen (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) , und serviert vonHyrax OPeNDAPServer.

  • Dieser Datensatztyp ist DEPRECATE . Die neuere und allgemeinere Lösung ist dieCache AusUrl Option für EDDTable VonFiles (oder eine Variante) , die eine lokale Kopie der Remote-Dateien macht und die Daten aus den lokalen Dateien bedient. Die<ccheFromUrl> Option kann mit jeder Art von tabellarischen Datendatei verwendet werden. **
    Wenn Sie diese Arbeit aus irgendeinem Grund nicht machen können, mailen Sie Chris. John bei noaa.gov. Wenn vor 2020 keine Beschwerden vorliegen, kann dieser Datensatztyp entfernt werden. **
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.
  • In den meisten Fällen hat jede Datei mehrere Werte für die linkeste (erste) Dimension, zum Beispiel Zeit.
  • Die Dateien oft (aber muss nicht) einen einzigen Wert für die anderen Abmessungen haben (zum Beispiel Höhe (oder Tiefe) , Breite, Länge) .
  • Die Dateien können Zeichenvariablen mit einer zusätzlichen Dimension aufweisen (zum Beispiel nCharacters) .
  • HyraxServer können durch die "/dods-bin/nph-dods/" oder "/opendap/" in der URL identifiziert werden.
  • Diese Klasse Bildschirm-Scrapes dieHyraxWeb-Seiten mit den Listen von Dateien in jedem Verzeichnis. Deshalb ist es sehr spezifisch für das aktuelle Format vonHyraxWebseiten. Wir werden versuchen, sich anzupassenERDDAP™schnell, wenn/wenn zukünftige VersionenHyraxändern, wie die Dateien aufgelistet sind.
  • Die<fileDir> Einstellung wird ignoriert. Da diese Klasse herunterladen und eine lokale Kopie jeder Remote-Datendatei macht,ERDDAP™die Datei Dir zu sein BigParentDirectory / Kopieren/ datasetID /.
  • Für<sourceUrl> die URL des Basisverzeichnisses des Datensatzes in derHyraxServer zum Beispiel, <sourceUrl> http://edac-dap.northerngulfinstitute.org/dods-bin/nph-dods/WCOS/nmsp/wcos/ </sourceUrl> (aber auf eine Linie setzen) (Leider ist dieser Server nicht mehr verfügbar) . DiesourceUrlWebseite hat in der Regel "OPeNDAPServerindex\[Verzeichnisname\]" oben.
  • Da diese Klasse immer Downloads und eine lokale Kopie jeder Remote-Datendatei macht, sollten Sie diesen Datensatz niemals einpackenEDDTableCopy.
  • Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.
  • Siehe die Beispiele 1D, 2D, 3D und 4D fürEDDTableFromNcFis.  

EDDTableFromInvalidCRAFiles

EDDTableFromInvalidCRAFiles aggregierte Daten ausNetCDF (v3 oder v4) .ncDateien, die eine bestimmte, ungültige Variante des CF DSG Contiguous Ragged Array verwenden (CRA) Dateien. ObwohlERDDAP™unterstützt diesen Dateityp, es ist ein ungültiger Dateityp, den niemand verwenden sollte. Gruppen, die derzeit diesen Dateityp verwenden, werden stark ermutigt,ERDDAP™um gültige CF DSG CRA-Dateien zu generieren und mit diesen Dateien zu stoppen.

Details: Diese Dateien haben mehrere Zeilen\_size-Variablen, jeweils mit einem Sample\_dimension-Attribut. Die Dateien sind nicht-CF-Standard-Dateien, weil die mehrere Probe (Fette) Dimensionen sind decodiert und mit dieser zusätzlichen Regel und Verheißung, die nicht Teil der CF DSG-Spezifikation ist: "Sie können einen gegebenen z.B. Temperaturwert zuordnen (temp\_obs Dimension) mit einem vorgegebenen Tiefenwert (z\_obs Dimension, die Dimension mit den meisten Werten) , weil: die Temperaturzeile\_size (für eine bestimmte Besetzung) entweder 0 oder gleich der entsprechenden Tiefenreihe\_size (für die Besetzung) (Das ist die Regel) . Wenn also die Temperaturzeile\_size nicht 0 ist, dann beziehen sich die n Temperaturwerte für diesen Guß direkt auf die n Tiefenwerte für diesen Guß. (Das ist das Versprechen) ."

Ein weiteres Problem mit diesen Dateien: Die Principal\_Investigatorzeile\_size-Variable hat kein Sample\_dimension-Attribut und folgt nicht der obigen Regel.

Beispieldateien für diesen Datensatztyp finden Sie unter https://data.nodc.noaa.gov/thredds/catalog/ncei/wod/ \[2020-10-21 Dieser Server ist nicht mehr zuverlässig verfügbar\].

Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Das erste, was GenerateDatasets Xml tut für diese Art von Datensatz, nachdem Sie die Fragen beantworten ist drucken Sie die ncdump-ähnliche Struktur der Beispieldatei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.  

EDDTableFromJsonlCSVFis

EDDTableFromJsonlCSVFis aggregierte Daten ausJSON Zeilen CSV-Dateien. Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

  • Wie jsonlines.org sagt, ist dieses Format "Better than CSV" (und rechtlich, als Bundesangestellter, kann ich ihnen nicht zustimmen oder widersprechen -- wie verrückt ist das?) . CSV wurde nie formal definiert und wird durch das historische Gepäck im Zusammenhang mit seiner Verbindung zu den ursprünglichen Tabellenkalkulationsprogrammen behindert. JSON Lines CSV ist im Vergleich vollständig definiert und profitiert von seiner Verbindung zum weit verbreiteten JSON-Standard, der wiederum von seiner Verbindung zuJavaScript undJava. Insbesondere gibt es volle Unterstützung für lange ganze Zahlen und für Unicode-Zeichen in Strings, und eine klare Möglichkeit, andere Sonderzeichen aufzunehmen (insbesondere Tabs und Neuheiten) in Strings.

Dieses Format ist besonders gut für Datensätze, bei denen Sie am Ende einer bestimmten Datendatei periodisch zusätzliche Zeilen anhängen müssen. Aus diesem Grund und anderen (siehe oben) ,EDDTableFromHtpGetverwendet Json Lines CSV-Dateien für die Datenspeicherung.

  • Die Eingabedateien werden als UTF-8 codiert angenommen. Allerdings, angesichts der \u dddd Format für die Kodierung von Sonderzeichen (z.B. \u20ac ist die Kodierung für das Euro-Zeichen) , Sie haben die Möglichkeit, die Dateien zu schreiben, so dass sie nur 7-Bit ASCII Zeichen enthalten, indem Sie \u dddd alle Zeichen über #127 codieren.  
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantworten, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

  • WARNING: WannERDDAP™liest JSON Zeilen CSV-Datendateien, wenn es einen Fehler auf einer bestimmten Zeile findet (z.B. falsche Anzahl von Gegenständen) , es protokolliert eine Warnmeldung ("WARNUNG: Schlechte Linie (S) der Daten" ... mit einer Liste der schlechten Linien auf folgenden Zeilen) in derlog.txt Dateiund dann weiter den Rest der Datendatei lesen. So ist es Ihre Verantwortung, regelmäßig zu schauen (oder ein Skript schreiben, um dies zu tun) für diese Nachricht im Protokoll. txt, damit Sie die Probleme in den Datendateien beheben können.ERDDAP™wird so eingerichtet, dass die Benutzer weiterhin alle verfügbaren gültigen Daten lesen können, obwohl einige Zeilen der Datei Fehler haben.  

EDDTableFromMultidimNcFiles

EDDTableFromMultidimNcFiles aggregierte Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien mit mehreren Variablen, jeweils mit einer oder mehreren gemeinsamen Abmessungen. Die Dateien können Zeichenvariablen mit oder ohne zusätzliche Dimension aufweisen (zum Beispiel, STRING14) . Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

  • Wenn die Dateien multidimensionale CF DSG-Varianten sind, verwenden Sie diesen Datensatztyp anstelle vonEDDTableFromNcCFFiles.  
  • Für neue tabellarische Datensätze von.ncDateien, verwenden Sie diese Option, bevor Sie die ältereEDDTableFromNcFis. Einige Vorteile dieser Klasse sind:
    • Diese Klasse kann mehr Variablen aus einer größeren Vielfalt von Dateistrukturen lesen. Wenn Sie DimensionsCSV angeben (eine gemeinschaftlich getrennte Liste von Dimensionsnamen) in GenerateDatasets Xml (oder<AbmessungenCSV> in derdatasets.xmlInfo für einen dieser Datensätze), dannERDDAP™nur Variablen in den Quelldateien lesen, die einige oder alle diese Dimensionen verwenden, plus alle Skalarvariablen. Wenn sich eine Dimension in einer Gruppe befindet, müssen Sie ihren FullName angeben, z.B. " GruppeName/DimensionName ".
    • Diese Klasse kann Dateien oft sehr schnell ablehnen, wenn sie nicht den Einschränkungen einer Anfrage entsprechen. Das Lesen von Daten aus großen Sammlungen wird oft viel schneller gehen.
    • Diese Klasse behandelt echte Char Variablen (Nicht-String-Variablen) richtig.
    • Diese Klasse kann String-Variablen beschneiden, wenn der Schöpfer Netcdf-javas SchreibStrings nicht verwendet hat (die char #0 angibt, um das Ende des Strings zu markieren) .
    • Diese Klasse ist besser im Umgang mit einzelnen Dateien, die bestimmte Variablen oder Dimensionen fehlen.
    • Diese Klasse kann Blöcke von Zeilen mit fehlenden Werten entfernen, wie fürCF Diskrete Sampling Geometrien (DSG) Unvollständige Multidimensionale Array-Dateien
       
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantworten, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

Gruppe -- Datensätze generieren Xml fragt nach einer "Gruppe". Sie können " eingeben, um es suchen, alle Gruppen, " einige Gruppe " oder " Einige Gruppe/einige Gruppe " eine bestimmte Gruppe suchen zu lassen, oder "\[Wurzeln\]" es nur die Wurzelgruppe suchen zu lassen. Die "Gruppe"-String wird<Gruppedatasets.xmlInfo zum Datensatz (obwohl "\[Wurzeln\]" wird "") .

AbmessungenCSV -- Datensätze generieren Xml wird nach einem "DimensionsCSV"-String fragen. Dies ist eine Komma-separierte Werteliste von Quellnamen eines Maßsatzes. Datensätze generieren Xml liest nur Datenvariablen in der Probe.ncDateien, die einige oder alle diese Abmessungen verwenden (und keine anderen Abmessungen) , plus alle Skalarvariablen in der Datei und machen den Datensatz aus diesen Datenvariablen. Wenn sich eine Dimension in einer Gruppe befindet, müssen Sie ihren FullName angeben, z.B. " GruppeName/DimensionName ". Wenn Sie nichts angeben (ein leerer String) , GenerateDatasets Xml wird nach den Variablen mit den meisten Dimensionen suchen, auf der Theorie, dass sie die interessantesten sein werden, aber es kann Zeiten geben, wenn Sie einen Datensatz aus einer anderen Gruppe von Datenvariablen machen wollen, die eine andere Gruppe von Dimensionen verwenden. Wenn Sie nur einen Dimensionsnamen angeben, der nicht existiert (z.B. NO\_MATCH) ,ERDDAP™finden nur alle Skalarvariablen. Die "DimensionsCSV"-String wird<AbmessungenCSV> in derdatasets.xmlInfo für den Datensatz.

Leckerbissen

Es gibt eine Kategorie von Invaliden.ncDateien (weil sie den CF-Regeln nicht folgen) mit mehreren Abmessungen (z.B. lat, lon, Zeit) wenn sie nur eine Dimension verwenden sollten (z.B. Zeit) , zum Beispiel:

    dimensions:
time = UNLIMITED ; // (1437 currently)
depth = 10;
lat = 1437 ;
lon = 1437 ;
variables:
double time(time) ;
double lat(lat) ;
double lon(lon) ;
float temperature(time, depth) ;

EDDTableFromMultidimNcFiles hat eine Besonderheit, sich mit diesen Dateien zu beschäftigen: Wenn Sie das globale Attribut "treatDimensionsAs" zu den Datensätzen global hinzufügenaddAttributes, you can tellERDDAP™bestimmte Dimensionen zu behandeln (z.B. Lat undlon) als ob sie eine andere Dimension haben (z.B. Zeit) . Der Attributwert muss eine komma getrennte Liste sein, die die "aus" Dimensionen und dann die "zu" Dimension angibt, z. lat, lon, Zeit
DannERDDAP™die Datei als wäre sie:

    dimensions:
time = UNLIMITED ; // (1437 currently)
depth = 10;
variables:
double time(time) ;
double lat(time) ;
double lon(time) ;
float temperature(time, depth) ;

Natürlich muss die aktuelle Größe jeder der Abmessungen in der Liste gleich sein; andernfalls mussERDDAP™behandelt die Datei als "Bad File".

Beachten Sie, dass diese Dateien ungültig sind, weil sie nicht CF-Regeln folgen. Sogar wennERDDAP™können sie lesen, empfehlen wir dringend, dass Sie solche Dateien nicht erstellen, weil andere CF-basierte Software-Tools sie nicht richtig lesen können. Wenn Sie solche Dateien bereits haben, empfehlen wir dringend, diese so schnell wie möglich durch gültige Dateien zu ersetzen.

EDDTableFromNcFis

EDDTableFromNcFis aggregierte Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien undZarDateien (ab Version 2.25) mit mehreren Variablen, jeweils mit einer gemeinsamen Dimension (zum Beispiel, Zeit) oder mehr als eine gemeinsame Dimension (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) . Die Dateien müssen die gleichen Dimensionsnamen haben. Eine vorgegebene Datei kann mehrere Werte für jede der Abmessungen haben und die Werte können in verschiedenen Quelldateien unterschiedlich sein. Die Dateien können Zeichenvariablen mit einer zusätzlichen Dimension aufweisen (zum Beispiel, STRING14) . Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

Zarr-Dateien haben etwas anderes Verhalten und erfordern entweder die DateiNameRegex oder den PfadRegex, um "zarr" einzuschließen.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantworten, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

AbmessungenCSV -- Datensätze generieren Xml wird nach einem "DimensionsCSV"-String fragen. Dies ist eine Komma-separierte Werteliste von Quellnamen eines Maßsatzes. Datensätze generieren Xml findet die Datenvariablen in der.ncDateien, die einige oder alle diese Dimensionen verwenden, sowie alle Skalarvariablen, und machen den Datensatz aus diesen Datenvariablen. Wenn Sie nichts angeben (ein leerer String) , GenerateDatasets Xml wird nach den Variablen mit den meisten Dimensionen suchen, auf der Theorie, dass sie die interessantesten sein werden, aber es kann Zeiten geben, wenn Sie einen Datensatz aus einer anderen Gruppe von Datenvariablen machen wollen, die eine andere Gruppe von Dimensionen verwenden.

  • 1D Beispiel: 1D-Dateien sind etwas anders als 2D, 3D, 4D, ... Dateien.
    • Du hast vielleicht eine Menge.ncDatendateien, in denen jede Datei einen Monat Wert von Daten von einem driftenden Boje hat.
    • Jede Datei hat 1 Dimension, zum Beispiel Zeit (Größe =\[viele\]) .
    • Jede Datei hat eine oder mehrere 1D-Variablen, die diese Dimension verwenden, zum Beispiel Zeit, Länge, Breite, Breite, Lufttemperatur,....
    • Jede Datei kann beispielsweise 2D-Zeichenvariablen mit Abmessungen aufweisen (Zeit, nCharakter) .  
  • 2D Beispiel:
    • Du hast vielleicht eine Menge.ncDatendateien, in denen jede Datei einen Monat Wert von Daten von einem driftenden Boje hat.
    • Jede Datei hat 2 Dimensionen, zum Beispiel Zeit (Größe =\[viele\]) und (Größe = 1) .
    • Jede Datei hat 2 1D-Variablen mit den gleichen Namen wie die Dimensionen und mit der gleichen Namen-Dimension, zum Beispiel Zeit (Zeit) , id (id) . Diese 1D-Variablen sollten in die Liste der<dataVariable> ist im XML des Datensatzes.
    • Jede Datei hat eine oder mehrere 2D-Variablen, zum Beispiel Länge, Breite, Lufttemperatur, Wassertemperatur, ...
    • Jede Datei kann beispielsweise 3D-Zeichenvariablen mit Abmessungen aufweisen (Zeit,id,nCharacters) .  
  • 3D Beispiel:
    • Du hast vielleicht eine Menge.ncDatendateien, bei denen jede Datei einen Monat Daten von einem stationären Boje hat.
    • Jede Datei hat 3 Dimensionen, zum Beispiel Zeit (Größe =\[viele\]) , lat (Größe = 1) , und (Größe = 1) .
    • Jede Datei hat 3 1D-Variablen mit den gleichen Namen wie die Dimensionen und mit der gleichen Namen-Dimension, zum Beispiel Zeit (Zeit) , lat (Latein) , lon (lon) . Diese 1D-Variablen sollten in die Liste der<dataVariable> ist im XML des Datensatzes.
    • Jede Datei hat eine oder mehrere 3D-Variablen, zum Beispiel Lufttemperatur, Wassertemperatur, ...
    • Jede Datei kann beispielsweise 4D-Zeichenvariablen mit Abmessungen aufweisen (Zeit,lat,lon,nCharakter) .
    • Der Name der Datei kann den Namen des buoy innerhalb des Dateinamens haben.  
  • 4D Beispiel:
    • Du hast vielleicht eine Menge.ncDatendateien, in denen jede Datei einen Monat Daten von einer Station hat. Zu jedem Zeitpunkt nimmt die Station Messwerte in einer Reihe von Tiefen.
    • Jede Datei hat 4 Dimensionen, zum Beispiel Zeit (Größe =\[viele\]) , Tiefe (Größe =\[viele\]) , lat (Größe = 1) , und (Größe = 1) .
    • Jede Datei hat 4 1D-Variablen mit den gleichen Namen wie die Dimensionen und mit der gleichen Namen-Dimension, zum Beispiel Zeit (Zeit) , Tiefe (Tiefe) , lat (Latein) , lon (lon) . Diese 1D-Variablen sollten in die Liste der<dataVariable> ist im XML des Datensatzes.
    • Jede Datei hat eine oder mehrere 4D-Variablen, zum Beispiel Lufttemperatur, Wassertemperatur, ...
    • Jede Datei kann beispielsweise 5D-Zeichenvariablen mit Abmessungen aufweisen (Zeit, tief,lat,lon,nCharakter) .
    • Der Name der Datei kann den Namen des buoy innerhalb des Dateinamens haben.  

EDDTableFromNcCFFiles

EDDTableFromNcCFFiles Datensammlungen Daten ausNetCDF (v3 oder v4) .nc (oder.ncml) Dateien, die eines der durch dieCF Diskrete Sampling Geometrien (DSG) Konventionen. Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

Für Dateien, die eine der multidimensionalen CF DSG-Varianten verwendenEDDTableFromMultidimNcFilesstatt.

Die CF DSG-Konventionen definieren Dutzende von Dateiformaten und beinhalten zahlreiche kleinere Variationen. Diese Klasse befasst sich mit allen Variationen, die wir kennen, aber wir haben vielleicht eine verpasst (oder mehr) . Wenn diese Klasse keine Daten aus Ihren CF DSG-Dateien lesen kann, bittefür zusätzliche Unterstützung.

Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.  

EDDTableFromNccsvFiles

EDDTableFromNccsvFiles aggregierte Daten ausNCCSVASCII .csv Dateien. Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.

Das erste, was GenerateDatasetsXml für diese Art von Datensätzen tut, nachdem Sie die Fragen beantworten, ist Drucken der ncdump-ähnlichen Struktur der Sample-Datei. Also, wenn Sie ein paar goofy Antworten für die erste Schleife durch GenerateDatasets eingeben Xml, zumindest können Sie sehen, obERDDAP™kann die Datei lesen und sehen, welche Dimensionen und Variablen in der Datei sind. Dann können Sie bessere Antworten für die zweite Schleife durch GenerateDatasetsXml geben.

  • WARNING: WannERDDAP™liest NCCSV-Datendateien, wenn es einen Fehler auf einer bestimmten Zeile findet (z.B. falsche Anzahl von Gegenständen) , es protokolliert eine Warnmeldung ("WARNUNG: Schlechte Linie (S) der Daten" ... mit einer Liste der schlechten Linien auf folgenden Zeilen) in derlog.txt Dateiund dann weiter den Rest der Datendatei lesen. So ist es Ihre Verantwortung, regelmäßig zu schauen (oder ein Skript schreiben, um dies zu tun) für diese Nachricht im Protokoll. txt, damit Sie die Probleme in den Datendateien beheben können.ERDDAP™wird so eingerichtet, dass die Benutzer weiterhin alle verfügbaren gültigen Daten lesen können, obwohl einige Zeilen der Datei Fehler haben.  

EDDTableFromNOS

EDDTableFromNOS (DEPRECATE) Daten von einemNOAA NOSQuelle, die verwendetSOAP+XMLfür Anfragen und Antworten. Es ist sehr spezifischNOAANOS XML. Siehe die Probe EDDTableFromNOS Datensatz in datasets2.xml.  

EDDTableFromOBIS

EDDTableFromOBIS behandelt Daten von einem Ocean Biogeographic Information System (OBIS) Server (war http://www.iobis.org ) . Es ist möglich, dass es keine aktiven Server mehr gibt, die diese jetzt außerhalb des aktuellen OBIS-Serversystems verwenden.

  • OBIS-Server erwarten eine XML-Anfrage und geben eine XML-Antwort zurück.
  • Weil alle OBIS-Server die gleichen Variablen wie (war http://iobis.org/tech/provider/questions ) , Sie müssen nicht viel angeben, um einen OBIS-Datensatz einzurichtenERDDAP.
  • Sie müssen ein "creator\_email" Attribut im globalenaddAttributes, da diese Informationen innerhalb der Lizenz verwendet werden. Eine geeignete E-Mail-Adresse kann durch das Lesen der XML-Antwort aus der QuellURL gefunden werden.
  • Sie können oder können das globale Attribut nicht erhalten [<subsetVariables> (#subsetvariables) mit einem gegebenen OBIS-Server arbeiten. Wenn Sie versuchen, versuchen Sie einfach eine Variable (zum Beispiel ScientificName oder Genus) .

EDDTableFromOBIS Skelette XML

  <dataset type="EDDTableFromOBIS" datasetID\="..." active\="..." >
      <sourceUrl>...</sourceUrl>
      <sourceCode>...</sourceCode>
        <!-- If you read the XML response from the sourceUrl, the
        source code (for example, GHMP) is the value from one of the
        <resource><code> tags. -->
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <-- All ...SourceMinimum and Maximum tags are OPTIONAL -->
      <longitudeSourceMinimum>...</longitudeSourceMinimum>
      <longitudeSourceMaximum>...</longitudeSourceMaximum>
      <latitudeSourceMinimum>...</latitudeSourceMinimum>
      <latitudeSourceMaximum>...</latitudeSourceMaximum>
      <altitudeSourceMinimum>...</altitudeSourceMinimum>
      <altitudeSourceMaximum>...</altitudeSourceMaximum>
      <-- For timeSource... tags, use yyyy-MM-dd'T'HH:mm:ssZ format. -->
      <timeSourceMinimum>...</timeSourceMinimum>
      <timeSourceMaximum>...</timeSourceMaximum>
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
        <!-- 0 or 1 -->
      <addAttributes>...</addAttributes> <!-- 0 or 1. This MUST include
        "creator\_email" -->
  </dataset>

EDDTableFromParquetFis

EDDTableFromParquetFis Daten vonParkett. Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.

  • Parkett ist entworfen, um sehr effizient zu komprimieren, so kann es Ihnen kleinere Dateigrößen als andere Formate geben.
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.
  • WARNING: WannERDDAP™liest Parquet-Datendateien, wenn es einen Fehler auf einer bestimmten Zeile findet (z.B. falsche Anzahl von Gegenständen) , es protokolliert eine Warnmeldung ("WARNUNG: Schlechte Linie (S) der Daten" ... mit einer Liste der schlechten Linien auf folgenden Zeilen) in derlog.txt Dateiund dann weiter den Rest der Datendatei lesen. So ist es Ihre Verantwortung, regelmäßig zu schauen (oder ein Skript schreiben, um dies zu tun) für diese Nachricht im Protokoll. txt, damit Sie die Probleme in den Datendateien beheben können.ERDDAP™wird so eingerichtet, dass die Benutzer weiterhin alle verfügbaren gültigen Daten lesen können, obwohl einige Zeilen der Datei Fehler haben.  

EDDTableFromSOS

EDDTableFromSOS behandelt Daten von einem Sensor Observation Service (SCHWEIZSOS) Server.

  • Dieser Datensatztyp aggregiert Daten aus einer Gruppe von Stationen, die alle von einerSOSServer.
  • Die Stationen dienen alle dem gleichen Satz von Variablen (obwohl die Quelle für jede Station nicht alle Variablen bedienen muss) .
  • SOSServer erwarten eine XML-Anfrage und geben eine XML-Antwort zurück.
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern. Es ist nicht einfach, den Datensatz XML fürSOSDatensätze von Hand. Um die benötigten Informationen zu finden, müssen Sie besuchensourceUrl+? Service:SOS&request=GetCapabilities" in einem Browser; schauen Sie sich das XML an; stellen Sie eine GetObservation-Anfrage von Hand; und schauen Sie sich die XML-Antwort auf die Anfrage an.
  • Mit der gelegentlichen Hinzufügung neuer TypenSOSServer und Änderungen an den alten Servern, es wird immer schwieriger fürERDDAP™den Servertyp automatisch aus den Antworten des Servers zu erkennen. Verwendung<sosServerTyp> (mit einem Wert von IOOS\_NDBC, IOOS\_NOS,OOSTethys, oder) ist jetzt STRONGLY EMPFEHLEN. Wenn Sie Probleme mit irgendwelchen Datensätzen dieser Art haben, versuchen Sie erneut GenerateDatasets Xml für dieSOSServer. Generieren Datensätze Xml lässt Sie ausprobieren<sosServerType> Optionen, bis Sie die richtige für einen bestimmten Server finden.
  • SOSÜbersicht:
    • SCHWEIZ (Sensor Web Enablement) undSOS (Sensor Observation Service) werdenOpenGIS® Standards. Diese Website hat die Standards Dokumente.

    • DieOGCWeb Services Gemeinsame Spezifikation ver 1.1.0 (OGCL 347 vom 20.12.2013, S. 1).) deckt den Bau von GET- und POST-Abfragen ab (siehe Abschnitt 7.2.3 und Abschnitt 9) .

    • Wenn Sie eine getCapabilities xml Anfrage an eineSOSServer (sourceUrl+ "?service=SOS&request=GetCapabilities") , Sie erhalten ein xml Ergebnis mit einer Liste von Stationen und die beobachtet Eigenschaften, für die sie Daten haben.

    • Ein beobachtetesProperty ist ein formales URI-Bezug auf eine Eigenschaft. Zum Beispiel urn:ogc:phenomenon:longitude:wgs84 oder https://mmisw.org/ont/cf/parameter/sea\\_water\\_temperature

    • Eine beobachteteProperty ist keine Variable.

    • Mehr als eine Variable kann die gleiche beobachtet haben Eigentum (z.B. innerhalbTemp und außen Temp könnte beide beobachtet werden Eigentum https://mmisw.org/ont/cf/parameter/air\\_temperature ) .

    • Wenn Sie eine getObservation xml Anfrage an eineSOSServer, Sie erhalten ein xml-Ergebnis mit Beschreibungen von Feldnamen in der Antwort, Feldeinheiten und die Daten. Die Feldnamen enthalten Länge, Breite, Tiefe (vielleicht) und Zeit.

    • JedesdataVariablefür ein EDDTableFromSOSmuss ein "observedProperty" Attribut enthalten, das die beobachteteProperty identifiziert, die vom Server angefordert werden muss, um diese Variable zu erhalten. Oft, mehreredataVariables wird den gleichen Composite beobachtetProperty.

    • Der Datentyp für jedendataVariabledarf nicht vom Server angegeben werden. Wenn dies der Fall ist, müssen Sie sich die XML-Datenantworten des Servers ansehen und angemessen zuordnen [<DatenTyp> (#datatype) in derERDDAP™DatensatzdataVariableDefinitionen.

    • (Zum Zeitpunkt des Schreibens dieses) einigeSOSServer reagieren auf getBeobachtungsanfragen für mehr als einen beobachteten Eigentum durch nur Rückgabe der Ergebnisse für die ersten der beobachtetenProperties. (Keine Fehlermeldung!) Siehe die Parameteranforderung des Konstrukteurs Beobachtete AngeboteSeparately.

  • EDDTableFromSOSautomatisch hinzugefügt

    station\_id, longitude, latitude
    auf die globalen Attribute des Datensatzes, wenn der Datensatz erstellt wird.

  • SOSServer in der Regel drückenEinheitenmitUCUMSystem. DieERDDAP™Server Express-Einheiten mit derUDUNITSSystem. Wenn Sie zwischen den beiden Systemen wechseln müssen, können SieERDDAP's Web-Service, um UCUM-Einheiten zu / vonUDUNITS.

EDDTableFromSOSSkelette XML

  <dataset type="EDDTableFromSOS" datasetID\="..." active\="..." >
      <sourceUrl>...</sourceUrl>
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <sosServerType>...</sosServerType> <!-- 0 or 1, but STRONGLY
        RECOMMENDED. This lets you specify the type of SOS server
        (so ERDDAP™ doesn't have to figure it out).
        Valid values are: IOOS\_NDBC, IOOS\_NOS, OOSTethys, and WHOI. -->
      <responseFormat>...</responseFormat> <!-- 0 or 1. Use this only if
        you need to override the default responseFormat for the
        specified sosServerType. -->
      <stationIdSourceName>...</stationIdSourceName> <!-- 0 or 1.
        Default="station\_id". -->
      <longitudeSourceName>...</longitudeSourceName>
      <latitudeSourceName>...</latitudeSourceName>
      <altitudeSourceName>...</altitudeSourceName>
      <altitudeSourceMinimum>...</altitudeSourceMinimum> <!-- 0 or 1 -->
      <altitudeSourceMaximum>...</altitudeSourceMaximum> <!-- 0 or 1 -->
      <altitudeMetersPerSourceUnit>...</altitudeMetersPerSourceUnit>
      <timeSourceName>...</timeSourceName>
      <timeSourceFormat>...</timeSourceFormat>
        <!-- timeSourceFormat MUST be either
        \* For numeric data: a UDUnits\-compatible string (with the format
          "units since baseTime") describing how to interpret
          source time values (for example,
          "seconds since 1970-01-01T00:00:00Z"), where the
          base time is an ISO 8601:2004(E) formatted date time
          string (yyyy-MM-dd'T'HH:mm:ssZ).
        \* For String date time data: specify
          units suitable for string times
          describing how to interpret string times (for example, the
          ISO8601TZ\_FORMAT "yyyy-MM-dd'T'HH:mm:ssZ"). -->
      <observationOfferingIdRegex>...</observationOfferingIdRegex>
        <!-- Only observationOfferings with IDs (usually the station names)
        which match this regular expression (tutorial) will be included
        in the dataset (".+" will catch all station names). -->
      <requestObservedPropertiesSeparately>true|false(default)
        </requestObservedPropertiesSeparately>
      <sourceNeedsExpandedFP\_EQ>true(default)|false</sourceNeedsExpandedFP\_EQ>
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more.
        \* Each dataVariable MUST include the dataType tag.
        \* Each dataVariable MUST include the observedProperty attribute.
        \* For IOOS SOS servers, \every\ variable returned in the text/csv
          response MUST be included in this ERDDAP™ dataset definition. -->
  </dataset>

EDDTableFromThreddsFiles

EDDTableFromThreddsFiles (depretiert) aggregiert Datendateien mit mehreren Variablen, jeweils mit einer oder mehreren gemeinsamen Abmessungen (zum Beispiel Zeit, Höhe (oder Tiefe) , Breite, Länge) , und serviert vonTHREDOPeNDAPServer.

  • Dieser Datensatztyp ist DEPRECATE . Die neuere und allgemeinere Lösung ist dieCache AusUrl Option für EDDTable VonFiles (oder eine Variante) , die eine lokale Kopie der Remote-Dateien macht und die Daten aus den lokalen Dateien bedient. Die<ccheFromUrl> Option kann mit jeder Art von tabellarischen Datendatei aus jeder webbasierten Quelle verwendet werden, die eine verzeichnisartige Liste von Dateien veröffentlicht. **
    Wenn Sie diese Arbeit aus irgendeinem Grund nicht machen können, mailen Sie Chris. John bei noaa.gov. Wenn vor 2020 keine Beschwerden vorliegen, kann dieser Datensatztyp entfernt werden. **
  • Wir empfehlen dringend die Verwendung derDatensätze generieren Xml Programmeinen groben Entwurf derdatasets.xmlfür diesen Datensatz. Das können Sie dann bearbeiten, um es zu verfeinern.
  • In den meisten Fällen hat jede Datei mehrere Werte für die linkeste (erste) Dimension, zum Beispiel Zeit.
  • Die Dateien oft (aber muss nicht) einen einzigen Wert für die anderen Abmessungen haben (zum Beispiel Höhe (oder Tiefe) , Breite, Länge) .
  • Die Dateien können Zeichenvariablen mit einer zusätzlichen Dimension aufweisen (zum Beispiel nCharacters) .
  • THREDDS-Server können durch die "/thredds/" in den URLs identifiziert werden. Zum Beispiel
    https://www.ncei.noaa.gov/thredds/catalog/uv/6h\\_strs\\_agg/catalog.html
  • THREDDS Server haben Kataloge an verschiedenen Orten. Diese Klasse REQUIRES, dass die URL "/thredds/catalog/" enthält. Sie können diese Variable in der Regel finden, indem Sie in einem Browser im Root-Katalog starten und dann auf den gewünschten Subkatalog klicken.
  • Diese Klasse liest die katalog.xml Dateien, die von THREDDS mit den Listen von<KatalogRefs> (Referenzen zu zusätzlichen Katalog.xml Unterdateien) und<Datensatz> (Datendateien) .
  • Die<fileDir> Einstellung wird ignoriert. Da diese Klasse herunterladen und eine lokale Kopie jeder Remote-Datendatei macht,ERDDAP™die Datei Dir zu sein BigParentDirectory / Kopieren/ datasetID /.
  • Für<sourceUrl> die URL der Catalog.xml-Datei für den Datensatz im THREDDS-Server verwenden, zum Beispiel: für diese URL, die in einem Webbrowser verwendet werden kann, https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.html \[2020-10-21 Dieser Server ist nicht mehr zuverlässig verfügbar.\], Verwendung<sourceUrl> https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.xml </sourceUrl> (aber auf eine Linie setzen) .
  • Da diese Klasse immer Downloads und eine lokale Kopie jeder Remote-Datendatei macht, sollten Sie diesen Datensatz niemals einpackenEDDTableCopy.
  • Dieser Datensatztyp unterstützt ein OPTIONAL, selten verwendet, Sondertag,<SpecialMode> Modus </specialMode>, die verwendet werden kann, um zu bestimmen, welche Dateien von dem Server heruntergeladen werden sollen. Derzeit ist die einzige gültig Modus ist SAMOS, die mit Datensätzen von https://tds.coaps.fsu.edu/thredds/catalog/samos nur die Dateien mit der letzten Versionsnummer herunterladen.
  • Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.
  • Siehe die Beispiele 1D, 2D, 3D und 4D fürEDDTableFromNcFis.  

EDDTableFromWFSDateien

EDDTableFromWFSDateien (DEPRECATE) eine lokale Kopie aller Daten aus einerArcGISKartenserverWFSServer so dass die Daten dann schnell reserviert werden können, umERDDAP™Benutzer.

  • Sie müssen eine speziell formatiertesourceUrlglobales Attribut zu sagenERDDAP™wie Sie Feature-Informationen vom Server anfordern können. Bitte verwenden Sie dieses Beispiel als Vorlage:
    <att name="sourceUrl">http://*someUrl/dir1/dir2*/MapServer/WFSServer?request=GetFeature&amp;service=WFS&amp;typename=aasg:BoreholeTemperature&amp;format=&quot;text/xml;%20subType=gml/3.1.1/profiles/gmlsf/1.0.0/0"</att>  

(aber alles auf eine Linie setzen)

  • Sie müssen ein spezielles globales Attribut hinzufügen, um zu sagenERDDAP™wie man die Namen der Blöcke von Daten identifiziert, die heruntergeladen werden sollten. Dies wird wahrscheinlich für alle EDDTableFrom arbeitenWFSDateien datasets:
    <att name="rowElementXPath">/wfs:FeatureCollection/gml:featureMember</att>
  • Da diese Klasse immer Downloads und eine lokale Kopie jeder Remote-Datendatei macht, sollten Sie diesen Datensatz niemals einpackenEDDTableCopy.
  • Sehen Sie die Superklasse dieser Klasse,EDDTableFromFiles, für zusätzliche Informationen, wie diese Klasse funktioniert und wie sie verwendet werden.  

EDDTableAggregateRows

EDDTableAggregateRows kann einen EDDTable-Datensatz aus einer Gruppe von "Kind" EDDTable-Datensätzen machen.

  • Hier sind einige Anwendungen für EDDTableAggregateRows:
    • Sie könnten einen EDDTableAggregateRows-Datensatz aus zwei verschiedenen Arten von Dateien oder Datenquellen machen, beispielsweise einen Datensatz mit Daten bis zum Ende des letzten Monats, der in.ncCF-Dateien und ein Datensatz mit Daten für den aktuellen Monat in einer relationalen Datenbank gespeichert.
    • Sie könnten einen EDDTableAggregateRows-Datensatz erstellen, um mit einer Änderung der Quelldateien zu umgehen (z.B. das Zeitformat geändert oder ein variabler Name geändert wird, oder Daten Typscale\_factor/add\_offsetgeändert) . In diesem Fall würde ein Kind Daten von Dateien erhalten, die vor der Änderung gemacht werden, und das andere Kind würde Daten von Dateien nach der Änderung gemacht bekommen. Diese Verwendung von EDDTableAggregateRows ist eine Alternative zur VerwendungNcMLoderNCO. Es sei denn, es gibt ein Unterscheidungsmerkmal in den Dateinamen (so können Sie verwenden<fileNameRegex>, um zu bestimmen, welche Datei zu welcher Kind-Datensatz gehört), müssen Sie wahrscheinlich die Dateien für die beiden Kind-Datensätze in verschiedenen Verzeichnissen speichern.
    • Sie könnten einen EDDTableAggregateRows-Datensatz erstellen, der eine gemeinsame Teilmenge von Variablen eines oder mehrerer ähnlicher, aber unterschiedlicher Datensätze aufweist, beispielsweise einen Datensatz, der einen Profildatensatz aus der Kombination eines Profildatensatzes, eines TimeSeriesProfildatensatzes und eines TrajectoryProfile-Datensatzes macht. (die einige verschiedene Variablen und einige Variablen gemeinsam haben -- in welchem Fall müssen Sie spezielle Varianten für die Kinderdatensätze machen, mit nur den in-common Variablen) .
    • Sie könnten mehrere Standalone-Datensätze haben, jede mit der gleichen Art von Daten, aber von einer anderen Station. Sie könnten diese Datensätze intakt lassen, aber auch einen EDDTableAggregateRows-Datensatz erstellen, der Daten von allen Stationen hat -- jeder der Kinderdatensätze könnte ein einfacherEDDTableFromErddap, die auf einen der vorhandenen Stationsdatensätze zeigt. Wenn Sie dies tun, geben Sie jedem der EDDTableFromErddap-Datensätze eine anderedatasetIDals die ursprünglichen Standalone-Datensätze, z.B. durch Anwenden von "Kind" an das OriginaldatasetID.
  • Jedes Kind<dataset>'s spezifiziert muss ein vollständiger Datensatz sein, als wäre es ein eigenständiger Datensatz. Jeder muss gleich seindataVariableS, in der gleichen Reihenfolge, mit der gleichendestinationNameS,Daten Arten,missing\_valueS,\_FillValues, undEinheiten. Die Metadaten für jede Variable für den EDDTableAggregateRows-Datensatz stammen aus Variablen im ersten Kinderdatensatz, aber EDDTableAggregateRows wird dieactual\_rangeMetadaten sind der eigentliche Bereich für alle Kinder.
  • Empfehlung: Holen Sie sich jeden der Kinderdatensätze als eigenständige Datensätze. Dann versuchen Sie, den EDDTableAggregateRows Datensatz zu machen, indem Sie diedatasets.xmlchunk für jeden in das neue EDDTableAggregate Zeilendatensatz.
  • Datensatz Standard Sortieren von Bestellung -- Die Reihenfolge der Kinderdatensätze bestimmt die Gesamt-Standard-Sortenfolge der Ergebnisse. Natürlich können Benutzer eine andere Sortierreihenfolge für eine bestimmte Reihe von Ergebnissen durch Appending & anfordernorderBy (" Komma-separierte Variablenliste ") bis zum Ende ihrer Abfrage.
  • Die "Quelle"weltweit Attributefür den EDDTableAggregateRows ist der kombinierte GlobalAttributes aus dem ersten Kinderdatensatz. Das EDDTableAggregate Rows können eine globale<addAttributes> zur Bereitstellung zusätzlicher globaler Attribute oder übergeordneter globaler Attribute.

EDDTableAggregate Rows Skelett XML

  <dataset type="EDDTableAggregateRows" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaFiles>true|false(default)</accessibleViaFiles>
        <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <updateEveryNMillis>...</updateEveryNMillis> <!-- 0 or 1. -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <dataset>...</dataset> <!-- 1 or more -->
  </dataset>

EDDTableCopy

EDDTableCopy kann eine lokale Kopie von vielen Arten von EDDTable-Datensätzen erstellen und dann die Daten schnell aus der lokalen Kopie speichern.

  • EDDTableCopy (und für Netzdaten,EDDGridKopie) ist sehr einfach zu bedienen und sehr effektiv Lösung für einige der größten Probleme mit der Verwendung von Daten aus Remote-Datenquellen:
    • Der Zugriff auf Daten von einer entfernten Datenquelle kann langsam sein.
      • Sie können langsam sein, weil sie inhärent langsam sind (beispielsweise eine ineffiziente Art von Servern) ,
      • weil sie von zu vielen Anträgen überfordert sind,
      • oder weil Ihr Server oder der Remoteserver Bandbreite begrenzt ist.
    • Der Remote-Datensatz ist manchmal nicht verfügbar (wieder, aus verschiedenen Gründen) .
    • Die Wiederherstellung auf einer Quelle für die Daten skaliert nicht gut (zum Beispiel, wenn viele Benutzer und vieleERDDAPs nutzen es) .  
  • Wie es funktioniert -- EDDTableCopy löst diese Probleme automatisch, indem Sie eine lokale Kopie der Daten erstellen und erhalten und Daten aus der lokalen Kopie.ERDDAP™kann sehr schnell Daten aus der lokalen Kopie bedienen. Und das Erstellen und Verwenden einer lokalen Kopie erleichtert die Last auf dem Remote-Server. Und die lokale Kopie ist eine Sicherung des Originals, was nützlich ist, falls etwas mit dem Original passiert.

Es gibt nichts Neues über eine lokale Kopie eines Datensatzes. Was hier neu ist, ist, dass diese Klasse es macht\*leicht\*zu erstellen und\*Pflege\*eine lokale Kopie von Daten aus einer\*Sorte\*von Arten von Remote-Datenquellen und\*Metadaten hinzufügen\*beim Kopieren der Daten.

EDDTableCopy vs<ccheFromUrl>

<ccheFromUrl> ist eine Alternative zu EDDTableCopy. Sie arbeiten anders.

  • EDDTable Kopieren Sie die Arbeiten, indem Sie die Daten von einem Remote-Service anfordern und diese Stücke in lokalen Dateien speichern. So ist EDDTableCopy in einigen Fällen nützlich, in denen die Daten über einen Remote-Service zugänglich sind.
  • (<CacheFromUrl> (#cachefromurl) herunterladt die vorhandenen Dateien auf einer Remote-Website.<ccheFromUrl> ist einfacher zu bedienen und zuverlässiger, da es leicht sagen kann, wann es eine neue Remote-Datendatei gibt oder wenn sich eine Remote-Datendatei geändert hat und daher heruntergeladen werden muss.

Wenn es Situationen gibt, in denen EDDTableCopy oder<cacheFromUrl> könnte verwendet werden, verwenden<ccheFromUrl> weil es einfacher und zuverlässiger ist.  

<ExtraktDestination Name und Anschrift

EDDTable Das Kopieren macht die lokale Kopie der Daten durch das Anfordern von Datensätzen aus dem entfernten Datensatz. EDDTable Kopieren bestimmt, welche Stücke auf Anfrage durch Anfrage des &distinct () Werte für die<ExtraktDestinationNamen> (in derdatasets.xml, siehe unten) , die die platzgetrennten Zielnamen von Variablen im Remote-Datensatz sind. Zum Beispiel

    <extractDestinationNames>drifter profile</extractDestinationNames>  

können verschiedene Wertekombinationen von Drifter=tig17,Profil=1017, Drifter=tig17,Profil=1095, ... Drifter=une12,Profil=1223, Drifter=une12,Profil=1251, ... ergeben.

In Situationen, in denen eine Spalte (z.B. Profil) kann alles sein, was erforderlich ist, um eine Gruppe von Zeilen von Daten eindeutig zu identifizieren, wenn es eine sehr große Anzahl von beispielsweise Profilen gibt, kann es nützlich sein, auch einen zusätzlichen Extrakt anzugeben Bestimmung Name (zum Beispiel Drift) die zur Unterteilung der Profile dient. Dies führt zu weniger Datendateien in einem bestimmten Verzeichnis, was zu einem schnelleren Zugriff führen kann.

Lokale Dateien

Jeder Datenbruch wird in einem separatenNetCDFDatei in einem Unterverzeichnis BigParentDirectory / Kopieren/ datasetID / (wie angegebenSetup.xml) . Es gibt eine Unterverzeichnisebene für alle, aber der letzte ExtraktDestinationName. Beispielsweise wären Daten für tig17+1017 in BigParentDirectory /copy/sampleDataset/tig17/1017.nc. Beispielsweise würden Daten für une12+1251 in BigParentDirectory /copy/sampleDataset/une12/1251.nc. Verzeichnisse und Dateinamen, die aus Datenwerten erstellt wurden, werden geändert, um sie Datei-Name-sicher zu machen (zum Beispiel werden Leerzeichen durch "x20" ersetzt) -- das beeinflusst die tatsächlichen Daten nicht.  

Neue Daten

Jedes Mal EDDTable Kopieren wird neu geladen, es überprüft den Remote-Datensatz, um zu sehen, was verschiedene Stücke zur Verfügung stehen. Wenn die Datei für einen Datenklumpen nicht bereits vorhanden ist, wird eine Anfrage, den Bruch zu bekommen, zu einer Warteschlange hinzugefügt.ERDDAP's taskThread verarbeitet alle gelöschten Anfragen nach Datenschlangen, einzeln. Sie können Statistiken für die Aufgabe sehenDeine Tätigkeit auf derStatusseiteundTagesbericht. (Ja.ERDDAP™könnte diesem Prozess mehrere Aufgaben zuordnen, aber das würde viele der Bandbreite, Speicher und CPU-Zeit der Remote-Datenquelle nutzen, und viele der lokalenERDDAPBandbreite, Speicher und CPU-Zeit, von denen keine gute Idee ist.)

HINWEIS: Das erste Mal, dass ein EDDTableCopy geladen wird, (wenn alles gut geht) Es werden viele Anfragen an Datenknöpfe der TaskThread's Queue hinzugefügt, aber keine lokalen Datendateien werden erstellt. So wird der Konstrukteur scheitern, aber TaskThread wird weiterhin arbeiten und lokale Dateien erstellen. Wenn alles gut geht, wird die TaskThread einige lokale Datendateien machen und der nächste Versuch, den Datensatz neu zu laden (in ~15 Minuten) wird erfolgreich, aber zunächst mit einer sehr begrenzten Datenmenge.

HINWEIS: Nachdem der lokale Datensatz einige Daten und erscheint in IhremERDDAP, wenn der Remote-Datensatz vorübergehend oder dauerhaft nicht zugänglich ist, wird der lokale Datensatz noch funktionieren.

WARNING: Wenn der Remote-Datensatz groß ist und/oder der Remote-Server langsam ist (Das ist das Problem, oder?!) , es dauert eine lange Zeit, um eine vollständige lokale Kopie zu machen. In einigen Fällen wird die erforderliche Zeit inakzeptabel sein. Beispielsweise sendet 1 TB von Daten über eine T1-Leitung (0,15 GB/s) mindestens 60 Tage unter optimalen Bedingungen. Darüber hinaus verwendet es viele Bandbreite, Speicher und CPU-Zeit auf den Remote- und lokalen Computern. Die Lösung besteht darin, eine Festplatte an den Administrator des Remote-Datensatzes zu senden, damit s/he eine Kopie des Datensatzes erstellen und die Festplatte wieder an Sie senden kann. Verwenden Sie diese Daten als Ausgangspunkt und EDDTableCopy wird die Daten dazu hinzufügen. (So hat der EC2 Cloud Service von Amazon das Problem bearbeitet, auch wenn sein System viel Bandbreite hat.)

WARNING: Wenn eine bestimmte Kombination von Werten aus einem entfernten Datensatz verschwindet, löscht EDDTableCopy die lokale kopierte Datei NICHT. Wenn Sie wollen, können Sie es selbst löschen.

Tabelle<CheckSourceData>

Diedatasets.xmlfür diesen Datensatz kann ein optionales Tag

    <checkSourceData>true</checkSourceData>  

Der Standardwert ist wahr. Wenn/wenn Sie es auf false setzen, wird der Datensatz niemals den Quelldatensatz überprüfen, um zu sehen, ob zusätzliche Daten verfügbar sind.  

  1. Erstellen Sie die<Datensatz> Eintrag (der native Typ, nicht EDDTableCopy) für die Remote-Datenquelle. Machen Sie es richtig, einschließlich aller gewünschten Metadaten.
  2. Wenn es zu langsam ist, fügen Sie XML-Code hinzu, um es in einem EDDTableCopy-Datensatz zu wickeln.
    • Verwenden Sie ein anderesdatasetID (vielleicht durch VeränderungdatasetIDvon der altendatasetIDleicht) .
    • Kopieren Sie die<zugänglich Zu><reloadEveryNMinutes> und<aufChange> von der Remote-EDDTable's XML in das XML von EDDTableCopy. (Ihre Werte für EDDTableCopy Materie; ihre Werte für den inneren Datensatz sind irrelevant.)
    • Erstellen Sie die<ExtraktDestinationNames> tag (siehe oben) .
    • <orderExtractBy> ist eine OPTIONAL-Raum getrennte Liste von Zielvariablennamen im Remote-Datensatz. Wenn jeder Datensprung vom Remote-Server heruntergeladen wird, wird der chunk nach diesen Variablen sortiert (durch die erste Variable, dann durch die zweite Variable, wenn die erste Variable gebunden ist, ...) . In einigen FällenERDDAP™kann Daten schneller aus den lokalen Datendateien extrahieren, wenn die erste Variable in der Liste eine numerische Variable ist ("time"zählt als numerische Variable) . Aber wählen Sie diese Variablen in einer für den Datensatz geeigneten Weise aus.
  3. ERDDAP™eine lokale Kopie der Daten erstellen und pflegen.  
  • WARNING: EDDTableCopy geht davon aus, dass sich die Datenwerte für jedes Stück nie ändern. Wenn/wenn sie es tun, müssen Sie die chunk-Dateien manuell löschen BigParentDirectory / Kopieren/ datasetID / die geändert undFlaggeder zu ladende Datensatz, so dass die gelöschten Stücke ersetzt werden. Wenn Sie ein E-Mail-Abonnement zum Datensatz haben, erhalten Sie zwei E-Mails: eine, wenn der Datensatz zuerst neu geladen und die Daten kopiert, und eine andere, wenn der Datensatz wieder geladen wird. (automatisch) und erkennt die neuen lokalen Datendateien.  
  • Metadaten ändern -- Wenn Sie etwas ändern müssenaddAttributesoder die Reihenfolge der dem Quelldatensatz zugeordneten Variablen ändern:
    1. Änderung deraddAttributesfür den Quelldatensatz indatasets.xml, wie nötig.
    2. Löschen Sie eine der kopierten Dateien.
    3. Stellen Sie einFlaggeum den Datensatz sofort neu zu laden. Wenn Sie ein Flag verwenden und ein E-Mail-Abonnement zum Datensatz haben, erhalten Sie zwei E-Mails: eine, wenn der Datensatz zuerst neu geladen wird und die Daten kopiert, und eine andere, wenn der Datensatz wieder geladen wird. (automatisch) und erkennt die neuen lokalen Datendateien.
    4. Die gelöschte Datei wird mit den neuen Metadaten regeneriert. Wenn der Quelldatensatz jemals nicht verfügbar ist, erhält der EDDTableCopy-Datensatz Metadaten aus der regenerierten Datei, da es die jüngste Datei ist.  
  • EDDGridKopieist sehr ähnlich wie EDDTableCopy, arbeitet aber mit gerasteten Datensätzen.

EDDTableCopy Skelett XML

  <dataset type="EDDTableCopy" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <accessibleViaFiles>true|false(default)</accessibleViaFiles>
        <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <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 -->
      <extractDestinationNames>...</extractDestinationNames> <!-- 1 -->
      <orderExtractBy>...</orderExtractBy> <!-- 0 or 1 -->
      <fileTableInMemory>...</fileTableInMemory> <!-- 0 or 1 (true or false
        (the default)) -->
      <checkSourceData>...</checkSourceData> <!-- 0 or 1 -->
      <dataset>...</dataset> <!-- 1 -->
  </dataset>

    • Ja.

Details

Hier finden Sie detaillierte Beschreibungen von gemeinsamen Tags und Attributen.

<winkelDegreeUnits>

  • ( ** <winkelDegreeUns> ** ! (#angulardegreeunits) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie eine comma-separierte Liste von Einheiten Strings enthält, dieERDDAP™sollte als Winkel Grad Einheiten behandeln. Hat eine Variable eine dieser Einheiten,tabledap'orderByMeanfilter berechnet den Mittelwert in besonderer Weise, dann melden Sie den Mittelwert als Wert von -180 bis 180. Vgl.ERDDAP's EDStatic.java Quellcode-Datei für die aktuelle Standardliste. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.

<winkelDegreeTrueUnits>

  • ( ** <Winkel DegreeTrueUnits> ** ! (#angulardegreetrueunits) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie eine comma-separierte Liste von Einheiten Strings enthält, dieERDDAP™sollte als Winkel Grad echte Einheiten behandeln. Hat eine Variable eine dieser Einheiten,tabledap'orderByMeanfilter berechnet den Mittelwert in besonderer Weise, dann melden Sie den Mittelwert als Wert von 0 bis 360. Vgl.ERDDAP's EDStatic.java Quelldatei für die aktuelle Standardliste. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.  

<CommonStandardNames>

  • ( ** <CommonStandardNames> ** ! (#commonstandardnames) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmleine gemeinschaftlich getrennte Liste der gemeinsamenCF-Standardnamen. Z.B.,
    <commonStandardNames>air\\_pressure, ..., wind\\_to\\_direction</commonStandardNames>  

Diese Liste wird in DataProviderForm3.html als Bequemlichkeit für Benutzer verwendet. Wenn Sie diese Informationen indatasets.xml, durch Kopieren der aktuellen Standardliste in<DEFAULT\_commonStandardNames> inERDDAP' \[Tomcat\]/webapps/erdap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml Datei.  

<CacheMinutes>

  • ( ** <CacheMinutes> ** ! (#cacheminutes) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldas Alter angeben (in Minuten) bei dem Dateien im Cache gelöscht werden sollten (Standard = 60) . Z.B.,
    <cacheMinutes>60</cacheMinutes>  

Im Allgemeinen nur Bilddateien (weil die gleichen Bilder oft wiederholt angefordert werden) und.ncDateien (weil sie vor dem Senden an den Benutzer vollständig erstellt werden müssen) werden geätzt. Obwohl es scheint, als sollte eine bestimmte Anfrage immer die gleiche Antwort zurückgeben, das ist nicht wahr. Zum Beispiel atabledapAnfrage, die Zeit umfasst einige Zeit ändert sich, wenn neue Daten für den Datensatz ankommen. Und eine Gridap-Anforderung, die beinhaltet\[Letzter Beitrag\]für die Zeitdimension wird sich ändern, wenn neue Daten für den Datensatz ankommen. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, dies wurde in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<konvertieren InterpolateRequestCSVExample>

  • ( ** <konvertierenInterpolateRequestCSVExamping> ** ! (#convertinterpolaterequestcsvexample) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xml \[beginnend mitERDDAP™V2.10\]die ein Beispiel enthält, das auf der Webseite des Interpolate-Konverters angezeigt wird. Der Standardwert ist: jplMURSST41/analysiertsst/Bilinear/4 .

<konvertiert InterpolateDatasetIDVariableList>

  • ( ** <konvertierenInterpolateDatasetIDVariableList> ** ! (#convertinterpolatedatasetidvariablelist) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xml \[beginnend mitERDDAP™V2.10\]die eine CSV-Liste enthältdatasetID/variabel Namensbeispiele, die von der Interpolate-Konverter-Webseite als Anregungen verwendet werden. Der Standardwert ist: jplMURSST41/analysiertsst.

<ConvertToPublicSourceUrl>

  • ( ** <konvertierenToPublicSourceUrl> ** ! (#converttopublicsourceurl) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldas ein "from" und ein "to" Attribut enthält, das angibt, wie man ein passendes Lokal umwandeltsourceUrl (normalerweise eine IP-Nummer) in einer ÖffentlichkeitsourceUrl (einen Domainnamen) . "von" muss die Form haben "\[Was?\]//\[Was?\]". Es können 0 oder mehr dieser Tags sein. Weitere Informationen siehe [<sourceUrl> (#sourceurl) . Zum Beispiel
    <convertToPublicSourceUrl from="https://192.168.31.18/" to="https://oceanwatch.pfeg.noaa.gov/" />  

wird ein passendes Lokal verursachensourceUrl (wie folgt: https://192.168.31.18/thredds/dodsC/satellite/BA/ssta/5day )
in einer ÖffentlichkeitsourceUrl ( https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day ) . Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.

Aber aus Sicherheitsgründen und Gründen im Zusammenhang mit dem Abonnementsystem, Nicht diese TAG!
Verwenden Sie stattdessen immer den öffentlichen Domainnamen in der<sourceUrl> tag und verwenden/etc/hosts Tabelleauf Ihrem Server lokale Domänennamen ohne Verwendung eines DNS-Servers in IP-Nummern konvertieren. Sie können testen, ob ein Domain-Name richtig in eine IP-Nummer umgewandelt wird, indem Sie: p ein paar.domain.name
 

Daten:Bild/Png;base64,

  • Wenn ein Benutzer einen.htmlTableAntwortERDDAP™, falls die Daten in einer String-Zelle Daten enthalten:Bild/png;base64, gefolgt von einem base64 codierten .png-Bild,ERDDAP™wird ein Symbol anzeigen (so kann der Benutzer das Bild sehen, wenn sie darüber schweben) und Tasten, um den Text oder das Bild in der Zwischenablage zu speichern. Diese Funktion wurde hinzugefügtERDDAP™v2.19 von Marco Alba.

drawLandMask

  • drawLandMask gibt die Standardeinstellung an, die kontrolliert, wann und wie die Landmaske gezogen werden soll, wennERDDAP™zieht eine Karte. Es kann an drei verschiedenen Orten indatasets.xml (von der niedrigsten bis höchsten Priorität) :

    1. wenndrawLandMaskinnerhalb<erdddapDatasets> (nicht mit einem bestimmten Datensatz verbunden) , dann gibt es den Standardwert andrawLandMaskfür alle Variablen in allen Datensätzen. Zum Beispiel
        <drawLandMask>under</drawLandMask>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAPliestdatasets.xml. Wenn dieser Tag nicht vorhanden ist, ist der zugrunde liegende Standardwert unter.   2. wenndrawLandMaskwird als globales Attribut eines bestimmten Datensatzes angegeben, dann gibt es den Standardwert vondrawLandMaskfür alle Variablen in diesem Datensatz, Überschreitung einer niedrigeren Prioritätseinstellung. Zum Beispiel

    <att name="drawLandMask">under</att>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™den Datensatz neu lädt.   3. wenndrawLandMaskwird als Attribut einer Variable in einem bestimmten Datensatz angegeben, dann wird der Standardwert vondrawLandMaskfür diese Variable in diesem Datensatz, übergeordnet jede untere Prioritätseinstellung. Zum Beispiel

    <att name="drawLandMask">under</att>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™den Datensatz neu lädt.

Ein Benutzer kann den Standard überschreiben (wo immer es angegeben ist) durch die Auswahl eines Wertes für "Draw land mask" aus einer Dropdown-Liste auf der Website des Datensatzes Make A Graph oder durch einschließlich &.land= Wert in der URL, die eine Karte vonERDDAP.

In allen Situationen gibt es 4 mögliche Werte für das Attribut:

  • "unter" zieht die Landmaske, bevor sie Daten auf der Karte zieht. Für gegitterte Datensätze erscheint Land als konstante hellgraue Farbe. Für tabellarische Datensätze zeigt "unter" Topographiedaten über Land und Ozeane.
  • "über" -- Für gegitterte Datensätze zieht "over" die Landmaske, nachdem sie Daten auf Karten zieht, so dass sie alle Daten über Land maskieren wird. Für tabellarische Datensätze zeigt "over" die Bathymetrie des Ozeans und ein konstantes helles Grau, wo es Land gibt, beide unter den Daten gezeichnet.
  • "outline" zieht nur den Umriss der Landmasse, politische Grenzen, Seen und Flüsse.
  • "aus" zieht nichts.

<E-MailDiagnosticsToErdData>

  • ( ** <E-MailDiagnosticsToErdData> ** ! (#emaildiagnosticstoerddata) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xml. Der Wert des Tags kann wahr sein (Der Standard) oder falsch. Wenn wahr,ERDDAP™wird den Stack-Track zu Chris senden. John bei Noaa. Gov (dieERDDAP™Entwicklungsteam) . Dies sollte sicher und sicher sein, da keine vertraulichen Informationen (z.B. die AnfrageUrl) ist in der E-Mail enthalten. Dies sollte es ermöglichen, alle unsicheren, völlig unerwarteten Fehler zu fangen, die zu NullPointerExceptions führen. Ansonsten sieht der Benutzer die Ausnahmen, aber dieERDDAP™Entwicklungsteam nicht (Wir wissen nicht, dass ein Problem behoben werden muss) .  

<GraphBackgroundColor>

  • ( ** <GrafikBackgroundColor> ** ! (#graphbackgroundcolor) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie Standard-Hintergrundfarbe auf Diagrammen angeben. Dies betrifft fast alle Grafiken. Es gibt einige Situationen, die nicht betroffen sind. Die Farbe wird als 8-stelliger hexadezimaler Wert in der Form 0xAARRGGBB angegeben, wobei AA, RR, GG und BB die Trübungs-, Rot-, Grün- und Blaukomponenten sind. "0x" ist case sensitive, aber die hexadezimalen Ziffern sind nicht Case sensitive. Zum Beispiel eine vollständig opake (ff.) grünlich-blaue Farbe mit rot=22, grün=88, blau=ee würde 0xff2288ee sein. Opaque white ist 0xffffffffff. Der Standard ist opak hellblau (0xffcc) , die den Vorteil hat, von Weiß verschieden zu sein, was eine wichtige Farbe in vielen Paletten ist, die verwendet werden, um Daten zu zeichnen. Zum Beispiel
    <graphBackgroundColor>0xffffffff</graphBackgroundColor>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.

<ipAddressMaxRequests>

  • ( ** <ipAddressMaxRequests> ** ! (#ipaddressmaxrequests) ist ein selten verwendeter optionaler Tag (zuerst unterstützt mitERDDAP™,2.12) innerhalb von<erdddapDatasets> in den Warenkorbdatasets.xmldas Teil eines Systems ist, um die Fähigkeit von über aggressiven legitimen Benutzern und bösartigen Benutzern zu begrenzen, eine große Anzahl von gleichzeitigen Anfragen zu machen, die die Systemleistung für andere Benutzer beeinträchtigen würde. ipAddress MaxRequests gibt die maximale Anzahl von gleichzeitigen Anfragen an, die von einer bestimmten IP-Adresse akzeptiert werden. Zusätzliche Anfragen erhalten einen HTTP 429-Fehler: Zu viele Anfragen. Die kleinen, statischen Dateien in erddap/download/ und erddap/images/ sind NICHT von dieser Anzahl ausgenommen. Der Standard ist 15. Das Maximum erlaubt ist 1000, das ist verrückt hoch -- tun Sie es nicht!ERDDAP™nicht akzeptieren eine Zahl weniger als 6 weil viele legitime Benutzer (insbesondere Webbrowser undWMSKunden) bis zu 6 Anfragen zu einem Zeitpunkt stellen. DieERDDAP™Der Daily Report und die ähnlichen Informationen, die in der log.txt-Datei mit jedem Major Dataset Reload geschrieben wurden, enthalten nun eine Tally der Anfragen dieser IP-Adressen unter dem Titel "Requesters IP Adresse (Zu viele Anfragen) ". Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.

Der Abschnitt "Major LoadDatasets Time Series" von status.html enthält eine Spalte "tooMany", in der die Anzahl der Anfragen aufgelistet ist, die die Einstellung ipAddressMaxRequests des Benutzers überschritten haben und somit einen Fehler "Too Many Requests" sahen. Dies lässt Sie leicht sehen, wenn es aktiv über aggressive legitime Benutzer und bösartige Benutzer, so dass Sie können (optional) suchen Sie in der log.txt-Datei und entscheiden Sie sich, ob Sie diese Benutzer Blacklist wünschen.

Es gibt nichts Besonderes daran, dies auf eine höhere Zahl zu setzen. Es liegt an dir. Aber dies ermöglicht/ermutigt die Menschen, Systeme einzurichten, die eine große Anzahl von Threads verwenden, um an Projekten zu arbeiten und gibt ihnen dann kein Feedback, dass das, was sie tun, ihnen keinen Nutzen bringt.

<ipAddressMaxRequestsActive>

  • ( ** <ipAddressMaxRequestsActive> ** ! (#ipaddressmaxrequestsactive) ist ein selten verwendeter optionaler Tag (zuerst unterstützt mitERDDAP™,2.12) innerhalb von<erdddapDatasets> in den Warenkorbdatasets.xmldas Teil eines Systems ist, um die Fähigkeit von über aggressiven legitimen Benutzern und bösartigen Benutzern zu begrenzen, eine große Anzahl von gleichzeitigen Anfragen zu machen, die die Systemleistung für andere Benutzer beeinträchtigen würde. ipAddressMaxRequestsActive gibt die maximale Anzahl der gleichzeitigen Anfragen an, die von jeder bestimmten IP-Adresse aktiv bearbeitet werden. Zusätzliche Anfragen stehen in einer Warteschlange, bis die vorherigen Anfragen bearbeitet wurden. Die kleinen, statischen Dateien in erddap/download/ und erddap/images/ ARE sind von dieser Zählung und der damit verbundenen Drosselung ausgenommen. Der Standard ist 2. Das Maximum erlaubt ist 100, das ist verrückt hoch -- tun Sie es nicht! Sie können dies auf 1 setzen, um streng zu sein, vor allem, wenn Sie Probleme mit über aggressive oder bösartige Benutzer haben. Benutzer erhalten immer noch schnell alle Daten, die sie anfordern (bis zu ipAddressMaxRequests) , aber sie werden nicht in der Lage sein, Systemressourcen zu schüren. Wir empfehlen nicht, dies auf eine größere Anzahl zu setzen, weil es übermäßig aggressive legitime Benutzer und bösartige Benutzer zu dominierenERDDAPdie Verarbeitungskapazität. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.  

<ipAddressUnlimited>

  • ( ** <ipAddressUnlimited> ** ! (#ipaddressunlimited) ist ein selten verwendeter optionaler Tag (zuerst unterstützt mitERDDAP™,2.12) innerhalb von<erdddapDatasets> in den Warenkorbdatasets.xmldas Teil eines Systems ist, um die Fähigkeit von über aggressiven legitimen Benutzern und bösartigen Benutzern zu begrenzen, eine große Anzahl von gleichzeitigen Anfragen zu machen, die die Systemleistung für andere Benutzer beeinträchtigen würde. ipAddressUnlimited ist eine komma-separierte Liste von IP-Adressen, die Sie unbegrenzten Zugriff auf IhreERDDAP. Sieh in dein Protokoll. txt Datei, um zu sehen, welches Format Ihr Server für die IP-Adressen verwendet. Auf einigen Servern werden die IP-Adressen im Format #.#.#.#.# (wobei # eine ganze Zahl von 0 bis 255 ist) ; während auf anderen wird es im Format #:#:#:#:#:#:#:#:#:#:#:#:# . Anfragen auf dieser Liste unterliegen weder den ipAddressMaxRequests noch den ipAddressMaxRequestsActive-Einstellungen. Dies könnte eine sekundäreERDDAP™oder für bestimmte Benutzer oder Server in Ihrem System.ERDDAP™immer fügt " (unbekanntIPAdresse) ", dieERDDAP™Verwendungen, wenn die IP-Adresse des Requesters nicht ermittelt werden kann, z.B. für andere Prozesse, die auf demselben Server laufen. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.

Wenn aus irgendeinem Grund alle Anfragen eines Benutzers die Fehlermeldung erhalten "Timeout warten auf Ihre anderen Anfragen zu bearbeiten.", dann können Sie das Problem lösen, indem Sie die IP-Adresse des Benutzers in die ipAddressUnlimited-Liste hinzufügen, diese Änderung anwenden, dann entfernen Sie es aus dieser Liste.

<lastDatasetsMinutes>

  • ( ** <lastDatasetsMinutes> ** ! (#loaddatasetsminminutes) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmlzur Angabe der Mindestzeit (in Minuten) zwischen Hauptlast Datensätze (wennERDDAP™Wiederaufarbeitungendatasets.xml, einschließlich der Überprüfung jedes Datensatzes, um zu sehen, ob es nach seinem Nachladen neu geladen werden muss EveryNMinutes Einstellung, default=15) . Z.B.,
    <loadDatasetsMinMinutes>15</loadDatasetsMinMinutes>  

Wenn ein vorgegebener Ablauf von loadDatasets weniger dauert als dieses Mal, sieht der Ladegerät einfach immer wieder das Flag-Verzeichnis an und/oder schläft, bis die verbleibende Zeit vergangen ist. Die Standardeinstellung beträgt 15 Minuten, was für fast alle gut sein sollte. Der einzige Nachteil, dies auf eine kleinere Zahl zu stellen, ist, dass es die Frequenz erhöhen wird, dassERDDAP™rettet Datensätze, die Fehler haben, die sie nicht geladen werden (z.B. ein Remoteserver ist unten) . Wenn es viele solcher Datensätze gibt und sie häufig wieder getestet werden, könnte die Datenquelle sie als pestering/aggressive Verhalten betrachten. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, dies wurde in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<LoadDatasetsMaxMinutes>

  • ( ** <lastDatasetsMaxMinutes> ** ! (#loaddatasetsmaxminutes) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie maximale Zeit (in Minuten) eine große Last Datasets Aufwand ist erlaubt (vor der Last Datensätze, die als "gestaut" behandelt werden und unterbrochen werden) (Standard = 60) . Z.B.,
    <loadDatasetsMaxMinutes>60</loadDatasetsMaxMinutes>  

Im Allgemeinen sollte dies auf mindestens doppelt so lange festgelegt werden, wie Sie vernünftigerweise denken, dass alle Datensätze neu geladen werden. (kumulativ) sollte (da Computer und Netzwerke manchmal langsamer sind als erwartet) Dies sollte immer viel länger sein als ladenDatasetsMinutes. Die Standardeinstellung beträgt 60 Minuten. Einige Leute werden das länger einstellen. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, dies wurde in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<logLevel>

  • ( ** <logLevel> ** ! (#loglevel) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmlwie viele Diagnosenachrichten an die log.txt-Datei gesendet werden. Es kann auf "warning" gesetzt werden (die wenigen Nachrichten) , "info" (Der Standard) , oder "alle" (die meisten Nachrichten) . Z.B.,
    <logLevel>info</logLevel>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, dies wurde in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<TeilRequestMaxBytes&gt und<TeilRequestMaxZells >

  • ( ** <TeilRequestMaxBytes> ! (#partialrequestmaxbytes-and-partialrequestmaxcells) und [ <TeilRequestMaxZells> ** ! (#partialrequestmaxbytes-and-partialrequestmaxcells) werden selten OPTIONAL Tags innerhalb einer<erdddapDatasets> in den Warenkorbdatasets.xml. Wann möglich (und es ist nicht immer möglich) ,ERDDAP™bricht große Datenanforderungen in Stücke, um Speicher zu erhalten.

mit 32 BitJava, im einfachen Sinne, die maximale Anzahl der gleichzeitigen groß Anfragen sind etwa 3/4 des Speichers verfügbar (der -Xmx-Wert an Tomcat übergeben) geteilt durch die Stückgröße (z.B. 1200 MB / 100 MB => 12 Anfragen) . Andere Dinge benötigen Speicher, so dass die tatsächliche Anzahl der Anfragen weniger sein wird. In der Praxis ist es nicht immer möglich. So könnte eine große oder ein paar sehr große gleichzeitige nicht-kunkbare Anfragen Probleme auf 32 Bit verursachenJava.

mit 64 BitJava, der -Xmx-Wert kann viel größer sein. So ist das Gedächtnis viel weniger wahrscheinlich eine Einschränkung zu sein.

Sie können die Standard-Chunk-Größe überschreiben, indem Sie diese Tags indatasets.xml (mit unterschiedlichen Werten als hier dargestellt) : Für Gitter:<TeilRequestMaxBytes>100000000</partialRequestMaxBytes> Für Tabellen:<TeilRequestMaxZells>1000000</partialRequestMaxZells>

partiellRequestMaxBytes ist die bevorzugte maximale Anzahl von Bytes für eine Teilnetzdatenanforderung (ein Stück der gesamten Anfrage) . Standard=1000000000000 (10^8) . Größere Größen sind nicht unbedingt besser (und gehen Sie nicht über 500 MB, denn das ist THREDDS Standardlimit fürDAPAntworten) . Aber größere Größen können weniger Zugriffe von Tonnen von Dateien erfordern (DenkenERD's Satellitendaten mit jedem Zeitpunkt in einer separaten Datei - es ist besser, mehr Daten von jeder Datei in jeder Teilanforderung zu erhalten) .

partiellRequestMaxCells ist die bevorzugte maximale Anzahl von Zellen (nRows \* nKolumnen in der Datentabelle) für eine teilweise TABELLE-Datenanforderung (ein Stück der gesamten Anfrage) . Standard = 100000. Größere Größen sind nicht unbedingt besser. Sie führen zu einem längeren Warten auf die anfängliche Datenmenge aus der Quelle.

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, diese wurden in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<AnfrageBlacklist>

  • ( ** <AnfrageBlacklist> ** ! (#requestblacklist) ist ein OPTIONAL-Taginnerhalb von<erdddapDatasets> in den Warenkorbdatasets.xmldie eine komma-separierte Liste von numerischen IP-Adressen enthält, die schwarz aufgeführt werden. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.
    • Dies kann verwendet werden, um eineDenial of Service Angriff, ein übermäßig eifersüchtigWeb-Roboter, oder jede andere Art von störenden Benutzer.
    • Beunruhigender Benutzer -- wennERDDAP™Slows to a crawl or freezes/stops, die Ursache ist oft ein störender Benutzer, der auf einmal mehr als ein Skript läuft und/oder eine große Anzahl von sehr großen, extrem ineffizienten oder ungültigen Anfragen oder gleichzeitigen Anfragen macht. Sieh mal.Pressemitteilungzu sehen, ob dies der Fall ist und die numerische IP-Adresse des störenden Benutzers zu finden. Wenn dies das Problem ist, sollten Sie wahrscheinlich Blacklist dieser Benutzer.

WannERDDAP™erhält eine Anfrage von einer schwarzen Liste IP-Adresse, es wird HTTP Error 403: Forbidden zurückgeben. Die begleitende Text-Fehlermeldung ermutigt den Benutzer, Sie per E-Mail zu senden,ERDDAPAdministrator, um die Probleme zu lösen. Wenn sie die Zeit nehmen, die Fehlermeldung zu lesen (viele offenbar nicht) und Sie kontaktieren, können Sie dann mit ihnen arbeiten, um sie zu einem Zeitpunkt nur ein Skript ausführen zu lassen, effizientere Anfragen zu stellen, die Probleme in ihrem Skript zu beheben (z.B. die Anforderung von Daten von einem entfernten Datensatz, der vor dem Zeitpunkt nicht reagieren kann) , oder was auch immer sonst die Quelle von Schwierigkeiten war.

Benutzer sind oft einfach nicht bewusst, dass ihre Anfragen sind störend. Sie sind oft nicht bewusst, dass Fehler, grobe Ineffizienzen oder andere Probleme mit ihren Skripten. Sie denken oft, dass, weil SieERDDAP™bietet Daten kostenlos an, dass sie nach so vielen Daten fragen können, wie sie z.B. durch mehrere Skripte oder durch gleichzeitige Verwendung mehrerer Threads wünschen.

  • Sie können ihnen erklären, dass jederERDDAP™, jetzt ist wichtig, wie groß und mächtig, hat endlich Ressourcen (CPU-Zeit, Festplatte I/O, Netzwerkbandbreite, etc.) und es ist nicht fair, wenn ein Benutzer Daten in einer Weise anfordert, die andere Benutzer oder Überbürden ausfülltERDDAP.
  • Sobald ein Benutzer weiß, wie man 2 gleichzeitige Anfragen macht, sehen sie oft keinen Grund, nicht 5, 10 oder 20 gleichzeitige Anfragen zu machen, da die zusätzlichen Anfragen sie nichts kosten. Es ist wie asymmetrische Kriegsführung: Hier haben die Offensive Waffen einen enormen Vorteil (Null Kosten) über die Verteidigungswaffen (eine endliche Installation mit realen Kosten) .
  • Sie weisen darauf hin, dass es immer weniger Rückgaben gibt, um mehr und mehr gleichzeitige Anfragen zu stellen; die zusätzlichen Anfragen blockieren die Anfragen anderer Benutzer weiter; sie geben ihnen keine große Verbesserung.
  • Erinnern Sie sich daran, dass es andere Benutzer (sowohl lässige Benutzer als auch andere Benutzer, die Skripte ausführen) , so ist es nicht fair, dass sie alleERDDAPRessourcen.
  • Beachten Sie, dass die Tech-Giganten die Nutzer dazu gebracht haben, unendliche Ressourcen von Web-Services zu erwarten. Während es Wege gibt, sich einzurichtenNetz/Kunden/FöderationenERDDAPSum einERDDAP™System mit mehr Ressourcen, die meistenERDDAP™Administratoren haben nicht das Geld oder die Arbeitskräfte, um solche Systeme einzurichten, und ein solches System wird noch endlich sein. ImERDZum Beispiel gibt es eine Person (ich) SchreibenERDDAP™, Verwaltung zweiERDDAPS (mit Hilfe von meinem Chef) , und Verwaltung mehrerer Datenquellen, alle mit einem jährlichen Hardware-Budget von $0 (wir verlassen uns auf gelegentliche Zuwendungen für Hardware) . Dies ist nicht Google, Facebook, Amazon, etc. mit 100's von Ingenieuren, und Millionen von Dollar von Umsatz zu recyceln in immer größere Systeme. Und wir können uns nicht einfach bewegenERDDAP™zum Beispiel Amazon AWS, weil die Datenspeicherkosten groß sind und die Datenausgangsgebühren groß und variabel sind, während unser Budget für externe Dienstleistungen ein festes $0 ist.
  • Meine Anfrage an die Benutzer ist: für nicht-time-sensitive Anfragen (was bei weitem der häufigste Fall ist) , ihr System sollte nur eine Anfrage zu einer Zeit. Wenn die Anfragen zeitempfindlich sind (z.B. mehrere .pngs auf einer Webseite, mehrere Fliesen für eineWMSClient, etc.) , dann sollten vielleicht 4 gleichzeitige Anträge die max (und nur für eine sehr kurze Zeit) .
  • Wenn Sie die Situation dem Benutzer erklären, werden die meisten Benutzer verstehen und bereit sein, die notwendigen Änderungen vorzunehmen, damit Sie ihre IP-Adresse aus der Blacklist entfernen können.  
  • Um einen Benutzer zu Blacklist zu verlinken, fügen Sie die numerische IP-Adresse in die komma getrennte Liste der IP-Adressen ein<AnfrageBlacklist> in Ihremdatasets.xmlDatei. Um die lästige IP-Adresse des Benutzers zu finden, schauen Sie in derERDDAP™ BigParentDirectory /logs/log.txt Datei ( BigParentDirectory wird angegeben inSetup.xml) um zu sehen, ob dies der Fall ist und die IP-Adresse des Nutzers zu finden. Die IP-Adresse für jeden Antrag ist in den Zeilen aufgeführt, die mit "{{{{#" beginnen und 4 Zahlen, die durch Zeiträume getrennt sind, beispielsweise 123.45.67.8 . Die Suche nach "ERROR" hilft Ihnen, Probleme wie ungültige Anfragen zu finden.
  • Sie können auch die letzte Nummer in einer IP-Adresse ersetzen mit\(z.B. 202.109.200.\) eine Reihe von IP-Adressen zu blockieren, 0-255.
  • Sie können auch die letzten 2 Nummern in einer IP-Adresse ersetzen mit\.\ (beispielsweise 121.204.\.\) um ein breiteres Spektrum an IP-Adressen zu blockieren, 0-255.0-255.
  • Zum Beispiel
    <requestBlacklist>98.76.54.321, 202.109.200.\\*, 121.204.\\*.\\*</requestBlacklist>
  • Sie müssen nicht neu startenERDDAP™für die Änderungen<AnfrageBlacklist> zur Wirkung. Die Änderungen werden beim nächsten Mal erkanntERDDAP™überprüft, ob Datensätze neu geladen werden müssen. Oder Sie können den Prozess beschleunigen, indem Sie einePressemitteilungen Seite nicht gefundenfür jeden Datensatz.
  • IhrERDDAP™Der tägliche Bericht enthält eine Liste/die meisten aktiven zugelassenen und blockierten Anfragenden.
  • Wenn Sie herausfinden möchten, welche Domain/Institution mit einer numerischen IP-Adresse zusammenhängt, können Sie einen kostenlosen, umgekehrten DNS-Webservice wie https://network-tools.com/ .
  • Es kann Zeiten geben, in denen es sinnvoll ist, bestimmte Benutzer auf einer höheren Ebene zu blockieren, zum Beispiel bösartige Benutzer. Zum Beispiel können Sie den Zugriff auf alles auf Ihrem Server blockieren, nicht nurERDDAP. Auf Linux ist eine solche Methode zu verwendeniptables. Zum Beispiel können Sie eine Regel hinzufügen, die alles ab 198.51.100.0 mit dem Befehl blockieren wird. iptables -I INPUT -s 198.51.100.0 -j DROP

<langsamDownTroubleMillis>

  • ( ** <langsamDownTroubleMillis> ** ! (#slowdowntroublemillis) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie eine ganze Zahl enthält, die die Zahl der Millisekunden angibt (Standard=1000) bei der Reaktion auf alle fehlgeschlagenen Anfragen, z.B. unbekannter Datensatz, zu groß anfragen, Benutzer auf der Blacklist. Z.B.,
    <slowDownTroubleMillis>2000</slowDownTroubleMillis>

Wenn ein Skript eine Anfrage unmittelbar nach der anderen macht, dann könnte es schnell eine schlechte Anfrage nach der anderen machen. Mit dieser Einstellung können Sie ein fehlgeschlagenes Skript so verlangsamenERDDAP™ist nicht mit schlechten Anträgen überschwemmt. Wenn ein Mensch eine schlechte Bitte macht, werden sie diese Verzögerung nicht einmal bemerken. Empfehlungen:

  • Wenn das Problem ein verteilter Dienst (DDOS) Angriff von 100+ Angreifern, setzen Sie diese auf eine kleinere Anzahl (100?) . Die Verlangsamung führt zu zu zu vielen aktiven Fäden.
  • Wenn die Probleme von 1-10 Quellen sind, setzen Sie diese auf 1000 ms (Der Standard) , aber eine größere Zahl (wie 10000) ist auch vernünftig. Das verlangsamt sie, damit sie weniger Netzwerkressourcen verschwenden. Auch 1000 ms oder so werden keine ärgerlichen Menschen, die eine schlechte Anfrage machen.

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.  

<AboEmailBlacklist>

  • ( ** <Abonnement EmailBlacklist> ** ! (#subscriptionemailblacklist) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie eine comma-separierte Liste von E-Mail-Adressen enthält, die sofort von derSystem des Abonnementsz.B.
    <subscriptionEmailBlacklist>bob@badguy.com, john@badguy.com</subscriptionEmailBlacklist>  

Dies ist ein Fall-unempfindliches System. Wenn eine E-Mail-Adresse dieser Liste hinzugefügt wird, wenn diese E-Mail-Adresse Abonnements hat, werden die Abonnements storniert. Wenn eine E-Mail-Adresse auf der Liste zu abonnieren versucht, wird die Anfrage abgelehnt. Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.  

Standardtext

  • Standardtext -- Es gibt mehrere OPTIONAL Tags (die meisten werden selten verwendet) innerhalb von<erdddapDatasets> in den Warenkorbdatasets.xmlText an verschiedenen Stellen angebenERDDAP. Wenn Sie den Standardtext ändern möchten, kopieren Sie den vorhandenen Wert aus dem Tag des gleichen Namens in Tomcat /webapps/erdap/WEB-INF/classes/gov/noaa/pfel/erdap/util.messages.xml indatasets.xml, dann ändern Sie den Inhalt. Der Vorteil, diese indatasets.xmlist, dass Sie jederzeit neue Werte angeben können, auch wennERDDAP™läuft. Änderungen der Werte dieser Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. Die Tagsnamen beschreiben ihren Zweck, sehen aber den Standardinhalt in message.xml für ein tieferes Verständnis.

    • <StandardLicense>

    • <StandardKontakt >

    • <StandardDataLicenses>

    • <StandardDisclaimerOfEndorsement>

    • <StandardDisclaimerOfExternalLinks>

    • <StandardGeneralDisclaimer>

    • <Standard DatenschutzPolicy>

    • <StartHeadHtml5>

    • <startBodyHtml5> ist ein guter Tag zum Ändern, um das Aussehen der Oberseite jeder Webseite in IhrerERDDAP. Bemerkenswert, können Sie diese verwenden, um eine temporäre Nachricht auf demERDDAP™Startseite (z.B. "Check out the new JPL MUR SST v4.1 dataset ..." oder "ThisERDDAP™wird offline für die Wartung 2019-05-08T17:00 PDT durch 2019-05-08T20:00 PDT sein.") . Eine Quirke dieses Tags indatasets.xmlist: wenn Sie neu startenERDDAP, die erste Aufforderung,ERDDAP™zurück zum Standardstart BodyHtml5 HTML, aber jede nachfolgende Anfrage wird den indatasets.xml.

    • <Die Beschreibung Html> ist ein guter Tag zum Ändern, um die Beschreibung IhresERDDAP. Beachten Sie, dass Sie diese leicht ändern können, um eine temporäre Nachricht auf der Startseite hinzufügen (z.B.: "DasERDDAP™wird offline für die Wartung 2019-05-08T17:00 PDT durch 2019-05-08T20:00 PDT sein.") .

    • <EndBodyHtml5>

VorERDDAP™v2.00, diese wurden in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<ungewöhnlich Tätigkeit >

  • ( ** <Ungewöhnliche Wirksamkeit> ** ! (#unusualaktivität) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldie maximale Anzahl der Anfragen zwischen zwei Runs von LoadDatasets anzugeben, die als normal angesehen werden (Standard=10000) . Wenn diese Zahl überschritten wird, wird eine E-Mail an emailEverythingTo gesendet (wie in setup.xml angegeben) . Z.B.,
    <unusualActivity>10000</unusualActivity>  

Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge. VorERDDAP™v2.00, dies wurde in setup.xml angegeben, was noch erlaubt ist, aber entmutigt.  

<updateMaxEvents>

  • ( ** <updateMaxEvents> ** ! (#updatemaxevents) ist ein selten benutztes OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmlum die maximale Anzahl von Dateiwechselereignissen anzugeben (Standardeinstellungen) die von der [<UpdateEveryNMillis>] (#updateeverynmillis) System vor dem Umschalten, um den Datensatz neu zu laden. Zum Beispiel
    <updateMaxEvents>10</updateMaxEvents>  

Das updateEveryNMillis-System soll sehr schnell laufen, bevor die Anfrage eines Benutzers bearbeitet wird. Wenn es eine Menge Dateiänderungsereignisse gibt, kann es vermutlich nicht schnell laufen, so dass es stattdessen fordert, dass der Datensatz neu geladen wird. Wenn SieERDDAP™befasst sich mit Datensätzen, die aktuell gehalten werden müssen, auch wenn es Änderungen an einer großen Anzahl von Datendateien gibt, können Sie diese auf eine größere Anzahl stellen (100?) .

<Benutzer >

  • ( ** <> ** ! (#user) ist ein OPTIONAL-Tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldass den Benutzernamen eines Benutzers identifiziert, Passwort (wenn Authentifizierung = kunden) , und Rollen (eine gemeinsame Liste) . Die Verwendung von Benutzernamen und Passwort variiert leicht abhängig vom Wert von [<Authentifizierung (/docs/server-admin/additional-information#authentication) in deinerERDDAP's setup.xml-Datei.
    • Das ist Teil vonERDDAP'Sicherheitssystemzur Einschränkung des Zugriffs auf einige Datensätze auf einige Benutzer.
    • Machen Sie eine separate<Benutzer-Tag für jeden Benutzer. Optional, wenn Authentifizierung = Oauth2, können Sie zwei einrichten<> tags für jeden Benutzer: ein für, wenn der Benutzer über Google, eine für, wenn der Benutzer über Orcid einloggt, vermutlich mit den gleichen Rollen.
    • Wenn es keine gibt<Benutzer-Tag für einen Client, s/he kann nur auf öffentliche Datensätze zugreifen, d.h. Datensätze, die keine [<zugänglichzu> (#accessibleto) tag.
    • Benutzername Für die Authentifizierung=custom ist der Benutzername in der Regel eine Kombination aus Buchstaben, Ziffern, Unterstrichen und Perioden. Für die Authentifizierung=E-Mail ist der Benutzername die E-Mail-Adresse des Benutzers. Es kann jede E-Mail-Adresse sein. Für die Authentifizierung = Google ist der Benutzername die volle Google-E-Mail-Adresse des Nutzers. Dazu gehören Google-managed-Konten wie@noaa.govKonten. Für die Authentifizierung=orcid ist der Benutzername die Orcid-Kontonummer des Benutzers (mit Bindestrichen) . Für die Authentifizierung=oauth2 ist der Benutzername die volle Google-E-Mail-Adresse oder die Orcid-Kontonummer des Benutzers. (mit Bindestrichen) .
    • Passwort vergessen? Für die Authentifizierung=E-Mail, google, orcid oder oauth2 geben Sie kein Passwort-Attribut an. Für die Authentifizierung=custom müssen Sie für jeden Benutzer ein Passwort-Attribut angeben.
      • Die Passwörter, die Benutzer eingeben, sind case sensitive und müssen 8 oder mehr Zeichen haben, so dass sie schwerer zu knacken sind. Heutzutage können sogar 8 Zeichen schnell und kostengünstig durch brutale Kraft mit einem Cluster von Computern auf AWS gekrackt werden.ERDDAP™nur das 8-Kennzeichen Minimum durchsetzt, wenn der Benutzer einloggt (nicht wenn der<Benutzer-Tag wird verarbeitet, weil dieser Code nur die Hash-Verdauung des Passworts sieht, nicht das Klartext-Passwort).
      • setup.xml's<Passwort Encoding> ermittelt, wie Passwörter in der<> in den Warenkorbdatasets.xml. Um die Sicherheit zu erhöhen, sind die Optionen:
        • MD5 (Nicht benutzen!) -- für das Passwort-Attribut, geben Sie den MD5 Hash-Dau des Benutzers Passwort an.
        • UEPMD5 (Nicht benutzen!) -- für das Passwort-Attribut, geben Sie die MD5 Hash-Dau von Benutzername :ERDDAP: Passwort vergessen? . Der Benutzername und "ERDDAP" werden verwendetSalz den Hash-Wert, wodurch es schwieriger zu decodieren.
        • SHA256 (nicht empfohlen) -- für das Passwort-Attribut, geben Sie die SHA-256 Hash-Verdauung des Benutzers Passwort.
        • UEPSHA256 (standard, empfohlen passwortEncoding. Aber viel besser: Verwenden Sie die Google-, Orchideen- oder oauth2-Authentifizierungsoptionen.) -- für das Passwort-Attribut, geben Sie die SHA-256 Hash-Verdauung Benutzername :ERDDAP: Passwort vergessen? . Der Benutzername und "ERDDAP" werden verwendet, um den Hash-Wert zu salzen, so dass es schwieriger zu decodieren.
      • Unter Windows können Sie MD5 Passwort-Verdauwerte generieren, indem Sie ein MD5-Programm herunterladen (wie folgt:MD5) und Verwendung (beispielsweise) : md5 -djsmith:ERDDAP: Ist dies der Fall?
      • Auf Linux/Unix können Sie mit dem integrierten md5sum-Programm MD5-Dauwerte generieren (beispielsweise) : echo -n "jsmith:ERDDAP: Ist dies der Fall? "|md5sum
      • Gespeicherte Klartext-Passwörter sind case sensitive. Die gespeicherten Formen von MD5- und UEPMD5-Passwörtern sind nicht fallempfindlich.
      • Zum Beispiel (mit UEPMD5) , if username="jsmith" und passwort="myPasswort",<Benutzer-Tag ist:
            <user username="jsmith"  
password="57AB7ACCEB545E0BEB46C4C75CEC3C30"
roles="JASmith, JASmithGroup" />

wo das gespeicherte Passwort generiert wurde md5 -djsmith:ERDDAP: myPassword

  • Rollen ist eine komma-separierte Rollenliste, für die der Benutzer autorisiert ist. I<Datensatz> kann eine<zugänglichzu> (#accessibleto) tag, in dem die Rollen aufgelistet werden, die auf diesen Datensatz zugreifen dürfen. Für einen bestimmten Benutzer und einen bestimmten Datensatz, wenn eine der Rollen in der Rollenliste des Benutzers eine der Rollen in der Liste des Datensatzes über<accessTo> Rollen, dann ist der Benutzer berechtigt, auf diesen Datensatz zugreifen.

Jeder Benutzer, der sich einloggt, erhält automatisch die Rolle\[Wer ist hier? In\], ob es<Benutzer-Tag für sie indatasets.xmloder nicht. Wenn ein bestimmter Datensatz

            <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

dann jeder Benutzer, der eingeloggt ist, wird berechtigt, auf diesen Datensatz zuzugreifen, auch wenn es nicht<Benutzer-Tag für sie indatasets.xml.

  • Änderungen des Wertes dieses Tags werden das nächste Mal wirksamERDDAP™liestdatasets.xml, einschließlich in Reaktion auf einen DatensatzFlagge.  

<pathRegex>

  • ( ** <PfadRegex> ** ! (#pathregex) geben Sie einen regelmäßigen Ausdruck an, der die Pfade begrenzt (die Unterverzeichnisse) wird im Datensatz enthalten sein. Der Standard ist .\*, der alle Pfade übereinstimmt. Dies ist ein selten verwendet, selten benötigt, OPTIONAL-Tag fürEDDGridVonFiles-Datensätzen, EDDTableFromFiles-Datensätzen und einigen anderen Datensätzen. Aber wenn Sie es brauchen, brauchen Sie es wirklich.

Um diese Arbeit zu machen, müssen Sie wirklich gut mit regelmäßigen Ausdrücken sein. Sieheregex dokumentationundNach oben. Insbesondere müssen Sie über Fanggruppen wissen (etwas in Klammern) , und das "oder" Symbol "|". Gemeinsam lassen Sie diese eine beliebige Anzahl von Optionen angeben, z.B. (Option1|Option2|Option3) . Auch jede der Optionen kann nichts sein, z.B., (|Option2|Option3) . Sie müssen auch wissen, dass Fanggruppen geschachtelt werden können, d.h. jede Option in einer Fanggruppe kann eine andere Fanggruppe enthalten, z. (|Option2 (|Option2 B.|Option2c) |Option3) die besagt, dass Option2 von nichts gefolgt werden kann, oder Option2b, oder Option2c. Für pathRegexes wird jede Option ein Ordnername sein, gefolgt von einem /, z.B., bar/ .

Der knifflige Teil des PfadesRegex ist: WannERDDAP™rekursiv absinkt der Verzeichnisbaum, der PfadRegex muss alle Pfade akzeptieren, die er auf seinem Weg zu den Verzeichnissen mit Daten trifft. Regex's mit geschachtelten Fanggruppen sind ein guter Weg, damit umzugehen.

Ein Beispiel: Angenommen wir haben die folgende Verzeichnisstruktur:

/foo/bar/D0001/a/\\*.nc  
/foo/bar/D0001/b/\\*.nc
/foo/bar/D0002/a/\\*.nc
/foo/bar/D0002/b/\\*.nc
...
/foo/bar/E0001/a/\\*.nc
...

und die angegebene DateiDirectory ist /foo/bar/, und wir wollen nur die.ncDateien im D\[0-9\]{4}/a/ Unterverzeichnisse Die Lösung besteht darin, PfadRegex auf /foo/bar/ einzustellen (|D\[0-9\]{4} (|a)) )
Das sagt: Der Pfad muss mit /foo/bar/ beginnen Dem kann nichts oder D gefolgt werden\[0-9\]{4} Dies kann durch nichts oder a/

Ja, PfadRegex kann unglaublich schwierig zu formulieren sein. Wenn Sie hängen bleiben, fragen Sie einen Computer Programmierer (die nächste Sache in der realen Welt zu einem Zauberer, der Beschwörungen ausstöbert?) oder schicken Sie eine E-Mail an Chris. John bei noaa.gov.

<Datensatz >

  • ( ** <Datensatz> ** ! (#dataset) ist ein OPTIONAL (aber immer verwendet) tag innerhalb eines<erdddapDatasets> in den Warenkorbdatasets.xmldass (wenn Sie alle Informationen zwischen<Datensatz> und</dataset>) beschreibt einen Datensatz vollständig. Zum Beispiel
    <dataset type="EDDGridFromDap" datasetID="erdPHssta8day" active="true"> ... </dataset>  

Gibt es eine beliebige Anzahl von Datensätzen in Ihremdatasets.xmlDatei. Drei Attribute MAY erscheinen in einem<Datensatz> tag:  

  • Typ=" eine Typ " ist ein REQUIRED-Attribut innerhalb eines<Datensatz> tag indatasets.xmldie den Datensatztyp identifiziert (zum Beispiel, ob es sich um einEDDGrid/gridded oder EDDTable/tabular dataset) und die Quelle der Daten (z.B. eine Datenbank, Dateien oder eine FernbedienungOPeNDAPServer) . Siehe Liste der Datensätze .  

Datensatz I

  • datasetID= ADatasetID " ist ein REQUIRED-Attribut innerhalb eines<dataset> tag, der einen kurzen (normalerweise) zuordnet<15 Zeichen), einzigartig, Identifikationsname zu einem Datensatz.
    • DiedatasetIDs MUST ein Brief (A-Z, a-z) gefolgt von einer beliebigen Anzahl von A-Z, a-z, 0-9 und \_ (aber am besten, wenn<32 Zeichen insgesamt).
    • Datensatz IDs sind Case sensitive, aber DON'T erstellen zweidatasetIDdie sich nur in Großbuchstaben unterscheiden. Es wird Probleme auf Windows-Computern verursachen (Ihrem und/oder dem Computer eines Benutzers) .
    • Best Practices: Wir empfehlenKamel Rechtssache.
    • Best Practices: Wir empfehlen, dass der erste Teil ein Akronym oder Abkürzung des Namens des Quellinstituts ist und der zweite Teil ein Akronym oder Abkürzung des Namens des Datensatzes ist. Wenn möglich erstellen wir einen Namen, der den Namen der Quelle für den Datensatz widerspiegelt. Zum Beispiel verwendeten wirdatasetID= "erdPHssta8day" für einen Datensatz vonNOAA NMFS SWFSCAbteilung Umweltforschung (ERD) die mit der zu Satelliten/PH/ gehörenden Quelle bezeichnet wirdssta/8day.
    • Wenn Sie den Namen eines Datensatzes ändern, der alte Datensatz (mit dem alten Namen) wird noch leben inERDDAP. Dies ist ein "orphan" Datensatz, weil die Spezifikation für ihn indatasets.xmlist jetzt weg. Dies muss behandelt werden:
      1. FürERDDAP™v2.19 und später musst du nichts tun.ERDDAP™diese Waisendatensätze automatisch entfernen.
      2. FürERDDAP™v2.18 und früher, Sie müssen etwas tun, um die Waisendatensätze zu entfernen: Machen Sie einen aktiven="false" Datensatz, z.B.
                <dataset type="EDDTableFromNcFiles" datasetID="*theOldName*" active="false" />  

Nach der nächsten Hauptlast Datensätze, Sie können diesen Tag nach dem alten Datensatz inaktiv entfernen.  

Wirkstoff

  • Aktiv=" Borolen " ist ein OPTIONAL Attribut innerhalb einer<Datensatz> tag indatasets.xmldie angibt, ob ein Datensatz aktiv ist (für die Verwendung inERDDAP) oder nicht.
    • Gültige Werte sind wahr (Der Standard) und falsch.
    • Da der Standard zutreffend ist, müssen Sie dieses Attribut nicht verwenden, bis Sie diesen Datensatz vorübergehend oder dauerhaft entfernen möchten.ERDDAP.
    • Wenn Sie nur einen aktiven="true"-Datensatz entfernendatasets.xml, der Datensatz wird noch aktiv seinERDDAP™aber wird nie aktualisiert werden. Ein solcher Datensatz wird ein "Orphan" sein und wird als solcher auf dem Status aufgeführt. html Webseite direkt unter der Liste der Datensätze, die nicht geladen wurden.
    • Wenn Sie active="false" setzen,ERDDAP™wird den Datensatz beim nächsten Update des Datensatzes deaktivieren. Wenn du das tust,ERDDAP™wirft keine Informationen heraus, die sie über den Datensatz gespeichert haben kann und macht sicherlich nichts mit den tatsächlichen Daten.
    • Um einen Datensatz vonERDDAP™, sieheEntfernen von Datensatz.  

** Mehrere Tags können zwischen den<Datensatz> und</dataset> Tags. **
Es gibt einige Variationen, in denen Tags erlaubt werden, durch welche Arten von Datensätzen. Siehe die Dokumentation zu einem bestimmtenArt des Datensatzesfür Details.

<zugänglich Zu >

  • ( ** <zugänglich > ** ! (#accessibleto) ist ein OPTIONAL-Tag innerhalb eines<dataset> tag, der eine komma getrennte Liste angibtRollendie Zugriff auf diesen Datensatz haben dürfen. Zum Beispiel
    <accessibleTo>RASmith, NEJones</accessibleTo>  
    • Das ist Teil vonERDDAP'Sicherheitssystemzur Einschränkung des Zugriffs auf einige Datensätze auf einige Benutzer.
    • Wenn dieser Tag nicht vorhanden ist, alle Benutzer (auch wenn sie nicht eingeloggt sind) hat Zugriff auf diesen Datensatz.
    • Wenn dieser Tag vorhanden ist, wird dieser Datensatz nur für angemeldete Benutzer sichtbar und zugänglich sein, die eine der angegebenen Rollen haben. Dieser Datensatz wird für nicht eingeloggte Benutzer nicht sichtbar sein.
    • Jeder Benutzer, der sich einloggt, erhält automatisch die Rolle\[Wer ist hier? In\], ob es<Benutzer-Tag für sie indatasets.xmloder nicht. Wenn ein bestimmter Datensatz
        <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

dann jeder Benutzer, der eingeloggt ist, wird berechtigt, auf diesen Datensatz zuzugreifen, auch wenn es nicht<Benutzer-Tag für sie indatasets.xml.  

<GrafikenZugang zu +

  • ( ** <GrafikenZugang zu> ** ! (#graphsaccessibleto) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldie feststellt, ob Grafiken und Metadaten für den Datensatz öffentlich zugänglich sind. Es bietet eine Möglichkeit, den Datensatz teilweise zu überschreiben [<zugänglichzu> (#accessibleto) Einstellung. Die zulässigen Werte sind:
    • auto -- Dieser Wert (oder das Fehlen eines<graphsAccessibleTo> tag für den Datensatz) Zugriff auf Graphen und Metadaten aus dem Datensatz mimiert den Datensatz<zugänglichTo> Einstellung. Wenn also der Datensatz privat ist, werden seine Grafiken und Metadaten privat sein. Und wenn der Datensatz öffentlich ist, werden seine Grafiken und Metadaten öffentlich sein.
    • Öffentlichkeit -- Diese Einstellung macht die Graphiken und Metadaten des Datensatzes für jeden zugänglich, selbst Benutzer, die nicht eingeloggt sind, auch wenn der Datensatz ansonsten privat ist, weil er einen<zugänglichTo> tag.  

<zugänglich ViaFiles >

Ist der Wert wahr,ERDDAP™wird es so machen, dass Benutzer die Quelldatendateien des Datensatzes durchsuchen und herunterladen könnenERDDAP'"files"System. Siehe"files"SystemDokumentationfür weitere Informationen.

Der Standardwert<zugänglichViaFiles> kommt aus<defaultAccessibleViaFiles> inSetup.xml. Es hat einen Standardwert von false, aber wir empfehlen, dass Sie dieses Tag zu Ihrem setup.xml mit einem Wert von true hinzufügen.

Empfehlung -- Wir empfehlen, alle relevanten Datensätze über das Dateisystem zugänglich zu machen, indem wir<defaultAccessibleViaFiles> to true in setup.xml weil es eine Gruppe von Benutzern gibt, für die dies der bevorzugte Weg ist, um die Daten zu erhalten. Unter anderem"files"system macht es für Benutzer leicht, zu sehen, welche Dateien zur Verfügung stehen und wann sie zuletzt geändert werden, so dass es für einen Benutzer leicht ist, seine eigene Kopie des gesamten Datensatzes zu erhalten. Wenn Sie im Allgemeinen keine Datensätze über das Dateisystem zugänglich machen möchten, setzen<defaultAccessibleViaFiles> auf false. In jedem Fall nur verwenden<zugänglichViaFiles> für die wenigen Datensätze, die Ausnahmen von der von<defaultAccessibleViaFiles> (zum Beispiel, wenn der Datensatz verwendet.ncmlDateien, die nicht wirklich nützlich für Benutzer sind) .  

<zugänglich ViaWMS>

  • ( ** <zugänglich ViaWMS> ** ! (#accessibleviawms) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmlfür alleEDDGridUnterklassen. Es kann einen Wert von wahr haben (Der Standard) oder falsch. Zum Beispiel
    <accessibleViaWMS>true</accessibleViaWMS>  

Ist der Wert falsch,ERDDAP'WMSServer wird nicht für diesen Datensatz verfügbar sein. Dies wird häufig für Datensätze verwendet, die einige Längenwerte größer als 180 haben (die technisch ungültig fürWMSDienstleistungen) , und für die Sie auch eine Variante des Datensatzes mit Längenwerten ganz im Bereich -180 bis 180 anbietenEDDGridLonPM180. Ist der Wert wahr,ERDDAP™versucht, den Datensatz überERDDAP'WMSServer. Aber wenn der Datensatz völlig ungeeignet ist fürWMS (z.B. gibt es keine Längen- oder Breitendaten) , dann wird der Datensatz nicht überERDDAP'WMSServer, unabhängig von dieser Einstellung.  

<Hinzufügen Variablen Wo >

  • (<addVariablesWhere>] (#addvariableswhere) ist ein OPTIONAL-Tag innerhalb der<dataset> tag für alle EDDTable-Datensätze.

Anfragen an einen EDDTable-Datensatz können &add Variablen Ort (" Eigenschaften Name "," Eigenschaften Wert ") , was sagtERDDAP™alle Variablen im Datensatz hinzuzufügen, wo AttributName=attributeValue in die Liste der angeforderten Variablen. Zum Beispiel, wenn ein Benutzer hinzufügen &add Variablen Ort ("ioos\_category","Wind") zu einer Abfrage,ERDDAPalle Variablen im Datensatz hinzufügen, die einenioos\_category=Wind-Attribut auf die Liste der gewünschten Variablen (zum Beispiel windSpeed, windDirection, windGustSpeed) . Eigenschaften Name und Eigenschaften Wert sind case-sensitive.

Indatasets.xml, wenn der chunk von dataset.xml für einen Datensatz

<addVariablesWhere>*attributeNamesCSV*<addVariablesWhere>  

zum Beispiel,

<addVariablesWhere>ioos\\_category,units<addVariablesWhere>  

das Datenzugriffsformular (.html Webseite) für den Datensatz ein Widget enthalten (für jedes AttributName in der Komma-getrennten Liste) rechts unterhalb der Variablenliste, mit der Benutzer einen Attributwert angeben können. Wenn der Benutzer einen Attributwert für einen oder mehrere der Attributnamen auswählt, werden diese über &add der Anfrage hinzugefügt Variablen Ort (" Eigenschaften Name "," Eigenschaften Wert ") . So, dieses tag indatasets.xmllässt Sie die Liste der Attributnamen angeben, die auf dem Data Access-Formular für diesen Datensatz angezeigt werden und macht es Benutzern leicht, &addVariables hinzuzufügen Funktioniert auf die Anfrage. Die AttributNamesCSV Die Liste ist fallempfindlich.

<HöhenmesserPerSourceUnit>

  • ( ** <HöhenmeterPerSourceUnit> ** ! (#altitudemeterspersourceunit) ist ein OPTIONAL-Tag innerhalb der<dataset> tag in datasets. xxml für EDDTableFromSOSDatensätze (Nur!) die eine Zahl angibt, die mit den Quell- oder Tiefenwerten multipliziert wird, um sie in Höhenwerte umzuwandeln (in Metern über dem Meeresspiegel) . Zum Beispiel
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>  

Dieser Tag MUST wird verwendet, wenn die vertikalen Achswerte des Datensatzes nicht Meter, positiv=up sind. Ansonsten ist es OPTIONAL, da der Standardwert 1 ist. Zum Beispiel

  • Wird die Quelle bereits in Metern über dem Meeresspiegel gemessen, verwenden Sie 1 (oder verwenden Sie diesen Tag nicht, da 1 der Standardwert ist) .
  • Wenn die Quelle in Metern unterhalb des Meeresspiegels gemessen wird, verwenden Sie -1.
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>
  • Wird die Quelle in km über dem Meeresspiegel gemessen, verwenden Sie 0,001.  

<defaultDataQuery>

  • ( ** <defaultDataQuery> ** ! (#defaultdataquery) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldas sagtERDDAP™die angegebene Abfrage verwenden (der Teil der URL nach dem "?") wenn die .html-Datei Typ (das Datenzugriffsformular) wird ohne Anfrage angefordert.
    • Das brauchen Sie wahrscheinlich selten.
    • Sie müssen XML-encode (nicht prozentualer Code) die Standardabfragen, da sie in einem XML-Dokument sind. Zum Beispiel wird & ,<wird<, > wird > .
    • Bitte überprüfen Sie Ihre Arbeit. Es ist einfach, einen Fehler zu machen und nicht zu bekommen, was Sie wollen.ERDDAP™wird versuchen, Ihre Fehler zu reinigen -- aber nicht darauf verlassen, da\*wie\*es wird aufgeräumt kann sich ändern.
    • Bei Gridap-Datensätzen ist es üblich, einen anderen Standardtiefe- oder Höhendimensionswert anzugeben. (zum Beispiel,\[0)\]anstatt\[Letzter Beitrag\]) . In jedem Fall sollten Sie immer alle Variablen auflisten, immer dieselben Dimensionswerte für alle Variablen verwenden, und fast immer verwenden\[0)\],\[Letzter Beitrag\], oder\[0:last\]für die Dimensionswerte. Zum Beispiel:
        <defaultDataQuery>u\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\],v\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]</defaultDataQuery>
    • Fürtabledapdatasets, wenn Sie keine Einschränkung angeben, wird die Anfrage den gesamten Datensatz zurückgeben, der je nach Datensatz unpraktisch groß sein kann. Wenn Sie keine Einschränkungen festlegen möchten, anstatt leer zu sein<defaultDataQuery> (die die gleiche ist, wie keine Angabe eines Standards Datenblatt) , Sie müssen explizit alle Variablen, die Sie in der defaultDataQuery enthalten möchten, auflisten.
    • Fürtabledapdatasets, die häufigste Verwendung dieser ist, einen anderen Standardzeitbereich anzugeben (relativ zu max (Zeit) , z.B. &time>=max (Zeit) -1day, oder relativ zu jetzt, z.B. &time>=now-1 Tag) . Denken Sie daran, dass die Anforderung keine Datenvariablen ist die gleiche wie die Angabe aller Datenvariablen, so dass in der Regel können Sie einfach die neue Zeitkonstrat angeben. Zum Beispiel:
        <defaultDataQuery>&amp;time&gt;=max(time)-1day</defaultDataQuery>  

oder

    <defaultDataQuery>&amp;time&gt;=now-1day</defaultDataQuery>  

<StandardGraphQuery>

  • ( ** <StandardGraphQuery> ** ! (#defaultgraphquery) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldas sagtERDDAP™die angegebene Abfrage verwenden (der Teil der URL nach dem "?") wenn die .graph-Datei Typ (Das Bild machen) wird ohne Anfrage angefordert.
    • Das brauchen Sie wahrscheinlich selten.
    • Sie müssen XML-encode (nicht prozentualer Code) die Standardabfragen, da sie in einem XML-Dokument sind. Zum Beispiel wird & ,<wird<, > wird > .
    • Bitte überprüfen Sie Ihre Arbeit. Es ist einfach, einen Fehler zu machen und nicht zu bekommen, was Sie wollen.ERDDAP™wird versuchen, Ihre Fehler zu reinigen -- aber nicht darauf verlassen, da\*wie\*es wird aufgeräumt kann sich ändern.
    • Bei Gridap-Datensätzen ist die häufigste Verwendung dieser Daten eine andere Standardtiefe oder Höhendimensionswert anzugeben. (zum Beispiel,\[0)\]anstatt\[Letzter Beitrag\]) und/oder anzugeben, dass eine bestimmte Variable grafisch dargestellt wird. In jedem Fall werden Sie fast immer verwenden\[0)\],\[Letzter Beitrag\], oder\[0:last\]für die Dimensionswerte. Zum Beispiel:
        <defaultGraphQuery>temp\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]&amp;.draw=surface&amp;.vars=longitude|latitude|temp</defaultGraphQuery>  
    (aber alles auf eine Linie setzen)
    • Fürtabledapdatasets, wenn Sie keine Einschränkung angeben, wird die Anfrage den gesamten Datensatz, der je nach Datensatz eine lange Zeit dauern kann, graphieren.
    • Fürtabledapdatasets, die häufigste Verwendung dieser ist, einen anderen Standardzeitbereich anzugeben (relativ zu max (Zeit) , z.B. &time>=max (Zeit) -1day, oder relativ zu jetzt, z.B. &time>=now-1 Tag) . Denken Sie daran, dass die Anforderung keine Datenvariablen ist die gleiche wie die Angabe aller Datenvariablen, so dass in der Regel können Sie einfach die neue Zeitkonstrat angeben. Zum Beispiel:
        <defaultGraphQuery>&amp;time&gt;=max(time)-1day</defaultGraphQuery>  

oder

    <defaultGraphQuery>&amp;time&gt;=now-1day</defaultGraphQuery>  

<DimensionValuesInMemory>

  • ( ** <Dimension WerteInMemory> ** ! (#dimensionvaluesinmemory) (wahr (Der Standard) oder falsch) ist ein OPTIONAL und selten verwendete tag innerhalb der<dataset> tag für alleEDDGridDatensatz, der sagtERDDAP™wobei die Quellwerte der Abmessungen beibehalten werden sollen (auch bekannt alsaxisVariableS) :

    • true = im Speicher (die schneller ist, aber mehr Speicher verwendet)
    • false = auf der Festplatte (die langsamer ist, aber keinen Speicher verwendet)

Zum Beispiel

<dimensionValuesInMemory>false</dimensionValuesInMemory>  

Sie sollten dies nur mit dem nicht-Standard-Wert von false verwenden, wenn SieERDDAP™hat viele Datensätze mit sehr großen Abmessungen (z.B. Millionen von Werten, z.B. inEDDGridVonAudioFiles Datensätze) undERDDAP's In Use Speichernutzung ist immer zu hoch. Sehen Sie den Speicher: derzeit mit Zeile an\[IhreDomain\]/erddap/status.htmlzu überwachenERDDAP™Speichernutzung.  

<DateiTableInMemory>

  • ( ** <DateiTableInMemory> ** ! (#filetableinmemory) (wahr oder falsch (Der Standard) ) ist ein OPTIONAL-Tag innerhalb der<dataset> tag für alleEDDGridVonFiles und EDDTable AusFiles-Datensatz, der sagtERDDAP™wo die Datei bleibtTabelle (die Informationen über jede Quelldatendatei hat) :

    • true = im Speicher (die schneller ist, aber mehr Speicher verwendet)
    • false = auf der Festplatte (die langsamer ist, aber keinen Speicher verwendet)

Zum Beispiel

<fileTableInMemory>true</fileTableInMemory>  

Wenn Sie dies für einen beliebigen Datensatz festlegen, beachten Sie bitte den Speicher:\[IhreDomain\]/erddap/status.htmlum sicherzustellen, dassERDDAP™hat noch viel freies Gedächtnis.  

<fgdcFile>

  • ( ** <FgdcFile> ** ! (#fgdcfile) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldas sagtERDDAP™eine vorgefertigte FGDC-Datei verwenden, anstattERDDAP™versuchen, die Datei zu erzeugen. Verwendung:
    <fgdcFile>*fullFileName*</fgdcFile>  

voll Dateiname kann sich auf eine lokale Datei beziehen (irgendwo auf dem Dateisystem des Servers) oder die URL einer Remote-Datei. wenn voll Dateiname \="" oder die Datei wird nicht gefunden, der Datensatz hat keine FGDC-Metadaten. Dies ist also auch dann sinnvoll, wenn Sie die FGDC-Metadaten für einen bestimmten Datensatz unterdrücken möchten. Oder, Sie können setzen<fgdcActive>false</fgdcActive> in setup.xml zu sagenERDDAP™keine FGDC-Metadaten für jeden Datensatz anbieten.  

<Iso19115 Datei >

  • ( ** <Iso19115File> ** ! (#iso19115file) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldas sagtERDDAP™eine vorgefertigte ISO 19115-Datei anstelle vonERDDAP™versuchen, die Datei zu erzeugen. Verwendung:
    <iso19115File>*fullFileName*</iso19115File>  
    voll Dateiname kann sich auf eine lokale Datei beziehen (irgendwo auf dem Dateisystem des Servers) oder die URL einer Remote-Datei. wenn voll Dateiname \="" oder die Datei wird nicht gefunden, der Datensatz hat keine ISO 19115 Metadaten. Dies ist also auch dann sinnvoll, wenn Sie die ISO 19115-Metadaten für einen bestimmten Datensatz unterdrücken möchten. Oder, Sie können setzen<Iso19115Wirkstoff>false</iso19115Aktiv> in setup.xml zu sagenERDDAP™keine ISO 19115 Metadaten für jeden Datensatz anbieten.  

<MatchAxis NDigits>

  • ( ** <MatchAxisNDigits> ** ! (#matchaxisndigits) ist ein OPTIONAL-Tag innerhalb einesEDDGrid <Datensatz> Tag fürEDDGridDatensätze, die Aggregationen sind, z.B. Aggregationen von Dateien. Jedes Mal, wenn der Datensatz neu geladen wird,ERDDAP™prüft, ob die Achsenwerte jeder Komponente der Aggregation gleich sind. Die Genauigkeit der Prüfung wird durch dieMatchAxisNDigits, die die Gesamtzahl der Ziffern angibt, die bei der Prüfung von doppelten Genauigkeits-Achsenwerten, 0 - 18 übereinstimmen müssen (Der Standard) . Beim Testen von Float-Achsenwerten wird der Test mit MatchAxisNDigits/2-stelligen durchgeführt. Ein Wert von 18 oder mehr sagtEDDGrideinen genauen Test durchzuführen. Ein Wert von 0 sagtEDDGridkeine Prüfung durchzuführen, die nicht empfohlen wird, außer wie unten beschrieben.

ObwohlEDDGriddie Komponenten der Aggregation leicht unterschiedliche Achswerte aufweisen können, ist dem Benutzer nur ein Satz von Achswerten dargestellt. Der Satz ist von der gleichen Komponente, die die Quell-Metadaten des Datensatzes liefert. Zum Beispiel,EDDGridFromFiles-Datensätze, die von den<metadataFrom> Einstellung (Standardeinstellungen) .

Die Verwendung von matchAxisNDigits\=0 wird in den meisten Fällen stark entmutigt, weil sie alle Überprüfungen ausschaltet. Auch eine minimale Überprüfung ist nützlich, da sie dafür sorgt, dass die Komponenten zur Aggregation geeignet sind. Wir gehen davon aus, dass alle Komponenten geeignet sind, aber das ist nicht immer so. Dies ist also ein wichtiger Sanitätstest. Selbst Werte der MatchAxisNDigits1, 2, 3 oder 4 werden entmutigt, da die unterschiedlichen Achswerte oft angeben, dass die Bauteile erzeugt wurden (binden?) eine andere Weise und sind somit nicht zur Aggregation geeignet.

Es gibt einen Fall, wo die Verwendung von matchAxisNDigits\=0 nützlich und empfohlen ist: mit Aggregationen von Remote-Dateien, z.B. Daten in S3-Buckets. In diesem Fall, wenn der Datensatz cacheFromUrl, cacheSizeGB, matchAxisNDigits\=0 verwendet, und dieEDDGridFromFiles System fürAggregat über Dateinamen, dannEDDGridmuss nicht alle Remote-Dateien lesen, um die Aggregation zu tun. Dies ermöglicht Datensätze aus Daten in S3 Buckets sehr schnell laden (im Gegensatz zu absurd langsam, wennEDDGridmuss alle Dateien herunterladen und lesen) .

<nThreads>

  • Beginnen mitERDDAP™Version 2.00, wenn jede Unterklasse von EDDTableFromFiles oderEDDGridliest Daten aus seiner Quelle, es kann ein Stück Daten lesen (z.B. eine Quelldatei) zu einem Zeitpunkt (in einem Gewinde) (Das ist der Standard) oder mehr als ein Stück Daten (z.B., 2+ Quelldateien) zu einem Zeitpunkt (in 2 oder mehr Fäden) bei der Bearbeitung jeder Anfrage.  
    • Artikel von Thumb: Für die meisten Datensätze auf den meisten Systemen verwenden Sie nThreads=1, den Standard. Wenn Sie einen leistungsfähigen Computer haben (viele CPU-Kerne, viel Speicher) , dann nThreads auf 2, 3, 4 oder höher (aber nie mehr als die Anzahl der CPU-Kerne im Computer) für Datensätze, die profitieren könnten:

      • Die meisten EDDTableFromFiles-Datensätze werden profitieren.
      • Datensätze, bei denen etwas eine Verzögerung vor einem Bruch von Daten verursacht, werden zum Beispiel profitieren:
        • Datensätze mitaußenkomprimiert (z.B.,.gz) bindend (z.B.,.nc) Dateien, weilERDDAP™muss die ganze Datei dekomprimieren, bevor sie die Datei lesen kann.
        • Datensätze, dieCacheSizeGB, weilERDDAP™muss oft die Datei herunterladen, bevor sie es lesen kann.
        • Datensätze mit Datendateien, die auf einem hochbandbreiten parallelen Dateisystem gespeichert werden, weil es schnellere Daten liefern kann, wenn gewünscht. Beispiele für parallele Dateisysteme sindJBOD,PNFS,GlusterFS, Amazon S3, und Google Cloud Storage.  

Warnung: Bei Verwendung von nThreads>1, achten Sie aufERDDAP' s Speichernutzung, Gewindenutzung und Gesamtreaktion (sieheERDDAPStatusseite) . Hier finden Sie Kommentare zu diesen Themen.  

  • Für einen bestimmten Datensatz kann diese nThreads-Einstellung von verschiedenen Orten kommen:

    • Wenndatasets.xmlchunk für einen Datensatz<nThreads> tag (innerhalb der<dataset> tag, nicht als globales Attribut) mit einem Wert >= 1 wird dieser Wert von nThreads verwendet. So können Sie für jeden Datensatz eine andere Anzahl angeben.
    • Ansonsten, wenndatasets.xmleine<nTableThreads> tag (für EDDTable VonFiles Datensätze) oder<nGridThreads> tag (fürEDDGridDatensätze) mit einem Wert >= 1, außerhalb eines<dataset> tag, dieser Wert von nThreads wird verwendet.
    • Ansonsten wird 1 Thread verwendet, was eine sichere Wahl ist, da es die kleinste Menge an Speicher verwendet.  

FürOriginalERDDAP™Installation, wir verwenden <nTableThreads> 6</nTableThreads> (Es ist ein mächtiger Server.) Difficult-Anfragen nehmen jetzt 30 % der vorherigen Zeit.  

Überwachen der Ressourcennutzung

Wenn Sie mit verschiedenen nThreads-Einstellungen experimentieren (und vielleicht schwierige Probenanträge zu IhremERDDAP) , Sie können die Ressourcennutzung Ihres Computers überwachen:

  • Auf Macs, verwenden Finder : Anwendungen : Utilities : Activity Monitor
  • Auf Linux verwenden Sie top
  • Unter Windows 10 verwenden Strg + Shift + Esc Task-Manager öffnen  
Warnung: Verminderte Verantwortung

isoliert,ERDDAP™wird eine Anforderung an einen Datensatz mit einer höheren nThreads-Einstellung schneller erfüllen als wenn nThreads=1 ist. Aber während diese Anfrage bearbeitet wird, werden andere Anfragen von anderen Benutzern etwas überfüllt und eine langsamere Antwort erhalten. Auch, wennERDDAP™reagiert auf eine bestimmte Anfrage, andere Rechenressourcen (z.B. Laufwerkszugriff, Netzwerkbandbreite) kann begrenzen, insbesondere bei höheren nThreads-Einstellungen. So mit höheren nThreads-Einstellungen wird die Gesamtsystem-Responsivität schlechter sein, wenn mehrere Anfragen bearbeitet werden -- dies kann sehr ärgerlich für Benutzer sein! Dadurch: nie nThreads auf mehr als die Anzahl der CPU-Kerne im Computer gesetzt. nThreads=1 ist die fairste Einstellung seit jeder Anfrage (unter mehreren gleichzeitigen Anfragen) wird einen gleichen Anteil an Rechenressourcen erhalten. Aber je mächtiger der Computer, desto weniger wird dies ein Problem sein.  

Warnung: Höherer Speicher VerwendungEDDGridDatensätze

Speichernutzung während der Bearbeitung Anfragen ist direkt proportional zur nThreads-Einstellung. Eine vernünftig sichere Faustregel ist: Sie müssen festlegenERDDAPSpeichereinstellungenmindestens 2GB + (2GB \* nThreads) . Einige Anfragen an einige Datensätze benötigen mehr Speicher als das. Zum Beispiel nThreads=3 für jedeEDDGriddataset bedeutet, dass die -Xmx-Einstellung mindestens -Xmx8000M betragen sollte. Wenn diese Speichereinstellung größer ist als 3/4 der physische Speicher des Computers, verringern Sie die nThreads-Einstellung, so dass Sie die Speichereinstellung abnehmen können.

Die Speichernutzung von Threads-Verarbeitungsanfragen an EDDTable-Datensätze ist fast immer niedriger, da die Dateien in der Regel viel kleiner sind. Wenn jedoch ein bestimmter EDDTable-Datensatz enorm ist (z.B., >=1 GB) Datendateien, dann gelten die obigen Kommentare auch für diese Datensätze.

Was auch immer die nThreads Einstellung, halten Sie ein Auge auf die Speichernutzung Statistiken auf IhrerERDDAPStatusseite. Sie sollten nie in der Nähe kommen, um die Speichernutzung inERDDAP; andernfalls werden schwerwiegende Fehler und Fehler auftreten.

Temporär eingestellt auf 1

Ist die aktuelle Speichernutzung sogar leicht hoch,ERDDAP™wird nThreads für diese Anfrage auf 1 setzen. SoERDDAP™speichert Speicher, wenn Speicher knapp ist.  

Diminishing Returns

Es gibt abnehmende Rückkehr zur Erhöhung der nThreads-Einstellung: 2 Fäden werden viel besser als 1 sein (wenn wir dynamische Übertaktung ignorieren) . Aber 3 wird nur ein Stück besser als 2 sein. Und 4 werden nur geringfügig besser sein als 3.

Bei einem Test einer schwierigen Abfrage auf einen großen EDDTable-Datensatz betrug die Ansprechzeit mit 1, 2, 3, 4, 5, 6 Fäden 38, 36, 20, 18, 13, 11 Sekunden. (Auf diesem Server verwenden wir nun nTableThreads=6.)

nThreads=2: Obwohl es oft einen erheblichen Vorteil gibt, nThreads=2 anstelle von nThreads=1 anzugeben, wird es oft nicht viel Unterschied in der Taktzeit machen, die benötigt wird, um auf die Anfrage eines bestimmten Benutzers zu reagieren. Der Grund ist: mit nThreads=1 werden die meisten modernen CPU's oftdynamisch übertakten (Turbo-Boost) um die Taktgeschwindigkeit der CPU vorübergehend zu erhöhen. Mit nThreads=1 arbeitet der eine Kern oft mit einer höheren Taktgeschwindigkeit als jeder der beiden Kerne, wenn Sie nThreads=2 verwendet haben. Unabhängig davon halten wir es immer noch besser, nThreads=2 anstatt nThreads=1 zu verwenden, da diese Einstellung bessere Ergebnisse in einer größeren Vielfalt von Situationen liefern wird. Und natürlich, wenn Ihr Computer über ausreichende CPU-Kerne verfügt, sollte eine noch höhere nThreads-Einstellung bessere Ergebnisse liefern.

Wie oben erläutert, können sehr hohe nThreads-Einstellungen zu schnelleren Antworten auf einige Anfragen führen, aber das Risiko von insgesamt verringertERDDAP™Reaktionsfähigkeit und hoher Speichereinsatz (wie oben erwähnt) Während diese Anträge bearbeitet werden, ist es in der Regel keine gute Idee.

CPU Kerne

Sie sollten nie nThreads auf eine Anzahl größer als die Anzahl der CPU-Kerne in der CPU des Computers einstellen. Im Wesentlichen haben alle modernen CPUs mehrere Kerne (z.B. 2, 4 oder 8) . Einige Computer haben sogar mehrere CPUs (z.B. 2 CPUs \* 4 Cores/CPU = 8 CPU Cores) . Um herauszufinden, wie viele CPUs und Cores ein Computer hat:

  • Auf Macs, verwenden Optionsschlüssel : Apple Menu : Systeminformationen
  • Verwenden Sie auf Linux Katze /proc/cpuinfo
  • Unter Windows 10 verwenden Strg + Shift + Esc zu öffnen Task-Manager : Leistung (Logische Prozessoren zeigen die Gesamtzahl der CPU-Kerne)

Ja, die meisten Prozessoren sagen heutzutage, dass sie 2 Fäden pro Kern unterstützen (überHyper-Threading) , aber die 2 Threads teilen Rechenressourcen, so dass Sie nicht zweimal den Durchsatz auf einer CPU unter schweren Belastung sehen. Ein Computer mit einer CPU mit 4 Kernen kann beispielsweise behaupten, bis zu 8 Threads zu unterstützen, aber Sie sollten nThreads=4 nie überschreiten, indemERDDAP. Denken Sie daran:

  • Die nThreads Einstellung inERDDAP™ist pro Anfrage.ERDDAP™oft behandelt mehrere Anfragen gleichzeitig.
  • ERDDAP™macht andere Dinge als Prozessanfragen, z.B. Reload-Datensätze.
  • WannERDDAP™reagiert auf eine bestimmte Anfrage, andere Rechenressourcen (z.B. Laufwerkszugriff, Netzwerkbandbreite) kann begrenzen. Je höher du nThreads gesetzt hast, desto wahrscheinlicher werden diese anderen Ressourcen maximal ausgeschöpft und verlangsamenERDDAPDie allgemeine Reaktionsfähigkeit.
  • Das Betriebssystem macht andere Dinge als laufenERDDAP.

So ist es am besten, die nThreads-Einstellung nicht auf mehr als die Anzahl der Kerne in der Computer-CPU einzustellen.  

Ihre Milde Mai Vary (YMMV)

Die Ergebnisse verschiedener nThreads-Einstellungen werden für verschiedene Anfragen an verschiedene Datensätze auf verschiedenen Systemen stark variieren. Wenn Sie wirklich die Wirkung verschiedener nThreads-Einstellungen kennen wollen, führen Sie realistische Tests durch.  

Warum nThreads pro Anfrage?

Ich höre einige von Ihnen denken: "Warum ist nThreads pro Anfrage? Wenn ich dies kodierte, würde ich einen permanenten Worker Thread Pool und eine Messaging-Quue für eine bessere Leistung verwenden." Das Problem bei der Verwendung eines Arbeitsfadenpools und einer Messaging-Warte ist, dass eine schwierige Anfrage die Warteschlange mit zahlreichen langsamen Aufgaben überfluten würde. Das würde effektiv blockierenERDDAP™von der bereits begonnenen Arbeit an Aufgaben im Zusammenhang mit anderen Anfragen bis zur ursprünglichen Anfrage (im Wesentlichen) fertig. So würden sogar einfache Folgewünsche super langsam reagieren.ERDDAPDie Verwendung von nThreads pro Anfrage führt zu einer viel faireren Nutzung von Rechenressourcen.  

nThreads vs. Mehrere Worker Computer

Leider,ERDDAPDas nThreads-System wird nie so effektiv sein wie die wahre Parallelisierung über mehrere Worker-Computer, mit jeder Arbeit an einem Bruch von Daten, in der Weise, dass Hadoop oder Apache Spark in der Regel verwendet werden. Wenn die Aufgabe wirklich parallelisiert / auf mehrere Computer verteilt ist, kann jeder Computer alle seine Ressourcen auf seinem Teil der Aufgabe verwenden. mitERDDAP's nThreads System, jeder der Threads ist konkurrieren für die Bandbreite des gleichen Computers, Laufwerke, Speicher, etc. Leider haben die meisten von uns nicht die Ressourcen oder Mittel zur Einrichtung oder sogar Miete (auf Amazon Web Services (AWS) oder Google Cloud Platform (GCP) ) massive Gitter von Computern. Im Gegensatz zu einer relationalen Datenbank, die erlaubt ist, die Ergebniszeilen in beliebiger Reihenfolge zurückzugeben,ERDDAP™verspricht, die Ergebniszeilen in einer konsistenten Reihenfolge zurückzugeben. Diese Strenge machtERDDAP's nThreads Implementierung weniger effizient. Aber...ERDDAPnThreads ist in vielen Fällen nützlich.

Es gibt jedoch Möglichkeiten,ERDDAP™Skala, um eine große Anzahl von Anfragen schnell zu handhaben, indem einnetz/cluster/FöderationERDDAPS.  

<Paletten >

  • Beginnen mitERDDAP™Version 2.12,datasets.xmlkann eine<paletten> tag (innerhalb<erdddapDatasets>), die die<paletten> tag Wert von messages.xml (oder revertiert auf den Nachrichten.xml-Wert, wenn der Tag indatasets.xmlist leer) . Damit können Sie die Liste der verfügbaren Paletten ändern, währendERDDAP™läuft. Es lässt Sie auch eine Änderung vornehmen und haben es bestehen, wenn Sie eine neue Version vonERDDAP. WARNING: Die indatasets.xmlmuss eine Überlagerung der in message.xml aufgeführten Paletten sein; andernfallsERDDAP™wird eine Ausnahme werfen und die Verarbeitung stoppendatasets.xml. Dies stellt sicher, dass alleERDDAP™Installationen unterstützen zumindest die gleichen Kernpaletten. WARNING:ERDDAP™prüft, ob die in message.xml angegebenen Palettendateien tatsächlich vorhanden sind, aber es überprüft nicht die indatasets.xml. Es ist Ihre Verantwortung, sicherzustellen, dass die Dateien vorhanden sind.

Auch beginnend mitERDDAP™Version 2.12, wenn Sie ein cptfiles Unterverzeichnis imERDDAP™Inhaltsverzeichnis,ERDDAP™alle \*.cpt-Dateien in diesem Verzeichnis in das Verzeichnis kopieren\[Tomcat\]/webapps/erdap/WEB-INF/cptfiles Verzeichnis jedes MalERDDAP™beginnt. Wenn Sie also benutzerdefinierte Cpt-Dateien in diesem Verzeichnis setzen, werden diese Dateien vonERDDAP™, ohne zusätzlichen Aufwand auf Ihrem Teil, auch wenn Sie eine neue Version installierenERDDAP.

WARNING: Wenn Sie benutzerdefinierte Paletten zu Ihrem hinzufügenERDDAP™und du hastEDDGridFromErddap und/oder EDDTableFromErddap-Datensätze in IhremERDDAP™, dann werden Benutzer Ihre benutzerdefinierte Palette Optionen auf derERDDAP™Machen Sie ein Graph-Webseiten, aber wenn der Benutzer versucht, sie zu verwenden, erhalten sie ein Diagramm mit dem Standard (in der Regel Regenbogen) palette. Dies liegt daran, dass das Bild von der Fernbedienung gemacht wirdERDDAP™die nicht die benutzerdefinierte Palette hat. Die einzigen Lösungen sind jetzt die E-Mail der FernbedienungERDDAP™Administrator, um Ihre benutzerdefinierten Paletten zu seiner/ihr hinzufügenERDDAPoder E-Mail Chris. John bei noaaa.gov zu fragen, dass die Paletten dem Standard hinzugefügt werdenERDDAP™Verteilung.

<überChange>

  • ( ** <aufChange> ** ! (#onchange) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmldie eine Aktion angibt, die bei der Erstellung dieses Datensatzes durchgeführt wird (wennERDDAP™wird neu gestartet) und wann immer sich dieser Datensatz in irgendeiner Weise ändert.
    • Derzeit, fürEDDGridUnterklassen, jede Änderung der Metadaten oder einer Achsgröße (zum Beispiel einen neuen Zeitpunkt für nahezu Echtzeitdaten) wird als eine Änderung betrachtet, aber ein Nachladen des Datensatzes wird nicht als eine Änderung betrachtet (von selbst) .
    • Derzeit gilt für EDDTable-Unterklassen jedes Nachladen des Datensatzes als Änderung.
    • Derzeit sind nur zwei Arten von Aktionen erlaubt:
      • " http://" oder " https://" -- Wenn die Aktion mit " beginnt http://" oder " https://" ,ERDDAP™wird sendenHTTP GETBitte an die angegebene URL. Die Antwort wird ignoriert. Zum Beispiel, die URL könnte einigen anderen Web-Service sagen, etwas zu tun.
        • Wenn die URL ein Abfrageteil hat (nach dem "?") , es muss schon seinProzent kodiert. Sie müssen spezielle Zeichen in den Zwängen kodieren (andere als die ersten „&“ und die wichtigsten'='in Zwängen) in die Form %HH, wobei HH der zweistellige hexadezimale Wert des Zeichens ist. Normalerweise müssen Sie nur ein paar der Pünktlichkeitszeichen umwandeln: % in %25, & in %26, " in %22,<in %3C, = in %3D, > in %3E, + in %2B,|in %7C,\[in %5B,\]in %5D, Raum in %20, und alle Zeichen über #127 in ihr UTF-8-Formular umwandeln und dann prozentual jeden Byte des UTF-8-Formulars in das %HH-Format kodieren (einen Programmierer um Hilfe bitten) . Zum Beispiel, &stationID>= 41004 undstationID%3E =%2241004%22 Die prozentuale Kodierung ist in der Regel erforderlich, wenn Sie aufERDDAPüber eine andere Software als einen Browser. Browser behandeln in der Regel prozentuale Kodierung für Sie. In einigen Situationen müssen Sie Prozent kodieren alle Zeichen andere als A-Za-z0-9\_-!.~ ' () \*, aber noch nicht codieren die anfängliche '&' oder die Haupt'='in Zwängen. Programmiersprachen haben dazu Werkzeuge (siehe z.B.Java'java.net.URLEncoderundJavaScript's [encodeURIComponent()! ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) und es gibt Webseiten, die prozentual encode/decode für Sie.
        • Seitdatasets.xmlist eine XML-Datei, Sie müssen auch kodieren ALL '&', '<', und '>' in der URL als '&amp', '<', und '>' nach Prozent Codierung.
        • Beispiel: Für eine URL, die Sie in einen Browser eingeben könnten: https://www.company.com/webService?department=R%26D&param2=value2
          Sie sollten eine<aufChange> tag via (auf einer Linie)
            <onChange>https://www.company.com/webService?department=R%26D&amp;param2=value2</onChange>
      • Mailto: -- Wenn die Aktion mit "mailto:" beginnt,ERDDAP™sendet eine E-Mail an die nachfolgende E-Mail-Adresse, die angibt, dass der Datensatz aktualisiert/verändert wurde. Zum Beispiel:<aufChange>mailto:john.smith@company.com</onChange> Wenn Sie einen guten Grund habenERDDAP™um eine andere Art von Aktion zu unterstützen, senden Sie uns eine E-Mail, die beschreibt, was Sie wollen.
    • Dieser Tag ist OPTIONAL. Es kann so viele dieser Tags geben, wie Sie wollen. Verwenden Sie eine dieser Tags für jede Aktion durchgeführt werden.
    • Dies ist analogERDDAP's E-Mail/URL Abonnement-System, aber diese Aktionen werden nicht persistent gespeichert (d.h. sie werden nur in einem EDD-Objekt gespeichert) .
    • Um ein Abonnement zu entfernen, entfernen Sie einfach die<aufChange> tag. Die Änderung wird beim nächsten erneuten Laden des Datensatzes bemerkt.  

<reloadEveryNMinutes>

  • ( ** <Nachladen AllNMinutes> ** ! (#reloadeverynminutes) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmlvon fast allen Datensätzen, die angeben, wie oft der Datensatz neu geladen werden soll. Zum Beispiel
    <reloadEveryNMinutes>60</reloadEveryNMinutes>
    • Generell ändern sich häufig Datenmengen (zum Beispiel neue Datendateien erhalten) sollte häufig wieder geladen werden, beispielsweise alle 60 Minuten.

    • Datensätze, die sich häufig ändern, sollten selten wieder geladen werden, beispielsweise alle 1440 Minuten (täglich) oder 10080 Minuten (wöchentlich) .

    • Dieser Tag ist OPTIONAL, aber empfohlen. Der Standard ist 10080.

    • Ein Beispiel ist:<reloadEveryNMinutes>1440</Entladung AllNMinutes>

    • Wenn ein Datensatz neu geladen wird, alle Dateien im BigParentDirectory /cache/ datasetID Verzeichnis wird gelöscht.

    • Egal, auf was dies gesetzt ist, ein Datensatz wird nicht häufiger geladen als<lastDatasetsMinutes> (Standard = 15) , wie inSetup.xml. Wenn Sie also möchten, dass Datensätze sehr häufig neu geladen werden, müssen Sie beide reloadEveryNMinutes und loadDatasets festlegen MinMinuten zu kleinen Werten.

    • Setzen Sie nicht reloadEveryNMinutes auf den gleichen Wert wie loadDatasets MinMinutes, weil die verstrichene Zeit wahrscheinlich sein wird (beispielsweise) 14:58 oder 15:02, so wird der Datensatz nur in etwa der Hälfte der großen Reloads neu geladen. Stattdessen verwenden Sie eine kleinere (beispielsweise 10) oder größer (beispielsweise 20) Nachladen JederNMinutes Wert.

    • Unabhängig von reloadEveryNMinutes, können Sie manuell sagenERDDAP™einen bestimmten Datensatz so schnell wie möglich über eineFlaggen.

    • Für anspruchsvolle Programmierer -- InERDDAP™, das Nachladen aller Datensätze wird durch zwei einzelne Zielfäden gehandhabt. Ein Thread leitet ein kleineres Nachladen ein, wenn es eine Flag-Datei oder ein großes Nachladen findet (die alle Datensätze überprüft, um zu sehen, ob sie neu geladen werden müssen) . Der andere Faden übernimmt die eigentliche Nachladung der Datensätze zu einem Zeitpunkt. Diese Threads arbeiten im Hintergrund, um sicherzustellen, dass alle Datensätze aktuell gehalten werden. Der Faden, der tatsächlich die Reloads vorbereitet eine neue Version eines Datensatzes dann tauscht es in Platz (die alte Version atomar ersetzen) . So ist es sehr möglich, dass die folgende Folge von Ereignissen auftritt. (Das ist gut.) :

      1. ERDDAP™startet das Nachladen eines Datensatzes (eine neue Version erstellen) im Hintergrund.
      2. Der Benutzer 'A' stellt eine Anfrage an den Datensatz.ERDDAP™verwendet die aktuelle Version des Datensatzes, um die Antwort zu erstellen. (Das ist gut. Es gab keine Verzögerung für den Benutzer, und die aktuelle Version des Datensatzes sollte nie sehr stabil sein.)
      3. ERDDAP™beendet die Erstellung der neuen neu geladenen Version des Datensatzes und Swaps, die neue Version in die Produktion. Alle nachfolgenden neuen Anfragen werden von der neuen Version des Datensatzes bearbeitet. Für Konsistenz wird die Anfrage des Benutzers A noch von der Originalversion ausgefüllt.
      4. Benutzer 'B' stellt eine Anfrage an den Datensatz undERDDAP™verwendet die neue Version des Datensatzes, um die Antwort zu erstellen.
      5. Letztendlich werden die Anfragen von Benutzer A und Benutzer B abgeschlossen. (vielleicht A's beendet zuerst, vielleicht B's beendet zuerst) .

Ich höre jemanden, der sagt: "Nur zwei Drittel! Ha! Das ist lahm! Er sollte das so einrichten, dass das Nachladen von Datensätzen so viele Threads verwendet, wie sie benötigt werden, so dass alles schneller und mit wenig oder ohne Verzögerung getan wird." Ja und nein. Das Problem ist, dass das Laden von mehr als einem Datensatz zu einer Zeit mehrere harte neue Probleme schafft. Sie müssen alle gelöst oder behandelt werden. Das aktuelle System funktioniert gut und hat überschaubare Probleme (z.B. das Potenzial für eine Verzögerung, bevor eine Flagge bemerkt wird) . (Wenn Sie Hilfe benötigen, um sie zu verwalten, sehen Sie unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.) Der VerwandteAktualisierung AllNMillis. System funktioniert innerhalb von Antwortfäden, so kann und führt es dazu, dass mehrere Datensätze aktualisiert werden (nicht die volle Nachladung) gleichzeitig.

Proactive vs. Reactive

ERDDAP's Reload-System ist proaktiv -- Datensätze werden bald nach ihrem Reload neu geladen EveryNMinutes Zeit ist auf (d.h., sie werden "stale", aber nie sehr stale) , ob der Datensatz Anfragen von Benutzern erhält oder nicht. So.ERDDAP™datasets sind immer aktuell und gebrauchsfertig. Dies steht im Gegensatz zum reaktiven Ansatz von THREDDS: Die Anfrage eines Nutzers sagt THREDDS, ob ein Datensatz gestaffelt ist (es kann sehr stale) . Wenn es stale, THREDDS macht den Benutzer warten (oft für ein paar Minuten) während der Datensatz neu geladen wird.

<Aktualisierung AlleNMillis>

  • ( ** <UpdateEveryNMillis> ** ! (#updateeverynmillis) ist ein OPTIONAL-Tag innerhalb eines<Datensatz> tag indatasets.xmlvon einigen Datensatztypen, die helfenERDDAP™Arbeit mit Datensätzen, die sich sehr häufig ändern (wie oft jede Sekunde) . Im Gegensatz zuERDDAPRegelmäßig, proaktiv, [<Nachladen AllNMinutes>] (#reloadeverynminutes) System zum vollständigen Nachladen jedes Datensatzes, dieses OPTIONAL Zusatzsystem ist reaktiv (ausgelöst durch eine Benutzeranforderung) und schneller, weil es inkremental (nur die Aktualisierung der Informationen, die aktualisiert werden müssen) . Zum Beispiel, wenn eine Anfrage an eineEDDGridFromDap-Datensatz tritt seit dem letzten Update mehr als die angegebene Anzahl von Millisekunden auf,ERDDAP™wird sehen, ob es neue Werte für den linken (zuerst, in der Regel"time") Dimension und, wenn ja, laden Sie diese neuen Werte einfach herunter, bevor Sie die Anfrage des Benutzers bearbeiten. Dieses System ist sehr gut, einen sich schnell ändernden Datensatz aktuell mit minimalen Anforderungen an die Datenquelle zu halten, aber zu den Kosten der leichten Verlangsamung der Verarbeitung einiger Benutzerwünsche.
    • Um dieses System zu verwenden, fügen Sie (beispielsweise) :
      <updateEveryNMillis>1000</updateEveryNMillis>  

nach rechts<reloadEveryNMinutes> tag für den Datensatz indatasets.xml. Die Anzahl der Millisekunden, die Sie angeben, kann so klein wie 1 sein (um sicherzustellen, dass der Datensatz immer aktuell ist) . Ein Wert von 0 (Der Standard) oder eine negative Zahl schaltet das System aus.

  • Aufgrund ihrer inkrementellen Natur sollten Updates sehr schnell enden, so dass Benutzer nie eine lange Zeit warten müssen.
  • Kommt eine zweite Datenanforderung vor dem vorherigen Update an, wird die zweite Anfrage kein weiteres Update auslösen.
  • In der gesamten Dokumentation versuchen wir, das Wort "Reload" für regelmäßige, vollständige Datensatz-Reloads und "Update" für diese neuen inkrementellen, teilweisen Updates zu verwenden.
  • Für Testzwecke werden einige Diagnosen auf log.txt gedruckt, wenn [<logLevel> (#loglevel) indatasets.xmlwird auf "all" gesetzt.
  • Wenn Sie inkrementelle Updates verwenden und vor allem, wenn die linkeste (erste) , zum Beispiel, Zeit, Achse ist groß, können Sie setzen möchten<reloadEveryNMinutes> auf eine größere Anzahl (1440?) , so dass Updates die meisten der Arbeit tun, um den Datensatz auf dem neuesten Stand zu halten, und vollständige Reloads werden selten durchgeführt.
  • Hinweis: Dieses neue Update-System aktualisiert Metadaten (zum Beispiel, Zeitactual\_range, time\_coverage\_end, ...) aber löst nicht aufChange aus (E-Mail oder Touch URL) oder ändernRSSFuttermittel (Vielleicht sollte es...) .
  • Für alle Datensätze, die Unterklassen vonEDDGridVonFilesundEDDTableFromFiles:
    • WARNING: wenn Sie eine neue Datendatei zu einem Datensatz hinzufügen, indem Sie sie in das Verzeichnis kopieren, dassERDDAP™Es besteht die Gefahr, dassERDDAP™wird die teilweise geschriebene Datei bemerken; versuchen Sie es zu lesen, aber scheitern, weil die Datei unvollständig ist; erklären Sie die Datei zu einer "schlechten" Datei und entfernen Sie sie (vorübergehend) aus dem Datensatz. Um das zu vermeiden, wir STRONGLY EMPFEHLUNGEN dass Sie eine neue Datei in das Verzeichnis mit einem temporären Namen kopieren (zum Beispiel, 20150226.ncTmp) das nicht mit der Datei datasets übereinstimmt NameRegex (*.nc) , dann umbenennen Sie die Datei in den richtigen Namen (zum Beispiel, 20150226.nc) . Wenn Sie diesen Ansatz verwenden,ERDDAP™wird die temporäre Datei ignorieren und nur die korrekt benannte Datei bemerken, wenn sie vollständig und bereit ist, verwendet zu werden.
    • Wenn Sie bestehende Datendateien ändern (zum Beispiel, um einen neuen Datenpunkt hinzuzufügen) ,<updateEveryNMillis> wird gut funktionieren, wenn die Änderungen atomar erscheinen (in einem Augenblick) und die Datei ist immer eine gültige Datei. Zum Beispiel ermöglicht die netcdf-java-Bibliothek Erweiterungen der unbegrenzten Dimension eines "klassischen".ncv3 Datei atomar gemacht werden. <updateEveryNMillis> wird schlecht funktionieren, wenn die Datei ungültig ist, während die Änderungen vorgenommen werden.
    • <updateEveryNMillis> funktioniert gut für Datensätze, bei denen sich eine oder ein paar Dateien in kurzer Zeit ändern.
    • <updateEveryNMillis> wird schlecht für Datensätze arbeiten, bei denen sich eine große Anzahl von Dateien in kurzer Zeit ändern (es sei denn, die Änderungen erscheinen atomar) . Für diese Datensätze ist es besser, nicht zu verwenden<updateEveryNMillis> und einFlaggezu sagenERDDAP™um den Datensatz neu zu laden.
    • <UpdateEveryNMillis> die mit der [<subsetVariables> (#subsetvariables) . Normalerweise ist dies kein Problem, weil diesubsetVariablesInformationen über Dinge haben, die sich nicht sehr oft ändern (zum Beispiel die Liste der Stationsnamen, Breitengrade und Längengrade) . WennsubsetVariablesDatenänderungen (zum Beispiel, wenn eine neue Station zum Datensatz hinzugefügt wird) , dann kontaktieren Sie dieZurück zur Übersichtfür den Datensatz zu sagenERDDAP™um den Datensatz neu zu laden. AndernfallsERDDAP™wird die neue Untermenge nicht bemerken Variable Informationen, bis zum nächsten Mal der Datensatz wieder geladen wird (<reloadEveryNMinutes>).
    • Unsere allgemeine Empfehlung ist zu verwenden:
        <reloadEveryNMinutes>1440</reloadEveryNMinutes>  
    <updateEveryNMillis>10000</updateEveryNMillis>
    • TROUBLE? Auf Linux-Computern, wenn Sie verwenden<UpdateEveryNMillis> mitEDDGridAusFiles oder EDDTableFromFiles-Klassen können Sie ein Problem sehen, bei dem ein Datensatz nicht geladen wird (gelegentlich oder konsequent) mit der Fehlermeldung: "IOException: Benutzergrenze von inotify Instanzen erreicht oder zu viele offene Dateien". Die Ursache kann ein Fehler inJavadie verursacht, dass die Fälle nicht Müll gesammelt werden. Dieses Problem wird vermiedenERDDAP™v1.66 und höher. So ist die beste Lösung, die neueste Version zu wechselnERDDAP. Wenn das das Problem nicht löst (das heißt, wenn Sie eine wirklich große Anzahl von Datensätzen mit<updateEveryNMillis>), können Sie dieses Problem beheben:
      sudo sysctl fs.inotify.max\\_user\\_watches=65536  
      sudo sysctl fs.inotify.max\\_user\\_instances=1024
      sudo sysctl -p

Oder, verwenden Sie höhere Zahlen, wenn das Problem anhält. Der Standard für Uhren ist 8192. Die Standardeinstellung beträgt beispielsweise 128.

  • Sie können setzen<updateMaxEvents>10</updateMaxEvents> indatasets.xml (mit den anderen Einstellungen in der Nähe von oben) um die maximale Anzahl von Dateiänderungen zu ändern (Standardeinstellungen) die vom updateEveryNMillis-System verarbeitet werden. Eine größere Anzahl kann für Datensatz nützlich sein, wo es sehr wichtig ist, dass sie immer aktuell gehalten werden. SieheupdateMaxEvents Dokumentation.
  • Für Curious Programmierer -- diese inkrementellen Updates, im GegensatzERDDAP's vollreloadEveryNMinutesSystem, innerhalb von Benutzeranforderungsfäden auftreten. So können jede Anzahl von Datensätzen gleichzeitig aktualisiert werden. Es gibt Code (und ein Schloss) um sicherzustellen, dass nur ein Thread an einem Update für einen bestimmten Datensatz zu einem bestimmten Zeitpunkt arbeitet. Mehrere gleichzeitige Updates zu ermöglichen, war einfach; mehrere gleichzeitige vollständige Reloads wären härter.  

<sourceCanConstrainStringEQNE>

  • ( ** <sourceCanConstrainStringEQNE> ** ! (#sourcecanconstrainstringeqne) ist ein OPTIONAL-Tag innerhalb eines EDDTable<Datensatz> tag indatasets.xmldie angibt, ob die Quelle String-Variablen mit den = und != Operatoren einschränken kann.
    • Für EDDTableFromDapSequence gilt dies nur für die äußere Sequenz String-Variablen. Es wird angenommen, dass die Quelle keine Zwänge an inneren Sequenzvariablen handhaben kann.
    • Dieser Tag ist OPTIONAL. Gültige Werte sind wahr (Der Standard) und falsch.
    • Für EDDTableFromDapSequenzOPeNDAPDRDS-Server, dies sollte auf true gesetzt werden (Der Standard) .
    • Für EDDTableFromDapSequenz Dapper-Server, dies sollte auf false gesetzt werden.
    • Ein Beispiel ist:
        <sourceCanConstrainStringEQNE>true</sourceCanConstrainStringEQNE>  

 

<sourceCanConstrainStringGTLT>

  • ( ** <sourceCanConstrainStringGTLT> ** ! (#sourcecanconconstrainstringgtlt) ist ein OPTIONAL-Tag innerhalb eines EDDTable<dataset> tag, der angibt, ob die Quelle String-Variablen mit der<,<=, > und >= Betreiber.
    • Für EDDTableFromDapSequence gilt dies nur für die äußere Sequenz String-Variablen. Es wird angenommen, dass die Quelle keine Zwänge an inneren Sequenzvariablen handhaben kann.
    • Gültige Werte sind wahr (Der Standard) und falsch.
    • Dieser Tag ist OPTIONAL. Der Standard ist wahr.
    • Für EDDTableFromDapSequenzOPeNDAPDRDS-Server, dies sollte auf true gesetzt werden (Der Standard) .
    • Für EDDTableFromDapSequenz Dapper-Server, dies sollte auf false gesetzt werden.
    • Ein Beispiel ist:
        <sourceCanConstrainStringGTLT>true</sourceCanConstrainStringGTLT>  

 

<sourceCanConstrainStringRegex>

  • ( ** <sourceCanConstrainStringRegex> ** ! (#sourcecanconstrainstringregex) ist ein OPTIONAL-Tag innerhalb eines EDDTable<dataset> tag, der spezifiziert, ob die Quelle String-Variablen durch regelmäßige Ausdrücke einschränken kann, und wenn ja, was der Bediener ist.
    • Gültige Werte sind "=" (dieDAPStandard) , "=" (irrtümlich unterstützt von vielenDAPServer) , oder " (dass die Quelle keine regelmäßigen Ausdrücke unterstützt) .
    • Dieser Tag ist OPTIONAL. Der Standard ist "".
    • Für EDDTableFromDapSequenzOPeNDAPDRDS-Server, dies sollte auf " gesetzt werden" (Der Standard) .
    • Für EDDTableFromDapSequenz Dapper-Server, dies sollte auf " gesetzt werden" (Der Standard) .
    • Ein Beispiel ist:
        <sourceCanConstrainStringRegex>=~</sourceCanConstrainStringRegex>  

<sourceCanDoDistinct>

  • ( ** <SourceCanDoDistinct> ** ! (#sourcecandodistinct) ist ein OPTIONAL-Tag innerhalb einer EDDTableFromDatabase<dataset> tag, der angibt, ob die Quelldatenbank mit &distinct umgehen soll () Einschränkungen bei Benutzeranfragen.
    • Dieser Tag ist OPTIONAL. Gültige Werte sind nicht (ERDDAP™Griffe deutlich; der Standard) , teilweise (die Quelle Griffe deutlich undERDDAP™griff es wieder) , und ja (die Quellgriffe deutlich) .
    • Wenn Sie Nein verwenden undERDDAP™wird aus dem Speicher ausgeführt, wenn die Handhabung deutlich, verwenden Sie ja.
    • Wenn Sie ja verwenden und die Quelldatenbank zu langsam deutlich wird, verwenden Sie Nein.
    • teilweise gibt Ihnen das Schlimmste von beiden: es ist langsam, weil die Datenbank-Handling von deutlich ist langsam und es kann aus dem Speicher inERDDAP.
    • Datenbanken interpretieren DISTINCT als eine Anforderung für nur einzelne Zeilen von Ergebnissen, währendERDDAP™interpretiert es als Anfrage für eine sortierte Liste von einzigartigen Zeilen von Ergebnissen. Wenn Sie dies auf Teil oder Ja setzen,ERDDAP™sagt automatisch auch die Datenbank, um die Ergebnisse zu sortieren.
    • Ein kleiner Unterschied in den Ergebnissen: Nein|teilweise,ERDDAP™wird " zu Beginn der Ergebnisse sortieren (vor nicht-""" Strings) . Mit ja, die Datenbank kann (Postgres werden) sort " am Ende der Ergebnisse (nach nicht-""" Saiten) . Ich werde vermuten, dass dies auch die Sortierung von kurzen Wörtern im Vergleich zu längeren Wörtern beeinflussen wird, die mit dem kurzen Wort beginnen. Zum BeispielERDDAP™wird "Simon" vor "Simons" sortieren.
    • Ein Beispiel ist:
        <sourceCanDoDistinct>yes</sourceCanDoDistinct>  

 

<QuelleCanOrderBy>

  • ( ** <Quelle CanOrderBind > ** ! (#sourcecanorderby) ist ein OPTIONAL-Tag innerhalb einer EDDTableFromDatabase<dataset> tag, der angibt, ob die Quelldatenbank handhaben soll &orderBy (...) Einschränkungen bei Benutzeranfragen.
    • Dieser Tag ist OPTIONAL. Gültige Werte sind nicht (ERDDAP™GriffeorderBy (...) ; der Standard) , teilweise (die QuellgriffeorderByundERDDAP™griff es wieder) , und ja (die QuellgriffeorderBy (...) ) .
    • Wenn Sie Nein verwenden undERDDAP™läuft beim Handling aus dem SpeicherorderBy (...) - Ja.
    • Wenn Sie Ja verwenden und die Quelldatenbank behandeltorderBy (...) zu langsam.
    • teilweise gibt Ihnen das Schlimmste von beiden: es ist langsam, weil die Datenbank-HandlingorderBy (...) ist langsam und es kann aus dem Gedächtnis inERDDAP.
    • Ein kleiner Unterschied in den Ergebnissen: Nein|teilweise,ERDDAP™wird " zu Beginn der Ergebnisse sortieren (vor nicht-""" Strings) . Mit ja, die Datenbank kann (Postgres werden) sort " am Ende der Ergebnisse (nach nicht-""" Saiten) . Dies kann auch die Sortierung von kurzen Wörtern gegenüber längeren Wörtern beeinflussen, die mit dem kurzen Wort beginnen. Zum BeispielERDDAP™wird "Simon" vor "Simons" sortieren, aber ich weiß nicht, wie eine Datenbank sie sortieren wird.
    • Ein Beispiel ist:
        <sourceCanOrderBy>yes</sourceCanOrderBy>  

 

<sourceNeedsExpandedFP\_EQ>

  • ( ** <sourceNeedsExpandedFP\_EQ> ** ! (#sourceneedsexpandedfp_eq) ist ein OPTIONAL-Tag innerhalb eines EDDTable<dataset> tag, der spezifiziert (wahr (Der Standard) oder falsch) wenn die Quelle Hilfe bei Abfragen braucht<Numerisch Variable>=<FloatingPointValue> (und !=, >=,<= Zum Beispiel
    <sourceNeedsExpandedFP\\_EQ>false</sourceNeedsExpandedFP\\_EQ>
    • Für einige Datenquellen sind numerische Abfragen mit =, !=,<=, oder >= darf nicht beliebig mit Floating-Point-Nummern arbeiten. Beispielsweise kann eine Suche nach Longitude=220.2 scheitern, wenn der Wert als 220.20000000000001 gespeichert wird.
    • Dieses Problem tritt auf, weil schwimmende Punktzahlennicht genau dargestellt innerhalb von Computern.
    • Wenn sourceNeedsExpandedFP\_EQ ist auf die Wahrheit gesetzt (Der Standard) ,ERDDAP™modifiziert die an die Datenquelle gesendeten Abfragen, um dieses Problem zu vermeiden. Es ist immer sicher und gut, dieses Set zu wahren.  

<sourceUrl>

  • ( ** <sourceUrl> ** ! (#sourceurl) ist ein häufiger Tag innerhalb des globalen Datensatzes<addAttributes> tag, das die URL, die die Quelle der Daten ist, angibt.
    • Ein Beispiel ist:
        <sourceUrl>https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/VH/chla/1day</sourceUrl>  
    (aber alles auf eine Linie setzen)
    • InERDDAP™, alle Datensätze haben ein "sourceUrl" in den kombinierten globalen Attributen, die den Nutzern angezeigt werden.
    • Für die meisten Datensätze ist dieser Tag REQUIRED. Siehe die Beschreibung des Dataset-Typs, um herauszufinden, ob dies REQUIRED ist oder nicht.
    • Für einige Datensätze, die separate<sourceUrl> tag ist nicht erlaubt. Stattdessen müssen Sie ein "sourceUrl"Globales Attribut, meist im globalen \>addAttributes<. Wenn es keine tatsächliche Quell-URL gibt (beispielsweise, wenn die Daten in lokalen Dateien gespeichert werden) , dieses Attribut hat oft nur einen Platzhalter-Wert, beispielsweise<att name="name"> (lokale Dateien) <.
    • Für die meisten Datensätze ist dies die Basis der URL, mit der Daten angefordert werden können. Zum Beispiel,DAPServer, dies ist die URL, zu der .dods, .das, .dds oder .html hinzugefügt werden können.
    • Seitdatasets.xmlist eine XML-Datei, Sie müssen auch kodieren '&', '<', und '>' in der URL als '&amp', '<', und '>'.
    • Für die meisten Datensätze,ERDDAP™das Original hinzufügensourceUrl ("localSourceUrl" im Quellcode) in derGlobale Attribute (wo es zum "publicSourceUrl" im Quellcode wird) . Wenn die Datenquelle lokale Dateien ist,ERDDAP™in den WarenkorbsourceUrl= (lokale Dateien) " den globalen Attributen als Sicherheitsvorkehrung. Wenn die Datenquelle eine Datenbank ist,ERDDAP™in den WarenkorbsourceUrl= (Quelle Datenbank) " den globalen Attributen als Sicherheitsvorkehrung. Wenn einige Ihrer Datensätze nicht-öffentlich sindsourceUrl' (in der Regel, weil ihr Computer in Ihrem DMZ oder auf einem lokalen LAN) Sie können verwenden [<ConvertToPublicSourceUrl>] (#converttopublicsourceurl) tags, um festzulegen, wie man die lokalesourceUrls für die ÖffentlichkeitsourceUrlS.
    • AsourceUrlkann beginnen mithttp://,https://, ftp:// und vielleicht andere Präfixe.httpsVerbindungen lesen und überprüfen das digitale Zertifikat der Quelle, um sicherzustellen, dass die Quelle ist, wer sie sagen. In seltenen Fällen kann diese Überprüfung mit dem Fehler "javax.net.ssl.SSLProtocolException: handshake alert: unreuthed\_name" scheitern. Dies ist wahrscheinlich auf den Domainnamen im Zertifikat zurückzuführen, der nicht dem Domainnamen entspricht, den Sie verwenden. Sie können und sollten die Details dersourceUrl's Zertifikat in Ihrem Webbrowser, insbesondere die Liste der "DNS-Namen" im Abschnitt "Subject Alternative Name".

In einigen FällensourceUrlSie können ein Alias des Domainnamens auf dem Zertifikat sein. Zum Beispiel https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ wird diesen Fehler werfen, aber https://opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ , die den Domainnamen auf dem Zertifikat verwendet, wird nicht. Die Lösung in diesen Fällen besteht daher darin, den Domainnamen auf dem Zertifikat zu finden und zu verwenden. Wenn Sie es nicht auf dem Zertifikat finden, kontaktieren Sie den Datenanbieter.

In anderen Fällen kann der Domainname auf dem Zertifikat für eine Gruppe von Namen sein. Wenn dies geschieht oder das Problem sonst unlösbar ist, mailen Sie bitte Chris. John bei noaa.gov, um das Problem zu melden.  

<addAttributes>

  • ( ** <addAttributes> ** ! (#addattributes) ist ein OPTIONAL-Tag für jeden Datensatz und für jede Variable, dieERDDAPAdministratoren steuern die Metadaten-Attribute, die einem Datensatz und seinen Variablen zugeordnet sind.
    • ERDDAP™kombiniert die Attribute aus der Quelle des Datensatzes ("sourceAttributes") und die "addAttributes", die Sie definierendatasets.xml (die Priorität haben) die "kombinierten Beiträge" zu machen, dieERDDAP™Benutzer sehen. So können Sie verwendenaddAttributesdie Werte von sourceAttributes neu definieren, neue Attribute hinzufügen oder Attribute entfernen.
    • Die<addAttributes> tag umschließt 0 oder mehr ** <mit einem Gehalt an ** Subtags, die zur Angabe einzelner Attribute verwendet werden.
    • Jedes Attribut besteht aus einem Namen und einem Wert (der einen bestimmten Datentyp aufweist, beispielsweise doppelt) .
    • Es kann nur ein Attribut mit einem bestimmten Namen geben. Wenn es mehr gibt, hat die letzte Priorität.
    • Der Wert kann ein einzelner Wert oder eine platzgetrennte Werteliste sein.
    • Syntax
      • Die Reihenfolge der<att> subtags innerhalbaddAttributesist nicht wichtig.
      • Die<att> Subtag Format ist
          <att name="*name*" \\[type="*type*"\\] >*value*</att>
      • Der Zielname aller Attribute Starten Sie mit einem Buchstaben (A-Z, a-z) und nur die Zeichen A-Z, a-z, 0-9 oder '\_' enthalten.
      • Wenn<att> Subtag hat keinen Wert oder einen Wert von null, dieses Attribut wird aus den kombinierten Attributen entfernt. Zum Beispiel<att name="rows" /> entfernt Zeilen aus den kombinierten Attributen. Zum Beispiel<att name="Koordinaten">null</att> entfernt Koordinaten aus den kombinierten Attributen.
Eigenschaften Typ
  • [Der OPTIONELLE Typwert für<att> subtags] (#attributetype) den Datentyp für die Werte angibt. Der Standardtyp ist String. Ein Beispiel für ein String-Attribut ist:
    <att name="creator\\_name">NASA/GSFC OBPG</att>
    • Gültige Typen von Einzelwerten sind Byte (8-bit ganze) , kurz (16-Bit signiert ganze) , Int (32-Bit signiert ganze) , lang (64-Bit signiert ganze) , schwimmen (32-Bit-Schwebungspunkt) , doppelt (64-Bit-Schwebungspunkt) , char und String. Zum Beispiel
      <att name="scale\\_factor" type="float">0.1</att>

Sehen Sie diese Anmerkungen zu denArt der Daten. Sehen Sie diese Anmerkungen zu denlange Datenart.

  • Gültige Typen für raumgetrennte Wertelisten (oder Einzelwerte) sind byteList, shortList, unsignedShortList, charList, intList, longList, floatList, double Liste. Zum Beispiel
    <att name="actual\\_range" type="doubleList">10.34 23.91</att>  

Ein unsignedShortList lässt Sie eine Liste von unbesignierten Shorts angeben, aber sie werden in eine Liste der entsprechenden Unicode-Zeichen umgewandelt (z.B. "65 67 69" wird in "A C E" umgewandelt. Wenn Sie einen charList angeben, kodieren Sie alle Sonderzeichen (z.B. Raum, Doppel-Zitate, Backslash,<#32, oder >#127) wie Sie sie im Datenbereich einer NCCSV-Datei kodieren würden (z.B. ", "" oder """, "\", "\n", "\u20ac") . Es gibt keine stringList. Speichern Sie die String-Werte als Multi-Line String. Zum Beispiel

<att name="history">2011-08-05T08:55:02Z ATAM - made CF-1.6 compliant.  
2012-04-08T08:34:58Z ATAM - Changed 'height' from double to float.</att>

 

Globale Attribute

  • ( ** Globale Attribute / Global<addAttributes> ** ! (#global-attributes) -- <addAttributes> ein OPTIONAL-Tag innerhalb der<dataset> tag, mit dem Attribute geändert werden, die für den gesamten Datensatz gelten.

    • ** Global nutzen<addAttributes> zur Änderung der globalen Attribute des Datensatzes. ** ERDDAP™kombiniert die globalen Attribute aus der Datenquelle (** QuelleBeiträge ) und die globale addAttributes die Sie definierendatasets.xml (die Priorität haben) die globale In den Warenkorb ** , dieERDDAP™Benutzer sehen. So können Sie verwendenaddAttributesdie Werte von sourceAttributes neu definieren, neue Attribute hinzufügen oder Attribute entfernen.
    • Siehe die [ ** <addAttributes> Informationen (#addattributes) das gilt für global und variabel <addAttributes> ** .
    • FGDCundISO 19115-2/19139Metadaten -- Normalerweise,ERDDAP™automatisch ISO 19115-2/19139 und FGDC generieren (FGDC-STD-001-1998) XML-Metadatendateien für jeden Datensatz unter Verwendung von Informationen aus den Metadaten des Datensatzes. Also, gute Datensatz-Metadaten führen zu guterERDDAP-generierte Metadaten nach ISO 19115 und FGDC. Bitte beachten Sie, dass Sie viel Zeit und Mühe in die Verbesserung der Metadaten Ihrer Datensätze setzen (was trotzdem gut ist) . Die meisten Datensatz-Metadaten-Attribute, die zur Erzeugung der ISO 19115 und FGDC-Metadaten verwendet werden, stammen ausACDD-Metadatenstandardund sind unten so angemerkt.
    • Viele globale Attribute sind besonders darinERDDAP™sucht sie und nutzt sie auf verschiedene Weise. Zum Beispiel eine Verbindung zuminfoUrlist auf Webseiten mit Listen von Datensätzen und anderen Orten enthalten, so dass Benutzer mehr über den Datensatz erfahren können.
    • Wenn ein Benutzer eine Teilmenge von Daten wählt, globalAttributes bezogen auf die Länge der Variable, Breite, Höhe (oder Tiefe) , und Zeitbereiche (zum Beispiel Southernmost\_Northing, Northernmost\_Northing, time\_coverage\_start, time\_coverage\_end) werden automatisch generiert oder aktualisiert.
    • Eine einfache Probe global<addAttributes> ist:
      <addAttributes> 
      <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>
      <att name="infoUrl">https://coastwatch.pfeg.noaa.gov/infog/PH\\_ssta\\_las.html</att>
      <att name="institution">NOAA CoastWatch, West Coast Node</att>
      <att name="title">SST, Pathfinder Ver 5.0, Day and Night, Global</att>
      <att name="cwhdf\\_version" />
      </addAttributes>

Das leere cwhdf\_version Attribut bewirkt das Quell-cwhdf\_version Attribut (wenn) aus der letzten, kombinierten Liste der Attribute zu entfernen.

  • Die Bereitstellung dieser Informationen hilftERDDAP™tun Sie einen besseren Job und hilft Benutzern, die Datensätze zu verstehen. Gute Metadaten machen einen Datensatz nutzbar. Unzureichende Metadaten machen einen Datensatz nutzlos. Bitte nehmen Sie die Zeit, einen guten Job mit Metadaten-Attributen zu tun.
Besondere globale Attribute inERDDAP™
Anerkennung
  • Anerkennung und Anerkennung (vonANLAGEMetadatenstandard) ist ein EMPFEHLEN Weg, um die Gruppe oder Gruppen, die Unterstützung (insbesondere Finanzen) für das Projekt, das diese Daten erstellt hat. Zum Beispiel
    <att name="acknowledgment">AVISO</att>

Beachten Sie, dass ACDD 1.0 und 1.1 die Schreibweise "Hinweihung" verwendet (die übliche Schreibweise in den USA ist.) , aber ACDD 1.3 änderte dies in "Wissenschaft" (die übliche Schreibweise in der U.K.) . Mein Verständnis ist, dass die Veränderung im Wesentlichen ein Unfall war und dass sie sicherlich nicht die Auswirkungen der Veränderung erkannten. Was für ein Chaos! Jetzt gibt es Millionen von Datendateien auf der ganzen Welt, die "Wissen" und Millionen haben "Wissenschaft". Dies unterstreicht die Torheit von "einfachen" Änderungen an einem Standard und betont die Notwendigkeit der Stabilität in Standards. Denn ACDD 1.3 (die Version von ACDD, dassERDDAP™Stützen) sagt "Gewissen", das ist, wasERDDAP™ (besonders GenerateDatasets Xml) fördert.  

cdm\_altitude\_proxy
  • cdm\_altitude\_proxy ist nur für EDDTable-Datensätze, die keine Höhen- oder Tiefenvariable haben, aber eine Variable haben, die ein Proxy für Höhe oder Tiefe ist (zum Beispiel Druck, Sigma, bottleNumber) , Sie können dieses Attribut verwenden, um diese Variable zu identifizieren. Zum Beispiel
    <att name="cdm\\_altitude\\_proxy">pressure</att>  

Wenncdm\_data\_typeist Profil oder TrajectoryProfil und es gibt keine Höhen- oder Tiefenvariable, cdm\_altitude\_proxy MUST definiert werden. Wenn cdm\_altitude\_proxy definiert ist,ERDDAP™die folgenden Metadaten der Variablen hinzufügen: \_Koordinate AxisType=Höhe und Achse=Z.  

cdm\_data\_type

Die CDM entwickelt sich weiter und kann sich wieder ändern.ERDDAP™entspricht den damit verbundenen und detaillierterenDiskrete Sampling Geometrien (DSG) Kapitel desCF 1.6Metadatenkonventionen (zuvor die CF-Punkt-Beobachtungsübereinkommen genannt) .

  • Entweder der globale DatensatzQuelleBeiträgeoder seine globale<addAttributes> Fügen Sie das Attribute cdm\_data\_type ein. Ein paar Datensatztypen (wie EDDTable VonObis) wird dies automatisch einstellen.
  • FürEDDGriddatasets, die Optionen cdm\_data\_type sind Grid (der Standard und bei weitem der häufigste Typ fürEDDGridDatensätze) , MovingGrid, Other, Point, Profile, RadialSweep, TimeSeriesProfil, Swath, Trajectory und TrajectoryProfile. Derzeit,EDDGriderfordert nicht, dass alle verwandten Metadaten angegeben werden, noch überprüft es, dass die Daten mit dem cdm\_data\_type übereinstimmen. Das wird sich in naher Zukunft wahrscheinlich ändern.
  • EDDTable verwendet cdm\_data\_type auf rigorose Weise, nach der DSG-Spezifikation von CF anstatt CDM, die aus irgendeinem Grund nicht aktualisiert wurde, um mit DSG konsistent zu sein. Wenn die Metadaten eines Datensatzes nicht mit derERDDAPcdm\_data\_types Anforderungen (siehe unten) , der Datensatz wird nicht geladen und erzeugt eineFehlermeldung. (Das ist eine gute Sache, in dem Sinne, dass die Fehlermeldung Ihnen sagt, was falsch ist, damit Sie es beheben können.) Und wenn die Daten des Datensatzes nicht mit dem Metadaten-Setup des Datensatzes übereinstimmen (z.B. wenn in einem Zeitreihen-Datensatz mehr als ein Breitenwert für eine bestimmte Station vorliegt) , einige Anfragen an Daten werden in der Antwort falsche Daten zurückgeben. Stellen Sie sicher, dass Sie das alles richtig bekommen.

Für alle diese Datensätze, in den Konventionen undMetadata\_ConventionsGlobale Attribute, siehe CF-1.6 (nicht CF-1.0, 1.1, 1.2, 1.3, 1.4 oder 1.5) , da CF-1.6 die erste Version ist, um die Änderungen in Bezug auf diskrete Probegeometrie (DSG) Konventionen.

  • ERDDAP™hat eine nicht einfache Beziehung zu CF DSG
  • ERDDAP™kann einen gültigen DSG-Datensatz aus einem Quelldatensatz machen, der bereits eine gültige DSG-Datei ist (S) , oder aus einem Quelldatensatz, der nicht für DSG eingerichtet ist, sondern über Änderungen an Metadaten erfolgen kann (Einige davon sindERDDAP-spezifisch, um einen allgemeineren Ansatz zur Angabe des DSG-Setups bereitzustellen) .
  • ERDDAP™hat eine Menge Gültigkeitstests, wenn es einen Datensatz lädt. Wenn der Datensatz einen cdm\_data\_Typ hat (oderfeatureType) Attribut erfolgreich geladenERDDAP™, dannERDDAP™sagt, der Datensatz erfüllt die DSG-Anforderungen (andernfallsERDDAP™wird eine Ausnahme werfen, die das erste Problem erklärt, dass es gefunden) . WARNING: Ein erfolgreich geladener Datensatz scheint die DSG-Anforderungen zu erfüllen (es hat die richtige Kombination von Attributen) , aber kann immer noch falsch eingerichtet werden, was zu falschen Ergebnissen führt.ncCF und.ncCFMA Antwort Dateien. (Software ist auf irgendeine Weise intelligent und auffällig in anderen.)
  • Wenn Sie die Metadaten des Datensatzes inERDDAP™, der DSG-Datensatz erscheint inERDDAPDas interne Format (ein riesiger, datenbankähnlicher Tisch) . Es ist nicht in einem der DSG-Formate (z.B. sind die Dimensionen und Metadaten nicht richtig) , aber die zur Behandlung des Datensatzes als DSG-Datensatz erforderlichen Informationen sind in den Metadaten (z.B. cdm\_data\_type=TimeSeries und cdm\_timeseries\_variables= aCsvListOfStationRelatedVarables in den globalen Metadaten und cf\_role=timeseries\_id für einige Variablen) .
  • Wenn ein Benutzer eine Untermenge des Datensatzes in einem.ncCF (eine.ncDatei im DSG's Contiguous Ragged Array Datei Format) oder.ncCFMA Datei (eine.ncDatei im Format der Datei DSG's Multidimensional Array) , diese Datei wird eine gültige CF DSG-Datei sein. WARNING: Wenn der Datensatz jedoch falsch eingerichtet wurde (so dass die Versprechen der Metadaten nicht wahr sind) , dann wird die Antwortdatei technisch gültig sein, aber in gewisser Weise falsch sein.  
EDDTable cdm_data_types
  • Für EDDTable-Datensätze, die Optionen cdm\_data\_type (und damit verbundene Anforderungen inERDDAP) werden
Punkt
  • Punkt-- ist für eine Reihe von Messungen zu unbezogenen Zeiten und Orten.
    • Wie bei allen anderen cdm\_data\_types haben Point-Datensätze nur Längen-, Breiten- und Zeitvariablen.
Profil
  • Profil-- ist eine Reihe von Messungen, die alle zu einem Zeitpunkt, an einer Breitenlänge, aber in mehr als einer Tiefe (oder Höhe) . Der Datensatz kann eine Sammlung dieser Profile sein, beispielsweise 7 Profile von verschiedenen Standorten. Dieser cdm\_data\_type bedeutet keine logische Verbindung zwischen einem der Profile.

  • Eine der Variablen (zum Beispiel Profil\_number) MUST hat das variable Attribut cf\_role=profile\_id, um die Variable zu identifizieren, die die Profile eindeutig identifiziert.

    <att name="cf\\_role">profile\\_id</att>  

Wenn keine andere Variable geeignet ist, sollten Sie die Zeitvariable verwenden.

cdm\_profile\_variables
  • Der Datensatz MUST umfasst den globalen Beitragcdm\_profile\_variables, wobei der Wert eine komma-separierte Liste der Variablen ist, die die Information über jedes Profil haben. Für ein vorgegebenes Profil sind die Werte dieser Größen MUST konstant. Zum Beispiel
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Die Liste MUST enthält die cf\_role=profile\_id-Variable und alle anderen Variablen mit Informationen über das Profil und Zeit, Breite und Länge. Die Liste enthält niemals Höhen-, Tiefen- oder Beobachtungsvariablen.  

\[Meinung: cdm\_data\_type=Profil sollte selten verwendet werden. In der Praxis ist ein vorgegebener Datensatz in der Regel entweder ein TimeSeriesProfil (Profile in fester Position) oder ein Trajektorienprofil (Profile entlang einer Trajektorie) , und so sollte richtig als solche identifiziert werden.\]

Zeitreihen
  • Zeitreihen-- eine Abfolge von Messungen (z.B. Meerwassertemperatur) ein, fest, Breite, Länge, Tiefe (oder Höhe) Standort. (Denken Sie daran als "Station".) Der Datensatz kann eine Sammlung dieser TimeSeries sein, beispielsweise eine Sequenz aus jedem von 3 verschiedenen Standorten.
    • Eine der Variablen (z.B. Station\_id) MUST haben das variable Attribut cf\_role=timeseries\_id, um die Variable zu identifizieren, die die Stationen eindeutig identifiziert.
      <att name="cf\\_role">timeseries\\_id</att>
cdm\_timeseries\_variables
  • Der Datensatz MUST umfasst den globalen Beitragcdm\_timeseries\_variables, wobei der Wert eine komma getrennte Liste der Variablen ist, die die Informationen über jede Station haben. Für eine bestimmte Station sind die Werte dieser Größen MUST konstant. Zum Beispiel
    <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Die Liste MUST enthält die Variable cf\_role=timeseries\_id und alle anderen Variablen mit Informationen über die Station, die fast immer Breite und Länge umfasst (und Höhe oder Tiefe, wenn vorhanden) . Die Liste enthält niemals Zeit oder Beobachtungsvariablen.

  • Für einige moored buoys kann ein Datensatz zwei Sätze von Breiten- und Längenvariablen haben:
    1. Ein Paar Breiten- und Längenwerte, die konstant sind (d.h. die feste Lage der Verankerung) . InERDDAP™, geben diese VariablendestinationNames von Breite und Länge, und beinhalten diese Variablen in der Liste der cdm\_timeseries\_variables.
    2. Präzise Breiten- und Längenwerte, die jeder Beobachtung zugeordnet sind. InERDDAP™, geben diese Variablen unterschiedlichdestinationNameS (z.B., präzise und präzise Kredit) und enthalten diese Variablen nicht in die Liste der cdm\_timeseries\_variables. Der Grund hierfür ist: aus theoretischer Perspektive, für einen Datensatz der DSG TimeSerie, die Breite und Länge (und Höhe oder Tiefe, wenn vorhanden) Standort der Station MUST konstant sein.
Zeitreihenprofil
  • Zeitreihenprofil-- ist für eine Abfolge von Profilen an einem festen, Breitenlängen-Standort. Jedes Profil ist eine Reihe von Messungen in mehreren Höhen oder Tiefen. Der Datensatz kann eine Sammlung dieser TimeSeriesProfile sein, z.B. eine Abfolge von Profilen an jedem von 12 verschiedenen Standorten.
    • Eine der Variablen (z.B. Station\_id) MUST haben das variable Attribut cf\_role=timeseries\_id, um die Variable zu identifizieren, die die Stationen eindeutig identifiziert.
        <att name="cf\\_role">timeseries\\_id</att>
    • Eine der Variablen (zum Beispiel Profil\_number) MUST hat das variable Attribut cf\_role=profile\_id, um die Variable zu identifizieren, die die Profile eindeutig identifiziert.
      <att name="cf\\_role">profile\\_id</att>  
      (Ein gegebenes Profil\_id muss nur für eine bestimmte Zeitreihe\_id einzigartig sein.) Wenn keine andere Variable geeignet ist, sollten Sie die Zeitvariable verwenden.
    • Der Datensatz MUST umfasst die globalAttribute cdm\_timeseries\_variables, wobei der Wert eine komma-separierte Liste der Variablen ist, die die Informationen über jede Station haben. Für eine bestimmte Station sind die Werte dieser Größen MUST konstant. Zum Beispiel
      <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Die Liste MUST enthält die Variable cf\_role=timeseries\_id und alle anderen Variablen mit Informationen über die Station, die fast immer Breite und Länge umfasst. Die Liste enthält niemals Zeit, Höhe, Tiefe oder Beobachtungsvariablen.

  • Der Datensatz MUST umfasst das globaleAttribute cdm\_profile\_variables, wobei der Wert eine komma-separierte Liste der Variablen ist, die die Informationen über jedes Profil haben. Für ein vorgegebenes Profil sind die Werte dieser Größen MUST konstant. Zum Beispiel
    <att name="cdm\\_profile\\_variables">profile\\_number,time</att>

Die Liste MUST enthält die Variable cf\_role=profile\_id und alle anderen Variablen mit Informationen über das Profil, die fast immer Zeit beinhalten. Die Liste wird niemals Breite, Länge, Höhe, Tiefe oder Beobachtungsvariablen enthalten.

Trajektive
  • Trajektive-- eine Abfolge von Messungen entlang einer Trajektorie (einen Weg durch Raum und Zeit) (z.B. Meer\_Wasser\_Temperatur von einem Schiff, während es durch das Wasser bewegt) . Der Datensatz kann eine Sammlung dieser Trajektorien sein, beispielsweise eine Sequenz aus jedem von 4 verschiedenen Schiffen.
    • Eine der Variablen (zum Beispiel, ship\_id) MUST haben das Attribut cf\_role=trajectory\_id, um die Variable zu identifizieren, die die Trajektorien eindeutig identifiziert.
      <att name="cf\\_role">trajectory\\_id</att>
cdm\_trajectory\_variables
  • Der Datensatz MUST umfasst den globalen Beitragcdm\_trajectory\_variables, wobei der Wert eine komma getrennte Liste der Variablen ist, die die Informationen über jede Trajektorie haben. Für eine gegebene Trajektorie sind die Werte dieser Variablen MUST konstant. Zum Beispiel
    <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Die Liste MUST enthält die Variable cf\_role=trajectory\_id und alle anderen Variablen mit Informationen über die Trajektorie. Die Liste enthält niemals Zeit, Breite, Länge oder Beobachtungsvariablen.

Trajektorienprofil
  • Trajektorienprofil-- ist eine Abfolge von Profilen entlang einer Trajektorie. Der Datensatz kann eine Sammlung dieser TrajectoryProfile sein, beispielsweise eine Abfolge von Profilen von 14 verschiedenen Schiffen.
    • Eine der Variablen (zum Beispiel, ship\_id) MUST hat das variable Attribut cf\_role=trajectory\_id, um die Variable zu identifizieren, die die Trajektorien eindeutig identifiziert.
      <att name="cf\\_role">trajectory\\_id</att>
    • Eine der Variablen (zum Beispiel Profil\_number) MUST hat das variable Attribut cf\_role=profile\_id, um die Variable zu identifizieren, die die Profile eindeutig identifiziert.
      <att name="cf\\_role">profile\\_id</att>  
      (Ein gegebenes Profil\_id muss nur für eine bestimmte Trajektorie\_id einzigartig sein.) Wenn keine andere Variable geeignet ist, sollten Sie die Zeitvariable verwenden.
    • Der Datensatz MUST umfasst die globale Attribute cdm\_trajectory\_variables, wobei der Wert eine komma-separierte Liste der Variablen ist, die die Informationen über jede Trajektorie haben. Für eine gegebene Trajektorie sind die Werte dieser Variablen MUST konstant. Zum Beispiel
      <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Die Liste MUST enthält die Variable cf\_role=trajectory\_id und alle anderen Variablen mit Informationen über die Trajektorie. Die Liste enthält niemals profilbezogene Variablen, Zeit, Breite, Länge oder beliebige Beobachtungsvariablen.

  • Der Datensatz MUST umfasst das globaleAttribute cdm\_profile\_variables, wobei der Wert eine komma-separierte Liste der Variablen ist, die die Informationen über jedes Profil haben. Für ein vorgegebenes Profil sind die Werte dieser Größen MUST konstant. Zum Beispiel
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Die Liste MUST enthält die Variable cf\_role=profile\_id und alle anderen Variablen mit Informationen über das Profil, die fast immer Zeit, Breite und Länge beinhalten. Die Liste enthält niemals Höhen-, Tiefen- oder Beobachtungsvariablen.

Sonstige
  • Sonstige-- hat keine Anforderungen. Verwenden Sie es, wenn der Datensatz nicht eine der anderen Optionen passt, insbesondere, wenn der Datensatz keine Breiten-, Längen- und Zeitvariablen umfasst.  
  • Alle EDDTable-Datensätze mit einem anderen cdm\_data\_Typ als "Andere" haben Längen-, Breiten- und Zeitvariablen.
  • Datensätze mit Profilen MUST haben eine Höhenvariable, eine Tiefenvariable oder einecdm\_altitude\_proxyvariabel.
  • Wenn Sie einen Datensatz nicht alle Anforderungen an den idealen cdm\_data\_type erfüllen können, verwenden Sie "Point" (mit wenigen Anforderungen) oder "Andere" (die keine Anforderungen haben) statt.
  • Diese Informationen werden vonERDDAP™auf verschiedene Weise, zum Beispiel, aber meist für die Herstellung.ncCF-Dateien (.ncDateien, die mit den Contiguous Ragged Array Representations im Zusammenhang mit dem cdm\_data\_type des Datensatzes übereinstimmen) und.ncCFMA Dateien (.ncDateien, die den Multidimensionalen Array-Vertretungen entsprechen, die mit dem cdm\_data\_type des Datensatzes verbunden sind) wie definiertDiskrete Sampling Geometrien (DSG) Kapitel desCFMetadatenkonventionen, die zuvor "CF Point Observation Conventions" genannt wurden.
  • Hinweis: Für diese Datensätze die richtige Einstellung fürsubsetVariablesist in der Regel die Kombination aller in den Attributen cdm\_...\_variables aufgelisteten Variablen. Zum Beispiel für TimeSeriesProfil verwenden Sie die cdm\_timeseries\_variables plus die cdm\_profile\_variables.
contributor\_name
  • contributor\_name (vonANLAGEMetadatenstandard) ist der EMPFEHL-Weg, eine Person, Organisation oder ein Projekt zu identifizieren, die zu diesem Datensatz beigetragen haben (zum Beispiel der ursprüngliche Schöpfer der Daten, bevor es vom Schöpfer dieses Datensatzes wiederaufgearbeitet wurde) . Zum Beispiel
        <att name="contributor\\_name">NOAA OceanWatch - Central Pacific</att>  

Wenn "Beitrager" sich nicht wirklich auf einen Datensatz bezieht, verlasse dieses Attribut. Im Vergleich zucreator\_name, dies ist manchmal stärker auf die Finanzierungsquelle ausgerichtet.

contributor\_role

Wenn "Beitrager" sich nicht wirklich auf einen Datensatz bezieht, verlasse dieses Attribut.

Übereinkommen
  • Übereinkommen (vonCFMetadatenstandard) ist STRONGLY EMPFEHL. (Es kann in der Zukunft REQUIRED sein.) Der Wert ist eine komma-separierte Liste von Metadatenstandards, die dieser Datensatz folgt. Zum Beispiel:
    <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>  

Die gemeinsamen Metadatenkonventionen, die inERDDAP™sind:

Wenn Ihr Datensatz einem zusätzlichen Metadatenstandard folgt, fügen Sie bitte den Namen in die CSV-Liste im Attribute Conventions ein.

coverage\_content\_type
  • coverage\_content\_type (vonISO 19115Metadatenstandard) ist der RECOMMENDED Weg, die Art der netzgebundenen Daten zu identifizieren (inEDDGridDatensätze) . Zum Beispiel
    <att name="coverage\\_content\\_type">modelResult</att>  

Die einzigen zulässigen Werte sind Hilfsinformationen, Bild, ModellErgebnis, physikalisch Messung (Standard, wenn ISO 19115 Metadaten generiert werden) , QualitätInformationen, Referenzinformationen und thematischeKlassifikation. (Verwenden Sie diesen Tag nicht für EDDTable-Datensätze.)

creator\_name
  • creator\_name (vonANLAGEMetadatenstandard) ist der EMPFEHL Weg, die Person, Organisation oder Projekt zu identifizieren (wenn nicht eine bestimmte Person oder Organisation) , am meisten verantwortlich für die Schöpfung (oder die jüngste Wiederaufbereitung) dieser Daten. Zum Beispiel
    <att name="creator\\_name">NOAA NMFS SWFSC ERD</att>  

Wurden die Daten weitgehend wiederverarbeitet (beispielsweise Satellitendaten von Ebene 2 bis Ebene 3 oder 4) , dann wird in der Regel der Reprozessor als Schöpfer aufgeführt und der ursprüngliche Schöpfer übercontributor\_name. Im Vergleich zuProjekt, dies ist flexibler, da es eine Person, eine Organisation oder ein Projekt identifizieren kann.

creator\_email
  • creator\_email (vonANLAGEMetadatenstandard) ist der EMPFEHLEN Weg, eine E-Mail-Adresse zu identifizieren (korrekt formatiert) die einen Weg bietet, den Schöpfer zu kontaktieren. Zum Beispiel
    <att name="creator\\_email">erd.data@noaa.gov</att>  
creator\_url
  • creator\_url (vonANLAGEMetadatenstandard) ist der ECOMMENDED Weg, eine URL für Organisation zu identifizieren, die den Datensatz erstellt hat, oder eine URL mit den Informationen des Schöpfers über diesen Datensatz (aber das ist mehr der ZweckinfoUrl) . Zum Beispiel
    <att name="creator\\_url">https://www.pfeg.noaa.gov</att>  
date\_created
  • date\_created (vonANLAGEMetadatenstandard) ist der EMPFEHL-Weg, das Datum zu identifizieren, an dem die Daten zuerst erstellt wurden (beispielsweise zu dieser Form verarbeitet) , in ISO 8601 Format. Zum Beispiel
    <att name="date\\_created">2010-01-30</att>  

Wird dem Datensatz periodisch Daten hinzugefügt, so ist dies das erste Datum, an dem die ursprünglichen Daten zur Verfügung gestellt wurden.

date\_modified
  • date\_modified (vonANLAGEMetadatenstandard) ist die EMPFEHLUNG, um das Datum zu identifizieren, an dem die Daten zuletzt geändert wurden (zum Beispiel, wenn ein Fehler behoben wurde oder wenn die neuesten Daten hinzugefügt wurden) , in ISO 8601 Format. Zum Beispiel
    <att name="date\\_modified">2012-03-15</att>  
date\_issued
  • date\_issued (vonANLAGEMetadatenstandard) ist der ECOMMENDED Weg, das Datum zu identifizieren, an dem die Daten zunächst anderen zur Verfügung gestellt wurden, beispielsweise im ISO 8601 Format, 2012-03-15. Zum Beispiel
    <att name="date\\_issued">2010-07-30</att>  

Beispielsweise kann der Datensatz einendate\_createdvon 2010-01-30, aber wurde nur öffentlich zugänglich gemacht 2010-07-30.date\_issuedweniger häufig verwendet alsdate\_createdunddate\_modified. wenndate\_issuedwird weggelassen, es wird angenommen, dass gleich wie diedate\_created.

weltweitdrawLandMask
  • drawLandMask -- Dies ist ein OPTIONAL globales Attribut, das vonERDDAP™ (und keine Metadatenstandards) die den Standardwert für die Option "Draw Land Mask" auf dem Datensatz Make A Graph Formular angibt ( datasetID .graph) und für den &.land-Parameter in einer URL, die eine Karte der Daten anfordert. Zum Beispiel
    <att name="drawLandMask">over</att>  

SiehedrawLandMaskÜberblick.

featureType
  • featureType (vonCFMetadatenstandard) ist IGNORED und/oder REPLACED. Wenn der Datensatzcdm\_data\_typeangemessen ist,ERDDAP™wird es automatisch verwenden, um einefeatureTypeAttribut. So gibt es keine Notwendigkeit, dass Sie es hinzufügen.

Allerdings, wenn Sie verwendenEDDTableFromNcCFFileseinen Datensatz aus Dateien zu erstellen, die demCF Diskrete Sampling Geometrien (DSG) Standard, die Dateien selbst müssen habenfeatureTyperichtig definiert, so dassERDDAP™kann die Dateien richtig lesen. Das ist Teil der CF DSG-Anforderungen für diese Art von Datei.  

Geschichte
  • Geschichte (vonCFundANLAGEMetadatenstandards) ist ein ECOMMENDED Multi-Line String Global Attribut mit einer Zeile für jeden Verarbeitungsschritt, den die Daten durchlaufen haben. Zum Beispiel
    <att name="history">2011-08-05T08:55:02Z CMOR: Rewrote data to comply with CF standards.  
    2012-04-08T08:34:58Z CMOR: Converted 'height' type from 'd' to 'f'.</att>
    • Idealerweise hat jede Zeile eine ISO 8601:2004 (E) formatiert date+timeZ (zum Beispiel 2011-08-05T08:55:02Z) gefolgt von einer Beschreibung des Bearbeitungsschritts.
    • ERDDAP™schafft das, wenn es nicht schon existiert.
    • Wenn es bereits existiert,ERDDAP™neue Informationen an die vorhandenen Informationen anhängen.
    • Die Geschichte ist wichtig, weil sie es Kunden ermöglicht, auf die ursprüngliche Quelle der Daten zurückzuverfolgen.
infoUrl
  • infoUrl ist ein globales REQUIRED-Attribut mit der URL einer Webseite mit mehr Informationen über diesen Datensatz (in der Regel auf der Website des Quellinstituts) . Zum Beispiel
    <att name="infoUrl">http://www.globec.org/</att>
    • Entweder der globale DatensatzQuelleBeiträgeoder seine globale<addAttributes> Geben Sie dieses Attribut an.
    • infoUrlist wichtig, weil es den Kunden ermöglicht, mehr über die Daten aus der Originalquelle zu erfahren.
    • ERDDAP™einen Link zurinfoUrlüber das Datenzugriffsformular des Datensatzes ( datasetID .html) , Stellen Sie ein Diagramm Webseite ( datasetID .graph) , und andere Webseiten.
    • Wenn die URL ein Abfrageteil hat (nach dem "?") , es muss schon seinProzent kodiert. Sie müssen spezielle Zeichen in den Zwängen kodieren (andere als die ersten „&“ und die wichtigsten'=', wenn) in die Form %HH, wobei HH der zweistellige hexadezimale Wert des Zeichens ist. Normalerweise müssen Sie nur ein paar der Pünktlichkeitszeichen umwandeln: % in %25, & in %26, " in %22,<in %3C, = in %3D, > in %3E, + in %2B,|in %7C,\[in %5B,\]in %5D, Raum in %20, und alle Zeichen über #127 in ihr UTF-8-Formular umwandeln und dann prozentual jeden Byte des UTF-8-Formulars in das %HH-Format kodieren (einen Programmierer um Hilfe bitten) . Zum Beispiel, &stationID>= 41004 undstationID%3E =%2241004%22 Die prozentuale Kodierung ist in der Regel erforderlich, wenn Sie aufERDDAPüber eine andere Software als einen Browser. Browser behandeln in der Regel prozentuale Kodierung für Sie. In einigen Situationen müssen Sie Prozent kodieren alle Zeichen andere als A-Za-z0-9\_-!.~ ' () \*, aber noch nicht codieren die anfängliche '&' oder die Haupt'='. Programmiersprachen haben dazu Werkzeuge (siehe z.B.Java'java.net.URLEncoder
      undJavaScript's [encodeURIComponent()! ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) und es gibt Webseiten, die prozentual encode/decode für Sie.
    • Seitdatasets.xmlist eine XML-Datei, Sie müssen auch kodieren ALL '&', '<', und '>' in der URL als '&amp', '<', und '>' nach Prozent Codierung.
    • infoUrlist einzigartigERDDAP. Es ist nicht von jedem Metadaten-Standard.
Institution
  • Institution (vonCFundANLAGEMetadatenstandards) ist ein globales REQUIRED-Attribut mit der kurzen Version des Namens der Institution, die die Quelle dieser Daten ist (in der Regel ein Akronym, in der Regel<20 Zeichen). Zum Beispiel
    <att name="institution">NASA GSFC</att>
    • Entweder der globale DatensatzQuelleBeiträgeoder seine globale<addAttributes> Geben Sie dieses Attribut an.
    • ERDDAP™zeigt das Institut, wann immer es eine Liste von Datensätzen zeigt. Wenn der Name einer Institution hier länger als 20 Zeichen ist, werden in der Liste der Datensätze nur die ersten 20 Zeichen sichtbar. (aber die ganze Institution kann gesehen werden, indem der Maus-Cursor über das benachbarte "?"-Symbol) .
    • Wenn Sie Institution in die Liste der<categoryAttributes> inERDDAP'Setup.xmlDatei, Benutzer können leicht finden Datensätze von derselben Institution überERDDAP's "Search for Datasets by Kategorie" auf der Homepage.
Schlüsselwörter
  • Schlüsselwörter (vonANLAGEMetadatenstandard) ist eine EMPFEHLE-getrennte Liste von Wörtern und kurzen Phrasen (zum Beispiel,GCMD Wissenschaft Schlüsselwörter) die den Datensatz allgemein beschreiben und keine anderen Kenntnisse des Datensatzes annehmen (zum Beispiel für ozeanographische Daten, umfassen Ozean) . Zum Beispiel
    <att name="keywords">ano, circulation, coastwatch, currents, derived, Earth Science &gt; Oceans &gt; Ocean Circulation &gt; Ocean Currents, eastward, eastward\\_sea\\_water\\_velocity, experimental, hf radio, meridional, noaa, northward, northward\\_sea\\_water\\_velocity, nuevo, ocean, oceans, radio, radio-derived, scan, sea, seawater, velocity, water, zonal</att>  

Seitdatasets.xmlist ein XML-Dokument, die Zeichen &,<, und > in einem Attribut wie Keywords (z.B. die > Zeichen in GCMD Science Keywords) muss als & kodiert werden,<, bzw. >. Wenn ein Datensatz geladen wirdERDDAP,

  • "Earth Science > " wird zum Beginn eines GCMD-Keywords hinzugefügt, das es nicht gibt.
  • GCMD Keywords werden in Titel Case umgewandelt (d.h., die ersten Buchstaben werden kapitalisiert) .
  • Die Schlüsselwörter werden in sortierte Reihenfolge umgeordnet und alle neuen Linienzeichen werden entfernt.  
keywords\_vocabulary
  • keywords\_vocabulary (vonANLAGEMetadatenstandard) ist ein ECOMMENDED-Attribut: Wenn Sie eine Leitlinie für die Wörter/Freaks in Ihrem Keyword-Attribut verfolgen (zum Beispiel GCMD Science Keywords) , setzen Sie den Namen dieser Leitlinie hier. Zum Beispiel
    <att name="keywords\\_vocabulary">GCMD Science Keywords</att>  
Lizenz
  • Lizenz (vonANLAGEMetadatenstandard) ist ein STRONGLY RECOMMENDED globales Attribut mit den Lizenz- und/oder Nutzungsbeschränkungen. Zum Beispiel
    <att name="license">\\[standard\\]</att>
    • Wenn "\[Standard\]" tritt im Attributwert ein, es wird durch den Standard ersetztERDDAP™Lizenz aus dem<StandardLicense> tag inERDDAP' \[Tomcat\]/webapps/erdap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml Datei.  
Metadata\_Conventions
  • Metadata\_Conventions aus dem veraltetACDD 1.0 (die inMetadata\_Conventions"UnidataDatensatz Discovery v1.0") metadata standard. Der Attributwert war eine komma-separierte Liste von Metadatenkonventionen, die von diesem Datensatz verwendet wurden. Wenn ein Datensatz ACDD 1.0 verwendet, ist dieses Attribut zum Beispiel STRONGLY RECOMMENDED.
    <att name="Metadata\\_Conventions">COARDS, CF-1.6, Unidata Dataset Discovery v1.0</att>  

Aber...ERDDAP™jetzt empfiehlt ACDD-1.3. Wenn SieIhre Datensätze umgeschaltet, um ACDD-1.3 zu verwenden, VerwendungMetadata\_Conventionsist STRONGLY DISCOURAGED: einfach verwenden [<Übereinkommen > (#conventions) statt.

processing\_level
Projekt
  • Projekt (vonANLAGEMetadatenstandard) ist ein OPTIONAL-Attribut, um das Projekt zu identifizieren, von dem der Datensatz gehört. Zum Beispiel
    <att name="project">GTSPP</att>  

Wenn der Datensatz nicht Teil eines Projekts ist, verwenden Sie dieses Attribut nicht. Im Vergleich zucreator\_name, dies konzentriert sich auf das Projekt (keine Person oder Organisation, die an mehreren Projekten beteiligt sein kann) .

publisher\_name
  • publisher\_name (vonANLAGEMetadatenstandard) ist der EMPFEHL Weg, um die Person, Organisation oder Projekt zu identifizieren, die diesen Datensatz veröffentlicht. Zum Beispiel
    <att name="publisher\\_name">JPL</att>  

Zum Beispiel sind Sie der Herausgeber, wenn eine andere Person oder Gruppeerstelltder Datensatz und Sie werden es einfach überERDDAP. Wenn "publisher" sich nicht wirklich auf einen Datensatz bezieht, verlasse dieses Attribut. Im Vergleich zucreator\_name, der Verleger hat die Daten wahrscheinlich nicht wesentlich verändert oder neu verarbeitet; der Verleger stellt die Daten nur in einem neuen Ort zur Verfügung.

publisher\_email
  • publisher\_email (vonANLAGEMetadatenstandard) ist der EMPFEHLEN Weg, eine E-Mail-Adresse zu identifizieren (korrekt formatiert, zum Beispiel john\_smith@great.org) die eine Möglichkeit bietet, den Verlag zu kontaktieren. Zum Beispiel
    <att name="publisher\\_email">john\\_smith@great.org</att>  

Wenn "publisher" sich nicht wirklich auf einen Datensatz bezieht, verlasse dieses Attribut.

publisher\_url
  • publisher\_url (vonANLAGEMetadatenstandard) ist der ECOMMENDED Weg, eine URL für die Organisation zu identifizieren, die den Datensatz veröffentlicht hat, oder eine URL mit den Informationen des Herausgebers über diesen Datensatz (aber das ist mehr der ZweckinfoUrl) . Zum Beispiel
    <att name="publisher\\_url">https://podaac.jpl.nasa.gov</att>  

Wenn "publisher" sich nicht wirklich auf einen Datensatz bezieht, verlasse dieses Attribut.

real\_time
  • real\_time ist ein globales String Attribut (nicht von Standard) angeben, ob dies ein Echtzeit-Datensatz ist. Zum Beispiel
    <att name="real\\_time">true</att>  

Wenn das falsch ist (Der Standard) ,ERDDAP™wird Antworten auf Anfragen für Dateitypen, in denen die gesamte Datei erstellt werden muss, bevorERDDAP™kann beginnen, die Antwort auf den Benutzer zu senden und sie für bis zu 15 Minuten wiederverwenden (z.B.,.nc, .png) . Wenn das stimmt,ERDDAP™wird nie die Antwortdateien sperren und immer neu erstellte Dateien zurückgeben.

sourceUrlEigenschaften
  • sourceUrl ist ein globales Attribut mit der URL der Quelle der Daten. Zum Beispiel
    <att name="sourceUrl">https://opendap.co-ops.nos.noaa.gov/ioos-dif-sos/SOS</att>  
    (aber alles auf eine Linie setzen)
    • ERDDAP™erstellt dieses globale Attribut in der Regel automatisch. Zwei Ausnahmen sind EDDTableFromHyraxDateien und EDDTableFromThreddsFiles.
    • Wenn die Quelle lokale Dateien und die Dateien von Ihrer Organisation erstellt wurden, verwenden Sie
        <att name="sourceUrl">(local files)</att>
    • Wenn die Quelle lokale Datenbank ist und die Daten von Ihrer Organisation erstellt wurden, verwenden Sie
        <att name="sourceUrl">(local database)</att>
    • sourceUrlist wichtig, weil es den Kunden ermöglicht, auf die ursprüngliche Quelle der Daten zurückzuverfolgen.
    • sourceUrlist einzigartigERDDAP. Es ist nicht von jedem Metadaten-Standard.
standard\_name\_vocabulary
  • standard\_name\_vocabulary (vonANLAGEMetadatenstandard) ist ein RECOMMENDED-Attribut, um den Namen des kontrollierten Vokabulars zu identifizieren, aus dem die Variablestandard\_namewerden genommen. Zum Beispiel
    <att name="standard\\_name\\_vocabulary">CF Standard Name Table v77</att>  

für die Version 77 derCF Standard-Namenstabelle.  

subsetVariables
  • subsetVariables (nur für EDDTable-Datensätze) ist ein globales EMPFEHL-Attribut, mit dem Sie eine komma getrennte Liste von [<dataVariable> (#datavariable) destinationNames zur Identifizierung von Variablen, die eine begrenzte Anzahl von Werten aufweisen (anders angegeben: Variablen, für die jeder der Werte viele Duplikate aufweist) . Zum Beispiel
    <att name="subsetVariables">station\\_id, longitude, latitude</att>  

Ist dieses Attribut vorhanden, wird der Datensatz einen datasetID .subset Webseite (und einen Link zu ihm auf jeder Datensatzliste) die Benutzer schnell und einfach verschiedene Teilmengen der Daten auswählen lässt.

  • Jedes Mal, wenn ein Datensatz geladen wird,ERDDAPlädt und speichert auf der Festplatte eine Tabelle mit allen verschiedenen () Kombinationen der Untermenge Variables Variables Werte.ERDDAP™kann lesen, dasssubsetVariablesTisch und Prozess es sehr schnell (insbesondere im Vergleich zum Lesen von vielen Datendateien oder zum Erhalt von Daten aus einer Datenbank oder einem anderen externen Service) .
  • Das erlaubtERDDAP™3 Dinge zu tun:
    1. Es erlaubtERDDAP™eine Liste möglicher Werte in einer Dropdown-Liste auf dem Data Access Formular, Machen Sie eine Graph-Webseite und .subset-Webseiten.
    2. Es erlaubtERDDAP™eine .subset Webseite für diesen Datensatz anbieten. Diese Seite ist interessant, weil sie es leicht macht, gültige Kombinationen der Werte dieser Variablen zu finden, die für einige Datensätze und einige Variablen sehr, sehr hart ist (fast unmöglich) . Dann alle Benutzerwünsche für unterschiedliche () Unterkategorie Variable Daten werden sehr schnell sein.
    3. Wenn eine Benutzeranforderung vorliegt, die sich nur auf eine Teilmenge dieser Variablen bezieht,ERDDAP™kann schnell lesensubsetVariablesund auf die Anfrage antworten. Das kann eine Tonne Zeit und Mühe fürERDDAP.
  • Die Reihenfolge derdestinationNameSie bestimmen die Sortierreihenfolge auf der datasetID .subset Webseite, so werden Sie in der Regel die wichtigsten Variablen zuerst, dann die wenigsten wichtig. Zum Beispiel für Datensätze mit Zeitreihendaten für mehrere Stationen, können Sie zum Beispiel verwenden
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

so dass die Werte nach Station\_id sortiert werden.

  • Natürlich ist es Ihre Wahl, welche Variablen in diesubsetVariablesListe, aber die vorgeschlagene Nutzung ist:

Im Allgemeinen enthalten Variablen, für die Sie möchtenERDDAP™eine Dropdown-Liste der Optionen auf dem Data Access Formular des Datensatzes anzeigen (.html) und Make-A-Graph (.graph) Webseiten.

Im Allgemeinen umfassen Variablen mit Informationen über die Funktionen des Datensatzes (die Stationen, Profile und/oder Trajektorien, insbesondere voncdm\_timeseries\_variables,cdm\_profile\_variables,cdm\_trajectory\_variables) . Für diese Variablen gibt es nur einige verschiedene Werte, so dass sie mit Dropdown-Listen gut funktionieren.

Fügen Sie niemals Datenvariablen ein, die mit einzelnen Beobachtungen verknüpft sind (z.B. Zeit, Temperatur, Salinität, Stromgeschwindigkeit) in dersubsetVariablesListe. Es gibt zu viele verschiedene Werte für diese Variablen, so dass eine Dropdown-Liste langsam zu laden und schwer zu arbeiten mit (oder nicht arbeiten) .

  • Wenn die Anzahl der verschiedenen Kombinationen dieser Variablen größer als 1.000.000 ist, sollten Sie die Einschränkung dersubsetVariablesdass Sie angeben, die Anzahl der verschiedenen Kombinationen auf unter 1.000.000 zu reduzieren; andernfalls datasetID .subset-Webseiten können langsam erzeugt werden. In Extremfällen darf der Datensatz nicht inERDDAP™weil die Erstellung der Liste der verschiedenen Kombinationen zu viel Speicher verwendet. Wenn ja, Sie müssen einige Variablen aus demsubsetVariablesListe.
  • Wenn die Anzahl der einzelnen Werte einer Subsetvariable größer als etwa 20.000 ist, sollten Sie beachten, dass diese Variable nicht in der Liste enthalten ist.subsetVariables; andernfalls dauert es lange, die datasetID .subset, datasetID .graph, und datasetID .html Webseiten. Auch, auf einem Mac, ist es sehr schwer, Auswahlen aus einer Dropdown-Liste mit mehr als 500 Artikel wegen des Fehlens einer Scroll-Bar zu machen. Ein Kompromiss ist: Entfernen Sie Variablen aus der Liste, wenn Benutzer nicht wahrscheinlich Werte aus einer Dropdown-Liste auswählen.
  • Sie sollten jeden Datensatz testen, um zu sehen, obsubsetVariablesDie Einstellung ist okay. Wenn der Quelldatenserver langsam ist und es zu lange dauert (oder scheitert) um die Daten herunterzuladen, entweder die Anzahl der angegebenen Variablen zu reduzieren oder diesubsetVariablesGlobales Attribut.
  • Teil Variablen sind sehr nützlich. Wenn Ihr Datensatz geeignet ist, erstellen Sie bitte einsubsetVariablesAttribut.
  • EDDTableFromSOSautomatisch hinzugefügt
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

wenn der Datensatz erstellt wird.

  • Mögliche Warnung: wenn ein Benutzer die datasetID .subset-Webseite wählt einen Wert aus, der einen SchlittenReturn oder einen neuen Liniencharakter aufweist, datasetID .subset wird scheitern.ERDDAP™kann wegen einiger HTML-Details nicht um dieses Problem herum arbeiten. In jedem Fall ist es fast immer eine gute Idee, den SchlittenReturn und neue Linienzeichen aus den Daten zu entfernen. Um Ihnen zu helfen, das Problem zu beheben, wenn das EDDTable.subsetVariablesDataTable Methode inERDDAPerkennt Datenwerte, die Probleme verursachen, es wird eine Warnung per E-Mail mit einer Liste von Abwärtswerten an die E-Mail senden Alles Um E-Mail-Adressen in setup.xml angegeben. Auf diese Weise wissen Sie, was repariert werden muss.
  • Vorgenerierte Teiltabellen. Normalerweise, wennERDDAP™lädt einen Datensatz, er fordert die einzelnen () Subset-Variablen-Datentabelle aus der Datenquelle, nur über eine normale Datenanforderung. In einigen Fällen sind diese Daten nicht aus der Datenquelle verfügbar oder das Abrufen aus der Datenquelle kann auf dem Datenquellenserver hart sein. Wenn ja, können Sie eine Tabelle mit den Informationen in einer.jsonoder .csv-Datei mit dem Namen Tomcat /Fortsetzung/Erdrosselung/Untermenge/ datasetID .json (oder .csv) . Wenn vorhanden,ERDDAP™wird es einmal lesen, wenn der Datensatz geladen wird und es als Quelle der Teildaten verwendet.
  • Wenn beim Lesen ein Fehler vorliegt, wird der Datensatz nicht geladen.
  • Es muss genau dieselben Spaltennamen haben (beispielsweise den gleichen Fall) wie<subsetVariables>, aber die Spalten sind in jeder Reihenfolge.
  • Es gibt zusätzliche Spalten (sie werden entfernt und neu redundante Zeilen entfernt werden) .
  • Fehlende Werte sollten fehlende Werte sein (nicht gefälschte Zahlen wie -99) .
  • .jsonDateien können etwas schwieriger zu erstellen, aber mit Unicode Zeichen gut umgehen..jsonDateien sind einfach zu erstellen, wenn Sie sie mitERDDAP.
  • .csv-Dateien sind einfach zu bearbeiten, aber nur für ISO 8859-1 Zeichen geeignet. .csv-Dateien haben nur Spaltennamen in der ersten Zeile und Daten in nachfolgenden Zeilen.
  • Für große Datensätze oder wenn<subsetVariables> ist falsch konfiguriert, die Tabelle der Kombinationen von Werten kann groß genug sein, um zu viel Daten oder OutOfMemory Fehler zu verursachen. Die Lösung besteht darin, Variablen aus der Liste zu entfernen<subsetVariables> für die eine große Anzahl von Werten vorliegt oder Variablen nach Bedarf entfernt werden, bis die Größe dieser Tabelle angemessen ist. Unabhängig von dem Fehler, die TeileERDDAP™dass diesubsetVariablesSystem funktioniert nicht gut (z.B. Webseiten laden sehr langsam) wenn es zu viele Zeilen gibt (z.B. mehr als eine Million) in der Tabelle.
  • subsetVariableshat nichts mit der Angabe zu tun, welche Variablen Benutzer in Zwängen verwenden können, d.h. wie Benutzer Subsets des Datensatzes anfordern können.ERDDAP™immer erlaubt Zwänge, sich auf eine der Variablen zu beziehen.
Zeiteinheiten

Zeit und ZeitstempelSpalten sollten ISO 8601:2004 haben (E) Formatiert Datum+Zeit Z-Strings (zum Beispiel 1985-01-31T15:31:00Z) .  

Zusammenfassung
  • Zusammenfassung (vonCFundANLAGEMetadatenstandards) ist ein REQUIRED globales Attribut mit einer langen Beschreibung des Datensatzes (in der Regel<500 Zeichen). Zum Beispiel
    <att name="summary">VIIRSN Level-3 Standard Mapped Image, Global, 4km, Chlorophyll a, Daily. The Visible and Infrared Imager/Radiometer Suite (VIIRS) is a multi-disciplinary instrument that flies on the National Polar-orbiting Operational Environmental Satellite System (NPOESS) series of spacecraft, including the NPOESS Preparatory Project (NPP).</att>
    • Entweder der globale DatensatzQuelleBeiträgeoder seine globale<addAttributes> Geben Sie dieses Attribut an.
    • Zusammenfassung ist sehr wichtig, weil es den Kunden ermöglicht, eine Beschreibung des Datensatzes zu lesen, der mehr Informationen als den Titel hat und somit schnell verstehen kann, was der Datensatz ist.
    • Hinweis: Bitte schreiben Sie die Zusammenfassung, so dass es funktionieren würde, den Datensatz zu einer zufälligen Person zu beschreiben, die Sie auf der Straße oder einem Kollegen treffen. Denken Sie daran, dieFünf W und ein H: Wer hat den Datensatz erstellt? Welche Informationen wurden gesammelt? Wann wurden die Daten erhoben? Wo wurde sie gesammelt? Warum wurde es gesammelt? Wie wurde es gesammelt?
    • ERDDAP™die Zusammenfassung des Data Access Formulars des Datensatzes anzeigen ( datasetID .html) , Stellen Sie ein Diagramm Webseite ( datasetID .graph) , und andere Webseiten.ERDDAP™verwendet die Zusammenfassung bei der Erstellung von FGDC- und ISO 19115-Dokumenten.
testOutOfDate
  • testOutOfDate (ein optionalesERDDAP-spezifisches globales Metadatenattribut, nicht von Standard) simplistisch spezifiziert, wenn die Daten für einen zeitnahen Datensatz als aktuell betrachtet werden, alsnow- nUnits z.B.now-2days für Daten, die normalerweise 24-48 Stunden nach dem Zeitwert erscheinen. Für Prognosedaten verwenden Sie jetzt + nUnits , zum Beispiel, jetzt + 6days für Prognosedaten, die höchstens 8 Tage in der Zukunft. (Siehenow- nUnits Syntax Beschreibung.) Ist der maximale Zeitwert für den Datensatz jünger als der angegebene Zeitpunkt, wird der Datensatz als aktuell betrachtet. Ist der maximale Zeitwert älter als die angegebene Zeit, wird der Datensatz als aktuell betrachtet. Für aktuelle Datensätze gibt es vermutlich ein Problem mit der Datenquelle, alsoERDDAP™ist nicht in der Lage, Daten von neueren Zeitpunkten zuzugreifen.

DietestOutOfDateWert als Spalte in derallDatasetsDatensatzin deinerERDDAP. Es wird auch verwendet, um den outOfDate Index zu berechnen, der eine andere Spalte in derallDatasetsDatensatz. Wenn der Index<1 wird der Datensatz als aktuell betrachtet. Wenn der Index<=1, der Datensatz gilt als aktuell. Wenn der Index<=2, der Datensatz gilt als sehr aktuell.

DietestOutOfDatewird auch vonERDDAP™um die https://yourDomain/erddap/outOfDateDatasets.html Seite (Beispiel) die die Datensätze, die<testOutOfDate> tags, mit den Datensätzen rangiert, wie aktuell sie sind. Wenn Sie den Dateityp ändern (von .html bis .csv,.jsonlCSV,.nc,.tsv...) , Sie können diese Informationen in verschiedenen Dateiformaten erhalten.

Wenn möglich,GenerateDatasetsXmleinetestOutOfDateAttribut der globalenaddAttributeseines Datensatzes. Dieser Wert ist ein Vorschlag basierend auf den verfügbaren Informationen zu GenerateDatasetsXml. Wenn der Wert nicht angemessen ist, ändern Sie ihn.

"Out-of-date" hier unterscheidet sich sehr von [<Nachladen AllNMinutes>] (#reloadeverynminutes) , die sich mit der aktuellenERDDAP's Wissen über den Datensatz ist. Die<testOutOfDate> System geht davon aus, dassERDDAPDie Kenntnis des Datensatzes ist aktuell. Die Frage<testOutOfDate> behandelt ist: scheint etwas falsch mit der Quelle der Daten zu sein, wodurch neuere Daten nicht zugänglich sindERDDAP?

Titel
  • Titel (vonCFundANLAGEMetadatenstandards) ist ein globales Attribut REQUIRED mit der kurzen Beschreibung des Datensatzes (in der Regel<= 95 Zeichen). Zum Beispiel
    <att name="title">VIIRSN Level-3 Mapped, Global, 4km, Chlorophyll a, Daily</att>
    • Entweder der globale DatensatzQuelleBeiträgeoder seine globale<addAttributes> Geben Sie dieses Attribut an.
    • Titel ist wichtig, weil jede Liste von Datensätzen, die vonERDDAP (andere als Suchergebnisse) listet die Datensätze in alphabetischer Reihenfolge auf, nach Titel. Wenn Sie also die Reihenfolge der Datensätze festlegen möchten oder einige Datensätze zusammen gruppiert haben, müssen Sie damit Titel erstellen. Viele Listen von Datensätzen (z.B. als Antwort auf eine Kategoriesuche) , eine Untermenge der vollständigen Liste und in einer anderen Reihenfolge anzeigen. So sollte der Titel für jeden Datensatz allein stehen.
    • Wenn der Titel das Wort "DEPRECATED" enthält (alle Großbuchstaben) , dann wird der Datensatz ein niedrigeres Ranking in Suchanfragen erhalten.  
<axisVariable>
  • ( ** <axisVariable> ** ! (#axisvariabel) wird verwendet, um eine Dimension zu beschreiben (auch "Achse" genannt) . FürEDDGridDatensätze, ein oder mehrereaxisVariabletags ist REQUIRED, und alledataVariableSimmer alle Achsengrößen teilen/verwenden. (Warum? Und wenn sie es nicht tun?)
    Für jede Dimension der Datenvariablen muss eine Achsgröße vorhanden sein. Axis-Variablen MUST werden in der Reihenfolge angegeben, in der die Datenvariablen sie verwenden. (EDDTable-Datensätze können NICHT verwendet werden<axisVariable> tags.) Ein fleischiges Beispiel ist:

  <axisVariable>
      <sourceName\>MT</sourceName>
      <destinationName\>time</destinationName>
      <addAttributes>
        <att name="units">days since 1902-01-01T12:00:00Z</att>
      </addAttributes>
  </axisVariable>

<axisVariable> unterstützt die folgenden Subtags:

<sourceName\ >
  • (<sourceName< > (#sourcename) -- der Name der Datenquelle für die Variable. Das ist der Name.ERDDAP™wird bei der Anforderung von Daten aus der Datenquelle verwendet. Das ist der Name.ERDDAP™sucht nach, wann Daten aus der Datenquelle zurückgegeben werden. Das ist ein Fall. Das ist REQUIRED.
<destinationName\ >
  • (<destinationName< > (#destinationname) ist der Name für die Variable, die angezeigt und verwendet wirdERDDAP™Benutzer.
    • Das ist OPTIONAL. Wenn nicht, diesourceNamewird verwendet.
    • Dies ist nützlich, weil es Ihnen erlaubt, eine kryptische oder ungerade zu ändernsourceName.
    • destinationNameist Case sensitive.
    • destinationNames Beginnen Sie mit einem Buchstaben (A-Z, a-z) gefolgt von 0 oder mehr Zeichen (A-Z, a-z, 0-9 und \_) . ('-' wurde vorher erlaubtERDDAP™Artikel 1.10.) Diese Beschränkung erlaubt es, die Achsenvariablennamen inERDDAP™, in den Antwortdateien und in der gesamten Software, in der diese Dateien verwendet werden, einschließlich Programmiersprachen (wiePython,Matlab, undJavaScript) wo es ähnliche Einschränkungen bei variablen Namen gibt.
    • InEDDGridDatensätze,Länge, Breite, Höhe, Tiefe und ZeitAchsgrößen sind besonders.  
axisVariable <addAttributes>
  • (<addAttributes> (#variable-addattributes) definiert einen OPTIONAL-Set von Attributen ( Name = Wert ) die den Attributen der Quelle für eine Variable hinzugefügt werden, um die kombinierten Attribute für eine Variable zu machen. Wenn die VariableQuelleBeiträgeoder<addAttributes> einschließlichscale\_factorund/oderadd\_offsetAttribute, ihre Werte werden verwendet, um die Daten aus der Quelle vor der Verteilung auf den Client zu entpacken (Ergebnis Wert = Quelle Wertescale\_factor+add\_offset) . Die ausgepackte Variable wird vom gleichen Datentyp sein (z.B. Schwimmer) alsscale\_factorundadd\_offsetWerte.  
<dataVariable>
  • ( ** <dataVariable> ** ! (#datavariable) ist ein REQUIRED (für fast alle Datensätze) tag innerhalb der<dataset> tag, mit dem eine Datengröße beschrieben wird. Es gibt nur 1 oder mehrere Instanzen dieses Tags. Ein ausgefleischtes Beispiel ist:

  <dataVariable>
      <sourceName\>waterTemperature</sourceName>
      <destinationName\>sea\_water\_temperature</destinationName>
      <dataType>float</dataType>
      <addAttributes>
        <att name="ioos\_category">Temperature</att>
        <att name="long\_name">Sea Water Temperature</att>
        <att name="standard\_name">sea\_water\_temperature</att>
        <att name="units">degree\_C</att>
      </addAttributes>
  </dataVariable>

<dataVariable> unterstützt die folgenden Subtags:

<sourceName>
  • (<sourceName> (#sourcename) -- der Name der Datenquelle für die Variable. Das ist der Name.ERDDAP™wird bei der Anforderung von Daten aus der Datenquelle verwendet. Das ist der Name.ERDDAP™sucht nach, wann Daten aus der Datenquelle zurückgegeben werden. Das ist ein Fall. Das ist REQUIRED.
Gruppen

CF unterstützte Gruppen mit CF v1.8. Beginnend in ~2020,NetCDFWerkzeuge unterstützen das Einsetzen von Variablen in Gruppen.ncDatei. In der Praxis bedeutet dies nur, dass die Variablen einen langen Namen haben, der die Gruppe identifiziert (S) und der variable Name, z.B. group1a/group2c/varName ).ERDDAP™unterstützt Gruppen durch Umwandlung der "/" in der Variablen<sourceName> in "\_"'s in der Variablen<destinationName> zum Beispiel group1a\_group2c\_varName . (Wenn Sie das sehen, sollten Sie erkennen, dass Gruppen nicht viel mehr als eine Syntax-Konvention sind.) Wenn die Variablen aufgelistet sindERDDAP™, alle Variablen in einer Gruppe werden zusammen erscheinen und die zugrunde liegende Gruppe nachahmen.\[wennERDDAP™, insbesondere GenerateDatasets Xml, nicht so gut wie möglich mit Quelldateien, die Gruppen haben, bitte E-Mail eine Musterdatei an Chris. John bei noaa.gov.\]

EDDTableFromFiles-Datensätze können einige speziell kodierte Pseudo-sourceNames zur Definition neuer Datenvariablen, z.B. zur Förderung eines globalen Attributs als Datenvariable. Vgl.Diese Dokumentation.

HDFStrukturen

Beginnen mitERDDAP™V2.12,EDDGridVonNcFiles undEDDGridVon NcFiles Entpackt können Daten von "Strukturen" in.nc4 und.hdf4 Dateien. Um eine Variable zu identifizieren, die von einer Struktur stammt,<sourceName> muss das Format verwenden: Vollständiger StructureName | MitgliedName , zum Beispiel group1/myStruct|myMember .

Quellnamen für feste Werte

In einem EDDTable-Datensatz, wenn Sie eine Variable erstellen möchten (mit einem einzigen, festen Wert) Das ist nicht im Quelldatensatz, verwenden Sie:

    <sourceName>=*fixedValue*</sourceName>  

Das erste Gleichzeichen sagtERDDAP™dass Wert wird folgen.

  • Bei numerischen Größen muss der Festwert ein einziger endlicher Wert oder NaN sein. (Fall unempfindlich, z.B. \=NaN) .
  • Bei String-Variablen muss der Festwert eins sein,JSON-Stil String (mit speziellen Zeichen entkommen mit \ Zeichen) , z.B. \="Meine \"Special\" String" .
  • Geben Sie für eine Zeitstempelvariable den festen Wert als Zahl in"seconds since 1970-01-01T00:00:00Z"und Verwendung Einheiten=Sekunden seit 1970-01-01T00:00Z .

Die anderen Tags für die<dataVariable> als eine regelmäßige Variable arbeiten. Zum Beispiel, um eine Variable genannt Höhe mit einem festen Wert von 0,0 zu erstellen (Flossen) , verwenden:

<sourceName>=0</sourceName>
<destinationName\>altitude</destinationName>
<dataType>float</dataType>

Für ungewöhnliche Situationen können Sie sogar eineactual\_rangeaddAttribute, die die erwarteten Werte von Ziel Min und ZielMax überschreiben wird (die andernfalls gleichgestellt würden Wert) .  

Script SourceNames/Derived Variables

Beginnen mitERDDAP™v2.10, in einemEDDTableFromFiles,EDDTableFromDatabase, oderEDDTableFromFileNamesDatensatz, der<sourceName> kann ein Ausdruck (eine Gleichung, die auf einen einzigen Wert auswertet) , mit dem Format

    <sourceName>=*expression*</sourceName>  

oder ein Skript (eine Reihe von Aussagen, die einen einzigen Wert zurückgibt) , mit dem Format

    <sourceName>=*script*</sourceName>  

ERDDAP™auf derApache-Projekt JavaAusdruckssprache (JEXL) (Lizenz:Apache) die Ausdrücke auswerten und die Skripte ausführen. Die Berechnung für eine bestimmte neue Variable erfolgt innerhalb einer Zeile der Ergebnisse, wiederholt für alle Zeilen. Die Ausdrücke und Skripte verwenden eineJava- undJavaScript-ähnliche Syntax und kann jede der Betreiber und Methoden, die in JEXL gebaut werden. Die Skripte können auch Methoden verwenden (Funktionen) aus diesen Klassen:

  • Kalender2, die ein Wrapper für einige der statischen, zeit- und kalenderbezogenen Methoden in com.cohort.util.Calendar2 ist (Lizenz) . Zum Beispiel Kalender2.parseToEpochSeconds ( sourceTime, date Zeitformat ) wird die Quelle parse Zeitstring über den DatumTimeFormat String und Rückgabe eines"seconds since 1970-01-01T00:00:00Z" (epochSeconds) doppelter Wert.
  • Mathematik, die eine Umhüllung für fast alle statischen, mathematischen Methoden injava.lang. Mathematik. Zum Beispiel Math.atan2 ( y, x ) in rechteckigen Koordinaten (y, x) und liefert polare Koordinaten (eine Reihe von Doppeln mit\[r, theta\]) .
  • Mathematik, die ein Wrapper für fast alle statischen, math-bezogenen Methoden in com.cohort.util ist. Mathematik (Lizenz) . Zum Beispiel Math2.roundTo ( d, nPlaces ) d auf die angegebene Anzahl von Ziffern nach rechts des Dezimalpunktes umlaufen wird.
  • String, die Ihnen Zugriff auf alle statischen, String-bezogenen Methoden injava.lang. Streichung. Streichobjekte inERDDAP™Ausdrücke und Skripte können jede ihrer zugehörigenJavaVerfahren, wie in der java.lang beschrieben. String Dokumentation. Zum Beispiel String.valueOf (dgl.) den doppelten Wert d in einen String umwandeln (obwohl Sie auch ""+d verwenden können) .
  • String2, die ein Wrapper für die meisten der statischen, String- und Array-bezogenen Methoden in com.cohort.util.String2 ist (Lizenz) . Zum Beispiel String2.zEroPad ( Anzahl, nDigits ) wird links von der Zahl String 0's hinzufügen, so dass die Gesamtzahl der Ziffern nDigits ist (z.B. String2.zEroPad ("6", 2) wird zurückkehren "06") .
  • Zeile, die nichtstatische Verfahren zum Zugriff auf die Daten aus den verschiedenen Spalten in der aktuellen Zeile der Quelldatentabelle aufweist. Zum Beispiel Zeile.columnString ("Jahr") liest den Wert aus der Spalte "Jahr" als String, während, Zeile.column In ("Jahr") liest den Wert aus der Spalte "Jahr" als ganze Zahl.

Aus Sicherheitsgründen können Ausdrücke und Skripte keine anderen Klassen als die 6 verwenden.ERDDAP™erzwingt diese Einschränkung durch die Erstellung einer standardmäßigen Blacklist (die alle Klassen schwarz) und dann eine Whitelist (die spezifisch die oben beschriebenen 6 Klassen erlaubt) . Wenn Sie andere Methoden und/oder andere Klassen benötigen, um Ihre Arbeit zu tun, senden Sie bitte Ihre Anfragen an Chris. John bei noaa.gov.

Effizienz

Für EDDTableFromFiles-Datensätze gibt es nur ein sehr, sehr minimal (wahrscheinlich nicht merkbar) Verlangsamung von Datenanfragen aus diesen Variablen. Für EDDTableFromDatabase gibt es für Anträge, die Einschränkungen auf diese Variablen beinhalten (u.a. (&longitude0360>30&longitude0360)<40) weil die Einschränkungen nicht an die Datenbank weitergegeben werden können, so dass die Datenbank viel mehr Daten zurückgeben muss, umERDDAP™ (die sehr zeitaufwendig ist) undERDDAP™kann die neue Variable erstellen und die Strenge anwenden. Um den schlimmsten Fall zu vermeiden (wo keine Einschränkungen an die Datenbank weitergegeben werden) ,ERDDAP™wirft eine Fehlermeldung, damit die Datenbank nicht den gesamten Inhalt der Tabelle zurückgeben muss. (Wenn Sie dies umgehen möchten, fügen Sie eine Strenge zu einer nicht-script Spalte hinzu, die immer wahr sein wird, z.B. &time<3000-01.) Aus diesem Grund ist es mit EDDTableFromDatabase wahrscheinlich immer besser, eine abgeleitete Spalte in der Datenbank zu erstellen, anstatt zu verwendensourceName= BeschreibungERDDAP.

Überblick über Wie ein Ausdruck (Oder Script) Wird verwendet:

Als Antwort auf die Anfrage eines Benutzers für tabellarische Daten,ERDDAP™erhält Daten aus einer Reihe von Quelldateien. Jede Quelldatei erzeugt eine Tabelle des Rohmaterials (gerade aus der Quelle) Daten.ERDDAP™wird dann durch die Tabelle der Rohdaten, Zeile für Zeile gehen und den Ausdruck oder das Skript einmal für jede Zeile auswerten, um eine neue Spalte zu erstellen, die diesen Ausdruck oder das Skript als einsourceName.

GenerateDatasetsXml

Beachten Sie, dass GenerateDatasets Xml ist völlig unaware, wenn es eine Notwendigkeit, eine Variable mit<sourceName>=============================================================================================================================================================================================================================================================== Ausdruck </sourceName>. Sie müssen die Variable in erstellendatasets.xmlvon Hand.

Ausdrücksbeispiele:

Hier sind einige vollständige Beispiele von Datenvariablen, die einen Ausdruck verwenden, um eine neue Datenspalte zu erstellen. Wir erwarten, dass diese Beispiele (und Varianten davon) wird etwa 95% der Nutzung aller Ausdrucksvererbung abdeckensourceNameS.

Kombinieren von separatem "Datum" und"time"Spalten in eine einheitliche Zeitspalte:
    <dataVariable>
<sourceName>=Calendar2.parseToEpochSeconds(row.columnString("date") + "T" +
row.columnString("time") + "Z", "yyyy-MM-dd'T'HH:mm:ss'Z'")</sourceName>
<destinationName>time</destinationName>
<dataType>double</dataType>
<addAttributes>
<att name="units">seconds since 1970-01-01</att>
</addAttributes>
</dataVariable>

DassourceNameein neues"time"Spalte, indem die String-Werte aus dem "Datum" kontaminiert werden (yyyy-MM-dd) und"time" (HH:) Spalten in jeder Zeile der Quelldatei und durch Umwandlung dieses Strings in eine"seconds since 1970-01-01" (epochSeconds) doppelter Wert.

Oder natürlich, Sie müssen die Zeitformat-String anpassen, um mit dem spezifischen Format in jedem Datensatz Quell-Datum und Zeitspalten, siehe die Zeiteinheiten Dokumentation.

Technisch müssen Sie nicht verwenden Kalender2.parseToEpochSeconds () das kombinierte Datum+Zeit in epochSeconds umwandeln. Du könntest einfach das Datum+time String angebenERDDAP™und das Format angeben (z. yyyy-MM-dd'T'HH:mm:ss'Z') über das Attribute der Einheiten. Aber es gibt erhebliche Vorteile, um in epochSeconds umzuwandeln -- insbesondere, EDDTableFromFiles kann dann leicht die Reichweite der Zeitwerte in jeder Datei verfolgen und so schnell entscheiden, ob in einer bestimmten Datei zu suchen, wenn auf eine Anforderung reagiert, die Zeitzwänge hat.

Ein damit verbundenes Problem ist die Notwendigkeit, eine einheitliche Datums-/Zeitspalte aus einer Quelle mit separatem Jahr, Monat, Datum, Stunde, Minute, Sekunde zu erstellen. Die Lösung ist sehr ähnlich, aber Sie werden oft brauchen, um Null-Pad viele der Felder, so dass zum Beispiel Monat (1 - 12) und Datum (1 - 31) haben immer 2 Ziffern. Hier ist ein Beispiel mit Jahr, Monat, Datum:

    <sourceName>=Calendar2.parseToEpochSeconds(row.columnString("year") + 
String2.zeroPad(row.columnString("month"), 2) +
String2.zeroPad(row.columnString("date"), 2), "yyyyMMdd")</sourceName>

Ein damit verbundenes Problem ist die Notwendigkeit, eine einheitliche Breiten- oder Längenspalte zu erstellen, indem die Daten in den einzelnen Graden, Minuten und Sekundenspalten der Quelltabelle zusammengefasst werden, die jeweils als ganze Zahlen gespeichert sind. Zum Beispiel

    <sourceName>=row.columnInt("deg") + row.columnInt("min")/60.0 + 
row.columnInt("sec")/3660.0</sourceName>
Umrechnen einer Spalte namens "lon" mit Längenwerten von 0 - 360° in eine Spalte mit Werten von -180 - 180°
    <dataVariable>
<sourceName>=Math2.anglePM180(row.columnDouble("lon"))</sourceName>
<destinationName>longitude</destinationName>
<dataType>double</dataType>
<addAttributes>
<att name="units">degrees\\_east</att>
</addAttributes>
</dataVariable>

DassourceNameAusdruck macht eine neue "Länge"-Spalte, indem der Doppelwert aus der "lon"-Spalte in jeder Zeile der Quelldatei umgewandelt wird (vermutlich mit 0 - 360 Werten) , und durch Umwandlung in einen -180 bis 180 Doppelwert.

Wenn Sie stattdessen Quelllängenwerte von -180 - 180° in 0 - 360° umwandeln möchten, verwenden

    <sourceName>=Math2.angle0360(row.columnDouble("lon"))</sourceName>

Namen der zwei Längenvariablen: Wenn der Datensatz 2 Längenvariablen hat, empfehlen wir die VerwendungdestinationName= Länge der Größe -180 - 180° unddestinationName=Länge0360 (und LongName="Longitude 0-360°") für die Größe 0 - 360°. Dies ist wichtig, weil Benutzer manchmal Erweiterte Suche verwenden, um Daten in einem bestimmten Längenbereich zu suchen. Diese Suche wird besser funktionieren, wenn die Länge konsequent -180 - 180° Werte für alle Datensätze hat. Außerdem werden die geospatial\_lon\_min, geospatial\_lon\_max, Westernmost\_Easting und Easternmost\_Eastings globalen Attribute konsequent gesetzt. (mit Längenwerten -180 bis 180°) ;

Umrechnen einer Spalte namens "tempF" mit Temperaturwerten in Grad\_ F in eine Spalte namens "tempC" mit Temperaturen in Grad\_ C:
    <dataVariable>
<sourceName>=(row.columnFloat("tempF")-32)\\*5/9</sourceName>
<destinationName>tempC</destinationName>
<dataType>float</dataType>
<addAttributes>
<att name="units">degrees\\_C</att>
</addAttributes>
</dataVariable>

DassourceNameAusdruck macht eine neue "tempC"-Spalte, indem der Float-Grad\_ F-Wert aus der Spalte "tempF" in jeder Zeile der Quelldatei in einen Float-Grad\_ C-Wert.

Beachten Sie, dass Ihr Datensatz sowohl die ursprüngliche Tempo haben kann F Variable und die neue Zeit C-Variable durch eine andere Variable mit

    <sourceName>tempF</sourceName>
Umrechnen von Wind "Geschwindigkeit" und "Richtung" Spalten in zwei Spalten mit den u,v Komponenten
  • Um eine u-variable zu machen, verwenden
    <sourceName>=row.columnFloat("speed") \\* Math.cos(row.columnFloat("direction"))</sourceName>
  • Um eine v-variable zu machen, verwenden
    <sourceName>=row.columnFloat("speed") \\* Math.sin(row.columnFloat("direction"))</sourceName>

Oder, gegeben u,v:

  • Um eine Geschwindigkeitsvariable zu machen, verwenden Sie
    <sourceName>=Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[0\\]</sourceName>
  • Um eine Richtungsvariable zu machen, verwenden Sie
    <sourceName>=Math.toDegrees(Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[1\\])</sourceName>
Script Beispiel:

Hier ist ein Beispiel für die Verwendung eines Skripts, nicht nur eines Ausdrucks, alssourceName. Wir erwarten, dass Skripte im Gegensatz zu Ausdrücken nicht oft benötigt werden. In diesem Fall ist das Ziel, einen nicht-NaN fehlenden Wert zurückzugeben (-99) für Temperaturwerte außerhalb eines bestimmten Bereichs. Beachten Sie, dass das Skript der Teil nach der "=" ist.

    <dataVariable>
<sourceName>=var tc=row.columnFloat("tempC"); return tc&gt;35 || tc&lt;-5? -99.0f : tc\\*9/5+32;</sourceName>
<destinationName>tempF</destinationName>
<dataType>float</dataType>
<addAttributes>
<att name="units">degrees\\_F</att>
</addAttributes>
</dataVariable>
Hard Flag

Wenn Sie den in einemsourceName, Sie müssen eineharte Flaggefür den Datensatz soERDDAP™löscht alle cached Informationen für den Datensatz und liest jede Datendatei neu (Verwendung des neuen Ausdrucks oder Skripts) das nächste Mal lädt es den Datensatz. Alternativ können Sie verwendenDasDdsdie das Äquivalent der Einstellung einer harten Flagge tut.

Prozent Encode

Dies ist nur selten relevant: Weil die Ausdrücke und Skripte indatasets.xml, das ist ein XML-Dokument, Sie müssen Prozent kodieren alle<, \>, und & Zeichen in den Ausdrücken und Skripten wie<, >, und & .

Gemeinsame Probleme

Ein häufiges Problem ist, dass Sie eine Variable mitsourceName= Ausdruck aber die resultierende Datenspalte hat nur fehlende Werte. Alternativ haben einige Zeilen der neuen Spalte fehlende Werte und Sie denken, sie sollten es nicht. Das zugrunde liegende Problem ist, dass etwas mit dem Ausdruck nicht stimmt undERDDAPdiesen Fehler in einen fehlenden Wert umwandelt. Um das Problem zu lösen,

  • Sehen Sie sich den Ausdruck an, um zu sehen, was das Problem sein könnte.
  • Sieh mal.Pressemitteilung, die die erste Fehlermeldung bei der Erstellung jeder neuen Spalte anzeigen wird.

Häufige Ursachen sind:

  • Du hast den falschen Fall benutzt. Ausdrücke und Skripte sind case sensitive.
  • Du hast den Namen der Klasse weggelassen. Zum Beispiel müssen Sie Math.abs verwenden () , nicht nur abs () .
  • Du hast keine Conversions gemacht. Wenn zum Beispiel der Datentyp eines Parameterwerts String ist und Sie einen doppelten Wert haben, müssen Sie ein Doppel in einen String über ""+d umwandeln.
  • Der Spaltenname im Ausdruck passt nicht genau zum Spaltennamen in der Datei (oder der Name kann in einigen Dateien anders sein) .
  • Es gibt einen Syntaxfehler im Ausdruck (z.B. ein fehlendes oder extra ') „.

Wenn du steckst oder Hilfe brauchst, bitte die Details einschließen und unsereAbschnitt zum Erhalt zusätzlicher Unterstützung.

<destinationName>
  • (<destinationName> (#destinationname) -- der Name für die Variable, die angezeigt und verwendet wirdERDDAP™Benutzer.
    • Das ist OPTIONAL. Wenn nicht, diesourceNamewird verwendet.
    • Dies ist nützlich, weil es Ihnen erlaubt, eine kryptische oder ungerade zu ändernsourceName.
    • destinationNameist Case sensitive.
    • destinationNames Beginnen Sie mit einem Buchstaben (A-Z, a-z) gefolgt von 0 oder mehr Zeichen (A-Z, a-z, 0-9 und \_) . ('-' wurde vorher erlaubtERDDAP™Artikel 1.10.) Diese Einschränkung erlaubt es, die Datenvariablennamen inERDDAP™, in den Antwortdateien und in der gesamten Software, in der diese Dateien verwendet werden, einschließlich Programmiersprachen (wiePython,Matlab, undJavaScript) wo es ähnliche Einschränkungen bei variablen Namen gibt.
    • In EDDTable-Datensätzen,Länge, Breite, Höhe (oder Tiefe) , und ZeitDatenvariablen sind besonders.  
<Daten Art und Weise
  • (<DatenTyp>] (#datatype) -- gibt den Datentyp aus der Quelle an. (In einigen Fällen, beispielsweise beim Lesen von Daten aus ASCII-Dateien, gibt es an, wie die Daten aus der Quelle gespeichert werden sollen.)
    • Dies ist REQUIRED von einigen Datensätzen und IGNORED von anderen. Datensatztypen, die dies für ihredataVariables sind:EDDGridVonXxxFiles, EDDTableFromXxxFiles, EDDTableFromMWFS, EDDTableFromNOS, EDDTableFromSOS. Andere Datensätze Typen ignorieren diesen Tag, weil sie die Informationen aus der Quelle erhalten.  
    • Gültige Werte sind jeder der StandardERDDAP™Datentypenplus boolean (siehe unten) . Die DataType-Namen sind case-sensitive.  
booleanische Daten
  • "boolean"ist ein Sonderfall.
    • Intern,ERDDAP™unterstützt keinen Boolean-Typ, weil Booleans fehlende Werte nicht speichern können und die meisten Dateitypen keine Booleans unterstützen. Auch,DAPunterstützt keine Booleaner, so gäbe es keinen Standard Weg, um boolean Variablen abzufragen.
    • Angabe "boolean" für die Daten Typdatasets.xmlwird dazu führen, dass booleanische Werte gespeichert und als Bytes dargestellt werden: 0=false, 1=true, 127=missing\_value.
    • Benutzer können Einschränkungen durch Verwendung der numerischen Werte festlegen (beispielsweise "isAlive=1") .
    • ERDDAP™Administratoren müssen manchmal die "booleschen" Daten verwenden Typdatasets.xmlzu sagenERDDAP™wie Sie mit der Datenquelle interagieren (z.B. boolesche Werte aus einer relationalen Datenbank zu lesen und in 0, 1 oder 127 zu konvertieren) .  
  • Wenn Sie eine Datenvariable aus dem dataType in den Quelldateien ändern möchten (zum Beispiel kurz) in andere Daten Typ im Datensatz (z.B. int) , don't use<dataType>, um anzugeben, was Sie wollen. (Es funktioniert für einige Arten von Datensätzen, aber nicht andere.) Stattdessen:
    • Verwendung<dataTyp>, um anzugeben, was in den Dateien ist (zum Beispiel kurz) .
    • In der<addAttributes> für die Variable,scale\_factorAttribut mit den neuen Daten Typ (z.B. int) und einem Wert von beispielsweise 1,
            <att name="scale\\_factor" type="int">1</att>  
dataVariable <addAttributes>
  • (<addAttributes> (#variable-addattributes) -- definiert eine Reihe von Attributen ( Name = Wert ) die den Attributen der Quelle für eine Variable hinzugefügt werden, um die kombinierten Attribute für eine Variable zu machen. Das ist OPTIONAL. Wenn die VariableQuelleBeiträgeoder<addAttributes> einschließlichscale\_factorund/oderadd\_offsetAttribute, ihre Werte werden verwendet, um die Daten aus der Quelle vor der Verteilung an den Client zu entpacken. Die ausgepackte Variable wird vom gleichen Datentyp sein (z.B. Schwimmer) alsscale\_factorundadd\_offsetWerte.
Variabel<addAttributes>
  • ( ** Variable Attribute / Variable<addAttributes> ** ! (#variable-addattributes) --<addAttributes> ein OPTIONAL-Tag innerhalb eines<axisVariable> oder<dataVariable> tag, mit dem die Attribute der Variablen geändert werden.

    • ** Verwenden Sie eine Variable<addAttributes> zur Änderung der Attribute der Variablen. ** ERDDAP™kombiniert die Attribute einer Variablen aus der Datenquelle (** QuelleBeiträge ) und der Variablen addAttributes die Sie definierendatasets.xml (die Priorität haben) die Variable zu machen " In den Warenkorb ** ", die was sind,ERDDAP™Benutzer sehen. So können Sie verwendenaddAttributesdie Werte von sourceAttributes neu definieren, neue Attribute hinzufügen oder Attribute entfernen.

    • Siehe die [ ** <addAttributes> Informationen (#addattributes) das gilt für global und variabel <addAttributes> ** .

    • ERDDAP™sucht und nutzt viele dieser Attribute auf verschiedene Weise. Beispielsweise sind die colorBar-Werte erforderlich, um eine Variable überWMS, so dass Karten mit konsistenten colorBars gemacht werden können.

    • Die Länge, Breite, Höhe (oder Tiefe) und Zeitvariablenviele entsprechende Metadaten automatisch erhalten (zum Beispiel,Einheiten) .

    • Eine Stichprobe<addAttributes> für eine Datenvariable:

        <addAttributes>
              <att name="actual\_range" type="doubleList">10.34 23.91</att>
              <att name="colorBarMinimum" type="double">0</att>
              <att name="colorBarMaximum" type="double">32</att>
              <att name="ioos\_category">Temperature</att>
              <att name="long\_name">Sea Surface Temperature</att>
              <att name="numberOfObservations" />
              <att name="units">degree\_C</att>
        </addAttributes>

Das leere NumberOfObservations Attribut verursacht das QuellnummerOfObservations Attribut (wenn) aus der letzten, kombinierten Liste der Attribute zu entfernen.

  • Die Bereitstellung dieser Informationen hilftERDDAP™tun Sie einen besseren Job und hilft Benutzern, die Datensätze zu verstehen. Gute Metadaten machen einen Datensatz nutzbar. Unzureichende Metadaten machen einen Datensatz nutzlos. Bitte nehmen Sie die Zeit, einen guten Job mit Metadaten-Attributen zu tun.
Kommentare zu variablen Attributen, die inERDDAP:
actual\_range

<att name="actual\_range" type="floatList"\>0.17 23.58</att>

  • Dieses Attribut stammt aus demCDCOARDSundCF 1.7+Metadatenstandards.
  • Falls vorhanden, muss es ein Array von zwei Werten des gleichen Datentyps sein wie der Bestimmungsdatentyp der Variablen, wobei das Ist (nicht die theoretische oder die erlaubte) Mindest- und Maximalwerte der Daten für diese Variable.
  • Wenn die Daten mitscale\_factorund/oderadd\_offset,actual\_rangemüssen ausgepackte Werte haben und den gleichen Datentyp haben wie die ausgepackten Werte.
  • Für einige Datenquellen (zum Beispiel alle EDDTableFrom... Dateien Datensätze) ,ERDDAP™bestimmt dieactual\_rangejeder Variablen und setzt dieactual\_rangeAttribut. mit anderen Datenquellen (beispielsweise relationale Datenbanken, Cassandra,DAPPER,Hyrax) , es könnte für die Quelle störend oder belastend sein, den Bereich zu berechnen, soERDDAP™nicht anfordern. In diesem Fall ist es am besten, wenn Sieactual\_range (insbesondere für die Längen-, Breiten-, Höhen-, Tiefen- und Zeitvariablen) durch Hinzufügen einesactual\_rangeAttribut zu jeder Variablen [<addAttributes> (#addattributes) für diesen Datensatz indatasets.xmlz.B.

<att name="actual\_range" type="doubleList"\>-180 180</att>

  • Für ZahlenZeit- und Zeitstempelvariablen, die angegebenen Werte sollten die betreffende Quelle sein (nicht Bestimmung) Zahlenwerte. Wenn beispielsweise die Quellzeitwerte als "Tage seit 1985-01" gespeichert werden, dann wirdactual\_rangesollte in "Tagen seit 1985-01" angegeben werden. Und wenn Sie sich auf NOW als den zweiten Wert für kurzfristige Daten beziehen möchten, die regelmäßig aktualisiert werden, sollten Sie NaN verwenden. Zum Beispiel, um einen Datenbereich von 1985-01-17 bis JETZT anzugeben, verwenden

<att name="actual\_range" type="doubleList"\>16 NaN</att>

  • wennactual\_rangebekannt ist (entwederERDDAP™Berechnen oder indem Sie es über<addAttributes>ERDDAP™wird es dem Benutzer im Data Access Formular angezeigt ( datasetID .html) und machen Sie ein Graph Webseiten ( datasetID .graph) für diesen Datensatz und bei der Generierung der FGDC und ISO 19115 Metadaten verwenden. Auch die letzten 7 Tage der Zeitactual\_rangewerden als Standard-Zeit-Subset verwendet.
  • wennactual\_rangeist bekannt, Benutzer können diemin () und max () Funktionenin Anfragen, die oft sehr nützlich sind.
  • Für alle EDDTable... Datensätze, wennactual\_rangebekannt ist (entweder durch Angabe oder durchERDDAP™Berechnung) ,ERDDAP™werden in der Lage sein, schnell alle Anfragen an Daten außerhalb dieses Bereichs abzulehnen. Zum Beispiel, wenn der niedrigste Zeitwert des Datensatzes 1985-01-17 entspricht, wird eine Anforderung für alle Daten von 1985-01-01 bis 1985-01-16 sofort mit der Fehlermeldung "Ihre Abfrage ergab keine passenden Ergebnisse." Das machtactual\_rangeein sehr wichtiges Stück von Metadaten, da esERDDAP™viel Aufwand und viel Zeit sparen. Und das zeigt, dassactual\_rangeWerte dürfen nicht enger sein als der tatsächliche Datenbereich; andernfallsERDDAP™kann falsch sagen "Es gibt keine passenden Daten", wenn es tatsächlich relevante Daten gibt.
  • Wenn ein Benutzer eine Teilmenge von Daten wählt und einen Dateityp anfordert, der Metadaten enthält (zum Beispiel,.nc) ,ERDDAP™Änderungenactual\_rangein der Antwortdatei, um den Subset-Bereich zu reflektieren.
  • Siehe auchdata\_minunddata\_max, die eine alternative Möglichkeit sind, dieactual\_range. Diese werden jedoch jetzt abgeschrieben, daßactual\_rangewird durch CF 1.7+ definiert.  
Farbe Bar Attribute

Es gibt mehrere OPTIONAL-Variable-Attribute, die die vorgeschlagenen Standard-Attribute für eine Farbleiste angeben (verwendet, um Datenwerte in Farben auf Bildern zu konvertieren) für diese Variable.

  • Wenn vorhanden, werden diese Informationen als Standardinformationen durch griddap undtabledapwenn Sie ein Bild anfordern, das eine Farbleiste verwendet.

  • Wenn z.B. Breitenlängenrasterdaten als Deckung auf einer Karte dargestellt werden, gibt die Farbleiste an, wie die Datenwerte in Farben umgewandelt werden.

  • Diese Werte könnenERDDAP™Bilder zu erstellen, die über unterschiedliche Anforderungen eine einheitliche Farbleiste verwenden, auch wenn die Zeit oder andere Dimensionswerte variieren.

  • Diese Attributnamen wurden für die Verwendung inERDDAP. Sie stammen nicht aus einem Metadaten-Standard.

  • Die Attribute im Zusammenhang mit der Farbleiste sind:

    • colorBarMinimum gibt den Mindestwert auf der colorBar an. Zum Beispiel

    <att name="colorBarMinimum" type="double"\>-5</att>

    • Wenn die Daten mitscale\_factorund/oderadd\_offset, geben Sie diecolorBarMinimumals unverpackter Wert.
    • Datenwerte kleiner alscolorBarMinimumdie gleiche Farbe wiecolorBarMinimumWerte.
    • Das Attribut sollteTyp="double", unabhängig vom Typ der Datengröße.
    • Der Wert ist in der Regel eine schöne runde Nummer.
    • Best Practices: Wir empfehlen einen Wert etwas höher als der minimale Datenwert.
    • Es gibt keinen Standardwert.
  • colorBarMaximum gibt den maximalen Wert auf der colorBar an. Zum Beispiel

<att name="colorBarMaximum" type="double"\>5</att>

  • Wenn die Daten mitscale\_factorund/oderadd\_offset, geben Sie diecolorBarMinimumals unverpackter Wert.
  • Datenwerte höher alscolorBarMaximumdie gleiche Farbe wiecolorBarMaximumWerte.
  • Das Attribut sollteTyp="double", unabhängig vom Typ der Datengröße.
  • Der Wert ist in der Regel eine schöne runde Nummer.
  • Best Practices: Wir empfehlen einen Wert etwas niedriger als der maximale Datenwert.
  • Es gibt keinen Standardwert.
  • Farbe BarPalette gibt die Palette für die colorBar an. Zum Beispiel
        <att name="colorBarPalette">WhiteRedBlack</att>
  • AlleERDDAP™Installationen unterstützen diese Standardpaletten: BlackBlueWhite, BlackRedWhite, BlackWhite, BlueWhiteRed, LightRainbow, Ocean, OceanDepth, Rainbow, RedWhiteBlue, ReverseRainbow, Topographie, TopographieDepth\[hinzugefügt in v1.74\], WhiteBlack, WhiteBlueBlack und WhiteRedBlack.
  • Wenn Sie installiert habenzusätzliche PalettenSie können sich auf einen von ihnen beziehen.
  • Wenn dieses Attribut nicht vorhanden ist, ist der Standard BlueWhiteRed, wenn \-1\*colorBarMinimum=colorBarMaximum; andernfalls ist der Standard Rainbow.
  • FarbeBarScale gibt die Skala für die colorBar an. Zum Beispiel
        <att name="colorBarScale">Log</att>
  • Gültige Werte sind Linear und Log.
  • Ist der Wert Log,colorBarMinimummuss größer als 0 sein.
  • Wenn dieses Attribut nicht vorhanden ist, ist der Standard linear.
  • Farbe BarContinuous gibt an, ob die FarbeBar eine kontinuierliche Palette von Farben hat, oder ob die FarbeBar ein paar diskrete Farben hat. Zum Beispiel
        <att name="colorBarContinuous">false</att>
  • Gültige Werte sind die Zeichenfolgen wahr und falsch.
  • Wenn dieses Attribut nicht vorhanden ist, ist der Standard zutreffend.
  • FarbeBarNSections gibt die Standardnummer der Abschnitte auf der colorBar an. Zum Beispiel
        <att name="colorBarNSections" type="int">6</att>
  • Gültige Werte sind positive ganze Zahlen.
  • Wenn dieses Attribut nicht vorhanden ist, ist der Standard \-1, was sagtERDDAP™die Anzahl der Abschnitte basierend auf dem Bereich der colorBar.
WMS

Die wichtigsten Anforderungen an eine Variable, die überERDDAP'WMSServer sind:

  • Der Datensatz muss einEDDGrid... Datensatz.
  • Die Datenvariable MUST ist eine Rastervariable.
  • Die Datengröße MUST hat Längen- und Breitenachsenvariablen. (Andere Achsenvariablen sind OPTIONAL.)
  • Es gibt nur einige Längenwerte zwischen -180 und 180.
  • DiecolorBarMinimumundcolorBarMaximumAttribute MUST angegeben werden. (Andere Farbleisten-Attribute sind OPTIONAL.)
data\_minunddata\_max
  • data\_min und data\_max -- Dies sind deprecated variable Attribute definiert im World Ocean Circulation Experiment (WOCHE) Metadatenbeschreibung. Zum Beispiel

    <att name="data\_min" type="float"\>0.17</att>
    <att name="data\_max" type="float"\>23.58</att>

    • Wir empfehlen Ihnen,actual\_range, stattdata\_minunddata\_max, weilactual\_rangewird nun durch die CF-Spezifikation definiert.
    • Wenn vorhanden, müssen sie den gleichen Datentyp haben wie der Bestimmungsdatentyp der Variablen, und die tatsächliche (nicht die theoretische oder die erlaubte) Mindest- und Maximalwerte der Daten für diese Variable.
    • Wenn die Daten mitscale\_factorund/oderadd\_offset,data\_minunddata\_maxmuss mit dem ausgepackten Datentyp ausgepackt werden.  
VariabledrawLandMask
  • drawLandMask -- Dies ist ein OPTIONAL Variable Attribut, das vonERDDAP™ (und keine Metadatenstandards) die den Standardwert für die Option "Draw Land Mask" auf dem Datensatz Make A Graph Formular angibt ( datasetID .graph) und für den &.land-Parameter in einer URL, die eine Karte der Daten anfordert. Zum Beispiel
        <att name="drawLandMask">under</att>  

SiehedrawLandMaskÜberblick.

Kodierung
  • \_Verschlüsselung
    • Dieses Attribut kann nur mit String-Variablen verwendet werden.
    • Dieses Attribut wird dringend empfohlen.
    • Dieses Attribut stammt aus demNetCDFBenutzerhandbuch (NUG) .
    • Intern inERDDAP™, Strings sind eine Sequenz von 2-byte Zeichen, die dieUnicode UCS-2 Zeichensatz.
    • Viele Dateitypen unterstützen nur 1-Byte-Zeichen in Strings und benötigen so dieses Attribut zur Identifizierung eines zugehörigen Chargier (AKA-Codeseite) die definiert, wie die 256 möglichen Werte auf einen Satz von 256 Zeichen aus dem UCS-2 Zeichensatz und/oder dem Codiersystem, z.UTF-8 (die zwischen 1 und 4 Bytes pro Zeichen benötigt) .
    • Werte für \_Encoding sind case-insensitive.
    • Theorie,ERDDAP™könnte \_Encoding-Identifikatoren vondiese IANA-Liste, aber in der Praxis,ERDDAP™aktuell nur unterstützt
      • ISO-8859-1 (Beachten Sie, dass es Armaturen hat, nicht unterstrichen) , die den Vorteil hat, dass er mit den ersten 256 Zeichen von Unicode identisch ist, und
      • UTF-8.
    • Beim Lesen von Quelldateien ist der Standardwert ISO-8859-1, mit Ausnahme von netcdf-4 Dateien, wobei der Standardwert UTF-8 ist.
    • Dies ist ein anhaltendes Problem, weil viele Quelldateien Zeichensätze oder Kodierungen verwenden, die von ISO-8859-1 verschieden sind, aber nicht die Zeichensatz oder Kodierung identifizieren. Beispielsweise haben viele Quelldatendateien einige Metadaten, die von Microsoft Word unter Windows kopiert und eingefügt werden und haben so schicke Bindestriche und Apostrophe von einem Windows-spezifischen Zeichensatz anstelle von ASCII-Hyphen und Apostrophen. Diese Zeichen erscheinen dann als seltsame Zeichen oder '?' inERDDAP.  
DateiAccessBaseUrl
  • DateiAccessBaseUrlund DateiAccessSuffix sind sehr selten verwendet Attribute, die nicht von jedem Standard sind. Wenn eine EDDTable Spalte Dateinamen von webfähigen Dateien hat (z.B. Bild-, Video- oder Audiodateien) , Sie können hinzufügen
    <att name="fileAccessBaseUrl">*someBaseURL*</a>  

zur Angabe der Basis-URL (mit /) benötigt, um die Dateinamen in vollständige URLs zu machen. In ungewöhnlichen Fällen, wie, wenn eine Spalte Referenzen zu .png-Dateien hat, aber die Werte fehlen ".png", können Sie hinzufügen

    <att name="fileAccessSuffix">*someSuffix*</a>  

(zum Beispiel,<att name="fileAccessSuffix">.png<(a>) um ein Suffix zu definieren, das hinzugefügt werden soll, um die Dateinamen in vollständige URLs zu machen. Dann.htmlTableAntworten,ERDDAP™den Dateinamen als Link zur vollständigen URL anzeigen (die Basis Url plus Dateiname plus Suffix) .

Wenn du willstERDDAP™die entsprechenden Dateien zu bedienen, eine separateEDDTableFromFileNamesDatensatz für diese Dateien (es kann ein privater Datensatz) .

DateiAccessArchive Url
  • DateiAccessArchive Url ist ein sehr selten verwendetes Attribut, das nicht von jedem Standard ist. Wenn eine EDDTable Spalte Dateinamen von webfähigen Dateien hat (z.B. Bild-, Video- oder Audiodateien) die über ein Archiv zugänglich sind (z.B.,.zipDatei) über eine URL zugänglich, Nutzung<att name="fileAccessArchiveUrl"> URL </att> zur Angabe der URL für das Archiv.

Wenn du willstERDDAP™um die Archivdatei zu bedienen, eine separateEDDTableFromFileNamesDatensatz für diese Datei (es kann ein privater Datensatz) .

ioos\_category
  • ioos\_category -- Dies ist ein REQUIRED Variable Attribut, wenn<VariablenMustHaveIoosCategory> wird auf true gesetzt (Der Standard) inSetup.xml; andernfalls ist es OPTIONAL. Zum Beispiel<att name="ioos\_category>Versorgung</att> Die Kategorien stammen ausNOAAIntegriertes Ozeanbeobachtungssystem (IOOS) .

    • (Das Schreiben) Wir sind uns der formalen Definitionen dieser Namen nicht bewusst.
    • Die Kernnamen stammen von Zdenka Willis' .ppt "Integrated Ocean Observing System (IOOS) NOAA"Angriff auf eine erste Betriebsfähigkeit" und von derUS IOOS Blueprint (Seite 1-5) .
    • Es ist wahrscheinlich, dass diese Liste in Zukunft überarbeitet wird. Wenn Sie Anfragen haben, mailen Sie Chris. John bei noaa.gov.
    • ERDDAP™unterstützt eine größere Liste von Kategorien als IOOS tut, weil Bob Simons zusätzliche Namen hinzugefügt (meist auf den Namen der wissenschaftlichen Felder, zum Beispiel Biologie, Ökologie, Meteorologie, Statistik, Taxonomie) für andere Arten von Daten.
    • Die aktuellen gültigen Werte inERDDAP™sind Bathymetry, Biology, Bottom Character, CO2, Colored Dissolved Organic Matter, Contaminants, Currents, Dissolved Nutrients, Dissolved O2, Ecology, Fish Abundance, Fish Species, Heat Flux, Hydrology, Iceplan Distribution, Identifier, Location, Meteorology, Ocean Color, Optical Properties, Other, Pathogens, Phytoplankton Spezies, Pressure,
    • Es gibt einige Überschneidungen und Mehrdeutigkeit zwischen verschiedenen Begriffen -- tun Sie Ihr Bestes.
    • Wenn Sie hinzufügenioos\_categoryin die Liste der<categoryAttributes> inERDDAP'Setup.xmlDatei, Benutzer können leicht finden Datensätze mit ähnlichen Daten überERDDAP's "Search for Datasets by Kategorie" auf der Homepage. Versuchen Sie,ioos\_categoryzur Suche nach Datensätzen von Interesse.
    • Da wareine Diskussion überERDDAP™undioos\_categoryin derERDDAP™Google Group.

Sie können versucht werden zu setzen<VariablenMustHaveIoosCategory> auf false, so dass dieses Attribut nicht benötigt wird. ("Pfft! Was ist los mit mir?") Einige Gründe, es auf die Wahrheit zu verlassen (Der Standard) und Verwendungioos\_categorysind:

  • Wenn setup.xml's<VariablenMustHaveIoosKategorie> ist zu wahr,GenerateDatasetsXmlimmer erstellt/vorschlägt anioos\_categoryAttribut für jede Variable in jedem neuen Datensatz. Warum also nicht einfach reinlassen?
  • ERDDAP™ermöglicht es Benutzern, nach Datensätzen von Interesse nach Kategorie zu suchen.ioos\_categoryist eine sehr nützliche Suchkategorie, weil die ioos\_categories (zum Beispiel Temperatur) sind ziemlich breit. Das machtioos\_categoryviel besser zu diesem Zweck als zum Beispiel die viel feinerkörnige CFstandard\_nameS (die zu diesem Zweck nicht so gut sind wegen aller Synonyme und leichten Variationen, zum Beispiel, see\_oberfläche\_temperature versus Meer\_Wasser\_Temperatur) . (Verwendung)ioos\_categoryzu diesem Zweck von<categoryAttributes> in der Datei setup.xml.) Versuchen Sie,ioos\_categoryzur Suche nach Datensätzen von Interesse.
  • Diese Kategorien stammen ausNOAAIntegriertes Ozeanbeobachtungssystem (IOOS) . Diese Kategorien sind grundlegend für die Beschreibung von IOOS Mission. Wenn Sie inNOAA, Unterstützungioos\_categoryist gut Eins.NOAAwas zu tun ist. (Schau dir das an.EinNOAAVideound sei inspiriert!) Wenn Sie in einer anderen US- oder internationalen Agentur sind, oder mit Regierungsbehörden arbeiten, oder mit einem anderen Ocean Observing System arbeiten, ist es nicht eine gute Idee, mit dem US IOOS Büro zusammenzuarbeiten?
  • Früher oder später, Sie mögen vielleicht etwas anderes wollenERDDAP™über die Verbindung zu Ihren DatensätzenEDDGridVon ErddapundEDDTableFromErddap. Wenn der andereERDDAP™Anforderungenioos\_category, Ihre Datensätze müssenioos\_categoryim AuftragEDDGridVonErddap und EDDTableFromErddap zur Arbeit.
  • Es ist psychologisch viel einfacher,ioos\_categorywenn Sie den Datensatz erstellen (Es ist nur eine andere Sache,ERDDAP™erfordert den Datensatz zuERDDAP) , als es nach der Tatsache hinzuzufügen (wenn Sie sich für die Zukunft entscheiden) .  
long\_name
  • long\_name (COARDS,CFundANLAGEMetadatenstandards) ist ein RECOMMENDED Variable AttributERDDAP. Zum Beispiel
        <att name="long\\_name">Eastward Sea Water Velocity</att>
    • ERDDAP™Verwendung vonlong\_namezur Kennzeichnung von Achsen auf Diagrammen.
    • Best Practices: Kapitalisieren Sie die Wörter in derlong\_nameals ob es ein Titel wäre (Kapitalisieren Sie das erste Wort und alle Nicht-Artikelwörter) . Nicht die Einheiten in derlong\_name. Der lange Name sollte nicht sehr lang sein (normalerweise<20 Zeichen), sollte aber deskriptiver sein als diedestinationName, die oft sehr genau ist.
    • Wenn "long\_name" wird nicht in der Variable definiertQuelleBeiträgeoder<addAttributes>ERDDAP™wird sie erzeugen, indem siestandard\_name (wenn vorhanden) oderdestinationName.  
missing\_value
  • missing\_value und ) Wert (COARDSundCF) sind variable Attribute, die eine Zahl beschreiben (zum Beispiel -9999) die verwendet wird, um einen fehlenden Wert darzustellen. Zum Beispiel

<att name="missing\_value" type="double"\>-9999</att>

Für String-Variablen ist der Standard für beide "" (die leere Saite) . Für numerische Variablen ist der Standard für beide NaN.

  • ERDDAP™unterstützt beidemissing\_valueund \_FillValue, da einige Datenquellen ihnen leicht verschiedene Bedeutungen zuordnen.
  • Falls vorhanden, sollten sie den gleichen Datentyp haben wie die Variable.
  • Wenn die Daten mitscale\_factorund/oderadd\_offset, diemissing\_valueund \_FillValue-Werte sollten ebenfalls verpackt werden. In ähnlicher Weise für eine Spalte mit String-Datum/Zeit-Werten, die eine lokaletime\_zone, diemissing\_valueund \_FillValue-Werte sollten die lokale Zeitzone verwenden.
  • Wenn eine Variable diese Sonderwerte verwendet,missing\_valueund/oder \_FillValue Attribute sind REQUIRED.
  • FürZeit- und Zeitstempelvariablen (ob die Quelle Strings oder numerisch ist) ,missing\_values und \_FillValues erscheinen als "" (die leere Saite) wenn die Zeit als String und als NaN geschrieben wird, wenn die Zeit als Doppel geschrieben wird. Die Quellwerte fürmissing\_valueund \_FillValue erscheint nicht in den Metadaten der Variablen.
  • Für String-Variablen,ERDDAP™immer konvertiert allemissing\_values oder \_FillValue-Datenwerte in "" (die leere Saite) . Die Quellwerte fürmissing\_valueund \_FillValue erscheint nicht in den Metadaten der Variablen.
  • Für numerische Variablen: Diemissing\_valueund \_FillValue erscheint in den Metadaten der Variablen. Für einige Ausgabedatenformate,ERDDAP™wird diese Sondernummern intakt lassen, z.B., Sie sehen -9999. Für andere Ausgabedatenformate (insbesondere textähnliche Formate wie .csv und.htmlTable) ,ERDDAP™diese Sondernummern durch NaN oder " ersetzen".
  • Einige Datentypen haben inhärente fehlende Wertmarker, die nicht explizit mitmissing\_valueoder \_FillValue Attribute: Float und Doppelvariablen haben NaN (Nicht eine Nummer) , String-Werte verwenden den leeren String und Char-Werte haben Zeichen\uffff (Zeichen #65535, das ist Unicode's Wert für Nicht ein Zeichen) . Integer-Datentypen haben keine inhärenten fehlenden Wertmarker.
  • Wenn eine Ganzzahlvariable einen fehlenden Wert aufweist (beispielsweise eine leere Position in einer .csv-Datei) ,ERDDAP™wird den Wert als definiert interpretierenmissing\_valueoder \_FillValue für diese Variable. Wenn keine definiert ist,ERDDAP™den Wert als Standard-Vermissungswert für diesen Datentyp interpretiert, der immer der Maximalwert ist, der durch diesen Datentyp gehalten werden kann: 127 für Byte-Variablen, 32767 für kurz, 2147483647 für int, 9223372036854775807 lange, 255 für ubyte, 65535 für ushort, 4294967295 für uint, und 18446744073709551615 für ulong.
ADD \_FillValue ATTRIBUTES?
  • ADD \_FillValue ATTRIBUTES?
    Jedes MalERDDAP™lädt einen Datensatz, es prüft, ob die Variablen mit ganzzahligen Quelldatentypen eine definiertemissing\_valueoder \_FillValue Attribut. Wenn eine Variable nicht, dannERDDAP™druckt eine Nachricht an die Protokolldatei (beginnend mit "Add \_FillValue Attribut?") dies zu empfehlenERDDAP™Administrator hinzufügen \_Fill Wertattribut für diese Variable indatasets.xml. Es ist sehr nützlich für jede Variable, eine \_FillValue odermissing\_valueweil fehlende Werte immer möglich sind, z.B. wenn eine bestimmte Datei in einem Datensatz keine vorgegebene Größe aufweist,ERDDAP™muss diese Variable mit allen fehlenden Werten für diese Variable darstellen können. Wenn Sie eine Variable nicht über ein \_FillValue Attribut entscheiden, können Sie hinzufügen <att name="\_FillValue">null</att stattdessen, die die Nachricht dafür unterdrücken wirddatasetID+variable Kombination in der Zukunft.

Jedes MalERDDAP™startet, sammelt alle diese Empfehlungen in eine Nachricht, die in die Protokolldatei geschrieben wird (beginnend mit "ADD \_FillValue ATTRIBUTES?") , E-Mail an dieERDDAP™Administrator und in eine CSV-Datendatei in der\[BigParentDirectory\]/logs/ Verzeichnis. Wenn Sie möchten, können Sie das Programm GenerateDatasetsXml verwenden (und die Option AddFillValueAttributes) alle Vorschläge in der CSV-Datei auf diedatasets.xmlDatei. Für jede derdatasetID/variable Kombinationen in dieser Datei, wenn Sie sich entscheiden, es gibt keine Notwendigkeit, das Attribut hinzuzufügen, können Sie das Attribut ändern<att name="\_FillValue">null</att> zur Unterdrückung der EmpfehlungdatasetID+variable Kombination in der Zukunft.

Das ist wichtig! Wie Bob oft gesagt hat: es wäre schlecht (und peinlich) wenn einige der Beweise der globalen Erwärmung durch nicht identifizierte fehlende Werte in den Daten verursacht wurden (z.B. Temperaturen von 99 oder 127 Grad\_ C, die als fehlende Werte gekennzeichnet sein sollten und somit die mittleren und/oder medianen Statistiken höher) .

  • Die \_FillValue undmissing\_valueWerte für eine bestimmte Variable in verschiedenen Quelldateien müssen konsistent sein; andernfallsERDDAP™wird Dateien mit einem Satz von Werten akzeptieren und alle anderen Dateien als "Bad Files" ablehnen. Um das Problem zu lösen,
    • Wenn die Dateien gerastert sind.ncDateien, können Sie verwendenEDDGridVonNcFilesUnpacked.
    • Wenn die Dateien tabellarische Dateien sind, können Sie EDDTableFrom...Files 'Standardisierung Was?zu sagenERDDAPdie Quelldateien zu standardisieren, wie sie eingelesen werdenERDDAP.
    • Für härtere Probleme können SieNcMLoderNCOdas Problem zu lösen.  
scale\_factor
  • scale\_factor (Standard = 1) und add\_offset (Standard = 0) (COARDSundCF) sind OPTIONAL-variable Attribute, die Daten beschreiben, die in einem einfacheren Datentyp über eine einfache Transformation verpackt werden.
    • Sofern vorhanden, ist ihr Datentyp von dem Quelldatentyp verschieden und beschreibt den Datentyp der Zielwerte. Beispielsweise könnte eine Datenquelle Floatdatenwerte mit einer Dezimalstelle gespeichert haben, die als kurze Ints verpackt ist. (In den Warenkorb) , mitscale\_factor= 0,1 undadd\_offset= 0. Zum Beispiel

    <att name="scale\_factor" type="float"\>0.1</att>
    <att name="add\_offset" type="float"\>0</att>

In diesem BeispielERDDAP™würde die Daten auspacken und dem Benutzer als Float-Datenwerte präsentieren.

  • Wenn vorhanden,ERDDAP™extrahiert die Werte aus diesen Attributen, entfernt die Attribute und entpackt automatisch die Daten für den Benutzer: Bestimmung Wert = Quelle Wertescale\_factor+add\_offset
    Oder anders gesagt: unpackedValue = verpackt Wertescale\_factor+add\_offset
  • Diescale\_factorundadd\_offsetWerte für eine bestimmte Variable in verschiedenen Quelldateien müssen konsistent sein; andernfallsERDDAP™wird Dateien mit einem Satz von Werten akzeptieren und alle anderen Dateien als "Bad Files" ablehnen. Um das Problem zu lösen,
    • Wenn die Dateien gerastert sind.ncDateien, können Sie verwendenEDDGridVonNcFilesUnpacked.
    • Wenn die Dateien tabellarische Dateien sind, können Sie EDDTableFrom...Files 'Standardisierung Was?zu sagenERDDAPdie Quelldateien zu standardisieren, wie sie eingelesen werdenERDDAP.
    • Für härtere Probleme können SieNcMLoderNCOdas Problem zu lösen.  
standard\_name
  • standard\_name (vonCFMetadatenstandard) ist ein RECOMMENDED Variable AttributERDDAP. CF hält die Liste der zugelassenenCF-Standardnamen. Zum Beispiel
        <att name="standard\\_name">eastward\\_sea\\_water\\_velocity</att>
    • Wenn Sie hinzufügenstandard\_namezu den Attributen von Variablen undstandard\_namein die Liste der<categoryAttributes> inERDDAP'Setup.xmlDatei, Benutzer können leicht finden Datensätze mit ähnlichen Daten überERDDAP's "Search for Datasets by Kategorie" auf der Homepage.
    • Wenn Sie eine CF angebenstandard\_namefür eine Variable muss das Attribut Einheiten für die Variable nicht mit den für den Standardnamen in der CF Standard-Namenstabelle angegebenen kanonischen Einheiten identisch sein, sondern die Einheiten MUST in die kanonischen Einheiten konvertierbar sein. Zum Beispiel alle temperaturbedingten CFstandard\_names haben "K" (Kelvin) als kanonische Einheiten. So eine Variable mit einem temperaturbedingtenstandard\_nameHaben Sie Einheiten von K, Grad\_C, Grad\_F oder einige UDUnits-Variante dieser Namen, da sie alle interkonvertierbar sind.
    • Best Practices: Teil der Machtgesteuerte Vokabelnkommt von der Nutzung nur der Begriffe in der Liste. Wir empfehlen also, sich an die im kontrollierten Vokabular definierten Begriffe zu halten, und wir empfehlen, einen Begriff zu erstellen, wenn in der Liste kein entsprechender vorhanden ist. Wenn Sie zusätzliche Bedingungen benötigen, sehen Sie, ob der Standardausschuss sie dem kontrollierten Wortschatz hinzufügen wird.
    • standard\_nameWerte sind die einzigen CF Attributwerte, die case sensitive sind. Sie sind immer alle Kleinen. BeginnenERDDAP™v1.82, GenerateDatasets wird Großbuchstaben in Kleinbuchstaben konvertieren. Und wenn ein Datensatz geladen wirdERDDAP, Großbuchstaben werden still in Kleinbuchstaben geändert.  
time\_precision
  • time\_precisionist ein OPTIONAL Attribut, das vonERDDAP™ (und keine Metadatenstandards) fürZeit- und Zeitstempelvariablen, die in netzgebundenen Datensätzen oder tabellarischen Datensätzen sein können, und inaxisVariables oderdataVariableS. Zum Beispiel
        <att name="time\\_precision">1970-01-01</att>  
    time\_precisiongibt die zu verwendende Präzision an, wennERDDAP™formatiert die Zeitwerte dieser Variablen als Strings auf Webseiten, einschließlich.htmlTableAntworten. In Dateiformaten, in denenERDDAP™Formate Zeiten als Zeichenketten (z.B. .csv und.json) ,ERDDAP™nur verwendettime\_precision- angegebenes Format, wenn es fraktionierte Sekunden enthält; andernfallsERDDAP™verwendet 1970-01T00:00 Z-Format.
  • Gültige Werte sind 1970-01, 1970-01-01-01-01T00Z, 1970-01-01T00:00Z, 1970-01-01T00:00Z (Der Standard) , 1970-01-01T00:00:00:00.0Z, 1970-01-01T00:00:00:00.00Z, 1970-01-01T00:00:00:00.000Z.\[1970 ist keine Option, weil es eine einzige Zahl ist, alsoERDDAP™kann nicht wissen, ob es sich um einen formatierten Zeitstring handelt (Jahr) oder wenn es einige Sekunden seit 1970-01-01T00:00Z ist.\]
  • wenntime\_precisionwird nicht spezifiziert oder der Wert nicht angepasst, der Standardwert wird verwendet.
  • Hier wie in anderen TeilenERDDAP™, alle Felder der formatierten Zeit, die nicht angezeigt werden, werden angenommen, um den Mindestwert zu haben. Zum Beispiel 1985-07, 1985-07-01, 1985-07-01T00Z, 1985-07-01T00:00Z und 1985-07-01T00:00:00 Z gelten alle als gleichwertig, obwohl mit unterschiedlichen Genauigkeitsstufen impliziert. Das passt zuISO 8601:2004"extended"Zeitformat Spezifikation.
  • WARNING: Sie sollten nur eine begrenztetime\_precisionwenn alle der Datenwerte für die Variable haben nur den Mindestwert für alle Felder, die versteckt sind.
  • Zum Beispiel können Sie einetime\_precisionvon 1970-01-01, wenn alle Datenwerte Stunde = 0, Minute = 0 und Sekunde = (zum Beispiel 2005-03-04T00:00Z und 2005-03-05T00:00Z) .
  • Verwenden Sie zum Beispiel keinetime\_precisionvon 1970-01, wenn es nicht-0 Stunden, Minute oder Sekunden Werte, (zum Beispiel 2005-03-05T12:00:00Z) weil der nicht-Standard-Stundenwert nicht angezeigt werden würde. Andernfalls, wenn ein Benutzer für alle Daten mit time=2005-03-05 fragt, wird die Anfrage unerwartet scheitern.  
time\_zone
  • time\_zone
    • time\_zoneist ein OPTIONAL Attribut, das vonERDDAP™ (und keine Metadatenstandards) fürZeit- und Zeitstempelvariablen, die in Rasterdatensätzen oder tabellarischen Datensätzen vorliegen können.
    • Der Standard ist "Zulu" (die moderne Zeitzone Version von GMT) .
    • Hintergrundinformationen: "Zeitversetzungen" (z.B. Pacific Standard Time, -08:00, GMT-8) sind feste, spezifische Versätze relativ zuZulu (GMT) . Im Gegensatz dazu sind "Zeitzonen" die viel komplexeren Dinge, die von Daylight Saving beeinflusst werden (z.B. "US/Pacific") , die an verschiedenen Orten unterschiedliche Regeln hatten. Die Zeitzonen haben immer Namen, da sie nicht durch einen einfachen Offsetwert zusammengefasst werden können. (die Spalte "TZ-Datenbanknamen" in der Tabelle an https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones ) .ERDDAP'time\_zoneAttribut hilft Ihnen, lokale Zeitdaten aus einer Zeitzone zu behandeln (z.B. 1987-03-25T17:32:05 ) Zeit) . Wenn Sie String- oder numerische Zeitdaten mit einer (fest) Zeitversatz, sollten Sie einfach die Daten anpassenZulu (das ist wasERDDAP™will) durch Angabe einer anderen Basiszeit im Attribut Einheiten (z.B. "Stunden seit 1970-01-01T08:00Z", beachten Sie den T08, um den Zeitversatz anzugeben) , und immer überprüfen Sie die Ergebnisse, um sicherzustellen, dass Sie die gewünschten Ergebnisse erhalten.
    • Für Zeitstempelvariablen mit Quelldaten von Strings können Sie mit diesem Attribut eine Zeitzone angeben, die führtERDDAP™um die lokalen Zeitzonen-Quellenzeiten zu konvertieren (einige in Standardzeit, einige in Tageslicht Sparzeit) inZuluZeiten (die immer in Standardzeit sind) . Die Liste der gültigen Zeitzonennamen ist wahrscheinlich identisch mit der Liste in der TZ Spalte bei https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones . Gemeinsame US-Zeitzonen sind: US/Hawaii, US/Alaska, US/Pacific, US/Mountain, US/Arizona, US/Central, US/Eastern.
    • Für Zeitstempelvariablen mit numerischen Quelldaten können Sie die "time\_zone"Attribut, aber der Wert muss "Zulu" oder "UTC". Wenn Sie Unterstützung für andere Zeitzonen benötigen, mailen Sie bitte Chris. John bei noaa.gov.  
Einheiten
  • Einheiten (COARDS,CFundANLAGEMetadatenstandard) definiert die Einheiten der Datenwerte. Zum Beispiel
        <att name="units">degree\\_C</att>
    • "units" ist REQUIRED entweder als SourceAttribute oder als AddAttribute für"time"Variablen und ist STRONGLY RECOMMENDED für andere Variablen, wann immer es angemessen ist (die fast immer) .

    • Im Allgemeinen empfehlen wirUDUniten\-kompatible Einheiten, die von derCOARDSundCFNormen.

    • Ein weiterer gemeinsamer Standard istUCUM-- der Einheitliche Kodex für Maßeinheiten.OGCDienstleistungen wieSOS,WCS, undWMSbenötigen UCUM und beziehen sich oft auf UCUM als UOM (Maßeinheiten) .

    • Wir empfehlen Ihnen, für alle Datensätze in Ihrem Standard eine Einheit zu verwendenERDDAP. Du solltest es sagen.ERDDAP™welchen Standard Sie mit<Einheiten\_standard>, in IhrerSetup.xmlDatei.

    • Die Einheiten für eine bestimmte Variable in verschiedenen Quelldateien müssen konsistent sein. Wenn Sie eine Sammlung von Datendateien haben, in denen eine Teilmenge der Dateien verschiedene Einheitenwerte verwendet als eine oder mehrere andere Teilmengen der Dateien (z.B. "Tage seit 1985-01" gegen "Tage seit 2000-01", "degree\_Celsius" gegen "deg\_C" oder "Knoten" gegen "m/s") müssen Sie einen Weg finden, die Einheitenwerte zu standardisieren, andernfalls,ERDDAP™nur eine Teilmenge der Dateien laden. Denken Sie darüber nach: Wenn eine Datei WindSpeed-Einheiten=Knoten hat und eine andere WindSpeed-Einheiten=m/s hat, sollten die Werte aus den beiden Dateien nicht im gleichen aggregierten Datensatz enthalten sein.

      • Wenn die Dateien gerastert sind.ncDateien, in vielen Situationen können Sie verwendenEDDGridVonNcFilesUnpacked.
      • Wenn die Dateien tabellarische Dateien sind, können Sie in vielen Situationen EDDTableFrom...Files 'Standardisierung Was?zu sagenERDDAPdie Quelldateien zu standardisieren, wie sie eingelesen werdenERDDAP.
      • Für härtere Probleme können SieNcMLoderNCOdas Problem zu lösen.
    • Der CF-Standard-Abschnitt 8.1 sagt, dass wenn die Daten einer Variablen überscale\_factorund/oderadd\_offset, "Die Einheiten einer Variablen sollten repräsentativ für die ausgepackten Daten sein."

    • Für Zeit- und Zeitstempelvariablen,entweder die VariableQuelleBeiträgeoder<addAttributes> (das vorausgeht) MUSSEinheitendie entweder

      • Für Zeitachsenvariablen oder Zeitdatenvariablen mit numerischen Daten:UDUniten\-kompatibler String (mit dem Format Einheiten seit Basiszeit ) beschreiben, wie Quellzeitwerte interpretiert werden (zum Beispiel, Sekunden seit 1970-01-01T00:00Z) .

      Einheiten kann jeder von:

          ms, msec, msecs, millis, millisec, millisecs, millisecond, milliseconds,  
      s, sec, secs, second, seconds, m, min, mins, minute, minutes, h, hr, hrs, hour, hours,
      d, day, days, week, weeks, mon, mons, month, months, yr, yrs, year, or years.

Technisch gesehenERDDAP™folgt NICHTUDUNITSStandard beim Konvertieren"years since"und"months since"Zeitwerte bis"seconds since". DieUDUNITSStandard definiert ein Jahr als Festwert: 3.15569259747e7 Sekunden. UndUDUNITSdefiniert einen Monat als Jahr/12. Leider, die meisten / alle Datensätze, die wir gesehen haben, dass Verwendung"years since"oder"months since"klar beabsichtigen, dass die Werte Kalenderjahre oder Kalendermonate sind. Zum Beispiel 3"months since 1970-01-01"gemeint ist in der Regel 1970-04-01. Also,ERDDAP™Dolmetschen"years since"und"months since"als Kalenderjahre und Monate, und nicht streng folgenUDUNITSStandard.

Die Basiszeit muss eine ISO 8601:2004 sein (E) formatiert Datum Zeitkette (yyyy-MM-dd'T'HH:mm:ssZ, zum Beispiel 1970-01-01T00:00Z) , oder eine Variation davon (zum Beispiel mit am Ende fehlenden Teilen) .ERDDAP™versucht, mit einer Vielzahl von Variationen dieses idealen Formats zu arbeiten, beispielsweise wird "1970-1-1 0:0:0" unterstützt. Wenn die Zeitzoneninformation fehlt, wird davon ausgegangen, dass dieZuluZeitzone (AKA GMT) . Selbst wenn ein anderer Zeitversatz angegeben ist,ERDDAP™nie verwendet Daylight Sparzeit. Wenn die BaseTime ein anderes Format verwendet, müssen Sie<addAttributes> zur Angabe einer neuen Einheitenkette, die eine Änderung der ISO 8601:2004 verwendet (E) Format (z.B. Wechseltage seit 1. Januar 1985 in Tage seit 1985-01.

Sie können testenERDDAP's Fähigkeit, mit einem bestimmten Einheiten seit Basiszeit mitERDDAP'Time Converter. Hoffentlich können Sie eine Nummer einstecken (den ersten Zeitwert aus der Datenquelle?) und eine Einheitenfolge, klicken Sie auf Konvertieren, undERDDAP™wird sie in eine ISO 8601:2004 umwandeln können (E) formatiert Datum Zeitkette. Der Konverter gibt eine Fehlermeldung zurück, wenn die Einheitenfolge nicht erkennbar ist.

String Time Units

Für die häufig verwendeten Zeitformate, die Variationen der ISO 8601:2004 sind (E) Standardformat (zum Beispiel, 2018-01-02T00:00Z) , Sie können Variationen angebenyyyy-MM-dd'T'HH:mm:ssZ zum Beispielyyyy-MM-ddwenn die Stringzeit nur ein Datum hat. Für jedes Format, das mit yyyyy-M beginnt,ERDDAPverwendet einen speziellen Parser, der sehr vergeben von kleinen Variationen im Format ist. Der Parser kann Zeitzonen im Format 'Z', "UTC", "GMT", ±XX, ±XX und ±XX Formate verarbeiten. Wenn Teile der Datumszeit nicht angegeben sind (z.B. Minuten und Sekunden) ,ERDDAP™den niedrigsten Wert für dieses Feld annimmt (z.B., wenn Sekunden nicht angegeben sind, wird von Sekunden = 0 ausgegangen.) .

Für alle anderen String-Zeitformate müssen Sie einen DateTimeFormatter-kompatiblen Zeitformat-String genau festlegen. Wieyyyy-MM-dd'T'HH:mm:ssZ, diese Format-Strings sind aus Zeichen, die eine bestimmte Art von Informationen aus der Zeitkette identifizieren, z.B. m bedeutet Minute-of-hour. Wenn Sie das Formatzeichen einige Male wiederholen, verfeinert es die Bedeutung, z.B. m bedeutet, dass der Wert durch jede Anzahl von Ziffern vorgegeben werden kann, mm bedeutet, dass der Wert durch 2 Ziffern vorgegeben werden muss. DieJavaDie Dokumentation für DateTimeFormatter ist eine grobe Übersicht und macht diese Details nicht deutlich. Hier ist also eine Liste von Formatcharaktervariationen und deren Bedeutung inERDDAP™ (die sich manchmal etwas vonJavaDatumTimeFormatter) :

ZeichenBeispieleBedeutung
U, y, Y\-4712, 0, 1, 10, 100, 2018eine Jahreszahl, jede Zahl von Ziffern.ERDDAP™Leckereien (Jahr) und Y (Wochen-basiertes Jahr, da dies oft irrtümlich anstelle von y verwendet wird) wie u, dieAnzahl der Tage. Astronomische Jahre sind positive oder negative Zahlen, die die BCE nicht verwenden (BC) oder CE (ADAC) Raddesigner: 2018=2018CE, ..., 2=2CE, 1=1CE, 0=1BCE, -1=2BCE, -2=3BCE, ...
uuuuu, yyyy, YYY\-4712, 0000, 0001, 0010, 0100, 2018eine 4stellige astronomische Jahreszahl (ignorieren alle vorhergehenden '-')
M1, 01, 12eine Monatsnummer, jede Zahl von Ziffern (1 = Januar)
MM01, 122stellig (Null gepolstert) Monat
MMMJan, jan, JANein 3 Buchstaben englischer Monatsname, Fall unempfindlich
MMMMJan, jan, JAN, Januar, Januar, Januar, JANUARein 3 Buchstaben oder voller englischer Monat Name, Fall unempfindlich
dgl.1, 01, 31pro Monat, jede Zahl von Ziffern
d)01, 312stellig (Null gepolstert) Tag des Monats. Das erste 'stellige' kann ein Raum sein.
D1, 001, 366Tag-of-Jahr, jede Anzahl von Ziffern, 001=Jan 1
DDD001, 366Tag des Jahres, 3 Ziffern, 001=Jan 1
EEEthu, THU, Thuein 3 Buchstaben Tag der Woche, Wert wird beim Parsing ignoriert
EEEEthu, THU, Thu, Donnerstag, Donnerstagein 3 Buchstaben oder voll englischer Tag der Woche, Fall unempfindlich, Wert wird beim Parsing ignoriert
H0, 00, 23H Tagesstunde (0-23) , jede Zahl von Ziffern
HH00, 23HH Tagesstunden (00-23) 2 Ziffern. Das erste 'stellige' kann ein Raum sein.
eineam, AM, pm, PMAM oder PM, case-insensitive
H12, 1, 01, 11Uhrzeit von morgens (12, 1, 2, 11) , jede Zahl von Ziffern
H12, 01, 11Uhrzeit von morgens (12, 1, 2, 11) 2 Ziffern. Das erste 'stellige' kann ein Raum sein.
K0, 1, 11Stunde (0, 1, ...11) , jede Zahl von Ziffern
KK00, 01, 11Uhrzeit, 2 Ziffern
m0, 00, 59min-of-hour, jede Anzahl von Ziffern
mm00, 59Minute-of-Stunde, 2 Stellen
S0, 00, 59Zweite Minute, jede Anzahl von Ziffern
S00, 592stellig, 2stellig
S0, 000, 9, 999Bruchteil von Sekunden, als ob nach einem Dezimalpunkt, jede Anzahl von Ziffern
SS00, 99Hundertstel einer zweiten, 2 Ziffern
SSS000, 999Tausende von Sekunden, 3 Ziffern
A0, 0000, 86399999Millisekunden von Tag, jede Anzahl von Ziffern
AAAAAAA00000000, 86399999Millisekunden-of-day, 8 Stellen
N0, 00000000000000, 863999999999999Nanosekunden von Tag, jede Anzahl von Ziffern. InERDDAP™, das ist zu nMillis gekürzt.
NNNNNNNNNNNNNNNNNN0000000000000000000000, 863999999999999Nanosekunden von Tag, 14 Ziffern. InERDDAP™das ist zu nMillis gekürzt.
n0, 000000000000000, 59999999999Nanosekunden, jede Anzahl von Ziffern. InERDDAP™das ist zu nMillis gekürzt.
nnnnnnnnn000000000000000, 59999999999Nanosekunden, 11 Ziffern. InERDDAP™das ist zu nMillis gekürzt.
XXX, ZZZZ, -08:00, +01:00eine Zeitzone mit dem Format 'Z' oder ± (2stellige Stunde Offset) : (2stellige Minute Offset) . Diese Leckereien Raum als + (Nicht-Standard) . ZZZ-Unterstützung 'Z' ist nicht standardmäßig, sondern befasst sich mit einem gemeinsamen Benutzerfehler.
XX, ZZZ -0800, +0100eine Zeitzone mit dem Format 'Z' oder ± (2stellige Stunde Offset) : (2stellige Minute Offset) . Diese Leckereien Raum als + (Nicht-Standard) . ZZ-Unterstützung 'Z' ist nicht standardmäßig, sondern befasst sich mit einem gemeinsamen Benutzerfehler.
X, ZZ, -08, +01eine Zeitzone mit dem Format 'Z' oder ± (2stellige Stunde Offset) : (2stellige Minute Offset) . Diese Leckereien Raum als + (Nicht-Standard) . Z unterstützt 'Z' ist nicht standardmäßig, sondern beschäftigt sich mit einem gemeinsamen Benutzerfehler.
Xxx\-08:00, +01:00eine Zeitzone mit dem Format ± (2stellige Stunde Offset) : (2stellige Minute Offset) . Diese Leckereien Raum als + (Nicht-Standard) .
xx\-0800, +0100eine Zeitzone mit dem Format ± (2stellige Stunde Offset) (2stellige Minute Offset) . Diese Leckereien Raum als + (Nicht-Standard) .
x\-08, +01eine Zeitzone mit dem Format ± (2stellige Stunde Offset) . Diese Leckereien Raum als + (Nicht-Standard) .
''T', 'Z', 'GMT'Beginn und Ende einer Reihe von literarischen Zeichen
' ' (zwei einzelne Zitate)' 'zwei einzelne Zitate ein buchstäbliches einzelnes Zitat
\[\]\[ \]Beginn ("\[") und Ende ("\]") eines optionalen Abschnitts. Diese Notation wird nur für wörtliche Zeichen und am Ende der Formatfolge unterstützt.
#, & #123;, & #125;#, & #123;, & #125;reserviert für zukünftige Nutzung
G,L,Q,e,c,V,z,O,pDiese Formatierungszeichen werden unterstützt vonJava's DateTimeFormatter, aber derzeit nicht vonERDDAP. Wenn Sie Unterstützung für sie benötigen, mailen Sie Chris. John bei noaa.gov.

Anmerkungen:

  • In einer Datumszeit mit Punktion können numerische Werte eine variable Anzahl von Ziffern haben (z.B. im US-Slash-Datumsformat "1/2/1985" können der Monat und das Datum 1 oder 2 Ziffern betragen) so muss das Format 1-Buchstaben-Token verwenden, z.B. M/d/yyyy, die jede Anzahl von Ziffern für Monat und Datum akzeptieren.
  • Ist die Anzahl der Ziffern für einen Gegenstand konstant, z.B. 01/02/1985, so geben Sie die Anzahl der Ziffern im Format an, z.B. MM/dd/yyyy für 2-stelligen Monat, 2-stelliges Datum und 4stelliges Jahr.
  • Diese Formate sind knifflig zu arbeiten. Ein vorgegebenes Format kann für die meisten, aber nicht alle, Zeitstrings für eine bestimmte Variable arbeiten. Überprüfen Sie immer, ob das angegebene Format wie erwartet funktioniertERDDAPfür alle Zeitketten einer Variablen.
  • Wenn möglich, GenerateDatasetXml wird Zeitformat-Strings vorschlagen.
  • Wenn Sie Hilfe benötigen, um einen Format-String zu generieren, senden Sie bitte Chris. John bei noaa.gov.

Die Hauptzeitdatenvariable (für tabellarische Datensätze) und die Hauptzeitachse variabel (für gegitterte Datensätze) von derdestinationNameZeit. Ihre Einheiten Metadaten müssen ein UDUnits-kompatibler Einheitenstring für numerische Zeitwerte sein, z.B. "Tage seit 1970-01-01" (für tabellarische oder gitterierte Datensätze) , oderEinheiten geeignet für Stringzeiten, z.B. "M/d/yyyy" (für tabellarische Datensätze) .

Verschiedene Zeiteinheiten in verschiedenen Gridded.ncDateien - Wenn Sie eine Sammlung von gegitterten.ncDateien, bei denen für die Zeitvariable eine Teilmenge der Dateien verschiedene Zeiteinheiten als eine oder mehrere andere Teilmengen der Dateien verwendet, können SieEDDGridVonNcFilesUnpacked. Es wandelt Zeitwerte in"seconds since 1970-01-01T00:00:00Z"auf einer niedrigeren Ebene, wodurch die Unterschiede versteckt werden, so dass Sie einen Datensatz aus der Sammlung heterogener Dateien machen können.

TimeStamp Variablen

TimeStamp Variablen-- Jede andere Variable (axisVariableoderdataVariablein einemEDDGridoder EDDTable-Datensatz) kann eine TimeStamp-Variable sein. Timestamp-Variablen sind Variablen, die zeitbezogene Einheiten und Zeitdaten haben, aber eine<destinationName> andere als die Zeit. TimeStamp Variablen verhalten sich wie die Hauptzeitvariable, indem sie das Zeitformat der Quelle in"seconds since 1970-01-01T00:00:00Z"und/oder ISO 8601:2004 (E) Format).ERDDAP™erkennt Zeit Stamp-Variablen nach ihrer zeitbezogenen "Einheiten" Metadaten, die diesem regulären Ausdruck entsprechen müssen "\[a-zA-Z\]+ + + +\[0-9\].+" (für numerisches Datum Zeiten, zum Beispiel"seconds since 1970-01-01T00:00:00Z") oder ein Datum sein Zeitformat-String mit "uuuu", "yyyy" oder "YYYY" (zum Beispiel "yyyy-MM-dd"T'HH:mm:ssZ") . Aber bitte immer noch benutzendestinationName "time"für das Hauptdatum Zeitvariable.

Überprüfen Sie immer Ihre Arbeit, um sicherzustellen, dass die Zeitdaten, die inERDDAP™die richtigen Zeitdaten. Die Arbeit mit Zeitdaten ist immer knifflig und fehleranfällig.

Vgl.mehr Informationen zu Zeitvariablen. ERDDAP™hat ein DienstprogrammNumerisch umrechnen Zeit für/von einer Streichzeit. Vgl.WieERDDAP™Angebote mit Zeit.  

valid\_range

oder

<att name="valid\_min" type="float"\>0.0</att>
<att name="valid\_max" type="float"\>40.0</att>

  • Falls vorhanden, sollten sie den gleichen Datentyp wie die Variable haben und die gültigen Mindest- und Maximalwerte der Daten für diese Variable festlegen. Benutzer sollten Werte außerhalb dieses Bereichs als ungültig betrachten.
  • ERDDAP™nicht geltenvalid\_range. Sagte einen anderen Weg:ERDDAP™keine Datenwerte außerhalb dervalid\_rangezum \_Fill Wert odermissing\_value.ERDDAP™übergibt diese Metadaten und lässt die Anwendung bis zu Ihnen. Warum? Das ist, wofür diese Metadaten sind. Wenn der Datenanbieter gewünscht hätte, hätte der Datenanbieter die Datenwerte außerhalb dervalid\_rangezu sein \_FillValues.ERDDAP™erraten nicht den Datenanbieter. Dieser Ansatz ist sicherer: wenn später gezeigt wird, dassvalid\_rangewar zu schmal oder sonst falsch,ERDDAP™die Daten nicht vernichtet haben.
  • Wenn die Daten mitscale\_factorund/oderadd\_offset,valid\_range,valid\_minundvalid\_maxsollte der gepackte Datentyp und die Werte sein. SeitERDDAP™Anwendungsbereichscale\_factorundadd\_offsetwenn es den Datensatz lädt,ERDDAP™wird entpackenvalid\_range,valid\_minundvalid\_maxWerte, so dass die Ziel-Metadaten (den Benutzern angezeigt) wird den ausgepackten Datentyp und -bereich angeben. Oder wenn ein Auspackenvalid\_rangeAttribut ist vorhanden, es wird umbenanntvalid\_rangewennERDDAP™lädt den Datensatz.
<entfernenMVRows>
  • ( ** <EntfernenMVRows> ** ! (#removemvrows) ist ein OPTIONAL-Tag innerhalb eines Tags indatasets.xmlfür EDDTableFromFiles (einschließlich aller Unterklassen) datasets, obwohl es nur für EDDTableFromMultidimNcFiles verwendet wird. Es kann einen Wert von wahr oder falsch haben. Zum Beispiel, wahr Dies entfernt jeden Block von Zeilen am Ende einer Gruppe, wo alle Werte sindmissing\_value, \_FillValue oder der CoHort ...Array nativen fehlenden Wert (oder char=#32 für CharArrays) . Dies ist für den CF DSG Multidimensional Array Dateityp und ähnliche Dateien. Wenn zutreffend, dies tut die richtige Prüfung und so lädt immer alle max-Dim-Variablen, so kann es zusätzliche Zeit. Der Standardwert ist falsch. Empfehlung -- Wenn möglich für Ihren Datensatz empfehlen wir, removeMVRows auf false zu setzen. Das Setzen von removeMVRows to true kann die Anfragen erheblich verlangsamen, kann jedoch für einige Datensätze benötigt werden.