Przejdź do głównej treści

Praca zdatasets.xmlPlik

\[Ta strona będzie interesować tylkoERDDAP™administratorzy.\]

Po zakończeniuERDDAP™ instrukcje instalacji, musisz edytowaćdatasets.xmlplik tomcat / content / erddap / w celu opisania zbiorów danychERDDAP™instalacja będzie służyć.

Możesz zobaczyć przykładdatasets.xmlw sprawie GitHub.

Wprowadzenie

Niektóre zespoły wymagane

Tworzenie zbioru danych wERDDAP™nie jest tylko kwestią wskazywania katalogu danych lub adresu URL. Musisz napisać kawałek XML dladatasets.xmlktóry opisuje zbiór danych.

  • Dla zestawów danych z zapięciem, w celu dostosowania zestawu danych doERDDAPStruktura danych dla danych zawiązanych, musisz zidentyfikować podzbiór zmiennych zbioru danych, które mają te same wymiary. (Dlaczego? Jak?)
  • Bieżące metadane zbioru danych są automatycznie importowane. Ale jeśli chcesz zmodyfikować metadane lub dodać inne metadane, musisz je określić wdatasets.xml. IERDDAP™potrzebuje innych metadanych, w tymatrybuty globalne (takie jakinfoUrl, instytucji,sourceUrl, streszczenie i tytuł) orazatrybuty zmienne (takie jaklong\_namei jednostki) . Podobnie jak metadane, które są obecnie w zbiorze danych dodaje informacje opisowe do zbioru danych, metadane wymagane przezERDDAP™dodaje informacje opisowe do zbioru danych. Dodatkowe metadane jest dobrym dodatkiem do zbioru danych i pomagaERDDAP™lepiej zaprezentować swoje dane użytkownikom, którzy ich nie znają.
  • ERDDAP™potrzebuje zrobić specjalne rzeczy zdługość, szerokość, wysokość (lub głębokość) oraz zmienne czasowe.

Jeśli kupić do tych pomysłów i wydać wysiłek, aby utworzyć XML dladatasets.xmlMasz wszystkie zaletyERDDAP™w tym:

  • Pełne wyszukiwanie tekstów dla zbiorów danych
  • Szukaj zbiorów danych według kategorii
  • Formularze dostępu do danych ( datasetID .html) więc możesz poprosić o podzbiór danych w wielu różnych formatach plików
  • Formularze do żądania wykresów i map ( datasetID .graph)
  • Web Map Service (WMS) dla zestawów danych w sieci
  • RESTfuldostęp do danych

Dokonywaniedatasets.xmlpodejmuje znaczne wysiłki w odniesieniu do kilku pierwszych zbiorów danych, ale będzie łatwiej . Po pierwszym zbiorze danych, można często ponownie użyć dużo swojej pracy do następnego zbioru danych. Na szczęście,ERDDAP™ma dwaNarzędziapomóc w tworzeniu XML dla każdego zbioru danych wdatasets.xml. Jeśli utkniesz, zobacz naszerozdział dotyczący uzyskania dodatkowego wsparcia.

Dostawca danych Formularz

Kiedy dostawca danych przychodzi do Ciebie mając nadzieję na dodanie niektórych danych doERDDAP, zbieranie wszystkich metadanych może być trudne i czasochłonne (informacje o zbiorze danych) potrzebne do dodania zbioru danychERDDAP. Wiele źródeł danych (na przykład pliki .csv, Pliki Excel, bazy danych) nie posiadają wewnętrznych metadanych, więcERDDAP™posiada formularz dostawcy danych, który gromadzi metadane od dostawcy danych i daje dostawcy danych inne wytyczne, w tym obszerne wytyczne dlaDane w bazach danych. Przedstawione informacje przelicza się nadatasets.xmlformat, a następnie email doERDDAP™administrator (Ty) i napisane (załączone) do bigParentDirectory / logs / dataProviderForm.log. Tak więc, forma pół-automatyzuje proces uzyskiwania zbioru danych doERDDAP, aleERDDAP™administrator nadal musi ukończyćdatasets.xmlkawałek i zająć się uzyskiwaniem pliku danych (s) od dostawcy lub połączenia z bazą danych.

Składanie rzeczywistych plików danych ze źródeł zewnętrznych jest ogromnym ryzykiem dla bezpieczeństwa, więcERDDAP™Nie ma z tym problemu. Musisz znaleźć rozwiązanie, które działa dla Ciebie i dostawcy danych, na przykład, e-mail (dla małych plików) , ciągnąć z chmury (na przykład DropBox lub Google Drive) , strona sftp (z hasłami) lub trampki netto (pendrive USB lub zewnętrzny dysk twardy) . Powinieneś akceptować tylko pliki ludzi, których znasz. Trzeba będzie skanować pliki w poszukiwaniu wirusów i podjąć inne środki ostrożności.

Nie ma połączenia wERDDAP™do formularza dostawcy danych (na przykład, naERDDAP™strona główna) . Zamiast tego, kiedy ktoś mówi, że chce mieć swoje dane podawane przezERDDAP, można wysłać im e-mail mówiąc coś w stylu: Tak, możemy przenieść twoje dane doERDDAP. Aby rozpocząć, proszę wypełnić formularz na https://yourUrl/erddap/dataProviderForm.html (lubhttp://jeżelihttps://nie jest włączona) . Jak skończysz, skontaktuję się z tobą, żeby ustalić szczegóły. Jeśli chcesz tylko spojrzeć na formularz (bez wypełniania go) , można zobaczyć formularz naERDjestERDDAP:Wprowadzenie,Część 1,Część 2,Część 3orazCzęść 4. Te linki doERD ERDDAP™wysyłaj informacje do mnie, nie do ciebie, więc nie przesyłaj informacji z nimi, chyba że rzeczywiście chcesz dodać dane doERD ERDDAP.

Jeśli chcesz usunąć formularz Dostawcy Danych z TwojegoERDDAP™, put

<dataProviderFormActive>false</dataProviderFormActive>  

w pliku setup.xml.

Impulsem było to

Publiczny dostęp do wyników badań (PARR) dyrektywa
(https://www.glerl.noaa.gov/review2016/reviewer_docs/NOAA_PARR_Plan_v5.04.pdf), co wymaga, aby wszystkieNOAAdane środowiskowe finansowane za pośrednictwem dolarów podatników są udostępniane za pośrednictwem usługi danych (nie tylko pliki) w ciągu 12 miesięcy od stworzenia. Jest więc zwiększone zainteresowanie używaniemERDDAP™w celu jak najszybszego udostępnienia zbiorów danych za pośrednictwem serwisu. Potrzebowaliśmy skuteczniejszego sposobu radzenia sobie z dużą liczbą dostawców danych.

Uczucia / sugestie? Ten formularz jest nowy, więc proszę e-mailerd dot data at noaa dot govjeśli masz jakieś informacje zwrotne lub sugestie do poprawy tego.

Narzędzia

ERDDAP™pochodzi z dwóch programów linii poleceń, które są narzędziami, które pomogą utworzyć XML dla każdego zbioru danych, które chceszERDDAP™służyć. Kiedy już się ustawiszERDDAP™i uruchomić go (co najmniej jeden raz) , można znaleźć i używać tych programów w tomcat / webapps / erddap / WEB- INF. Istnieją skrypty powłoki Linux / Unix (z rozszerzeniem .sh) i skrypty Windows (z przedłużeniem .bat) dla każdego programu.\[Na Linuksie uruchom te narzędzia jako tego samego użytkownika (Tomcat?) To będzie Tomcat.\]Po uruchomieniu każdego programu, będzie zadawać pytania. Dla każdego pytania wpisz odpowiedź, a następnie naciśnij Enter. Lub naciśnij ^ C, aby wyjść z programu w każdej chwili.

Program nie działa?

  • Jeśli uzyska się nieznany program (lub podobne) komunikat błędu, problem jest prawdopodobnie, że system operacyjny nie mógł znaleźćJava. Musisz dowiedzieć się, gdzieJavajest na Twoim komputerze, a następnie edytuj odniesienie do javy w pliku .bat lub .sh, którego próbujesz użyć.
  • Jeśli plik jar nie został znaleziony lub klasa nie znalazła wiadomości błędu, toJavanie mogłem znaleźć żadnej z klas wymienionych w pliku .bat lub .sh, którego próbujesz użyć. Rozwiązaniem jest ustalenie, gdzie znajduje się plik .jar i edytowanie odniesienia do niego w pliku .bat lub .sh.
  • Jeśli używasz wersjiJavaktóry jest zbyt stary na program, program nie będzie działał i zobaczysz komunikat błędu jak Wyjątek od wątku "main" java.lang.Unsupported ClassVersionError: some / class / name : Nieobsługiwana wersja major.minor someNumber
    Rozwiązaniem jest aktualizacja do najnowszej wersjiJavai upewnij się, że plik .sh lub .bat dla programu go używa.

Narzędzia drukują różne komunikaty diagnostyczne:

  • Słowo "ERROR" jest używane, gdy coś poszło tak źle, że procedura nie została zakończona. Chociaż to irytujące, aby uzyskać błąd, błąd zmusza do rozwiązania problemu.
  • Słowo "OSTRZEŻENIE" jest używane, gdy coś poszło nie tak, ale procedura została zakończona. Są dość rzadkie.
  • Wszystko inne to tylko pouczająca wiadomość. Możesz dodać\ -verbose doGenerateDatasetsXmllubDasDslinia poleceń, aby uzyskać dodatkowe wiadomości informacyjne, co czasami pomaga rozwiązać problemy.

Te dwa narzędzia są bardzo pomocne, ale nadal musisz uważnie przeczytać wszystkie te instrukcje na tej stronie i podjąć ważne decyzje.

GenerateDatasetsXml

  • GenerateDatasetsXml jest programem linii poleceń, który może wygenerować przybliżony szkic XML dla prawie każdego typu zbioru danych.

MOŻLIWE ZALECANIE, że używasz GenerateDatasets Xml zamiast tworzenia fragmentówdatasets.xmlręcznie, ponieważ:

  • GenerateDatasets Xml działa w sekundach. Ręcznie to co najmniej godzina pracy, nawet jeśli wiesz, co robisz.
  • GenerateDatasets Xml robi lepsze rzeczy. Dokonywanie tego ręcznie wymaga szerokiej wiedzy o tym, jakERDDAP™działa. Jest mało prawdopodobne, że wykonasz lepszą pracę ręcznie. (Bob Simons zawsze używa GenerateDatasets Xml za pierwszy szkic, i napisałERDDAP.)
  • GenerateDatasets Xml zawsze generuje ważny fragmentdatasets.xml. Każdy kawałekdatasets.xmlże piszesz prawdopodobnie będzie mieć co najmniej kilka błędów, które zapobiegająERDDAP™od wczytania zbioru danych. Zdiagnozowanie tych problemów często zajmuje ludziom godziny. Nie marnuj czasu. Generuj Zestawy danych Xml odwala ciężką robotę. Następnie można poprawić .xml ręcznie, jeśli chcesz.

Podczas korzystania z GenerateDatasets Program Xml:

  • W systemie Windows, po raz pierwszy uruchomiony GenerateDatasetsXml, musisz edytować plik GenerateDatasetsXml.bat z edytorem tekstu, aby zmienić ścieżkę do javy. Plik exe, aby Windows mógł znaleźćJava.
  • GenerateDatasets Xml najpierw prosi o podanie EDDType (Erd Dap Dataset Rodzaj) zbioru danych. PatrzLista typów danych (w niniejszym dokumencie) dowiedzieć się, który typ jest odpowiedni dla zbioru danych, nad którym pracujesz. Oprócz zwykłych typów EDDType, istnieje również kilkaTypy danych specjalnych / Pseudo (np. taki, który czołga się do katalogu THREDDS, aby wygenerować kawałekdatasets.xmldla każdego zbioru danych w katalogu) .
  • GenerateDatasets Xml następnie zadaje serię pytań specyficznych dla tego EDDType. Pytania gromadzą informacje potrzebne doERDDAP™dostęp do źródła zbioru danych. Zrozumieć coERDDAP™Pyta o, zobacz dokumentację dla EDDType, które zostały określone przez kliknięcie na ten sam typ zbioru danych wLista typów danych.

Jeśli musisz wprowadzić ciąg znaków specjalnych (np. znaki Whitespace na początku lub końcu, znaki nieASCII) , enter aciąg w stylu JSON- (ze specjalnymi znakami, które uciekły z\ znakami) . Na przykład, aby wprowadzić tylko znak zakładki, wprowadź "\ t" (z otaczającymi cudzysłów, które mówiąERDDAP™że to jest ciąg w stylu JSON.

  • Często jedną z twoich odpowiedzi nie będzie to, czego potrzebuje GenerateDatasetsXml. Następnie można spróbować ponownie, z poprawionymi odpowiedziami na pytania, aż GenerateDatasets Xml może skutecznie znaleźć i zrozumieć dane źródłowe.
  • Jeśli odpowiesz poprawnie na pytania (lub wystarczająco poprawnie) , GenerateDatasets Xml połączy się ze źródłem zbioru danych i zgromadzi podstawowe informacje (na przykład nazwy zmiennych i metadane) . Dla zbiorów danych, które są z lokalnegoNetCDF .nci powiązane pliki, GenerateDatasets Xml będzie często drukować ncdump- podobną strukturę pliku po pierwszym odczycie pliku. To może dać informacje, aby lepiej odpowiedzieć na pytania w następnej pętli poprzez GenerateDatasetsXml.
  • GenerateDatasets Xml wygeneruje dla tego zbioru przybliżony szkic zbioru danych XML.
  • Informacje diagnostyczne i szkic zbioru danych XML zostaną napisane na bigParentDirectory / logs / GenerateDatasetsXml.log.
  • Prosty szkic zbioru danych XML zostanie napisany do bigParentDirectory / logs / GenerateDatasetsXml.out.

"0 plików" Komunikat o błędzie

Jeśli uruchomisz GenerateDatasets Xml lubDasDs, lub jeśli próbujesz załadowaćEDDGridZ plików lub EDDTableFrom... Zestaw danych plików wERDDAP™, i otrzymasz komunikat błędu "0 files" wskazujący, żeERDDAP™znaleziono 0 pasujących plików w katalogu (kiedy myślisz, że są pasujące pliki w tym katalogu) :

  • Sprawdź, czy podano pełną nazwę katalogu. Jeśli podasz nazwę pliku próbki, upewnij się, że podałeś pełną nazwę pliku, w tym pełną nazwę katalogu.

  • Sprawdź, czy pliki są w tym katalogu.

  • Sprawdź pisownię nazwy katalogu.

  • Sprawdź plik NameRemex. Bardzo łatwo popełnić błędy z regexami. Do celów testowych, spróbuj regex.\ *, który powinien pasować do wszystkich nazw plików. (Widzisz to?dokumentacja regexorazregex tutorial.)

  • Sprawdź, czy użytkownik, który prowadzi program (np. użytkownik = tomcat (?) dla Tomcat /ERDDAP) ma pozwolenie na przeczytanie tych plików.

  • W niektórych systemach operacyjnych (na przykład, SELER) i w zależności od ustawień systemu, użytkownik, który prowadził program, musi mieć "przeczytaj" pozwolenie na cały łańcuch katalogów prowadzących do katalogu, który posiada pliki.

  • Jeśli masz problemy, których nie możesz rozwiązać,Prośba o wsparciez jak największą ilością informacji. Podobnie, jeśli wydaje się, że odpowiedni typ EDDType dla danego zbioru danych nie działa z tym zbiorem danych, lub jeśli nie ma odpowiedniego typu EDDType, należy złożyćwydanie na GitHubze szczegółami (oraz, w stosownych przypadkach, dokumentację próbki) .  

Musisz edytować wyjście z GenerateDatasets Xml, żeby było lepiej.

 

  • DISCLAIMER: CHUNKdatasets.xmlMADE BE GenerateDatasets Xml nie jest doskonały. Należy przeczytać i edytować XML przed użyciem go w języku publicznymERDDAP. GenerateDatasets Xml zwraca uwagę na wiele ruli-OF- THUMB, które nie zawsze jest poprawne. Jesteś odpowiedzialny za zapewnienie odpowiedniości XML, który chceszERDDAPTak.datasets.xmlFILE.

    (Nie krzyczę. Ze względu na historyczne powody prawne, zrzeczenia się praw muszą być napisane we wszystkich przypadkach.)

Wyjście GenerateDatasetsXml jest draftem. Prawie zawsze będziesz musiał ją edytować. Podjęliśmy i kontynuujemy ogromny wysiłek, aby wydajność była jak najbardziej gotowa, ale są granice. Często potrzebne informacje po prostu nie są dostępne z metadanych źródłowych.

Podstawowym problemem jest to, że pytamy program komputerowy (GenerateDatasetsXml) Aby wykonać zadanie, w którym, jeśli dasz to samo zadanie 100 osobom, otrzymasz 100 różnych wyników. Nie ma jednej "właściwej" odpowiedzi. Oczywiście, program jest najbliżej czytania myśli Boba (Nie twój.) , ale nawet jeśli, to nie jest wszystko-rozumiejący program AI, tylko zgraja heurystyki zgrupowanych razem, aby wykonać zadanie podobne do AI-. (Tego dnia może nadejść całkowicie zrozumiały program AI, ale jeszcze nie nadszedł. Jeśli tak, to my, ludzie, możemy mieć większe problemy. Uważaj, czego sobie życzysz.)

  • Dla celów informacyjnych, wyjście pokazuje globalny sourceAtrybuty i zmienne sourceAtrybuty jako komentarze.ERDDAP™łączy sourceAtrybuty iaddAttributes (które mają pierwszeństwo) do połączenia Atrybuty pokazane użytkownikowi. (Inne atrybuty są automatycznie dodawane do zmiennych długości geograficznej, szerokości geograficznej, wysokości, głębokości i czasu, gdyERDDAP™faktycznie tworzy zbiór danych) .  

  • Jeśli nie lubisz sourceAtribute, nadpisz go dodając addAtribution o tej samej nazwie, ale innej wartości (lub brak wartości, jeśli chcesz ją usunąć) .  

  • WszystkieaddAttributessą komputerowo generowane sugestie. Edytuj je! Jeśli nie lubisz addAttribute, zmień go.  

  • Jeśli chcesz dodać inneaddAttributes, dodać je.  

  • Jeśli chcesz zmienićdestinationNameZmień to. Ale nie zmieniaj się.sourceNameb.  

  • Można zmienić kolejnośćdataVariables lub usunąć którąkolwiek z nich.

    • Następnie można użyćDasDs (zob. poniżej) wielokrotnie testować XML dla tego zbioru danych, aby upewnić się, że otrzymany zestaw danych pojawia się tak, jak chcesz, aby wERDDAP.
    • Zapraszamy do małych zmian wdatasets.xmlkawałek, który został wygenerowany, na przykład, dostaw lepszeinfoUrl, streszczenie lub tytuł.

DoNotAddStandardNames

Jeśli dodasz\ -doNotAddStandardNames jako parametr wiersza poleceń podczas uruchamiania generuj Zestawy danych Xml, generuj Zestawy danych Xml nie dodastandard\_namedoaddAttributesdla zmiennych innych niż zmienne o nazwie szerokość geograficzna, długość geograficzna, wysokość, głębokość lub czas (które mają oczywistestandard\_names) . Może to być przydatne, jeśli używasz wyjścia z generowania Zestawy danych Xml bezpośrednio wERDDAP™bez edycji wyjścia, ponieważ generuj Zestawy danych Xml często zgadujestandard\_namenieprawidłowo. (Pamiętaj, że zawsze zalecamy, aby edytować wyjście przed użyciem go wERDDAP.) Korzystanie z tego parametru będzie mieć inne drobne skutki związane, ponieważ odgadnąćstandard\_namejest często wykorzystywane do innych celów, np. do tworzenia nowychlong\_name, i stworzyć ustawienia colorBar.

Skryptowanie

Jako alternatywa dla odpowiedzi na pytania interaktywnie na klawiaturze i pętli generowania dodatkowych zbiorów danych, możesz dostarczyć argumenty linii poleceń, aby odpowiedzieć na wszystkie pytania generować jeden zbiór danych. GenerateDatasets Xml przetwarza te parametry, zapisuje wyjście do pliku wyjściowego i kończy program.

Aby to skonfigurować, najpierw użyj programu w trybie interaktywnym i zapisz swoje odpowiedzi. Oto przykład cząstkowy: Powiedzmy, że uruchomisz skrypt:. / GenerateDatasetsXml.sh Następnie wprowadź: EDDTableFromAsciiFiles Następnie wprowadź: / u00 / data / Następnie wprowadź:\ *\ .asc Następnie wprowadź: / u00 / data / sampleFile.asc Następnie wprowadź: ISO- 8859-1

Aby uruchomić to w sposób nieinteraktywny, użyj tej linii poleceń: . / GenerateDatasetsXml.sh EDDTableFromAsciiFiles / u00 / data /.\ *\ .asc / u00 / data / sampleFile.asc ISO- 8859-1 Więc w zasadzie, po prostu wypisz wszystkie odpowiedzi na linii poleceń. Powinno to być przydatne dla zbiorów danych, które często zmieniają się w sposób wymagający ponownego uruchomienia generateDatasets Xml (w szczególnościEDDGridFromThreddsCatalog) .

Szczegóły:

  • Jeśli parametr zawiera spację lub jakiś specjalny znak, to koduj parametr jakociąg w stylu JSON-, np. ", mój parametr z spacjami i dwoma\nlinie ".
  • Jeśli chcesz podać pusty ciąg znaków jako parametr, użyj: nic
  • Jeśli chcesz podać domyślną wartość parametru, użyj: default  
  • GenerateDatasets Xml wspiera a - i zbiory danych XmlName # tagName parametr linii poleceń, który wprowadza wyjście do podanegodatasets.xmlplik (domyślny jest tomcat / content / erddap /datasets.xml) . GenerateDatasets Xml szuka dwóch linii w zbiorach danych XmlName:
        <!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->  

oraz

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

i zastępuje wszystko pomiędzy tymi wierszami nową treścią, i zmienia someDatetime.

  • Przełącznik -i jest przetwarzany tylko (i zmianydatasets.xmlsą tylko wykonane) jeśli uruchomisz GenerateDatasets Xml z argumentami wiersza poleceń, które określają wszystkie odpowiedzi na wszystkie pytania dla jednej pętli programu. (Zobacz powyżej 'Skryptowanie'.) (Myśl jest taka: Ten parametr jest przeznaczony do użycia ze skryptami. Jeśli używasz programu w trybie interaktywnym (wpisywanie informacji na klawiaturze) , możesz wygenerować kilka nieprawidłowych fragmentów XML, zanim wygenerujesz ten, którego chcesz.)
  • Jeśli linie Begin i End nie zostaną znalezione, te linie i nowa zawartość zostaną wstawione tuż przed</ erddapDatasets >.
  • Jest też... (kapitał i) przełączanie do celów testowych, które działa tak samo jak -i, ale tworzy plik o nazwiedatasets.xml DateTime i nie wprowadza zmian wdatasets.xml.
  • Nie uruchamiaj GenerateDatasets Xml z -i w dwóch procesach jednocześnie. Istnieje szansa, że zostanie zachowany tylko jeden zestaw zmian. Mogą być poważne kłopoty. (na przykład uszkodzone pliki) .

Jeśli używasz "GenerateDatasetsXml -verbose", wydrukuje więcej wiadomości diagnostycznych niż zwykle.

Typy danych specjalnych / Pseudo

Ogólnie rzecz biorąc, opcje EDDType w GenerateDatasets Xml pasuje do typów EDD opisanych w niniejszym dokumencie (PatrzLista typów danych) i wygenerować jedendatasets.xmlkawałek do tworzenia jednego zbioru danych z jednego konkretnego źródła danych. Istnieje kilka wyjątków i szczególnych przypadków:

EDDGridFromErddap

Ten EDDType generuje wszystkiedatasets.xmlkawałki potrzebne do zrobieniaEDDGridFromErddapzestawów danych ze wszystkichEDDGridZestawy danych w pilocieERDDAP. Będziesz miał możliwość utrzymania oryginałudatasetIDs (które mogą powielać niektóredatasetIDs już w twoimERDDAP) lub generowanie nowych nazw, które będą unikalne (ale zwykle nie są tak czytelne dla ludzi) .  

EDDTableFromErddap

Ten EDDType generuje wszystkiedatasets.xmlkawałki potrzebne do zrobieniaEDDTableFromErddapZestawy danych ze wszystkich zbiorów danych EDDTable w pilocieERDDAP. Będziesz miał możliwość utrzymania oryginałudatasetIDs (które mogą powielać niektóredatasetIDs już w twoimERDDAP) lub generowanie nowych nazw, które będą unikalne (ale zwykle nie są tak czytelne dla ludzi) .  

EDDGridFromThreddsCatalog

Ten EDDType generuje wszystkiedatasets.xmlczęści potrzebne do wszystkichEDDGridFromDapzbiory danych, które można znaleźć poprzez rekursywne pełzanie poprzez THREDDS (sub) Katalog. Istnieje wiele form katalogu THREDDS adresów URL. Ta opcja wymaga URL THREDDS .xml z / katalog / w nim, na przykład, https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml lub https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(powiązany katalog .html jest na https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html co jest niedopuszczalne dlaEDDGridFromThredsCatalog). Jeśli u pacjenta występują problemy zEDDGridFromThreds Przewodniczący Katalog:

  • Upewnij się, że używany adres URL jest prawidłowy, zawiera / katalog / i kończy się na / katalog.xml.
  • Jeśli to możliwe, należy użyć publicznego adresu IP (na przykład: https://oceanwatch.pfeg.noaa.gov ) w URL, nie lokalny numeryczny adres IP (na przykład: https://12.34.56.78 ) . Jeśli THREDDS jest dostępny tylko za pośrednictwem lokalnego numerycznego adresu IP, można użyć [<convertToPublicSourceUrl >] (# converttopublicsourceurl) więcERDDAP™użytkownicy zobaczyć adres publiczny, nawet jeśliERDDAP™pobiera dane z lokalnego adresu numerycznego.
  • Jeśli masz problemy, których nie możesz rozwiązać,sprawdź wskazówki dotyczące rozwiązywania problemów.
  • Kod niskiego poziomu do tego teraz używaUnidatanetcdf- java katalog crawler kod (Trójki. klasy katalogowe) tak, że może obsługiwać wszystkie katalogi THREDDS (które mogą być zaskakująco skomplikowane) DziękiUnidatadla tego kodu.  
EDDGridLonPM180FromErddapCatalog

Ten EDDType generujedatasets.xmldo zrobieniaEDDGridLonPM180zestawów danych ze wszystkichEDDGridzbiory danych wERDDAPktórych długość geograficzna jest większa niż 180.

  • Jeśli to możliwe, należy użyć publicznego adresu IP (na przykład: https://oceanwatch.pfeg.noaa.gov ) w URL, nie lokalny numeryczny adres IP (na przykład: https://12.34.56.78 ) . JeśliERDDAP™jest dostępny tylko przez lokalny numeryczny adres IP, można użyć [<convertToPublicSourceUrl >] (# converttopublicsourceurl) więcERDDAP™użytkownicy zobaczyć adres publiczny, nawet jeśliERDDAP™pobiera dane z lokalnego adresu numerycznego.  
EDDGridLon0360FromErddapCatalog

Ten EDDType generujedatasets.xmldo zrobieniaEDDGridLon0360zestawów danych ze wszystkichEDDGridzbiory danych wERDDAPo dowolnej długości geograficznej mniejszej niż 0.

  • Jeśli to możliwe, należy użyć publicznego adresu IP (na przykład: https://oceanwatch.pfeg.noaa.gov ) w URL, nie lokalny numeryczny adres IP (na przykład: https://12.34.56.78 ) . JeśliERDDAP™jest dostępny tylko przez lokalny numeryczny adres IP, można użyć [<convertToPublicSourceUrl >] (# converttopublicsourceurl) więcERDDAP™użytkownicy zobaczyć adres publiczny, nawet jeśliERDDAP™pobiera dane z lokalnego adresu numerycznego.  
Pliki EDDsFromFiles

Biorąc pod uwagę katalog startowy, to przemienia katalog i wszystkie podkatalogi i próbuje utworzyć zbiór danych dla każdej grupy plików danych, które znajduje.

  • Zakłada to, że po odnalezieniu zbioru danych, zbiór zawiera wszystkie podkatalogi.
  • Jeśli zostanie znaleziony zestaw danych, podobne katalogi rodzeństwa będą traktowane jako oddzielne zestawy danych (Na przykład katalogi dla lat 90-tych, 2000-tych, 2010-tych, wygenerują oddzielne zbiory danych) . Powinny być łatwe do łączenia ręcznie - po prostu zmienić pierwszy zestaw danych<fileDir > do katalogu nadrzędnego i usuń wszystkie kolejne zbiory danych rodzeństwa.
  • To będzie tylko spróbować wygenerować kawałekdatasets.xmldla najczęstszego typu rozszerzenia pliku w katalogu (nie licząc .md5, który jest ignorowany) . Podając katalog z 10.ncplików i 5 .txt plików, zestaw danych zostanie wygenerowany dla.ncTylko pliki.
  • Zakłada to, że wszystkie pliki w katalogu o tym samym rozszerzeniu należą do tego samego zbioru danych. Jeśli katalog ma jakieś.ncpliki z danymi SST i niektórymi.ncpliki z danymi o chlorofilu, tylko jedna próbka.ncplik zostanie przeczytany (SST? chlorofil?) i tylko jeden zestaw danych zostanie stworzony dla tego typu pliku. Ten zbiór danych prawdopodobnie nie załaduje się z powodu komplikacji z próby wczytania dwóch typów plików do tego samego zbioru danych.
  • Jeśli jest mniej niż 4 plików z najczęstszym rozszerzeniem w katalogu, zakłada to, że nie są to pliki danych i po prostu pomija katalog.
  • Jeśli w katalogu są 4 lub więcej plików, ale to nie może skutecznie wygenerować kawałekdatasets.xmldla plików (na przykład nieobsługiwany typ pliku) , to wygenerujeNazwy EDDTableFromFileNamezestaw danych do plików.
  • Na koniec diagnostyki, że to pisze do pliku log, tuż przeddatasets.xmlfragmenty, to wydrukuje tabelę z podsumowaniem informacji zebranych poprzez przeszukiwanie wszystkich podkatalogów. Tabela wymienia każdy podkatalog i wskazuje najczęstszy typ rozszerzenia pliku, całkowitą liczbę plików oraz typ zbioru danych dla tych plików (jeżeli istnieje) . Jeśli masz do czynienia z złożoną, głęboko zagnieżdżoną strukturą plików, rozważ uruchomienie GenerateDatasets Xml z EDDType = EDDsFromFiles aby wygenerować te informacje,
  • Opcja ta może nie zrobić wielkiego zadania zgadując najlepszy EDDType dla danej grupy plików danych, ale jest szybki, łatwy i warto spróbować. Jeśli pliki źródłowe są odpowiednie, działa dobrze i jest dobrym pierwszym krokiem w generowaniudatasets.xmldla systemu plików z dużą ilością podkatalogów, każdy z plikami danych z różnych zbiorów danych.  
EDDTableFromEML i EDDTableFromEMLPartii

Te specjalne EDDType generujedatasets.xmldoPliki EDDTableFromAsciiFileszestaw danych z każdej tabeli opisanej wJęzyk metadanych ekologicznychPlik XML. Wariant "Nr serii" działa na wszystkich plikach EML w lokalnym lub zdalnym katalogu. Proszę zobaczyć oddzielnydokumentacja dla EDDTableFromeML.  

EDDTableFromInPort

Ten specjalny EDDType generujedatasets.xmldoPliki EDDTableFromAsciiFileszestaw danych z informacji winport- xmlplik. Jeśli można uzyskać dostęp do pliku danych źródłowych (plik inport- xml powinien mieć wskazówki, gdzie go znaleźć) , można zrobić roboczy zestaw danych wERDDAP.

Poniższe kroki przedstawiają jak używać GenerateDatasets Xml z pliku inport- xml w celu uzyskania roboczego zbioru danych wERDDAP.

  1. Po uzyskaniu dostępu do pliku inport- xml (albo jako URL albo plik lokalny) : run GenerateDatasets Xml, określić EDDType = EDDTableFromInPort, podać adres inport- xml lub pełną nazwę pliku, określić whowChild = 0 i podać inne wymagane informacje (jeśli znana) . (W tym momencie nie trzeba mieć pliku danych źródłowych ani podawać jego nazwy.) The whChild = 0 ustawienie mówi GenerateDatasets Xml do zapisu informacji dla wszystkie z<entity- Assione- information ><podmiot > jest w pliku inport- xml (jeśli istnieją) . Wydrukuje również podsumowanie informacji w tle, w tym wszystkie pliki download- url wymienione w pliku inport- xml.
  2. Przejrzyj te wszystkie informacje. (w tym informacje ogólne, które GenerateDatasets Druki Xml) i odwiedź download- url (s) w celu znalezienia pliku danych źródłowych (s) . Jeśli go znajdziesz (im) , pobierz go (im) do katalogu, który jest dostępnyERDDAP. (Jeśli nie można znaleźć żadnych plików źródłowych, nie ma sensu się tym zajmować.)
  3. Uruchom generowanie Zestawy danych Znowu Xml. Jeśli plik danych źródłowych odpowiada jednemu z plików inport- xml<entity- Assione- information ><Jednostka > 's, określić, które dziecko = Numer podmiotu (np. 1, 2, 3,...) .ERDDAP™będzie starał się dopasować nazwy kolumn w pliku danych źródłowych do nazw w informacjach o podmiocie, a także zaapelować o zaakceptowanie / odrzucenie / naprawienie wszelkich rozbieżności. Lub, jeśli plik inport- xml nie ma żadnych<entity- Assione- information ><Jednostka > 's, określić wjakim Child = 0.
  4. W kawałkudatasets.xmlktóre zostały wykonane przez GenerateDatasets Xml, zmienić [globalny<addAttributes>] (# global- atrybuty) w razie potrzeby / w razie potrzeby.
  5. W kawałkudatasets.xmlktóre zostało wykonane przez GenerateDatasetsXml, dodać / zmienić [<dataVariable>] (# datavariable) informacje wymagane / pożądane do opisania każdej ze zmiennych. Upewnij się, że poprawnie identyfikujesz każdą zmienną [<sourceName>] (# sourcename) (jak pojawia się w źródle) , [<destinationName>] (# destinationname) (która ma więcej ograniczeń dotyczących dozwolonych znaków niżsourceName) , [<jednostki >] (# units) (szczególnie jeśli jest tozmienna czasu lub znacznika czasujeżeli jednostki muszą określić format) oraz [<missing\_value>] (# brakująca _ wartość) ,
  6. Kiedy jesteś blisko zakończenia, wielokrotnie używaćDasDsnarzędzie do szybkiego sprawdzenia, czy opis zbioru danych jest poprawny i czy zbiór danych pojawi się wERDDAP™Jak chcesz.  

Byłoby wspaniale, gdyby grupy wykorzystujące InPort do dokumentowania swoich zbiorów danych również korzystały zERDDAP™udostępnienie rzeczywistych danych:

  • ERDDAP™jest rozwiązaniem, które można wykorzystać teraz, więc można wypełnićNOAAjestPubliczny dostęp do wyników badań (PARR) wymaganiateraz, nie w jakimś niejasnym czasie w przyszłości.
  • ERDDAP™udostępnia rzeczywiste dane użytkownikom, nie tylko metadane. (Po co metadane bez danych?)
  • ERDDAP™obsługuje metadane (w szczególności jednostki zmiennych) , w przeciwieństwie do innych programów serwerów danych. (Po co nam dane bez metadanych?) Korzystanie z oprogramowania, które nie obsługuje metadanych jest zaproszenie danych, które mają być źle zrozumiane i wykorzystywane.
  • ERDDAP™jest wolnym i open- source oprogramowania w przeciwieństwie do niektórych innych oprogramowania jest brana pod uwagę. Trwający rozwójERDDAP™jest już opłacony. Wsparcie dlaERDDAP™użytkownicy są wolni.
  • ERDDAPwygląd można łatwo dostosować, aby odzwierciedlić i podkreślić swoją grupę (nieERDlubERDDAP) .
  • ERDDAP™oferuje spójny sposób dostępu do wszystkich zbiorów danych.
  • ERDDAP™może odczytywać dane z wielu typów plików danych oraz z relacyjnych baz danych.
  • ERDDAP™może zajmować się dużymi zbiorami danych, w tym zbiorami danych, w których dane źródłowe znajdują się w wielu plikach danych.
  • ERDDAP™może zapisywać dane do wielu typów plików danych, na życzenie użytkownika, w tym do typów plików naukowych, takich jak netCDF, ESRI .csv, orazODV .txt.
  • ERDDAP™może dokonać własnych wykresów i map podzbiorów danych, w oparciu o specyfikacje użytkownika.
  • ERDDAP™mogą zajmować się zbiorami danych innych niż dane, takich jak zbiory plików obrazu, wideo lub audio.
  • ERDDAP™został zainstalowany i używany wponad 60 instytucji na całym świecie.
  • ERDDAP™jest wymieniony jako jeden z serwerów danych zalecanych do użycia wNOAAwNOAADyrektywa proceduralna w sprawie dostępu do danychW przeciwieństwie do innych programów.
  • ERDDAP™jest produktemNMFS/NOAA, więc używając go wNMFSorazNOAApowinno być punktem dumy dlaNMFSorazNOAA.

Proszę daćERDDAP™Spróbuj. Jeśli potrzebujesz pomocy, wpisz wiadomość wERDDAP™Grupa Google.  

addFillValueAtrybuty

Ta specjalna opcja EDDType nie jest typem zbioru danych. Jest to narzędzie, które może dodać atrybuty\ _ FillValue do niektórych zmiennych w niektórych zbiorach danych. PatrzaddFillValueAtrybuty.  

findDuplications Czas

Ta specjalna opcja EDDType nie jest typem zbioru danych. Zamiast tego, mówi GenerateDatasets Xml do wyszukiwania poprzez kolekcję uchwytów.nc (oraz powiązane) pliki do znalezienia i wydrukowania listy plików z podwójnymi wartościami czasowymi. Kiedy patrzy na wartości czasowe, konwertuje je z oryginalnych jednostek do"seconds since 1970-01-01"w przypadku, gdy różne pliki używają różnych ciągów jednostek. Musisz podać katalog startowy (z lub bez ukośnika) , wyrażenie regularne nazwy pliku (np.:\ *\.nc ) oraz nazwę zmiennej czasu w plikach.  

ncdump

Ta specjalna opcja EDDType nie jest typem zbioru danych. Zamiast tego, mówi GenerateDatasets Xml do wydrukuncdump\ -jak wydruk z.nc,.ncml lub.hdfplik. W rzeczywistości używa netcdf- javaNCdumpco jest bardziej ograniczonym narzędziem niż C wersja NCdump. Jeśli używasz tej opcji, GenerateDatasetsXml poprosi Cię o użycie jednej z opcji: "-h" (nagłówek) "-c". (wiersze współrzędnych) "-vall" (domyślny) "-v var1; var2", "-v var1 (0,0: 10,0: 20) ". Jest to przydatne, ponieważ bez ncdup trudno jest dowiedzieć się, co jest w.nc,.ncml lub.hdfplik, a tym samym który EDDType należy określić dla GenerateDatasets Xml. Dla.ncPlik ml, to wydrukuje wyjście ncdup dla wyniku.ncml zmiany plików stosowane do podstawy.nclub.hdfplik.  

DasDs

  • DasDs jest programem linii poleceń, którego możesz użyć po utworzeniu pierwszej próby na XML dla nowego zbioru danych wdatasets.xml. Dzięki DasDds można wielokrotnie testować i udoskonalać XML. Podczas korzystania z programu DasDds:
    1. W systemie Windows po raz pierwszy uruchamiasz DasDds, musisz edytować DasDds. plik bat z edytorem tekstu, aby zmienić ścieżkę do javy. Plik exe, aby Windows mógł znaleźćJava.
    2. DasDds prosi odatasetIDdo zbioru danych nad którym pracujesz.
    3. DasDds próbuje utworzyć zbiór danych z tymdatasetID.
      • DasDds zawsze drukuje mnóstwo wiadomości diagnostycznych. Jeśli używasz "DasDds -verbose", DasDds wydrukuje więcej wiadomości diagnostycznych niż zwykle.
      • Dla bezpieczeństwa DasDds zawsze usuwa wszystkie informacje o zestawie danych buforowanych (pliki) dla zbioru danych przed próbą utworzenia zbioru danych. Jest to odpowiednik ustawienia aflaga twardaTak więc dla zagregowanych zbiorów danych, może chcesz dostosować plik NameRemex tymczasowo, aby ograniczyć liczbę plików, które znajduje konstruktor danych.
      • Jeśli zbiór danych nie zostanie wczytany (Z jakiegokolwiek powodu) , DasDds zatrzyma się i pokaże komunikat błędu dla pierwszego błędu, który znajdzie. Nie próbuj zgadywać, w czym może być problem. Należy uważnie przeczytać komunikat ERROR.
        W razie potrzeby, przeczytaj poprzednie wiadomości diagnostyczne, aby znaleźć więcej wskazówek i informacji, również.
      • Zmień XML zbioru danych, aby spróbować rozwiązać ten problem
        i niech DasDds spróbować utworzyć zestaw danych ponownie.
      • Jeśli wielokrotnie rozwiązujesz każdy problem, ostatecznie rozwiążesz wszystkie problemy
        i zestaw danych załaduje.
    4. Wszystkie wyjścia DasDds (diagnostyka i wyniki) są napisane na ekranie i do bigParentDirectory / logs / DasDds.log.
    5. Jeśli DasDds może utworzyć zbiór danych, DasDds pokaże Ci.das (Struktura atrybutu dataset) ,.dds (Name Struktura) oraz.timeGaps (luki czasowe) informacje na temat zbioru danych na ekranie i napisz je do bigParentDirectory / logi / DasDds.out.
    6. Często będziesz chciał dokonać niewielkich zmian w XML zbioru danych, aby wyczyścić metadane zbioru danych i ponownie uruchomić DasDds.

Bonus Narzędzie trzeciej strony:ERDDAP-lint

ERDDAP-lint to program z Rob Fuller i Adam Leadbetter z Irish Marine Institute, który można wykorzystać do poprawy metadanychERDDAP™zestawów danych.ERDDAP-lint "zawiera zasady i prosty statyczny aplikacji web do wykonywania niektórych testów weryfikacyjnych przeciwkoERDDAP™serwer. Wszystkie testy są wykonywane w przeglądarce internetowej ". JakUnix / Linux Lint narzędzie, można edytować istniejące zasady lub dodać nowe zasady. PatrzERDDAP-lintwięcej informacji.

To narzędzie jest szczególnie przydatne dla zbiorów danych, które stworzyłeś jakiś czas temu i teraz chcesz wprowadzić up- to- date z aktualnych preferencji metadanych. Na przykład, wczesne wersje GenerateDatasets Xml nie włożył żadnego wysiłku w tworzenie globalnegocreator\_name,creator\_email, creator\ _ type, lubcreator\_urlmetadane. Przyda ci się.ERDDAP-lint do identyfikacji zbiorów danych, które nie posiadają tych atrybutów metadanych.

Dzięki Robowi i Adamowi za stworzenie tego narzędzia i udostępnienie goERDDAP™Społeczność.  

Podstawowa strukturadatasets.xmlPlik

Wymagane i opcjonalne znaczniki dozwolone wdatasets.xmlplik (i ilość razy mogą się pojawić) poniżej. W praktycedatasets.xmlbędzie miał dużo<dataset > 's tags i używać tylko innych tagów wewnątrz<erddapDatasets > w razie potrzeby.

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

Możliwe jest, że inne kodowanie będzie dozwolone w przyszłości, ale na razie zaleca się tylko ISO- 8859-1.  

XInclude

Nowy w wersji 2.25 to wsparcie dla XInclude. Wymaga to użycia parsera SAX<useSaxParser > true</ useSaxParser > in your setup.xml. To może pozwolić zapisać każdy zbiór danych w swoim pliku, a następnie włączyć je wszystkie w głównymdatasets.xml, ponowne użycie części definicji zbioru danych, lub obu tych definicji. Jeśli chcesz zobaczyć przykład,EDDTestDataset.javaustawia XInclude do ponownego użycia zmiennych definicji.  

Uwagi

Praca zdatasets.xmlplik jest projektem nietrywialnym. Należy uważnie przeczytać wszystkie te notatki. Po wybraniutyp zbioru danych, należy uważnie przeczytać szczegółowy opis.  

Wybór typu zbioru danych

W większości przypadków jest tylko jedenERDDAP™typ zbioru danych, który jest odpowiedni dla danego źródła danych. W kilku przypadkach (np.,.ncpliki) , istnieje kilka możliwości, ale zazwyczaj jeden z nich jest zdecydowanie najlepszy. Pierwszą i największą decyzją jaką musisz podjąć jest: czy należy traktować zbiór danych jako grupę wielowymiarowych tablic (jeśli tak, zobaczEDDGridtypy zbioru danych) lub jako tabela danych podobna do bazy danych (jeśli tak, zobaczTypy zbiorów danych EDDTable) .  

Podawanie danych jako jest

Zazwyczaj nie ma potrzeby modyfikowania źródła danych (np., konwertować pliki do innego typu plików) Więc...ERDDAP™może służyć. Jedno z założeńERDDAP™jest to, że źródło danych będzie wykorzystywane tak jak jest. Zwykle to działa dobrze. Niektóre wyjątki to:

  • Bazy danych relacyjnych i Cassandra --ERDDAP™może obsługiwać dane bezpośrednio z relacyjnych baz danych i Cassandra. Ale dla bezpieczeństwa, balansowania obciążenia i problemów z wydajnością, można wybrać do konfiguracji innej bazy danych z tymi samymi danymi lub zapisać dane doNetCDFv3.ncpliki i mająERDDAP™obsługuje dane z nowego źródła danych. PatrzEDDTableFromDatabaseorazEDDTableFromCassandra.
  • Nie obsługiwane źródła danych...ERDDAP™może obsługiwać wiele rodzajów źródeł danych, ale świat jest wypełniony 1000 (Miliony?) różnych źródeł danych (w szczególności struktury plików danych) . JeśliERDDAP™nie obsługuje Twojego źródła danych:
    • Jeśli źródło danych jestNetCDF .ncpliki, możesz użyćNcMLmodyfikować pliki danych na -the- fly lub używaćNCOna stałe modyfikować pliki danych.
    • Można zapisać dane do typu źródła danych, któreERDDAP™wsparcie.NetCDF-3.ncpliki są dobrą, ogólną rekomendacją, ponieważ są to pliki binarne, któreERDDAP™może czytać bardzo szybko. W przypadku danych tabelarycznych należy rozważyć przechowywanie danych w zbiorze.ncplików, które używająCF Geometrie do pobierania próbek dyskretnych (DSG) Kontyguous Ragged Struktury danych Array i tak mogą być obsługiwane zERDDAPjestPliki EDDTableFromNcCFFiles). Jeśli są logicznie zorganizowane (każdy z danymi dla kawałka przestrzeni i czasu) ,ERDDAP™może pobrać dane z nich bardzo szybko.
    • Możesz poprosić o dodanie wsparcia dla tego źródła danych doERDDAP™e-mailem do Chrisa. John w Noah.
    • Możesz dodać wsparcie dla tego źródła danych, pisząc kod, aby sam się nim zająć. PatrzdoERDDAP™Przewodnik programisty
  • Prędkość...ERDDAP™może odczytywać dane z niektórych źródeł danych znacznie szybciej niż inne. Na przykład, czytanieNetCDFv3.ncpliki są szybkie, a czytanie plików ASCII jest wolniejsze. A jeśli istnieje duża (> 1000) lub ogromny (> 10 000) liczba plików danych źródłowych,ERDDAP™będzie reagować na niektóre żądania danych powoli. Zwykle różnica nie jest zauważalna dla ludzi. Jednakże, jeśli myślisz,ERDDAP™jest powolny dla danego zbioru danych, można wybrać rozwiązanie problemu poprzez zapisanie danych do bardziej efektywnego ustawienia (zazwyczaj: kilka, dobrze ustrukturyzowane,NetCDFv3.ncpliki) . Dane tabelaryczne, patrz:ta rada.  

Podpowiedź

Często łatwiej jest wygenerować XML dla zbioru danych, wykonując kopię opisu roboczego zbioru danych w dataset.xml i modyfikując go.

Kodowanie znaków specjalnych

Oddatasets.xmljest plikiem XML, MUSISZ& -encode"&", "<", i" > "w dowolnej treści jako" & amp; ","<"i" & gt; ". Błąd:<tytuł > Czas i przypływy</ Tytuł > Racja:<tytuł > Czas i wskazówki</ Tytuł >  

XML nie toleruje błędów składni

Po edycji pliku dataset.xml, dobrym pomysłem jest sprawdzenie, czy wynik jestdobrze ukształtowany XMLpoprzez wklejanie tekstu XML do sprawdzania XML jakxmlalidation.  

Wskazówki dotyczące rozwiązywania problemów

Zmienne specjalne

  • Długość geograficzna, szerokość geograficzna, wysokość (lub głębokość) oraz czas (LLAT) zmienna destinationNames są wyjątkowe.
  • Ogólnie:
    • Zmienne LLAT są znaneERDDAP™jeśli zmienna osi jest (zamiastEDDGridzbiory danych) lub zmiennej danych (dla zbiorów danych tabeli EDD) destinationName"długość geograficzna", "szerokość geograficzna", "wysokość", "głębokość", lub"time".
    • Zdecydowanie zachęcamy do korzystania z tych standardowych nazw dla tych zmiennych, jeśli to możliwe. Żaden z nich nie jest wymagany. Jeśli nie używasz tych specjalnych nazw zmiennych,ERDDAP™nie rozpoznają ich znaczenia. Na przykład zmienne LLAT są traktowane specjalnie przez Make A Graph ( datasetID .graph) : jeśli zmienna X Axis jest "długością geograficzną", a zmienna Y Axis jest "szerokością geograficzną", otrzymasz mapę (przy użyciu standardowej projekcji, z maską lądową, granicami politycznymi itp.) zamiast wykresu.
    • ERDDAP™automatycznie doda wiele metadanych do zmiennych LLAT (na przykład ",ioos\_category","jednostki", oraz kilka atrybutów związanych ze standardami, takich jak"\ _ CoordinateAxisType ") .
    • ERDDAP™automatycznie, on-the-fly, doda wiele globalnych metadanych związanych z wartościami LLAT wybranego podzbioru danych (na przykład "geoprzestrzenne\ _ lon\ _ min") .
    • Klienci, którzy obsługują te standardy metadanych, będą mogli wykorzystać dodane metadane, aby umieścić dane w czasie i przestrzeni.
    • Klienci będą łatwiej generować zapytania zawierające zmienne LLAT, ponieważ nazwy zmiennej są takie same we wszystkich odpowiednich zbiorach danych.
  • Dla zmiennej "długość geograficzna" i zmiennej "szerokość geograficzna":
    • UżyjdestinationNames "długość geograficzna" i "szerokość geograficzna" tylko jeślijednostkisą stopniami\ _ wschodu i stopniami\ _ północy, odpowiednio. Jeśli Twoje dane nie spełniają tych wymagań, użyj różnych nazw zmiennych (na przykład, x, y, lonRadians, latRadians) .
    • Jeśli masz dane dotyczące długości i szerokości geograficznej wyrażone w różnych jednostkach, a zatem z różnychdestinationNames, na przykład, LonRadians i latRadians, Make A Graph ( datasetID .graph) będzie robić wykresy (na przykład, szeregi czasowe) zamiast map.
  • Dla zmiennej "wysokość" i zmiennej "głębokość":
    • UżyjdestinationName"wysokość" w celu określenia odległości danych powyżej poziomu morza (dodatnie = wartości "up") . Opcjonalnie, można użyć "wysokości" dla odległości poniżej poziomu morza, jeśli wartości są ujemne poniżej poziomu morza (lub jeśli używasz, na przykład, [<att name = "scale\_factor"type =" int "> - 1</ att >] (# scale _ factor) konwertować wartości głębokości na wartości wysokości.
    • UżyjdestinationName"głębokość" w celu zidentyfikowania odległości danych poniżej poziomu morza (dodatnie = wartości "w dół") .
    • Zestaw danych może nie posiadać zarówno zmiennych "wysokość", jak i "głębokość".
    • Dla tych nazw zmiennych,jednostkiMusi być "m", "metr" lub "metry". Jeśli jednostki różnią się (na przykład, sążnie) , you can use [<att name = "scale\_factor"> niektóre Wartość </ att >] (# scale _ factor) I...<att nazwa = "jednostki" > metry</ att >] (# units) do konwersji jednostek na metry.
    • Jeśli Twoje dane nie spełniają tych wymagań, użyj innegodestinationName (na przykład, Uziemienie, odległość ToBottom) .
    • Jeśli znasz pionowe KSR, podaj je w metadanych, np. "EPSG: 5829" (chwilowa wysokość nad poziomem morza) , "EPSG: 5831" (natychmiastowa głębokość poniżej poziomu morza) lub "EPSG: 5703" (Wysokość NAVD88) .
  • Dla"time"zmienna:
    • UżyjdestinationName "time"tylko dla zmiennych, które zawierają całą datę + czas (lub data, jeśli to wszystko jest) . Jeśli na przykład istnieją oddzielne kolumny daty i timeOfDay, nie używaj nazwy zmiennej"time".
    • Patrzjednostkiwięcej informacji o atrybucie jednostek dla zmiennych czasu i znaczników czasu.
    • Zmienna czasu i powiązaneczas Zmienne znacznikówsą unikalne w tym, że zawsze konwertują wartości danych z formatu czasu źródła (Cokolwiek to jest.) w wartość liczbową (sekund od 1970- 01-01T00: 00: 00Z) lub wartość String (ISO 8601: 2004 (E) format) W zależności od sytuacji.
    • Gdy użytkownik żąda danych czasowych, może je zażądać, określając czas jako wartość liczbową (sekund od 1970- 01-01T00: 00: 00Z) lub wartość String (ISO 8601: 2004 (E) format) .
    • ERDDAP™ma przydatność doPrzelicz licznik Czas do / z czasu smyczkowego.
    • PatrzJakERDDAPTransakcje z czasem.

Dlaczego tylko dwie podstawowe struktury danych?

  • Ponieważ trudno jest klientom ludzkim i klientom komputerowym radzić sobie ze złożonym zestawem możliwych struktur zbioru danych,ERDDAP™wykorzystuje tylko dwie podstawowe struktury danych:
  • Oczywiście nie wszystkie dane mogą być wyrażane w tych strukturach, ale wiele z nich może. Tabele są w szczególności bardzo elastycznymi strukturami danych (spojrzenie na sukces relacyjnych programów baz danych) .
  • Ułatwia to tworzenie zapytań o dane.
  • To sprawia, że odpowiedzi na dane mają prostą strukturę, co ułatwia obsługę danych w szerszym zakresie standardowych typów plików (które często wspierają proste struktury danych) . To jest główny powód, dla którego założyliśmyERDDAP™Tędy.
  • To z kolei bardzo ułatwia nam życie. (lub kogokolwiek) do pisania oprogramowania klienta, który współpracuje ze wszystkimiERDDAP™zestawów danych.
  • Ułatwia to porównywanie danych z różnych źródeł.
  • Zdajemy sobie sprawę z tego, że jeśli przywykniesz do pracy z danymi w innych strukturach danych, możesz początkowo uznać to podejście za uproszczone lub niewystarczające. Ale wszystkie struktury danych mają oszustwa. Żaden nie jest doskonały. Nawet do- it- wszystkie struktury mają swoje wady: praca z nimi jest złożona i pliki mogą być napisane lub odczytywane tylko ze specjalnymi bibliotekami oprogramowania. Jeśli się zgodziszERDDAPpodejście na tyle, aby spróbować z nim pracować, można zauważyć, że ma swoje zalety (w szczególności wsparcie dla wielu typów plików, które mogą przechowywać odpowiedzi danych) . WERDDAP™pokaz slajdów (szczególniedane struktury slajdów) Dużo o tym mówi.
  • I nawet jeśli to podejście brzmi dla ciebie dziwnie,ERDDAP™Klienci nigdy nie zauważą -- po prostu zobaczą, że wszystkie zbiory danych mają prostą strukturę i będą wdzięczni, że mogą uzyskać dane z wielu różnych źródeł zwracanych w różnych formatach plików.  

Wymiary

  • Co jeśli zmienne siatki w zbiorze danych źródłowych NIE dzielą się tymi samymi zmiennymi osi?
    WEDDGridZestawy danych, wszystkie zmienne danych MUSI używać (udział) wszystkie zmienne osi. Więc jeśli zbiór danych źródłowych ma pewne zmienne z jednym zestawem wymiarów i inne zmienne z innym zestawem wymiarów, będziesz musiał zrobić dwa zestawy danych wERDDAP. Na przykład, możesz zrobić jedenERDDAP™zbiór danych zatytułowany "Niektóre tytuły (na powierzchni) "do przechowywania zmiennych, które po prostu używać\[czas\]\[szerokość geograficzna\]\[długość geograficzna\]wymiary i zrobić innyERDDAP™zbiór danych zatytułowany "Niektóre tytuły (na głębokościach) "do przechowywania zmiennych, które używają\[czas\]\[wysokość\]\[szerokość geograficzna\]\[długość geograficzna\]. Albo możesz zmienić źródło danych, aby dodać wymiar o jednej wartości (na przykład wysokość = 0) aby zmienne były spójne.

ERDDAP™nie obsługuje bardziej skomplikowanych zbiorów danych (na przykład modele wykorzystujące siatkę trójkątów) Cóż. Możesz podać te zbiory danych wERDDAP™poprzez utworzenie dwóch lub więcej zbiorów danych wERDDAP™ (tak, że wszystkie zmienne danych w każdym nowym zbiorze danych mają ten sam zbiór zmiennych osi) Ale nie tego chcą użytkownicy. Dla niektórych zbiorów danych, można rozważyć zrobienie regularnej zawiązanej wersji zbioru danych i oferowanie, że oprócz oryginalnych danych. Niektóre oprogramowanie klienta może sobie radzić tylko z regularną siatką, więc robiąc to, docierasz do dodatkowych klientów.  

Przewidywane dane skrzelowe

Niektóre dane mają złożoną strukturę. Na przykład, poziom satelity 2 ("wzdłuż toru") dane nie wykorzystują prostego projekcji. Wzory (i inne) często współpracują z danymi o różnych niecylindrycznych projekcjach (na przykład, stożkowy, polarny stereograficzny, tripolarny) lub w niestrukturyzowanych sieciach (bardziej skomplikowana struktura danych) . Niektórzy użytkownicy końcowi chcą tych danych, więc nie ma utraty informacji. Dla tych klientów,ERDDAP™może służyć dane, jak jest, tylko jeśliERDDAP™administrator rozbija oryginalny zbiór danych na kilka zbiorów danych, z każdą częścią włącznie ze zmiennymi, które dzielą te same zmienne osi. Tak, to wydaje się dziwne dla ludzi zaangażowanych i to różni się od większościOPeNDAPserwerów. Ale...ERDDAP™podkreśla udostępnianie danych w wielu formatach. To możliwe, ponieważERDDAP™wykorzystuje / wymaga bardziej jednolitej struktury danych. Chociaż to trochę niezręczne. (tj. inne niż oczekiwano) ,ERDDAP™mogą rozpowszechniać przewidywane dane.

\[Tak.ERDDAP™może mieć bardziej luźne wymagania dotyczące struktury danych, ale zachować wymagania dotyczące formatów wyjściowych. Ale to doprowadziłoby do zamieszania wśród wielu użytkowników, szczególnie nowych, ponieważ wiele pozornie ważnych wniosków o dane o różnych strukturach byłoby niepoprawnych, ponieważ dane nie pasowałyby do typu pliku. Ciągle wracamy do projektu obecnego systemu.\]

Niektórzy użytkownicy końcowi chcą danych w rzucie cylindrycznym Lat Lon, takich jak Equaricent prostokątne / płytki carrée lub Mercator) do łatwego użycia w różnych sytuacjach. W tych sytuacjach, zachęcamy doERDDAP™administrator do korzystania z innego oprogramowania (NCO?Matlab? R? IDV?...?) przeprojektować dane na obszar geograficzny (Równoważny prostokątny rzut / płyta carrée) lub inny rzut cylindryczny i służyć tej formie danych wERDDAP™jako inny zestaw danych. Jest to podobne do tego, co robią ludzie, gdy przekształcają dane satelitarne na dane poziomu 2 w dane poziomu 3. Jednym z takich narzędzi jestNCOktóry oferuje opcje rozszerzenia dla przeglądania danych.

GIS i dane dotyczące reprojekcji

Ponieważ świat GIS jest często zorientowany na mapę, programy GIS zwykle oferują wsparcie dla reprojekcji danych, tj. wykreślenia danych na mapie z inną projekcją.

ObecnieERDDAP™nie posiada narzędzi do przeprojektowania danych. Zamiast tego zalecamy użycie zewnętrznego narzędzia do wykonania wariantu zbioru danych, gdzie dane zostały przeprojektowane z oryginalnej postaci na prostokątny (długość geograficzna) tablica odpowiednia dlaERDDAP.

Naszym zdaniem CF /DAPświat jest nieco inny niż świat GIS i działa na nieco niższym poziomie.ERDDAP™to odzwierciedla. Ogólnie,ERDDAP™jest przeznaczony do pracy głównie z danymi (nie mapy) i nie chce się zmienić (np. przeprojektowanie) dane. DlaERDDAP™, dane splatane są często / zazwyczaj / najlepiej związane z wartościami latu i projekcją cylindryczną, a nie z wartościami x, y. W każdym razie,ERDDAP™nie robi nic z projekcją danych; po prostu przekazuje dane poprzez, jak jest, z jego obecnej projekcji, na teorię, że reprojekcja jest znaczącą zmianą danych iERDDAP™nie chce być zaangażowany w znaczące zmiany. Ponadto późniejsi użytkownicy mogą naiwnie ponownie przeprojektować dane, co nie byłoby tak dobre jak tylko jedna reprojekcja. (Więc, jeśliERDDAP™administrator chce zaoferować dane w innej projekcji, grzywny; wystarczy przeprojektować dane offline i zaoferować, że jako inny zestaw danych wERDDAP. Wiele zestawów danych opartych na satelitach jest oferowanych jako to, co NASA nazywa poziomem 2. (swath) oraz jako poziom 3 (Projekcja równoprostokątna) wersje.) KiedyERDDAP™tworzy mapy (bezpośrednio lub poprzezWMSlub KML) ,ERDDAP™obecnie oferuje jedynie tworzenie map z projekcją równoprostokątnej / płyty carrée, która na szczęście jest akceptowana przez większość programów mapowania.

ZachęcamyERDDAP™administratorzy do korzystania z innego oprogramowania (NCO?Matlab? R? IDV?...?) przeprojektować dane na obszar geograficzny (Równoważny prostokątny rzut / płyta carrée) lub inny rzut cylindryczny i służyć tej formie danych wERDDAP™jako inny zestaw danych. Jest to podobne do tego, co robią ludzie, gdy przekształcają dane satelitarne na dane poziomu 2 w dane poziomu 3. Jednym z takich narzędzi jestNCOktóry oferuje opcje rozszerzenia dla przeglądania danych.

Mamy nadzieję, żeERDDAP™będzie mieć wbudowane narzędzia do oferowania map z innymi projekcjami w przyszłości. Mamy również nadzieję, że w przyszłości będziemy mieć lepsze połączenia ze światem GIS (inne niż prądWMSobsługa) . To straszne, że w tym "nowoczesnym" świecie, powiązania między CF /DAPŚwiat i świat GIS są wciąż tak słabe. Obie te rzeczy są na liście rzeczy do zrobienia. (Jeśli chcesz pomóc, w szczególności z połączeniemERDDAP™do MapServer, proszę wysłać maila do Chrisa. John w Noa.gov.)

Rodzaje danych

ERDDAP™obsługuje następujące typy danych (nazwy są wrażliwe na przypadki;'u'przedrostek oznacza "niepodpisane"; liczba wielu nazw w innych systemach jest liczbą bitów) :

bajt

  • bajt ma podpisane wartości całkowite o zakresie od -128 do 127. W innych systemach nazywa się to czasem int8. Nazywa się to "tinyint" SQL i Cassandra. ERDDAP™konwertybooleanz niektórych źródeł (np. SQL i Cassandra) do bajtów wERDDAP™o wartości 0 = false, 1 = true i 127 =missing\_value.

ubyte

  • ubyte posiada niepodpisane wartości całkowite o zakresie od 0 do 255. W innych systemach jest to czasami nazywane uint8.

krótkie

  • krótkie podpisała wartości całkowite o zakresie od -32768 do 32767. W innych systemach nazywa się to czasem int16. Nazywa się to "SQL i Cassandra".

short

  • short posiada niepodpisane wartości całkowite o zakresie od 0 do 65535. W innych systemach jest to czasami nazywane uint16.

int

  • int podpisała wartości całkowite o zakresie od -2147483648 do 2147483647. W innych systemach nazywa się to czasem int32. To się nazywa "integer|numeryczne (?) "by SQL and" int "by Cassandra.

uint

  • uint posiada niepodpisane wartości całkowite o zakresie od 0 do 4294967295. W innych systemach jest to czasami nazywane uint32.

długi

  • długi podpisała wartości całkowite o zakresie od -9223372036854775808 do 9223372036854775807. W innych systemach jest to czasami nazywane int64. To się nazywa "bigint"|numeryczne (?) "by SQL and" bigint "by Cassandra. Ponieważ wiele typów plików nie obsługuje długich danych, ich użycie jest zniechęcone. Jeśli to możliwe, zamiast tego użyj podwójnego (zob. poniżej) .

ulong

  • ulong posiada niepodpisane wartości całkowite o zakresie od 0 do 18446744073709551615 W innych systemach jest to czasami nazywane uint64. Ponieważ wiele typów plików nie obsługuje danych ulong, ich użycie jest zniechęcone. Jeśli to możliwe, zamiast tego użyj podwójnego (zob. poniżej) .

float

  • float jest pływakiem IEEE 754 o zakresie w przybliżeniu + / - 3.402823466e + 38. W innych systemach jest to czasami nazywane float32. To się nazywa "prawdziwe"|float (?) |dziesiętny (?) |numeryczne (?) "by SQL and" float "by Cassandra. Specjalna wartość NaN oznacza numer Not- a. ERDDAP™konwertuje dodatnie i ujemne wartości nieskończoności na NaN.

podwójne

  • podwójne jest podwójnym systemem IEEE 754 o zakresie około
  • / - 1.7976931348623157E + 308. W innych systemach jest to czasami nazywane float64. To się nazywa "podwójna precyzja|float (?) |dziesiętny (?) |numeryczne (?) "by SQL and" double "by Cassandra. Specjalna wartość NaN oznacza numer Not- a. ERDDAP™konwertuje dodatnie i ujemne wartości nieskończoności na NaN.

char

  • char jest pojedynczym 2-bajtem (16- bit) Znak Unicode UCS-2od\u0000 (# 0) przez\uffff (# 65535) . \uffffDefinicja Not- a- Character, analogiczna do podwójnej wartości NaN. Korzystanie z znaku jest zniechęcane, ponieważ wiele typów plików albo nie obsługuje znaków lub tylko obsługuje znaków 1- bajtowych (zob. poniżej) . Zamiast tego rozważ użycie String. Użytkownicy mogą używać zmiennych znaków do tworzenia wykresów.ERDDAP™przekonwertuje znaki na ich numer punktu kodu Unicode, który może być użyty jako dane liczbowe.

String

  • String jest sekwencją 0 lub więcej, 2- bajt (16- bit) Unicode znaków UCS-2. ERDDAP™używa / interpretuje łańcuch o długości 0 jako brakującą wartość.ERDDAP™nie obsługuje prawdziwego łańcucha null. Teoretyczna maksymalna długość łańcucha to 2147483647 znaków, ale prawdopodobnie występują różne problemy w różnych miejscach nawet z nieco krótszymi strunami. StosowanieERDDAP's String for SQL' s character, varchar, characking, binary, varbinary, interval, array, multiset, xml, and any other database data type that doesn 't fixed cleanly with any otherERDDAP™typ danych. StosowanieERDDAPString dla "tekstu" Cassandry i innych typów danych Cassandry, które nie pasują do innychERDDAP™typ danych.  

PrzedERDDAP™v2.10,ERDDAP™nie obsługiwał wewnętrznie niepodpisanych typów liczb całkowitych i oferował ograniczone wsparcie w swoich czytnikach i pisarzach danych.

Ograniczenia typu danych

Można pomyśleć oERDDAP™jako system, który posiada wirtualne zbiory danych i który działa poprzez odczytywanie danych ze źródła zbioru danych do wewnętrznego modelu danych i zapisywanie danych do różnych usług (np.(OPeN)DAP,WMS) i typów plików w odpowiedzi na żądania użytkowników.

  • Każdy czytnik wejść obsługuje podzbiór typów danych, któreERDDAP™wsparcie. Więc odczytanie danych doERDDAPWewnętrzne struktury danych nie stanowią problemu.
  • Każdy pisarz wyjściowy obsługuje również podzbiór typów danych. To jest problem, ponieważERDDAPmusi na przykład wcisnąć długie dane do typów plików, które nie obsługują długich danych.  

Poniżej znajdują się wyjaśnienia ograniczeń (lub brak) różnych twórców wyjściowych i jakERDDAP™zajmuje się problemami. Takie komplikacje są nieodłączną częściąERDDAPcel, jakim jest zapewnienie interoperacyjności różnych systemów.

ASCII

  • ASCII (.csv,.tsvitd.) pliki tekstowe -
    • Wszystkie dane liczbowe są zapisywane poprzez reprezentację String (z brakującymi wartościami danych pojawiającymi się jako łańcuchy długości zerowej) .

    • ChociażERDDAP™poprawnie zapisuje długie i ulong wartości do plików tekstowych ASCII, wielu czytelników (np. programy arkusza kalkulacyjnego) nie może prawidłowo radzić sobie z wartościami długimi i ulong i zamiast ich konwertować do podwójnych wartości (z utratą precyzji w niektórych przypadkach) .

    • Dane Char i String są zapisywane przez JSON Strings, które obsługują wszystkie znaki Unicode (w szczególności "nietypowe" znaki poza ASCII # 127, np. znak Euro pojawia się jako "\ u20ac") .

JSON

  • JSON (.json,.jsonlCSVitd.) pliki tekstowe -
    • Wszystkie dane liczbowe są zapisywane poprzez reprezentację String.
    • Dane Char i String są zapisane jako Strings JSON, które obsługują wszystkie znaki Unicode (w szczególności "nietypowe" znaki poza ASCII # 127, np. znak Euro pojawia się jako "\ u20ac") .
    • Brakujące wartości dla wszystkich typów danych numerycznych pojawiają się jako null.  

.nc3 pliki

  • .nc3 pliki nie wspierają automatycznie żadnych niepodpisanych typów danych całkowitych. Przed CF v1.9 CF nie obsługiwało niepodpisanych typów liczb całkowitych. Żeby sobie z tym poradzić,ERDDAP™2.10 + jest zgodne ze standardem NUG i zawsze dodaje atrybut "\ _ Unsigned" o wartości "true" lub "false", aby wskazać, czy dane pochodzą z niepodpisanej lub podpisanej zmiennej. Wszystkie atrybuty liczb całkowitych są zapisywane jako atrybuty podpisane (np. bajt) z podpisanymi wartościami (np. ubyteactual\_rangeatrybut o wartościach od 0 do 255, pojawia się jako atrybut bajtowy o wartościach od 0 do -1 (odwrotność wartości dopełniacza obu wartości poza zakresem). Nie ma łatwego sposobu, aby dowiedzieć się, które atrybuty (podpisane) powinny być odczytywane jako atrybuty niepodpisane.ERDDAP™obsługuje atrybut "\ _ Unsigned" podczas odczytu.nc3 pliki.
  • .nc3 pliki nie obsługują długich lub ulong typów danych.ERDDAP™zajmuje się tym przez tymczasowe przekształcenie ich na podwójne zmienne. Doubles może dokładnie reprezentować wszystkie wartości do + / - 9,007,199,254,740,992 Czyli 2 ^ 53. To niedoskonałe rozwiązanie.Unidataodmawia niewielkiego uaktualnienia do.nc3 do rozwiązania tych i związanych z nimi problemów, cytowanie.nc4 (istotna zmiana) jako rozwiązanie.
  • Specyfikacja CF (przed v1,9) powiedział, że obsługuje typ znaków danych, ale nie jest jasne, czy znak jest przeznaczony tylko jako klocki składowe znaków znaków, które są skutecznie Strings. Pytania do ich listy dyskusyjnej dały tylko mylące odpowiedzi. Ze względu na te komplikacje, najlepiej jest unikać znaków zmiennych wERDDAP™i używać zmiennych String w miarę możliwości.
  • Tradycyjnie,.nc3 pliki obsługiwane tylko strunami z kodowanymi ASCII (7- bit, # 0 - # 127) postacie. NUG (orazERDDAP) rozszerzyć (rozpoczynając ~ 2017) poprzez włączenie atrybutu "\ _ Kodowanie" o wartości "ISO- 8859-1" (rozszerzenie ASCII, które definiuje wszystkie 256 wartości każdego znaku 8- bitowego) lub "UTF- 8" w celu wskazania, w jaki sposób dane String są zakodowane. Inne kodowanie może być legalne, ale są zniechęcone.  

.nc4 pliki

  • .nc4 pliki obsługują wszystkieERDDAPtypy danych.

Pliki NCSSV

Pliki NCSSV 1.0 nie obsługują niepodpisanych typów danych całkowitych. Pliki NCSSV 1.1 +obsługuje wszystkie niepodpisane typy danych całkowitych.  

DAP

  • (OPeN)DAP (.das, .dds, .asc plików ASCII i .dods plików binarnych) -
    • (OPeN)DAPUchwyty krótkie, usort, int, uint, float i podwójne wartości prawidłowo.
    • (OPeN)DAPposiada typ danych "bajtowych", który definiuje jako niepodpisany, natomiast historycznie, THREDDS iERDDAP™traktowali "bajt" jako podpisane w ich(OPeN)DAPusługi. Aby poradzić sobie z tym lepiej,ERDDAP™2.10 + podąża za standardem NUG i zawsze dodaje atrybut "\ _ Unsigned" o wartości "true" lub "false", aby wskazać, czy dane są tym, coERDDAP™Dzwoni Byte albo Ubyte. Wszystkie atrybuty bajtów i ubyte są zapisywane jako atrybuty "byte" z podpisanymi wartościami (np. ubyteactual\_rangeatrybut o wartościach od 0 do 255, pojawia się jako atrybut bajtowy o wartościach od 0 do -1 (odwrotność wartości dopełniacza obu wartości poza zakresem). Nie ma łatwego sposobu, aby dowiedzieć się, które atrybuty "byte" powinny być odczytywane jako atrybuty ubyte.
    • (OPeN)DAPnie obsługuje podpisanych lub niepodpisanych długów.ERDDAP™zajmuje się tym przez czasową konwersję ich na podwójne zmienne i atrybuty. Doubles może dokładnie reprezentować wszystkie wartości do 9,007,199,254,740,992 Czyli 2 ^ 53. To niedoskonałe rozwiązanie.OPeNDAP (organizacja) odmawia niewielkiego uaktualnienia doDAP2.0, aby poradzić sobie z tym i powiązane problemy, cytowanieDAP4 (istotna zmiana) jako rozwiązanie.
    • Ponieważ(OPeN)DAPnie posiada oddzielnego typu znaków znaków, a technicznie obsługuje tylko znaki ASCII 1- bajtowe (# 0 - # 127) w Strings zmienne danych znaków będą pojawiały się jako 1-charaktery- długie Strings w(OPeN)DAP.das, .dds i .dods odpowiedzi.
    • Technicznie rzecz biorąc(OPeN)DAPSpecyfikacja obsługuje tylko łańcuchy z kodowanymi znakami ASCII (# 0 - # 127) . NUG (orazERDDAP) rozszerzyć (rozpoczynając ~ 2017) poprzez włączenie atrybutu "\ _ Kodowanie" o wartości "ISO- 8859-1" (rozszerzenie ASCII, które definiuje wszystkie 256 wartości każdego znaku 8- bitowego) lub "UTF- 8" w celu wskazania, w jaki sposób dane String są zakodowane. Inne kodowanie może być legalne, ale są zniechęcone.  

Uwagi dotyczące rodzaju danych

  • Ze względu na słabe wsparcie dla danych długich, ulong i char w wielu typach plików, zniechęcamy do stosowania tych typów danych wERDDAP. Jeśli to możliwe, używaj podwójnych zamiast długich i ulongów, a String zamiast znaku.  
  • Metadane - Ponieważ(OPeN)DAPodpowiedzi .das i .dds nie wspierają atrybutów długich lub ulong lub typów danych (i zamiast tego pokaż im jak dubles) , może zamiast tego chcesz użyćERDDAPtabelaryczne przedstawienie metadanych, jak widać whttp... / erddap / info / datasetID Strona internetowa .html (na przykład: https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (które można również uzyskać w innych typach plików, np. .csv,.htmlTable,.itx,.json,.jsonlCSV1,.jsonlCSV,.jsonlKVP,.mat,.nc,.nccsv,.tsv,.xhtml) lub.nccsvOdpowiedź metadanych (na przykład: https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata Chociaż.nccsvMetadane są dostępne tylko dla zbiorów danych tabelarycznych) , z których obie obsługują wszystkie typy danych (w szczególności, długie, ulong i char) .  

Pliki mediów

Nie wszystkie dane są tablicami liczb lub tekstu. Niektóre zbiory danych składają się z plików medialnych, takich jak obrazy, pliki audio i wideo.ERDDAP™posiada specjalne funkcje ułatwiające użytkownikom dostęp do plików medialnych. To dwuetapowy proces:  

  1. Uzyskaj dostęp do każdego pliku poprzez własny adres URL, poprzez system, który obsługuje żądania zakresu bajtów. Najprostszym sposobem jest umieszczenie plików w katalogu, któryERDDAP™ma dostęp. (Jeśli są w pojemniku jak.zipplik, rozpakuj je, chociaż może chcesz zaoferować.zipplik do użytkowników również.) Więc zróbNazwy EDDTableFromFileNamezestaw danych w celu udostępnienia tych plików za pośrednictwemERDDAP™, w szczególności poprzezERDDAPjest"files"system.

Wszystkie pliki udostępnione przez EDDTableFromFileNames iERDDAPjest"files"obsługa systemużądania dotyczące zakresu bajtów. Zazwyczaj, gdy klient (np. przeglądarka) składa wniosek do URL, otrzymuje cały plik jako odpowiedź. Ale z żądaniem zakresu bajtów, żądanie określa zakres bajtów z pliku, a serwer zwraca tylko te bajty. Jest to istotne tutaj, ponieważ odtwarzacze audio i wideo w przeglądarkach działają tylko wtedy, gdy plik może być dostępny za pośrednictwem żądań zakresu bajtów.

Opcjonalnie: Jeśli masz więcej niż jeden zestaw danych z powiązanymi plikami medialnymi, możesz zrobić tylko jeden EDDTableFromFileNames, który ma podfolder dla każdej grupy plików. Zaletą jest to, że kiedy chcesz dodać nowe pliki multimedialne do nowego zbioru danych, wszystko co musisz zrobić to utworzyć nowy folder i umieścić pliki w tym folderze. Folder i pliki zostaną automatycznie dodane do zbioru danych EDDTableFromFileNames.

  1. Opcjonalnie: Jeśli masz zbiór danych zawierający odniesienia do plików multimedialnych, dodaj go doERDDAP. Na przykład, możesz mieć plik .csv z wierszem za każdym razem, gdy ktoś widział wieloryba i kolumnę, która zawiera nazwę pliku obrazu związanego z tym obserwowaniem. Jeśli nazwa pliku obrazu jest tylko nazwą pliku, np. Img20141024T192403Z, a nie pełnym URL, to musisz dodaćfileAccessBase Url i / lub fileAccessSuffixatrybuty metadanych dla tegodataVariablektóry określa bazowy adres URL i przyrostek dla tych nazw plików. Jeśli udostępnisz pliki za pośrednictwem EDDTableFromFileNames, adres URL będzie w formie BaseUrl / erddap / files / datasetID / Na przykład:
        <att name="fileAccessBaseUrl">*someBaseURL*</a>  
<att name="fileAccessSuffix">.png</a>

Jeśli istnieje.ziplub inny plik kontenera ze wszystkimi plikami multimedialnymi związanymi ze zmienną danych, zalecamy również, aby udostępnić ten plik użytkownikom (patrz punkt 1 powyżej) a następnie zidentyfikować go zfileAccessArchive Urlatrybut.

\[PoczątekERDDAP™v1.82\]Jeśli zrobisz pierwszy krok powyżej (lub oba etapy) , następnie gdy użytkownik wyświetlaERDDAP™ "files"system dla tego zbioru danych (lub prosi, aby zobaczyć podzbiór zbioru danych poprzez.htmlTablewniosek, jeśli wykonałeś drugi krok) ,ERDDAP™pokaże ikonę '?' po lewej stronie nazwy pliku. Jeśli użytkownik pochyli się nad tą ikoną, zobaczą wyskakującego obrazu, odtwarzacza audio lub odtwarzacza wideo. Przeglądarki obsługują tylko ograniczoną liczbę typów

  • obrazek (zazwyczaj .gif, .jpg i .png) ,
  • audio (zazwyczaj .mp3, .ogg i .wav) oraz
  • pliki wideo (zazwyczaj .mp4, .ogv i. WWW) .

Wsparcie różni się w różnych wersjach różnych przeglądarek na różnych systemach operacyjnych. Więc jeśli masz wybór typu pliku do zaoferowania, sensowne jest oferowanie tych typów.

Lub, jeśli użytkownik kliknie na nazwę pliku pokazaną naERDDAP™strona internetowa, ich przeglądarka pokaże obraz, plik audio lub wideo jako oddzielną stronę internetową. Jest to w większości przydatne, aby zobaczyć bardzo duży obraz lub wideo skalowane do pełnego ekranu, zamiast w popup.

Praca z plikami AWS S3

Amazon Web Service (AWS) jest sprzedawcąprzetwarzanie w chmurzeusługi.S3jest systemem przechowywania obiektów oferowanym przez AWS. Zamiast hierarchicznego systemu katalogów i plików tradycyjnego systemu plików (jak dysk twardy w komputerze) , S3 oferuje tylko "wiadra", które posiadają "obiekty" (Zadzwonimy do nich."files") .

Dla plików ASCII (np. .csv) ,ERDDAP™może pracować z plikami w wiadrach bezpośrednio. Jedyne, co musisz zrobić, to określić<fileDir > dla zbioru danych przy użyciu określonego formatu dla wiadra AWS, np. https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Nie należy stosować leku<cacheFromUrl >. Szczegóły przedstawiono poniżej.

Ale dla plików binarnych (np.,.nc, .grib, .bufr, oraz.hdfpliki) , trzeba użyć<system cacheFromUrl > opisany poniżej.ERDDAP, netcdf- java (któreERDDAP™wykorzystuje do odczytu danych z tych plików) , i inne oprogramowanie danych naukowych są zaprojektowane do pracy z plikami w tradycyjnym systemie plików, który oferujepoziom blokudostęp do plików (który pozwala na odczytanie fragmentów pliku) , ale S3 tylko oferujepoziom pliku (obiekt) dostęp do plików (która pozwala tylko na przeczytanie całego pliku) . AWS oferuje alternatywę dla S3,Elastyczny Block Store (EBS) ), który obsługuje dostęp do plików na poziomie bloku, ale jest droższy niż S3, więc rzadko jest używany do przechowywania dużych ilości plików danych. (Więc kiedy ludzie mówią, że przechowują dane w chmurze (S3) jest tanie, jest zwykle jabłka do pomarańczy porównania.)

S3 Kubełki

Zawartość wiadra. Kluczyki. Obiekty.
Technicznie, wiadra S3 nie są zorganizowane w hierarchicznej strukturze plików jak system plików na komputerze. Zamiast tego wiadra zawierają tylko "obiekty" (pliki) , z których każdy ma "klucz" (nazwa) . Przykładem klucza w tym wiaderku to:

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

Odpowiednim URL dla tego obiektu jest

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 obsługuje niewielką zmianę w sposobie konstruowania tego URL, aleERDDAP™wymaga tego jednego konkretnego formatu:    https://bucketName.s3.region.amazonaws.com/key
Jest to powszechna praktyka, jak w tym przykładzie, aby kluczowe nazwy wyglądały jak ścieżka hierarchiczna plus nazwa pliku, ale technicznie nie są. Ponieważ jest to powszechne i użyteczne,ERDDAP™traktuje klucze z / 's tak, jakby były ścieżką hierarchiczną plus nazwa pliku, a ta dokumentacja będzie odnosić się do nich jako takich. Jeśli kubełek nie używa /' s (np. klucz taki jak ABI- Lib.2018.052.22.OR\ _ ABI- L1b- RadM2-M3C10\ _ G16\ _ s20180522247575), następnieERDDAP™będzie traktować cały klucz jako długą nazwę pliku.

Private vs Public Buckets -- Administrator wiadra S3 może uczynić wiadro i jego zawartość publiczną lub prywatną. Jeśli plik znajduje się publicznie, każdy może go pobrać za pomocą URL. Amazon maOtwarte daneprogram, który przechowuje zbiory danych publicznych (w tym dane zNOAA, NASA i USGS) za darmo i nie pobiera opłat za pobranie plików z tych wiader. Jeśli wiadro jest prywatne, pliki w pojemniku są dostępne tylko dla uprawnionych użytkowników i AWS pobiera opłatę (zazwyczaj płacone przez właściciela wiadra) za pobranie plików do komputera nie-AWS S3.ERDDAP™mogą pracować z danymi w publicznych i prywatnych wiadrach.

AWS

Aby to zrobić tak, żeERDDAP™można przeczytać zawartość prywatnych wiader, trzeba AWS referencje i trzeba przechowywać plik referencji w standardowym miejscu takERDDAP™może znaleźć informacje. Patrz AWS SDKJava2.x dokumentacja:Ustaw domyślne referencje. (Opcja przechowywania wartości jakoJavaparametry linii poleceń w\[tomcat\]/ bin / setenv.sh może być dobrą opcją.)

AWS / pliki /

  • / files / system -- WERDDAP™ / files / systemumożliwia użytkownikom pobieranie plików źródłowych do zbioru danych. Zalecamy, aby włączyć to dla wszystkich zbiorów danych z plikami źródłowymi, ponieważ wielu użytkowników chce pobrać oryginalne pliki źródłowe.
    • Jeśli pliki znajdują się w prywatnym wiaderku S3, wniosek użytkownika o pobranie pliku zostanie rozpatrzony przezERDDAP™, który odczyta dane z pliku, a następnie prześle je do użytkownika, zwiększając tym samym obciążenieERDDAP™, za pomocą przychodzącej i wychodzącej przepustowości, i co (doERDDAP™administrator) uiścić opłatę za wyprowadzenie danych na rzecz AWS.
    • Jeśli pliki znajdują się w publicznym wiaderku S3, wniosek użytkownika o pobranie pliku zostanie przekierowany na adres URL AWS S3 dla tego pliku, więc dane nie będą przepływać przezERDDAP™, zmniejszając obciążenieERDDAP. A jeśli pliki są w Amazon Open Data (wolny) publiczne wiadro, a następnie (doERDDAP™administrator) Nie będzie musiał płacić AWS żadnej opłaty za dane. Tak więc, istnieje duża korzyść obsługując dane z opinii publicznej (nie prywatne) S3 wiadra i ogromna zaleta w obsłudze danych z Amazon Open Data (wolny) wiadra.

ERDDAP™i AWS S3 Buckets

ERDDAP™i AWS S3 Buckets
Na szczęście, po wielkim wysiłku,ERDDAP™posiada szereg funkcji, które pozwalają mu uporać się z nieodłącznymi problemami pracy z dostępem do plików na poziomie bloku S3 w sposób racjonalnie efektywny:

  • \[Zastrzeżenie: Praca z wiadrami AWS S3 to dużo pracy. AWS to ogromny ekosystem usług i funkcji. Jest wiele do nauczenia. To wymaga czasu i wysiłku, ale jest do zrobienia. Bądź cierpliwy, a wszystko się ułoży. Poszukaj / poproś o pomoc (Dokumentacja AWS, strony internetowe jakPrzepełnienie stosu, i regularne ERDDAP™opcje wsparcia) jeśli / kiedy utkniesz.\]
     
  • Może być trudno nawet znaleźć strukturę katalogów i nazwy plików plików w wiaderku S3.ERDDAP™ma rozwiązanie tego problemu: EDDTableFromFileNames ma specjalne\*\** from OntheFlyopcja, która pozwala na wykonanie zbioru danych EDDTableFromFileNames, który pozwala użytkownikom przeglądać zawartość wiadra S3 (i pobrać pliki) przez zbiór danych"files"opcja. Istniejeprzykład tego poniżej.  
  • ERDDAP™można odczytać dane zpliki danych skompresowanych zewnętrznie, więc jest w porządku, jeśli pliki na S3 są przechowywane jako.gz,.gzip,.bz2, .Z, lub inne rodzaje plików danych skompresowanych zewnętrznie, które mogą dramatycznie (2-20X) ograniczenie kosztów przechowywania plików. Często nie ma kary czasu za korzystanie z zewnętrznych plików skompresowanych, ponieważ czas zapisany przez przeniesienie mniejszego pliku z S3 doERDDAPmniej więcej równoważy dodatkowy czas potrzebny naERDDAP™do dekompresji pliku. Aby korzystać z tej funkcji, wystarczy upewnić się, że zestaw danych<fileNameRegex > pozwala na typ skompresowanego pliku (np. poprzez dodanie (|.gz) do końca regeksu) .  
  • W najczęstszym przypadku, gdzie maszERDDAP™zainstalowane na komputerze do testowania / rozwoju i gdzie zestaw danych posiada pliki binarne, które są przechowywane jako obiekty w wiaderku S3, jedno podejście do uzyskania zbioru danych wERDDAP™jest:
    1. Utwórz katalog na komputerze, aby przechowywać kilka testowych plików danych.

    2. Pobierz dwa pliki danych ze źródła do katalogu, który właśnie stworzyłeś.

    3. StosowanieGenerateDatasetsXmlaby wygenerować kawałekdatasets.xmldla zbioru danych w oparciu o dwa lokalne pliki danych.

    4. Sprawdź, czy zbiór danych działa zgodnie z życzeniemDasDsi / lub lokalnyERDDAP.

      Następujące kroki zrobić kopię tego zbioru danych (które otrzymają dane z wiadra S3) w sprawie publicznejERDDAP.

    5. Kopiuj kawałekdatasets.xmldla zbioru danych dodatasets.xmldla ogółu społeczeństwaERDDAP™które będą służyć danych.

    6. Utwórz katalog publicznieERDDAPLokalny dysk twardy do przechowywania plików tymczasowych. Katalog nie użyje dużo miejsca na dysku (zobacz CacheSizeGB poniżej) .

    7. Zmień wartość zbioru danych<fileDir > tag tak, aby wskazywał na katalog, który właśnie stworzyłeś (nawet jeśli katalog jest pusty) .

    8. DodajcacheFromUrltag określający nazwę zbioru danych oraz opcjonalny przedrostek (np. katalog) w szczególnościAws S3 URL Format, któryERDDAP™wymaga.

    9. Dodaj<cacheSizeGB >] (# cachefromurl) tag do zbioru danych xml (np. 10 jest dobrą wartością dla większości zbiorów danych) powiedziećERDDAP™aby ograniczyć rozmiar lokalnego bufora (tj., nie próbuj buforować wszystkich zdalnych plików) .

    10. Sprawdź, czy to działa publicznie.ERDDAP. Zauważ, że za pierwszym razemERDDAP™ładuje zbiór danych, długo zajmie załadowanie, ponieważERDDAP™musi pobrać i przeczytać wszystkie pliki danych.

Jeśli zbiór danych jest ogromnym zbiorem ogromnych plików danych z pasami, zajmie to bardzo dużo czasu i będzie niepraktyczne. W niektórych przypadkach, w przypadku plików zawierających dane w sieci,ERDDAP™może pobrać wymagane informacje (np. punkt czasowy dla danych w pliku danych zawiązanych) z nazwy pliku i uniknąć tego problemu. PatrzAgregacja poprzez Nazwy plików.

  1. Opcjonalnie (ale szczególnie dla zbiorów danych EDDTableFromFiles) , można dodaćnTreatstag do zbioru danych, aby powiedziećERDDAPużywać więcej niż 1 wątku w odpowiedzi na żądanie użytkownika o dane. To minimalizuje skutki opóźnienia, który występuje, gdyERDDAP™odczytuje pliki danych z (zdalny) AWS S3 wiadra do lokalnego bufora i (być może) dekompresja.

AWS S3 Otwarte dane

W ramachNOAAjestProgram dużych danych,NOAAposiada partnerstwo z pięcioma organizacjami, w tym z AWS, w celu "zbadania potencjalnych korzyści z przechowywania kopii kluczowych obserwacji i modeli wyjść w chmurze, aby umożliwić wykonywanie obliczeń bezpośrednio na danych bez konieczności dalszej dystrybucji". AWS zawiera zbiory danych, z których pochodziNOAAw ramach programu oferującego publiczny dostęp do dużej kolekcjiOtwarte dane o AWS S3z dowolnego komputera, czy jest to instancja Amazon (komputer wynajęty) w sieci AWS lub własnego komputera w dowolnej sieci. Poniższy przykład zakłada, że pracujesz z publicznie dostępnym zbiorem danych.

Dostęp do plików w zbiorniku AWS S3

Dla prywatnego wiadra danych S3, właściciel wiadra musi dać Ci dostęp do wiadra. (Patrz dokumentacja AWS.)

We wszystkich przypadkach będziesz potrzebował konta AWS, ponieważ AWS SDK dlaJava (któreERDDAP™wykorzystuje do pobierania informacji o zawartości wiadra) wymaga potwierdzenia konta AWS. (więcej na ten temat poniżej)

ERDDAP™można uzyskać dostęp tylko do wiader AWS S3, jeśli określić [<cacheFromUrl >] (# cachefromurl) (lub<fileDir >) w określonym formacie: https://bucketName.s3.aws-region.amazonaws.com/prefix/
gdzie

  • BucetName jest krótką formą nazwy wiadra, np. noaagoes17.
  • Region, np. us- east-1, pochodzi z kolumny "Region" w jednej z tabelPunkty końcowe usługi AWSgdzie wiadro jest rzeczywiście zlokalizowane.
  • Prefiks jest opcjonalny. Jeśli występuje, musi zakończyć się'/'.

Na przykład: https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Ten format URL jest jednym z zaleceń AWS S3: patrzDostęp do wiadraorazten opis przedrostków.ERDDAP™wymaga, aby połączyć bucket URL i opcjonalny przedrostek do jednego URL w celu określenia<cacheFromUrl > (lub<fileDir >) gdzie znajdują się pliki.

Test Public AWS S3 Buckets

Dla publicznych wiader można i należy przetestować adres URL wiadra katalogu AWS S3 w przeglądarce, np.: https://noaa-goes17.s3.us-east-1.amazonaws.com Jeśli kubełek URL jest prawidłowy i odpowiedni dlaERDDAP, zwróci dokument XML, który ma (częściowy) listę zawartości tego wiadra. Niestety, pełny adres URL (np. bucket URL plus prefix) żeERDDAP™wants for a dataset does not work in a browser. AWS nie oferuje systemu do przeglądania hierarchii wiadra łatwo w przeglądarce. (Jeśli jest to nieprawidłowe, proszę wysłać e-mail do Chrisa. John w Noah. W przeciwnym razie, Amazon, proszę dodać wsparcie dla tego!)

Przeglądanie zawartości wiadra

Koszyki S3 często zawierają kilka kategorii plików, w kilku pseudokatalogach, które mogą stać się kilkomaERDDAP™zestawów danych. AbyERDDAP™zestaw danych, musisz znać katalog startowy dla<cacheFromUrl > (lub<fileDir >) oraz format nazw plików identyfikujących ten podzbiór plików. Jeśli spróbujesz wyświetlić całą zawartość wiadra w przeglądarce, S3 pokaże Ci pierwsze 1000 plików, co jest niewystarczające. Obecnie najlepszym sposobem, aby zobaczyć całą zawartość wiadra jest zrobićNazwy EDDTableFromFileNamezbiór danych (na komputerzeERDDAP™lub publicznieERDDAP) , co daje również łatwy sposób przeglądania struktury katalogów i pobierania plików. W<fileDir > dla tego będzie podany powyżej adres URL, np. https://noaa-goes17.s3.us-east-1.amazonaws.com .\[Dlaczego AWS S3 nie oferuje szybkiego i łatwego sposobu na zrobienie tego bez konta AWS?\]Zauważ, że kiedy robię to na komputerze w sieci non-Amazon, wydaje się, że Amazon spowalnia reakcję na trickle (około 100 (?) pliki na kawałek) po kilku pierwszych kawałkach (1000 plików na kawałek) są pobierane. Ponieważ wiadra mogą mieć ogromną liczbę plików (noaa- goes17 ma 26 milionów) , uzyskanie całej zawartości wiadra może zająć EDDTableFromFileName kilka godzin (np. 12!) Do końca.\[Amazon, zgadza się?\]

Tworzenie tabeli EDD FromFileNames Dataset z pojemnikiem AWS S3

Jeśli masz nazwę wiadra, ale nie masz jeszcze listy plików w pojemniku S3 lub przedrostku, który identyfikuje lokalizację odpowiednich plików w pojemniku, użyj poniższych instrukcji, aby EDDTableFromFileNames dataset tak można przeglądać hierarchię katalogu wiadra S3 poprzezERDDAPjest"files"system.

  1. Otwórz konto AWS ERDDAP™wykorzystujeAWS SDKJavaaby uzyskać informacje wiadro z AWS, więc trzebautworzyć i aktywować konto AWS. To dość duża praca, z wieloma rzeczami do nauczenia się.  
  2. Umieść swoje AWS Kredyty gdzieERDDAP™może ich znaleźć. Należy postępować zgodnie z instrukcjamiUtworzenie AWS Kredyty i Region RozwojuwięcERDDAP™ (w szczególności, AWS SDKJava) będzie w stanie znaleźć i wykorzystać swoje referencje AWS. JeśliERDDAP™nie można znaleźć referencji, zobaczysz Java.lang. IllegalArgumentException: plik profilu nie może być błędem null wERDDAPplik log.txt.

Wskazówka dla Linuksa i Mac OS: plik uwierzytelniania musi być w katalogu domowym użytkownika, który jest uruchomiony Tomcat (orazERDDAP) (dla tego ustępu, przyjmiemy użytkownik = tomcat) w pliku o nazwie ~ / .aws / referencje. Nie zakładaj, że ~ is / home / tomcat -- właściwie użyj cd ~ aby dowiedzieć się, gdzie system operacyjny myśli ~ dla użytkownika = tomcat jest. Utwórz katalog, jeśli nie istnieje. Ponadto, po umieszczeniu pliku uwierzytelniania w miejscu, upewnij się, że użytkownik i grupa do pliku są Tomcat, a następnie użyj chmod 400 referencji, aby upewnić się, że plik jest read- tylko dla użytkownika = tomcat.

  1. Utwórz bucket URL wformat, któryERDDAP™wymaga, np., https://noaa-goes17.s3.us-east-1.amazonaws.com oraz (do wiader publicznych) przetestować go w przeglądarce, aby upewnić się, że zwraca dokument XML, który ma częściową listę zawartości tego wiadra.  
  2. StosowanieGenerateDatasetsXmldo tworzeniaNazwy EDDTableFromFileNamezbiór danych:
    • Dla katalogu startowego, użyj tej składni: \\\ Z OntheFly, Twój BucketUrl na przykład: \*\*Z OntheFly, https://noaa-goes17.s3.us-east-1.amazonaws.com/

    • Nazwa pliku?.

    • Rekursywne? prawda

    • przeładowanie Każdej minuty? 10080

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

    • Instytucja?NOAA

    • Podsumowanie? nic (ERDDAP™będzie tworzyć przyzwoite podsumowanie automatycznie.)

    • Tytuł? nic (ERDDAP™automatycznie stworzy przyzwoity tytuł.) Jak zwykle, należy edytować otrzymany XML, aby sprawdzić poprawność i dokonać ulepszeń przed kawałkiem zbiorów danych za pomocą go wdatasets.xml.

  3. Jeśli postępujesz zgodnie z powyższymi instrukcjami i załadujesz zestaw danychERDDAP, stworzyłeś zestaw danych EDDTableFromFiles. Jako przykład, i aby ułatwić każdemu przeglądanie i pobieranie plików z AWS Open Data buckets, stworzyliśmy EDDTableFromFileNames datasets (zobacz listę na https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ ) dla prawie wszystkichAWS S3 Otwarte zbiorniki danych. \[Kilka wiader, których nie uwzględniliśmy, ma dużą liczbę plików w katalogu głównym. (więcej niż można pobrać w rozsądnej ilości czasu) lub nie zezwalają na publiczny dostęp (Czy wszyscy nie powinni być jawni?) lub są wiadrami Pays Requester (np. Sentinel) .\]
    Jeśli klikniesz na"files"link do jednego z tych zbiorów danych, można przeglądać drzewo katalogów i pliki w tym wiadrze S3. Z powodu drogi\\\ * from OnTheFly EDDTableFromFiles działa, te listy katalogowe są zawsze idealnie up- to- date, ponieważERDDAP™Włączam je. Jeśli klikniesz w drzewo katalogowe na nazwę pliku i klikniesz na nazwę pliku,ERDDAP™przekieruje Państwa prośbę do AWS S3, aby można było pobrać plik bezpośrednio z AWS. Możesz sprawdzić te akta.

Kłopoty? Jeśli pliki EDDTableFromFiles nie załadują sięERDDAP™ (lub DasDds) , szukaj w pliku log.txt wiadomości błędów. Jeśli zobaczysz Java.lang. IllegalArgumentException: plik profilu nie może być błędem null, problemem jest to, że AWS SDK dlaJava (stosowane przezERDDAP) Nie znajduje akt. Patrz powyżej instrukcje uwierzytelniania.  

Szkoda, że AWS nie pozwala ludziom po prostu korzystać z przeglądarki, aby zobaczyć zawartość wiadra publicznego.

Potem możesz zrobićERDDAP™zbiory danych dające użytkownikom dostęp do danych w plikach.
Patrz instrukcjaERDDAP™i S3 Buckets (powyżej) . Dla próbki EDDTableFromFileNames dataset, że zostały wykonane powyżej, jeśli zrobić trochę węszenie wokół z katalogu i nazwy plików w drzewie katalogu, staje się jasne, że nazwy katalogu najwyższego poziomu (np. ABI- L1b- RadC) coERDDAP™Zawołać osobne zbiory danych. Kubeł, z którym pracujesz może być podobny. Można następnie kontynuować tworzenie oddzielnych zbiorów danych wERDDAP™dla każdego z tych zbiorów danych, przy użyciu np.: https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
jako<cacheFromUrl >. Niestety, dla tego konkretnego przykładu, zbiory danych w wiadrze wydają się być zbiorami danych na poziomie 1 lub 2, któreERDDAP™ nie jest szczególnie dobry w, ponieważ zbiór danych jest bardziej skomplikowanym zbiorem zmiennych, które używają różnych wymiarów.  

Pliki NcML

Pliki NcML pozwalają określić zmiany w locie na jednym lub kilku źródłach oryginalnychNetCDF (v3 lub v4) .nc, .grib, .bufr, lub.hdf (v4 lub v5) pliki, a następnieERDDAP™leczenia.ncPliki ml jako pliki źródłowe.ERDDAP™zestawy danych zaakceptują.ncPliki ml zawsze.ncoczekuje się plików. Pliki NcML MUSI mieć rozszerzenie.ncml. PatrzUnidataDokumentacja NcML. NcML jest przydatne, ponieważ można z nim zrobić kilka rzeczy (na przykład wprowadzenie różnych zmian do różnych plików w zbiorze, w tym dodanie do pliku wymiaru o określonej wartości) , że nie można zrobić zERDDAPjestdatasets.xml.

  • Zmiany.ncZmodyfikowany czas pliku ml spowoduje ponowne załadowanie pliku za każdym razem, gdy zestaw danych jest ponownie wczytywany, ale zmienia się bazowy.ncPliki danych nie zostaną bezpośrednio zauważone.
  • NcML\*Bardzo często\*wrażliwe na kolejność niektórych elementów w pliku NcML. Pomyśl o NcML jako o określeniu serii instrukcji w określonej kolejności, z zamiarem zmiany plików źródłowych (stan na początku / górze pliku NcML) do plików docelowych (stan na końcu / dole pliku NcML) .

Alternatywą dla NcML jestNetCDFPodmioty gospodarcze (NCO) . Duża różnica polega na tym, że NcML jest systemem wprowadzania zmian w locie (więc pliki źródłowe nie są zmieniane) , podczas gdyNCOmoże być używany do wprowadzania zmian do (lub nowe wersje) pliki. ObaNCOi NcML są bardzo, bardzo elastyczne i pozwalają na prawie każdą zmianę można myśleć o plikach. Dla obu, to może być trudne, aby dowiedzieć się dokładnie, jak zrobić to, co chcesz zrobić - sprawdzić w sieci na podobnych przykładach. Oba narzędzia są przydatne do przygotowania netCDF iHDFpliki do użycia zERDDAP, w szczególności, aby dokonać zmian poza coERDDAPSystem manipulacji może pomóc.

Przykład # 1: Dodanie wymiaru czasu z pojedynczą wartością Oto.ncPlik ml, który tworzy nowy wymiar zewnętrzny (czas, z 1 wartością: 1041379200) i dodaje ten wymiar do zmiennej pic w pliku A2003001.L3m\ _ DAY\ _ PIC\ _ pic\ _ 4km.nc:

    <netcdf xmlns='https://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2'>
<variable name='time' type='int' shape='time' />
<aggregation dimName='time' type='joinNew'>
<variableAgg name='pic'/>
<netcdf location='A2003001.L3m\\_DAY\\_PIC\\_pic\\_4km.nc' coordValue='1041379200'/>
</aggregation>
</netcdf>

Przykład # 2: Zmiana istniejącej wartości czasu Czasami źródło.ncplik ma już wymiar czasu i wartość czasu, ale wartość jest nieprawidłowa (dla twoich celów) . To.ncPlik ml mówi: dla pliku danych o nazwie "" 19810825230030-NCEI "..., dla zmiennej wymiarowej"time", ustawić atrybut jednostek na 'sekundy od 1970- 01-01T00: 00: 00Z' i ustawić wartość czasową na 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>

NetCDFPodmioty gospodarcze (NCO)

"Operatorzy netCDF (NCO) składa się z tuzina autonomicznych programów, które przyjmują netCDF\[v3 lub v4\],HDF \[v4 lub v5\],\[.grib, .bufr,\]lubDAPpliki jako dane wejściowe, a następnie działają (np. uzyskać nowe dane, obliczyć statystyki, drukować, hiperlaboratorium, manipulować metadanymi) i wyjść wyniki do ekranu lub plików w formatach tekstowych, binarnych lub netCDF.NCOpomaga w analizie zawiązanych danych naukowych. W stylu shell- commandNCOpozwala użytkownikom manipulować i analizować pliki interaktywnie, lub ze skryptami ekspresowymi, które unikają niektórych napowietrznych środowisk programowania wyższego poziomu ". (odNCOstrona główna) .

Alternatywa dlaNCOenNcML. Duża różnica polega na tym, że NcML jest systemem wprowadzania zmian w locie (więc pliki źródłowe nie są zmieniane) , podczas gdyNCOmoże być używany do wprowadzania zmian do (lub nowe wersje) pliki. ObaNCOi NcML są bardzo, bardzo elastyczne i pozwalają na prawie każdą zmianę można myśleć o plikach. Dla obu, to może być trudne, aby dowiedzieć się dokładnie, jak zrobić to, co chcesz zrobić - sprawdzić w sieci na podobnych przykładach. Oba narzędzia są przydatne do przygotowania netCDF iHDFpliki do użycia zERDDAP, w szczególności, aby dokonać zmian poza coERDDAPSystem manipulacji może pomóc.

Na przykład, możesz użyćNCOaby jednostki zmiennej czasu były spójne w grupie plików, gdzie początkowo nie były spójne. Albo, możesz użyćNCOdo stosowaniascale\_factororazadd\_offsetw grupie plików, gdziescale\_factororazadd\_offsetmają różne wartości w różnych plikach źródłowych. (Albo, możesz teraz poradzić sobie z tymi problemami wERDDAP™przezEDDGridFromNcFilesUnpacked, który jest wariantemEDDGridFromNcFiles, który rozpakowuje zapakowane dane i standaryzuje wartości czasowe na niskim poziomie w celu zajęcia się plikami kolekcji, które mają różnescale\_factors orazadd\_offsetlub inne jednostki czasowe.)

NCOjest Programy Free i Open Source, które wykorzystujeGPL 3.0Prawo jazdy.

Przykład # 1: Uspójnienie jednostek EDDGridPliki FromFiles i EDDTable Z plików nalega, aby jednostki dla danej zmiennej były identyczne we wszystkich plikach. Jeśli niektóre pliki są trywialne (niefunkcjonalnie) inne niż inne (np. jednostki czasowe "sekundy od 1970- 01- 01 00: 00: 00 UTC" kontra "seconds since 1970-01-01T00:00:00Z", możesz użyćNCOjestncatted. do zmiany jednostek we wszystkich plikach, aby były identyczne z nco / ncatted -a units, time, o, c, 'seconds from 1970- 01-01T00: 00: 00Z'\ *.nc
\[Dla wielu problemów takich jak ten w EDDTableFrom... Zestawy plików, możesz teraz użyćstandaryzacja Co?powiedziećERDDAPdo standaryzacji plików źródłowych, jak są one odczytywaneERDDAP.\]

Ograniczenia do rozmiaru zbioru danych

Zobaczysz wiele odniesień do "2 miliardów" poniżej. Dokładniej, jest to odniesienie do 2,147,483,647 (2 ^ 31-1) , która jest maksymalną wartością 32- bitowej liczby całkowitej. Na przykład w niektórych językach komputerowychJava (któreERDDAP™jest wpisany w) , jest to największy typ danych, który może być stosowany w wielu strukturach danych (na przykład wielkość tablicy) .

Dla wartości String (na przykład dla nazw zmiennych, nazw atrybutów, wartości atrybutów String oraz wartości danych String) , maksymalna liczba znaków na String wERDDAP™to ~ 2 miliardy. Ale w prawie wszystkich przypadkach, nie będzie małych lub dużych problemów, jeśli String przekracza rozsądny rozmiar (np. 80 znaków dla nazw zmiennych i nazw atrybutów oraz 255 znaków dla większości wartości atrybutów String i wartości danych) . Na przykład, strony internetowe, które wyświetlają długie nazwy zmiennych będą niezgrabnie szerokie i długie nazwy zmiennych będą obcinane, jeśli przekroczą granicę typu pliku odpowiedzi.

W odniesieniu do zbiorów danych w sieci:

  • Maksymalna liczbaaxisVariables wynosi ~ 2 mld. Maksymalna liczbadataVariables wynosi ~ 2 mld. Ale jeśli zbiór danych ma > 100 zmiennych, będzie to kłopotliwe dla użytkowników. A jeśli zbiór danych ma > 1 milion zmiennych, serwer będzie potrzebował dużo fizycznej pamięci i będą inne problemy.
  • Maksymalny rozmiar każdego wymiaru (axisVariable) to ~ 2 miliardy wartości.
  • Myślę, że maksymalna całkowita liczba komórek (produkt wszystkich wymiarów) jest nieograniczony, ale może być ~ 9e18.

Dla zbiorów danych tabelarycznych:

  • Maksymalna liczbadataVariables wynosi ~ 2 mld. Ale jeśli zbiór danych ma > 100 zmiennych, będzie to kłopotliwe dla użytkowników. A jeśli zbiór danych ma > 1 milion zmiennych, serwer będzie potrzebował dużo fizycznej pamięci i będą inne problemy.
  • Maksymalna liczba źródeł (na przykład, pliki) które mogą być zagregowane jest ~ 2 mld.
  • W niektórych przypadkach maksymalna liczba wierszy z pojedynczego źródła (na przykład plik, ale nie baza danych) wynosi ~ 2 miliardy wierszy.
  • Nie sądzę, żeby były inne granice.

W odniesieniu zarówno do zbiorów danych w paskach, jak i tabelarycznych istnieją pewne wewnętrzne ograniczenia wielkości podzbioru, które mogą być wymagane przez użytkownika w jednym wniosku (często związane z > 2 mld czegoś lub ~ 9e18 czegoś) , ale jest o wiele bardziej prawdopodobne, że użytkownik przekroczy granice specyficzne dla typu pliku.

  • NetCDFWersja 3.ncpliki są ograniczone do 2GB bajtów. (Jeśli to naprawdę problem dla kogoś, daj mi znać: Mogę dodać wsparcie dlaNetCDFWersja 3.ncRozszerzenie 64- bitowe lubNetCDFWersja 4, która znacznie zwiększyłaby limit, ale nie nieskończenie.)
  • Przeglądarki awarii tylko ~ 500MB danych, więcERDDAP™ogranicza odpowiedź na.htmlTableżądania ~ 400MB danych.
  • Wiele programów analizy danych ma podobne granice (na przykład, maksymalny rozmiar wymiaru jest często ~ 2 mld wartości) , więc nie ma powodu, aby ciężko pracować, aby obejść granice specyficzne dla typu pliku.
  • Limity specyficzne dla typu pliku są przydatne, ponieważ zapobiegają naiwnym żądaniom naprawdę ogromnych ilości danych (na przykład, "daj mi cały ten zbiór danych", gdy zbiór danych ma 20TB danych) , które zajęłyby tygodnie lub miesiące, aby pobrać. Im dłużej pobierz, tym bardziej prawdopodobne, że nie uda się z różnych powodów.
  • Limity specyficzne dla danego typu plików są przydatne, ponieważ zmuszają użytkownika do radzenia sobie z podzbiorami wielkości uzasadnionej (na przykład zajmowanie się dużym zbiorem danych za pomocą plików z danymi z jednego punktu czasowego) .  

Przełącz na ACDD- 1.3

My (w szczególnościGenerateDatasetsXml) aktualnie zalecaneACDD wersja 1.3, który został ratyfikowany na początku 2015 r. i który jest określany jako "ACDD- 1.3" w atrybucie konwencji globalnych. PrzedERDDAP™wersja 1.62 (wydany w czerwcu 2015 r.) ,ERDDAP™używane / zalecane oryginał, wersja 1.0, zNetCDFKonwencja o atrybucie dla wyszukiwania danychktóre zostało określone jako "UnidataDataset Discovery v1.0 "w konwencjach globalnych iMetadata\_Conventionsatrybuty.

Jeśli Twoje zbiory danych używają wcześniejszych wersji ACDD, zalecamy przełączenie się na ACDD- 1.3. To nie jest trudne. ACDD- 1.3 jest bardzo kompatybilny wstecznie z wersją 1.0. Do przełączania, dla wszystkich zbiorów danych (z wyjątkiemEDDGridFromErddap i EDDTable Zestawy danych FromErddap) :

  1. Usuń nowo usunięty globalnyMetadata\_Conventionsatrybut poprzez dodanie (lub poprzez zmianę istniejącegoMetadata\_Conventionsatrybut)
        <att name="Metadata\\_Conventions">null</att>  

do globalnego zbioru danych<addAttributes>.   2. Jeżeli zbiór danych posiada atrybut konwencji w skali globalnej<addAttributes>, zmienić wszystkie "UnidataDataset Discovery v1.0 "odniesienia do" ACDD- 1.3 " Jeśli zbiór danych nie posiada atrybutu konwencji w skali globalnej<addAttributes>, a następnie dodać jeden odnoszący się do ACDD- 1.3 Na przykład:

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

  3. Jeśli zbiór danych ma globalnystandard\_name\_vocabularyatrybut, proszę zmienić format wartości na przykład,

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

Jeżeli odniesienie dotyczy starszej wersjiTabela nazwy standardowej CF. to prawdopodobnie dobry pomysł, aby przejść do aktualnej wersji (65, jak to zapisujemy) , ponieważ nowe nazwy standardowe są dodawane do tej tabeli z kolejnymi wersjami, ale stare nazwy standardowe są rzadko depregatowane i nigdy nie usuwane.   4. Chociaż ACDD- 1.0 zawiera atrybuty globalne dlacreator\_name,creator\_email,creator\_url,GenerateDatasetsXmlnie dodał ich automatycznie aż do pewnego czasuERDDAP™v1.50. Jest to ważna informacja:

  • creator\_namepozwala użytkownikom znać / cytować twórcę zbioru danych.
  • creator\_emailpodaje użytkownikom preferowany adres e-mail do kontaktu z twórcą zbioru danych, na przykład jeśli mają pytania dotyczące zbioru danych.
  • creator\_urldaje użytkownikom sposób, aby dowiedzieć się więcej o twórcy.
  • ERDDAP™wykorzystuje wszystkie te informacje przy generowaniu dokumentów metadanych FGDC i ISO 19115-2 / 19139 dla każdego zbioru danych. Dokumenty te są często wykorzystywane przez zewnętrzne służby poszukiwawcze.

Proszę dodać te atrybuty do globalnego zbioru danych<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>

To jest to. Mam nadzieję, że to nie było zbyt trudne.  

Zarr Przewodniczący

Od wersji 2.25ERDDAP™można odczytać lokalne Używanie plików ZarrPliki EDDTableFromNc@@orazEDDGridPliki FromNc@@.

(Od sierpnia 2019 r.) Możemy się łatwo mylić, ale nie jesteśmy jeszcze przekonani, żeZarr Przewodniczący, lub podobne systemy, które rozbijają pliki danych na mniejsze kawałki, są świetne rozwiązania problemuERDDAP™czytanie danych przechowywanych w usługach w chmurze, takich jak Amazon AWS S3. Zarr jest wspaniałą technologią, która wykazała swoją przydatność w różnych sytuacjach, po prostu nie jesteśmy pewni, żeERDDAP+ S3 będzie jedną z tych sytuacji. Przede wszystkim mówimy: zanim pośpieszymy się z wysiłkiem, aby przechowywać wszystkie nasze dane w Zarr, zróbmy kilka testów, aby zobaczyć, czy jest to rzeczywiście lepsze rozwiązanie.

Problemy z dostępem do danych w chmurze są opóźnione (opóźnienie pierwszego uzyskania danych) i dostęp na poziomie plików (Zamiast blokowania dostępu na poziomie) . Zarr rozwiązuje problem dostępu na poziomie plików, ale nie robi nic z opóźnieniem. W porównaniu do pobrania pliku (więc może być odczytywany jako plik lokalny z dostępem do poziomu blokady) , Zarr może nawet zaostrzyć problem latencji, ponieważ, z Zarr, czytanie pliku teraz obejmuje serię kilku wywołań do odczytania różnych części pliku (każdy z własnym opóźnieniem) . Problem latencji można rozwiązać przez równoległe wnioski, ale jest to rozwiązanie wysokiego poziomu, nie zależy od Zarr.

I z Zarrem (jak w relacyjnych bazach danych) , tracimy wygodę posiadania pliku danych jest prosty, pojedynczy plik, który można łatwo zweryfikować integralność, lub zrobić / pobrać kopię.

ERDDAP™ (od v2) posiada system do utrzymywania lokalnego bufora plików ze źródła URL (np. S3) (zob. [<cacheFromUrl > oraz<cacheMaxGB >] (# cachefromurl) ). I nowy.<nThreads >] (# nthreas) powinno zminimalizować problem opóźnienia poprzez równoległe pobieranie danych na wysokim poziomie.<cacheFromUrl > wydaje się pracować bardzo dobrze dla wielu scenariuszy. (Nie jesteśmy pewni, jak korzystne<nThreads > jest bez dalszych badań.) Przyznajemy, że nie wykonaliśmy testów czasowych na przykładzie AWS z dobrym połączeniem sieciowym, ale udało nam się przetestować z różnymi zdalnymi źródłami URL plików. IERDDAPjest<cacheFromUrl > współpracuje z dowolnym typem pliku danych (np.,.nc,.hdf, .csv,.jsonlCSV) , nawet jeśli zewnętrzne sprężone (np.,.gz) , bez żadnych zmian w plikach (np. przepisywanie ich jako kolekcji Zarr) .

Jest prawdopodobne, że różne scenariusze będą sprzyjać różnym rozwiązaniom, np., trzeba tylko przeczytać część pliku raz (Zarr wygra.) , vs. muszą przeczytać wszystkie pliki raz, vs. muszą czytać część lub cały plik wielokrotnie (<cacheFromUrl > wygra).

Przede wszystkim mówimy: zanim pośpieszymy się z wysiłkiem, aby przechowywać wszystkie nasze dane w Zarr, zróbmy kilka testów, aby zobaczyć, czy jest to rzeczywiście lepsze rozwiązanie.

Lista typów zbiorów danych

Jeśli potrzebujesz pomocy przy wyborze odpowiedniego typu zbioru danych, zobaczWybór typu zbioru danych.

Rodzaje zbiorów danych dzielą się na dwie kategorie. (Dlaczego?)

EDDGrid

  • EDDGrid zbiory danych obsługują dane zaprogramowane.
    • WEDDGridzbiory danych, zmienne danych są wielowymiarowymi tablicami danych.
    • Musi istnieć zmienna osi dla każdego wymiaru. Zmienne osiowe MUSI być określone w kolejności, w której zmienne danych ich używają.
    • WEDDGridZestawy danych, wszystkie zmienne danych MUSI używać (udział) wszystkie zmienne osi. (Dlaczego? A jeśli nie?)
    • Wymiary sortowane - W sumieEDDGridZestawy danych, każdy wymiar MUSI być uporządkowany (Wznoszące się lub zstępujące) . Każdy może być nieregularnie rozmieszczony. Nie może być żadnych powiązań. Jest to wymógStandard metadanych CF. Jeśli jakiekolwiek wartości wymiarów nie są uporządkowane, zbiór danych nie zostanie załadowany iERDDAP™zidentyfikuje pierwszą niesortowaną wartość w pliku dziennika, bigParentDirectory / logs / log.txt.

Kilka podklas ma dodatkowe ograniczenia (w szczególności,EDDGridAgregateExistingDimension wymaga, aby zewnętrzny (najbardziej lewy, pierwszy) wymiar był wznoszący.

Niesortowane wartości wymiarów prawie zawsze wskazują na problem z zbiorem danych źródłowych. Najczęściej zdarza się to, gdy niewłaściwy lub niewłaściwy plik jest włączony do agregacji, co prowadzi do niesortowanego wymiaru czasu. Aby rozwiązać ten problem, patrz komunikat błędu wERDDAP™plik log.txt, aby znaleźć naruszającą wartość czasu. Następnie poszukaj w plikach źródłowych, aby znaleźć odpowiedni plik (lub jeden przed lub jeden po) To nie należy do agregacji.

  • Patrz bardziej kompletny opisEDDGridmodel danych.
  • WEDDGridtypy zbioru danych to:
  • WszystkieEDDGridzbiór danych obsługuje ustawienie nTreads, które mówiERDDAP™ile wątków należy użyć w odpowiedzi na zapytanie. PatrznTreatsdokumentację dotyczącą szczegółów.  

Tabela EDD

Szczegółowy opis typów danych

EDDGridFromDap

EDDGridFromDap obsługuje zmienne siatki zDAPserwerów.

  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Możesz zebrać informacje potrzebne do dostrojenia lub tworzenia własnego XML dlaEDDGridZestaw danych FromDap patrząc na pliki DDS i DAS źródłowego zbioru danych w przeglądarce (przez dodanie .das i .dds dosourceUrlna przykład: https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .  
  • EDDGridFromDap może pobrać dane z dowolnej wielowymiarowej zmiennej zDAPserwer danych. (Poprzednio:EDDGridFromDap był ograniczony do zmiennych oznaczonych jako "siatka", ale nie jest to już wymóg.)
     
  • Wymiary sortowane - Wartości dla każdego wymiaru MUSI być posortowane (Wznoszące się lub zstępujące) . Wartości mogą być nieregularnie rozłożone. Nie może być żadnych powiązań. Jest to wymógStandard metadanych CF. Jeśli jakiekolwiek wartości wymiarów nie są uporządkowane, zbiór danych nie zostanie załadowany iERDDAP™zidentyfikuje pierwszą niesortowaną wartość w pliku dziennika, bigParentDirectory / logs / log.txt.

Niesortowane wartości wymiarów prawie zawsze wskazują na problem z zbiorem danych źródłowych. Najczęściej zdarza się to, gdy niewłaściwy lub niewłaściwy plik jest włączony do agregacji, co prowadzi do niesortowanego wymiaru czasu. Aby rozwiązać ten problem, patrz komunikat błędu wERDDAP™plik log.txt, aby znaleźć naruszającą wartość czasu. Następnie poszukaj w plikach źródłowych, aby znaleźć odpowiedni plik (lub jeden przed lub jeden po) To nie należy do agregacji.

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

 

EDDGridTabela FromEDDTable

EDDGridTabela FromEDDTable pozwala konwertować zestaw danych tabeli EDDTable naEDDGridZestaw danych w paski. Pamiętaj o tym.ERDDAP™traktuje zbiory danych jako:Zestawy danych w sieci (PodklasyEDDGrid) lub tabelaryczne zbiory danych (podklasy tabeli EDD) .

  • Normalnie, jeśli masz zapięte dane, po prostu ustawićEDDGridzestaw danych bezpośrednio. Czasami nie jest to możliwe, na przykład, gdy masz dane przechowywane w bazie relacyjnej, któreERDDAP™można uzyskać dostęp tylko za pośrednictwem EDDTableFromDatabase.EDDGridZajęcia FromEDDTable pozwalają na zaradzenie tej sytuacji.  
  • Oczywiście dane zawarte w podstawowym zbiorze danych dotyczących EDDTable muszą być: (zasadniczo) Zachwycone dane, ale w formie tabeli. Na przykład zbiór danych EDDTable może zawierać dane CTD: pomiary prądu na wschód i na północ, na kilku głębokościach, w kilku przypadkach. Ponieważ głębokość jest taka sama w każdym punkcie czasowym,EDDGridFromEDDTable może tworzyć zestaw danych z zawiązanym paskiem o czasie i wymiarze głębokości, które mają dostęp do danych za pośrednictwem podstawowego zbioru danych EDDTable.  
  • GenerateDatasets Xml... Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Możesz zebrać informacje potrzebne do poprawy szkicu.  
  • Atrybuty źródłowe... Podobnie jak w przypadku wszystkich innych typów zbiorów danych,EDDGridFromTable ma pomysł, że istnieją globalny sourceAtrybuty iglobalnyaddAttributes (określone wdatasets.xml) , które są połączone, aby globalny łączny Atrybuty, które są tym, co widzą użytkownicy. Dla globalnych atrybutów źródłowych,EDDGridFromEDDTable wykorzystuje globalną kombinację Atrybuty podstawowego zbioru danych EDDTable. (Jeśli się nad tym zastanowić, to ma to sens.)

Podobnie, dla każdegoaxisVariableidataVariablejestaddAttributes,EDDGridFromEDDTable używa kombinacji zmiennej Atrybuty z podstawowego zbioru danych EDDTable jakoEDDGridFromaEDDTable 's sourceAtrybuty. (Jeśli się nad tym zastanowić, to ma to sens.)

W konsekwencji, jeśli tabela EDDTable ma dobre metadane,EDDGridFromEDDTable często potrzebuje bardzo małoaddAttributesmetadane -- tylko kilka ulepszeń tu i tam.

  • dataVariablezaxisVariables -- Podstawowa tabela EDDTabledataVariableb. AnEDDGridZestaw danych FromEDDTable będzie miał kilkaaxisVariables (stworzony z części tabeli EDDTabledataVariables) i niektóredataVariables (utworzona z pozostałej tabeli EDDTabledataVariables) .GenerateDatasetsXmlbędzie zgadywać, co do którego EDDTabledataVariabledoEDDGridTabela FromEDDTableaxisVariables, ale to tylko zgadywanie. Musisz zmodyfikować wyjście GenerateDatasetsXml, aby określić którydataVariablesaxisVariables i w jakiej kolejności.  

  • axisValues -- Nie ma nic o podstawowej tabeli EDDTable do powiedzeniaEDDGridFromEDDTable możliwe wartościaxisVariables w zawiązanej wersji zbioru danych, więc MUSI podać te informacje dla każdegoaxisVariablepoprzez jeden z tych atrybutów:

    • axisValues -- pozwala określić listę wartości. Na przykład: <att nazwa = "axisValues"type = "doubleList"\ > 2, 2, 5, 3, 3,5, 4</ att > Należy zwrócić uwagę na użycietyp danychplus lista słów. Ponadto, rodzaj listy (na przykład, podwójny) MUSI dopasować dane Rodzaj zmiennej w tabeli EDDTable orazEDDGridZestawy danych FromEDDTable.
    • axisValuesStartStrideStop -- pozwala określić sekwencję regularnie rozmieszczonych wartości poprzez podanie wartości startowych, krokowych i stop. Oto przykład, który jest równoważny z powyższym przykładem axisValues: <att name = "axisValuesStartStrideStop"type = "doubleList"> 2, 0, 5, 4</ att > Ponownie zapamiętaj użycie typu danych z listy. Ponadto, rodzaj listy (na przykład, podwójny) MUSI dopasować dane Rodzaj zmiennej w tabeli EDDTable orazEDDGridZestawy danych FromEDDTable.  

Aktualizacje... Tak jak nie ma sposobu naEDDGridFromEDDTable do określenia wartości osiowych z tabeli EDDTable początkowo, nie ma również wiarygodnego sposobu naEDDGridTabela FromEDDTable w celu określenia z tabeli EDDTable, kiedy wartości osiowe uległy zmianie (zwłaszcza, gdy istnieją nowe wartości dla zmiennej czasu) . Obecnie jedynym rozwiązaniem jest zmiana atrybutu aksvalues wdatasets.xmli przeładować zestaw danych. Na przykład, można napisać skrypt do

  1. Szukajdatasets.xmlzamiast datasetID= " Identyfikator danych " Więc pracujesz z poprawnym zbiorem danych.
  2. Szukajdatasets.xmldla następnego wystąpienia The VariablesSourceName
    Więc pracujesz z poprawną zmienną.
  3. Szukajdatasets.xmldla następnego wystąpienia
        <att name="axisValuesStartStrideStop" type="doubleList">  

Więc znasz pozycję początkową znacznika. 4. Szukajdatasets.xmldla następnego wystąpienia

        </att>  

więc znasz położenie końcowe wartości osi. 5. Zastąp stary start, krok, zatrzymaj wartości nowymi wartościami. 6. KontaktURL flagidla zbioru danych, aby powiedziećERDDAP™Przeładować zestaw danych.

To nie jest idealne, ale działa.  

  • precyzja -- KiedyEDDGridFromEDDTable odpowiada na żądanie użytkownika o dane, przenosi wiersz danych z tabeli odpowiedzi EDDTable doEDDGridsieć reakcji. Aby to zrobić, musi się dowiedzieć, czy wartości "osi" w danym wierszu tabeli odpowiadają pewnej kombinacji wartości osi w siatce. Dla typów danych całkowitych łatwo jest określić, czy dwie wartości są równe. Ale dla pływaków i sobowtórów, pojawia się okropny problem płynących liczb punktównie pasuje dokładnie. (na przykład 0,2 w porównaniu z 0,99 999999999996) . Do (spróbować) Zajmij się tym.EDDGridFromTable pozwala określić atrybut precyzji dla każdego zaxisVariables, która określa całkowitą liczbę cyfr dziesiętnych, które muszą być identyczne.
    • Na przykład:<att nazwa = "precyzja" typ = "int" > 5</ att >
    • Dla różnych typów zmiennych danych istnieją różne wartości domyślne precyzji. Domyślne wartości są zazwyczaj właściwe. Jeśli nie, musisz określić różne wartości.
    • DlaaxisVariablesczas lub czas Zmienne znaczników, domyślnie jest pełna precyzja (dokładna zgodność) .
    • DlaaxisVariables, które są pływakami, domyślna precyzja to 5.
    • DlaaxisVariables, które są podwójne, domyślna precyzja to 9.
    • DlaaxisVariables, które mają typy danych całkowitych,EDDGridFromEDDTable ignoruje atrybut precyzji i zawsze używa pełnej precyzji (dokładna zgodność) .  
    • Uwaga! Przy konwersowaniu kawałka danych tabelarycznych do kawałka zawiązanych danych, jeśliEDDGridFromEDDTable nie może dopasować wartości "osi" EDDTable do jednej z oczekiwanychEDDGridwartości osi FromEDDTable,EDDGridFromEDDTable cicho (brak błędu) wyrzuca dane z tego wiersza tabeli. Na przykład, mogą istnieć inne dane (nie na siatce) w zestawie danych tabeli EDD. (And if stride > 1, to nie jest oczywisteEDDGridFromTable, które wartości osi są wartościami pożądanymi i które są tymi, które należy pominąć z powodu kroku.) Tak więc, jeśli wartości precyzji są zbyt wysokie, użytkownik zobaczy brakujące wartości w odpowiedzi na dane, gdy prawidłowe wartości danych rzeczywiście istnieją.

Odwrotnie, jeśli wartości precyzji są ustawione zbyt nisko, wartości "osi" EDDTable, które nie powinny pasowaćEDDGridWartości osi FromEDDTable będą (mylnie) Pasuje.

Te potencjalne problemy są okropne, ponieważ użytkownik otrzymuje złe dane (lub brakujące wartości) kiedy powinni uzyskać właściwe dane (lub przynajmniej komunikat błędu) . To nie jest wada wEDDGridFromTable.EDDGridFromTable nie może rozwiązać tego problemu. Problem jest nieodłącznie związany z przekształcaniem danych tabelarycznych w dane zaprogramowane (Chyba, że można przyjąć inne założenia, ale nie tutaj.) . To zależy od ciebie,ERDDAP™administrator, Należy sprawdzićEDDGridFromEDDTable dokładnie zapewnienie, że wartości precyzji zostaną ustalone w celu uniknięcia tych potencjalnych problemów.

gapThreshold

  • gapThreshold-- To bardzo niezwykły typ zbioru danych. Ponieważ rodzaje zapytań, które mogą być wykonane do (przez) doEDDGridzbiór danych (związane z przedziałami i krokamiaxisVariables) są bardzo różne od rodzajów zapytań, które mogą być wykonane (przez) zbiór danych EDDTable (tylko związane z zakresami niektórych zmiennych) , wykonanieEDDGridZestawy danych FromEDDTable będą się znacznie różnić w zależności od dokładnego wniosku, który jest składany i prędkości podstawowego zbioru danych EDDTable. Dla wniosków, które mają wartość krokową > 1,EDDGridTabela FromEDDTable może zwrócić się do bazowego tabeli EDDTable o stosunkowo dużą ilość danych (jakby krok = 1) a następnie przesiewać wyniki, zachowując dane z niektórych wierszy i wyrzucając dane z innych. Jeśli ma przesiać wiele danych, aby uzyskać dane, których potrzebuje, żądanie zajmie dłużej.

JeśliEDDGridFromEDDTable może powiedzieć, że będą duże luki (z wierszami niechcianych danych) pomiędzy wierszami z żądanymi danymi,EDDGridFromEDDTable może zdecydować się na złożenie kilku podwniosków do bazowego tabeli EDDTable zamiast jednego dużego żądania, pomijając tym samym niechciane rzędy danych w dużych lukach. Wrażliwość tej decyzji jest kontrolowana przez wartość gapThreshold określoną w<gapThreshold > tag (domyślny = 1000 wierszy danych źródłowych) . Ustawienie gapThreshold na mniejszą liczbę doprowadzi do tworzenia zbioru danych (ogólnie) więcej podwniosków. Ustawienie gapThreshold na większą liczbę doprowadzi do tworzenia zbioru danych (ogólnie) mniej podwniosków.

Jeśli gapThreshold jest zbyt mały,EDDGridFromEDDTable będzie działać wolniej, ponieważ nagłówek wielu wniosków będzie większy niż czas zaoszczędzony przez uzyskanie pewnych nadmiaru danych. Jeśli gapThreshold jest zbyt duży,EDDGridFromEDDTable będzie działać wolniej, ponieważ tak wiele nadmiaru danych zostanie pobranych z tabeli EDDTable, tylko do odrzucenia. (Jak odkrył Goldilocks, środek jest "w prawo".) Nagłówek dla różnych typów zbiorów danych EDDTable różni się znacznie, więc jedynym sposobem, aby poznać rzeczywiste najlepsze ustawienia dla zbioru danych jest poprzez eksperymenty. Ale nie posuniesz się za daleko, trzymając się domyślnego.

Prosty przykład to:EDDGridFromTable z tylko jednymaxisVariable (czas, o wielkości 100000) , jedendataVariable (temperatura) , i domyślny gapThreshold 1000.

  • Jeżeli użytkownik żąda temperatury\[0 & # 58; 100 & # 58; 5000\], krok jest 100 więc rozmiar luki jest 99, co jest mniejsze niż gapThreshold. Więc...EDDGridFromTable złoży tylko jeden wniosek do EDDTable dotyczący wszystkich danych potrzebnych do złożenia wniosku (co odpowiada temperaturze\[0: 5000\]) i wyrzucić wszystkie rzędy danych, których nie potrzebuje.
  • Jeżeli użytkownik żąda temperatury\[0: 2500: 5000\], ten krok jest 2500 więc wielkość luki jest 2499, co jest większe niż gapThreshold. Więc...EDDGridFromTable będzie składać oddzielne wnioski do tabeli EDDTable, które są równoważne z temperaturą\[0\], temperatura\[2500\], temperatura\[5000\].

Obliczanie wielkości luki jest bardziej skomplikowane, gdy jest wiele osi.

Na każde życzenie użytkownika,EDDGridFromEDDTable drukuje wiadomości diagnostyczne związane z tym wlog.txtplik.

  • Jeśli [<logLevel >] (# loglevel) wdatasets.xmljest ustawiony na info, to drukuje wiadomość jak \ * nOuterAxes = 1 z 4 nOuterRequests = 22 Jeżeli nOuterAxes = 0, gapThreshold nie został przekroczony i tylko jeden wniosek zostanie złożony do EDDTable. Jeżeli nOuterAxes > 0, gapThreshold został przekroczony i nOuterRequestions zostanie złożony do tabeli EDDTable, co odpowiada każdej wymaganej kombinacji najbardziej lewego nOuterAxes. Na przykład, jeśli zbiór danych ma 4axisVariables orazdataVariables like Eastward\[czas\]\[szerokość geograficzna\]\[długość geograficzna\]\[głębokość\], the left most (pierwszy) zmienna osi to czas.
  • Jeśli<logLevel > wdatasets.xmljest ustawiony na wszystkie, dodatkowe informacje są zapisywane do pliku log.txt.  

EDDGridszkielet FromEDDTable 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 * ZERDDAP

EDDGridFromErddap Uchwyty uchwytów danych ze zdalnegoERDDAP™serwer. EDDTableFromErddap obsługuje dane tabelaryczne ze zdalnegoERDDAP™serwer.

  • EDDGridFromErddap i EDDTableFromErddap zachowują się inaczej niż wszystkie inne rodzaje zbiorów danych wERDDAP.
    • Podobnie jak inne rodzaje zbiorów danych, zbiory te otrzymują informacje o zbiorze danych ze źródła i przechowują je w pamięci.
    • Podobnie jak inne rodzaje zbiorów danych, kiedyERDDAP™wyszukiwanie zbiorów danych, wyświetlanie formularza dostępu do danych ( datasetID .html) lub wyświetla formularz Make A Graph ( datasetID .graph) ,ERDDAP™wykorzystuje informacje o zbiorze danych, który jest w pamięci.
    • EDDGridFromErddap i EDDTable FromErddap są podstawą dlasieci / klastry / federacjezERDDAPs, które skutecznie dystrybuują wykorzystanie procesora (głównie do tworzenia map) , wykorzystanie pamięci, przechowywanie danych i wykorzystanie przepustowości dużego centrum danych.

Przekierować

  • W przeciwieństwie do innych typów zbiorów danych, kiedyERDDAP™otrzymuje wniosek o dane lub obrazy z tych zbiorów danych,ERDDAP przekierowaniewniosek do pilotaERDDAP™serwer. Wynik jest następujący:
    • To bardzo skuteczne. (CPU, pamięć i szerokość pasma) , ponieważ inaczej
      1. SkładnikERDDAP™musi wysłać wniosek do innegoERDDAP™ (który wymaga czasu) .
      2. DrugiERDDAP™musi uzyskać dane, przeformatować je i przesłać dane do kompozytuERDDAP.
      3. SkładnikERDDAP™musi otrzymać dane (z wykorzystaniem przepustowości) , przeformatować go (przy użyciu procesora i pamięci) oraz przekazują dane użytkownikowi (z wykorzystaniem przepustowości) . Przekierowując wniosek i zezwalając drugiemuERDDAP™wysłać odpowiedź bezpośrednio do użytkownika, kompozytERDDAP™zasadniczo nie wydaje czasu procesora, pamięci lub przepustowości na żądanie.
    • Przekierowanie jest przejrzyste dla użytkownika niezależnie od oprogramowania klienta (przeglądarka lub inne oprogramowanie lub narzędzie linii poleceń) .
  • Możesz powiedziećERDDAP™nie przekierować żadnych żądań użytkownika przez ustawienie<przekierowanie > false</ przekierowanie >, ale to neguje większość zalet... (w szczególności, rozproszenie ładunku na przednim końcuERDDAP™do pilota / oparciaERDDAP) .    

Subskrypcje

Zazwyczaj, gdyEDDGridFromErddap i EDDTable FromErddap (do) załadowany na TwójERDDAP, próbują dodać subskrypcję do zdalnego zbioru danych za pośrednictwem zdalnegoERDDAPsystem subskrypcji poczty elektronicznej / URL. W ten sposób, kiedy zdalny zbiór danych się zmienia, zdalnyERDDAP™kontaktsetDataset URL flagiw sprawieERDDAP™tak, że lokalny zestaw danych jest przeładowany ASAP i tak, że lokalny zestaw danych jest zawsze idealnie up- to- date i naśladuje zdalny zestaw danych. Za pierwszym razem powinieneś dostać e-mail z prośbą o potwierdzenie subskrypcji. Jednak, jeśli lokalneERDDAP™nie można wysłać e-maila lub jeśli pilotERDDAPe-mail / URL system subskrypcji nie jest aktywny, należy wysłać e-mail do pilotaERDDAP™administrator i poprosić, aby s / he ręcznie dodać [<onChange >] (# onchange) ...</ onChange > tags do wszystkich odpowiednich zbiorów danych do wywołania zestawu danychsetDataset URL flagi. PatrzERDDAP™raport dzienny dla listy setDataset Flaga URL, ale po prostu wysłać te dlaEDDGridZestawy danych FromErddap i EDDTableFromErddap na pilotaERDDAP™administrator.

Czy to nie działa? Czy lokalne zbiory danych nie są synchronizowane ze zdalnymi zbiorami danych? Kilka rzeczy musi działać prawidłowo, aby system ten działał tak, aby zbiory danych pozostawały aktualne. Sprawdź każdą z tych rzeczy w kolejności:

  1. TwójERDDAP™musi być w stanie wysyłać e-maile. Zobacz ustawienia email w ustawieniach setup.xml.
  2. Ogólnie (ale nie zawsze) -ERDDAPjest<BaseUrl > oraz<baseHttpsUrl > nie może mieć numeru portu (np.: 8080,: 8443) . Jeśli tak, należy użyćproksypassdo usunięcia portu z Url.
  3. W twoich ustawieniach xml,<subscribeToRemoteErddapDataset > musi być ustawiony na true.
  4. Kiedy twoja miejscowa choroba... Zestaw danych FromErddap jest przeładowany, powinien wysłać żądanie do pilotaERDDAP™aby zapisać się do zdalnego zbioru danych. Sprawdź w log.txt, czy to się dzieje.
  5. Należy uzyskać e-mail z prośbą o potwierdzenie wniosku o subskrypcję.
  6. Musisz kliknąć na link w tej wiadomości e-mail, aby potwierdzić wniosek o subskrypcję.
  7. PilotERDDAP™powinien powiedzieć, że zatwierdzenie było skuteczne. W każdej chwili możesz poprosić o e-mail z pilotaERDDAP™z listą oczekujących i ważnych subskrypcji. Patrz formularz RemoteErddapBase Url / erddap / subskrypcje / list.html.
  8. Gdy zdalny zbiór danych się zmienia (np. otrzymuje dodatkowe dane) , pilotERDDAP™powinien spróbować skontaktować się z flagrafemERDDAP. Nie możesz tego sprawdzić, ale możesz zapytać administratora pilota.ERDDAP™żeby to sprawdzić.
  9. TwójERDDAP™powinien otrzymać prośbę o ustawienie tego flagURL. Sprawdź w log.txt dla "setDatasetFlag.txt?" wniosek (s) i sprawdzić, czy istnieje komunikat błędu związany z żądaniami.
  10. TwójERDDAP™powinien następnie spróbować ponownie załadować ten zestaw danych (może nie natychmiast, ale jak najszybciej) .  

Up- to- date max (czas) ?

EDDGrid/ Zestawy danych TableFromErddap zmieniają przechowywane informacje o każdym zbiorze danych źródłowych tylko wtedy, gdy zbiór danych źródłowych jest"reload"i jakaś zmiana metadanych (np. zmienna czasuactual\_range) w ten sposób generuje powiadomienie o subskrypcji. Jeśli zbiór danych źródłowych zawiera dane, które często się zmieniają (na przykład, nowe dane co sekundę) i wykorzystuje"update"system do zauważenia częstych zmian w danych podstawowych,EDDGrid/ TableFromErddap nie będzie informowany o tych częstych zmian do następnego zbioru danych "przeładować", więcEDDGrid/ TableFromErddap nie będzie idealnie / na randce. Możesz zminimalizować ten problem zmieniając zbiór danych źródłowych<przeładowanie EveryNMinutes > do mniejszej wartości (60?) tak, że istnieje więcej powiadomień subskrypcji do powiadomieniaEDDGrid/ TableFromErddap aktualizuje informacje o zbiorze danych źródłowych.

Lub, jeśli Twój system zarządzania danymi wie, kiedy zbiór danych źródłowych posiada nowe dane (np. za pomocą skryptu kopiującego plik danych na miejsce) i jeśli to nie jest zbyt częste (np. co 5 minut lub rzadziej) Jest lepsze rozwiązanie:

  1. Nie używaj<updateEveryNMillis >, aby utrzymać zbiór danych źródłowych na bieżąco.
  2. Ustaw zbiór danych źródłowych<przeładowanie EveryNMinutes > do większej liczby (1440?) .
  3. Niech skrypt skontaktuje się z zbiorem danych źródłowychURL flagizaraz po skopiowaniu nowego pliku danych.  

Doprowadzi to do perfekcyjnego uaktualnienia zbioru danych źródłowych i spowoduje wygenerowanie powiadomienia o subskrypcji, które zostanie wysłane doEDDGrid/ TableFromErddap dataset. To poprowadzi doEDDGrid/ TableFromErddap dataset to be perfectly up- to- date (w ciągu 5 sekund od dodania nowych danych) . I wszystko to będzie zrobione efektywnie. (bez zbędnych przeładowań zbioru danych) .  

Nie.addAttributes,axisVariablelubdataVariable

W przeciwieństwie do innych rodzajów zbiorów danych, EDDTableFromErddap iEDDGridZestawy danych FromErddap nie pozwalają na globalny<addAttributes>,<axisVariable& gt; lub<dataVariable& gt; sekcjedatasets.xmldla tego zbioru danych. Problem polega na tym, że dopuszczenie tych substancji prowadziłoby do niespójności:

  1. Powiedzmy, że było dozwolone i dodałeś nowy atrybut globalny.
  2. Kiedy użytkownik pytaERDDAP™dla atrybutów globalnych pojawi się nowy atrybut.
  3. Ale kiedy użytkownik pytaERDDAP™dla pliku danych,ERDDAP™przekierowuje wniosek do źródłaERDDAP. ToERDDAP™jest nieświadomy nowego atrybutu. Więc jeśli tworzy plik danych z metadanych, np. a.ncplik, metadane nie będą miały nowego atrybutu.

Są dwie grupy robocze:

  1. Przekonaj administratora źródłaERDDAP™aby dokonać zmian, które chcesz do metadanych.
  2. Zamiast EDDTableFromErddap należy użyćEDDTableFromDapSequence. Albo zamiastEDDGridFromErddap, useEDDGridFromDap. Te typy EDD pozwalają na skuteczne podłączenie do zbioru danych na pilocieERDDAP™ (ale bez przekierowania wniosków o dane) i pozwalają na włączenie globalny<addAttributes>,<axisVariable& gt; lub<dataVariable& gt; sekcjedatasets.xml. Inna różnica: będziesz musiał ręcznie subskrybować zdalny zestaw danych, tak aby zestaw danych na TwoimERDDAP™zostanie powiadomiony (przezURL flagi) gdy są zmiany w zdalnym zbiorze danych. W ten sposób tworzysz nowy zestaw danych, zamiast łączyć się ze zdalnym zbiorem danych.  

Pozostałe uwagi

  • Ze względów bezpieczeństwa,EDDGridFromErddap i EDDTable FromErddap nie wspiera [<accessibleTo >] (# accessibleto) tag i nie mogą być używane z zdalnych zbiorów danych, które wymagają logowania (ponieważ używają [<accessibleTo >] (# accessibleto) ).. PatrzERDDAPjestsystem bezpieczeństwaza ograniczenie dostępu do niektórych zbiorów danych do niektórych użytkowników.  
  • Począwszy odERDDAP™v2.10,EDDGridFromErddap i EDDTableFromErddap wspierają [<accessibleViaFiles >] (# accessibleviafiles) tag. W przeciwieństwie do innych typów zbiorów danych, domyślny jest true, ale pliki zbioru danych będą accessibleViaFiles tylko wtedy, gdy zbiór danych źródłowych ma<accessibleViaFiles > ustawione na true.  
  • Można użyćGenerateDatasets Program Xmldodatasets.xmlkawałek dla tego typu zbioru danych. Ale można zrobić te rodzaje zbiorów danych łatwo ręcznie.  

EDDGridszkielet FromErddap XML

  • EDDGridszkielet FromErddap Zestaw danych XML jest bardzo prosty, ponieważ celem jest tylko naśladowanie zdalnego zestawu danych, który jest już odpowiedni do stosowania wERDDAP:

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

szkielet EDDTableFromErddap XML

  • Szkielet XML dla zbioru danych EDDTableFromErddap jest bardzo prosty, ponieważ celem jest tylko naśladowanie zdalnego zbioru danych, który jest już odpowiedni do użycia wERDDAP:

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

EDDGridFromEtopo

EDDGridFromEtopo tylko służyETOPO1 Global 1- Minute Gridded Elevation Data Set (Ice Surface, grid registered, binary, 2byte int: etopo1\ _ ice\ _ g\ _ i2.zip) które są dystrybuowane zERDDAP.

  • Tylko dwadatasetIDs są obsługiwane dlaEDDGridFromEtopo, aby uzyskać dostęp do danych o wartościach długości od -180 do 180, lub o wartościach długości od 0 do 360.
  • Nigdy nie ma żadnych podznaczników, ponieważ dane są już opisane wERDDAP.
  • Więc dwie opcje dlaEDDGridZestawy danych FromEtopo są (dosłownie) :
      <!-- 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" />

EDDGridPliki FromFiles

EDDGridPliki FromFiles jest superklasą wszystkichEDDGridZ zajęć z archiwum. Nie możesz użyćEDDGridFromFiles bezpośrednio. Zamiast tego, użyj podklasyEDDGridFromFiles do obsługi określonego typu pliku:

Obecnie nie są obsługiwane żadne inne typy plików. Ale zazwyczaj stosunkowo łatwo jest dodać wsparcie dla innych typów plików. Skontaktuj się z nami, jeśli masz prośbę. Lub, jeśli Twoje dane są w starym formacie pliku, od którego chciałbyś się odsunąć, zalecamy konwersję plików doNetCDFv3.ncpliki.NetCDFjest szeroko wspieranym, formacie binarnym, umożliwia szybki losowy dostęp do danych i jest już obsługiwany przezERDDAP.

Z danych plików

Poniższe informacje dotyczą wszystkich podklasEDDGridFromFiles.

Agregacja istniejącego wymiaru

Wszystkie zmianyEDDGridFromFiles może agregować dane z plików lokalnych, gdzie każdy plik ma 1 (lub więcej) różne wartości dla lewej (pierwszy) wymiar, zazwyczaj\[czas\], które zostaną zagregowane. Na przykład, wymiary mogą być\[czas\]\[wysokość\]\[szerokość geograficzna\]\[długość geograficzna\], i pliki mogą mieć dane dla jednego (lub kilka) wartość czasu (s) w pliku. Wynikający z tego zbiór danych pojawia się tak, jakby wszystkie dane pliku zostały połączone. Wielkimi zaletami agregacji są:

  • Rozmiar zagregowanego zbioru danych może być znacznie większy niż pojedynczy plik może być wygodny (- 2GB) .
  • Dla danych bliskiego-real- time, łatwo jest dodać nowy plik z najnowszym kawałkiem danych. Nie musisz zmieniać całego zbioru danych.

Wymogi dotyczące agregacji są następujące:

  • Lokalne pliki nie muszą mieć tego samego.dataVariables (zgodnie z definicją w zbiorze danychdatasets.xml) . Zestaw danych będzie miałdataVariablesdatasets.xml. Jeśli dany plik nie ma podanego plikudataVariable,ERDDAP™w razie potrzeby doda brakujące wartości.
  • WszystkiedataVariableMUSI używać tego samegoaxisVariables / wymiary (zgodnie z definicją w zbiorze danychdatasets.xml) . Pliki zostaną zagregowane w oparciu o pierwsze (left-most) wymiar, sortowany w kolejności rosnącej.
  • Każdy plik MOŻE posiadać dane dla jednej lub więcej wartości pierwszego wymiaru, ale nie może być żadnego pokrywania się pomiędzy plikami. Jeżeli plik ma więcej niż jedną wartość dla pierwszego wymiaru, wartości MUSI być sortowane w kolejności rosnącej, bez powiązań.
  • Wszystkie pliki MUSI mieć dokładnie te same wartości dla wszystkich innych wymiarów. Precyzja badania jest określona przezmatchAxisNDigits.
  • Wszystkie pliki MUSI mieć dokładnie to samojednostkimetadane dla wszystkichaxisVariables orazdataVariableb. Jeśli jest to problem, może być w stanie użyćNcMLlubNCOby rozwiązać problem.  
Agregacja poprzez nazwy plików lub globalne metadane

Wszystkie zmianyEDDGridFromFiles może również agregować grupę plików dodając nowy lewy (pierwszy) wymiar, zazwyczaj czas, w oparciu o wartość uzyskaną z każdej nazwy pliku lub z wartości atrybutu globalnego, który znajduje się w każdym pliku. Na przykład nazwa pliku może zawierać wartość czasu dla danych w pliku.ERDDAP™stworzy nowy wymiar czasu.

W przeciwieństwie do podobnej funkcji w THREDDS,ERDDAP™zawsze tworzyaxisVariablez wartościami liczbowymi (zgodnie z wymogami CF) , nigdy wartości String (które nie są dozwolone przez CF) . Poza tym,ERDDAP™sortuje pliki w agregacji na podstawie liczbyaxisVariablewartość przypisana do każdego pliku, tak aby zmienna osi zawsze miała sortowane wartości zgodnie z wymaganiami CF. Podejście THREDDS polegające na tworzeniu typu leksykograficznego w oparciu o nazwy plików prowadzi do agregacji, gdzie wartości osi nie są sortowane (która nie jest dozwolona przez CF) gdy nazwy plików sortują się inaczej niż nazwyaxisVariablewartości.

Aby utworzyć jedną z tych agregacji wERDDAP™, będzie zdefiniować nowy left most (pierwszy) axisVariableze specjalnym, pseudo<sourceName>, co mówiERDDAP™gdzie i jak znaleźć wartość dla nowego wymiaru z każdego pliku.

  • Format pseudosourceNamektóry otrzymuje wartość z nazwy pliku (tylko filename.ext) en \\\ nazwa pliku, dane Rodzaj , extractRegex , captureGroupNumber
  • Format pseudosourceNamektóra otrzymuje wartość z bezwzględnej nazwy ścieżki pliku \\\ pathName, dane Rodzaj , extractRegex , captureGroupNumber \[W tym celu nazwa ścieżki zawsze używa'/'jako znak separatora katalogu, nigdy '\'.\]
  • Format pseudosourceNamektóry otrzymuje wartość z atrybutu globalnego jest \\\ globalny: atrybut Nazwa , dane Rodzaj , extractRegex , captureGroupNumber
  • Ten pseudosourceNameopcja działa inaczej niż pozostałe: zamiast tworzenia nowej lewej (pierwszy) axisVariable, to zastępuje wartość bieżącegoaxisVariableo wartości pobranej z nazwy pliku (tylko filename.ext) . Format \\\ zastąpić FromFileName, dane Rodzaj , extractRegex , captureGroupNumber  

Opisy części, które musisz dostarczyć są następujące:

  • atrybut Nazwa -- nazwa atrybutu globalnego, który jest w każdym pliku i który zawiera wartość wymiarów.
  • dane Rodzaj -- Określa typ danych, który będzie używany do przechowywania wartości. Patrz standardowa listadane RodzajeżeERDDAP™obsługuje, z wyjątkiem tego, że String nie jest tutaj dozwolone, ponieważ zmienne osi wERDDAP™nie mogą być zmiennymi String.

Istnieje dodatkowy pseudo dataType, timeFormat = ciąg Format czasu , który mówiERDDAP™że wartością jest znacznik czasu Stringjednostki odpowiednie do czasów strun. W większości przypadków, stringTimeFormat, którego potrzebujesz będzie zmiennością jednego z tych formatów:

  • yyyy-MM-ddNIC 'HH: mm: ss.SSZ -- które ISO 8601: 2004 (E) format daty. Może być potrzebna skrócona wersja, np.:yyyy-MM-ddNIE 'HH: mm: ss lubyyyy-MM-dd.
  • yyyMddHHmms.SSS - co jest zwarta wersja formatu daty ISO 8601. Może być potrzebna skrócona wersja tego, np. yyyyMddHHmmss lub yyyyMMdd.
  • M / d / rrrr H: mm: ss.SSS -- czyli format daty cięcia w USA. Może być potrzebna skrócona wersja, np. M / d / rrrr.
  • yyyyDDHHmmssSSS -- który jest rokiem plus zero- wyściełanym dniem roku (np., 001 = 1 stycznia, 365 = 31 grudnia w roku bez skoku; jest to czasami błędnie nazywane datą Juliana) . Możesz potrzebować skróconej wersji tego, np. yyyydDD.

Jeśli używasz tego pseudo dataType, dodaj to do nowej zmiennej<addAttributes>:

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

Jeśli chcesz przesunąć wszystkie wartości czasu, przesuń wartość czasu w jednostkach, np., 1970- 01- 01T12: 00: 00Z.

  • extractRegex -- To jest...wyrażenie regularne (tutorial) która obejmuje grupę przechwytującą (w nawiasach) który opisuje sposób wyodrębnienia wartości z nazwy pliku lub globalnej wartości atrybutu. Na przykład, biorąc pod uwagę nazwę pliku jak S19980011998031.L3b\ _ MO\ _ CHL.nc, Catch group # 1 ",\dtutorial", w wyrażeniu regularnym S (\dtutorial) \dtutorial\ .L3b.\ * przechwyci pierwsze 7 cyfr po 'S': 1998001.
  • captureGroupNumber -- To jest numer grupy przechwytującej (w ramach pary nawiasów) w wyrażeniu regularnym zawierającym informacje o zainteresowaniu. Zazwyczaj jest to 1, pierwsza grupa przechwytująca. Czasami trzeba użyć grup przechwytywania do innych celów w regex, więc wtedy ważny numer grupy przechwytywania będzie 2 (druga grupa przechwytująca) lub 3 (trzeci) itd.

Pełny przykładaxisVariablektóry sprawia, że zagregowany zbiór danych z nową osią czasu, który otrzymuje wartości czasu z nazwy pliku jest

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

Kiedy używasz "timeFormat =" dane pseudo TypERDDAP™doda 2 atrybuty doaxisVariabletak, że wydają się pochodzić ze źródła:

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

Więc w tym przypadku,ERDDAP™stworzy nową oś o nazwie"time"z podwójnymi wartościami (sekund od 1970- 01-01T00: 00: 00Z) przez pobranie 7 cyfr po 'S' i przed. "L3m" w nazwie pliku i interpretowanie ich jako wartości czasowe sformatowane jako yyyydDD.

Możesz nadpisać domyślny czas bazowy (1970- 01- 01T00: 00: 00Z) przez dodanieaddAttributionktóry określa inny atrybut jednostek o innym czasie bazowym. Powszechną sytuacją jest: istnieją grupy plików danych, każda z 1-dniowym składnikiem zbioru danych satelitarnych, gdzie chcesz, aby wartość czasowa była południe dnia wymienionego w nazwie pliku (w centrum czasu każdego dnia) i chce zmiennąlong\_nameby być "Centron Time". Przykładem jest:

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

Uwaga godziny = 12 w czasie bazowym, co dodaje 12 godzin w stosunku do pierwotnego czasu bazowego 1970- 01-01T00: 00: 00Z.

Pełny przykładaxisVariablektóry tworzy zagregowany zbiór danych z nową osią "run" (z wartościami końcowymi) który otrzymuje wartości run z atrybutu "runid" w każdym pliku (z wartościami takimi jak "r17\ _ global", gdzie 17 jest liczbą uruchomioną) en

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

Należy zwrócić uwagę na użycie grupy przechwytywania nr 2 do wychwytywania cyfr, które występują po 'r' lub 's', a przed '\ _ global'. Ten przykład pokazuje również jak dodać dodatkowe atrybuty (np.,ioos\_categoryi jednostki) do zmiennej osi.  

Zewnętrznie skompresowane pliki

  • Zestawy danych, które są podzbioramiEDDGridPliki FromFiles i EDDTable FromFiles może obsługiwać dane bezpośrednio z zewnętrznych plików danych skompresowanych, w tym.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2i pliki .Z.  

  • To działa zaskakująco dobrze!
    W większości przypadków spowolnienie związane z dekompresją małych i średnich plików danych jest niewielkie. Jeśli potrzebujesz zachować przestrzeń dyskową, zdecydowanie zachęcamy do korzystania z tej funkcji, szczególnie w przypadku starszych plików, które są rzadko dostępne.  

  • Oszczędzaj pieniądze!
    Jest to jedna z niewielu funkcji wERDDAP™które daje szansę zaoszczędzić dużo pieniędzy (chociaż kosztem nieznacznie zmniejszonych wyników) . Jeżeli współczynnik kompresji jest np. 6: 1 (Czasami będzie dużo wyżej.) , wtedy pliki danych zbioru danych będą potrzebować tylko 1 / 6 miejsca na dysku. Wtedy być może uda Ci się z 1 RAID (o danym rozmiarze) zamiast 6 RAID (o tej samej wielkości) . To ogromne oszczędności. Miejmy nadzieję, że zdolność do kompresji niektórych plików w kolekcji (Starszych?) I nie ściskaj innych (Nowsze?) i żeby to zmienić w każdej chwili, zminimalizujmy minusy kompresji niektórych plików (wolniejszy dostęp) . A jeśli wybór jest między przechowywaniem plików na taśmie (i dostępne tylko na żądanie, po opóźnieniu) vs przechowywanie ich skompresowanych na RAID (i dostępne za pośrednictwemERDDAP) , następnie istnieje ogromna zaleta w użyciu kompresji tak, że użytkownicy stają się interaktywni i (stosunkowo) szybki dostęp do danych. A jeśli to może zapisać od zakupu dodatkowego RAID, ta funkcja może zaoszczędzić około 30,000 dolarów.  

  • Dla wszystkichEDDGridPodklasy plików FromFiles, jeśli pliki danych mają rozszerzenie wskazujące, że są one zewnętrznie skompresowane (obecnie:.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2lub .Z) ,ERDDAP™zdekompresuje pliki do katalogu pamięci podręcznej zbioru danych, gdy je przeczyta (jeśli nie są już w schowku) . To samo dotyczy pliku binarnego (np.,.nc) podklasy plików EDDTableFromFiles.  

  • Dla podklas plików EDDTableFromFiles dla plików niebinarnych (np. .csv) , pliki danych z rozszerzeniem wskazującym, że są one zewnętrznie skompresowane pliki będą dekompresowane na -the- fly jak plik jest odczytywany.  

  • WYMAGANIE: Jeżeli typ pliku skompresowanego zewnętrznie (np.,.tgzlub.zip) obsługuje więcej niż 1 plik wewnątrz pliku skompresowanego, plik skompresowany musi zawierać tylko 1 plik.  

  • WYMAGANIE: Funkcja ta zakłada, że zawartość plików skompresowanych zewnętrznie nie zmienia się, tak aby można było ponownie użyć pliku zdekompresowanego. Jeśli niektóre lub wszystkie pliki danych są czasami zmieniane, nie kompresujcie tych plików. Jest to zgodne z powszechnym używaniem, ponieważ ludzie zwykle nie kompresują plików, które czasami potrzebują zmienić.  

  • <fileNameRegex > Aby to zadziałało, zestaw danych<fileNameRegex > musi pasować do nazw skompresowanych plików. Oczywiście, regexes like.\będzie pasować do wszystkich nazw plików. Jeśli podasz określony typ pliku, np..\\.nc, następnie trzeba zmodyfikować regex, aby uwzględnić również rozszerzenie kompresji, np..\ \.nc\.gz(jeśli wszystkie pliki będą coś.nc.gzplików).  

  • Jest w porządku, jeśli zestaw danych zawiera mieszankę skompresowanych i nie skompresowanych plików. Może to być przydatne, jeśli uważasz, że niektóre pliki (np. starsze pliki) będzie stosowany rzadziej i dlatego byłoby przydatne, aby zapisać przestrzeń dyskową przez kompresję. Aby to zadziałało,<fileNameRegex > musi pasować do nazw plików skompresowanych, a nie skompresowanych.\lub.\\.nc (|\.gz) (jeżeli grupa przechwytująca na końcu tej listy określa, że.gzjest opcjonalne.  

  • Jest w porządku, jeśli kompresji lub dekompresji konkretnych plików w kolekcji w dowolnym czasie. Jeśli zestaw danych nie jest używany [<updateEveryNMillis >] (# updateeverynmillis) , ustawić zestaw danychbanderapowiedziećERDDAP™aby ponownie załadować zestaw danych i tym samym zauważyć zmiany. Co ciekawe, można użyć różnych algorytmów kompresji i ustawień dla różnych plików w tym samym zbiorze danych (np.,.bz2dla rzadko używanych plików,.gzdla nieczęsto używanych plików, a nie kompresji dla często używanych plików) , po prostu upewnij się, że regex obsługuje wszystkie rozszerzenia plików, które są w użyciu, np..\ *\.nc (|\.gz|\.bz2) .  

  • Oczywiście współczynniki kompresji i prędkości dla różnych algorytmów kompresji różnią się w zależności od pliku źródłowego i ustawień (np. poziom kompresji) . Jeśli chcesz zoptymalizować ten system dla swoich plików, zrób test różnych metod kompresji z plikami i z szeregiem ustawień kompresji. Jeśli chcesz niezawodnie dobry (niekoniecznie najlepsze) konfiguracja, będziemy nieco polecićgzip (.gz) .gzipnie tworzy najmniejszego skompresowanego pliku (Jest dość blisko.) , ale kompresuje plik bardzo szybko i (doERDDAP™użytkownicy) dekompresuje plik bardzo szybko. Plus,gzipoprogramowanie jest standardowe z każdą instalacją Linux i Mac OS i jest łatwo dostępne dla Windows za pomocą darmowych narzędzi, takich jak 7Zip i Linux add- on jak Git Bash. Na przykład, kompresji pliku źródłowego do.gzwersja pliku (ta sama nazwa pliku, ale z.gzzałączone) , (w Linux, Mac OS i Git Bash)
    gzip sourceName
    Aby zdekompresować.gzplik do oryginału, użyj gunzip sourceName.gz
    Aby skompresować każdy z plików źródłowych w katalogu i jego podkatalogach, rekursywnie, użyj gzip- directorName
    Do dekompresji każdego z.gzpliki w katalogu i jego podkatalogach, rekursywnie, używać gunzip -r directorName
     

  • OSTRZEŻENIE: Nie kompresować zewnętrznie (gzip) pliki, które są już wewnętrznie skompresowane! Wiele plików posiada już wewnętrznie skompresowane dane. Jeśligzipte pliki, wynikające z nich pliki nie będą znacznie mniejsze (<5%) orazERDDAP™będzie tracić czas na ich dekompresję, kiedy trzeba je przeczytać. Na przykład:

    • pliki danych: np..nc4, oraz.hdf5 plików: Niektóre pliki używają wewnętrznej kompresji, inne nie. Jak powiedzieć: skompresowane zmienne mają atrybuty "\ _ ChunkSize". Również, jeśli grupa zawiązanych.nclub.hdfpliki są różnej wielkości, prawdopodobnie są wewnętrznie skompresowane. Jeśli wszystkie są tego samego rozmiaru, nie są one wewnętrznie skompresowane.

    • pliki obrazkowe: np., .gif, .jpg i .png

    • pliki audio: np., .mp3 i .ogg.

    • pliki wideo: np. .mp4, .ogv i .webm.

Jeden niefortunny przypadek: pliki audio .wav są ogromne i nie wewnętrznie skompresowane. Byłoby miło, gdyby kompres (gzip) im, ale generalnie nie powinieneś, bo jeśli to zrobisz, użytkownicy nie będą mogli odtwarzać skompresowanych plików w swojej przeglądarce.  

  • Przypadek badania: kompresja (zgzip) zestaw danych z uchwytem 1523.ncpliki.

    • Dane w plikach źródłowych były słabe. (wiele brakujących wartości) .
    • Całkowita powierzchnia dysku wzrosła z 57 GB przed kompresją do 7 GB po.
    • Wniosek o wiele danych z 1 punktu czasowego jest<1 s przed i po kompresji.
    • Wniosek o 1 punkt danych dla 365 punktów czasowych (najgorsza sytuacja) od 4 s do 71 s.  

Dla mnie jest to rozsądny handel dla każdego zbioru danych, a z pewnością dla zbiorów danych, które są rzadko używane.  

  • Wewnętrzne kontra zewnętrzne kompresje... W porównaniu do wewnętrznej kompresji plików oferowanych przez.nc4 oraz.hdf5 plików,ERDDAPPodejście do zewnętrznych skompresowanych plików binarnych ma zalety i wady. Wadą jest: przez jeden raz odczytywany z małej części jednego pliku, kompresja wewnętrzna jest lepsza, ponieważEDDGridFromFiles musi tylko zdekompresować kilka części (s) pliku, nie całego pliku. Ale...ERDDAPpodejście ma pewne zalety:

    • ERDDAP™obsługuje kompresję wszystkich typów plików danych (binarne i niebinarne, np.,.nc3 i .csv) nie tylko.nc4 oraz.hdf4.
    • Jeśli większość pliku musi być przeczytana więcej niż raz w krótkim czasie, to oszczędza czas na dekompresję pliku raz i czytanie go wiele razy. To się zdarza wERDDAP™gdy użytkownik używa Make- A- Graph dla zbioru danych i wprowadza serię drobnych zmian do wykresu.
    • Możliwość posiadania skompresowanych plików, a nie skompresowanych plików w tej samej kolekcji, pozwala na większą kontrolę nad tym, które pliki są kompresowane, a które nie. I ta dodana kontrola przychodzi bez modyfikacji pliku źródłowego (ponieważ można skompresować plik np.,.gzi zdekompresować, aby uzyskać oryginalny plik) .
    • Możliwość zmiany w dowolnym czasie czy dany plik jest skompresowany i jak jest skompresowany (różne algorytmy i ustawienia) daje większą kontrolę nad wydajnością systemu. I można łatwo odzyskać oryginalny nieskompresowany plik w każdej chwili.

Chociaż żadne podejście nie jest zwycięzcą we wszystkich sytuacjach, jasne jest, żeERDDAPzdolność obsługi danych z plików skompresowanych zewnętrznie sprawia, że kompresja zewnętrzna jest rozsądną alternatywą dla wewnętrznej kompresji oferowanej przez.nc4 oraz.hdf5. Jest to istotne, biorąc pod uwagę, że wewnętrzna kompresja jest jednym z głównych powodów, dla których ludzie wybierają użycie.nc4 oraz.hdf5.  

Dekompresja Cache

ERDDAP™sprawia, że zdekompresowana wersja dowolnego skompresowanego binarnego (np.,.nc) plik danych, gdy wymaga odczytu pliku. Dekompresowane pliki są przechowywane w katalogu zbioru danych bigParentDirectory / dekompresja. Zdekompresowane pliki, które nie były ostatnio używane, zostaną usunięte, aby uwolnić przestrzeń, gdy łączny rozmiar pliku jest > 10GB. Możesz to zmienić przez ustawienie<dekompressedCacheMaxGB > (domyślny = 10) w zbiorach danych Xml.xml, np.,

        <decompressedCacheMaxGB>40</decompressedCacheMaxGB>  

Ponadto, zdekompresowane pliki, które nie były używane w ciągu ostatnich 15 minut zostaną usunięte na początku każdego głównego przeładowania zbioru danych. Możesz to zmienić przez ustawienie<dekompressedCacheMaxMinutesOld > (domyślny = 15) w zbiorach danych Xml.xml, np.,

        <decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>  

Większe liczby są ładne, ale skumulowany rozmiar zdekompresowanych plików może powodować bigParentDirectory zabraknie miejsca na dysku, co powoduje poważne problemy.  

  • Ponieważ dekompresja pliku może zająć dużo czasu (0,1 do 10 sekund) , zbiory danych ze skompresowanymi plikami mogą korzystać z ustawienia zbioru danych [<nThreads >] (# nthreas) ustawienie na większą liczbę (2? 3? 4?) . Minusy do jeszcze większych liczb (np. 5? 6? 7?) zmniejszają zwroty i że wniosek jednego użytkownika może następnie korzystać z wysokiego odsetka zasobów systemu, co znacznie spowalnia przetwarzanie wniosków innych użytkowników. Tak więc nie ma idealnego ustawienia nThreads, tylko różne konsekwencje w różnych sytuacjach z różnymi ustawieniami.  

Wymiary sortowane

Wartości dla każdego wymiaru MUSI być posortowane (wznoszące się lub zstępujące, z wyjątkiem pierwszego (left-most) wymiar, który musi się wznosić) . Wartości mogą być nieregularnie rozłożone. Nie może być żadnych powiązań. Jest to wymógStandard metadanych CF. Jeśli jakiekolwiek wartości wymiarów nie są uporządkowane, zbiór danych nie zostanie załadowany iERDDAP™zidentyfikuje pierwszą niesortowaną wartość w pliku dziennika, bigParentDirectory / logs / log.txt.

Niesortowane wartości wymiarów prawie zawsze wskazują na problem z zbiorem danych źródłowych. Najczęściej zdarza się to, gdy niewłaściwy lub niewłaściwy plik jest włączony do agregacji, co prowadzi do niesortowanego wymiaru czasu. Aby rozwiązać ten problem, patrz komunikat błędu wERDDAP™plik log.txt, aby znaleźć naruszającą wartość czasu. Następnie poszukaj w plikach źródłowych, aby znaleźć odpowiedni plik (lub jeden przed lub jeden po) To nie należy do agregacji.

Katalogi

Pliki MOŻE być w jednym katalogu, lub w katalogu i jego podkatalogach (rekursywnie) . Jeśli istnieje duża liczba plików (na przykład, > 1 000) , system operacyjny (i tym samymEDDGridPliki FromFiles) będzie działać znacznie efektywniej, jeśli przechowujesz pliki w serii podkatalogów (jeden na rok lub jeden na miesiąc dla zbiorów danych z bardzo częstymi plikami) tak, aby nigdy nie było dużej liczby plików w danym katalogu.  

<cacheFromUrl >

WszystkieEDDGridPliki FromFiles i wszystkie pliki EDDTableFromFiles obsługują zestaw tagów, które mówiąERDDAP™do pobierania i przechowywania kopii wszystkich plików zdalnego zbioru danych lub pamięci podręcznej kilku plików (pobrane w razie potrzeby) . To może być bardzo przydatne. Patrzcache Dokumentacja FromUrl.

Zdalne katalogi i żądania zakresu HTTP

(AKA Byte Serving, Zapytania o zakres bajtów, Akcept- Rangeshttpnagłówek)
EDDGridPliki FromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles i EDDTableFromNcCFFiles, może czasami obsługa danych z.ncpliki na zdalnych serwerach i dostęp przez HTTP, jeśli serwer obsługujeObsługa bajtówza pośrednictwem żądań zakresu HTTP (mechanizm HTTP do obsługi bajtów) . Jest to możliwe, ponieważ netcdf- java (któreERDDAP™wykorzystanie do odczytu.ncpliki) obsługuje odczyt danych z zdalnego.ncpliki za pośrednictwem żądań zakresu HTTP.

Nie rób tego! Jest okropnie niewydajny i powolny. Zamiast tego, użyj [<cacheFromUrl > system] (# cachefromurl) .

DostępERDDAP™zbiory danych jako pliki poprzez żądania zakresu bajtów -- Otaczając to, biorąc pod uwagę, że możesz (teoretycznie) Pomyśl o zestawie danych wERDDAP™jak olbrzym.ncplik przez aputting ".nc"do bazy OpenDAPURL dla danego zbioru danych (np., https://myserver.org/erddap/griddap/datasetID.nc a także poprzez dodanie a? query, aby określić podzbiór) , być może rozsądne jest pytanie, czy można użyć netcdf- java,Ferretlub inneNetCDFoprogramowanie klienta do odczytu danych poprzez Zapytania zakresu HTTP zERDDAP. Odpowiedź brzmi nie, ponieważ nie ma naprawdę ogromny ".nc"plik. Jeśli chcesz to zrobić, zrób jedną z tych opcji:

  • Stosowanie(OPeN)DAPoprogramowanie klienta do podłączenia do usług griddap oferowanych przezERDDAP. Właśnie to.DAP (i tym samymERDDAP) został zaprojektowany do. Jest bardzo wydajny.
  • Albo, pobierz plik źródłowy (s) od"files"system (lub podzbiór pliku poprzez.nc? zapytanie) do komputera i używać netcdf- java,Ferretlub inneNetCDFoprogramowanie klienta do czytania (teraz) plik lokalny (s) .  

Informacje o pliku buforowym

KiedyEDDGridZestaw danych FromFiles jest najpierw wczytany,EDDGridFromFiles odczytuje informacje ze wszystkich odpowiednich plików i tworzy tabele (jeden wiersz dla każdego pliku) z informacjami o każdym ważnym pliku i każdym "złym" (inne lub nieprawidłowe) plik.

  • Tabele są również przechowywane na dysku, jakNetCDFv3.ncpliki w bigParentDirectory / zbiór danych / last2CharsOfDatasetiID / datasetID / w plikach o nazwie: dirTable.nc (która posiada listę unikalnych nazw katalogów) , plik Tabela.nc (który posiada tabelę z informacjami każdego ważnego pliku) , Pliki badFiles.nc (który trzyma tabelę z każdym złym pliku informacji) .
  • Aby przyspieszyć dostęp doEDDGridZestaw danych FromFiles (ale kosztem wykorzystania większej ilości pamięci) , you can use

true
powiedziećERDDAP™do przechowywania kopii tabel informacyjnych plików w pamięci.

  • Kopia tabel informacyjnych na dysku jest również przydatna, gdyERDDAP™jest wyłączony i ponownie uruchomiony: oszczędzaEDDGridFromFiles z konieczności ponownego odczytu wszystkich plików danych.
  • Kiedy zestaw danych jest przeładowany,ERDDAP™musi tylko odczytać dane w nowych plikach i plikach, które uległy zmianie.
  • Jeśli plik ma inną strukturę niż inne pliki (na przykład inny typ danych dla jednej ze zmiennych lub inna wartość dla "jednostki"atrybut) ,ERDDAPdodaje plik do listy "złych" plików. Informacje o problemie z plikiem zostaną zapisane do bigParentDirectory / logs / log.txt file.
  • Nie powinieneś nigdy usuwać ani pracować z tymi plikami. Jednym z wyjątków jest: jeśli nadal dokonujesz zmian w zbiorze danychdatasets.xmlkonfiguracja, możesz usunąć te pliki, aby wymusićERDDAP™aby ponownie przeczytać wszystkie pliki, ponieważ pliki będą czytane / interpretowane inaczej. Jeśli kiedykolwiek trzeba usunąć te pliki, można to zrobić, gdyERDDAP™Ucieka. (Następnie ustawićbanderaaby przeładować zestaw danych jak najszybciej.) Jednakże,ERDDAP™zwykle zauważa, żedatasets.xmlinformacja nie pasuje do pliku Informacje o tabeli i automatycznie usuwa tabele plików.
  • Jeśli chcesz zachęcićERDDAP™aktualizacja przechowywanych danych (na przykład, jeśli po prostu dodano, usunięto lub zmieniono niektóre pliki do katalogu danych) , użyćsystem flagdo siłyERDDAP™aby zaktualizować informacje o pliku buforowanym.  

Wnioski dotyczące obsługi

W przypadku przetwarzania prośby klienta o dane,EDDGridFromFiles może szybko zajrzeć do tabeli z poprawnymi informacjami o pliku, aby zobaczyć, które pliki mają wymagane dane.  

Aktualizacja informacji o pliku w zakładce

Ilekroć zbiór danych jest ponownie wczytywany, informacje o pliku buforowanym są aktualizowane.

  • Zestawienie danych jest okresowo przeładowywane zgodnie z ustaleniem<reloadEveryNMinutes > in the dataset 's information indatasets.xml.
  • Zestaw danych jest przeładowany tak szybko, jak to możliwe, kiedy tylko to możliweERDDAP™wykrywa, że dodano, usunięto,touch 'd (aby zmienić ostatni plik Czas zmodyfikowany) albo zmienił dane.
  • Zestaw danych jest przeładowany tak szybko, jak to możliwe, jeśli używaszsystem flag.

Kiedy zbiór danych jest przeładowany,ERDDAP™porównuje aktualnie dostępne pliki do tabel informacyjnych. Nowe pliki są odczytywane i dodawane do odpowiedniej tabeli plików. Pliki, które już nie istnieją, są usuwane z poprawnej tabeli plików. Pliki, w których zmieniono znacznik czasu pliku, są odczytywane i aktualizowane. Nowe tabele zastępują stare tabele w pamięci i na dysku.  

Złe pliki

Tabela złych plików i powody, dla których te pliki zostały uznane za złe (uszkodzony plik, brakujące zmienne itp.) jest e-mail Wszystko Na adres e-mail (Prawdopodobnie ty.) za każdym razem, gdy zestaw danych jest przeładowany. Należy jak najszybciej wymienić lub naprawić te pliki.  

Brak zmiennych

Jeśli niektóre pliki nie mają niektórychdataVariables zdefiniowane w zbiorze danychdatasets.xmlW porządku. KiedyEDDGridFromFiles czyta jeden z tych plików, będzie działać tak, jakby plik miał zmienną, ale ze wszystkimi brakującymi wartościami.  

FTP Trouble / Advice

Jeśli FTP nowe pliki danych doERDDAP™serwer podczasERDDAP™Jest szansa, żeERDDAP™będzie przeładowywać zbiór danych podczas procesu FTP. To zdarza się częściej niż myślisz! Jeśli to się stanie, plik będzie miał ważność (posiada poprawną nazwę) , ale plik nie jest jeszcze ważny. JeśliERDDAP™próbuje odczytać dane z tego niepoprawnego pliku, błąd spowoduje dodanie pliku do tabeli niepoprawnych plików. Niedobrze. Aby uniknąć tego problemu, użyj tymczasowej nazwy pliku podczas FTP 'ing pliku, na przykład ABC2005.nc\ _ TEMP. Następnie test pliku NameRegex (zob. poniżej) wskazuje, że nie jest to odpowiedni plik. Po zakończeniu procesu FTP należy zmienić nazwę pliku na poprawną nazwę. Proces zmiany nazwy spowoduje, że plik stanie się istotny w jednej chwili.  

"0 plików" Komunikat o błędzie

Jeśli ucieknieszGenerateDatasetsXmllubDasDs, lub jeśli próbujesz załadowaćEDDGridZ... Dane plików wERDDAP™, i otrzymasz komunikat błędu "0 files" wskazujący, żeERDDAP™znaleziono 0 pasujących plików w katalogu (kiedy myślisz, że są pasujące pliki w tym katalogu) :

  • Sprawdź, czy pliki są w tym katalogu.
  • Sprawdź pisownię nazwy katalogu.
  • Sprawdź plik NameRemex. Bardzo łatwo popełnić błędy z regexami. Do celów testowych, spróbuj regex.\ *, który powinien pasować do wszystkich nazw plików. (Widzisz to?dokumentacja regexorazregex tutorial.)
  • Sprawdź, czy użytkownik, który prowadzi program (np. użytkownik = tomcat (?) dla Tomcat /ERDDAP) ma pozwolenie na przeczytanie tych plików.
  • W niektórych systemach operacyjnych (na przykład, SELER) i w zależności od ustawień systemu, użytkownik, który prowadził program, musi mieć "przeczytaj" pozwolenie na cały łańcuch katalogów prowadzących do katalogu, który posiada pliki.  

EDDGridszkielet FromFiles XML

  • Szkielet XML dla wszystkichEDDGridPodklasy FromFiles to:

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

EDDGridPliki FromAudioFiles oraz Pliki EDDTableFromAudioName dane zbiorcze z kolekcji lokalnych plików audio. (Po raz pierwszy pojawiły się wERDDAP™v1.82.) Różnica jest taka, żeEDDGridPliki FromAudioFiles traktują dane jak wielowymiarowy zbiór danych (zazwyczaj z 2 wymiarami:\[start pliku Czas\]oraz\[od Czas w pliku\]) , podczas gdy EDDTableFromAudioFiles traktuje dane jako dane tabelaryczne (zwykle z kolumnami dla pliku startTime, elapsedTime z pliku, a dane z kanałów audio) .EDDGridPliki FromAudioFiles wymagają, aby wszystkie pliki miały taką samą liczbę próbek, więc jeśli nie jest to prawdą, należy użyć plików EDDTableFromAudioFiles. W przeciwnym razie wybór typu EDD jest całkowicie twój. Jedna z zalet plików EDDTableFromAudioFiles: można dodać inne zmienne z innymi informacjami, np.,stationID, StationType. W obu przypadkach brak jednolitej zmiennej czasu utrudnia pracę z danymi z tych typów EDD, ale nie było dobrego sposobu na utworzenie jednolitej zmiennej czasu.

Zobacz te klasy "superklasy,EDDGridPliki FromFilesorazPliki EDDTableFromFiles, ogólne informacje na temat działania tej klasy i jej wykorzystania.

Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Ponieważ pliki audio nie mają innych metadanych niż informacje związane z kodowaniem danych dźwiękowych, będziesz musiał edytować wyjście z GenerateDatasets Xml w celu dostarczenia niezbędnych informacji (np. tytuł, streszczenie,creator\_name, institution, history) .

Szczegóły:

  • Istnieje wiele formatów plików audio. ObecnieERDDAP™może odczytać dane z większości plików .wav i .au. Obecnie nie może odczytać innych typów plików audio, np. .aiff lub .mp3. Jeśli potrzebujesz wsparcia dla innych formatów plików audio lub innych wariantów .wav i .au, prosimy wysłać swoją prośbę do Chrisa. John w Noa.gov. Lub, jako ćwiczenie możesz teraz użyć, możesz przekształcić pliki audio w PCM\ _ ZMIENNE (dla danych całkowitych) lub PCM\ _ FLOAT (dla danych zmiennoprzecinkowych) Pliki .wav tak, żeERDDAP™mogą z nimi pracować.
  • ObecnieERDDAP™może czytać pliki audio z czymJavaklasy AudioFormat wywołuje PCM\ _ FLOAT, PCM\ _ SIGNED, PCM\ _ UNSIGNED, ALAW i kodowanie ULAW.ERDDAP™konwertuje wartości PCM\ _ UNSIGNED (np. od 0 do 255) w wartości podpisane (np. -128 do 128) poprzez przełożenie bitów w wartościach danych.ERDDAP™konwertuje ALAW i ULAW zakodowane z ich rodzimego formatu zakodowanego bajtu na krótki (int16) wartości. OdJavachce bigEndian = prawdziwe dane,ERDDAP™reorganizuje bajty danych przechowywanych z bigEndian = false (mały endyjski) w celu poprawnego odczytu wartości. Dla wszystkich innych kodowań (PCM) ,ERDDAP™odczytuje dane tak jak jest.
  • KiedyERDDAP™odczytuje dane z plików audio, przekształca dostępne metadane audio w atrybuty globalne. Będzie to zawsze obejmować (z pokazanymi wartościami próbki)

String audioBigEndian "false"; / / true or false int audio Kanały 1; String audioEncoding "PCM\ _ SIGNED"; float audioFrameRate 96000.0; / / na sekundę int audioFrameSize 2; / / # bajtów danych na ramkę float audioSampleRate 96000.0; / / na sekundę int audioSampleSizeInBits 16; / / # bitów na kanał na próbkę

DlaERDDAPcele, rama jest synonimem próbki, która jest danymi dla jednego punktu w czasie. Atrybuty wERDDAP™będą posiadały informacje opisujące dane, tak jak były w plikach źródłowych.ERDDAP™często zmienia to podczas czytania danych, np. PCM\ _ UNSIGNED, ALAW i zakodowane dane ULAW są konwertowane do PCM\ _ SIGNED, a bigEndian = fałszywe dane są konwertowane do bigEndian = prawdziwe dane (w jaki sposóbJavachce to przeczytać) . W końcu wartości danych wERDDAP™zawsze będzieKody PCMwartości danych (tj. proste digitalizowane próbki fali dźwiękowej) .

  • KiedyERDDAP™odczytuje dane z plików audio, odczytuje cały plik.ERDDAP™może odczytać aż 2 miliardy próbek na kanał. Na przykład, jeśli częstotliwość próbkowania wynosi 44,100 próbek na sekundę, 2 miliardy próbek przekłada się na około 756 minut danych dźwiękowych na plik. Jeśli masz pliki audio z więcej niż tą ilością danych, musisz podzielić pliki na mniejsze kawałki tak, abyERDDAP™może je przeczytać.
  • PonieważERDDAP™odczytuje całe pliki audio,ERDDAP™musi mieć dostęp do dużej ilości pamięci do pracy z dużymi plikami audio. PatrzERDDAPUstawienia pamięci. Jeśli jest to problem, to można go teraz użyć do rozbicia plików na mniejsze kawałki.ERDDAP™może je odczytać z mniejszą pamięcią.
  • Niektóre pliki audio zostały napisane nieprawidłowo.ERDDAP™podejmuje niewielkie wysiłki w takich przypadkach. Ale generalnie, kiedy jest błąd,ERDDAP™będzie rzucać wyjątek (i odrzucić ten plik) lub (jeżeli błąd jest niewykrywalny) odczyt danych (ale dane będą nieprawidłowe) .
  • ERDDAP™nie sprawdza ani nie zmienia głośności dźwięku. Idealnie, integer danych audio jest skalowany, aby korzystać z całego zakresu typu danych.
  • Pliki audio i odtwarzacze audio nie mają systemu dla brakujących wartości (np. -999 lub Float.NaN) . Więc dane audio nie powinny mieć żadnych brakujących wartości. Jeśli brakuje wartości (np., jeśli trzeba przedłużyć plik audio) , użyj serii 0, która będzie interpretowana jako doskonała cisza.
  • KiedyERDDAP™odczyt danych z plików audio, zawsze tworzy kolumnę o nazwie eaded Czas z czasem dla każdej próbki w sekundach (przechowywane jako podwójne) , w odniesieniu do pierwszej próbki (który został przydzielony Czas = 0, 0 s) . ZEDDGridPliki FromAudioFiles, staje się zmienną EaapsedTime.
  • EDDGridPliki FromAudioFiles wymagają, aby wszystkie pliki miały taką samą liczbę próbek. Więc jeśli to nie jest prawda, musisz użyć EDDTableFromAudioFiles.
  • DlaEDDGridFromAudioFiles, zalecamy ustawienie [<DimensionValuesInMemory >] (# dimensionvalues in memory) Fałszywe (jak zaleca GenerateDatasets Xml) , ponieważ wymiar czasu często ma ogromną liczbę wartości.
  • DlaEDDGridFromAudioFiles, należy prawie zawsze używaćEDDGridSystem plików FromFiles dlaAgregacja poprzez Nazwy plików, prawie zawsze wyciągając datę rozpoczęcia nagrania Czas na nazwy plików. Na przykład:
    <sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

GenerateDatasets Xml będzie zachęcać do tego i pomóc w tym.

  • Dla plików EDDTableFromAudioFiles należy prawie zawsze używać systemu EDDTableFromFiles dla\\\ * fileName pseudosourceNamesaby pobrać informacje z nazwy pliku (prawie zawsze data rozpoczęcia Czas na nagranie) i promować ją jako kolumnę danych. Na przykład:
    <sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

Format czasowy powinien być określony jako atrybut jednostek:<att name = "units" > yyyMMdd '\ _' HHmmss</ att >  

EDDGridPliki FromMergeIRFiles

EDDGridPliki FromMergeIRFiles dane zagregowane pochodzące z danych lokalnych,MergeIRplików, które pochodzą zTropikalna misja pomiarowa opadów deszczu (TRMM) , która jest wspólną misją NASA i japońskiej Agencji Eksploracji Lotnictwa (JAXA) . Połączenie Pliki IR można pobrać zNASA.

EDDGridFromMergeIRFiles.Java został napisany i przyczynił się doERDDAP™projekt Jonathana Lafite 'a i Philippe' a Makowskiego z R.Tech Engineering (licence: copyright open source) .

EDDGridPliki FromMergeIRFiles są trochę nietypowe:

  • EDDGridFromMergeIRFiles obsługuje skompresowane lub nieskompresowane pliki danych źródłowych, w dowolnej kombinacji, w tym samym zbiorze danych. Pozwala to, na przykład, na kompresję starszych plików, które są rzadko dostępne, ale odkompresować nowe pliki, które są często dostępne. Albo możesz zmienić rodzaj kompresji z oryginału. Na przykład z,.gz.
  • Jeśli masz skompresowane i nieskompresowane wersje tych samych plików danych w tym samym katalogu, upewnij się, że<fileNameRegex > dla Twojego zbioru danych pasuje do nazw plików, które chcesz dopasować i nie pasuje do nazw plików, których nie chcesz dopasować.
  • Nieskompresowane pliki danych źródłowych nie mogą mieć rozszerzenia (tj. nie "." w nazwie pliku) .
  • Skompresowane pliki danych źródłowych muszą mieć rozszerzenie pliku, aleERDDAP™określa typ kompresji poprzez kontrolowanie zawartości pliku, a nie poprzez przeglądanie rozszerzenia pliku (Na przykład, "Z".) . Obsługiwane typy kompresji to: "gz", "bzip2", "xz", "lzma", "snappy-raw", "snappy-frame", "pack200" i "z". KiedyERDDAP™odczytuje skompresowane pliki, dekompresuje je w locie, bez zapisu do pliku tymczasowego.
  • Wszystkie pliki danych źródłowych muszą korzystać z oryginalnego systemu nazewnictwa plików: np. merg\ _ RRRRMMDDHH \ _ 4km- pixel (gdzie RRRRMMDDHH wskazuje czas związany z danymi w pliku) , plus rozszerzenie pliku jeśli plik jest skompresowany.

Widzisz tę klasę "superklasy",EDDGridPliki FromFiles, ogólne informacje na temat działania tej klasy i jej wykorzystania.

Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.  

EDDGridPliki FromNc@@

EDDGridPliki FromNc@@ dane zagregowane pochodzące z lokalnych, zakodowanych,GRIB .grb oraz .grb2pliki,HDF (v4 lub v5) .hdfpliki,.ncmlpliki,NetCDF (v3 lub v4) .ncpliki orazZarr Przewodniczącypliki (od wersji 2.25) . Pliki Zarr mają nieco inne zachowanie i wymagają albo fileNameRegex lub pathRegex zawierać "zarr".

Może to działać z innymi typami plików (na przykład, BUFR) Nie sprawdziliśmy go. Proszę wysłać nam próbki.

  • Dla plików GRIB,ERDDAP™zrobi plik indeksowy .gbx przy pierwszym odczycie każdego pliku GRIB. Tak więc pliki GRIB muszą być w katalogu, w którym "użytkownik", który uruchomił Tomcat, przeczytał + write pozwolenie.
  • Widzisz tę klasę "superklasy",EDDGridPliki FromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.
  • Począwszy odERDDAP™v2.12,EDDGridPliki FromNciEDDGridPliki FromNcNiezapakowany może odczytać dane z "struktur" w.nc4 oraz.hdf4 pliki. Aby zidentyfikować zmienną pochodzącą ze struktury,<sourceName> musi stosować format: fullStructureName | memberName , na przykład group1 / myStruct|Mój Członek.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Grupy w plikach Nc

Pliki Netcdf4 mogą zawierać grupy. ERDDAP™po prostu tworzy zbiór danych ze zmiennych w jednej grupie i wszystkich jej grup macierzystych. Możesz podać określoną nazwę grupy w GenerateDatasets Xml (Pomiń ukośnik) lub użyć "", aby mieć GenerateDatasets Xml wyszukiwanie wszystkich grup w poszukiwaniu zmiennych, które używają większości wymiarów lub używają "\[korzeń\]"by GenerateDatasets szukały zmiennych w grupie root.

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbkowym. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

EDDGridFromNcFilesUnpacked

EDDGridFromNcFilesUnpacked jest wariantemEDDGridPliki FromNc@@które agreguje dane z lokalnych, griddedNetCDF (v3 lub v4) .ncoraz powiązane pliki. Różnica polega na tym, że ta klasa rozpakowuje każdy plik danych przedEDDGridPliki FromFiles przeglądają pliki:

  • Rozpakowuje zmienne, które są pakowanescale\_factorlubadd\_offset.
  • Konwertuje\ _ FillValue imissing\_valuewartości dla NaN (lub MAX\ _ VALUE dla typów danych całkowitych) .
  • Konwertuje wartości czasu i znacznika czasu do"seconds since 1970-01-01T00:00:00Z".

Wielką zaletą tej klasy jest to, że zapewnia sposób na radzenie sobie z różnymi wartościamiscale\_factor,add\_offset,\ _ FillValue,missing\_valuelub jednostki czasowe w różnych plikach źródłowych w zbiorze. W przeciwnym razie musiałbyś użyć takiego narzędzia jakNcMLlubNCOmodyfikować każdy plik, aby usunąć różnice, tak aby pliki mogły być obsługiwane przezEDDGridFromNcFiles. Aby ta klasa działała prawidłowo, pliki muszą być zgodne ze standardami CF dla powiązanych atrybutów.

  • Jeśli spróbujeszEDDGridPliki FromNcRozpakowany z grupy plików, z którymi wcześniej próbowałeś i nie udało Ci się użyćEDDGridPliki FromNcFiles, cd to bigParentDirectory / zbiór danych / last2Listy / datasetID / gdzie last2Listy to ostatnie 2 literydatasetID, i usunąć wszystkie pliki w tym katalogu.
  • Począwszy odERDDAP™v2.12,EDDGridPliki FromNciEDDGridPliki FromNcNiezapakowany może odczytać dane z "struktur" w.nc4 oraz.hdf4 pliki. Aby zidentyfikować zmienną pochodzącą ze struktury,<sourceName> musi stosować format: fullStructureName | memberName , na przykład group1 / myStruct|Mój Członek.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Pliki Netcdf4 mogą zawierać grupy. Patrzta dokumentacja.

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbki przed Jest rozpakowany. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

EDDGridLonPM180

EDDGridLonPM180 zmienia wartości długości geograficznej dziecka (zamknięte) EDDGridzbiór danych o pewnych wartościach długości geograficznej powyżej 180 (na przykład od 0 do 360) tak, że są one w zakresie -180 do 180 (Długość geograficzna Plus lub Minus 180, stąd nazwa) .

  • Zapewnia to sposób na stworzenie zbiorów danych o wartościach długości geograficznej większych niż 180 zgodnych w / zOGCusługi (na przykładWMSserwer wERDDAP) , ponieważ wszystkieOGCusługi wymagają wartości długości geograficznej od -180 do 180.
  • Praca w pobliżu nieciągłości powoduje problemy, niezależnie od tego, czy brak ciągłości jest na 0 lub 180 długości. Ten typ zbioru danych pozwala uniknąć tych problemów dla każdego, oferując dwie wersje tego samego zbioru danych: jeden z wartościami długości geograficznej w zakresie od 0 do 360 ("Pacificentric"?) , jeden z wartościami długości geograficznej w zakresie od -180 do 180 ("Atlanticentric"?) .
  • Dla zbiorów danych dla dzieci o wszystkich wartościach długości geograficznej większych niż 180, wszystkie nowe wartości długości geograficznej są po prostu o 360 stopni niższe. Na przykład zbiór danych o wartościach długości geograficznej od 180 do 240 stałby się zbiorem danych o wartościach długości geograficznej od -180 do -120.
  • Dla zbiorów danych dotyczących dzieci, które mają długość geograficzną dla całego globu (od 0 do 360) , nowa wartość długości geograficznej zostanie przestawiona (grubo) -180 do 180: Oryginalne wartości od 0 do prawie 180 nie ulegają zmianie. Oryginalne wartości 180 do 360 są zamieniane na -180 do 0 i przesuwane na początek tablicy długości geograficznej.
  • Dla zbiorów danych dla dzieci, które mają zakres 180, ale nie obejmują świata,ERDDAP™dodaje brakujące wartości niezbędne do stworzenia zbioru danych obejmującego cały świat. Na przykład zbiór danych dla dzieci o długościach od 140 do 200 stałby się zbiorem danych o długościach od -180 do 180. Wartości dzieci od 180 do 200 zmienią się na -180 do -160. Nowe wartości długości geograficznej zostaną dodane od -160 do 140. Odpowiednie wartości danych będą\ _ FillValues. Wartości dla dzieci od 140 do prawie 180 nie uległyby zmianie. Dodanie brakujących wartości może wydawać się dziwne, ale pozwala uniknąć kilku problemów, które wynikają z posiadania wartości długości geograficznej, które skaczą nagle (np. od -160 do 140) .
  • WGenerateDatasetsXml, istnieje specjalny "typ zbioru danych",EDDGridLonPM180FromErddapCatalog, który pozwala generowaćdatasets.xmlzamiastEDDGridZestawy danych LonPM180 z każdego zEDDGridzbiory danych wERDDAPktórych długość geograficzna jest większa niż 180. Ułatwia to oferowanie dwóch wersji tych zbiorów danych: oryginał, o wartościach długości geograficznej w zakresie od 0 do 360, oraz nowy zbiór danych, z wartościami długości geograficznej w zakresie -180 do 180.

Zestaw danych dziecka w obrębie każdegoEDDGridZestaw danych LonPM180 będzieEDDGridZestaw danych FromErddap, który wskazuje na oryginalny zestaw danych. Nowy zestaw danychdatasetIDbędzie nazwą oryginalnego zbioru danych plus "\ _ LonPM180". Na przykład:

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

UmieśćEDDGridZestaw danych LonPM180 poniżej Oryginalny zbiór danych wdatasets.xml. To unika pewnych możliwych problemów.

Alternatywnie, można zastąpićEDDGridZestaw danych dla dzieci FromErddap z oryginalnym zbiorem danychdatasets.xml. Następnie będzie tylko jedna wersja zbioru danych: ta z wartościami długości geograficznej w granicach -180 do 180. Odrzucamy to, ponieważ są czasy, kiedy każda wersja zbioru danych jest wygodniejsza.

  • Jeśli oferujesz dwie wersje zbioru danych, na przykład jedną o długości od 0 do 360 i jedną o długości od -180 do 180:
    • Możesz użyć opcjonalnego [<dostępne ViaWMS> false</ dostępne ViaWMS>] (# accessibleviawms) z zestawem danych 0- 360 do przymusowego wyłączeniaWMSusługi dla tego zbioru danych. Następnie dostępna będzie tylko wersja zbioru danych LonPM180WMS.
    • Istnieje kilka sposobów, aby utrzymać zestaw danych LonPM180 na bieżąco ze zmianami w podstawowym zbiorze danych:
      • Jeśli zestaw danych dziecka jestEDDGridFromaErddap dataset, który odnosi się do zbioru danych w tym samymERDDAP™, zestaw danych LonPM180 będzie próbował bezpośrednio subskrybować podstawowy zestaw danych tak, że zawsze jest up- to- date. Bezpośrednie subskrypcje nie generują e-maili proszących o zatwierdzenie subskrypcji - walidacja powinna być wykonywana automatycznie.
      • Jeśli zestaw danych dziecka nie jestEDDGridFromaErddap dataset, który jest na tym samymERDDAP™, zestaw danych LonPM180 będzie próbował korzystać z regularnego systemu subskrypcji do subskrypcji podstawowego zbioru danych. Jeśli masz system subskrypcji w swoimERDDAP™Włącz, powinieneś dostać e-maile prosząc o potwierdzenie subskrypcji. Proszę, zrób to.
      • Jeśli masz system subskrypcji w swoimERDDAP™Wyłączony zestaw danych LonPM180 może czasami mieć przestarzałe metadane do czasu ponownego załadowania zbioru danych LonPM180. Więc jeśli system subskrypcji jest wyłączony, należy ustawić [<przeładowanie Każda minuta >] (# reloadeverynminutes) ustawienie zbioru danych LonPM180 na mniejszą liczbę, tak aby możliwe było szybsze wykrycie zmian w zbiorze danych dzieci.

EDDGridszkielet LonPM180 XML

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

EDDGridLon0360

EDDGridLon0360 zmienia wartości długości geograficznej dziecka (zamknięte) EDDGridzbiór danych o pewnych wartościach długości geograficznej mniejszej niż 0 (na przykład, -180 do 180) tak, że są one w zakresie od 0 do 360 (stąd nazwa) .

  • Praca w pobliżu nieciągłości powoduje problemy, niezależnie od tego, czy brak ciągłości jest na 0 lub 180 długości. Ten typ zbioru danych pozwala uniknąć tych problemów dla każdego, oferując dwie wersje tego samego zbioru danych: jeden z wartościami długości geograficznej w zakresie od -180 do 180 ("Atlanticentric"?) . jeden z wartościami długości geograficznej w zakresie od 0 do 360 ("Pacificentric"?) ,
  • Dla zbiorów danych dla dzieci o wszystkich wartościach długości geograficznej mniejszej niż 0, wszystkie nowe wartości długości geograficznej są po prostu o 360 stopni wyższe. Na przykład zbiór danych o wartościach długości od -180 do -120 stałby się zbiorem danych o wartościach długości od 180 do 240.
  • Dla zbiorów danych dotyczących dzieci, które mają długość geograficzną dla całego globu (mniej więcej od -180 do 180) , nowa wartość długości geograficznej zostanie przestawiona (grubo) Od 0 do 360: Oryginalne wartości -180 do 0 są zamieniane na 180 do 360 i przesuwane na koniec tablicy długości geograficznej. Oryginalne wartości od 0 do prawie 180 nie ulegają zmianie.
  • Dla zbiorów danych dla dzieci, które mają zakres n = 0, ale nie obejmują świata,ERDDAP™dodaje brakujące wartości niezbędne do stworzenia zbioru danych obejmującego cały świat. Na przykład zbiór danych dla dzieci o długości od -40 do 20 stałby się zbiorem danych o długości od 0 do 360. Wartości dla dzieci od 0 do 20 nie uległyby zmianie. Nowe wartości długości geograficznej zostaną dodane od 20 do 320. Odpowiednie wartości danych będą\ _ FillValues. Wartości dzieci od -40 do 0 zmienią się na 320 do 360. Dodanie brakujących wartości może wydawać się dziwne, ale pozwala uniknąć kilku problemów, które wynikają z posiadania wartości długości geograficznej, które skaczą nagle (np., od 20 do 320) .
  • WGenerateDatasetsXml, istnieje specjalny "typ zbioru danych",EDDGridLon0360From ErddapCatalog, który pozwala generowaćdatasets.xmlzamiastEDDGridLon0360 zestawów danych z każdego zEDDGridzbiory danych wERDDAPktórych długość geograficzna jest większa niż 180. Ułatwia to oferowanie dwóch wersji tych zbiorów danych: oryginał, o wartościach długości geograficznej w zakresie od 0 do 360, oraz nowy zbiór danych, z wartościami długości geograficznej w zakresie -180 do 180.

Zestaw danych dziecka w obrębie każdegoEDDGridLon0360 zestaw danych będzieEDDGridZestaw danych FromErddap, który wskazuje na oryginalny zestaw danych. Nowy zestaw danychdatasetIDbędzie nazwą oryginalnego zbioru danych plus "\ _ Lon0360". Na przykład:

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

UmieśćEDDGridLon0360 dataset poniżej Oryginalny zbiór danych wdatasets.xml. To unika pewnych możliwych problemów.

Alternatywnie, można zastąpićEDDGridZestaw danych dla dzieci FromErddap z oryginalnym zbiorem danychdatasets.xml. Następnie będzie tylko jedna wersja zbioru danych: ta z wartościami długości w zakresie od 0 do 360. Odrzucamy to, ponieważ są czasy, kiedy każda wersja zbioru danych jest wygodniejsza.

  • Jeśli oferujesz dwie wersje zbioru danych, na przykład jedną o długości od 0 do 360 i jedną o długości od -180 do 180:
    • Możesz użyć opcjonalnego [<dostępne ViaWMS> false</ dostępne ViaWMS>] (# accessibleviawms) z 0 do 360 zestaw danych przymusowo wyłączyćWMSusługi dla tego zbioru danych. Następnie dostępna będzie tylko wersja -180 do 180 zbioru danychWMS.
    • Istnieje kilka sposobów, aby utrzymać zestaw danych Lon0360 na bieżąco ze zmianami w podstawowym zbiorze danych:
      • Jeśli zestaw danych dziecka jestEDDGridFromaErddap dataset, który odnosi się do zbioru danych w tym samymERDDAP™, zestaw danych Lon0360 będzie próbował bezpośrednio subskrybować podstawowy zestaw danych tak, że jest zawsze up- to- date. Bezpośrednie subskrypcje nie generują e-maili proszących o zatwierdzenie subskrypcji - walidacja powinna być wykonywana automatycznie.
      • Jeśli zestaw danych dziecka nie jestEDDGridFromaErddap dataset, który jest na tym samymERDDAP™, zestaw danych Lon0360 będzie próbował korzystać z regularnego systemu subskrypcji do subskrypcji podstawowego zbioru danych. Jeśli masz system subskrypcji w swoimERDDAP™Włącz, powinieneś dostać e-maile prosząc o potwierdzenie subskrypcji. Proszę, zrób to.
      • Jeśli masz system subskrypcji w swoimERDDAP™Wyłączony, zestaw danych Lon0360 może czasami mieć przestarzałe metadane do czasu przeładowania zestawu danych Lon0360. Więc jeśli system subskrypcji jest wyłączony, należy ustawić [<przeładowanie Każda minuta >] (# reloadeverynminutes) ustawienie zbioru danych Lon0360 na mniejszą liczbę, tak aby możliwe było szybsze wykrycie zmian w zbiorze danych dzieci.

EDDGridSzkielet Lon0360 XML

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

EDDGridSideBySide

EDDGridSideBySide 2 lub więcej agregatówEDDGridzbiory danych (dzieci) ramię w ramię.

  • Wynikający z tego zbiór danych zawiera wszystkie zmienne ze wszystkich zbiorów danych dzieci.
  • Zestaw danych rodzicielskich i wszystkie zestawy danych dla dzieci MUSI mieć innedatasetIDb. Jeśli jakiekolwiek nazwiska w rodzinie są dokładnie takie same, zbiór danych nie wczyta (z komunikatem błędu, że wartości zagregowanej osi nie są sortowane) .
  • Wszystkie dzieci MUSI mieć te same wartości źródłowe dlaaxisVariables\[1 +\] (na przykład szerokość geograficzna, długość geograficzna) . Precyzja badania jest określona przezmatchAxisNDigits.
  • Dzieci mogą mieć różne wartości źródłowe dlaaxisVariables\[0\] (na przykład czas) , ale zazwyczaj są one w większości takie same.
  • Zestawienie danych rodzicielskich wydaje się mieć wszystkieaxisVariables\[0\]wartości źródłowe od wszystkich dzieci.
  • Na przykład, to pozwala na połączenie zbioru danych źródłowych z komponentem u- wektorowym i innym zbiorem danych źródłowych z komponentem v- wektorowym, więc połączone dane mogą być obsługiwane.
  • Dzieci stworzone tą metodą odbywają się prywatnie. Nie są to oddzielnie dostępne zbiory danych (na przykład na podstawie żądań klienta lubpliki flag) .
  • Globalne metadane i ustawienia dla rodzica pochodzą z globalnych metadanych i ustawień dla pierwszego dziecka.
  • Jeśli istnieje wyjątek podczas tworzenia pierwszego dziecka, rodzic nie zostanie stworzony.
  • Jeśli istnieje wyjątek podczas tworzenia innych dzieci, to wysyła e-mail do emailEverythingTo (jak określono wsetup.xml) i kontynuuje z innymi dziećmi.

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

EDDGridAgregateExistingDimension

EDDGridAgregateExistingDimension 2 lub więcej agregatówEDDGridzestawów danych, z których każdy ma inny zakres wartości dla pierwszego wymiaru, ale identyczne wartości dla innych wymiarów.

  • Na przykład, jeden zestaw danych dla dzieci może mieć 366 wartości (na rok 2004) dla wymiaru czasu i innego dziecka może mieć 365 wartości (na rok 2005) dla wymiaru czasu.
  • Wszystkie wartości dla wszystkich pozostałych wymiarów (na przykład szerokość geograficzna, długość geograficzna) Musi być identyczny dla wszystkich dzieci. Precyzja badania jest określona przezmatchAxisNDigits.
  • Wymiary sortowane - Wartości dla każdego wymiaru MUSI być posortowane (Wznoszące się lub zstępujące) . Wartości mogą być nieregularnie rozłożone. Nie może być żadnych powiązań. Jest to wymógStandard metadanych CF. Jeśli jakiekolwiek wartości wymiarów nie są uporządkowane, zbiór danych nie zostanie załadowany iERDDAP™zidentyfikuje pierwszą niesortowaną wartość w pliku dziennika, bigParentDirectory / logs / log.txt.

Niesortowane wartości wymiarów prawie zawsze wskazują na problem z zbiorem danych źródłowych. Najczęściej zdarza się to, gdy niewłaściwy lub niewłaściwy plik jest włączony do agregacji, co prowadzi do niesortowanego wymiaru czasu. Aby rozwiązać ten problem, patrz komunikat błędu wERDDAP™plik log.txt, aby znaleźć naruszającą wartość czasu. Następnie poszukaj w plikach źródłowych, aby znaleźć odpowiedni plik (lub jeden przed lub jeden po) To nie należy do agregacji.

  • Zestaw danych rodzica i zestaw danych dziecka MUSI mieć innedatasetIDb. Jeśli jakiekolwiek nazwiska w rodzinie są dokładnie takie same, zbiór danych nie wczyta (z komunikatem błędu, że wartości zagregowanej osi nie są sortowane) .
  • Obecnie zestaw danych dziecka MUSI byćEDDGridZestaw danych FromDap i MUSI mieć najniższe wartości zagregowanego wymiaru (zazwyczaj najstarsze wartości czasowe) . Wszystkie pozostałe dzieci MUSI być prawie identyczne zbiory danych (różne tylko wartości dla pierwszego wymiaru) i są określone przez tylko ichsourceUrl.
  • Zagregowany zbiór danych otrzymuje metadane od pierwszego dziecka.
  • WGenerateDatasets Program Xmlmoże zrobić szorstki szkicdatasets.xmldlaEDDGridAggregateExistingDimension na podstawie zestawu plików obsługiwanych przezHyraxlub serwer THREDDS. Na przykład, użyj tego wejścia dla programu ("/ 1988" w URL sprawia, że przykład działa szybciej) :
      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

Możesz użyć wyniku<sourceUrl> tagi lub usunąć je i odkomentować<sourceUrl> tag (tak, aby nowe pliki były zauważane za każdym razem, gdy zestaw danych jest ponownie załadowany.

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

EDDGridKopiuj

EDDGridKopiuj tworzy i utrzymuje lokalną kopię innegoEDDGriddane i obsługuje dane z lokalnej kopii.

  • EDDGridKopiuj (oraz dla danych tabelarycznych,EDDTableCopy) jest bardzo łatwy w użyciu i bardzo skuteczny rozwiązanie kilku największych problemów z obsługą danych ze zdalnego źródła danych:
    • Dostęp do danych ze zdalnego źródła danych może być powolny.
      • Może być wolno, bo z natury wolno. (na przykład nieefektywny typ serwera) ,
      • ponieważ jest przytłoczony przez zbyt wiele żądań,
      • lub ponieważ serwer lub zdalny serwer jest ograniczony przepustowość.
    • Zdalny zestaw danych jest czasami niedostępny (ponownie, z różnych powodów) .
    • Poleganie na jednym źródle danych nie jest dobre (na przykład, gdy wielu użytkowników i wieluERDDAPs wykorzystanie) .  
  • Jak to działa...EDDGridKopiowanie rozwiązuje te problemy poprzez automatyczne tworzenie i utrzymywanie lokalnej kopii danych oraz obsługę danych z lokalnej kopii.ERDDAP™może obsługiwać dane z lokalnej kopii bardzo, bardzo szybko. A tworzenie lokalnej kopii zmniejsza obciążenie zdalnego serwera. Lokalna kopia to kopia zapasowa oryginału, która jest przydatna na wypadek, gdyby coś stało się oryginałowi.

Nie ma nic nowego w tworzeniu lokalnej kopii zbioru danych. To co tu nowego, to to, że ta klasa robi to\*łatwo\*do tworzenia i\*utrzymanie\*miejscowa kopia danych z\*odmiana\*rodzajów zdalnych źródeł danych oraz\*dodaj metadane\*podczas kopiowania danych.

  • Fragmenty danych...EDDGridKopia tworzy lokalną kopię danych poprzez żądanie fragmentów danych z pilota<zbiór danych >. Nie będzie kawałka dla każdej wartości lewej (pierwszy) zmienna osi.EDDGridKopia nie opiera się na liczbach indeksowych zdalnego zbioru danych dla osi -- te mogą się zmienić.

UWAGA: Jeśli rozmiar kawałka danych jest tak duży (> 2GB) że powoduje problemy,EDDGridKopia nie może być użyta. (Przykro mi, ale mamy nadzieję na rozwiązanie tego problemu w przyszłości.)

  • \[Alternatywa dlaEDDGridPrzyjąłem. Jeśli dane zdalne są dostępne za pośrednictwem plików do pobrania, a nie usługi internetowej, użyjcache Opcja FromUrl dlaEDDGridPliki FromFiles, który tworzy lokalną kopię zdalnych plików i obsługuje dane z lokalnych plików.\]
  • Lokalne pliki... Każdy kawałek danych jest przechowywany w osobnymNetCDFplik w podkatalogu bigParentDirectory / kopiuj / datasetID / (jak określono wsetup.xml) . Nazwy plików utworzone z wartości osi są modyfikowane, aby były bezpieczne dla plików (na przykład "x2D" zastępuje się "x2D") -- to nie wpływa na rzeczywiste dane.  
  • Nowe dane -- Za każdym razemEDDGridKopia jest przeładowana, sprawdza pilota.<zestaw danych >, aby zobaczyć, co kawałki są dostępne. Jeśli plik dla kawałka danych nie istnieje, wniosek o uzyskanie kawałka jest dodawany do kolejki.ERDDAP's TaskThread przetwarza wszystkie kolejki żądań fragmentów danych, jeden-by-jeden. Możesz zobaczyć statystyki działalności taskThread na tematStrona statusuorazSprawozdanie dzienne. (Tak.ERDDAP™może przyporządkować do tego procesu wiele zadań, ale to zużyłoby wiele częstotliwości, pamięci i czasu CPU oraz wiele czasu lokalnegoERDDAPprzepustowość, pamięć i czas procesora, żaden z nich nie jest dobrym pomysłem.)

UWAGA: Po raz pierwszyEDDGridKopia jest załadowana, (Jeśli wszystko pójdzie dobrze) wiele żądań dotyczących fragmentów danych zostanie dodanych do kolejki taskThread, ale nie zostaną utworzone żadne lokalne pliki danych. Tak więc konstruktor zawiedzie, ale taskThread będzie nadal pracować i tworzyć lokalne pliki. Jeśli wszystko pójdzie dobrze, taskThread zrobi kilka lokalnych plików danych i następna próba ponownego załadowania zbioru danych (za 15 minut) odniesie sukces, ale początkowo z bardzo ograniczoną ilością danych.

UWAGA: Po lokalnym zbiorze danych jest kilka danych i pojawia się w TwoimERDDAP, jeśli zdalny zestaw danych jest tymczasowo lub na stałe niedostępny, lokalny zestaw danych nadal będzie działać.

UWAGA: Jeśli zbiór danych jest duży i / lub serwer jest powolny (W tym problem, prawda?) , to zajmie dużo czasu, aby zrobić kompletną miejscową kopię. W niektórych przypadkach potrzebny czas będzie nie do przyjęcia. Na przykład przesyłanie 1 TB danych przez linię T1 (0,15 GB / s) trwa co najmniej 60 dni, w optymalnych warunkach. Dodatkowo, używa dużo przepustowości, pamięci i czasu procesora na komputerach zdalnych i lokalnych. Rozwiązaniem jest wysłanie dysku twardego do administratora zdalnego zbioru danych, aby s / on mógł zrobić kopię zbioru danych i wysłać dysk twardy z powrotem do Ciebie. Wykorzystanie tych danych jako punktu wyjścia orazEDDGridKopiuj doda do niego dane. (To jeden ze sposobów, byAmazon 's EC2 Cloud Servicerozwiązuje problem, mimo że ich system ma dużą przepustowość.)

UWAGA: Jeśli podana wartość dla lewej (pierwszy) zmienna osi znika ze zdalnego zbioru danych,EDDGridKopiuj NIE usuwa lokalnego kopiowanego pliku. Jeśli chcesz, możesz go skasować.

Grid Kopiuj sprawdzanie Źródło Dane

Wdatasets.xmldla tego zbioru danych może mieć opcjonalny znacznik

    <checkSourceData>true</checkSourceData>  

Domyślna wartość jest prawdziwa. Jeśli / kiedy ustawisz go na false, zbiór danych nigdy nie będzie sprawdzał zbioru danych źródłowych, aby sprawdzić, czy są dostępne dodatkowe dane.

Tylko od

Możesz powiedziećEDDGridKopiuj, aby zrobić kopię podzbioru zbioru danych źródłowych, zamiast całego zbioru danych źródłowych, dodając znacznik w formie<tylko od > niektóre Wartość </ onlySince > do zbioru danychdatasets.xmlChunk.EDDGridKopiuj pobierze tylko wartości danych związane z wartościami pierwszego wymiaru (zazwyczaj wymiar czasowy) które są większe niż niektóre Wartość . niektóre Wartość może być:

  • Czas względny określony przeznow- nUnits . Na przykład:<tylko od >now-2 lata</ onlySince > mówi do zbioru danych, aby robić lokalne kopie danych tylko wtedy, gdy wartości wymiaru zewnętrznego (zazwyczaj wartości czasowe) są w ciągu ostatnich 2 lat (który jest ponownie oceniany za każdym razem, gdy zestaw danych jest ponownie załadowany, czyli kiedy szuka nowych danych do skopiowania) . Patrznow- nUnits Opis składni. Jest to użyteczne, jeśli pierwszy wymiar ma dane czasowe, które zwykle ma.

    EDDGridKopiuj nie usuwa lokalnych plików z danymi, które z czasem stają się starsze niżnow- nUnits . Możesz usunąć te pliki w każdej chwili, jeśli chcesz. Jeśli to zrobisz, stanowczo zalecamy ustawieniebanderapo usunięciu plików, aby powiedziećEDDGridKopiuj, aby zaktualizować listę plików buforowanych.

  • Punkt stały w czasie określony jako ciąg ISO 8601yyyy-MM-ddTHH:mm:ssZ. Na przykład:<Tylko od > 2000- 01- 01T00: 00: 00Z</ onlySince > mówi do zbioru danych tylko do tworzenia lokalnych kopii danych, gdzie wartość pierwszego wymiaru jest\ > = 2000-01-01T00: 00: 00Z. Jest to użyteczne, jeśli pierwszy wymiar ma dane czasowe, które zwykle ma.  

  • Numer zmiennego punktu. Na przykład:<Tylko od > 946684800.0</ only Since >. Jednostki będą jednostkami docelowymi pierwszego wymiaru. Na przykład, dla wymiarów czasowych, jednostek wERDDAP™są zawsze"seconds since 1970-01-01T00:00:00Z". Więc 946684800.0"seconds since 1970-01-01T00:00:00Z"odpowiada 2000- 01-01T00: 00: 00Z. Jest to zawsze przydatna opcja, ale szczególnie przydatna, gdy pierwszy wymiar nie posiada danych czasowych.

EDDGridKopiuj powtórzone użycie

  1. Utwórz<zbiór danych > wpis (rodzimy typ, nieEDDGridKopiuj) dla zdalnego źródła danych. Uruchomić go poprawnie, w tym wszystkie wymagane metadane.
  2. Jeśli jest zbyt wolny, dodaj kod XML, aby zawinąć go wEDDGridKopiuj zbiór danych.
    • Użyj innegodatasetID (Może zmieniającdatasetIDstaredatasetIDnieznacznie) .
    • Kopiuj<dostępne Do >,<przeładowanie EveryNMinutes > i<onChange > z pilotaEDDGridXML doEDDGridKopiuj XML. (Ich wartości dlaEDDGridKopiuj materię; ich wartości dla wewnętrznego zbioru danych stają się nieistotne.)
  3. ERDDAP™będzie tworzyć i utrzymywać lokalną kopię danych.  
  • OSTRZEŻENIE:EDDGridKopia zakłada, że wartości danych dla każdego kawałka nigdy się nie zmieniają. Jeśli / kiedy to się stanie, należy ręcznie usunąć pliki cząstkowe w bigParentDirectory / kopiuj / datasetID / które się zmieniły ibanderazbiór danych, który ma być ponownie załadowany, tak aby usunięte kawałki zostały zastąpione. Jeśli masz subskrypcję e-mail do zbioru danych, otrzymasz dwa e-maile: jeden, gdy zestaw danych po raz pierwszy przeładowuje i zaczyna kopiować dane, a drugi, gdy zestaw danych ponownie ładuje (automatycznie) i wykrywa nowe lokalne pliki danych.  
  • Wszystkie wartości osi muszą być równe. Dla każdej osi z wyjątkiem lewej (pierwszy) , wszystkie wartości muszą być równe dla wszystkich dzieci. Precyzja badania jest określona przezmatchAxisNDigits.  
  • Ustawienia, Metadane, Zmienne...EDDGridKopiuj używa ustawień, metadanych i zmiennych z załączonego zbioru danych źródłowych.  
  • Zmień metadane -- W przypadku konieczności zmianyaddAttributeslub zmienić kolejność zmiennych związanych z zbiorem danych źródłowych:
    1. ZmieńaddAttributesdla zbioru danych źródłowych wdatasets.xmlW razie potrzeby.
    2. Usuń jeden z skopiowanych plików.
    3. Ustawbanderaaby natychmiast przeładować zestaw danych. Jeśli używasz flagi i masz e-mail subskrypcji do zbioru danych, otrzymasz dwa e-maile: jeden, gdy zestaw danych po raz pierwszy przeładowuje i zaczyna kopiować dane, a drugi, gdy zestaw danych ładuje ponownie (automatycznie) i wykrywa nowe lokalne pliki danych.
    4. Usunięty plik zostanie zregenerowany przy pomocy nowych metadanych. Jeśli zestaw danych źródłowych jest kiedykolwiek niedostępny,EDDGridKopiuj zbiór danych otrzyma metadane z regenerowanego pliku, ponieważ jest to najmłodszy plik.

EDDGridKopiuj szkielet 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 obsługuje dane z jednegoCassandrastół. Cassandra to baza danych NoSQL.

  • ERDDAP™może pracować z Cassandrą v2 i v3 bez zmian lub różnic w konfiguracji. ZbadaliśmyCassandra v2 i v3 z Apache. Jest prawdopodobne, żeERDDAP™może również pracować z Cassandrą pobraną z DataStax.  
  • Na sierpień 2019 - maj 2021, mieliśmy problem z Cassandrą do pracy z AdoptOpenJdkJavav8. Wyrzucił wyjątek\ _ DOSTĘP\ _ WIOLACJA). Ale teraz (maj 2021 r.) , że problem zniknął: możemy z powodzeniem używać Cassandra v2.1.22 i AdoptOpenJdk jdk8u292-b10.  

Jedna tabela

Cassandra nie wspiera "łączenia" w taki sposób, jak w relacyjnych bazach danych. JedenERDDAP™EDDTableFromCassandra maps to one (być może podzbiór jednego) Stół Cassandra.

Cassandradatasets.xml

  • ERDDAP™idzie z CassandrąJavaKierowca, więc nie musisz go instalować oddzielnie.
  • Należy uważnie przeczytać wszystkie informacje dotyczące EDDTableFromCassandra. Niektóre szczegóły są bardzo ważne.
  • CassandraJavakierowca jest przeznaczony do pracy z Apache Cassandra (1, 2 +) oraz przedsiębiorstwo DataStax (3.1 +) . Jeśli używasz Apache Cassandra 1.2.x, musisz edytować plik cassandra.yaml dla każdego węzła, aby ustawić start\ _ native\ _ transport: true, a następnie ponownie uruchomić każdy węzeł.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić (zwłaszcza [<partycja KeySourceNames >] (# partitionkeysourcenames) ). Możesz zebrać większość informacji potrzebnych do stworzenia XML dla zbioru danych EDDTableFromCassandra, kontaktując się z administratorem Cassandry i przeszukując sieć.

GenerateDatasets Xml ma dwie specjalne opcje dla EDDTableFromCassandra:

  1. Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla przestrzeni klawiszy, program wyświetla listę przestrzeni klawiszy
  2. Jeśli wprowadzisz określoną przestrzeń klawiszową, a następnie wprowadź "!!! LISTA!!" (bez kwotowań) dla nazwy tabeli program wyświetla listę tabel w tej przestrzeni klawiszy i ich kolumnach.
Czułość przypadku
  • Case- niewrażliwy Keyspace i nazwy tabeli - Cassandra traktuje keyspace i nazwy stolików w sposób niewrażliwy. Z tego powodu nie wolno używać słowa zastrzeżonego (ale w innym przypadku) jako klawiatura Cassandra lub nazwa tabeli.
  • Niewrażliwe nazwy kolumn... Domyślnie Cassandra traktuje nazwy kolumn w nieczuły sposób. Jeśli użyjesz jednego z zastrzeżonych słów Cassandry jako nazwy kolumny (Proszę, nie!) , MUSISZ STOSOWAĆ
        <columnNameQuotes>"<columnNameQuotes>  

wdatasets.xmldla tego zbioru danych tak, że Cassandra iERDDAP™będzie traktować nazwy kolumn w sposób wrażliwy na sytuacje. Będzie to prawdopodobnie ogromny ból głowy dla Ciebie, ponieważ trudno jest określić wrażliwe na przypadek wersje nazw kolumn - Cassandra prawie zawsze wyświetla nazwy kolumn jako wszystkie małe, niezależnie od prawdziwego przypadku.

  • Należy ściśle współpracować z administratorem Cassandry, który może mieć odpowiednie doświadczenie. Jeśli zbiór danych nie zostanie wczytany, przeczytajkomunikat błęduOstrożnie, żeby dowiedzieć się dlaczego.  

Cassandra<połączenie Własność & gt;

Cassandra posiada właściwości połączeń, które można określić wdatasets.xml. Wiele z nich wpłynie na działanie Kasandry.ERDDAP™połączenie. Niestety, nieruchomości Cassandra muszą być ustawione programowo wJava, więcERDDAP™musi posiadać kod dla każdej nieruchomościERDDAP™wsparcie. ObecnieERDDAP™obsługuje te właściwości: (Pokazane wartości domyślne są tym, co widzimy. Domyślne wartości twojego systemu mogą być inne.)

  • Opcje ogólne
    <połączenie Nazwa własności = " kompresja "> brak|LZ4|snappy </ połączenie Własność > (case- insensitive, domyślny = brak)
    (Ogólne porady kompresji: użyj "brak", jeśli połączenie między Cassandrą iERDDAP™jest lokalny / szybki i używa 'LZ4' jeśli połączenie jest zdalne / wolne.)
    <połączenie Nazwa własności = " uwierzytelnianie "> nazwa użytkownika / hasło </ połączenie Własność > (To dosłownie'/')
    <połączenie Nazwa własności = " metryka "> prawda|false </ połączenie Własność > (2021-01-25 było domyślne = true, teraz ignorowane i zawsze fałszywe)
    <połączenie Nazwa własności = " port "> anInteger </ połączenie Własność > (Domyślny dla natywnego protokołu binarnego = 9042)
    <połączenie Nazwa własności = " ssl "> prawda|false </ połączenie Własność > (domyślnie = false)
    (Moja szybka próba użycia ssl nie powiodła się. Jeśli ci się uda, powiedz, jak to zrobiłeś.)
  • Opcje zapytania
    <połączenie Nazwa własności = " spójność Poziom "> wszystkie|wszystkie|each\ _ quorum|local\ _ one|local\ _ quorum|local\ _ serial|jeden|kworum|szeregowe|trzy|dwa </ połączenie Własność > (case- insensitive, default = ONE)
    <połączenie Nazwa własności = " fetchSize "> anInteger </ połączenie Własność > (domyślny = 5000)
    (Nie ustawiać fetchSize do mniejszej wartości.)
    <połączenie Nazwa własności = " Poziom spójności "> wszystkie|wszystkie|each\ _ quorum|local\ _ one|local\ _ quorum|local\ _ serial|jeden|kworum|szeregowe|trzy|dwa </ połączenie Własność > (case- niewrażliwe, domyślnie = SERIAL)
  • Opcje gniazda
    <połączenie Nazwa własności = " connectTimeoutMillis "> anInteger </ połączenie Własność > (domyślny = 5000)
    (Nie nastawiaj połączenia TimeoutMillis do mniejszej wartości.)
    <połączenie Nazwa własności = " keepAlive "> prawda|false </ połączenie Własność > <połączenie Nazwa własności = " readTimeoutMillis "> anInteger </ połączenie Własność > (Domyślny readTimeoutMillis Cassandry to 12000, aleERDDAP™zmienia wartość domyślną na 120000. Jeśli Cassandra rzuca readTimeout, zwiększenie to może nie pomóc, ponieważ Cassandra czasami rzuca je przed tym razem. Problem jest bardziej prawdopodobne, że są przechowywane zbyt dużo danych na partycję Kluczowa kombinacja.)
    <połączenie Nazwa własności = " receiveBufferSize "> anInteger </ połączenie Własność > (Nie jest jasne, jaki jest domyślny rozmiar bufora. Nie nastawiaj tego na małą wartość.)
    <połączenie Nazwa własności = " soLinger "> anInteger </ połączenie Własność > <połączenie Nazwa własności = " tcpNoDelay "> prawda|false </ połączenie Własność > (domyślny = null)

Jeśli musisz być w stanie ustawić inne właściwości połączenia, zobacz naszerozdział dotyczący uzyskania dodatkowego wsparcia.

Dla danego startu Tomcat, connectionProperties są używane tylko po raz pierwszy dla danego adresu Cassandra. Wszystkie przeładunki tego zbioru danych oraz wszystkie kolejne zbiory danych, które mają ten sam adres URL, będą korzystać z tych oryginalnych konektowProperties.

CQL

Język zapytań Cassandry (CQL) jest powierzchownie jak SQL, język zapytania używany przez tradycyjne bazy danych. PonieważOPeNDAPżądania danych tabelarycznych zostały zaprojektowane tak, aby naśladować żądania SQL danych tabelarycznych, jest to możliwe dlaERDDAP™do konwersji wniosków o dane tabelaryczne na CQL Bound / PreparedReclaments.ERDDAP™loguje oświadczenie wlog.txtjako oświadczenie w formie tekstu: Tekst stanu
Wersja oświadczenia będzie reprezentacją tekstu i będzie miała tylko "?", gdzie zostaną umieszczone wartości ograniczające.  
Nie takie proste... Niestety, CQL ma wiele ograniczeń, na które kolumny mogą być zapytane, z jakimi typami ograniczeń, na przykład, kolumny klawiszy partycji mogą być ograniczone przez = i IN, więcERDDAP™wysyła Cassandrze pewne ograniczenia i stosuje wszystkie ograniczenia po otrzymaniu danych od Cassandry. Aby pomócERDDAP™radzić sobie skutecznie z Cassandra, należy określić [<partycja KeySourceNames >] (# partitionkeysourcenames) , [<ClusterColumnSourceNames >] (# clustercolumnsourcenames) I...<indexColumnSourceNames >] (# indexColumnsourcenames) wdatasets.xmldla tego zbioru danych. Są to najważniejsze sposoby, aby pomócERDDAP™efektywna współpraca z Cassandrą. Jeśli nie powieszERDDAP™te informacje, zestaw danych będzie boleśnie powolny wERDDAP™i wykorzystać tony zasobów Cassandra.  

<partycja KeySourceNames & gt;

Ponieważ klucze partycji odgrywają centralną rolę w stołach Cassandra,ERDDAP™muszą wiedziećsourceNames oraz, w stosownych przypadkach, inne informacje dotyczące sposobu współpracy z nimi.

  • MUSISZ podać oddzieloną comma- listę nazw kolumn źródłowych partycjidatasets.xmlprzez<partycja KeySourceNames >. Prosty przykład:
        <partitionKeySourceNames>station, deviceid<partitionKeySourceNames>  

Bardziej złożony przykład,

        <partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
  • TimeStamp Partition Keys... Jeśli jedna z kolumn klawiszy partycji jest kolumną timestamp, która posiada wersję coarser innej kolumny timestamp, należy podać to poprzez partytionKeySourcName / otherColumnSourceName /time\_precision
    gdzietime\_precisionjest jednym ztime\_precisionstruny stosowane gdzie indziej wERDDAP. Ścieżka Z wtime\_precisionstring jest domyślnym, więc nie ma znaczenia, czytime\_precisionciąg kończy się na Z lub nie. Na przykład:ERDDAP™będzie interpretować datę / sampletime / 1970- 01- 01 jako "Ograniczenia dotyczące daty mogą być konstruowane z ograniczeń dotyczących czasu próbnego za pomocą tegotime\_precision". Rzeczywista konwersja ograniczeń jest bardziej złożona, ale jest to przegląd. Używaj tego, gdy jest to istotne. UmożliwiaERDDAP™do efektywnej pracy z Cassandrą. Jeśli ten związek pomiędzy kolumnami istnieje w stole Cassandra i nie powieszERDDAP™, zestaw danych będzie boleśnie powolny wERDDAP™i wykorzystać tony zasobów Cassandra.
  • Pojedyncze Klucze partycji wartości... Jeśli chceszERDDAP™zestaw danych do pracy tylko z jedną wartością jednego klucza partycji, określić partitionKeySourceName = wartość . Nie używaj cytatów dla kolumny liczbowej, na przykład deviceid = 1007 Użyj cytatów dla kolumny String, na przykład, stationid = "Point Pinos"
  • Domyślna kolejność sortowania: Kolejność klawisza partycji<dataVariable>datasets.xmlokreśla domyślną kolejność sortowania wyników z Cassandry. Oczywiście użytkownicy mogą poprosić o inny sortowanie dla danego zestawu wyników poprzez przypisanie &orderBy (" Lista zmiennych oddzielona od comma- ") do końca ich zapytania.
  • Domyślnie, Cassandra iERDDAP™traktuj nazwy kolumn w sposób niewrażliwy. But if you setColumnNameQuotesdo ",ERDDAP™będzie traktować nazwy kolumn Cassandra w sposób wrażliwy na wszelki wypadek.  

<partycja KeyCSV & gt;

Jeśli jest to określone,ERDDAP™użyje go zamiast poprosić Cassandrę o partycję Kluczowe informacje przy każdym ponownym załadowaniu zbioru danych. To zawiera listę odrębnych wartości klawiszy partycji, w kolejności, w jakiej będą używane. Czasy muszą być określone jako sekundy od 1970- 01-01T00: 00: 00Z. Ale istnieją również dwa specjalne alternatywne sposoby określenia czasu (każdy zakodowany jako łańcuch) :

  1. czas (aISO8601 Czas) (MOŻE być zakodowane jako ciąg znaków)
  2. "razy (anISO8601StartTime, strideSeconds, stopTime) " (MUSI być zakodowane jako łańcuch)
    stop Czas może być ISO8601 Czas lub "now-czas nUnits (np. ",now-3 minuty ") . stop Czas nie musi być dokładnie dopasowany do początku Time + x strideSeconds. Wiersz z a razy () wartość zostaje rozszerzona do wielu wierszy przed każdym zapytaniem, więc lista partycji Klucze mogą być zawsze idealnie ułożone na datę. Na przykład:
    <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>

rozszerza do tej tabeli kombinacji klawiszy partycji:

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

<clusterColumnSourceNames & gt;

Cassandra akceptuje ograniczenia podobne do SQL na kolumnach klastrów, które są kolumnami, które stanowią drugą część klucza podstawowego (po klawiszu partycji (s) ) . Tak więc ważne jest, aby zidentyfikować te kolumny poprzez<clusterColumnSourceNames >. Umożliwia toERDDAP™do efektywnej pracy z Cassandrą. Jeśli są kolumny klastrów i nie powieszERDDAP, zestaw danych będzie boleśnie powolny wERDDAP™i wykorzystać tony zasobów Cassandra.

  • Na przykład:<ClusterColumnSourceNames > myClusterColumn1, myClusterColumn2 </ clusterColumnSourceNames >
  • Jeśli tabela Cassandra nie ma kolumn klastrów, to albo nie należy określać<clusterColumnSourceNames >, lub określić go bez wartości.
  • Domyślnie, Cassandra iERDDAP™traktuj nazwy kolumn w sposób niewrażliwy. But if you setColumnNameQuotesdo ",ERDDAP™będzie traktować nazwy kolumn Cassandra w sposób wrażliwy na sprawy.  

<indexColumnSourceNames & gt;

Cassandra akceptuje'='ograniczenia dotyczące wtórnych kolumn indeksowych, które są kolumnami, dla których wyraźnie utworzono indeksy za pośrednictwem

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

(Tak, nawiasy są wymagane.)
Jest więc bardzo przydatne, jeśli zidentyfikujesz te kolumny poprzez<indexColumnSourceNames >. Umożliwia toERDDAP™do efektywnej pracy z Cassandrą. Jeśli są kolumny indeksowe i nie powieszERDDAP, niektóre pytania będą niepotrzebne, boleśnie powolne wERDDAP™i wykorzystać tony zasobów Cassandra.

  • Na przykład:<indexColumnSourceNames > myIndexColumn1, myIndexColumn2 </ indexColumnSourceNames >
  • Jeśli tabela Cassandra nie ma kolumn indeksowych, to nie należy określać<indexColumnSourceNames >, lub określić go bez wartości.
  • Uwaga: indeksy Cassandry nie są jak indeksy bazy danych. Cassandra indeksy tylko pomóc z'='ograniczenia. I są tylkozalecanedla kolumn, które mają znacznie mniejsze wartości odrębne niż wartości całkowite.
  • Domyślnie, Cassandra iERDDAP™traktuj nazwy kolumn w sposób niewrażliwy. But if you setColumnNameQuotesdo ",ERDDAP™będzie traktować nazwy kolumn Cassandra w sposób wrażliwy na sprawy.  

<maxRequestFraction & gt;

KiedyERDDAP™ (do) ładuje zestaw danych,ERDDAP™dostaje od Cassandra listę różnych kombinacji klawiszy partycji. Dla ogromnego zbioru danych, liczba kombinacji będzie ogromna. Jeśli chcesz zapobiec żądaniu przez użytkowników większości lub wszystkich zbiorów danych (lub nawet wniosek, który pytaERDDAP™aby pobrać większość lub wszystkie dane w celu dalszego filtrowania) Możesz powiedziećERDDAP™tylko po to, aby umożliwić wnioski, które zmniejszają liczbę kombinacji o pewną kwotę poprzez<maxRequestFraction >, która jest liczbą zmiennoprzecinkową pomiędzy 1e- 10 (co oznacza, że wniosek nie może potrzebować więcej niż 1 połączenie na miliard) i 1 (domyślny, co oznacza, że wniosek może być dla całego zbioru danych) . Na przykład, jeśli zbiór danych posiada 10000 oddzielnych kombinacji klawiszy partycji i maxRequestFraction jest ustawiony na 0.1, następnie wnioski wymagające danych z 1001 lub więcej kombinacji wygenerują komunikat błędu, ale wnioski, które wymagają danych z 1000 lub mniej kombinacji będą dozwolone.

Generalnie, im większy zestaw danych, tym niższy należy ustawić<maxRequestFraction >. Więc możecie ustawić to na 1 dla małego zbioru danych, 0.1 dla średniego zbioru danych, 0.01 dla dużego zbioru danych i 0.0001 dla dużego zbioru danych.

To podejście jest dalekie od ideału. Doprowadzi to do odrzucenia niektórych uzasadnionych wniosków i do dopuszczenia niektórych zbyt dużych wniosków. Ale jest to trudny problem i to rozwiązanie jest o wiele lepsze niż nic.

CassandrasubsetVariables

Podobnie jak w przypadku innych zbiorów danych EDDTable, można podać oddzieloną od commaa listę<dataVariable>destinationNames w atrybucie globalnym o nazwie "subsetVariables"identyfikacja zmiennych o ograniczonej liczbie wartości. Następnie zbiór danych będzie miał stronę .subset i pokaże listy różnych wartości dla tych zmiennych na listach rozwijanych na wielu stronach internetowych.

Włączając tylko zmienne klawiszy partycji i kolumny statyczne na liście jest STRONGLY ENCOUrazówka. Cassandra będzie w stanie wygenerować listę różnych kombinacji bardzo szybko i łatwo za każdym razem, gdy zestaw danych jest przeładowany. Jednym z wyjątków są klawisze partycji timestamp, które są gruboziarnistymi wersjami innej kolumny timestamp -- prawdopodobnie najlepiej jest pozostawić je poza listąsubsetVariablesponieważ istnieje duża liczba wartości i nie są one bardzo przydatne dla użytkowników.

Jeśli na liście znajdziesz klucz niepartycyjny, niestatyczne zmienne, prawdopodobnie będzie to Bardzo często kalkulacyjnie drogie dla Cassandry za każdym razem, gdy zestaw danych jest przeładowany, ponieważERDDAP™musi przejrzeć każdy wiersz zbioru danych, aby wygenerować informacje. Zapytanie może się nie udać. Z wyjątkiem bardzo małych zbiorów danych, to jest STRONGLY ZAGROŻONE.

Cassandra DataTypes

Ponieważ istnieje pewna dwuznaczność,Typy danych Cassandramapa, do którejERDDAP™typy danych, trzeba określić [<Data Typ >] (# datatype) znacznik dla każdego [<dataVariable>] (# datavariable) powiedziećERDDAP™jakiego typu danych należy używać. NormaERDDAP™dane Rodzaje (oraz najczęściej stosowane typy danych Cassandra) są:

  • boolean (boolean) , któreERDDAP™Następnie przechowuje jako bajty
  • bajt (int, jeśli zakres wynosi od -128 do 127)
  • krótkie (int, jeśli zakres wynosi -32768 do 32767)
  • int (int, counter?, varint?, jeśli zakres wynosi -2147483648 do 2147483647)
  • długi (bigint, counter?, varint?, jeśli zakres wynosi -9223372036854775808 do 9223372036854775807)
  • float (float)
  • podwójne (podwójne, dziesiętne (z możliwością utraty precyzji) , timestamp)
  • char (ascii lub tekst, jeśli nigdy nie mają więcej niż 1 znak)
  • String (ascii, text, varchar, inet, uuid, timeuuid, blob, map, set, list?)

Cassandraznacznik czasujest szczególnym przypadkiem:ERDDAPpodwójne dane Typ.

Jeśli podasz String dataType wERDDAP™dla mapy Cassandra, zestawu lub listy, mapa, zestaw lub lista w każdym wierszu Cassandra zostanie zamieniona na pojedynczy ciąg w jednym wierszu wERDDAP™stół.ERDDAP™posiada alternatywny system wykazów; zob. poniżej.

typ Listy...ERDDAP[<Data Typ >] (# datatype) tag dla CassandrydataVariables może obejmować regularneERDDAP™dane Rodzaje (patrz powyżej) plus kilka specjalnych typów danych, które mogą być używane do kolumn listy Cassandra: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, FloatList, DoubleList, CharList, StringList. Gdy jedna z tych kolumn listy znajduje się w wynikach przekazywanych doERDDAP™, każdy wiersz danych źródłowych zostanie rozszerzony do listy. rozmiar () wiersze danych wERDDAP; proste dane Rodzaje (na przykład, int) w tym wierszu danych źródłowych zostanie powielona lista. rozmiar () razy. Jeżeli wyniki zawierają więcej niż jedną zmienną listy, wszystkie listy w danym wierszu danych MUSI mieć ten sam rozmiar i MUSI być "równoległymi" listami, lubERDDAP™wygeneruje komunikat błędu. Na przykład, dla pomiarów prądów z ADCP, głębokość\[0\], uCurrent\[0\], vCurrent\[0\], i zCurrent\[0\]są powiązane, oraz głębokość\[1\], uCurrent\[1\], vCurrent\[1\], i zCurrent\[1\]Wszystkie są powiązane... Alternatywnie, jeśli nie chceszERDDAP™do rozszerzenia listy do wielu wierszy wERDDAP™tabeli, określić String jakodataVariabledane Wpisz więc cała lista będzie reprezentowana jako jeden String w jednym wierszuERDDAP.

Cassandra TimeStamp Data

Dane Cassandry są zawsze znane ze stref czasowych. Jeśli wprowadzisz dane znacznika czasu bez podania strefy czasu, Cassandra zakłada, że znacznik czasu używa lokalnej strefy czasowej.

ERDDAP™obsługuje dane znacznika czasu i zawsze przedstawia dane wZulu/ Strefa czasowa GMT. Więc jeśli wprowadzisz dane znacznika czasu w Cassandrze używając strefy czasowej innej niżZulu/ GMT, pamiętaj, że musisz wykonać wszystkie pytania dotyczące danych znacznika czasu wERDDAP™stosowaniaZulu/ Strefa czasowa GMT. Więc nie zdziw się, gdy wartości znacznika czasu, które pochodzą zERDDAPsą przesunięte o kilka godzin z powodu zmiany strefy czasowej z lokalnego doZuluCzas GMT.

  • WERDDAPjestdatasets.xml, w<dataVariable> tag dla zmiennej timestamp, set
          <dataType>double</dataType>  

oraz<addAttributes> set

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Sugestia: Jeśli dane są zakresem czasowym, warto mieć wartości znacznika czasu odnoszą się do środka dorozumianego zakresu czasowego (na przykład, południe) . Na przykład, jeśli użytkownik posiada dane dla 2010- 03- 26T13: 00Z z innego zbioru danych i chce najbliższe dane z tego zbioru danych Cassandra, które mają dane dla każdego dnia, to dane dla 2010- 03- 26T12: 00Z (reprezentowanie danych Cassandry za ten dzień) jest oczywiście najlepszy (w przeciwieństwie do północy przed lub po, gdzie jest mniej oczywiste, co jest najlepsze) .
  • ERDDAP™ma przydatność doPrzelicz licznik Czas do / z czasu smyczkowego.
  • PatrzJakERDDAP™Transakcje z czasem.  

Naszyjniki Integer

Cassandra wspiera kadłuby w Cassandra int (ERDDAP™int) i bigint (ERDDAP™długi) kolumny, aleERDDAP™nie obsługuje prawdziwych jąder dla żadnego typu danych całkowitych. Domyślnie, głowice liczb całkowitych Cassandra zostaną przekształcone wERDDAP™do 2147483647 dla kolumn int lub 9223372036854775807 dla kolumn długich. Pojawią się one jako "NaN" w niektórych typach plików wyjściowych tekstowych (na przykład, .csv) "," w innych typach tekstowych plików wyjściowych (na przykład:.htmlTable) oraz szczegółowy numer (2147483647 dla brakujących wartości int) w innych rodzajach plików (na przykład, pliki binarne jak.nci maty) . Użytkownik może szukać wierszy danych z tego typu brakującą wartością, odnosząc się do "NaN", np.

Jeśli użyjesz innej wartości całkowitej, aby wskazać brakujące wartości w tabeli Cassandra, proszę zidentyfikować tę wartość wdatasets.xml:

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

W przypadku kolumn punktu zmiennoprzecinkowego Cassandra, głowice przeliczane są na NaNs wERDDAP. Dla typów danych Cassandra, które są konwertowane na Strings wERDDAP™, czaszki zostają zamienione na puste Strings. To nie powinien być problem.

"UWAGA: Ponowne przygotowanie już przygotowanego zapytania"

  • "UWAGA: Ponowne przygotowanie już przygotowanego zapytania" w tomcat / logi / katalina. out (lub jakiś inny plik dziennika Tomcat)
    Dokumentacja Cassandry mówi, że jest problem, jeśli to samo pytanie jest wykonane w przedterminowym oświadczeniu dwukrotnie (lub więcej) . (Widzisz to?Raport o błędzie.) By uniknąć wściekłości Cassandry,ERDDAP™Ukrywa wszystkie PreparedStavements, aby móc je ponownie wykorzystać. To cache jest stracone jeśli / kiedy Tomcat /ERDDAP™jest ponownie uruchomiony, ale myślę, że jest to w porządku, ponieważ prepared Oświadczenia są związane z danej sesji (pomiędzyJavai Cassandra) Który również jest stracony. Więc możecie zobaczyć te wiadomości. Nie znam innego rozwiązania. Na szczęście to ostrzeżenie, a nie błąd. (Chociaż Cassandra grozi, że może to prowadzić do problemów z wydajnością) .

Cassandra twierdzi, że wstępne oświadczenia są dobre na zawsze, więcERDDAPPreparedReferencje nie powinny nigdy być nieaktualne. Jeśli to nie jest prawda, i masz błędy o niektórych PreparedReclaments jest out- of- date / niepoprawny, to musisz ponownie uruchomićERDDAP™do oczyszczeniaERDDAPW magazynie PreparedStavements.

Bezpieczeństwo Cassandry

PatrzZabezpieczenie Cassandry

Pracując z Cassandrą, musisz robić wszystko tak bezpiecznie i bezpiecznie, jak to możliwe, aby nie dopuścić złośliwego użytkownika do uszkodzenia Cassandry lub uzyskania dostępu do danych, do których nie powinni mieć dostępu.ERDDAP™próbuje robić wszystko w bezpieczny sposób.

  • Zachęcamy do założeniaERDDAP™do połączenia z Cassandra jako użytkownik Cassandra, który ma tylko dostęp do istotne tabela (s) i ma tylko uprawnienia do read.
  • Zachęcamy do ustawienia połączenia zERDDAP™do Cassandry tak, że
    • zawsze używa SSL,
    • tylko pozwala na połączenia z jednego adresu IP (lub jeden blok adresów) i od jednegoERDDAP™użytkownik, oraz
    • Przenosi tylko hasła w postaci zakodowanej MD5.
  • \[ZNANY PROBLEM\]Właściwości połączeń (Łącznie z hasłem!) są przechowywane jako zwykły tekst wdatasets.xml. Nie znaleźliśmy sposobu, aby pozwolić administratorowi wprowadzić hasło Cassandra podczasERDDAPStartup w Tomcat (który występuje bez wejścia użytkownika) , więc hasło musi być dostępne w pliku. Aby uczynić to bardziej bezpiecznym:
    • Ty (doERDDAP™administrator) powinien być właścicielemdatasets.xmli mieć dostęp do READ i WRITE.
    • Zrobić grupę, która zawiera tylko użytkownika = tomcat. Użyj chgrp, aby grupadatasets.xmlZ przywilejami do czytania.
    • Użyj chmod do przypisania uprawnień o- rwx (brak dostępu do read lub WRITE dla "innych" użytkowników) zamiastdatasets.xml.
  • KiedyERDDAP™, hasło i inne właściwości połączenia są przechowywane w "prywatne"Javazmienne.
  • Wnioski od klientów są rozpatrywane i sprawdzane pod kątem ważności przed wygenerowaniem wniosków CQL dla Cassandra.
  • Wnioski do Cassandry są składane z CQL Bound / PreparedStavements, aby zapobiec CQL wstrzyknięcia. W każdym razie, Cassandra jest z natury mniej podatna na CQL wstrzyknięcia niż tradycyjne bazy danych sąWstrzyknięcie SQL.  

Cassandra Speed

Cassandra może być szybka lub powolna. Jest kilka rzeczy, które można zrobić, aby to szybko:

  • Ogólnie - Charakter CQL jest taki, że pytania sąZgłoszenie. Określają, czego chce użytkownik. Nie zawierają specyfikacji ani wskazówek dotyczących sposobu obsługi lub optymalizacji zapytania. Więc nie ma mowyERDDAP™aby wygenerować zapytanie w taki sposób, że pomaga Cassandra zoptymalizować zapytanie (lub w jakikolwiek sposób określa sposób obsługi zapytania) . Ogólnie rzecz biorąc, to administrator Cassandry musi wszystko ustawić. (na przykład indeksy) optymalizacji niektórych rodzajów zapytań.  
  • Określanie kolumn znacznika czasu, które są związane z klawiszami partycji znacznika czasu za pomocą [<partycja KeySourceNames >] (# partitionkeysourcenames) jest najważniejszym sposobem, aby pomócERDDAP™efektywna współpraca z Cassandrą. Jeśli ten związek istnieje w stole Cassandra i nie powieszERDDAP™, zestaw danych będzie boleśnie powolny wERDDAP™i wykorzystać tony zasobów Cassandra.  
  • Określanie kolumn klastra poprzez [<ClusterColumnSourceNames >] (# clustercolumnsourcenames) jest drugim najważniejszym sposobem, aby pomócERDDAP™efektywna współpraca z Cassandrą. Jeśli są kolumny klastrów i nie powieszERDDAP, duży podzbiór możliwych zapytań o dane będzie niepotrzebnie, boleśnie powolne wERDDAP™i wykorzystać tony zasobów Cassandra.  
  • MarkaWskaźnikidla Zmiennych Powszechnych Wytrzymałych -- Można przyspieszyć kilka zapytań poprzez tworzenie indeksów kolumn Cassandra, które często są ograniczone ograniczeniami "=".

Cassandra nie może tworzyć indeksów dla list, zestawów czy map kolumn.

  • Określanie kolumn indeksów poprzez [<indexColumnSourceNames >] (# indexColumnsourcenames) jest ważnym sposobem, aby pomócERDDAP™efektywna współpraca z Cassandrą. Jeśli są kolumny indeksowe i nie powieszERDDAP, niektóre pytania o dane będą niepotrzebnie, boleśnie powolne wERDDAP™i wykorzystać tony zasobów Cassandra.  

Cassandra Stats

  • "Statystyki Cassandra" Wiadomości diagnostyczne-- Dla każdegoERDDAP™zapytanie użytkownika do zbioru danych Cassandra,ERDDAP™wydrukuje linię w pliku dziennika, bigParentDirectory / logs / log.txt, z niektórymi statystykami związanymi z zapytaniem, na przykład,
        \\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405  

Używając liczb w powyższym przykładzie, oznacza to:

  • KiedyERDDAP™ostatni (do) załadowany ten zestaw danych, Cassandra powiedziałERDDAP™że było 10000 różnych kombinacji klawiszy partycji.ERDDAP™buforowane wszystkie różne kombinacje w pliku.
  • Ze względu na ograniczenia użytkownika,ERDDAP™zidentyfikowane 2 kombinacje z 10000, które mogą mieć pożądane dane. Więc,ERDDAP™będzie wykonać 2 połączenia do Cassandra, jeden dla każdej kombinacji klawiszy partycji. (Tego potrzebuje Cassandra.) Oczywiście, jest to kłopotliwe, jeśli duży zestaw danych ma dużą liczbę kombinacji klawiszy partycji i dane żądanie nie drastycznie to zmniejsza. Można wymagać, aby każde żądanie zmniejszyć przestrzeń klucza przez ustawienie [<maxRequestFraction >] (# maxrequestfraction) . Tutaj, 2 / 10000 = 2e-4, co jest mniejsze niż maxRequestFraction (0, 1) Więc wniosek został dopuszczony.
  • Po zastosowaniu ograniczeń na klawiszach partycji,kolumny klastróworazkolumny indeksowektóre zostały wysłane przezERDDAP™, Cassandra zwrócił 1200 wierszy danych doERDDAP™w ResultSecie.
  • Wynik Zestaw musiał miećdane Typ = sometyp Listakolumny (ze średnią 10 pozycji na listę) , ponieważERDDAP™rozszerzył 1200 wierszy z Cassandry do 12000 wierszy wERDDAP.
  • ERDDAP™zawsze stosuje wszystkie ograniczenia użytkownika do danych z Cassandry. W tym przypadku ograniczenia, którymi nie zajmowała się Cassandra, zmniejszyły liczbę wierszy do 7405. To jest liczba wierszy wysłanych do użytkownika.

Najważniejszym zastosowaniem tych komunikatów diagnostycznych jest upewnić się, żeERDDAP™robi to, co myślisz, że robi. Jeśli nie jest (Na przykład, czy nie zmniejsza to liczby różnych kombinacji zgodnie z oczekiwaniami?) Następnie możesz użyć informacji, aby dowiedzieć się, co jest nie tak.  

  • Badania i eksperymenty, aby znaleźć i ustawić lepiej [<ConnectionProperty >] (# cassandra- connectionproperty) .  
  • Sprawdzić prędkość połączenia sieciowego między Cassandrą iERDDAP. Jeśli połączenie jest wolne, sprawdź, czy można go poprawić. Najlepsza sytuacja jest kiedyERDDAP™działa na serwerze dołączonym do tego samego (szybko) przełącz jako serwer obsługujący węzeł Cassandra, z którym się łączysz.  
  • Cierpliwości. Przeczytaj uważnie te informacje tutaj i w dokumentacji Cassandry. Eksperyment. Sprawdź swoją pracę. Jeśli Cassandra...ERDDAP™połączenie jest jeszcze wolniejsze niż się spodziewasz, proszę dołączyć schemat tabeli Cassandra iERDDAP™częśćdatasets.xmli zobaczyć naszerozdział dotyczący uzyskania dodatkowego wsparcia.  
  • Jeśli wszystko zawiedzie, rozważyć przechowywanie danych w zbiorzeNetCDFv3.ncpliki (szczególnie.ncplików, które używająCF Geometrie do pobierania próbek dyskretnych (DSG) Kontyguous Ragged Struktury danych Array i tak mogą być obsługiwane zERDDAPjestPliki EDDTableFromNcCFFiles) . Jeśli są logicznie zorganizowane (każdy z danymi dla kawałka przestrzeni i czasu) ,ERDDAP™może pobrać dane z nich bardzo szybko.  

szkielet EDDTableFromCassandra XML

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

EDDTableFromDapSequence

EDDTableFromDapSequence obsługuje zmienne w sekwencji 1- i 2- poziomu odDAPserwery takie jakDAPPER (był w https://www.pmel.noaa.gov/epic/software/dapper/ , teraz przerwany) .

  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić. Możesz zebrać informacje, których potrzebujesz, patrząc na pliki DDS i DAS źródłowe w przeglądarce (dodając .das i .dds dosourceUrl(przykładem był https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds ).

  • Zmienna jest wDAPsekwencja, jeżeli reakcja .dds wskazuje, że struktura danych trzymająca zmienną jest "sekwencją" (nieczuły przypadek) .

  • W niektórych przypadkach, zobaczycie sekwencję w ciągu sekwencji, sekwencję 2-poziomową -- EDDTableFromDapSequence również się tym zajmuje.

szkielet EDDTableFromDapSequence 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 obsługuje dane z jednej tabeli relacyjnej bazy danych lubwidok.

Jedna tabela lub widok

Jeśli dane, które chcesz podać są w dwóch lub więcej tabelach (i tym samym potrzebuje JOIN do uzyskiwania danych z obu tabel jednocześnie) Musisz zrobićdenormalizowane (już połączone) tabeli lubwidok ze wszystkimi danymi, które chcesz udostępnić jako jeden zestaw danych wERDDAP.

Dla dużych, złożonych baz danych, może mieć sens, aby oddzielić kilka fragmentów jako denormalizowanego tabel, każdy z innego rodzaju danych, które staną się oddzielne zbiory danych wERDDAP.

Dokonywanie denormalizacji tabeli do stosowania wERDDAP™Dla ciebie brzmi to jak szalony pomysł. Proszę, zaufaj nam. Istnieje kilka powodów, dla którychERDDAP™działa z denormalizowanymi stołami:

  • To znacznie łatwiejsze dla użytkowników. KiedyERDDAP™prezentuje zbiór danych jako jeden, prosty, denormalizowany, pojedyncza tabela, jest bardzo łatwy do zrozumienia danych. Większość użytkowników nigdy nie słyszała o znormalizowanych tabelach, a bardzo niewielu rozumie klawisze, klucze zagraniczne lub przyłącza do tabeli, i prawie na pewno nie znają szczegółów różnych typów połączeń, lub jak określić SQL do łączenia (lub wiele połączeń) prawidłowo. Korzystanie z stołu denormalizowanego unika wszystkich tych problemów. Ten sam powód uzasadnia użycie denormalizowanej tabeli do prezentacji zbioru danychERDDAP™użytkowników.  
  • Stoły znormalizowane (wiele tabel związanych z kolumnami kluczy) są świetne do przechowywania danych w bazie danych. Ale nawet w SQL, wynik, który jest zwracany użytkownikowi jest denormalizacją (połączone) stół. Wydaje się więc rozsądne, aby przedstawić zbiór danych użytkownikom jako ogromną, denormalizowaną, pojedynczą tabelę, z której mogą następnie zażądać podzbiorów (np. pokaż mi wiersze tabeli, gdzie temperatura > 30) .  
  • Można dokonać zmian dlaERDDAP™bez zmieniania stolików. ERDDAP™ma kilka wymagań, które mogą być różne od sposobu skonfigurowania bazy danych. Na przykład:ERDDAP™wymaga, aby dane znacznika czasu były przechowywane w polach 'znacznik czasu ze strefą czasową'. Poprzez stworzenie oddzielnej tabeli / widoku dlaERDDAP™, można dokonać tych zmian, gdy zrobić denormalizowanego tabeliERDDAP. Tak więc, nie musisz wprowadzać żadnych zmian do swoich tabel.  
  • ERDDAP™odtworzy część struktury znormalizowanych tabel. Możesz określić, które kolumny danych pochodzą z tabel 'outdoor' i dlatego mają ograniczoną liczbę odrębnych wartości.ERDDAP™będzie zbierać wszystkie różne kombinacje wartości w tych kolumnach i przedstawić je użytkownikom na specjalne. subset strony internetowej, która pomaga użytkownikom szybko wybrać podzbiory zbioru danych. Poszczególne wartości dla każdej kolumny są również pokazane na listach rozwijanych na innych stronach zbioru danych.  
  • Zdenormalizowane tabeli sprawia, że dane hand- off od Ciebie doERDDAPAdministrator łatwo. Jesteś ekspertem w tym zbiorze danych, więc to ma sens, że podejmujesz decyzje, które tabele i które kolumny dołączyć i jak do nich dołączyć. Więc nie musisz nam dawać (lub co gorsza, użytkownicy końcowi) kilka tabel i szczegółowych instrukcji, jak do nich dołączyć, wystarczy dać nam dostęp do stołu denormalizowanego.  
  • Zdenormalizowana tabela umożliwia efektywny dostęp do danych. Forma denormalna jest zwykle szybsza do uzyskania dostępu niż znormalizowana forma. Przystąpienie może być powolne. Wiele połączeń może być bardzo powolnych.  

Aby uzyskać dane z dwóch lub więcej tabel w bazie danychERDDAP™, istnieją trzy opcje:  

  • Zalecane rozwiązanie: Możesz utworzyć plik z danymi z tabeli denormalizowanej. Jeśli zbiór danych jest ogromny, wtedy ma sens tworzenie kilku plików, każdy z spójnym podzbiorem zdenormalizowanej tabeli (na przykład dane z mniejszego zakresu czasowego) .

Największą zaletą jest to, żeERDDAP™będzie w stanie poradzić sobie z żądaniami użytkowników dla danych bez dalszych wysiłków ze strony bazy danych. Więc...ERDDAP™nie będzie ciężarem dla twojej bazy danych ani zagrożeniem bezpieczeństwa. Jest to najlepsza opcja w prawie wszystkich okolicznościach, ponieważERDDAP™może zazwyczaj uzyskać dane z plików szybciej niż z bazy danych (jeśli przekonwertujemy pliki .csv do.ncPliki CF) . (Jednym z powodów jest to, żeERDDAP+ pliki są systemem tylko do odczytu i nie muszą zajmować się dokonywaniem zmian podczas dostarczaniaACID (Atrakcyjność, spójność, izolacja, trwałość) .) Ponadto, prawdopodobnie nie będziesz potrzebował oddzielnego serwera, ponieważ możemy przechowywać dane na jednym z naszych Renee i uzyskać do niego dostęp z istniejącymERDDAP™na istniejącym serwerze.

  • Opcja: Utworzyłeś nową bazę danych na innym komputerze z tylko denormalizowanym stołem. Ponieważ ta baza danych może być bezpłatną i otwartą bazą danych, jak MariaDB, MySQL i PostgreSQL, opcja ta nie musi wiele kosztować.

Największą zaletą jest to, żeERDDAP™będzie w stanie obsłużyć żądania użytkowników dotyczące danych bez dalszych wysiłków ze strony aktualnej bazy danych. Więc...ERDDAP™Nie będzie ciężarem dla twojej bazy danych. To również eliminuje wiele problemów w zakresie bezpieczeństwa, ponieważERDDAP™nie będzie miał dostępu do aktualnej bazy danych.

  • Wariant zniechęcony: Możemy się połączyć.ERDDAP™do twojej bazy danych. Aby to zrobić, musisz:

    • Utwórz oddzielną tabelę lub widok z denormalizowaną tabelą danych.
    • Utwórz użytkownika "erddap", który ma dostęp tylko do tabeli denormalizowanej (s) .  

Jest to opcja, jeśli dane zmieniają się bardzo często i chcesz daćERDDAP™użytkownicy natychmiastowy dostęp do tych zmian; jednak, nawet tak, może mieć sens korzystanie z opcji pliku powyżej i okresowo (co 30 minut?) zastąpić plik zawierający dzisiejsze dane. Ogromne wady tego podejścia są takie, żeERDDAP™prośby użytkowników prawdopodobnie umieścić nieznośnie duże obciążenie na swojej bazie danych i żeERDDAP™połączenie jest zagrożeniem bezpieczeństwa (chociaż możemy zminimalizować / zarządzać ryzykiem) .

Dokonywanie denormalizacji tabeli lub widokuERDDAP™jest dobrą okazją do dokonania kilku zmian, któreERDDAP™potrzebuje, w sposób, który nie wpływa na oryginalne tabele:

  • Zmień datę i znacznik czasu pól / kolumn, aby użyć dataType, który wywołuje Postgresznacznik czasu ze strefą czasową (lub odpowiednik w bazie danych) . Znaczniki czasu bez informacji o strefie czasowej nie działają prawidłowo wERDDAP.
  • Zrób indeksy dla kolumn, które użytkownicy często wyszukują.
  • Bądź bardzo świadomyprzypadek nazw pól / kolumn (na przykład, używać wszystkich małych przypadków) kiedy je piszesz.
  • Nie używaj słów zarezerwowanych dla tabeli i nazw pól / kolumn.

Jeśli potrzebujesz pomocy przy tworzeniu zdenormalizowanej tabeli lub widoku, skontaktuj się z administratorem bazy danych. Jeśli chcesz porozmawiać o tym całym podejściu lub strategii, jak najlepiej to zrobić, proszę e-mail Chris. John w Noa.gov.

baza danych wdatasets.xml

Trudno jest stworzyć właściwedatasets.xmlinformacje potrzebne doERDDAP™ustanowienie połączenia z bazą danych. Cierpliwości. Bądź metodyczny.

  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

GenerateDatasets Xml ma trzy specjalne opcje dla EDDTableFromDatabase:

  1. Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla nazwy katalogu program wyświetla listę nazw katalogów.
  2. Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla nazwy schematu program wyświetla listę nazw schematów.
  3. Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla nazwy tablename program wyświetla listę tabel i ich kolumn. Pierwszy wpis "!!!! LISTA!!!", który robisz jest tym, który będzie używany.
  • Należy uważnie przeczytać wszystkie informacje dotyczące EDDTableFromDatabase.
  • Możesz zebrać większość informacji potrzebnych do stworzenia XML dla zbioru danych EDDTableFromDatabase poprzez skontaktowanie się z administratorem bazy danych i przeszukiwanie sieci.
  • Chociaż bazy danych często traktują nazwy kolumn i nazw tabel w sposób niewrażliwy, są one wrażliwe w przypadkuERDDAP. Więc jeśli komunikat błędu z bazy danych mówi, że nazwa kolumny jest nieznana (na przykład "Nieznany identyfikator = ' kolumna\ _ nazwa '") nawet jeśli wiesz, że istnieje, spróbuj użyć wszystkich stolic, na przykład, COLUMN\ _ NAZWA , która jest często prawdziwą, wrażliwą na przypadek wersją nazwy kolumny.
  • Należy ściśle współpracować z administratorem bazy danych, który może mieć odpowiednie doświadczenie. Jeśli zbiór danych nie zostanie wczytany, przeczytajkomunikat błęduOstrożnie, żeby dowiedzieć się dlaczego.  

Kierowca JDBC

  • [Kierowca JDBC i<driverName >] (# jdbc- driver) -- Musisz uzyskać odpowiedni plik sterownika .jar JDBC 3 lub JDBC 4 dla bazy danych i Włóż to. tomcat / webapps / erddap / WEB-INF / lib po instalacjiERDDAP. Następnie, w twoimdatasets.xmldla tego zbioru danych, należy określić<driverName > dla tego sterownika, który jest (Niestety) różni się od nazwy pliku. Szukaj w sieci sterownika JDBC dla bazy danych i driverNameJavamusi go użyć.

Po umieszczeniu kierowcy JDBC .jarERDDAP™katalog lib, musisz dodać odniesienie do pliku .jar w plikach skryptowych .bat i / lub .sh dla GenerateDatasets Xml, DasDds i ArchiveAdataset tomcat / webapps / erddap / WEB- INF / directory; w przeciwnym razie otrzymasz ClassNotFoundException podczas uruchamiania tych skryptów.

Niestety JDBC jest czasem źródłem kłopotów. W roli pośrednikaERDDAP™i bazy danych, czasami dokonuje subtelnych zmian w standardowym / generycznej bazie danych SQL żądanie, żeERDDAP™tworzy, co powoduje problemy (na przykład, związane zidentyfikator górnej / dolnej skrzynioraz związane zdata / strefa czasowa) . Prosimy o cierpliwość, przeczytanie informacji tutaj uważnie, sprawdzić swoją pracę i zobaczyć naszerozdział dotyczący uzyskania dodatkowego wsparcia.

Baza danych<połączenie Własność & gt;

  • [<ConnectionProperty >] (# data-connectionproperty) -- Wdatasets.xmldla zestawu danych, musisz zdefiniować kilka połączeń Znaczniki własności do przekazaniaERDDAP™jak połączyć się z bazą danych (na przykład, aby określić nazwę użytkownika, hasło, połączenie ssl irozmiar pliku) . Są one różne dla każdej sytuacji i trochę trudno je rozgryźć. Szukaj w internecie przykładów korzystania z sterownika JDBC, aby połączyć się z bazą danych. W<connectionProperty > names (na przykład "użytkownik", "hasło" i "ssl") , a niektóre wartości connectionProperty można znaleźć poprzez wyszukiwanie w sieci "właściwości połączenia JDBC baza danych Rodzaj " (na przykład:Oracle, MySQL, Amazon RDS, MariaDB, PostgreSQL) .  

Cytaty dotyczące nazw i wrażliwości przypadku

  • Cytaty nazw pól / kolumn; Czułość przypadku- Domyślnie EDDTableFromDatabase umieszcza podwójne cytaty ANSI- SQL wokół nazw pól / kolumn w deklaracjach SELECT w przypadku użycia słowa zastrzeżonego jako nazwa pola / kolumny lub specjalnego znaku w nazwie pola / kolumny. Podwójne cytaty również udaremnić niektóre rodzaje ataków SQL wtrysku. Możesz powiedziećERDDAP™do stosowania ",", lub nie cudzysłów poprzez<ColumnNameQuotes > wdatasets.xmldla tego zbioru danych.

Dla wielu baz danych, użycie dowolnego rodzaju cudzysłów powoduje, że baza danych działa z nazwami pól / kolumn w sposób wrażliwy (zamiast domyślnego nieczułego sposobu w przypadku bazy danych) . Bazy danych często wyświetlają nazwy plików / kolumn jako wszystkie upper- case, kiedy w rzeczywistości forma delikatna przypadku jest inna. WERDDAP™, proszę zawsze traktować nazwy kolumn bazy danych jako wrażliwe przypadku.

Nie używaj słowa zastrzeżonego dla bazy danych, katalogu, schematu lub nazwy tabeli.ERDDAP™Nie zawiera cytatów.

Jeśli to możliwe, przy tworzeniu tabeli bazy danych użyj wszystkich małych przypadków (lub widok) oraz w odniesieniu do nazw pól / kolumn wdatasets.xmlwERDDAP. W przeciwnym razie możesz otrzymać komunikat błędu mówiący, że baza danych, katalog, schemat, tabela i / lub pole nie zostały znalezione. Jeśli otrzymasz tę wiadomość o błędzie, spróbuj użyć wersji wrażliwej na przypadek, całej wersji upper- case i całej wersji Lower- case nazwy wERDDAP. Jeden z nich może zadziałać. Jeśli nie, musisz zmienić nazwę bazy danych, katalogu, schematu i / lub tabeli na wszystkie małe-case.

Baza danych<dane Typ & gt;

  • Baza danych[<Data Typ >] (# datatype) Tags... Ponieważ istnieje pewna dwuznaczność,typy danych bazy danychmapa, do którejERDDAP™typy danych, trzeba określić [<Data Typ >] (# datatype) znacznik dla każdego [<dataVariable>] (# datavariable) powiedziećERDDAP™jakiego typu danych należy używać. Częścią problemu jest to, że różne zestawy danych używają różnych terminów dla różnych typów danych -- więc zawsze spróbuj dopasować definicje, nie tylko nazwy. Patrz opisstandardERDDAP™dane Rodzaje, który zawiera odniesienia do odpowiednich typów danych SQL.Data i godzinaw szczególnych przypadkach:ERDDAPpodwójne dane Typ.  

Dane dotyczące daty bazy danych

Niektóre kolumny daty bazy danych nie mają wyraźnej strefy czasowej. Takie kolumny są kłopoty dlaERDDAP. Bazy danych wspierają koncepcję daty (z czasem lub bez) bez strefy czasowej, jako przybliżony zakres czasu. Ale...Java (i tym samymERDDAP) Zajmuje się tylko chwilową datą + razy ze strefą czasową. Więc możecie wiedzieć, że data czasu jest oparta na lokalnej strefie czasowej (z czasem dziennym lub bez niego) lub GMT /Zulustrefa czasowa, aleJava (orazERDDAP) Nie. Początkowo myśleliśmy, że możemy rozwiązać ten problem. (np. określając strefę czasową dla kolumny) , ale baza danych + JDBC +Javainterakcje sprawiły, że nie było to wiarygodne rozwiązanie.

  • Więc,ERDDAP™wymaga przechowywania wszystkich danych daty i daty w tabeli bazy danych z typem danych bazy danych odpowiadającym typowi JDBC "timestamp with time zone" (najlepiej, że wykorzystuje GMT /Zulustrefa czasowa) .
  • WERDDAPjestdatasets.xml, w<dataVariable> tag dla zmiennej timestamp, set

      <dataType>double</dataType>

oraz<addAttributes> set

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Sugestia: Jeśli dane są zakresem czasowym, warto mieć wartości znacznika czasu odnoszą się do środka dorozumianego zakresu czasowego (na przykład, południe) . Na przykład, jeśli użytkownik posiada dane dla 2010- 03- 26T13: 00Z z innego zbioru danych i chce mieć najbliższe dane z zbioru danych bazy danych, które mają dane dla każdego dnia, to dane z bazy danych dla 2010- 03- 26T12: 00Z (reprezentujące dane za ten dzień) jest oczywiście najlepszy (w przeciwieństwie do północy przed lub po, gdzie jest mniej oczywiste, co jest najlepsze) .
  • ERDDAP™ma przydatność doPrzelicz licznik Czas do / z czasu smyczkowego.
  • PatrzJakERDDAPTransakcje z czasem.

Naszyjniki Integer

Bazy danych obsługują kadłuby w liczbie całkowitej (int, smalint, tinyint) kolumny, aleERDDAP™nie wspiera prawdziwych czaszek. Naszyjniki baz danych zostaną przekształcone wERDDAP™127 dla kolumn bajtowych, 255 dla kolumn ubytowych, 32767 dla kolumn krótkich, 65535 dla kolumn usortowych, 2147483647 dla kolumn int, 4294967295 dla kolumn uint, 9,223,372,036,854,775,807 dla kolumn długich lub 18446744073709551615 dla kolumn ulong. Jeśli używasz tych domyślnych, proszę zidentyfikować temissing\_values dla użytkowników zbioru danych wERDDAP™z

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

lub

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

Alternatywnie, można użyć "missing\_value"atrybut zamiast"\ _ FillValue ". GenerateDatasets Xml automatycznie dodaje atrybuty\ _ FillValue, gdy generuje sugerowanedatasets.xmldla zbiorów danych bazy danych.

Dla kolumn zmiennoprzecinkowych bazy danych, głowice są konwertowane na NaNs wERDDAP. Dla typów danych bazy danych, które są konwertowane na Strings wERDDAP™, czaszki zostają zamienione na puste Strings.

Bezpieczeństwo bazy danych

  • Podczas pracy z bazami danych, trzeba zrobić rzeczy tak bezpieczne i bezpieczne, jak to możliwe, aby uniknąć umożliwienia złośliwego użytkownika do uszkodzenia bazy danych lub uzyskać dostęp do danych, do których nie powinni mieć dostępu.ERDDAP™próbuje robić wszystko w bezpieczny sposób.
    • Rozważ powielanie, na innym komputerze, bazy danych i tabele baz danych z danymi, które chceszERDDAP™służyć. (Tak, dla komercyjnych baz danych takich jakOracle, oznacza to dodatkowe opłaty licencyjne. Ale dla baz danych open source, takich jak PostgreSQL, MySQL, Amazon RDS i MariaDB, to nic nie kosztuje.) Daje to wysoki poziom bezpieczeństwa i zapobiegaERDDAP™żądania zwolnienia oryginalnej bazy danych.
    • Zachęcamy do założeniaERDDAP™podłączenie do bazy danych jako użytkownika bazy danych, który ma tylko dostęp do istotne baza danych (s) i ma tylko uprawnienia do read.
    • Zachęcamy do ustawienia połączenia zERDDAP™do bazy danych tak, że
      • zawsze używa SSL,
      • tylko pozwala na połączenia z jednego adresu IP (lub jeden blok adresów) i od jednegoERDDAP™użytkownik, oraz
      • Przenosi tylko hasła w postaci zakodowanej MD5.
    • \[ZNANY PROBLEM\]Właściwości połączeń (Łącznie z hasłem!) są przechowywane jako zwykły tekst wdatasets.xml. Nie znaleźliśmy sposobu, aby pozwolić administratorowi wprowadzić hasło do bazy danych podczasERDDAPStartup w Tomcat (który występuje bez wejścia użytkownika) , więc hasło musi być dostępne w pliku. Aby uczynić to bardziej bezpiecznym:
      • Ty (doERDDAP™administrator) powinien być właścicielemdatasets.xmli mieć dostęp do READ i WRITE.
      • Zrobić grupę, która zawiera tylko użytkownika = tomcat. Użyj chgrp, aby grupadatasets.xmlZ przywilejami do czytania.
      • Użyj chmod do przypisania uprawnień o- rwx (brak dostępu do read lub WRITE dla "innych" użytkowników) zamiastdatasets.xml.
    • KiedyERDDAP™, hasło i inne właściwości połączenia są przechowywane w "prywatne"Javazmienne.
    • Wnioski od klientów są rozpatrywane i sprawdzane pod kątem ważności przed wygenerowaniem wniosków SQL dla bazy danych.
    • Wnioski do bazy danych są wykonywane z SQL PreparedStavements, aby zapobiecWstrzyknięcie SQL.
    • Wnioski do bazy danych są składane wraz z wykonaniem Pytania (nie wykonanie oświadczenia) ograniczenie liczby wniosków o read- (więc próbował SQL zastrzyk do zmiany bazy danych nie uda się również z tego powodu) .  

SQL

  • PonieważOPeNDAPżądania danych tabelarycznych zostały zaprojektowane tak, aby naśladować żądania danych tabelarycznych SQL, jest to łatwe dlaERDDAP™do konwersji tabelarycznych żądań danych w proste SQL PreparedStavements. Na przykład:ERDDAP™wniosek
    time,temperature&time>=2008-01-01T00:00:00Z&time&lt;=2008-02-01T00:00:00Z  

zostanie przekonwertowany do SQL PreparedDescription

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

ERDDAP™żądania z & wyraźnym () luborderBy ( zmienne ) doda DISTINCT i / lub ZARZĄD zmienne do oświadczenia przygotowanego przez SQL. Ogólnie rzecz biorąc, będzie to znacznie spowolnić reakcję z bazy danych. ERDDAP™loguje wstępne oświadczenie wlog.txtjako

    statement=*thePreparedStatement*  

Będzie to reprezentacja tekstowa oświadczenia wstępnego, które może się nieco różnić od rzeczywistego oświadczenia wstępnego. Na przykład, w Deklaracji Wstępnej, czasy są zakodowane w szczególny sposób. Ale w reprezentacji tekstu, pojawiają się jako czas daty ISO 8601.  

Prędkość bazy danych

  • Bazy danych mogą być powolne. Są rzeczy, które możesz zrobić:
    • Ogólnie - Charakter SQL jest taki, że pytania sąZgłoszenie. Określają, czego chce użytkownik. Nie zawierają specyfikacji ani wskazówek dotyczących sposobu obsługi lub optymalizacji zapytania. Więc nie ma mowyERDDAP™aby wygenerować zapytanie w taki sposób, że pomaga ono w optymalizacji zapytania w bazie danych (lub w jakikolwiek sposób określa sposób obsługi zapytania) . Ogólnie rzecz biorąc, do administratora bazy danych należy skonfigurowanie rzeczy (na przykład indeksy) optymalizacji niektórych rodzajów zapytań.
Ustaw rozmiar pliku

Bazy danych zwracają dane doERDDAP™w kawałkach. Domyślnie różne bazy danych zwracają inną liczbę wierszy w kawałkach. Często liczba ta jest bardzo mała i tak bardzo nieefektywna. Na przykład, domyślnie dlaOracle10! Przeczytaj dokumentację JDBC dla sterownika JDBC bazy danych, aby znaleźć właściwość połączenia ustawić w celu zwiększenia tego, i dodać to do opisu zbioru danych wdatasets.xml. Na przykład: Dla MySQL i Amazon RDS, użyj

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

Dla MariaDB nie ma obecnie możliwości zmiany wielkości pobierania. Ale jest to żądana funkcja, więc przeszukaj sieć, aby sprawdzić, czy została ona wdrożona. DlaOracle,

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

Dla PostgreSQL, użyj

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

ale możesz zmienić numer. Ustawienie zbyt dużej liczby spowodujeERDDAP™używać dużo pamięci i być bardziej prawdopodobne, że zabraknie pamięci.

Właściwości połączeń

Każda baza danych posiada inne właściwości połączeń, które można określić wdatasets.xml. Wiele z nich wpłynie na działanie bazy danychERDDAP™połączenie. Proszę przeczytać dokumentację dla sterownika JDBC bazy danych, aby zobaczyć opcje. Jeśli znajdziesz przydatne właściwości połączeń, wyślij e-mail ze szczegółami na adres:erd dot data at noaa dot gov.

  • Zrób stół... Prawdopodobnie będzie szybciej odpowiedzi, jeśli okresowo (Codziennie? kiedy są nowe dane?) generowanie rzeczywistej tabeli (podobnie do tego, jak wygenerowałeś wizje) i powiedziećERDDAP™aby uzyskać dane z tabeli zamiast WIDOW. Ponieważ każdy wniosek do tabeli może być spełniony bez połączenia z inną tabelą, odpowiedź będzie znacznie szybciej.
  • Odkurzacz tabeli - MySQL i Amazon RDS będą reagować znacznie szybciej, jeśli używaszTABELA OPTIMIZE. Maria DB będzie reagować znacznie szybciej, jeśli używaszTABELA OPTIMIZE. PostgreSQL będzie reagować znacznie szybciej, jeśliWAKUMStolik. Oraclenie ma ani nie potrzebuje analogicznego polecenia.
  • MarkaWskaźnikidla Zmiennych Powszechnych Wytrzymałych -- Możesz przyspieszyć wiele / większość zapytań poprzez tworzenie indeksów w bazie danych zmiennych (które bazy danych nazywają "kolumnami") które są często ograniczone w zapytaniu użytkownika. Ogólnie rzecz biorąc, są to te same zmienne określone przez [<subsetVariables>] (# subsetvarels) i / lub zmienne dotyczące szerokości, długości i czasu.
Użyj połączenia Pooling

Normalnie,ERDDAP™tworzy oddzielne połączenie z bazą danych dla każdego żądania. To najbardziej wiarygodne podejście. Szybszą alternatywą jest użycie DataSource, która obsługuje łączenie połączeń. Aby go skonfigurować, określić (na przykład)

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

zaraz obok<sourceUrl>,<driverName >, oraz<połączenie Nieruchomości >. I tomcat / conf / context.xml, zdefiniuj zasób zawierający te same informacje, na przykład,

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

Ogólne informacje na temat korzystania z DataSource jest na https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . PatrzInformacje o Tomcat DataSourceorazPrzykłady Tomcat DataSourcelub wyszukać w sieci przykłady korzystania z DataSources z innymi serwerami aplikacji.

  • Jeśli wszystko zawiedzie, rozważyć przechowywanie danych w zbiorzeNetCDFv3.ncpliki (szczególnie.ncplików, które używająCF Geometrie do pobierania próbek dyskretnych (DSG) Kontyguous Ragged Struktury danych Array i tak mogą być obsługiwane zERDDAPjestPliki EDDTableFromNcCFFiles) . Jeśli są logicznie zorganizowane (każdy z danymi dla kawałka przestrzeni i czasu) ,ERDDAP™może pobrać dane z nich bardzo szybko.  

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

Tabela EDDFromEDDGrid

Tabela EDDFromEDDGrid pozwala utworzyć zestaw danych EDDTable z dowolnegoEDDGridzestaw danych.

  • Powszechnymi przyczynami takiego postępowania są:
    • Pozwala to na sprawdzenie zbioru danychOPeNDAPograniczenia wyboru, które są rodzajem "query by value" (które użytkownik mógł zażądać) .
    • Zestawienie danych jest z natury zbiorem danych tabelarycznych.
  • Wartość atrybutu globalnego "maxAxis0" (zazwyczaj typu = "int") , (domyślnym jest 10) zostaną wykorzystane do ograniczenia liczby osi\[0\] (zwykle"time"oś) wartości załączonychEDDGridzbiór danych, do którego można uzyskać dostęp na każde żądanie dotyczące danych. Jeśli nie chcesz, aby było jakieś ograniczenie, podaj wartość 0. To ustawienie jest ważne, ponieważ w przeciwnym razie byłoby zbyt łatwe dla użytkownika, aby zapytać EDDTableFromEDDGridPrzejrzeć wszystkie dane z zestawu danych. Zajmie to dużo czasu i prawie na pewno zawiedzie z błędem czasowym. To jest ustawienie, które sprawia, że bezpieczne mieć EDDTableFromEDDGridzestawy danych w TwoimERDDAPbez obawy, że doprowadzą one do nieuzasadnionego wykorzystania zasobów obliczeniowych.
  • Jeżeli dołączoneEDDGridjestEDDGridFromErddaporazERDDAP™jest taki samERDDAP, następnie EDDTableFromEDDGridzawsze będzie korzystać z aktualnie dostępnej wersji zbioru danych, do których się odnosi bezpośrednio. Jest to bardzo skuteczny sposób dla EDDTableFromEDDGriddostęp do danych zaprogramowanych.
  • Te zajęcia są...<przeładowanie Każda minuta >] (# reloadeverynminutes) To się liczy. ZałącznikEDDGridjest<Przeładowanie EveryNMinutes > jest ignorowane.
  • Jeżeli wartość dla [<updateEveryNMillis >] (# updateeverynmillis) jest dostarczany dla tego zbioru danych, jest ignorowany. ZałącznikEDDGridjest<updateEveryNMillis > jest ważne.
  • GenerateDatasetsXmlma opcję dla typu zbioru danych = EDDTableFromEDDGridktóry prosi o adres URLERDDAP (zazwyczaj takie sameERDDAP) (kończąc na "/ erddap /") i wyrażenie regularne. GenerateDatasets Xml wygeneruje XML dla EDDTableFromEDDGridzestaw danych dla każdego zbioru danych w paskiERDDAP™co madatasetIDpasujące do wyrażenia regularnego (używać.\ * do dopasowania wszystkichdatasetIDs dla zestawów danych w sieci) .

Część XML generowana przez GenerateDatasetsXml dla każdego zbioru danych zawiera:

  • AdatasetIDktóry jestEDDGridjestdatasetIDplus "\ _ Asatable".
  • Nowe podsumowanie atrybut globalny, który jestEDDGridstreszczenie plus nowy akapit pierwszy opisujący, czym jest ten zbiór danych.
  • Nowy atrybut globalny tytułu, który jestEDDGridTytuł plus ", (Jako tabela) ".
  • Nowy atrybut globalny maxAxis0 o wartości 10.

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

Nazwy EDDTableFromFileName

Nazwy EDDTableFromFileName tworzy zbiór danych z informacji o grupie plików w systemie plików serwera, w tym URL dla każdego pliku, tak aby użytkownicy mogli pobrać pliki poprzezERDDAPjest"files"system. W przeciwieństwie do wszystkichPliki EDDTableFromFilespodklasy, ten typ zbioru danych nie obsługuje danych z plików.

  • EDDTableFromFileName jest przydatne, gdy:
    • Masz grupę plików, które chcesz rozpowszechniać jako całe pliki, ponieważ nie zawierają one "danych" w taki sam sposób, w jaki zwykłe pliki danych mają dane. Na przykład pliki graficzne, pliki wideo, dokumenty Word, pliki arkusza kalkulacyjnego Excel, pliki prezentacji PowerPoint lub pliki tekstowe z nieustrukturyzowanym tekstem.
    • Masz grupę plików, które mają dane w formacieERDDAP™Nie mogę jeszcze czytać. Na przykład format binarny określony dla danego projektu.  

EDDTableFromFilename Data

plik Dir
  • <fileDir > -- Określa katalog źródłowy w systemie plików serwera z plikami dla tego zbioru danych. Pliki, które znajdują się w systemie plików serwera w<fileDir > pojawi się w kolumnie url tego zbioru danych w wirtualnym katalogu o nazwie https://serverUrl/erddap/files/datasetID/ . Na przykład, jeślidatasetIDjest jplMURSST, oraz<fileDir > is / home / data / mur /, i ten katalog ma plik o nazwie jplMURSST20150103000000.png, wtedy URL, który zostanie pokazany użytkownikom dla tego pliku będzie https://serverUrl/erddap/jplMURSST/jplMURSST20150103000000.png .

Oprócz korzystania z lokalnego katalogu<fileDir >, można również określić adres URL strony internetowej typu zdalnego, directory-. Dotyczy to:

Z OntheFly

\*\** from OntheFly-- Dla ogromnych wiader S3 (jak noaa- goes17, który ma 26 milionów plików) , może potrwaćERDDAP™do 12 godzin, aby pobrać wszystkie informacje o zawartości wiadra (i wtedy są inne problemy) . Aby to obejść, istnieje specjalny sposób użycia<fileDir > w EDDTableFromFileNames zrobić zestaw danych z katalogu i nazwy plików z wiadra AWS S3. Zestaw danych nie będzie zawierał listy wszystkich katalogów i nazw plików wiadra S3, które użytkownik może przeszukiwać za pomocą żądań do zbioru danych. Ale zbiór danych uzyska nazwy katalogów i plików na -the- fly, jeśli użytkownik przemierza hierarchię katalogów z zbiorem danych"files"opcja. Pozwala to użytkownikom na przeglądanie hierarchii plików i plików z wiadra S3 za pośrednictwem zbioru danych"files"system. Aby to zrobić, zamiast podać adres URL dla wiadra S3 jako "Katalog startowy" (w GenerateDatasets Xml) lub<fileDir > (wdatasets.xml) , stosować:

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

na przykład:

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

Patrz dokumentacjapracy z S3 Buckets wERDDAP™, w szczególności opis konkretnego formatu, który musi być używany do URL wiadra S3. I zobacz te szczegóły i przykładstosowania\*\*Z OntheFly.

rekursywne
  • <rekursywne > -- Pliki w podkatalogach<fileDir > z nazwami, które pasują<fileRegex > pojawi się w tych samych podkatalogach w"files"URL jeśli<recursive > jest ustawiony na true. Domyślna wartość to false.
  • [<pathRegex >] (# pathregex) -- Jeśli recursive = true, Tylko nazwy katalogów pasujące do pathRegex (domyślny = ".\ *") zostaną przyjęte. Jeśli recursive = false, to jest ignorowane. Jest to rzadko stosowane, ale może być bardzo przydatne w nietypowych okolicznościach. (Widzisz to?dokumentacja regexorazregex tutorial.)
fileRegex
  • <fileReget > -- Tylko nazwy plików, w których cała nazwa pliku (bez nazwy katalogu) dopasować<plik Regex > zostanie włączony do tego zbioru danych. Na przykład, jplMURSST. (Widzisz to?dokumentacja regexorazregex tutorial.)
     
Z nazw plików Spis treści tabeli danych

W tabeli będą kolumny z:

  • Url... URL, którego użytkownicy mogą używać do pobierania pliku poprzezERDDAPjest"files"system.

  • imię... Nazwa pliku (bez nazwy katalogu) .

  • lastZmodyfikowana... Czas ostatniej modyfikacji pliku (przechowywane jako podwójne z"seconds since 1970-01-01T00:00:00Z") . Ta zmienna jest przydatna, ponieważ użytkownicy mogą sprawdzić, czy / kiedy zawartość danego pliku ostatnio się zmieniła. Ta zmienna jestczas Zmienna znacznika, więc dane mogą pojawić się jako wartości liczbowe (sekund od 1970- 01-01T00: 00: 00Z) lub wartość String (ISO 8601: 2004 (E) format) W zależności od sytuacji.

  • rozmiar -- Rozmiar pliku w bajtach, zapisany jako podwójny. Są one przechowywane jako dubles, ponieważ niektóre pliki mogą być większe niż inty pozwalają i długów nie są obsługiwane w niektórych typach plików odpowiedzi. Doubles da dokładny rozmiar, nawet dla bardzo dużych plików.

  • dodaje kolumny określone przezERDDAP™administrator z informacjami uzyskanymi z nazwy pliku (na przykład czas związany z danymi w pliku) na podstawie dwóch atrybutów, które określa się w metadanych dla każdej dodatkowej kolumny /dataVariable:

    • ExtractRegex... To jest...wyrażenie regularne (tutorial) . Cały regex musi pasować do całej nazwy pliku (bez nazwy katalogu) . Regex musi obejmować co najmniej jedną grupę (część wyrażenia regularnego, która jest załączona przez nawiasy) któreERDDAP™wykorzystuje do określenia, którą część nazwy pliku należy wyodrębnić, aby stać się danymi.
    • ekstrakt Grupa... To jest numer grupy przechwytującej (# 1 jest pierwszą grupą przechwytującą) w wyrażeniu regularnym. Domyślna wartość to 1. Grupa przechwytywania jest częścią wyrażenia regularnego, który jest załączony przez nawiasy.

Oto dwa przykłady:

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

W przypadku zmiennej czasu, jeśli plik ma nazwę jplMURSST20150103000000.png, extractRegex będzie pasować do nazwy pliku, wyodrębnić znaki, które pasują do pierwszej grupy przechwytywania ("20150103000000") jako dataType = String, a następnie użyćjednostki odpowiednie do czasów strunaby przetworzyć struny do wartości danych czasowych (2015- 01- 03T00: 00: 00Z) .

W przypadku zmiennej dziennej, jeśli plik ma nazwę jplMURSST20150103000000.png, extractRegex będzie pasować do nazwy pliku, wyodrębnić znaki, które pasują do pierwszej grupy przechwytywania ("03") jako [<Data Typ >] (# datatype) \ = int, dając wartość danych 3.

Inne informacje

  • Nie.<updateEveryNMillis >] (# updateeverynmillis) -- Ten typ zbioru danych nie potrzebuje i nie może używać<updateEveryNMillis > tag, ponieważ informacje podawane przez EDDTableFromFileNames są zawsze doskonale aktualizowane, ponieważERDDAP™Zapyta system plików, aby odpowiedzieć na każde żądanie o dane. Nawet jeśli istnieje ogromna liczba plików, podejście to powinno działać dość dobrze. Odpowiedź może być powolna, jeśli istnieje ogromna liczba plików, a zestaw danych nie został zapytany przez jakiś czas. Ale przez kilka minut po tym, system operacyjny przechowuje informacje w pamięci podręcznej, więc odpowiedzi powinny być bardzo szybkie.  
  • Można użyćGenerateDatasets Program Xmldodatasets.xmlkawałek dla tego typu zbioru danych. Możesz dodać / zdefiniować dodatkowe kolumny z informacjami uzyskanymi z nazwy pliku, jak pokazano powyżej.  

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

Pliki EDDTableFromFiles

Pliki EDDTableFromFiles jest superklasą wszystkich zajęć z plików EDDTableFrom. Nie można bezpośrednio używać plików EDDTableFromFiles. Zamiast tego, użyj podklasy plików EDDTableFromFiles do obsługi określonego typu pliku:

Obecnie nie są obsługiwane żadne inne typy plików. Ale zazwyczaj stosunkowo łatwo jest dodać wsparcie dla innych typów plików. Skontaktuj się z nami, jeśli masz prośbę. Lub, jeśli Twoje dane są w starym formacie pliku, od którego chciałbyś się odsunąć, zalecamy konwersję plików doNetCDFv3.ncpliki (oraz szczególnie.ncpliki zCF Geometrie do pobierania próbek dyskretnych (DSG) Kontyguous Ragged Archive data structure --ERDDAP™może pobrać dane z nich bardzo szybko) .NetCDFjest szeroko wspieranym, formacie binarnym, umożliwia szybki losowy dostęp do danych i jest już obsługiwany przezERDDAP.

Dane plików FromFiles

Poniższe informacje dotyczą wszystkich podklas plików EDDTableFromFiles.

Agregacja

Ta klasa agreguje dane z lokalnych plików. Każdy plik posiada (stosunkowo) mała tabela danych.

  • Wynikający z tego zbiór danych pojawia się jakby wszystkie tabele pliku zostały połączone (wszystkie wiersze danych z pliku # 1, plus wszystkie wiersze z pliku # 2,...) .
  • Pliki nie muszą mieć wszystkich podanych zmiennych. Jeśli dany plik nie ma określonej zmiennej,ERDDAP™w razie potrzeby doda brakujące wartości.
  • Zmienne we wszystkich plikach MUSI mieć te same wartości dlaadd\_offset,missing\_value,\ _ Wypełnij Wartość,scale\_factororazjednostkiatrybuty (jeżeli istnieje) .ERDDAP™sprawdzają, ale jest to niedoskonały test -- jeśli istnieją różne wartości,ERDDAPnie wie, co jest poprawne i dlatego które pliki są nieważne. Jeśli jest to problem, może być w stanie użyćNcMLlubNCOby rozwiązać problem.  
Pliki skompresowane

Pliki danych źródłowych dla wszystkich podklas EDDTableFromFiles mogą być skompresowane zewnętrznie (np.,.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2lub .Z) . PatrzDokumentacja plików skompresowanych zewnętrznie.  

Informacje o pliku buforowym
  • Kiedy plik EDDTableFromFiles jest po raz pierwszy wczytywany, EDDTableFromFiles odczytuje informacje ze wszystkich odpowiednich plików i tworzy tabele (jeden wiersz dla każdego pliku) z informacjami o każdym ważnym pliku i każdym "złym" (inne lub nieprawidłowe) plik.
    • Tabele są również przechowywane na dysku, jakNetCDFv3.ncpliki w bigParentDirectory / zbiór danych / last2CharsOfDatasetiID / datasetID / w plikach o nazwie: dirTable.nc (która posiada listę unikalnych nazw katalogów) , plik Tabela.nc (który posiada tabelę z informacjami każdego ważnego pliku) , Pliki badFiles.nc (który trzyma tabelę z każdym złym pliku informacji) .
    • Aby przyspieszyć dostęp do zbioru danych EDDTableFromFiles (ale kosztem wykorzystania większej ilości pamięci) , you can use [<fileTableInMemory > true</ FileTableInMemory >] (# filetableinmemory)
      powiedziećERDDAP™do przechowywania kopii tabel informacyjnych plików w pamięci.
    • Kopia tabel informacyjnych na dysku jest również przydatna, gdyERDDAP™jest wyłączony i ponownie uruchomiony: zapisuje EDDTable FromFiles z konieczności ponownego odczytu wszystkich plików danych.
    • Kiedy zestaw danych jest przeładowany,ERDDAP™musi tylko odczytać dane w nowych plikach i plikach, które uległy zmianie.
    • Jeśli plik ma inną strukturę niż inne pliki (na przykład inny typ danych dla jednej ze zmiennych lub inna wartość dla "jednostki"atrybut) ,ERDDAPdodaje plik do listy "złych" plików. Informacje o problemie z plikiem zostaną zapisane do bigParentDirectory / logs / log.txt file.
    • Nie powinieneś nigdy usuwać ani pracować z tymi plikami. Jednym z wyjątków jest: jeśli nadal dokonujesz zmian w zbiorze danychdatasets.xmlkonfiguracja, możesz usunąć te pliki, aby wymusićERDDAP™aby ponownie przeczytać wszystkie pliki, ponieważ pliki będą czytane / interpretowane inaczej. Jeśli kiedykolwiek trzeba usunąć te pliki, można to zrobić, gdyERDDAP™Ucieka. (Następnie ustawićbanderaaby przeładować zestaw danych jak najszybciej.) Jednakże,ERDDAP™zwykle zauważa, żedatasets.xmlinformacja nie pasuje do pliku Informacje o tabeli i automatycznie usuwa tabele plików.
    • Jeśli chcesz zachęcićERDDAP™aktualizacja przechowywanych danych (na przykład, jeśli po prostu dodano, usunięto lub zmieniono niektóre pliki do katalogu danych) , użyćsystem flagdo siłyERDDAP™aby zaktualizować informacje o pliku buforowanym.  
Wnioski dotyczące obsługi
  • ERDDAP™żądania dotyczące danych tabelarycznych mogą nakładać ograniczenia na każdą zmienną.
    • W przypadku przetwarzania prośby klienta o dane, EDDTableFromFiles może szybko zajrzeć do tabeli z poprawnymi informacjami, aby sprawdzić, które pliki mogą mieć odpowiednie dane. Na przykład, jeśli każdy plik źródłowy posiada dane dla jednej boji lokalizacji, EDDTableFromFiles może bardzo skutecznie określić, które pliki mogą mieć dane w danym przedziale długości geograficznej i szerokości geograficznej.
    • Ponieważ właściwa tabela informacji o pliku zawiera minimalną i maksymalną wartość każdej zmiennej dla każdego ważnego pliku, EDDTableFromFiles może często obsługiwać inne pytania dość skutecznie. Na przykład, jeśli niektóre boje nie mają czujnika ciśnienia powietrza, a klient żąda danych dla AirPressure! = NaN, EDDTableFromFiles może skutecznie określić, które boje mają dane ciśnienia powietrza.  
Aktualizacja informacji o pliku w zakładce

Ilekroć zbiór danych jest ponownie wczytywany, informacje o pliku buforowanym są aktualizowane.

  • Zestawienie danych jest okresowo przeładowywane zgodnie z ustaleniem<reloadEveryNMinutes > in the dataset 's information indatasets.xml.
  • Zestaw danych jest przeładowany tak szybko, jak to możliwe, kiedy tylko to możliweERDDAP™wykrywa, że dodano, usunięto,touch 'd (aby zmienić ostatni plik Czas zmodyfikowany) albo zmienił dane.
  • Zestaw danych jest przeładowany tak szybko, jak to możliwe, jeśli używaszsystem flag.

Kiedy zbiór danych jest przeładowany,ERDDAP™porównuje aktualnie dostępne pliki do tabeli informacyjnej pliku buforowanego. Nowe pliki są odczytywane i dodawane do odpowiedniej tabeli plików. Pliki, które już nie istnieją, są usuwane z poprawnej tabeli plików. Pliki, w których zmieniono znacznik czasu pliku, są odczytywane i aktualizowane. Nowe tabele zastępują stare tabele w pamięci i na dysku.  

Złe pliki

Tabela złych plików i powody, dla których te pliki zostały uznane za złe (uszkodzony plik, brakujące zmienne, nieprawidłowe wartości osi itp.) jest e-mail Wszystko Na adres e-mail (Prawdopodobnie ty.) za każdym razem, gdy zestaw danych jest przeładowany. Należy jak najszybciej wymienić lub naprawić te pliki.  

Brak zmiennych

Jeśli niektóre pliki nie mają niektórychdataVariables zdefiniowane w zbiorze danychdatasets.xmlW porządku. Kiedy EDDTableFromFiles przeczyta jeden z tych plików, będzie działać tak, jakby plik miał zmienną, ale ze wszystkimi brakującymi wartościami.  

Dane w czasie rzeczywistym
  • EDDTableFromFiles traktuje wnioski o bardzo aktualne dane jako przypadek szczególny. Problem: Jeśli pliki tworzące zbiór danych są często aktualizowane, jest prawdopodobne, że zestaw danych nie będzie aktualizowany za każdym razem, gdy plik zostanie zmieniony. Więc EDDTableFromFiles nie będzie wiedział o zmienionych plikach. (Możesz użyćsystem flag, ale to może prowadzić doERDDAP™Przeładowanie zestawu danych niemal stale. Więc w większości przypadków nie zalecamy tego.) Zamiast tego EDDTableFromFiles zajmuje się tym przez następujący system: KiedyERDDAP™otrzymuje wniosek o dane w ciągu ostatnich 20 godzin (na przykład, 8 godzin temu do Now) ,ERDDAP™będzie przeszukiwać wszystkie pliki, które posiadają jakiekolwiek dane w ciągu ostatnich 20 godzin. Tak więc,ERDDAP™nie musi mieć doskonale up- to- date danych dla wszystkich plików w celu znalezienia najnowszych danych. Należy nadal ustawić [<przeładowanie Każda minuta >] (# reloadeverynminutes) do stosunkowo małej wartości (na przykład, 60) Ale nie musi być malutkie. (na przykład, 3) .  
    • Nie zaleca się organizacja danych w czasie bliskim-rzeczywistym w plikach: Jeśli na przykład masz zbiór danych, który przechowuje dane dla wielu stacji (albo boi, albo trajektorii...) przez wiele lat, można zorganizować pliki tak, że na przykład, istnieje jeden plik na stację. Ale za każdym razem, gdy pojawiają się nowe dane dla stacji, trzeba przeczytać duży stary plik i napisać duży nowy plik. I kiedyERDDAP™ponownie wczytuje zbiór danych, zauważa, że niektóre pliki zostały zmodyfikowane, więc odczytuje je całkowicie. To nieefektywne.  

    • Zalecane organizacja danych w czasie bliskim-rzeczywistym w plikach: Przechowywanie danych w kawałkach, na przykład, wszystkie dane dla jednej stacji / boi / trajektorii przez jeden rok (lub jeden miesiąc) . Potem, kiedy pojawi się nowa data, tylko plik z tym roku (lub miesiąc) Wpływ na dane.

    • Najlepiej: StosowanieNetCDFv3.ncpliki o nieograniczonym wymiarze (czas) . Następnie, aby dodać nowe dane, można po prostu dołączyć nowe dane bez konieczności odczytu i przepisania całego pliku. Zmiana następuje bardzo efektywnie i zasadniczo atomicznie, więc plik nie jest nigdy w stanie niespójnym.

    • W przeciwnym razie: Jeśli nie / nie można użyć.ncpliki o nieograniczonym wymiarze (czas) , następnie, kiedy trzeba dodać nowe dane, trzeba przeczytać i przepisać cały dotknięty plik (Mam nadzieję, że mały, bo ma tylko rok. (lub miesiąc) wartość danych) . Na szczęście wszystkie pliki z poprzednich lat (lub miesięcy) bo ta stacja pozostanie niezmieniona.

W obu przypadkachERDDAP™ponownie wczytuje zbiór danych, większość plików nie ulegnie zmianie; tylko kilka małych plików uległo zmianie i wymaga odczytu.  

Katalogi

Pliki mogą być w jednym katalogu lub w katalogu i jego podkatalogach (rekursywnie) . Jeśli istnieje duża liczba plików (na przykład, > 1 000) , system operacyjny (a tym samym Pliki EDDTableFromFiles) będzie działać znacznie efektywniej, jeśli przechowujesz pliki w serii podkatalogów (jeden na rok lub jeden na miesiąc dla zbiorów danych z bardzo częstymi plikami) tak, aby nigdy nie było dużej liczby plików w danym katalogu.  

Zdalne katalogi i żądania zakresu HTTP
  • Zdalne katalogi i żądania zakresu HTTP (AKA Byte Serving, Zapytania o zakres bajtów) -- EDDGridPliki FromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles i EDDTableFromNcCFFiles mogą czasami służyć do obsługi danych z.ncpliki na zdalnych serwerach i dostęp przez HTTP, jeśli serwer obsługujeObsługa bajtówza pośrednictwem żądań zakresu HTTP (mechanizm HTTP do obsługi bajtów) . Jest to możliwe, ponieważ netcdf- java (któreERDDAP™wykorzystanie do odczytu.ncpliki) obsługuje odczyt danych z zdalnego.ncpliki za pośrednictwem żądań zakresu HTTP.

    Nie rób tego!
    Zamiast tego, użyj [<cacheFromUrl > system] (# cachefromurl) .

CacheFromUrl
  • [ ** <cacheFromUrl > ** ] (# cachefromurl) - WszystkieEDDGridPliki FromFiles i wszystkie pliki EDDTableFromFiles obsługują zestaw tagów, które mówiąERDDAP™do pobierania i przechowywania kopii wszystkich plików zdalnego zbioru danych lub pamięci podręcznej kilku plików (pobrane w razie potrzeby) . Jest to niezwykle przydatna cecha.
    • W<cacheFromUrl > tag pozwala określić adres URL z listą zdalnych plików z listy zdalnych plików.

      ERDDAP™będzie kopiować lub buforować te pliki w zbiorze danych<fileDir > katalog. Jeśli potrzebujesz wsparcia dla innego typu listy zdalnych plików (np. FTP) Proszę wysłać swoją prośbę do Chrisa. John w Noa.gov.

      • Wartość domyślna<cacheFromUrl > tag jest null. Jeśli nie podasz wartości dla<cacheFromUrl > tag, system kopiowania / bufora nie będzie używany do tego zbioru danych.
      • Jeśli zbiór danych<fileReget > ustawienie jest czymś innym niż.ERDDAP™będzie pobierał tylko pliki pasujące do pliku Regex.
      • Jeśli zbiór danych<recursive > ustawienie jest prawdziwe i pliki zdalne są w podkatalogach,ERDDAP™będzie szukać w zdalnych podkatalogach, które pasują do zbioru danych [<pathRegex >] (# pathregex) , tworzyć tę samą strukturę katalogu lokalnie, i umieścić lokalne pliki w tych samych podkatalogach.
      • W GenerateDatasets Xml, jeśli podasz<cacheFromUrl > wartość, Generate Zestawy danych Xml stworzy lokalne<fileDir > katalog i skopiuj do niego 1 zdalny plik. GenerateDatasets Następnie Xml wygenerujedatasets.xmlkawałek na podstawie tej próbki pliku (określić próbkę Plik = nic) .
      • Jeśli źródło danych jest zdalneERDDAP™,EDDGridFromErddaplubEDDTableFromErddapzamiast<cacheFromUrl >. W ten sposób, twój lokalnyERDDAP™wydaje się mieć zbiór danych, ale nie będzie musiał przechowywać żadnych danych lokalnie. Jedyny powód do użycia<cacheFromUrl > do uzyskania danych z pilotaERDDAP™jest kiedy masz jakiś inny powód, dla którego chcesz mieć lokalną kopię plików danych. W takim przypadku:
        • Ten zbiór danych będzie próbował zapisać się do zbioru danych na zdalnymERDDAPaby zmiany w tym zbiorze danych nazywały się flagą tego zbioru danych Url, co powoduje, że ten lokalny zestaw danych przeładowuje i pobiera zmienione pliki zdalne. Tak więc, lokalny zbiór danych będzie up- to- date bardzo szybko po wprowadzeniu zmian do zdalnego zbioru danych.
        • Powinieneś wysłać e-mail do administratora pilotaERDDAP™odatasets.xmldla zdalnego zbioru danych tak, że można dokonać zbioru danych w lokalnymERDDAP™wygląda jak zestaw danych w pilocieERDDAP.
      • Jeśli źródło danych jest zdalneERDDAP™, lokalny zestaw danych spróbuje zapisać się do zdalnego zbioru danych.
        • Jeśli subskrypcja się powiedzie, kiedykolwiek zdalnyERDDAPponownie ładuje i posiada nowe dane, skontaktujemy się z flagURL dla tego zbioru danych, co spowoduje przeładowanie i pobranie nowych i / lub zmienionych plików danych.
        • Jeśli subskrypcja się nie powiedzie (Z jakiegokolwiek powodu) lub jeśli po prostu chcesz upewnić się, że lokalny zestaw danych jest up- to- date, możesz ustawićbanderadla lokalnego zbioru danych, więc przeładuje się, więc będzie sprawdzał nowe i / lub zmienione pliki danych zdalnych.
      • Jeśli źródło danych nie jest zdalneERDDAP: zbiór danych będzie sprawdzał nowe i / lub zmienione pliki zdalne za każdym razem, gdy się przeładuje. Zazwyczaj jest to kontrolowane przez [<przeładowanie Każda minuta >] (# reloadeverynminutes) . Ale jeśli wiesz, kiedy są nowe pliki zdalne, można ustawićbanderadla lokalnego zbioru danych, więc przeładuje i sprawdzi nowe i / lub zmienione pliki danych zdalnych. Jeśli dzieje się to rutynowo o określonej porze dnia (np. o 7 rano) , you can make a cron job to usecurlkontaktować się z flagą URL dla tego zbioru danych, więc będzie przeładować i sprawdzić nowe i / lub zmienione pliki danych zdalnych.
    • W<cacheSizeGB > tag określa rozmiar lokalnego bufora. Prawdopodobnie trzeba tego używać tylko przy pracy z systemami pamięci masowej w chmurze, jakAmazon S3który jest powszechnie stosowanym systemem przechowywania, który jest częściąAmazon Web Services (AWS) . Domyślna wartość to -1.

      • Jeśli wartość jest<= 0 (np. wartość domyślna -1) , ERDDAP™będzie pobierać i utrzymywać kompletna kopia wszystkich plików zdalnego zbioru danych w zbiorze danych<fileDir >.
        • Jest to ustawienie zalecane w miarę możliwości.
        • Za każdym razem, gdy zestaw danych jest ponownie wczytywany, porównuje nazwy, rozmiary i lastZmodyfikowane czasy zdalnych plików i lokalnych plików, a także pobiera wszelkie pliki zdalne, które są nowe lub uległy zmianie.
        • Jeśli plik znajdujący się na zdalnym serwerze zniknie,ERDDAP™nie usunie odpowiedniego pliku lokalnego (w przeciwnym razie, jeśli coś było chwilowo nie tak z zdalnym serwerem,ERDDAP™może usunąć niektóre lub wszystkie lokalne pliki!) .
        • Z tego ustawienia, zwykle będzie ustawić<updateEveryNMillis > do -1, ponieważ zbiór danych jest świadomy, kiedy skopiował nowe pliki danych na miejsce.
      • Jeżeli wartość jest > 0, ERDDAP™będzie pobierać pliki z zdalnego zbioru danych w razie potrzeby do lokalnego cache (w zbiorze danych)<fileDir >) o wielkości progowej określonej liczby GB.
        • Cache musi być wystarczająco duży, aby posiadać co najmniej kilka plików danych.
        • Ogólnie rzecz biorąc, im większy pamięci podręcznej, tym lepiej, ponieważ następny żądany plik danych będzie bardziej prawdopodobne, że będzie już w pamięci podręcznej.
        • Produkt Caching należy stosować tylko wtedy, gdy:ERDDAP™działa na serwerze przetwarzania w chmurze (np. instancja obliczenia AWS) i zdalne pliki w systemie pamięci masowej w chmurze (np. AWS S3) .
        • Gdy przestrzeń dysku użyta przez pliki lokalne przekracza wartość bufora SizeGB,ERDDAP™wkrótce (może nie natychmiast) Usuń niektóre pliki buforowane (obecnie, w oparciu o najmniej ostatnio używane (LRU) algorytm) dopóki przestrzeń dysku użyta przez pliki lokalne<0,75\ * cacheSizeGB ("cel") . Tak, są przypadki, w których LRU wykonuje bardzo źle -- nie ma idealnego algorytmu.
        • ERDDAP™nigdy nie spróbuje usunąć pliku buforowanego, któryERDDAP™zaczął używać w ciągu ostatnich 10 sekund. Jest to niedoskonały system do radzenia sobie z systemem buforowym, a system czytnika plików danych jest tylko luźno zintegrowany. Z powodu tej zasady,ERDDAP™może nie być w stanie usunąć wystarczającej ilości plików, aby osiągnąć swój cel, w którym to przypadku będzie wydrukować OSTRZEŻENIE do pliku log.txt, a system będzie tracić dużo czasu próbując przycinać cache, i jest możliwe, że rozmiar plików w cache może znacznie przekroczyć cacheSizeGB. Jeśli to kiedykolwiek nastąpi, użyj większego ustawienia CacheSizeGB dla tego zbioru danych.
        • ObecnieERDDAP™nigdy nie sprawdza, czy zdalny serwer posiada nowszą wersję pliku znajdującego się w lokalnym pamięci podręcznej. Jeśli potrzebujesz tej funkcji, napisz do Chrisa. John w Noa.gov.
      • Chociaż użycie tych samych nazw znaczników może oznaczać, że system kopiowania i system bufora używają tego samego systemu bazowego, to nie jest to prawidłowe.
        • System kopiowania aktywnie uruchamia zadania taskThread do pobierania nowych i zmienianych plików za każdym razem, gdy zestaw danych jest ponownie załadowany. Tylko pliki, które zostały faktycznie skopiowane do lokalnego katalogu są dostępne za pośrednictwemERDDAP™zestaw danych.
        • System cache otrzymuje listę zdalnych plików za każdym razem, gdy zestaw danych jest przeładowany i udaje, że wszystkie te pliki są dostępne za pośrednictwemERDDAP™zestaw danych. Co ciekawe, wszystkie zdalne pliki pojawiają się nawet w zbiorze danych / plików / stron internetowych i są dostępne do pobrania (choć być może tylko po opóźnieniu, podczas gdy plik jest najpierw pobierany z zdalnego serwera do lokalnego bufora.)
      • Dane, które używają cacheSizeGB mogą korzystać znTreatsustawienia większe niż 1, ponieważ pozwoli to na pobranie więcej niż 1 pliku zdalnego na raz.
    • W<cachePartialPathRegex > tag jest rzadko używanym znacznikiem, który może określić alternatywę dla zbioru danych [<pathRegex >] (# pathregex) . Domyślnie jest zerowa.

      • Używaj tego tylko wtedy, gdy kopiujesz cały zbiór danych za pomocą domyślnej<cacheSizeGB > wartość -1.<cacheSizeGB > wartości > 1, to będzie ignorowane, ponieważ jest nonsensical.
      • Patrz [dokumentacja<pathRegex >] (# pathregex) wskazówki dotyczące konstrukcji regeksu.
      • Jeśli jest to podane, będzie on używany za każdym razem, gdy zestaw danych jest ponownie załadowany, z wyjątkiem pierwszego wczytywania zestawu danych na początku miesiąca.
      • Jest to przydatne, gdy zdalny zbiór danych jest przechowywany w labiryncie podkatalogów i gdy ogromna większość tych plików rzadko, jeśli kiedykolwiek, zmienia się. (<kaszel > NASA<kaszel >) Można na przykład określić<cachePartialPathRegex >, który tylko pasuje do bieżącego roku lub bieżącego miesiąca. Te regexes są bardzo trudne do określenia, ponieważ wszystkie częściowe i pełne nazwy ścieżki muszą pasować do<cachePartialPathReget > i dlatego, że<cachePartialPathRegex > musi pracować z zdalnymi adresami URL i katalogami lokalnymi. Prawdziwym przykładem jest:
            <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>

Próbka URL powyżej posiada pliki w podkatalogach w oparciu o rok (np. 2018 r.) i dzień roku (np. 001, 002,..., 365 lub 366) . Należy pamiętać, że<cachePartialPathRegex > zaczyna się od. następnie posiada określony podkatalog, który jest wspólny dla zdalnych adresów URL i katalogów lokalnych, np. / v4\ .1 / następnie ma serię zagnieżdżonych grup przechwytywania, gdzie pierwsza opcja jest nic a druga opcja jest określoną wartością.

Powyższy przykład będzie pasował tylko do katalogów przez drugie 10 dni 2018 r., np.: https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/2018/010/ \[2020- 10- 21 Serwer ten nie jest już dostępny.\]
i dzień 011, 012,..., 019. (Widzisz to?dokumentacja regexorazregex tutorial.)
Jeśli potrzebujesz pomocy w tworzeniu<cachePartialPathRegex >, proszę wysłać e-mail<cacheFromUrl > do Chrisa. John w Noa.gov.

  • Wspólne podejście: Jeśli chcesz użyć<cachePartialPathRegex >, nie używać go początkowo, ponieważ chceszERDDAP™aby pobrać wszystkie pliki początkowo. PoERDDAP™pobrał wszystkie pliki, dodał je do zbioru danychdatasets.xml.  
Tysiące plików

Jeśli twój zbiór danych ma wiele tysięcy plików,ERDDAP™mogą być powolne w odpowiedzi na wnioski o dane z tego zbioru danych. Są tu dwie kwestie:  

  1. Liczba plików w katalogu. Wewnętrznie,ERDDAP™działa z tą samą prędkością niezależnie od tego, czy n pliki są w jednym katalogu, czy są rozproszone w kilku katalogach.   Ale jest problem: Im więcej plików w danym katalogu, tym wolniej system operacyjny zwraca listę plików w katalogu (na plik) doERDDAP. Czas reakcji może być O (n log n) . Trudno powiedzieć, ile plików w jednym katalogu jest za dużo, ale 10 000 to pewnie za dużo. Więc jeśli konfiguracja generuje wiele plików, rekomendacja tutaj może być: umieścić pliki w logicznie zorganizowanych podkatalogach (np. stacja lub stacja / rok) .

Inny powód do korzystania z podkatalogów: jeśli użytkownik chce korzystaćERDDAPjest"files"system, aby znaleźć nazwę najstarszego pliku dla stacji X, jest szybszy i wydajniejszy, jeśli pliki są w podkatalogach stacji / roku, ponieważ o wiele mniej informacji musi być przekazywane.

  1. Całkowita liczba plików. Dla zbiorów danych tabelarycznych,ERDDAP™śledzi zakres wartości dla każdej zmiennej w każdym pliku. Kiedy użytkownik składa wniosek,ERDDAP™musi odczytać wszystkie dane ze wszystkich plików, które mogą mieć dane pasujące do prośby użytkownika. Jeśli użytkownik prosi o dane z określonego czasu (np. jeden dzień lub miesiąc) Więc...ERDDAP™Nie będziesz musiał otwierać zbyt wielu plików w zbiorze danych. Ale są ekstremalne przypadki, w których prawie każdy plik może mieć dopasowane dane (np., gdy temperatura wody = 13.2C) . Ponieważ to trwaERDDAP™trochę czasu (częściowo czas wyszukiwania na dysku twardym, częściowo czas odczytania nagłówka pliku) aby otworzyć dany plik (i więcej, jeśli jest wiele plików w katalogu) , istnieje znacząca kara czasu, jeśli całkowita liczba plików, któreERDDAP™Musi być bardzo duży. Nawet otwarcie 1000 plików wymaga czasu. Więc są korzyści, aby okresowo konsolidować codzienne pliki w większe kawałki (np. 1 stacja na 1 rok) . Rozumiem, że może pan nie chcieć tego robić z różnych powodów, ale prowadzi to do znacznie szybszych reakcji. W skrajnych przypadkach (np. mam do czynienia z zbiorem danych GTSPP, który ma ~ 35 milionów plików źródłowych) , obsługa danych z ogromnej liczby plików źródłowych jest niepraktyczna, ponieważERDDAPOdpowiedź na proste pytania może trwać kilka godzin i używać mnóstwo pamięci. Poprzez konsolidację plików źródłowych w mniejszą liczbę (dla GTSPP, mam 720 teraz, 2 na miesiąc) ,ERDDAP™może reagować stosunkowo szybko. PatrzMiliony plików
     

N.B. Solid State Drives są świetne! Najszybszy, najprostszy i najtańszy sposób pomocyERDDAP™radzić sobie z ogromną liczbą (małe) pliki mają używać stałego dysku. PatrzSolid State Drives są świetne!
 

Miliony plików
  • Niektóre zbiory danych zawierają miliony plików źródłowych.ERDDAP™może sobie z tym poradzić, ale z mieszanymi wynikami.

    • Dla wniosków, które dotyczą tylko zmiennych wymienionych w [<subsetVariables>] (# subsetvarels) ,ERDDAP™posiada wszystkie potrzebne informacje już wydobyte z danych i przechowywane w jednym pliku, więc może reagować bardzo, bardzo szybko.
    • W przypadku innych wniosków,ERDDAP™może skanować zbiór danychbuforowane informacje o plikui dowiedzieć się, że tylko kilka plików może mieć dane, które są istotne dla wniosku i tym samym szybko reagować.
    • Ale na inne prośby (na przykład, temperatura wody = 18 stopni\ _ C) jeżeli jakikolwiek plik może posiadać odpowiednie dane,ERDDAP™musi otworzyć dużą liczbę plików, aby sprawdzić, czy każdy z plików posiada dane istotne dla wniosku. Pliki są otwierane kolejno. W każdym systemie operacyjnym i systemie plików (inne niż napędy w stanie stałym) To długo trwa. (więcERDDAP™reaguje powoli) i naprawdę łączy system plików (więcERDDAP™powoli odpowiada na inne wnioski) .

Na szczęście jest rozwiązanie.

  1. Ustaw zbiór danych na niepublicznymERDDAP™ (Twój osobisty komputer?) .
  2. Utwórz i uruchom skrypt, który wymaga serii.ncPliki CF, każdy z dużą częścią zbioru danych, zazwyczaj okres czasu (na przykład, wszystkie dane dla danego miesiąca) . Wybierz okres, tak aby wszystkie otrzymane pliki były mniejsze niż 2GB (ale miejmy nadzieję większe niż 1 GB) . Jeśli zbiór danych posiada dane w czasie blis- real- time, uruchom skrypt, aby zregenerować plik dla bieżącego okresu czasu (np. w tym miesiącu) często (Co 10 minut? co godzinę?) . WnioskiERDDAP™zamiast.ncPliki CF tworząNetCDFv3.ncplik, który wykorzystujeCF Geometrie do pobierania próbek dyskretnych (DSG) Kontyguous Ragged Archive data structures).
  3. UtwórzPliki EDDTableFromNcCFFileszestaw danych na temat Twojej publicznościERDDAP™które otrzymują dane z.nc (CF) pliki.ERDDAP™może bardzo szybko pobierać dane z tych plików. A ponieważ są teraz dziesiątki lub setki (zamiast milionów) plików, nawet jeśliERDDAP™musi otworzyć wszystkie pliki, to może zrobić tak szybko.

Tak, ten system wymaga trochę czasu i wysiłku, ale działa bardzo, bardzo dobrze. Większość wniosków o dane może być obsługiwana 100 razy szybciej niż wcześniej. \[Bob wiedział, że to możliwe, ale to Kevin O 'Brien pierwszy to zrobił i pokazał, że działa dobrze. Teraz, Bob używa tego do zbioru danych GTSPP, który ma około 18 milionów plików źródłowych i któryERDDAP™teraz służy przez około 500.nc (CF) pliki.\]

N.B. Solid State Drives są świetne! Najszybszy, najprostszy i najtańszy sposób pomocyERDDAP™radzić sobie z ogromną liczbą (małe) pliki mają używać stałego dysku. PatrzSolid State Drives są świetne!
 

Ogromne pliki
  • Jeden ogromny plik danych (szczególnie ogromne pliki danych ASCII) może powodować błąd OutOfMemoryError. Jeśli to jest problem, powinien być oczywisty, ponieważERDDAP™nie wczyta zestawu danych. Rozwiązaniem, jeśli jest to wykonalne, jest podzielenie pliku na wiele plików. Najlepiej podzielić plik na logiczne kawałki. Na przykład, jeśli plik posiada dane o wartości 20 miesięcy, podziel je na 20 plików, z których każdy ma dane o wartości 1 miesiąca. Ale są korzyści nawet jeśli główny plik jest podzielony arbitralnie. Podejście to przynosi wiele korzyści: a) Zmniejszy to pamięć potrzebną do odczytu plików danych do 1 / 20, ponieważ tylko jeden plik jest odczytywany na raz. b) Często,ERDDAP™może radzić sobie z żądaniami znacznie szybciej, ponieważ musi tylko szukać w jednym lub kilku plikach, aby znaleźć dane dla danego żądania. c) Jeśli zbieranie danych jest w toku, to istniejące 20 plików może pozostać niezmienione, i trzeba tylko zmodyfikować jeden, mały, nowy plik, aby dodać wartość danych w następnym miesiącu do zbioru danych.  
FTP Trouble / Advice
  • Jeśli FTP nowe pliki danych doERDDAP™serwer podczasERDDAP™Jest szansa, żeERDDAP™będzie przeładowywać zbiór danych podczas procesu FTP. To zdarza się częściej niż myślisz! Jeśli to się stanie, plik będzie miał ważność (posiada poprawną nazwę) , ale plik nie jest ważny. JeśliERDDAP™próbuje odczytać dane z tego niepoprawnego pliku, błąd spowoduje dodanie pliku do tabeli niepoprawnych plików. Niedobrze. Aby uniknąć tego problemu, użyj tymczasowej nazwy pliku podczas FTP 'ing pliku, na przykład ABC2005.nc\ _ TEMP. Następnie test pliku NameRegex (zob. poniżej) wskazuje, że nie jest to odpowiedni plik. Po zakończeniu procesu FTP należy zmienić nazwę pliku na poprawną nazwę. Proces zmiany nazwy spowoduje, że plik stanie się istotny w jednej chwili.
Nazwa pliku Ekstrakty

\[Ta funkcja jest DEPRECATED. Proszę użyć\\\ * fileName pseudosourceNameZamiast tego.\]
EDDTableFromFiles posiada system do ekstrakcji String z każdej nazwy pliku i za pomocą tego zrobić pseudo zmiennej danych. Obecnie nie ma systemu interpretowania tych strun jako dat / czasów. Istnieje kilka tagów XML do skonfigurowania tego systemu. Jeśli nie potrzebujesz części lub całego tego systemu, nie podawaj tych znaczników ani nie używaj wartości "".

  • preExtractRegex jestwyrażenie regularne (tutorial) używane do identyfikacji tekstu do usunięcia od początku nazwy pliku. Usunięcie następuje tylko wtedy, gdy regex jest dopasowany. Zwykle zaczyna się na "^", aby dopasować początek nazwy pliku.
  • post ExtractRegex jest wyrażeniem regularnym używanym do identyfikacji tekstu, który ma być usunięty z końca nazwy pliku. Usunięcie następuje tylko wtedy, gdy regex jest dopasowany. To zwykle kończy się na "$", aby dopasować koniec nazwy pliku.
  • extractRegex Jeśli występuje, to wyrażenie regularne jest używane po preExtractRegex i postExtractRegex do identyfikacji łańcucha, który ma być wyciągnięty z nazwy pliku (na przykład:stationID) . Jeśli regex nie jest dopasowany, używa się całej nazwy pliku (minus preExtract i post Wyciąg) . Użyj. "\ *", aby dopasować całą nazwę pliku, która zostanie po preExtractRegex i postExtractRegex.
  • kolumna NameForExtract to nazwa źródłowa kolumny danych dla wyciągniętych strun. AdataVariablez tymsourceNamemusi być wdataVariables (z dowolnym typem danych, ale zazwyczaj String) .

Na przykład, jeśli zbiór danych posiada pliki o nazwach takich jak XYZAble.nc, XYZBaker.ncXYZCharlie.nc,... i chcesz utworzyć nową zmienną (stationID) po odczycie każdego pliku, który będzie miał wartość ID stacji (Able, Baker, Charlie,...) wyciągnięty z nazw plików, można użyć tych znaczników:

  • <preExtractReget > ^ XYZ</ preExtractRegex > Początkowy ^ jest wyrażeniem regularnym o charakterze specjalnym, który zmuszaERDDAP™szukać XYZ na początku nazwy pliku. Powoduje to usunięcie XYZ na początku nazwy pliku (na przykład nazwa pliku XYZAble.ncstaje się zdolny.nc) .
  • <postExtractReget >\.nc$</ postExtractRegex > $na końcu jest wyrażeniem regularnym specjalny charakter, który zmuszaERDDAP™szukać.ncna końcu nazwy pliku. Od. to specjalny znak wyrażenia regularnego (który pasuje do jakiegokolwiek znaku) , jest zakodowany jako\. Tutaj (ponieważ 2E jest szesnastkowym numerem znaku dla danego okresu) . Powoduje to.nc, jeśli znaleziono na końcu nazwy pliku, należy usunąć (na przykład nazwa pliku częściowego Zdolny.ncstaje się zdolny) .
  • <extractReget >.\ *</ extractReget > Wyrażenie regularne\ * pasuje do pozostałych znaków (na przykład nazwa pliku częściowego Zdolność staje się ekstraktem dla pierwszego pliku) .
  • <ColumnNameForExtract >stationID</ ColumnNameForExtract > To mówiERDDAP™do tworzenia nowej kolumny źródłowejstationIDpodczas czytania każdego pliku. Każdy wiersz danych dla danego pliku będzie otrzymywał tekst z jego nazwy pliku (na przykład: Zdolny) jako wartość wstationIDkolumna.

W większości przypadków istnieją liczne wartości dla tych znaczników, które dają te same wyniki -- wyrażenia regularne są bardzo elastyczne. Ale w kilku przypadkach jest tylko jeden sposób na uzyskanie pożądanych wyników.  

Pseudo PrzewodniczącysourceNames

Każda zmienna w każdym zbiorze danych wERDDAP™ma<sourceName>] (# sourcename) która określa nazwę źródła zmiennej. EDDTableFromFiles obsługuje kilka pseudosourceNames, które pobierają wartość z innego miejsca (np. nazwa pliku lub wartość atrybutu globalnego) i promować tę wartość jako kolumnę stałych wartości dla tego kawałka danych (np. tabela danych tego pliku) . Dla tych zmiennych należy określić typ danych zmiennej poprzez [<Data Typ >] (# datatype) tag. Jeśli ekstrahowane informacje są ciągiem dateTime, należy określić format łańcucha dateTime watrybut jednostek. PseudonimsourceNameopcje są następujące:  

globalny:sourceNames

Atrybut globalnych metadanych w każdym pliku danych źródłowych może być promowany jako kolumna danych. Jeśli zmienna jest<sourceName> posiada format

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

wtedy kiedyERDDAP™odczytuje dane z pliku,ERDDAP™będzie szukać atrybutu globalnego tej nazwy (na przykład PI) i utworzyć kolumnę wypełnioną wartością atrybutu. Jest to przydatne, gdy atrybut posiada różne wartości w różnych plikach źródłowych, ponieważ w przeciwnym razie użytkownicy zobaczyliby tylko jedną z tych wartości dla całego zbioru danych. Na przykład:

        <sourceName>global:PI</sourceName>

Kiedy promujesz atrybut jako dane,ERDDAP™usuwa odpowiedni atrybut. Jest to właściwe, ponieważ wartość prawdopodobnie różni się w każdym pliku; podczas gdy w zagregowanym zbiorze danychERDDAP™będzie miała tylko jedną wartość. Jeśli chcesz, możesz dodać nową wartość atrybutu dla całego zbioru danych poprzez dodanie<att name = " atrybut Nazwa "> nowy Wartość </ att > do globalnego zbioru danych [<addAttributes>] (# addattriates) . Dla atrybutów globalnych, któreERDDAP™wymaga, na przykład, instytucji, MUSI dodać nową wartość dla atrybutu.  

zmienna:sourceNames

Atrybut metadanych zmiennej w każdym pliku może być promowany jako kolumna danych. Jeśli zmienna jest<sourceName\ > posiada format

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

wtedy kiedyERDDAP™odczytuje dane z pliku,ERDDAP™będzie szukać określonego atrybutu (na przykład ID) określonej zmiennej (na przykład instrument) i utworzyć kolumnę wypełnioną wartością atrybutu. Zmienna dominująca (na przykład instrument) Nie musi być jednym zdataVariables zawarte w definicji zbioru danych wERDDAP. Na przykład:

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

Jest to przydatne, gdy atrybut posiada różne wartości w różnych plikach źródłowych, ponieważ w przeciwnym razie użytkownicy zobaczyliby tylko jedną z tych wartości dla całego zbioru danych.

Kiedy promujesz atrybut jako dane,ERDDAP™usuwa odpowiedni atrybut. Jest to właściwe, ponieważ wartość prawdopodobnie różni się w każdym pliku; podczas gdy w zagregowanym zbiorze danychERDDAP™będzie miała tylko jedną wartość. Jeśli chcesz, możesz dodać nową wartość atrybutu dla całego zbioru danych poprzez dodanie<att name = " atrybut Nazwa "> nowy Wartość </ att > do zmiennej [<addAttributes>] (# addattriates) . Dla atrybutówERDDAP™wymaga, na przykład,ioos\_category (w zależności od konfiguracji) , MUSI dodać nową wartość dla atrybutu.

fileNamesourceNames

Można wyodrębnić część nazwy pliku i promować to jako kolumnę danych. Format tego pseudo [<sourceName>] (# sourcename) en

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

Na przykład:

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

Kiedy EDDTableFromFiles odczytuje dane z pliku, to upewnij się, że nazwa pliku (na przykład A201807041442.slcpV1.nc) pasuje do określonego wyrażenia regularnego ("regex") i wyodrębnić określone (w tym przypadku, pierwszy) Grupa (która jest częścią otoczoną nawiasami) , na przykład, "201807041442". (Widzisz to?dokumentacja regexorazregex tutorial.) Regex może być określony jako łańcuch z lub bez otaczających cudzysłów. Jeśli regex jest określony jako łańcuch z otaczającymi cudzysłówka, łańcuch musi byćciąg w stylu JSON- (ze specjalnymi znakami, które uciekły z\ znakami) . Numer grupy przechwytywania to zazwyczaj 1 (pierwsza grupa przechwytująca) , ale może być dowolny numer.  

pathNamesourceNames

Możesz wyodrębnić część pełnej ścieżki pliku Nazwa (/ katalogi / fileName.ext) i promować to jako kolumnę danych. Format tego pseudo [<sourceName>] (# sourcename) en

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

Na przykład:

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

Kiedy EDDTableFromFiles odczytuje dane z pliku, to upewnij się, że pathName (na przykład / data / myDatasetiID / BAY17 / B201807041442.nc. Dla tego testu separatory katalogów zawsze będą'/'Nigdy ') pasuje do określonego wyrażenia regularnego ("regex") i wyodrębnić określone (w tym przypadku, pierwszy) Grupa (która jest częścią otoczoną nawiasami) na przykład "BAY17". (Widzisz to?dokumentacja regexorazregex tutorial.) Regex może być określony jako łańcuch z lub bez otaczających cudzysłów. Jeśli regex jest określony jako łańcuch z otaczającymi cudzysłówka, łańcuch musi byćciąg w stylu JSON- (ze specjalnymi znakami, które uciekły z\ znakami) . Numer grupy przechwytywania to zazwyczaj 1 (pierwsza grupa przechwytująca) , ale może być dowolny numer.  

"0 plików" Komunikat o błędzie
  • Jeśli ucieknieszGenerateDatasetsXmllubDasDs, lub jeśli spróbujesz załadować tableFrom... Zestaw danych plików wERDDAP™, i otrzymasz komunikat błędu "0 files" wskazujący, żeERDDAP™znaleziono 0 pasujących plików w katalogu (kiedy myślisz, że są pasujące pliki w tym katalogu) :
    • Sprawdź, czy pliki są w tym katalogu.
    • Sprawdź pisownię nazwy katalogu.
    • Sprawdź plik NameRemex. Bardzo łatwo popełnić błędy z regexami. Do celów testowych, spróbuj regex.\ *, który powinien pasować do wszystkich nazw plików. (Widzisz to?dokumentacja regexorazregex tutorial.)
    • Sprawdź, czy użytkownik, który prowadzi program (np. użytkownik = tomcat (?) dla Tomcat /ERDDAP) ma pozwolenie na przeczytanie tych plików.
    • W niektórych systemach operacyjnych (na przykład, SELER) i w zależności od ustawień systemu, użytkownik, który prowadził program, musi mieć "przeczytaj" pozwolenie na cały łańcuch katalogów prowadzących do katalogu, który posiada pliki.  
standaryzacja Co?
  • Gdy podklasa plików EDDTableFromFiles agreguje zbiór plików źródłowych dla danej zmiennej, wszystkie pliki źródłowe MUSI mieć identyczne wartości atrybutów dla kilku atrybutów:scale\_factor,add\_offset,\ _ Niepodpisane,missing\_value,\ _ FillValue i jednostki). Pomyśl o tym: jeśli jeden plik ma jednostki windSpeed = węzły, a drugi ma jednostki windSpeed = m / s, to wartości danych z tych dwóch plików nie powinny być włączone do tego samego zagregowanego zbioru danych. Kiedy EDDTableFromFiles po raz pierwszy tworzy zbiór danych, odczytuje wartości atrybutów z jednego pliku, a następnie odrzuca wszystkie pliki, które mają różne wartości dla tych ważnych atrybutów. Dla większości zbiorów plików nie jest to problem, ponieważ atrybuty wszystkich zmiennych są spójne. Jednakże dla innych kolekcji plików może to prowadzić do 1%, 10%, 50%, 90%, a nawet 99% plików odrzuconych jako "złe" pliki. To są kłopoty.

Pliki EDDTableFrom mają system do rozwiązywania tego problemu: standaryzacja Co? Standaryzacja Jakie ustawienie mówi EDDTableFromFiles do standaryzacji plików jak tylko je przeczyta, zanim EDDTableFromFiles spojrzy na atrybuty, aby sprawdzić czy są spójne.

Po drugiej stronie jest: jeśli zbiór danych nie ma tego problemu, nie używaj standaryzacji Co? standaryzacja Co wiąże się z pewnym potencjalnym ryzykiem (omówione poniżej) oraz nieefektywności. Więc jeśli nie potrzebujesz cech standaryzacji Co, nie ma potrzeby stawienia czoła potencjalnym zagrożeniom i nieefektywności. Największa nieefektywność jest: Kiedy różne standaryzacji Jakie opcje są używane przez zbiór danych, oznacza to, że pliki źródłowe przechowują dane na znacznie różne sposoby (np. z różnymiscale\_factororazadd\_offsetlub z łańcuchami czasu przy użyciu różnych formatów) . Tak więc dla danego ograniczenia w żądaniu użytkownika, nie ma możliwościERDDAP™aby zrobić jedno ograniczenie poziomu źródłowego, które może być stosowane do wszystkich plików źródłowych. Więc...ERDDAP™mogą stosować te ograniczenia wyłącznie na wyższym poziomie. Więc...ERDDAP™musi odczytać dane z większej liczby plików przed zastosowaniem wyższych, destination- level ograniczeń. Więc prośby do zbiorów danych, które używają standaryzacji Co zajmuje więcej czasu, by zostać przebadanym.

Aby korzystać z tego systemu, musisz określić

    <standardizeWhat>*standardizeWhat*</standardizeWhat>  

wdatasets.xmldla EDDTableFrom... Zestaw danych plików(w obrębie<dataset > tag).

W standaryzacja Co? wartość określa, które zmiany EDDTableFromFiles powinny być stosowane. Zmiany są sumą pewnej kombinacji:

  1. Rozpakuj Prowadzi to wiele wspólnych i bezpiecznych operacji standaryzacji kolumn liczbowych w plikach:
    • Jeśliscale\_factorlubadd\_offsetatrybuty są obecne, usuwają je i stosują je do rozpakowania wartości danych.
    • Rozpakowywanie atrybutów (np. rzeczywisty\ _ min, rzeczywisty\ _ max,actual\_range,data\_min,data\_max, data\ _ range,valid\_min,valid\_max,valid\_range) , jeśli występuje, jeśli zmienna była zapakowana, i jeśli wartości atrybutu były zapakowane (To trudne, ale niezawodne.) .
    • Jeśli\ _ FillValue lubmissing\_valuesą obecne, konwertować te wartości danych doERDDAP"standard" brakujące wartości: MAX\ _ VALUE dla typów całkowitych (np. 127 dla bajtów, 32,767 dla skrótów i 2,147,483,647 dla intów, 9223372036854775807 dla długów) i NaN dla dublerów i pływaków.
    • Usuń starą\ _ FillValue i / lubmissing\_valueatrybuty (jeżeli istnieje) , i zastąpić je tylko\ _ FillValue =\[doERDDAP™standardowa brakująca wartość\].  
  2. Standardowe czasy numeryczne Jeżeli kolumna liczbowa posiada jednostki czasu liczbowego w stylu CF- (" timeUnits od baseTime ", np.", dni od 1900- 01- 01 ") , to zmienia datę Wartości czasowe"seconds since 1970-01-01T00:00:00Z"wartości i zmiany atrybutu jednostek, aby to wskazać. Jeśli jest to zaznaczone i istnieje szansa, że ta zmienna mascale\_factorlubadd\_offset, # 1 Must be selected also.  
  3. Zastosuj ciągmissing\_value
    Jeśli kolumna String posiada\ _ FillValue i / lubmissing\_valueatrybuty, to konwertuje te wartości na "" i usuwa atrybuty.  
  4. Znajdź numermissing\_value
    Jeśli kolumna numeryczna nie posiada\ _ FillValue lubmissing\_valueatrybuty, to próbuje zidentyfikować nieokreślony liczbowymissing\_value (np. -999, 9999, 1e37f) i przekonwertować jego instancje do "standardowych" wartości (MAX\ _ VALUE dla typów całkowitych, a NAN dla podwójnych i pływaków) . Wariant ten wiąże się z ryzykiem: jeżeli największa lub najmniejsza poprawna wartość danych wygląda jak brakująca wartość (np. 999) , wtedy te ważne wartości danych zostaną przeliczone na brakujące wartości (np. NaN) .  
  5. Zmień ciąg "N / A" na "" Dla każdej kolumny String, przekonwertuj kilka strun powszechnie używanych do wskazania brakującej wartości String do "". Obecnie to szuka. ","... ",", ","? ","? "," N / A "," NA "," none "," not applicable "," null "," unknown "," undescripted ". Wyszukiwanie strun jest niewrażliwe i stosowane po strunach są wykończone 'd." nd "i" inne "nie znajdują się na liście. Wariant ten wiąże się z ryzykiem: Struktury, które uważasz za prawidłowe wartości mogą być konwertowane na "".  
  6. Standaryzuj do String ISO 8601 DateTimes Dla każdej kolumny String, spróbuj przekonwertować nie -purely-numeryczne String dateTimes (np. "2 stycznia 2018 r".) do ISO 8601 String dateTimes ("2018- 01- 02") . Uwaga że wszystkie wartości danych dla kolumny muszą używać tego samego formatu, inaczej ta opcja nie wprowadzi żadnych zmian do danej kolumny. Wariant ten wiąże się z ryzykiem: Jeśli istnieje kolumna o wartościach łańcuchowych, które po prostu wyglądają jak wspólna data Format czasowy, będą one konwertowane do ISO 8601 String dateTimes.  
  7. Standard Compact DateTimes do ISO 8601 DateTimes Dla każdej kolumny String lub typu integer- spróbuj przekonwertować pureli- numeryczny String dateTimes (np. "20180102") do ISO 8601 String dateTimes ("2018- 01- 02") . Uwaga że wszystkie wartości danych dla kolumny muszą używać tego samego formatu, inaczej ta opcja nie wprowadzi żadnych zmian do danej kolumny. Wariant ten wiąże się z ryzykiem: Jeśli istnieje kolumna z wartościami, które nie są zwarte data Czasy, ale wyglądają jak kompaktowe dateTimes, zostaną przekształcone do ISO 8601 String dateTimes.  
  8. Jednostki standardowe To próbuje standaryzować ciąg jednostek dla każdej zmiennej. Na przykład "metry na sekundę", "metr na sekundę","m.s^-1","m s-1""M.s-1" zostanie zamienione na "M.s- 1". To nie zmienia wartości danych. To działa dobrze dla poprawnegoUDUNITSjednostki ciągów, ale może mieć problemy z niepoprawnymi lub skomplikowanymi ciągów. Można poradzić sobie z problemami poprzez określenie konkretnych od - do par w<standaryzeUdunits > wERDDAPjest \[tomcat\]/ webapps / erddap / WEB- INF / classes / gov / noaa / pfel / erddap / util / messages.xml file. Proszę wysłać do Chrisa wszelkie zmiany. John w noaa.gov więc mogą być włączone do domyślnych messages.xml. Wariant ten wiąże się z ryzykiem: Może to zniekształcić niektóre skomplikowane lub nieprawidłowe jednostki; jednakże, można użyć work- around opisane powyżej, aby obejść problemy, jeśli wystąpią.  

Domyślna wartość standaryzacji Co to jest 0, co nic nie robi.

Jeśli / kiedy zmieniasz wartość standaryzacji Co, następnym razem kiedy zestaw danych jest przeładowany,ERDDAP™ponownie odczyta wszystkie pliki danych dla zbioru danych w celu odbudowania minibazy danych z informacjami o każdym pliku. Jeśli zbiór danych ma wiele plików, to zajmie to dużo czasu.

Uwagi:

  • Trudną rzeczą jest... Standaryzacja Jakie ustawienie jest używane dla wszystkich kolumn w pliku źródłowym. Więc, na przykład, używając # 2048 może z powodzeniem przekształcić kolumnę kompaktowych String dateTimes do ISO 8601 String dateTimes, ale może również błędnie przekształcić kolumnę ze Strings, które po prostu wyglądają jak kompaktowe dateTimes.  
  • datasets.xmli GenerateDatasets Xml - Szczególnie trudno jest uzyskać ustawienia poprawne wdatasets.xmlAby twój zestaw danych działał tak, jak chcesz. Najlepsze podejście (jak zawsze) jest:
    1. StosowanieGenerateDatasetsXmli określić wartość standaryzacji Czego chciałbyś użyć.
    2. StosowanieDasDsaby zapewnić prawidłowe ładowanie zbioru danych i odzwierciedlać standaryzację Co ustawiasz?
    3. Test zbioru danych ręcznie, gdy jest wERDDAP™zapewnienie, aby zmienne, których dotyczy wniosek, działały zgodnie z oczekiwaniami.  
  • Ryzyko - Opcje # 256 i powyżej są bardziej ryzykowne, tzn. istnieje większa szansa, żeERDDAP™Dokonają zmiany, której nie powinno się dokonywać. Na przykład, opcja # 2048 może przypadkowo przekonwertować zmienną ze strunami ID stacji, które po prostu wyglądają ISO 8601 "kompaktowe" daty (np. 20180102) w ISO 8601"extended"daty ("2018- 01- 02") .  
  • Powoli po zmianie... Od wartości standaryzacji Co zmienia wartości danych, które EDDTableFromFiles widzi dla każdego pliku danych, jeśli zmienisz standaryzację Jakie ustawienia, EDDTableFromFiles wyrzuci wszystkie buforowane informacje o każdym pliku (która zawiera min i max dla każdej zmiennej danych w każdym pliku) i ponownie przeczytać każdy plik danych. Jeśli zbiór danych ma dużą liczbę plików, może to być bardzo czasochłonne, więc zajmie dużo czasu, aby zestaw danych ponownie załadować pierwszy razERDDAP™Przeładuj go po dokonaniu zmiany.  
  • Heurystyka - Opcje # 256 i powyżej używają heurystyki do wprowadzania zmian. Jeśli natkniesz się na sytuację, w której heurystyka podejmuje złą decyzję, prosimy o wysłanie do Chrisa opisu problemu. John w Noah. więc możemy poprawić heurystykę.  
  • Alternatywy... Jeśli jedna z opcji standaryzCo nie rozwiązuje problemu dla danego zbioru danych, może być w stanie rozwiązać problem poprzez.ncPlik mldo równoległego każdego pliku danych i zdefiniowania zmian w plikach tak, aby pliki były spójne. Więc powiedz EDDTableFrom... Zestaw danych plików do agregacji.ncPliki ml.

Lub użyćNCOfaktycznie dokonać zmian w plikach tak, aby pliki były spójne.

Oddzielne kolumny na rok, miesiąc, data, godzina, minuta, drugi

Jest dość powszechne dla tabelarycznych plików danych mieć oddzielne kolumny na rok, miesiąc, datę, godzinę, minutę, sekundę. PrzedERDDAP™v2.10, jedynym rozwiązaniem była edycja pliku danych, aby połączyć te kolumny w ujednoliconą kolumnę czasową. ZERDDAP™2.10 +, można użyć [<sourceName> = wyrażenie <sourceName>] (# sourcename) powiedziećERDDAP™jak połączyć kolumny źródłowe, aby ujednolicić kolumnę czasu, więc nie trzeba już edytować pliku źródłowego.

<skipHeaderToRegex & gt;
  • [<SkipHeaderToRegex >] (# skipheadertoregex) -- Opcjonalne. (Tylko dla danych EDDTableFromAsciiFiles i EDDTableFromColumnaraSciiFiles.)
    Kiedy EDDTableFromAsciiFiles przeczyta plik danych, zignoruje wszystkie linie do i włącznie z linią, która pasuje do tego wyrażenia regularnego. Domyślnie jest ", co nie używa tej opcji. Przykładem jest
    <skipHeaderToRegex>\\\*\\\*\\\* END OF HEADER.\\*<skipHeaderToRegex>  

który ignoruje wszystkie linie do linii, która zaczyna się od "\*\** END OF HEADER ".

Kiedy używasz tego znacznika,<ColumnNamesRow > oraz<first DataRow > działa tak, jakby nagłówk został usunięty przed odczytem pliku. Na przykład, można użyć columnNamesRow = 0, jeśli nazwy kolumn znajdują się w wierszu tuż po nagłówku.

Jeśli chcesz użyć genere Zestawy danych Xml z zestawem danych, który potrzebuje tego znacznika:

  1. Utwórz nowy, tymczasowy, przykładowy plik kopiując istniejący plik i usuwając nagłówek.
  2. Uruchom generowanie Zestawy danych Xml i określić plik próbki.
  3. Ręcznie dodać<skipHeaderToRegex > tag dodatasets.xmlChunk.
  4. Usuń tymczasowy, przykładowy plik.
  5. Użyj zbioru danych wERDDAP.
<skipLinesRegex & gt;

Opcjonalne. (Tylko dla danych EDDTableFromAsciiFiles i EDDTableFromColumnaraSciiFiles.)
Kiedy EDDTableFromAsciiFiles przeczyta plik danych, zignoruje wszystkie linie pasujące do tego wyrażenia regularnego. Domyślnie jest ", co nie używa tej opcji. Przykładem jest

    <skipLinesRegex>#.\\*<skipLinesRegex>  

które zignorują wszystkie linie, które zaczynają się od "#".

Kiedy używasz tego znacznika,<ColumnNamesRow > oraz<first DataRow > działa tak, jakby wszystkie pasujące linie zostały usunięte przed odczytem pliku. Na przykład, można użyć columnNamesRow = 0, nawet jeśli istnieje kilka linii zaczynających się, na przykład, "#" na początku pliku.

EDDTableFromFiles szkielet 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 jest zasadniczo skraplaczem ekranu. Jest on przeznaczony do czynienia z źródłami danych, które mają prostą usługę internetową do żądania danych (często formularz HTML na stronie internetowej) i które mogą zwrócić dane w jakimś ustrukturyzowanym formacie ASCII (na przykład format tekstowy ASCII, często zawierający inne informacje przed i / lub po danych) .

EDDTableFromAsciiService jest nadklasą wszystkich klas EDDTableFromAsciiService... Nie można bezpośrednio korzystać z EDDTableFromAsciiService. Zamiast tego należy użyć podklasy EDDTableFromAsciiService do obsługi określonych rodzajów usług:

Obecnie nie są obsługiwane żadne inne rodzaje usług. Ale zazwyczaj stosunkowo łatwo jest wspierać inne usługi, jeśli działają one w podobny sposób. Skontaktuj się z nami, jeśli masz prośbę.

Szczegóły

Poniższe informacje dotyczą wszystkich podklas EDDTableFromAsciiService.

  • Ograniczenia...ERDDAP™żądania dotyczące danych tabelarycznych mogą nakładać ograniczenia na każdą zmienną. Usługa bazowa może lub nie może dopuścić ograniczeń dotyczących wszystkich zmiennych. Na przykład wiele usług wspiera jedynie ograniczenia dotyczące nazw stacji, szerokości, długości i czasu. Tak więc, gdy podklasa EDDTableFromAsciiService otrzymuje wniosek o podzbiór zbioru danych, przechodzi jak najwięcej ograniczeń do usługi danych źródłowych, a następnie stosuje pozostałe ograniczenia do danych zwróconych przez usługę, przed przekazaniem danych do użytkownika.
  • Ważny zakres... W przeciwieństwie do wielu innych typów zbiorów danych EDDTableFromAsciiService zwykle nie zna zakresu danych dla każdej zmiennej, więc nie może szybko odrzucić wniosków o dane poza prawidłowym zakresem.
  • Parsing the ASCII Text Response -- Gdy EDDTableFromAsciiService otrzyma odpowiedź z usługi tekstowej ASCII, musi potwierdzić, że odpowiedź ma oczekiwany format i informacje, a następnie pobrać dane. Możesz określić format używając różnych specjalnych znaczników w części XML dla tego zbioru danych:
    • <beforData1 > przez<beforData10 > tagi -- Możesz określić serię fragmentów tekstu (ile chcesz, do 10) EDDTableFromAsciiService musi szukać w nagłówku tekstu ASCII zwróconego przez usługę<beforData1 > przez<beforData10 >. Na przykład jest to przydatne do sprawdzenia, czy odpowiedź zawiera oczekiwane zmienne przy użyciu oczekiwanych jednostek. Ostatni znacznik poprzedzający Dane, który podajesz, identyfikuje tekst, który pojawia się tuż przed rozpoczęciem danych.
    • <afterData > -- Określa on tekst, którego będzie szukał EDDTableFromAsciiService w tekście ASCII zwróconym przez usługę, który oznacza koniec danych.
    • <nData > -- Jeżeli EDDTableFromAsciiService znajdzie ten tekst w tekście ASCII zwróconym przez usługę, stwierdza, że nie ma danych, które odpowiadałyby żądaniu.

EDDTableFromAsciiService szkielet 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 sprawia, że zbiory danych EDDTable z usług danych tekstowych ASCII oferowane przezNOAAjestNational Ocean Service (NOS) . Informacje na temat działania tej klasy i jej zastosowania można znaleźć w super klasie tej klasy.EDDTableFromAsciiService. Mało prawdopodobne, żeby ktoś inny niż Bob Simons musiał korzystać z tej podklasy.

Ponieważ dane w odpowiedzi z usługi NOS używają formatu tekstowego kolumny ASCII, zmienne danych inne niż szerokość i długość geograficzna muszą posiadać specjalny atrybut określający, które znaki każdej linii danych zawierają dane tej zmiennej, na przykład:

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

 

EDDTableFromAllDatasets

EDDTableFromAllDatasets jest zbiorem danych wysokiego poziomu, który zawiera informacje o wszystkich innych zbiorach danych, które są obecnie załadowane w TwoimERDDAP. W przeciwieństwie do innych typów zbiorów danych, nie ma specyfikacji dlaallDatasetszestaw danych wdatasets.xml.ERDDAP™automatycznie tworzy jeden zestaw danych EDDTableFromAllDatasets (zdatasetID=allDatasets) . Tak więcallDatasetszbiór danych zostanie utworzony w każdymERDDAP™instalacja i będzie działać w ten sam sposób w każdymERDDAP™instalacja.

WallDatasetszbiór danych jest zbiorem danych tabelarycznych. Zawiera szereg informacji dla każdego zbioru danych. Zawiera kolumny zawierające informacje o każdym zbiorze danych, np.:datasetID, dostępna, instytucja, tytuł, minLongitude, maxLongitude, minLatitude, maxLatitude, minTime, maxTime itp. PonieważallDatasetsjest zbiorem danych tabelarycznych, można go zapytania w ten sam sposób można zapytania innych tabelarycznych zbiorów danych wERDDAP™i możesz określić typ pliku dla odpowiedzi. Pozwala to użytkownikom na wyszukiwanie zbiorów danych będących przedmiotem zainteresowania w bardzo potężny sposób.  

Pliki EDDTableFromAsciiFiles

Pliki EDDTableFromAsciiFiles dane zagregowane z plików tabelarycznych ASCII oddzielonych zespołami, tabelami, średnikami lub spacjami.

  • Najczęściej pliki będą miały nazwy kolumn w pierwszym wierszu i dane zaczynające się w drugim wierszu. (Tutaj pierwszy wiersz pliku jest nazywany wierszem nr 1.) Ale możesz użyć<ColumnNamesRow > oraz<first DataRow > w Twoimdatasets.xmlplik określający inny numer wiersza.
  • ERDDAP™pozwala rzędom danych na posiadanie różnych liczb wartości danych.ERDDAP™przyjmuje, że brakujące wartości danych są kolumnami końcowymi w wierszu.ERDDAP™przypisuje standardowe brakujące wartości wartości dla brakujących wartości danych. (dodano v1.56)
  • Pliki ASCII są łatwe w obsłudze, ale nie są najskuteczniejszym sposobem przechowywania / pobierania danych. Dla większej wydajności, zapisać pliki jakoNetCDFv3.ncpliki (z jednym wymiarem, "wiersz", współdzielony przez wszystkie zmienne) Zamiast tego. Możesz.podanieERDDAP™do generowania nowych plików.
  • Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Ze względu na całkowity brak metadanych w plikach ASCII, zawsze trzeba będzie edytować wyniki GenerateDatasetsXml.
  • UWAGA: KiedyERDDAP™odczytuje pliki danych ASCII, jeśli znajdzie błąd w danej linii (np. nieprawidłowa liczba elementów) , zapisuje wiadomość ostrzegawczą ("OSTRZEŻENIE: zła linia (s) danych "... z listą złych linii na kolejnych liniach) doplik log.txta następnie kontynuuje czytanie reszty pliku danych. Tak więc, Twoim obowiązkiem jest okresowo patrzeć (lub napisać skrypt, aby to zrobić) dla tej wiadomości w dzienniku. txt tak, że można naprawić problemy w plikach danych.ERDDAP™jest skonfigurowany w ten sposób, aby użytkownicy mogli kontynuować odczytywanie wszystkich dostępnych ważnych danych, mimo że niektóre linie pliku mają wady.  

Tabela EDDFrom Pliki AwsXmlFiles

Tabela EDDFrom Pliki AwsXmlFiles dane agregatów z zestawu Automatic Weather Station (AWS) Pliki danych XML za pomocą API XML WeatherBug Rest (który nie jest już aktywny) .

Pliki EDDTableFromColumnarasciiFiles

Pliki EDDTableFromColumnarasciiFiles dane zagregowane z tabelarycznych plików ASCII z kolumnami o ustalonej szerokości.

  • Najczęściej pliki będą miały nazwy kolumn w pierwszym wierszu i dane zaczynające się w drugim wierszu. Pierwsza linia / wiersz w pliku jest nazywana wierszem # 1. Ale możesz użyć<ColumnNamesRow > oraz<first DataRow > w Twoimdatasets.xmlplik określający inny numer wiersza.

  • W<addAttributes> dla każdego<dataVariable> dla tych zbiorów danych MUSI zawierać te dwa atrybuty specjalne:

    • <att nazwa = "startColumn" > liczba całkowita <att > -- określa kolumnę znaków w każdej linii, która jest początkiem tej zmiennej danych.
    • <att nazwa = "stopColumn" > liczba całkowita <att > -- określa kolumnę znaków w każdej linii, która jest 1 po zakończeniu tej zmiennej danych.

Pierwsza kolumna znaków jest nazywana kolumną # 0. Na przykład, dla tego pliku, który ma wartości czasu przy przekroczeniu wartości temperatury:

      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

zmienna danych czasu

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

a zmienna danych czasowych

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

Atrybuty te MUSI być określone dla wszystkich zmiennych z wyjątkiemWartość ustalonaoraznazwy file- name- source-zmienne.

  • Pliki ASCII są łatwe w obsłudze, ale nie są efektywnym sposobem przechowywania / pobierania danych. Dla większej wydajności, zapisać pliki jakoNetCDFv3.ncpliki (z jednym wymiarem, "wiersz", współdzielony przez wszystkie zmienne) Zamiast tego. Możesz.podanieERDDAP™do generowania nowych plików.
  • Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Ze względu na trudności z określeniem pozycji startowych i końcowych dla każdej kolumny danych oraz całkowity brak metadanych w plikach ASCII, zawsze trzeba będzie edytować wyniki z GenerateDatasetsXml.  

EDDTableFromHttpGet

Tabela EDD FromHttpGet różni się od wszystkich innych typów zbiorów danych wERDDAP™w którym posiada system, w którym konkretni "autorzy" mogą dodawać dane, poprawiać dane lub usuwać dane z zbioru danych przez regularneHTTP GETlubPOSTżądania z programu komputerowego, skryptu lub przeglądarki. Zestawienie danych jest do sprawdzenia przez użytkowników w taki sam sposób, jak wszystkie inne zbiory danych EDDTable są do sprawdzenia wERDDAP. Zobacz opis tej klasy superklasy,Pliki EDDTableFromFilesCzytać o cechach odziedziczonych po tej superklasie.

Unikalne cechy EDDTableFromHttpGet opisano poniżej. Musisz przeczytać cały ten wstępny rozdział i zrozumieć go; w przeciwnym razie, możesz mieć nierealistyczne oczekiwania lub dostać się w kłopoty, które jest trudne do naprawienia.

Przewidywane użycie

System ten jest przeznaczony do:

  • Tabela (in situ) dane, a nie dane zaprogramowane.
  • Dane w czasie rzeczywistym - Celem jest umożliwienie autorowi (np. czujnik, automatyczny skrypt QC lub określony człowiek) aby zmienić zbiór danych (przezPolecenie .insert lub .delete) i uczynić tę zmianę dostępną dlaERDDAP™użytkowników, wszystkie w mniej niż 1 sekundę, i prawdopodobnie dużo szybciej. Większość tej sekundy to czas sieciowy.ERDDAP™może przetwarzać żądanie w ciągu około 1 ms, a dane są natychmiast dostępne dla użytkowników. To jest...szybko,wytrzymałyorazniezawodny system.
  • Prawie każda częstotliwość danych - Ten system może akceptować rzadkie dane (np. codziennie) bardzo częste dane (np. dane 100 Hz) . Jeśli zoptymalizujesz system, może obsługiwać dane o wyższej częstotliwości (może 10 KHz danych, jeśli przejdziesz do skrajności) .
  • Dane z jednego czujnika lub kolekcja podobnych czujników.
  • Wersowanie/Nauka powtarzalna/DOIs -- Sytuacje, w których trzeba być w stanie dokonać zmian w danych (np. zmienić flagę kontroli jakości) , wiedzieć, który autor dokonał każdej zmiany, znać znacznik czasu, kiedy autor dokonał zmiany, i (na żądanie) być w stanie zobaczyć oryginalne dane sprzed dokonania zmiany. Te zbiory danych kwalifikują się zatem doDOIs. ponieważ spotykają się zDOIwymóg, aby zbiór danych nie uległ zmianie, z wyjątkiem agregacji. Generalnie, w pobliżu zbiorów danych w czasie rzeczywistym nie kwalifikują się doDOIs ponieważ dane są często zmieniane z mocą wsteczną (np. do celów QA / QC) .  

Gdy dane znajdują się w zbiorze danych EDDTableFromHttpGet, każdy użytkownik może żądać danych w ten sam sposób, w jaki żąda danych z dowolnego innego zbioru danych EDDTable.  

Eksperymentalne: Ostrożnie.

Ponieważ ten system jest nowy i utracone dane środowiskowe nie mogą być ponownie nabyte, należy traktować EDDTableFromHttpGet jako eksperymentalne. Jeśli przejdziesz z innego systemu, proszę uruchomić stary system i nowy system równolegle, aż będziesz pewny, że nowy system działa dobrze (tygodnie lub miesiące, nie tylko godziny lub dni) . We wszystkich przypadkach należy upewnić się, że system oddzielnie archiwizuje .insert i .delete URL, które są wysyłane do EDDTableFromHttpGet dataset (nawet jeśli tylko w Apache i / lub Tomcat logi) Przynajmniej na jakiś czas. I we wszystkich przypadkach upewnij się, że pliki danych stworzone przez Twój zestaw danych EDDTableFromHttpGet są rutynowo backup do zewnętrznych urządzeń do przechowywania danych. (Zauważ, żersync. może tworzyć kopie zapasowe plików danych stworzonych przez EDDTableFromHttpGet bardzo skutecznie.)
 

.insert i .delete

Dla każdego zbioru danych wERDDAP™, po wysłaniu wniosku doERDDAP™dla podzbioru danych w zbiorze danych, możesz określić typ pliku, który chcesz dla odpowiedzi, np. .csv,.htmlTable,.nc,.json. EDDTableFromHttp Pobierz rozszerza ten system, aby obsługiwać dwa dodatkowe "typy plików", które mogą wstawić (lub zmiana) lub usunąć dane w zbiorze danych:

  • .insert
    • Żądanie jest sformatowane jak standardowa odpowiedź HTML, z kluczem = pary wartości, oddzielone przez '&'. Na przykład: 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
      mówiERDDAP™dodać lub zmienić dane dlastationID= 46088 dla określonego czasu.
    • Autorem tej zmiany jest JohnSmith, a kluczem jest jakiś Key1.
    • URL musi zawierać prawidłowe wartości (nie brakujące wartości) dla wszystkichhttpGetRequiredZmienne
    • Jeśli wartościhttpWymagane Zmienne we wniosku (np.,stationIDi czas) dopasować wartości w wierszu już w zbiorze danych, nowe wartości skutecznie nadpisać stare wartości (chociaż stare wartości są nadal dostępne, jeśli użytkownik żąda danych z poprzedniegowersjazbioru danych) .
    • URL .insert nie może nigdy zawierać znacznika czasu = (ERDDAP™generuje tę wartość) lub & polecenie = (który jest określony przez .insert (który jest poleceniem = 0) lub .delete (który jest poleceniem = 1) ) .
    • Jeśli .insert URL nie określa wartości dla innych kolumn, które są w zbiorze danych, przyjmuje się, że są to wartości natywne brakujące (MAX\ _ VALUE dla typów danych całkowitych, NaN dla pływaków i podwójnych oraz "" dla strun) .  
    • .delete
      • Żądanie jest sformatowane jak standardowa odpowiedź HTML, z kluczem = pary wartości, oddzielone przez '&'. Na przykład: https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
        mówiERDDAP™do usunięcia danychstationID= 46088 w określonym czasie.
      • Autorem tej zmiany jest JohnSmith, a kluczem jest jakiś Key1.
      • URL musi określićhttpGetRequiredZmiennewe wniosku (np.,stationIDi czas) . Jeśli te wartości odpowiadają wartościom w wierszu już znajdującym się w zbiorze danych (które zwykle będą) , stare wartości są skutecznie usuwane (chociaż stare wartości są nadal dostępne, jeśli użytkownik żąda danych z poprzedniegowersjazbioru danych) .
      • Nie ma potrzeby podawania wartości dla nie- HttpGetRequiredZmienne, inne niż autor, które są potrzebne do uwierzytelnienia żądania.  

Szczegóły:

  • .insert i .delete żądania są sformatowane jak standardowe odpowiedzi HTML formy, z kluczem = pary wartości, oddzielone przez '&'. Wartości muszą być% zakodowanych. Tak więc, musisz zakodować znaki specjalne do postaci% HH, gdzie HH jest dwucyfrową wartością szesnastkową znaku. Zazwyczaj trzeba zamienić kilka znaków interpunkcji:% na% 25, & na% 26 ", na% 22,<% 3C, =% 3D, >% 3E, +% 2B,|w% 7C,\[w% 5B,\]do% 5D, spacja do% 20 i konwertuj wszystkie znaki powyżej # 127 na ich formę UTF- 8, a następnie procent kodowania każdego bajtu formy UTF- 8 do formatu% HH (poproś programistę o pomoc) .
  • .insert i .delete wnioski muszą zawieraćhttpGetRequiredZmienne, np.,stationIDi czas. W przypadku żądań .insert przyjmuje się, że wartości nie są określone we wniosku. (MAX\ _ VALUE dla zmiennych całkowitych, NaN dla zmiennych zmiennoprzecinkowych i podwójnych oraz pusty String dla zmiennych strunowych) . Dla .delete requests, wartości dla non-HttpGetRequired Zmienne (inne niż autor, który jest wymagany) są ignorowane.
  • .insert i .delete żądania muszą zawierać nazwę autora i klucz autora poprzez parametr w formularzu autor = autor\ _ key jako ostatni parametr we wniosku. Złożenie takiego wniosku na końcu zapewnia otrzymanie całego wniosku przezERDDAP. Tylko autor (nie klucz) będą przechowywane w pliku danych. Musisz określić listę dozwolonych autor\ _ key przez atrybut globalnyhttpGetKeys
  • Parametry .insert i .delete mogą być skalarne (pojedyncza) wartości lub tablice dowolnej długości w postaci\[wartość 1, wartość 2, wartość 3,..., wartość N\]. Dla danego żądania, wszystkie zmienne z tablicami muszą mieć tablice o tej samej liczbie wartości (inaczej to błąd) . Jeśli żądanie ma wartości skalarne i tablice, wartości skalarne są replikowane, aby stać się tablicami o tej samej długości co określone tablice, np., &stationID= 46088 może być traktowane jako &stationID=\[46088,46088,46088\]. Tablice są kluczem dowysoka przepustowość. Bez tablic, będzie wyzwaniem dla .insert lub .delete więcej niż 8 wierszy danych na sekundę od zdalnego autora (z powodu całej sieci) . Z tablicami, będzie łatwo .insert lub .delete więcej niż 1000 rzędów danych na sekundę z zdalnego czujnika.
  • .insert i .delete accept (bez komunikatu błędu) liczby zmiennoprzecinkowe, gdy oczekuje się liczby całkowitej. W tych przypadkach zbiór danych okrąża wartości do liczb całkowitych.
  • .insert i .delete accept (bez komunikatu błędu) liczby całkowite i zmiennoprzecinkowe, które są poza zakresem danych zmiennej. W tych przypadkach zbiór danych przechowuje wartości jakoERDDAProdzime brakujące wartości dla tego typu danych (MAX\ _ VALUE dla typów całkowitych i NaN dla pływaków i podwójnych) .  

Odpowiedź

Jeśli .insert lub .delete URL powiedzie się, kod odpowiedzi HTTP wyniesie 200 (OK) i odpowiedź będzie tekst z.jsonobiekt, np.,

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

Zauważcie, że znaczniki czasu mają milisekundową precyzję.

Jeśli .insert lub .delete URL zawiedzie, otrzymasz kod odpowiedzi HTTP inny niż 200 (Dobrze.) , np., Błąd 403 Zakazane w przypadku zgłoszenia nieprawidłowej wartości autora\ _ key.ERDDAP™wysyła kod odpowiedzi HTTP (nie, np.,.jsonbłąd sformatowany) ponieważ tak to się robi w Internecie i ponieważ błędy mogą wystąpić wszędzie w systemie (np. w sieci, która zwraca błąd HTTP) . Jeśli błąd jest zERDDAP™, odpowiedź może zawierać pewien tekst (nie.json) bardziej szczegółowe wyjaśnienie, co poszło nie tak, ale kod odpowiedzi HTTP (200 = Dobra, wszystko inne to kłopoty) jest właściwym sposobem sprawdzenia, czy .insert lub .delete odniosły sukces. Jeśli sprawdzanie kodu odpowiedzi HTTP nie jest możliwe lub jest niewygodne, wyszukaj "status": "sukces" w tekście odpowiedzi, który powinien być wiarygodnym wskaźnikiem sukcesu.

Pliki dziennika

Kiedy EDDTableFromHttpGet otrzymuje polecenia .insert i .delete, po prostu dodaje informacje do odpowiedniego pliku w zestawie plików dziennika, z których każda jest tabelą przechowywaną wJSON Plik linii CSV. Kiedy użytkownik składa wniosek o dane,ERDDAP™szybko odczytuje odpowiednie pliki dziennika, wprowadza zmiany do zbioru danych w kolejności, w jakiej zostały wykonane, a następnie filtruje żądanie poprzez ograniczenia użytkownika, jak każdy innyERDDAP™żądania dotyczące danych. Podział danych na różne pliki dziennika, przechowywanie różnych informacji (np. znacznik czasu polecenia i czy polecenie było .insert lub .delete) , i różne aspekty konfiguracji zbioru danych, wszystkie umożliwiająERDDAPdo przechowywania i pobierania danych z tego zbioru danych bardzo szybko i bardzo skutecznie.  

Bezpieczeństwo i Autor

Każde polecenie .insert i .delete musi zawierać & autora = autor\ _ key jako ostatni parametr, gdzie autor\ _ key składa się z identyfikatora autora (wybrałeś: imię, inicjały, pseudonim, numer) , podkreślenie i sekretny klucz. WERDDAP™administrator będzie współpracował z autorami w celu wygenerowania listy ważnych wartości autora\ _ key, które mogą zostać zmienione w każdej chwili. Kiedy EDDTableFromHttpGet otrzymuje polecenie .insert lub .delete, upewnia się, że authorID\ _ key jest ostatnim parametrem i poprawnym. Ponieważ jest to ostatni parametr, wskazuje, że cała linia poleceń została osiągniętaERDDAP™i nie został obcięty. Tajny klucz zapewnia, że tylko konkretni autorzy mogą umieścić lub usunąć dane w zbiorze danych.ERDDAP™następnie pobiera authorid i zapisuje to w zmiennej autora, tak aby każdy mógł zobaczyć, kto był odpowiedzialny za daną zmianę w zbiorze danych. Polecenia .insert i .delete mogą być wykonywane tylko poprzezhttps: (bezpieczny) ERDDAP™URL. Zapewnia to, że przekazywane informacje są przechowywane w tajemnicy podczas tranzytu.  

znacznik czasu

W ramach systemu dziennika EDDTableFromHttpGet dodaje znacznik czasu (czas, żeERDDAPotrzymano wniosek) do każdego polecenia, które przechowuje w plikach dziennika. PonieważERDDAP™generuje znacznik czasu, nie autorów, nie ma znaczenia, czy różni autorzy dokonują zmian z komputerów z zegarem ustawionym na nieco inny czas. Znacznik czasowy niezawodnie wskazuje czas dokonania zmiany w zbiorze danych.  

HTTP POST

  • "Co z HTTP POST?"
    HTTPPOST jest lepszą alternatywą (w porównaniu zHTTP GET) do wysyłania informacji od klienta do serwera HTTP. Jeśli możesz, lub jeśli naprawdę chcesz poprawić bezpieczeństwo, użyj POST zamiast GET, aby wysłać informacje doERDDAP. POST jest bardziej bezpieczny, ponieważ: z GET ihttps, URL jest przekazywany w bezpieczny sposób, ale cały URL (w tym parametry, w tym autor\ _ key) będzie napisane do Apaczów, Tomcat, iERDDAP™logowanie plików, gdzie ktoś może je odczytać, jeśli pliki nie są prawidłowo zabezpieczone. Z POST parametry są przekazywane w bezpieczny sposób i nie są zapisywane do plików dziennika. POST jest trochę trudniejsze dla klientów do pracy z i nie jest obsługiwane tak szeroko przez oprogramowanie klienta, ale języki programowania go obsługują. Zawartość wysyłana do zbioru danych poprzez GET lub POST będzie taka sama, tylko sformatowana w inny sposób.  

httpWymagane Zmienne Atrybut globalny

Zasadniczą częścią tego, co sprawia, że cały system działa jest wymagany atrybut globalnyhttpWymagane Zmienne, które jest oddzielona comma- listydataVariablenazwy źródeł, które jednoznacznie identyfikują wiersz danych. Powinno to być jak najmniejsze i prawie zawsze będzie zawierać zmienną czasową. Na przykład, tutaj są zalecanehttpWymagane Zmienne dla każdego zCF Geometrie do pobierania próbek dyskretnych (DSG) (Oczywiście nazwy identyfikacyjne mogą się różnić w zbiorze danych.) :

  • Dla TimeSeries:stationID, time

  • Trajektoria: trajektoryID, czas

  • Dla profilu: czas (zakładając, że czas jest profilem\ _ id) , głębokość

  • Dla TimeSeries Profil:stationID, time (zakładając, że czas jest profilem\ _ id) , głębokość

  • Dla Trajektorii Profil: trajektoryID, czas (zakładając, że czas jest profilem\ _ id) , głębokość

Przyjmowanie TimeSeries jako przykładu: Podając polecenie .insert, które zawierastationID= 46088 i czas = 2016-06-23T19: 53: 00Z (i inne wartości dla innych zmiennych) :

  • Jeżeli dla tej stacji nie istnieją żadne dane i ten czas, skutkiem będzie dodanie danych do zbioru danych.
  • Jeżeli istnieją dane dla tej stacji i ten czas, to skutkiem będzie zastąpienie istniejącego wiersza danych nowymi danymi. (Oczywiście, ponieważERDDAP™zachowuje dziennik każdego otrzymanego polecenia, stare dane są nadal w dzienniku. Jeśli użytkownik zażąda danych z wersji zbioru danych przed tą zmianą, będą oni widzieli starsze dane.)
     

httpGetDirectoryStructure

  • httpGetDirectory Globalny atrybut struktury i dane (Dziennik) Nazwy plików
    Częścią tego, co sprawia, że cały system działa skutecznie jest to, żeERDDAP™tworzy zbiór danych (log) pliki, każdy z innym fragmentem zbioru danych. Jeśli są dobrze ustawione,ERDDAP™będzie w stanie szybko odpowiedzieć na większość wniosków o dane. Ta konfiguracja jest określona przezhttpGetDirectoryStructure globalny atrybut, który jest String, który wygląda jak względna nazwa pliku, np. ",stationID/ 10 lat ", ale jest to specyfikacja struktury katalogu. Części wskazują jak katalog i nazwy plików dla danych (log) będą tworzone pliki.

    • Jeśli część jest liczbą całkowitą (> = 1) plus czas (milisekunda, sekunda, minuta, godzina, data, miesiąc, rok lub ich plurale) , np, 10 lat, a następnie EDDTableFromHttpGet zbiór danych weźmie wartość czasu dla wiersza danych (np. 2016-06-23T19: 53: 00Z) , obliczyć czas skrócony do tej precyzji (np., 2010) i zrobić z tego folder lub nazwę pliku.

Celem jest uzyskanie stosunkowo dużej części danych do każdego pliku, ale znacznie mniej niż 2GB.

  • W przeciwnym razie, część specyfikacji musi byćdataVariablejestsourceName, np.,stationID. W tym przypadku EDDTableFromHttpGet wytworzy folder lub nazwę pliku z wartości tej zmiennej dla nowego wiersza danych (np. "46088") .

Ponieważ dane komend .insert i .delete są przechowywane w określonych danych (log) pliki, EDDTableFromHttpGet zwykle trzeba tylko otworzyć jeden lub kilka danych (log) pliki, aby znaleźć dane dla danego żądania użytkownika. I dlatego, że wszystkie dane (log) plik posiada wszystkie istotne informacje dla jego części zbioru danych, to jest szybkie i łatwe dla EDDTableFromHttpGet zrobić konkretną wersję (lub bieżącą wersję) zbioru danych dla danych w tym pliku (i nie muszą generować żądanej wersji całego zbioru danych) .

Ogólne wytyczne opierają się na ilości i częstotliwości danych. Jeśli założymy 100 bajtów na rząd danych, to...

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

Na przykład, jeśli struktura katalogu jeststationID/ 2 miesiące i wstawiasz dane z dwóch stacji (46088 i 46155) z wartościami czasowymi od grudnia 2015 r. do maja 2016 r., EDDTableFromHttp Pobierz będzie tworzyć katalogi o nazwie 46088 i 46155 i tworzyć pliki w każdym o nazwie 2015-11.jsonl, 2016- 01.jsonL, 2016- 03.jsonl, 2016- 05.jsonl (każde posiadanie danych o wartości 2 miesięcy dla danej stacji) . W dowolnym momencie w przyszłości, jeśli używasz .insert lub .delete do zmiany lub usunięcia danych, na przykład dla stacji 46088 w 2016- 04- 05T14: 45: 00Z, EDDTableFromHttp Dostać będzie dołączyć to polecenie do 46088 / 2016-03.jsonl, odpowiednie dane (log) plik. I jasne jest, że można dodawać dane dla innych stacji w każdej chwili w przyszłości, ponieważ zbiór danych po prostu stworzy dodatkowe katalogi niezbędne do przechowywania danych z nowych stacji.

httpGetKeys

Każda tabela EDDTable FromHttp Pobierz zbiór danych musi mieć atrybut globalnyhttpGetKeys, który określa listę dozwolonych autorów i ich tajne klucze jako oddzielone comma- listy autor\ _ key , np., JohnSmith\ _ someKey1, HOBOlogger\ _ someKey2, QCScript59\ _ someKey3.

  • autor\ _ key jest wrażliwy na przypadek i musi być w całości znakami ASCII (# 33 - # 126 i bez znaków przecinek, "lub"
  • Klucze są jak hasła, więc MUSI być > = 8 znaków, trudno zgadnąć, i bez wewnętrznych słowników. Powinieneś traktować je tak, jak hasła -- zachować je w tajemnicy.
  • Pierwszy znak '\ _' oddziela autora od klucza, więc nazwa autora nie może zawierać znaku '\ _' (ale klucz może) .
  • Każdy autor może mieć jednego lub więcej autora\ _ key, np. JohnSmith\ _ some Key1, JohnSmith\ _ some Key7 itd.
  • Możesz zmienić wartość tego atrybutu w dowolnym momencie. Zmiany stają się skuteczne przy następnym załadowaniu zbioru danych.
  • Informacje te zostaną usunięte z Globalnych Atrybuty zbioru danych przed ich upublicznieniem.
  • Każdy wniosek do zbioru danych o dodanie lub usunięcie danych musi zawierać & autora = autor\ _ key parametr. po sprawdzeniu ważności klucza,ERDDAP™tylko zapisuje część autora (nie klucz) w pliku danych.

Ustaw

Oto zalecane kroki do stworzenia zbioru danych EDDTableFromHttpGet:

  1. Zrobić główny katalog do przechowywania danych tego zbioru danych. Dla tego przykładu, użyjmy / data / testGet /. Użytkownik uruchomiony GenerateDatasetsXml i uruchomiony użytkownikERDDAP™muszą mieć dostęp do tego katalogu.  

  2. Użyj edytora tekstu, aby pobrać próbkę.jsonL plik CSV z rozszerzeniem.jsonI w tym katalogu. Nazwisko nie jest ważne. Na przykład, można to nazwać próbką.jsonl Zrób 2 linię.jsonl Plik CSV, z nazwami kolumn na pierwszej linii i wartościami manekina / typowymi (właściwego typu danych) na drugiej linii. Oto przykładowy plik, który nadaje się do kolekcjifeatureType= Dane z serii TimeSeries, które zmierzały temperaturę powietrza i wody. \[DlafeatureType= Trajektoria, możesz się zmienićstationIDbyć trajektoryID.\]
    \[DlafeatureType= Profil, możesz zmienićstationIDbyć profileID i dodać zmienną głębokości.\]

    \["stationID","time""szerokość geograficzna", "długość geograficzna", "airTemp", "waterTemp", "timestamp", "autor", "komenda"\] \["myStation", "2018- 06- 25T17: 00: 00Z", 0,0, 0,0, 0,0, 0,0, 0,0, "SomeBody", 0,\]

Uwaga:

  • Rzeczywiste wartości danych nie mają znaczenia, ponieważ w końcu usuniesz ten plik, ale powinny być odpowiedniego typu danych. W szczególności zmienna czasu powinna używać tego samego formatu, jakiego będą używać rzeczywiste dane ze źródła.
  • Dla wszystkich zmiennych,sourceNamebędzie równadestinationName, więc użyj poprawnych / końcowych nazw zmiennych teraz, w tym czasu, szerokości, długości geograficznej i czasami głębokości lub wysokości, jeśli zmienne z tych informacji zostaną włączone.
  • Niemal zawsze będzie zmienna o nazwie czas, która zapisuje czas obserwacji. To może być dataType String zjednostki odpowiednie do czasów strun (np.,yyyy-MM-ddSSSZ) lub dane Typ podwójny zjednostki odpowiednie do okresów liczbowych (np. sekundy od 1970- 01-01T00: 00: 00Z lub inny czas bazowy) .
  • Trzy kolumny (zazwyczaj ostatnie trzy) To musi być znacznik czasu, autor, komenda.
  • Kolumna timestamp zostanie użyta przez EDDTableFromHttpGet do dodania znacznika timestamp wskazującego, kiedy dodał podaną linię danych do pliku danych. Będzie miał dataType podwójne i jednostki sekundy od 1970- 01-01T00: 00: 00Z.
  • Kolumna autora z dataType String zostanie użyta do zapisu, który autoryzowany autor dostarczył dane tej linii. Autorzy autoryzowani są określone przezhttpGetKeys atrybut globalny. Chociaż klucze są określone jako autor\ _ key i są w "żądanie" URL w tej formie, tylko część autora jest zapisywana w pliku danych.
  • Kolumna poleceń z bajtem dataType wskaże, czy dane na tej linii są wstawiane (0) lub usunięcie (1) .  
  1. Uruchom generateDatasety Xml i powiedz mu

    1. Typ zbioru danych to EDDTableFromHttpGet
    2. Katalog jest (dla tego przykładu) / dane / badanie Get /
    3. Plik próbki jest (dla tego przykładu) / data / testGet / startup.jsonl
    4. WhttpWymagane Zmienne (dla tego przykładu) stationID, time Patrz opishttpGetRequiredZmienneponiżej.
    5. Jeśli dane są gromadzone co 5 minut,httpGetDirectoryStructure dla tego przykładu jeststationID/ 2 miesiące. Patrz opishttpGetDirectoryStructureponiżej.
    6. WhttpGetKeys

Dodaj wyjście (kawałekdatasets.xmldla zbioru danych) dodatasets.xml.   4. Edytujdatasets.xmlkawałek dla tego zbioru danych, aby uczynić go poprawnym i kompletnym. W szczególności, wymienić wszystkie??? z poprawną zawartością.   5. Dla<fileTableInMemory > ustawienie:

  • Ustaw na true, jeśli zbiór danych będzie zazwyczaj otrzymywał częste żądania .insert i / lub .delete (np. częściej niż raz na 10 sekund) . To pomaga EDDTableFromHttpGet szybciej reagować na żądania .insert i / lub .delete. Jeśli ustawisz to na true, EDDTableFromHttpGet nadal będzie zapisywał tabelę plików i powiązane informacje na dysku okresowo (w razie potrzeby, w przybliżeniu co 5 sekund) .
  • Ustaw to na fałszywe (domyślny) jeśli zbiór danych będzie zazwyczaj otrzymywał rzadkie żądania .insert i / lub .delete (np. rzadziej niż raz na 10 sekund) .  
  1. Notatka: Możliwe jest stosowanie<cacheFromUrl > i powiązane ustawienia wdatasets.xmldla tabeli EDD FromHttp Pobierz zbiory danych jako sposób na zrobienie i utrzymanie lokalnej kopii zdalnej bazy danych EDDTableFromHttpGet na innymERDDAP. Jednak w tym przypadku ten lokalny zbiór danych odrzuci wszelkie żądania .insert i .delete.

Korzystanie z tabeli EDDTable Dane FromHttpGet

  • Autorzy mogą składać "wnioski", któreWstaw dane do zbioru danych lub usuń je z tego zbioru danych.  
  • Po umieszczeniu rzeczywistych danych w zbiorze danych można i należy usunąć oryginalny plik danych próbki.  
  • Użytkownicy mogą żądać danych z zbioru danych, tak jak w przypadku innych zbiorów danych EDDTable wERDDAP. Jeśli żądanie nie zawiera ograniczenia w kolumnie znacznik czasu, to żądanie otrzymuje dane z bieżącej wersji zbioru danych (plik log po przetworzeniu wszystkich poleceń wstawiania i usuwania oraz ponownego sortowania przezhttpGetRequiredZmienne) .  
  • Użytkownicy mogą również składać wnioski specyficzne dla zbiorów danych EDDTableFromHttpGet:
    • Jeżeli wniosek zawiera<lub<= ograniczenie kolumny timestamp, następnieERDDAP™przetwarza wiersze pliku dziennika aż do określonego znacznika czasu. W rezultacie tymczasowo usuwa wszystkie zmiany wprowadzone do zbioru danych od czasu tej wartości znacznika czasu. Aby uzyskać więcej informacji, zobaczWersowanie.
    • Jeśli żądanie zawiera >, > =, lub = ograniczenie kolumny timestamp, np., & timestamp<= 0, następnieERDDAP™zwraca dane z plików danych jak jest, bez przetwarzania poleceń wprowadzania i usuwania.
  • W przyszłości wyobrażamy sobie, że narzędzia zostaną zbudowane (przez nas? Przez ciebie?) do pracy z tymi zbiorami danych. Na przykład, może istnieć skrypt, który odczytuje surowe pliki dziennika, stosuje inne równanie kalibracyjne i generuje / aktualizuje inny zbiór danych z tymi uzyskanymi informacjami. Zauważ, że skrypt może uzyskać oryginalne dane poprzez żądanieERDDAP™ (który otrzymuje dane w formacie pliku, który jest najprostszy do pracy ze skryptem) i wygenerować / zaktualizować nowy zestaw danych poprzez .insert "żądania" doERDDAP. Skrypt nie potrzebuje bezpośredniego dostępu do plików danych; może być na dowolnym autoryzowanym komputerze autora.  

Szczegółowe informacje o EDDTableFromHttpGet

Tematy są następujące:

Oto szczegółowe informacje:

Nie zmieniaj planów!

Po utworzeniu zbioru danych i dodaniu do niego danych:

  • NIE dodawać ani usuwać żadnychdataVariableb.
  • Nie zmieniajsourceNamelubdestinationNamezdataVariableb.
  • Nie zmieniaj danych RodzajdataVariableb. Ale możesz zmienićdataVariablemetadane.
  • Nie zmieniajhttpWymagane Zmienne atrybut globalny.
  • Nie zmieniajhttpGetDirectoryStructure globalny atrybut.

Jeśli musisz zmienić którąkolwiek z tych rzeczy, zrób nowy zestaw danych i prześlij wszystkie dane do nowego zbioru danych.  

CRUD

W informatyce, cztery podstawowe polecenia do pracy z zbiorem danych sąCREATE, READ, UPDATE, DELETE (CRUD) . SQL, język do pracy z relacyjnymi bazami danych, ma odpowiednik w INSERT, SELECT, UPDATE i DELETE. W EDDTableFromHttpGet,

  • .insert jest kombinacją CREATE i UPDATE.
  • .delete to DELETE.
  • Regularnym systemem żądania podzbiorów danych jest READ.

Tak więc EDDTableFromHttpGet obsługuje wszystkie podstawowe polecenia do pracy z zbiorem danych.  

  • .insert lub .delete żądania bez błędów zwrócą kod statusu HTTP = 200 i obiekt JSON, np.,
    {
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-03-26T15:34:05.552Z",
"numericTimestamp":1.522078445552E9
}

Dwie wartości znacznika czasu odnoszą się do tego samego milisekundy, czyli milisekundy, które będą przechowywane w zmiennej znacznika czasu dla wierszy danych, które zostały wstawione lub usunięte.ERDDAP™nie zmieni nazwy i formatowania tych par wartości kluczowych w przyszłości.ERDDAP™może dodać dodatkowe pary wartości klawiszy do obiektu JSON w przyszłości.  

Wnioski inwalidowe

Nieprawidłowe żądania .insert lub .delete zwrócą kod błędu HTTP inny niż status = 200 i nie zostaną wprowadzone żadne zmiany w zbiorze danych. Obejmuje to żądania z błędnymi informacjami autora, nieprawidłowe nazwy zmiennych, różne długości tablic dla różnych zmiennych, brak wymaganych zmiennych, brak wymaganych wartości zmiennych itp. Jeżeli wniosek dotyczy więcej niż jednego pliku danych, możliwe jest, że część wniosku odniesie sukces, a część nie. Jednakże nie powinno to być problemem, jeśli czujnik wysyłający żądanie traktuje każdą awarię jako kompletną awarię. Na przykład, jeśli powieszERDDAP™do wprowadzenia (lub usunąć) te same dane dwa razy z rzędu, najgorszy przypadek jest to, że informacje są przechowywane dwa razy, blisko w pliku dziennika. Trudno zrozumieć, jak to może powodować kłopoty.  

HttpGet Speed

Dla .insert lub .delete requests (nieliczeniehttpwysokość) , Ballpark figury prędkości .insert lub .delete są 1ms na .insert z 1 wierszem danych 2ms na .insert z 10 wierszami danych w tablicach (\[\])
3ms na .insert z 100 wierszami danych w tablicach (\[\])
13ms na .insert z 1000 wierszami danych w tablicach (\[\])
Najwyraźniej tablice są kluczem dowysoka przepustowość. Bez tablic, będzie wyzwaniem dla .insert lub .delete więcej niż 8 wierszy danych na sekundę od zdalnego autora (z powodu całej sieci) . Z tablicami, będzie łatwo .insert lub .delete więcej niż 1000 rzędów danych na sekundę z zdalnego czujnika.

Z bardzo dużą ilością danych na żądanie, trafisz limit Tomcat do maksymalnej długości zapytania (Domyślnie 8KB?) , ale to może być zwiększona przez edycję maxHttpHeaderSize ustawienia tomcat / conf / server.xml HTTP / 1.1 Wejście łącznika.

KiedyERDDAP™odczytuje dane JSON Lines CSV (log) pliki, istnieje mała kara czasu w porównaniu do czytania plików danych binarnych. Uznaliśmy, że ta kara czasowa za czytanie jest rozsądną ceną za szybkość i solidność systemu podczas pisania danych (które ma zasadnicze znaczenie) .

SSD

Dla większej prędkości,stosowaćSolid State Drive (SSD) do przechowywania danych. Mają dużo szybszy czas dostępu do plików (<0,1ms) niż dyski twarde (3 - 12 ms) . Mają również szybszy transfer danych (200 - 2500 MB / s) niż dyski twarde (~ 200 MB / s) . Ich koszty znacznie spadły w ostatnich latach. Chociaż wczesny SSD miał problemy po dużej liczbie wpisów do danego bloku, problem ten jest teraz znacznie zmniejszony. Jeśli po prostu użyć SSD, aby zapisać dane raz, a następnie przeczytać je wiele razy, nawet SSD klasy konsumenckiej (który jest znacznie mniej kosztowny niż klasy przedsiębiorstw SSD) To potrwa długo.

Solidny

Staraliśmy się uczynić ten system jak najprostszym i jak najsolidniejszym.

  • System jest zaprojektowany tak, aby mieć wiele wątków (np. czujnik, automatyczny skrypt QC i człowiek) jednocześnie pracując nad tym samym zbiorem danych, a nawet nad tym samym plikiem. Większość z nich jest możliwa dzięki zastosowaniu podejścia do przechowywania danych w pliku dziennika oraz bardzo prostym typom plików,JSON Linie plików CSV, do przechowywania danych.
  • Kolejną ogromną zaletą JSON Lines CSV jest to, że jeśli plik kiedykolwiek zostanie uszkodzony (np. nieprawidłowe z powodu błędu na linii) , łatwo jest otworzyć plik w edytorze tekstu i naprawić problem.
  • Kolejną zaletą jest to, że jeśli na linii w pliku występuje błąd, system może nadal odczytywać wszystkie dane na liniach przed i po linii błędu. A system może nadal zapisywać dodatkowe informacje .insert i .delete.
  • Ogromna zaleta korzystania z dostępnych plików standardowych (w porównaniu z relacyjną bazą danych lub Cassandrą lub innym oprogramowaniem) : Nie ma innego oprogramowania, które musi być utrzymywane i które musi być uruchomione w celu przechowywania lub pobierania danych. I jest to łatwe do tworzenia kopii zapasowych standardowych plików w dowolnym czasie i w sposób przyrostowy, ponieważ dane są w kawałkach (po chwili tylko plik current- time dla każdej stacji będzie się zmieniać) . W przeciwieństwie do tego, potrzeba znacznego wysiłku i czasu, aby utworzyć zewnętrzne pliki zapasowe z baz danych i z Cassandry.  
Wiarygodność systemu

To rozsądne oczekiwać jednego serwera zERDDAP™aby mieć 99,9% przestoju -- to jest około 9 godzin przestoju rocznie (Chociaż, możesz tego użyć w jedną złą noc!) . Jeśli jesteś pracowity i szczęśliwy, możesz dostać 99,99% czasu pracy (53 minuty przestoju rocznie) , ponieważ tylko kilka wznowienia aktualizacji zajmie tyle czasu. Musiałbyś podjąć ekstremalne środki. (oddzielny serwer zapasowy, nieprzerwany zasilacz, zapasowa klimatyzacja, 24x7x365 personel do monitorowania witryny, itp.) aby mieć niewielkie szanse na 99,999% czasu pracy (5.25 minut przestoju rocznie) . Nawet wtedy jest bardzo mało prawdopodobne, że osiągniesz 99,999% czasu pracy (lub nawet 99,99%) Ponieważ problemy są często poza twoją kontrolą. Na przykład Amazon Web Service i Google oferują zaskakująco niezawodne usługi internetowe, ale duże ich części są czasami w dół na godziny.

Spójrz prawdzie w oczy, każdy chceERDDAP™mieć 100% czasu pracy, lub co najmniej "sześć dziewiątek" (99,9999% uptime równa się 32 sekundom przestoju rocznie) Ale nie dostaniesz go bez względu na to, ile czasu, wysiłku i pieniędzy wydajesz.

Ale...ERDDAP™To nie jest prawdziwy cel. Celem jest zbudowanie niezawodnego system - Tego, który nie traci żadnych danych. To jest problem do rozwiązania.

Rozwiązaniem jest: zbudować fault- tolerancji do oprogramowania komputerowego, który wysyła dane doERDDAP. W szczególności, to oprogramowanie powinno utrzymać kolejkę danych czekających, aby przejść doERDDAP. Po dodaniu danych do kolejki, oprogramowanie powinno sprawdzić odpowiedź zERDDAP. Jeśli odpowiedź nie zawiera danych otrzymanych. Nie ma błędów., wtedy oprogramowanie powinno zostawić dane w kolejce. Kiedy więcej danych jest generowanych i dodawanych do kolejki, oprogramowanie powinno spróbować ponownie .insert danych w kolejce (Może z\[\]system) . Odniesie sukces albo zawiedzie. Jeśli zawiedzie, spróbuje później. Jeśli napiszesz oprogramowanie do pracy w ten sposób i jeśli oprogramowanie jest gotowe do kolejkowania danych wartych kilka dni, rzeczywiście masz duże szanse na wysłanie 100% danych czujnika doERDDAP. I zrobisz to bez wysiłku czy wydatków.

\[Kontekst: Nie wymyśliliśmy tego.W ten sposób sieci komputerowe osiągają niezawodność. Sieci komputerowe są z natury niewiarygodne. Więc kiedy przesyłasz plik z jednego komputera do drugiego, wysyłające oprogramowanie wie / oczekuje, że niektóre pakiety mogą zostać utracone. Jeśli nie otrzyma odpowiedniego potwierdzenia dla danego pakietu z odbiornika, oddaje utracony pakiet. Dzięki temu podejściu stosunkowo prosty nadawca i oprogramowanie odbiornika mogą zbudować niezawodny system transferu plików na szczycie nieniezawodnej sieci.\]

Dlaczego pliki JSON Lines CSV?

EDDTableFromHttpGetJSON Linie plików CSV. do przechowywania danych. Powody są następujące:

  • Głównym powodem jest: Prostota plików JSON Lines CSV oferuje szybki, łatwy i niezawodny sposób, aby umożliwić wiele wątków do zapisu do danego pliku (np. poprzez synchronizację nazwy pliku) .
  • Jeśli plik JSON Lines CSV kiedykolwiek został uszkodzony (np. nieprawidłowe z powodu błędu na linii) , EDDTableFromFromHttpGet mógł nadal odczytać wszystkie dane na wszystkich wierszach przed i po linii błędu. A system .insert i .delete może nadal dodawać nowe dane do pliku danych.
  • Ponieważ pliki JSON Lines CSV są plikami ASCII, jeśli plik kiedykolwiek został uszkodzony, byłoby łatwo naprawić (w edytorze tekstu) .
  • Obsługa linii JSON CSV Unicode strun.
  • JSON Lines CSV obsługuje łańcuchy o zmiennej długości (nie ogranicza się do pewnej długości maksymalnej) .
  • JSON Lines CSV obsługuje 64- bitowe liczby całkowite (Długi) .
  • Formalny charakter i dodatkowa składnia JSON Lines CSV (vs old- school CSV) zapewnia pewne dodatkowe zapewnienie, że dana linia nie została uszkodzona.

Początkowo próbowaliśmy użyć.nc3 pliki o nieograniczonym wymiarze. Pojawiły się jednak problemy:

  • Głównym problemem było: Nie ma niezawodnego sposobu, aby pozwolić wielu wątków zapisać do.nc3 plik, nawet jeśli wątki współpracują poprzez pisanie w zsynchronizowany sposób.
  • Jeśli.nc3 plik staje się uszkodzony, system .insert i .delete nie może nadal używać pliku.
  • Ponieważ.nc3 pliki są binarne, jeśli plik staje się uszkodzony (co robią z powodu problemu wielowątkowego) są niezwykle trudne lub niemożliwe do naprawienia. Nie ma narzędzi do naprawy.
  • CF nie ma sposobu na określenie kodowania strun, więc nie ma oficjalnego sposobu na wsparcie Unicode, np. kodowania UTF- 8. Próbowaliśmy przekonać CF do wsparcia atrybutu\ _ Encoding, ale nie byliśmy w stanie osiągnąć żadnego postępu. (Unidata, to their credit, does support the\ _ Encoding attribute.)
  • .nc3 pliki obsługują tylko stałe łańcuchy długości. Znowu próbowaliśmy zdobyć CF iUnidataWsparcie strun o zmiennej długości, ale nie było możliwe.
  • .nc3 pliki nie obsługują łatwego sposobu odróżniania zmiennych pojedynczych znaków od zmiennych String. Znowu próbowaliśmy zdobyć CF iUnidatawspieranie systemu rozróżniania tych dwóch typów danych, ale nie były one w stanie poczynić żadnych postępów.
  • .nc3 pliki obsługują tylko znaki 8- bit z nieokreślonym kodowaniem. Znowu próbowaliśmy zdobyć CF iUnidatawsparcie systemu określania kodowania, ale nie były w stanie poczynić żadnych postępów.
  • .nc3 pliki nie obsługują 64- bitowych liczb całkowitych (Długi) . Znowu próbowaliśmy zdobyć CF iUnidatawspierać system tęsknoty, ale nie były w stanie poczynić żadnych postępów.  
Wersowanie

Ponieważ tabela EDDTable FromHttp Pobierz dziennik wszystkich zmian w zbiorze danych z znacznikiem czasu i autora każdej zmiany, może szybko odtworzyć ten zbiór danych od dowolnego punktu w czasie. W pewnym sensie istnieje wersja na dowolny punkt czasu. Jeżeli wniosek użytkownika o dane zawiera znacznik czasu<= ograniczenie, np., & timestamp<= 2016-06-23T16: 32: 22.128Z (lub dowolnego punktu czasowego) , ale bez ograniczeń autora lub polecenia,ERDDAP™odpowie na wniosek, generując najpierw wersję zbioru danych od tego momentu. Więc...ERDDAP™stosuje inne ograniczenia użytkownika, jak w przypadku innych wniosków o dane zERDDAP. EDDTableFromHttpGet jest tak ustawiony, że proces ten jest bardzo szybki i skuteczny, nawet dla bardzo dużych zbiorów danych.

Podobnie, użytkownik może dowiedzieć się, kiedy zestaw danych został ostatnio zaktualizowany przez żądanie...? timestamp & timestamp = max (znacznik czasu) & Wyróżnij ()

I dla każdego wniosku o dane, dla każdej wersji zbioru danych, użytkownicy mogą zobaczyć, który autor dokonał zmian, i kiedy je zrobili.

Ten system przekształcania umożliwiaNauka powtarzalnaponieważ każdy może w dowolnym momencie zażądać danych z wersji zbioru danych w dowolnym momencie. Ta modyfikacja nie jest możliwa z żadnym innym systemem, o którym wiemy. Podstawowy mechanizm jest bardzo wydajny, ponieważ nie jest potrzebne dodatkowe miejsce do przechowywania, a przetwarzanie jest naprawdę minimalne.

Nie każdy potrzebuje tego typu finezowanej wersji, ale jest to niezwykle przydatne, być może konieczne, w kontekście dużej organizacji zarządzania danymi (np. OOI, Earth Cube, Data One orazNOAANCEI) gdzie zbiór danych może mieć wielu autorów (np. czujnik, automatyczny skrypt QC i ludzki edytor) .

\[Historia: Zapotrzebowanie na tego typu wersje najpierw przyszedł do mnie (Bob) podczas czytania i omawiania OOI w 2008 r. W tamtym czasie OOI miał uciążliwy, powolny, nieefektywny system do modyfikowania na bazie Gita. Git jest świetny do tego, do czego został zaprojektowany, ale nie do tego. W 2008 r., podczas dyskusji na temat OOI, zaprojektowałem szeroko zakrojony, wydajny system zarządzania danymi, obejmujący wiele funkcji, które dodałem doERDDAP™od tego czasu, włącznie z tym systemem przekształcania. W tamtym czasie i od tego czasu OOI była zaangażowana w ich system przekształcania i nie była zainteresowana alternatywami. W 2016 r. pojawiły się inne aspekty tego planu i zacząłem je wdrażać. Ponieważ było wiele przerw w pracy nad innymi projektami, nie skończyłem do 2018 roku. Nawet teraz, nie jestem świadomy żadnego innego naukowego systemu danych, który oferuje tak szybki i łatwy dostęp do wersji danych z dowolnego punktu w czasie, dla często zmieniających się zbiorów danych. Proste systemy plików tego nie oferują. Bazy danych nie. Cassandra nie.\]

Wstaw i usuń HTTPS
  • "A co z HTTPS PUT i DELETE?"
    Protokół przeniesienia hipertekstu (HTTP) jest podstawą World Wide Web i powodem, dla którego strony internetowej adresy URL zaczynają się od " http://" albo " https://" . HTTPS to HTTP z dodatkową warstwą bezpieczeństwa. Codziennie przeglądarki, skrypty i programy komputerowe tworzą miliardy HTTP (S) GET wnioski o uzyskanie informacji z odległych źródeł. HTTP (S) obejmuje również inneczasowniki, w szczególności PUT (aby wcisnąć dane do serwera) oraz DELETA (do DELETE dane z serwera) . Tak, PUT i DELETE są właściwym sposobem na wstawianie danych i usuwanie danych z zbioru danych poprzez HTTP (S) . GET jest obsługiwany przez każdy element oprogramowania, które może pracować z HTTP (S) . GET jest bardzo łatwy w pracy. Każdy wie już, jak pracować z GET i wielu wie, jak korzystać z POST (które mogą być stosowane zasadniczo w taki sam sposób jak GET) , więc zrobiliśmy EDDTableFromHttpGet pracy z GET i POST. Bardzo mało osób (nawet kilku programistów komputerowych) kiedykolwiek pracował z PUT i DELETE. PUT i DELETE są na ogół obsługiwane wyłącznie przez języki komputerowe, więc używanie ich wymaga programu umiejętności. Więc PUT i DELETE są zazwyczaj o wiele bardziej kłopotliwe podejście biorąc pod uwagę sposób, w jaki narzędzia ewoluowały.  
HttpGet Notatki
  • Uwagi
    • Nie.dataVariablemoże mieć dataType = char. Użyj zamiast tego dataType = String. Jeśli naprawdę potrzebujesz dataType = char, email Chris. John w Noa.gov.  
Dzięki.
  • Dzięki CHORDS za podstawowy pomysł.
    Podstawowy pomysł dla EDDTableFromHttpGet (np. przy użyciuHTTP GETwniosek o dodanie danych do zbioru danych) pochodzi z UCAR (NCAR?) Cloud- Hosted Real- time Data Services (CHORDY) projekt. Format parametrów we wniosku (powtarzany nazwa = wartość , oddzielone przez & 's) jest tym samym standardowym formatem, który jest używany przez formularze HTML na stronach internetowych. Jest to prosty i genialny pomysł, a nawet bardziej dlatego, że ma tak doskonale zERDDAPistniejący system zajmowania się danymi tabelarycznymi. Pomysł jest oczywisty, ale... (Bob) Nie pomyślałem o tym. EDDTableFromHttp Skorzystaj z tego podstawowego pomysłu, w połączeniu z naszymi pomysłami jak go wdrożyć, aby system wERDDAP™do przesyłania danych. Poza podstawową ideą wykorzystania GET do wprowadzania danych do systemu, implementacja EDDTableFromHttpGet jest zupełnie inna i całkowicie niezależna od CHORDS i ma różne funkcje (np. logowanie plików, zbieranie danych, różne systemy bezpieczeństwa, obsługa CRUD, odtwarzalne dane) . Nasz kontakt z chordymi był tylko webinarem. Nie przyjrzeliśmy się ich kodom ani nie czytaliśmy o ich projekcie, ponieważ od razu wiedzieliśmy, że chcemy wdrożyć system w inny sposób. Ale jesteśmy im wdzięczni za podstawową ideę. Pełne odniesienie do CHORDS 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 Real- time Usługi danych dla geonauki (CHORDY) oprogramowanie. Laboratorium Obserwacji Ziemi. https://doi.org/10.5065/d6v1236q
     

Tabela EDDFromHyraxPliki

Tabela EDDFromHyraxPliki (depregated) pliki danych agregatów z kilkoma zmiennymi, z których każdy ma jeden lub więcej wspólnych wymiarów (na przykład, czas, wysokość (lub głębokość) , szerokość i długość geograficzna) , i służył przezHyrax OPeNDAPserwer.

  • Ten typ zbioru danych jest ZANIECHANE . Nowszym i bardziej ogólnym rozwiązaniem jest użyciecache Opcja FromUrl dla EDDTable Pliki FromFiles (lub wariant) , który tworzy lokalną kopię zdalnych plików i obsługuje dane z lokalnych plików. W<opcja cacheFromUrl > może być używana z dowolnym typem pliku danych tabelarycznych. **
    Jeśli z jakiegoś powodu ci się nie uda, napisz do Chrisa. John w Noa.gov. W przypadku braku skarg przed 2020 r., ten typ zbioru danych może zostać usunięty. **
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.
  • W większości przypadków, każdy plik ma wiele wartości dla najbardziej lewego (pierwszy) wymiar, na przykład, czas.
  • Pliki często (ale nie muszę) mają jedną wartość dla innych wymiarów (na przykład wysokość (lub głębokość) , szerokość i długość geograficzna) .
  • Pliki mogą mieć zmienne znaków o dodatkowym wymiarze (nZnaki) .
  • Hyraxserwery mogą być identyfikowane przez "/ dods- bin / nph- dods /" lub "/ opendap /" w URL.
  • Ta klasa scree- scrapesHyraxstrony internetowe z listami plików w każdym katalogu. Z tego powodu jest bardzo specyficzny dla obecnego formatuHyraxstron internetowych. Spróbujemy się dostosować.ERDDAP™szybko jeśli / kiedy przyszłe wersjeHyraxzmienić sposób wyświetlania plików.
  • W<ustawienie fileDir > jest ignorowane. Ponieważ ta klasa pobiera i robi lokalną kopię każdego pliku danych zdalnych,ERDDAP™zmusza plik Reżyseria bigParentDirectory / kopiuj / datasetID /.
  • Dla<sourceUrl>, użyj URL katalogu bazowego zbioru danych wHyraxna przykład serwer, <sourceUrl> http://edac-dap.northerngulfinstitute.org/dods-bin/nph-dods/WCOS/nmsp/wcos/ </sourceUrl> (ale umieścić go na jednej linii) (Przepraszam, ten serwer nie jest już dostępny.) . WsourceUrlstrona internetowa zazwyczaj ma "OPeNDAPIndeks serwera\[DirectoryName\]"na szczycie.
  • Ponieważ ta klasa zawsze pobiera i robi lokalną kopię każdego zdalnego pliku danych, nigdy nie należy zawijać tego zbioru danych wEDDTableCopy.
  • Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.
  • Zobacz przykłady 1D, 2D, 3D i 4DPliki EDDTableFromNc@@.  

Pliki EDDTableFromInvalidCRAFiles

Pliki EDDTableFromInvalidCRAFiles dane zagregowane zNetCDF (v3 lub v4) .ncpliki, które korzystają z określonego, niepoprawnego wariantu karty DSG CF (CRA) pliki. ChociażERDDAP™obsługuje ten typ pliku, jest to nieprawidłowy typ pliku, którego nikt nie powinien używać. Grupy, które obecnie korzystają z tego typu plików, są zdecydowanie zachęcane do korzystania zERDDAP™generowanie ważnych plików CF DSG CRA i zaprzestanie korzystania z tych plików.

Szczegóły: Pliki te mają wiele zmiennych wiersza\ _ size, każdy z atrybutem próbki\ _ size. Pliki nie są standardowymi plikami CF- ponieważ wielokrotna próbka (obs) wymiary mają być odkodowane i powiązane ze sobą z tą dodatkową zasadą i obietnicą, która nie jest częścią specyfikacji CF DSG: "można powiązać dany np., wartość temperatury (Pomiar temperatury\ _ obs) o określonej wartości głębokości (z\ _ obs wymiar, wymiar z większością wartości) , ponieważ: rząd temperatury\ _ size (dla danego odlewu) będzie równe 0 lub równe odpowiedniemu wierszowi głębokości\ _ size (dla tej obsady) (Taka jest zasada.) . Jeśli więc wiersz temperatur\ _ size nie jest 0, to wartości temperatury n dla tego odlewu odnoszą się bezpośrednio do wartości głębokości n dla tego odlewu (To obietnica.) ".

Kolejny problem z tymi plikami: zmienna Direct\ _ Investigator row\ _ size nie ma atrybutu próbki\ _ size i nie jest zgodna z powyższą regułą.

Przykładowe pliki dla tego typu zbioru danych można znaleźć na stronie https://data.nodc.noaa.gov/thredds/catalog/ncei/wod/ \[2020- 10- 21 Serwer ten nie jest już niezawodnie dostępny\].

Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Pierwsza rzecz GenerateDatasets Xml robi dla tego typu zbioru danych po odpowiedzi na pytania jest wydrukować ncdump- podobną strukturę pliku próbki. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.  

Pliki EDDTableFromJsonlCSVFiles

Pliki EDDTableFromJsonlCSVFiles dane zagregowane zJSON Linie plików CSV. Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

  • Jak mówi jsonlines.org, ten format jest "Lepszy niż CSV" (I zgodnie z prawem, jako pracownik federalny, nie mogę się z nimi zgodzić ani się z nimi nie zgodzić -- jak szalone to jest?) . CSV nigdy nie zostało formalnie zdefiniowane i jest utrudnione przez bagaż historyczny związany z jego podłączeniem do oryginalnych programów arkusza kalkulacyjnego. JSON Lines CSV, w porównaniu, jest w pełni zdefiniowane i korzyści z jego połączenia z szeroko stosowanym standardem JSON, który z kolei korzysta z jego połączenia zJavaSkrypt iJava. W szczególności istnieje pełne wsparcie dla długich liczb całkowitych i znaków Unicode w łańcuchach i jasny sposób na włączenie innych znaków specjalnych (w szczególności zakładki i nowe linie) w strunach.

Format ten jest szczególnie dobry dla zbiorów danych, w których należy okresowo dodawać dodatkowe wiersze do końca danego pliku danych. Z tego powodu i innych (patrz powyżej) ,EDDTableFromHttpGetwykorzystuje pliki Json Lines CSV do przechowywania danych.

  • Zakłada się, że pliki wejściowe są zakodowane w UTF- 8. Jednakże, biorąc pod uwagę\ u dddd format kodowania znaków specjalnych (np.\ u20ac jest kodowaniem znaku Euro) , masz możliwość zapisu plików tak, że zawierają one tylko 7- bitowe znaki ASCII za pomocą\ u dddd aby zakodować wszystkie znaki powyżej # 127.  
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbkowym. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

  • UWAGA: KiedyERDDAP™czyta JSON Linie plików danych CSV, jeśli znajdzie błąd na danej linii (np. nieprawidłowa liczba elementów) , zapisuje wiadomość ostrzegawczą ("OSTRZEŻENIE: zła linia (s) danych "... z listą złych linii na kolejnych liniach) doplik log.txta następnie kontynuuje czytanie reszty pliku danych. Tak więc, Twoim obowiązkiem jest okresowo patrzeć (lub napisać skrypt, aby to zrobić) dla tej wiadomości w dzienniku. txt tak, że można naprawić problemy w plikach danych.ERDDAP™jest skonfigurowany w ten sposób, aby użytkownicy mogli kontynuować odczytywanie wszystkich dostępnych ważnych danych, mimo że niektóre linie pliku mają wady.  

Pliki EDDTableFromMultidimNc@@

Pliki EDDTableFromMultidimNc@@ dane zagregowane zNetCDF (v3 lub v4) .nc (lub.ncml) pliki z kilkoma zmiennymi, z których każdy ma jeden lub więcej wspólnych wymiarów. Pliki mogą mieć zmienne znaków z lub bez dodatkowego wymiaru (na przykład: STRING14) . Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

  • Jeśli pliki są wielowymiarowymi wariantami DSG CF, użyj tego typu zbioru danych zamiastPliki EDDTableFromNcCFFiles.  
  • Nowe zbiory danych tabelarycznych.ncpliki, użyj tej opcji przed wypróbowaniem starszychPliki EDDTableFromNc@@. Niektóre zalety tej klasy to:
    • Ta klasa może odczytać więcej zmiennych z szerszej gamy struktur plików. Jeśli podasz Wymiary CSV (oddzielona comma- list nazw wymiarów) w GenerateDatasets Xml (lub<dimensionsCSV > wdatasets.xmlinfo dla jednego z tych zbiorów danych), następnieERDDAP™będzie tylko odczytywać zmienne w plikach źródłowych, które używają niektórych lub wszystkich tych wymiarów, plus wszystkie zmienne skalarne. Jeśli dany wymiar jest w grupie, należy podać jego pełną nazwę, np. ", groupName / dimensionName ".
    • Klasa ta może często bardzo szybko odrzucać pliki, jeśli nie odpowiadają ograniczeniom prośby. Tak więc odczyt danych z dużych kolekcji często pójdzie dużo szybciej.
    • Ta klasa obsługuje prawdziwe zmienne znaków (zmienne nie- String) prawidłowo.
    • Ta klasa może przycinać zmienne String, kiedy twórca nie używał napisów Netcdf- java (który dodaje znak # 0 do znaku końca łańcucha) .
    • Klasa ta jest lepsza w obsłudze poszczególnych plików, które nie posiadają pewnych zmiennych lub wymiarów.
    • Klasa ta może usunąć bloki wierszy z brakującymi wartościami określonymi dlaCF Geometrie do pobierania próbek dyskretnych (DSG) Niekompletne wielowymiarowe pliki tablic
       
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbkowym. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

Grupa... GenerateDatasets Xml poprosi o "Grupę". Możesz wpisać "" aby przeszukać wszystkie grupy ", niektóre Grupa "lub" someGroup / someSubGroup "aby przeszukać konkretną grupę, lub"\[korzeń\]"by przeszukać tylko grupę korzeniową. Łańcuch" Grupa "staje się<Grupa >datasets.xmlinfo dla zbioru danych (Chociaż "\[korzeń\]"staje się" ") .

Wymiary CSV -- GenerateDatasets Xml poprosi o łańcuch "DimensionsCSV". Jest to oddzielona od siebie lista nazw źródłowych zestawu wymiarów. GenerateDatasets Xml odczytuje tylko zmienne danych w próbce.ncpliki, które używają niektórych lub wszystkich tych wymiarów (i żadnych innych wymiarów) , plus wszystkie zmienne skalarne w pliku, i zrobić zbiór danych z tych zmiennych danych. Jeśli dany wymiar jest w grupie, należy podać jego pełną nazwę, np. ", groupName / dimensionName ". Jeśli nic nie podasz (pusty ciąg) , GenerateDatasets Xml będzie szukać zmiennych o większości wymiarów, na teorii, że będą one najbardziej interesujące, ale może być czas, kiedy będziesz chciał zrobić zestaw danych z innej grupy zmiennych danych, które korzystają z innej grupy wymiarów. Jeśli po prostu podać nazwę wymiaru, który nie istnieje (np. NO\ _ MATCH) ,ERDDAP™znajdzie wszystkie zmienne skalarne. Łańcuch "DimensionsCSV" staje się<dimensionsCSV > wdatasets.xmlinfo dla zbioru danych.

leczenie Wymiary A

Istnieje kategoria niepoprawnych.ncpliki (ponieważ nie przestrzegają zasad CF) które mają wiele wymiarów (na przykład:) kiedy powinni byli użyć tylko jednego wymiaru (np. czas) , na przykład:

    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 ma specjalną funkcję do czynienia z tymi plikami: jeśli dodasz globalny atrybut "treatDimensionsAs" do zbiorów danych globalnychaddAttributesMożesz powiedziećERDDAP™traktowanie niektórych wymiarów (na przykład:) Jakby były innym wymiarem. (np. czas) . Wartość atrybutu musi być oddzieloną przecinkami listą określającą wymiary "od", a następnie wymiar "do", np., Lat, lon, time
WtedyERDDAP™odczyta plik tak, jakby był:

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

Oczywiście aktualny rozmiar każdego z wymiarów listy musi być taki sam; w przeciwnym razie,ERDDAP™będzie traktować plik jako "zły plik".

Zauważ, że te pliki są nieprawidłowe, ponieważ nie są zgodne z zasadami CF. Więc nawet jeśliERDDAP™może je odczytać, zalecamy, aby nie tworzyć plików takich jak ten, ponieważ inne narzędzia oparte na CF- oprogramowania nie będą w stanie je poprawnie odczytać. Jeśli posiadasz już takie pliki, stanowczo zalecamy jak najszybsze zastąpienie ich odpowiednimi plikami.

Pliki EDDTableFromNc@@

Pliki EDDTableFromNc@@ dane zagregowane zNetCDF (v3 lub v4) .nc (lub.ncml) pliki iZarr Przewodniczącypliki (od wersji 2.25) z kilkoma zmiennymi, każdy z jednym wspólnym wymiarem (na przykład czas) lub więcej niż jeden wspólny wymiar (na przykład, czas, wysokość (lub głębokość) , szerokość i długość geograficzna) . Pliki muszą mieć te same nazwy wymiarów. Podany plik może mieć wiele wartości dla każdego z wymiarów i wartości mogą być różne w różnych plikach źródłowych. Pliki mogą mieć zmienne znaków o dodatkowym wymiarze (na przykład: STRING14) . Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

Pliki Zarr mają nieco inne zachowanie i wymagają albo fileNameRegex lub pathRegex zawierać "zarr".

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbkowym. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

Wymiary CSV -- GenerateDatasets Xml poprosi o łańcuch "DimensionsCSV". Jest to oddzielona od siebie lista nazw źródłowych zestawu wymiarów. GenerateDatasets Xml znajdzie zmienne danych w.ncpliki, które używają niektórych lub wszystkich tych wymiarów, plus wszystkie zmienne skalarne i tworzą zbiór danych z tych zmiennych. Jeśli nic nie podasz (pusty ciąg) , GenerateDatasets Xml będzie szukać zmiennych o większości wymiarów, na teorii, że będą one najbardziej interesujące, ale może być czas, kiedy będziesz chciał zrobić zestaw danych z innej grupy zmiennych danych, które korzystają z innej grupy wymiarów.

  • Przykład 1D: Pliki 1D różnią się nieco od plików 2D, 3D, 4D,....
    • Możesz mieć zestaw.ncpliki danych, w których każdy plik posiada dane warte jednego miesiąca z jednej boi dryfującej.
    • Każdy plik będzie miał 1 wymiar, na przykład, czas (rozmiar =\[wiele\]) .
    • Każdy plik będzie miał jedną lub więcej zmiennych 1D, które używają tego wymiaru, na przykład czasu, długości, szerokości geograficznej, temperatury powietrza,....
    • Każdy plik może mieć zmienne znaków 2D, na przykład z wymiarami (czas, nZnaki) .  
  • Przykład 2D:
    • Możesz mieć zestaw.ncpliki danych, w których każdy plik posiada dane warte jednego miesiąca z jednej boi dryfującej.
    • Każdy plik będzie miał 2 wymiary, na przykład czas (rozmiar =\[wiele\]) oraz id (wielkość = 1) .
    • Każdy plik będzie miał zmienne 2 1D o tych samych nazwach co wymiary i przy użyciu wymiaru nazwy, na przykład czasu (czas) , id (id) . Te zmienne 1D powinny być włączone do listy<dataVariable> 's in the dataset' s XML.
    • Każdy plik będzie miał jedną lub więcej zmiennych 2D, na przykład długość, szerokość geograficzna, temperatura powietrza, temperatura wody,...
    • Każdy plik może mieć zmienne znaków 3D, na przykład z wymiarami (czas, id, nZnaki) .  
  • Przykład 3D:
    • Możesz mieć zestaw.ncpliki danych, w których każdy plik posiada dane o wartości jednego miesiąca z jednej stacjonarnej boi.
    • Każdy plik będzie miał 3 wymiary, na przykład czas (rozmiar =\[wiele\]) , lat (wielkość = 1) oraz (wielkość = 1) .
    • Każdy plik będzie miał 3 1D zmiennych o tych samych nazwach co wymiary i przy użyciu wymiaru nazwy, na przykład czasu (czas) , lat (nit) na (na) . Te zmienne 1D powinny być włączone do listy<dataVariable> 's in the dataset' s XML.
    • Każdy plik będzie miał jedną lub więcej zmiennych 3D, na przykład temperaturę powietrza, temperaturę wody,...
    • Każdy plik może mieć zmienne znaków 4D, na przykład z wymiarami (time, lat, lon, nCharacters) .
    • Nazwa pliku może mieć nazwę boi w nazwie pliku.  
  • Przykład 4D:
    • Możesz mieć zestaw.ncpliki danych, w których każdy plik posiada dane o wartości jednego miesiąca z jednej stacji. W każdym punkcie czasowym stacja pobiera odczyty na kilku głębokościach.
    • Każdy plik będzie miał 4 wymiary, na przykład czas (rozmiar =\[wiele\]) , głębokość (rozmiar =\[wiele\]) , lat (wielkość = 1) oraz (wielkość = 1) .
    • Każdy plik będzie miał 4 1D zmiennych o tych samych nazwach co wymiary i przy użyciu tego samego rozmiaru nazwy, na przykład czasu (czas) , głębokość (głębokość) , lat (nit) na (na) . Te zmienne 1D powinny być włączone do listy<dataVariable> 's in the dataset' s XML.
    • Każdy plik będzie miał jedną lub więcej zmiennych 4D, na przykład temperaturę powietrza, temperaturę wody...
    • Każdy plik może mieć zmienne znaków 5D, na przykład z wymiarami (czas, głębokość, lat, lon, nCharacters) .
    • Nazwa pliku może mieć nazwę boi w nazwie pliku.  

Pliki EDDTableFromNcCFFiles

Pliki EDDTableFromNcCFFiles dane zagregowane dane zagregowane zNetCDF (v3 lub v4) .nc (lub.ncml) plików, które używają jednego z formatów plików określonych przezCF Geometrie do pobierania próbek dyskretnych (DSG) konwencje. Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

W przypadku plików wykorzystujących jeden z wielowymiarowych wariantów CF DSG należy użyćPliki EDDTableFromMultidimNc@@Zamiast tego.

Konwencje DSG CF definiują dziesiątki formatów plików i zawierają liczne drobne warianty. Ta klasa zajmuje się wszystkimi wariantami, o których wiemy, ale mogliśmy przeoczyć jedną z nich. (lub więcej) . Więc jeśli ta klasa nie może odczytać danych z plików CF DSG, proszę.zwrócenie się o dodatkowe wsparcie.

Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.  

Pliki EDDTableFromNccsvName

Pliki EDDTableFromNccsvName dane zagregowane zNCSSVPliki ASCII .csv. Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.

Pierwszą rzeczą, którą GenerateDatasetsXml robi dla tego typu zbioru danych po otrzymaniu odpowiedzi na pytania jest wydrukowanie struktury typu ncdump w pliku próbkowym. Więc jeśli wprowadzisz kilka głupich odpowiedzi dla pierwszej pętli przez GenerateDatasets Xml, przynajmniej będziesz w stanie zobaczyć czyERDDAP™może odczytać plik i zobaczyć jakie wymiary i zmienne są w pliku. Następnie możesz dać lepsze odpowiedzi dla drugiej pętli poprzez GenerateDatasetsXml.

  • UWAGA: KiedyERDDAP™odczytuje pliki danych NCSV, jeśli znajdzie błąd na danej linii (np. nieprawidłowa liczba elementów) , zapisuje wiadomość ostrzegawczą ("OSTRZEŻENIE: zła linia (s) danych "... z listą złych linii na kolejnych liniach) doplik log.txta następnie kontynuuje czytanie reszty pliku danych. Tak więc, Twoim obowiązkiem jest okresowo patrzeć (lub napisać skrypt, aby to zrobić) dla tej wiadomości w dzienniku. txt tak, że można naprawić problemy w plikach danych.ERDDAP™jest skonfigurowany w ten sposób, aby użytkownicy mogli kontynuować odczytywanie wszystkich dostępnych ważnych danych, mimo że niektóre linie pliku mają wady.  

EDDTableFromNOS

EDDTableFromNOS (ZANIECHANE) obsługuje dane zNOAA NOSźródło, które wykorzystujeSOAP+XMLw przypadku wniosków i odpowiedzi. Jest to bardzo specyficzne dlaNOAAXML NOS. Patrz: zestaw danych EDDTableFromNOS w datasets2.xml.  

EDDTableFromOBIS

EDDTableFromOBIS obsługuje dane z Oceanicznego Systemu Informacji Biogeograficznej (OBIS) serwer (be http://www.iobis.org ) . Możliwe, że nie ma już aktywnych serwerów, które używają tego typu serwera OBIS.

  • Serwery OBIS oczekują żądania XML i zwracają odpowiedź XML.
  • Ponieważ wszystkie serwery OBIS służą tym samym zmiennym w ten sam sposób (be http://iobis.org/tech/provider/questions ) , nie trzeba określić wiele, aby skonfigurować zestaw danych OBIS wERDDAP.
  • MUSI zawierać "creator\_email"atrybut w świecieaddAttributes, ponieważ informacje te są wykorzystywane w ramach licencji. Odpowiedni adres e-mail można znaleźć czytając odpowiedź XML z sourceURL.
  • Możesz lub nie być w stanie uzyskać atrybut globalny [<subsetVariables>] (# subsetvarels) do pracy z danym serwerem OBIS. Jeśli spróbujesz, spróbuj jednej zmiennej (na przykład, Nazwa naukowa lub genus) .

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

Pliki EDDTableFromParquetFiles

Pliki EDDTableFromParquetFiles obsługuje dane zParkiet. Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.

  • Parkiet jest przeznaczony do kompresji bardzo efektywnie, więc może to dać Ci mniejsze rozmiary plików niż inne formaty.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.
  • UWAGA: KiedyERDDAP™odczytuje pliki danych Parquet, jeśli znajdzie błąd w danej linii (np. nieprawidłowa liczba elementów) , zapisuje wiadomość ostrzegawczą ("OSTRZEŻENIE: zła linia (s) danych "... z listą złych linii na kolejnych liniach) doplik log.txta następnie kontynuuje czytanie reszty pliku danych. Tak więc, Twoim obowiązkiem jest okresowo patrzeć (lub napisać skrypt, aby to zrobić) dla tej wiadomości w dzienniku. txt tak, że można naprawić problemy w plikach danych.ERDDAP™jest skonfigurowany w ten sposób, aby użytkownicy mogli kontynuować odczytywanie wszystkich dostępnych ważnych danych, mimo że niektóre linie pliku mają wady.  

Tabela EDDFromSOS

Tabela EDDFromSOS obsługuje dane z usługi obserwacji czujników (SWE /SOS) serwer.

  • Ten zbiór danych typu agregatów danych z grupy stacji, które są obsługiwane przez jednąSOSserwer.
  • Wszystkie stacje obsługują ten sam zestaw zmiennych (chociaż źródło dla każdej stacji nie musi obsługiwać wszystkich zmiennych) .
  • SOSserwery oczekują żądania XML i zwracają odpowiedź XML.
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić. Nie jest łatwo wygenerować zestaw danych XML dlaSOSzbiory danych ręcznie. Aby znaleźć potrzebne informacje, musisz odwiedzićsourceUrl+ "? usługa =SOS& żądanie =GetCapabilities"w przeglądarce; spójrz na XML; zrób żądanie GetObservation ręcznie; i spójrz na odpowiedź XML na żądanie.
  • Z okazjonalnego dodawania nowych rodzajówSOSserwery i zmiany w starych serwerach, staje się coraz trudniejsze dlaERDDAP™automatyczne wykrywanie typu serwera z odpowiedzi serwera. Stosowanie<SosServerType > (o wartości IOOS\ _ NDBC, IOOS\ _ NOS,OOSTethyslub WHOI) jest teraz bardzo zalecane. Jeśli masz problemy z dowolnego zbioru danych tego typu, spróbuj ponownie uruchomić GenerateDatasets XmlSOSserwer. Generuj Zestawy danych Xml pozwoli wypróbować różne<sosServerType > opcje dopóki nie znajdziesz odpowiedniego dla danego serwera.
  • SOSprzegląd:
    • SWE (Enablement strony czujnika) orazSOS (Usługi obserwacji czujników) sąStandardy OpenGIS ®. Ta strona ma dokumenty standardów.

    • WOGCWeb Services Common Specification ver 1.1.0 (OGC06- 121r3) obejmuje budowę zapytań GET i POST (Patrz punkt 7.2.3 i 9.) .

    • Jeśli wysłać getCapability xml żądanie doSOSserwer (sourceUrl+ "? service =SOS& żądanie =GetCapabilities") , otrzymasz wynik xml z listą stacji i obserwowanych Właściwości, do których mają dane.

    • ObservedProperty jest formalnym odniesieniem URI do nieruchomości. Na przykład, urn: ogc: fenomen: długość geograficzna: wgs84 lub https://mmisw.org/ont/cf/parameter/sea\\_water\\_temperature

    • ObservedProperty nie jest zmienną.

    • Więcej niż jedna zmienna może mieć ten sam obserwowany Własność (na przykład, insideTemp i na zewnątrz Temp mógł być obserwowany Własność https://mmisw.org/ont/cf/parameter/air\\_temperature ) .

    • Jeśli wysyłasz żądanie getObservation xml doSOSserwer, otrzymasz wynik xml z opisami nazw pól w odpowiedzi, jednostek pola i danych. Nazwy pól obejmują długość, szerokość geograficzną, głębokość (być może) i czas.

    • KażdydataVariabledla tabeli EDDFromSOSmusi zawierać atrybut "observedProperty", który identyfikuje zaobserwowaną Property, która musi być wymagana od serwera w celu uzyskania tej zmiennej. Często, kilkadataVariables będzie wymieniał te same złożone obserwacje Property.

    • Data Typ dla każdegodataVariablenie może być określony przez serwer. Jeśli tak, należy spojrzeć na odpowiedzi danych XML z serwera i przypisać odpowiednie [<dataType > s] (# datatype) wERDDAP™zbiór danychdataVariabledefinicje.

    • (W czasie pisania tego) niektóreSOSserwery odpowiadają na żądania getObservation dla więcej niż jednego obserwowanego Nieruchomość przez zwracanie wyników dla pierwszego z obserwowanych Właściwości. (Żadnych błędów!) Patrz żądanie parametrów konstruktora ObservedPropertiesSeparately.

  • Tabela EDDFromSOSautomatycznie dodaje

    station\_id, longitude, latitude
    do globalnych atrybutów zbioru danych przy tworzeniu zbioru danych.

  • SOSserwery zwykle wyrażająjednostkizUCUMsystem. WiększośćERDDAP™serwerów jednostek ekspresowych zUDUNITSsystem. Jeśli potrzebujesz przekonwertować między dwoma systemami, możesz użyćERDDAPSerwis internetowy do konwersji jednostek UCUM na / zUDUNITS.

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

Pliki EDDTableFromThreddsFiles

Pliki EDDTableFromThreddsFiles (depregated) pliki danych agregatów z kilkoma zmiennymi, z których każdy ma jeden lub więcej wspólnych wymiarów (na przykład, czas, wysokość (lub głębokość) , szerokość i długość geograficzna) , i służył przezTRZECIAOPeNDAPserwer.

  • Ten typ zbioru danych jest ZANIECHANE . Nowszym i bardziej ogólnym rozwiązaniem jest użyciecache Opcja FromUrl dla EDDTable Pliki FromFiles (lub wariant) , który tworzy lokalną kopię zdalnych plików i obsługuje dane z lokalnych plików. W<Opcja cacheFromUrl > może być używana z dowolnym typem pliku tabelarycznego z dowolnego źródła internetowego, które publikuje listę plików typu directory-. **
    Jeśli z jakiegoś powodu ci się nie uda, napisz do Chrisa. John w Noa.gov. W przypadku braku skarg przed 2020 r., ten typ zbioru danych może zostać usunięty. **
  • Zdecydowanie zalecamy użycieGenerateDatasets Program Xmlzrobić szorstki szkicdatasets.xmlChunk za ten zestaw danych. Następnie można to edytować, aby dostroić.
  • W większości przypadków, każdy plik ma wiele wartości dla najbardziej lewego (pierwszy) wymiar, na przykład, czas.
  • Pliki często (ale nie muszę) mają jedną wartość dla innych wymiarów (na przykład wysokość (lub głębokość) , szerokość i długość geograficzna) .
  • Pliki mogą mieć zmienne znaków o dodatkowym wymiarze (nZnaki) .
  • Serwery THREDDS mogą być identyfikowane przez "/ thredds /" w URL. Na przykład:
    https://www.ncei.noaa.gov/thredds/catalog/uv/6h\\_strs\\_agg/catalog.html
  • Serwery THREDDS posiadają katalogi w różnych miejscach. Ta klasa wymaga, aby adres URL zawierał "/ tróje / katalog /". Zazwyczaj można znaleźć tę zmienną zaczynając w przeglądarce w katalogu root, a następnie klikając do pożądanego podkatalogu.
  • Ta klasa czyta pliki katalog.xml obsługiwane przez THREDDS z listami<KatalogRefs > (odniesienia do dodatkowych podplików katalog.xml) oraz<zbiór danych > s (pliki danych) .
  • W<ustawienie fileDir > jest ignorowane. Ponieważ ta klasa pobiera i robi lokalną kopię każdego pliku danych zdalnych,ERDDAP™zmusza plik Reżyseria bigParentDirectory / kopiuj / datasetID /.
  • Dla<sourceUrl>, użyj URL pliku katalog.xml dla zbioru danych na serwerze THREDDS, na przykład: dla tego URL, który może być używany w przeglądarce internetowej, https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.html \[2020- 10- 21 Serwer ten nie jest już dostępny.\], podanie<sourceUrl> https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.xml </sourceUrl> (ale umieścić go na jednej linii) .
  • Ponieważ ta klasa zawsze pobiera i robi lokalną kopię każdego zdalnego pliku danych, nigdy nie należy zawijać tego zbioru danych wEDDTableCopy.
  • Ten typ zbioru danych obsługuje optyczny, rareli- używany, specjalny znacznik,<SpecialMode > tryb </ specialMode >, który może być użyty do określenia, że do określenia, które pliki powinny być pobierane z serwera, powinny być używane specjalne, zaszyfrowane zasady. Obecnie tylko ważne tryb jest SAMOS, który jest stosowany z zestawami danych z https://tds.coaps.fsu.edu/thredds/catalog/samos aby pobrać tylko pliki z ostatnim numerem wersji.
  • Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, dla informacji o tym, jak ta klasa działa i jak jej używać.
  • Zobacz przykłady 1D, 2D, 3D i 4DPliki EDDTableFromNc@@.  

Tabela EDDFromWFSPliki

Tabela EDDFromWFSPliki (ZANIECHANE) tworzy lokalną kopię wszystkich danych zArcGISMapServerWFSserwer więc dane mogą być szybko ponownie podawane doERDDAP™użytkowników.

  • Musisz określić specjalnie sformatowanesourceUrlatrybut globalny do określeniaERDDAP™jak zażądać informacji o funkcji z serwera. Proszę użyć tego przykładu jako szablonu:
    <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>  

(ale postaw wszystko na jednej linii)

  • Musisz dodać specjalny atrybut globalny, aby powiedziećERDDAP™sposób identyfikacji nazw fragmentów danych, które należy pobrać. To prawdopodobnie zadziała dla wszystkich EDDTableFromWFSZestawy danych plików:
    <att name="rowElementXPath">/wfs:FeatureCollection/gml:featureMember</att>
  • Ponieważ ta klasa zawsze pobiera i robi lokalną kopię każdego zdalnego pliku danych, nigdy nie należy zawijać tego zbioru danych wEDDTableCopy.
  • Widzisz tę klasę "superklasy",Pliki EDDTableFromFiles, w celu uzyskania dodatkowych informacji na temat działania tej klasy i jej wykorzystania.  

EDDTableAggregateRows

EDDTableAggregateRows może sporządzić zbiór danych EDDTable z grupy zbiorów danych EDDTable "dziecko".

  • Oto niektóre zastosowania dla EDDTableAggregateRows:
    • Możesz zrobić zestaw danych EDDTableAggregateRows z dwóch różnych rodzajów plików lub źródeł danych, na przykład zestaw danych z danymi do końca ostatniego miesiąca zapisanych w.ncPliki CF i zbiór danych z danymi za bieżący miesiąc przechowywane w bazie relacyjnej.
    • Możesz zrobić zestaw danych EDDTableAggregateRoves, aby uporać się ze zmianą plików źródłowych (na przykład zmieniono format czasu lub zmieniono nazwę zmiennej lub dane Typ /scale\_factor/add\_offsetzmienione) . W tym przypadku jedno dziecko otrzymywało dane z plików wykonanych przed zmianą, a drugie otrzymywało dane z plików wykonanych po zmianie. To zastosowanie EDDTableAggregateRows jest alternatywą dla stosowaniaNcMLlubNCO. O ile w nazwach plików nie ma funkcji wyróżniającej (więc możesz użyć<fileNameRegex > w celu określenia, do którego pliku należy zestaw danych dla dzieci), należy prawdopodobnie przechowywać pliki dla dwóch zbiorów danych dla dzieci w różnych katalogach.
    • Możesz zrobić zestaw danych EDDTableAggregateRows, który posiada wspólny zestaw zmiennych jednego lub więcej podobnych, ale różnych zbiorów danych, na przykład zbiór danych, który tworzy zbiór danych Profile z kombinacji zbioru danych Profile, zbioru danych TimeSeriesProfile oraz zbioru danych TrajectoryProfile (które mają kilka różnych zmiennych i kilka zmiennych wspólnych - w takim przypadku będziesz musiał zrobić specjalne warianty dla zbiorów danych dla dzieci, tylko ze zmiennymi niewspólnymi) .
    • Można mieć kilka samodzielnych zbiorów danych, każdy z tego samego rodzaju danych, ale z innej stacji. Możesz zostawić te dane nienaruszone, ale także stworzyć zbiór danych EDDTableAggregateRows, który zawiera dane ze wszystkich stacji -- każdy zestaw danych dla dzieci może być prostyEDDTableFromErddap, co wskazuje na jeden z istniejących zbiorów danych stacji. Jeśli to zrobisz, daj każdemu z zbiorów danych EDDTableFromErddap innydatasetIDniż oryginalne zbiory danych samodzielnych, np. poprzez dodanie "Child" do oryginałudatasetID.
  • Każde dziecko<zestaw danych > 's określony musi być kompletnym zbiorem danych, tak jakby był zbiorem danych samodzielnych. Każdy musi mieć to samo.dataVariables, w tej samej kolejności, w tej samejdestinationNames,dane Rodzaje,missing\_values,\ _ FillValuesorazjednostki. Metadane dla każdej zmiennej dla zbioru danych EDDTableAggregateRows pochodzą ze zmiennych w pierwszym zbiorze danych dla dzieci, ale EDDTableAggregateRows zaktualizujeactual\_rangemetadane, które mają być rzeczywistym zakresem dla wszystkich dzieci.
  • Zalecenie: Uzyskaj każdy zestaw danych dziecka pracujący jako zestaw danych samodzielny. Następnie spróbuj zrobić zestaw danych EDDTableAggregateRows poprzez cięcie i wklejaniedatasets.xmlcząstka dla każdego do nowego EDDTableAggregate Zbiór danych wierszy.
  • Domyślna kolejność sortowania: Kolejność zbiorów danych dla dzieci określa ogólną domyślną kolejność sortowania wyników. Oczywiście użytkownicy mogą poprosić o inny sortowanie dla danego zestawu wyników poprzez przypisanie &orderBy (" Lista zmiennych oddzielona od comma- ") do końca ich zapytania.
  • "Źródło"globalny Atrybutydla EDDTableAggregateRows jest łączony globalAtrybuty z pierwszego zbioru danych dzieci. The EDDTableAggregate Wiersze mogą mieć globalny<addAttributes> aby zapewnić dodatkowe atrybuty globalne lub nadpisać atrybuty globalne źródła.

EDDTableAggregate Wiersze szkielet 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 może zrobić lokalną kopię wielu typów zbiorów danych EDDTable, a następnie szybko ponownie podawać dane z lokalnej kopii.

  • EDDTableCopy (oraz dane dotyczące sieci,EDDGridKopiuj) jest bardzo łatwy w użyciu i bardzo skuteczny rozwiązanie niektórych z największych problemów z obsługą danych z zdalnych źródeł danych:
    • Dostęp do danych ze zdalnego źródła danych może być powolny.
      • Mogą być powolne, ponieważ są z natury powolne (na przykład nieefektywny typ serwera) ,
      • ponieważ są przytłoczeni zbyt wieloma prośbami,
      • lub ponieważ serwer lub zdalny serwer jest ograniczony przepustowość.
    • Zdalny zestaw danych jest czasami niedostępny (ponownie, z różnych powodów) .
    • Poleganie na jednym źródle danych nie jest dobre (na przykład, gdy wielu użytkowników i wieluERDDAPs wykorzystanie) .  
  • Jak to działa -- EDDTableCopy rozwiązuje te problemy poprzez automatyczne tworzenie i utrzymywanie lokalnej kopii danych oraz obsługę danych z lokalnej kopii.ERDDAP™może obsługiwać dane z lokalnej kopii bardzo, bardzo szybko. Tworzenie i używanie lokalnej kopii zmniejsza obciążenie zdalnego serwera. Lokalna kopia to kopia zapasowa oryginału, która jest przydatna na wypadek, gdyby coś stało się oryginałowi.

Nie ma nic nowego w tworzeniu lokalnej kopii zbioru danych. To co tu nowego, to to, że ta klasa robi to\*łatwo\*do tworzenia i\*utrzymanie\*miejscowa kopia danych z\*odmiana\*rodzajów zdalnych źródeł danych oraz\*dodaj metadane\*podczas kopiowania danych.

EDDTableCopy vs.<cacheFromUrl & gt;

<cacheFromUrl > jest alternatywą dla EDDTableCopy. Działają inaczej.

  • Tabela EDD Kopiowanie działa poprzez żądanie fragmentów danych z usługi zdalnej i przechowywanie tych fragmentów w lokalnych plikach. Tak więc EDDTableCopy jest przydatna w niektórych przypadkach, gdy dane są dostępne za pośrednictwem usługi zdalnej.
  • [<cacheFromUrl >] (# cachefromurl) pobiera istniejące pliki wymienione na zdalnej stronie internetowej.<cacheFromUrl > jest łatwiejszy w użyciu i bardziej niezawodny, ponieważ może łatwo stwierdzić, kiedy jest nowy plik danych zdalnych lub kiedy plik danych zdalnych zmienił się i dlatego musi być pobrany.

Jeżeli istnieją sytuacje, w których EDDTableCopy lub<cacheFromUrl > można użyć, używać<cacheFromUrl > ponieważ jest łatwiejszy i bardziej niezawodny.  

<extractDestination Nazwy & gt;

Tabela EDD Kopia tworzy lokalną kopię danych poprzez żądanie fragmentów danych ze zdalnego zbioru danych. Tabela EDD Kopiuj określa, które fragmenty żądać, prosząc o & odrębne () wartości dla<extractDestinationNazwy > (określone wdatasets.xml, patrz poniżej) , które są oddzielonymi spacjami nazwami docelowymi zmiennych w zdalnym zbiorze danych. Na przykład:

    <extractDestinationNames>drifter profile</extractDestinationNames>  

może dać różne wartości kombinacje włóczęgi = tig17, profil = 1017, włóczęga = tig17, profil = 1095,... włóczęga = une12, profil = 1223, włóczęga = une12, profil = 1251,....

W sytuacjach, w których jedna kolumna (na przykład profil) może być wszystkim, co jest wymagane do jednoznacznej identyfikacji grupy wierszy danych, jeśli istnieje bardzo duża liczba, na przykład, profili, może być przydatne, aby również określić dodatkowy wyciąg Miejsce przeznaczenia Nazwa (na przykład, włóczęga) która służy do podziału profili. Prowadzi to do zmniejszenia liczby plików danych w danym katalogu, co może prowadzić do szybszego dostępu.

Pliki lokalne

Każdy kawałek danych jest przechowywany w osobnymNetCDFplik w podkatalogu bigParentDirectory / kopiuj / datasetID / (jak określono wsetup.xml) . Istnieje jeden poziom podkatalogu dla wszystkich poza ostatnim ExtractDestinationName. Na przykład dane dla tyg17 + 1017, będą przechowywane w bigParentDirectory / kopia / sampleDataset / tig17 / 1017.nc. Na przykład, dane dla une12 + 1251, będą przechowywane w bigParentDirectory / kopia / sampleDataset / une12 / 1251.nc. Katalog i nazwy plików utworzone z wartości danych są modyfikowane, aby uczynić je file- name- bezpieczne (na przykład spacje zastępuje się "x20") -- to nie wpływa na rzeczywiste dane.  

Nowe dane

Za każdym razem EDDTable Kopia jest przeładowana, sprawdza zdalny zbiór danych, aby zobaczyć, co różne kawałki są dostępne. Jeśli plik dla kawałka danych nie istnieje, wniosek o uzyskanie kawałka jest dodawany do kolejki.ERDDAP's TaskThread przetwarza wszystkie kolejki żądań fragmentów danych, jeden-by-jeden. Możesz zobaczyć statystyki działalności taskThread na tematStrona statusuorazSprawozdanie dzienne. (Tak.ERDDAP™może przyporządkować do tego procesu wiele zadań, ale to zużyłoby wiele częstotliwości, pamięci i czasu CPU oraz wiele czasu lokalnegoERDDAPprzepustowość, pamięć i czas procesora, żaden z nich nie jest dobrym pomysłem.)

UWAGA: Po raz pierwszy EDDTableCopy jest załadowany, (Jeśli wszystko pójdzie dobrze) wiele żądań dotyczących fragmentów danych zostanie dodanych do kolejki taskThread, ale nie zostaną utworzone żadne lokalne pliki danych. Tak więc konstruktor zawiedzie, ale taskThread będzie nadal pracować i tworzyć lokalne pliki. Jeśli wszystko pójdzie dobrze, taskThread zrobi kilka lokalnych plików danych i następna próba ponownego załadowania zbioru danych (za 15 minut) odniesie sukces, ale początkowo z bardzo ograniczoną ilością danych.

UWAGA: Po lokalnym zbiorze danych jest kilka danych i pojawia się w TwoimERDDAP, jeśli zdalny zestaw danych jest tymczasowo lub na stałe niedostępny, lokalny zestaw danych nadal będzie działać.

UWAGA: Jeśli zbiór danych jest duży i / lub serwer jest powolny (W tym problem, prawda?) , to zajmie dużo czasu, aby zrobić kompletną miejscową kopię. W niektórych przypadkach potrzebny czas będzie nie do przyjęcia. Na przykład przesyłanie 1 TB danych przez linię T1 (0,15 GB / s) trwa co najmniej 60 dni, w optymalnych warunkach. Dodatkowo, używa dużo przepustowości, pamięci i czasu procesora na komputerach zdalnych i lokalnych. Rozwiązaniem jest wysłanie dysku twardego do administratora zdalnego zbioru danych, aby s / on mógł zrobić kopię zbioru danych i wysłać dysk twardy z powrotem do Ciebie. Użyj tych danych jako punktu wyjścia, a EDDTableCopy doda do niego dane. (W ten sposób usługa chmurowa EC2 firmy Amazon zajmowała się problemem, mimo że ich system ma dużą przepustowość.)

UWAGA: Jeśli dana kombinacja wartości znika z zdalnego zbioru danych, EDDTableCopy NIE usuwa lokalnego kopiowanego pliku. Jeśli chcesz, możesz go skasować.

TableCopy<checkSourceData & gt;

Wdatasets.xmldla tego zbioru danych może mieć opcjonalny znacznik

    <checkSourceData>true</checkSourceData>  

Domyślna wartość jest prawdziwa. Jeśli / kiedy ustawisz go na false, zbiór danych nigdy nie będzie sprawdzał zbioru danych źródłowych, aby sprawdzić, czy są dostępne dodatkowe dane.  

  1. Utwórz<zbiór danych > wpis (typ rodzimy, nie EDDTableCopy) dla zdalnego źródła danych. Uruchomić go poprawnie, w tym wszystkie wymagane metadane.
  2. Jeśli jest zbyt wolny, dodaj kod XML, aby zawinąć go w zestaw danych EDDTableCopy.
    • Użyj innegodatasetID (Może zmieniającdatasetIDstaredatasetIDnieznacznie) .
    • Kopiuj<dostępne Do >,<przeładowanie EveryNMinutes > i<onChange > od zdalnego XML EDDTable do XML EDDTableCopy. (Ich wartości dla EDDTableCopy materia; ich wartości dla wewnętrznego zbioru danych stają się nieistotne.)
    • Utwórz<extractDestinationNames > tag (patrz powyżej) .
    • <orderExtractBy > jest optional space separated list nazw zmiennych docelowych w zdalnym zbiorze danych. Po pobraniu każdej części danych z zdalnego serwera, część zostanie posortowana przez te zmienne (przez pierwszą zmienną, następnie przez drugą, jeśli pierwsza zmienna jest związana,...) . W niektórych przypadkach,ERDDAP™będzie w stanie szybciej pobierać dane z lokalnych plików danych, jeśli pierwsza zmienna na liście jest zmienną liczbową ("time"liczy się jako zmienna liczbowa) . Ale wybierz te zmienne w sposób odpowiedni dla zbioru danych.
  3. ERDDAP™będzie tworzyć i utrzymywać lokalną kopię danych.  
  • UWAGA: EDDTableCopy zakłada, że wartości danych dla każdego kawałka nigdy się nie zmieniają. Jeśli / kiedy to się stanie, należy ręcznie usunąć pliki cząstkowe w bigParentDirectory / kopiuj / datasetID / które się zmieniły ibanderazbiór danych, który ma być ponownie załadowany, tak aby usunięte kawałki zostały zastąpione. Jeśli masz subskrypcję e-mail do zbioru danych, otrzymasz dwa e-maile: jeden, gdy zestaw danych po raz pierwszy przeładowuje i zaczyna kopiować dane, a drugi, gdy zestaw danych ponownie ładuje (automatycznie) i wykrywa nowe lokalne pliki danych.  
  • Zmień metadane -- W przypadku konieczności zmianyaddAttributeslub zmienić kolejność zmiennych związanych z zbiorem danych źródłowych:
    1. ZmieńaddAttributesdla zbioru danych źródłowych wdatasets.xmlW razie potrzeby.
    2. Usuń jeden z skopiowanych plików.
    3. Ustawbanderaaby natychmiast przeładować zestaw danych. Jeśli używasz flagi i masz e-mail subskrypcji do zbioru danych, otrzymasz dwa e-maile: jeden, gdy zestaw danych po raz pierwszy przeładowuje i zaczyna kopiować dane, a drugi, gdy zestaw danych ładuje ponownie (automatycznie) i wykrywa nowe lokalne pliki danych.
    4. Usunięty plik zostanie zregenerowany przy pomocy nowych metadanych. Jeśli zbiór danych źródłowych jest zawsze niedostępny, zbiór danych EDDTableCopy będzie otrzymywał metadane z pliku regenerowanego, ponieważ jest to najmłodszy plik.  
  • EDDGridKopiujjest bardzo podobny do EDDTableCopy, ale działa z zawiązanymi zbiorami danych.

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

Szczegóły

Oto szczegółowe opisy wspólnych znaczników i atrybutów.

<angularDegreeUnits & gt;

  • [ ** <AngularDegreeUnits > ** ] (# angulardegreeunits) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóra zawiera oddzieloną od commaa listę ciągów jednostek, któreERDDAP™powinny być traktowane jako jednostki stopni kątowych. Jeśli zmienna ma jedną z tych jednostek,tabledapjestorderByMeanfiltr będzie obliczać średnią w specjalny sposób, a następnie zgłosić średnią jako wartość od -180 do 180. PatrzERDDAPplik kodu źródłowego EDStatic.java dla bieżącej listy domyślnej. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.

<angularDegreeTrueUnits & gt;

  • [ ** <kątowy DegreeTrueUnits > ** ] (# angulardegreetrueunits) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóra zawiera oddzieloną od commaa listę ciągów jednostek, któreERDDAP™powinny traktować jako kątowe stopnie prawdziwe jednostki. Jeśli zmienna ma jedną z tych jednostek,tabledapjestorderByMeanfiltr będzie obliczać średnią w specjalny sposób, a następnie zgłosić średnią jako wartość od 0 do 360. PatrzERDDAPplik źródłowy EDStatic.java dla bieżącej listy domyślnej. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.  

<common StandardNames & gt;

  • [ ** <CommonStandard Nazewnictwa > ** ] (# Common Standard names) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlw celu określenia listy wspólnej oddzielonej od comma-Nazwa standardowa CF. Np.
    <commonStandardNames>air\\_pressure, ..., wind\\_to\\_direction</commonStandardNames>  

Ta lista jest używana w DataProviderForm3.html jako wygoda dla użytkowników. Jeśli chcesz dostarczyć te informacje wdatasets.xml, rozpocząć od skopiowania bieżącej listy domyślnej w<DEFAULT\ _ commonStandard Nazwy > wERDDAPjest \[tomcat\]/ webapps / erddap / WEB- INF / classes / gov / noaa / pfel / erddap / util / messages.xml file.  

<kapsułki & gt;

  • [ ** <KaszeMinuty > ** ] (# cacheminutes) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlokreślenie wieku (w minutach) w którym pliki w pamięci podręcznej powinny zostać usunięte (domyślny = 60) . Np.
    <cacheMinutes>60</cacheMinutes>  

Ogólnie, tylko pliki obrazkowe (ponieważ te same obrazy są często wymagane wielokrotnie) oraz.ncpliki (ponieważ muszą być w pełni utworzone przed wysłaniem do użytkownika) są buforowane. Chociaż może się wydawać, że dana prośba powinna zawsze odpowiadać tak samo, to nie jest to prawda. Na przykładtabledapwniosek zawierający czas > niektóre Czas zmieni się, gdy nowe dane przybędą do zbioru danych. I żądanie griddap, które obejmuje\[ostatni\]dla wymiaru czasu zmieni się, gdy nowe dane przybędą do zbioru danych. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, to zostało określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<convertInterpolateRequestCSVPrzykład & gt;

  • [ ** <convertInterpolateRequestCSVPrzykład > ** ] (# convertinterpolaterequestcsvexample) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xml \[rozpoczynając odERDDAP™v2.10\]który zawiera przykład, który zostanie pokazany na stronie Interpolate. Domyślna wartość to: jplMURSST41 / analiza\ _sstBilinear / 4.

<convertInterpolateDatasetidVariableList & gt;

  • [ ** <convertInterpolateDatasetidVariable List > ** ] (# convertinterpolated asetid variablelist) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xml \[rozpoczynając odERDDAP™v2.10\]który zawiera listę CSVdatasetID/ zmienna Podaj przykłady, które zostaną wykorzystane jako sugestie na stronie Interpolate. Domyślna wartość to: jplMURSST41 / analiza\ _sst.

<convertToPublicSourceUrl & gt;

  • [ ** <convertToPublicSourceUrl > ** ] (# converttopublicsourceurl) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóry zawiera atrybut "od" i "od" do ", który określa jak przekonwertować dopasowanie lokalnesourceUrl (zazwyczaj numer IP) na rynek publicznysourceUrl (nazwa domeny) "od" must have the form "\[coś\]/ /\[coś\]". Może być 0 lub więcej tych znaczników. Więcej informacji na ten temat znajduje się w [<sourceUrl>] (# sourceurl) . Na przykład:
    <convertToPublicSourceUrl from="https://192.168.31.18/" to="https://oceanwatch.pfeg.noaa.gov/" />  

spowoduje dopasowanie lokalnychsourceUrl (takie jak https://192.168.31.18/thredds/dodsC/satellite/BA/ssta/5day )
na rynek publicznysourceUrl ( https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day ) . Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.

Ale ze względów bezpieczeństwa i związanych z systemem subskrypcji, Nie używaj tej tagi!
Zamiast, zawsze używać nazwy domeny publicznej w<sourceUrl> znacznik i użyj/ etc / hosts tablena serwerze do konwersji lokalnych nazw domen do numerów IP bez użycia serwera DNS. Możesz sprawdzić, czy nazwa domeny jest poprawnie przekształcana w numer IP za pomocą: ping some.domain.name
 

data: image / png; base64,

  • Kiedy użytkownik żąda.htmlTableodpowiedź odERDDAP™, jeśli dane w komórce String zawierają dane: image / png; base64, po których następuje base64 zakodowanego obrazu .png,ERDDAP™wyświetla ikonę (więc użytkownik może zobaczyć obraz, jeśli unoszą się nad nim) i przyciski, aby zapisać tekst lub obraz do schowka. Ta funkcja została dodana wERDDAP™v2.19 Marco Alba.

drawLandMask

  • drawLandMask określa domyślne ustawienie, które kontroluje czas i sposób rysowania maski obcej,ERDDAP™rysuje mapę. Może być określone w trzech różnych miejscach wdatasets.xml (wymienione od najniższego do najwyższego priorytetu) :

    1. JeślidrawLandMaskjest określone w<erddapDatasets > (niezwiązane z żadnym konkretnym zbiorem danych) , następnie określa domyślną wartośćdrawLandMaskdla wszystkich zmiennych we wszystkich zbiorach danych. Na przykład:
        <drawLandMask>under</drawLandMask>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAPodczytdatasets.xml. Jeśli ten znacznik nie jest obecny, wartość domyślna jest poniżej.   2. JeślidrawLandMaskjest określony jako atrybut globalny danego zbioru danych, a następnie określa domyślną wartośćdrawLandMaskdla wszystkich zmiennych w tym zbiorze danych, nadrzędne jakiekolwiek niższe ustawienie priorytetów. Na przykład:

    <att name="drawLandMask">under</att>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™Przeładowuje ten zestaw danych.   3. JeślidrawLandMaskjest określony jako atrybut zmiennej w danym zbiorze danych, następnie określa domyślną wartośćdrawLandMaskdla tej zmiennej w tym zbiorze danych, nadrzędne jakiekolwiek niższe ustawienie priorytetów. Na przykład:

    <att name="drawLandMask">under</att>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™Przeładowuje ten zestaw danych.

Użytkownik może nadpisać wartość domyślną (gdziekolwiek jest określone) poprzez wybranie wartości dla "Draw land mask" z listy rozwijanej na stronie internetowej Make A Graph lub poprzez włączenie & .land = wartość w URL, który wymaga mapy zERDDAP.

We wszystkich sytuacjach istnieje 4 możliwe wartości atrybutu:

  • "under" rysuje maskę, zanim wyciąga dane na mapie. Dla pasowanych zbiorów danych, ziemia pojawia się jako stały jasnoszary kolor. Dla tabelarycznych zbiorów danych "pod" pokazuje dane topograficzne na lądzie i oceanach.
  • "ponad"... W przypadku zbiorów danych "over" rysuje maskę lądową po tym, jak rysuje dane na mapach, tak aby zamaskować wszelkie dane na lądzie. Dla tabelarycznych zbiorów danych, "over" pokazuje batymetrię oceanu i stały jasnoszary, gdzie jest ziemia, oba narysowane pod danymi.
  • "zarys" tylko rysuje zarys maski, granic politycznych, jezior i rzek.
  • "off" niczego nie rysuje.

<emailDiagnosticsToErdData & gt;

  • [ ** <emailDiagnosticsToErdData > ** ] (# emaildiagnosticstoerddata) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xml. Wartość znacznika może być prawdziwa (domyślny) albo fałszywe. Jeśli to prawda,ERDDAP™wyśle wiadomość do Chrisa. John w Noah. gov (doERDDAP™zespół ds. rozwoju) . Powinno to być bezpieczne, ponieważ brak poufnych informacji (np. requestUrl) jest zawarte w e-mailu. Powinno to umożliwić złapanie wszelkich niejasnych, całkowicie niespodziewanych błędów, które prowadzą do NullPointerexceptions. W przeciwnym razie użytkownik widzi wyjątki, aleERDDAP™zespół rozwoju nie (Więc nie wiemy, czy istnieje problem, który trzeba naprawić.) .  

<graphBackgroundColor & gt;

  • [ ** <graphBackgroundColor > ** ] (# graphbackgroundcolor) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlaby określić domyślny kolor tła na wykresach. Dotyczy to prawie wszystkich wykresów. Istnieje kilka sytuacji, które nie mają wpływu. Kolor jest określony jako 8-cyfrowa wartość szesnastkowa w formie 0xAARRGGBB, gdzie AA, RR, GG i BB są zmętnienie, czerwony, zielony i niebieski komponenty, odpowiednio. "0x" jest wrażliwy na przypadek, ale cyfry szesnastkowe nie są wrażliwe na przypadek. Na przykład, w pełni nieprzezroczyste (ff) greenish- blue kolor z czerwonym = 22, green = 88, blue = ee byłby 0xff2288ee. Nieprzezroczysty biały to 0xffffffff. Domyślnie jest nieprzezroczysty jasnoniebieski (0xffccccff) , który ma tę zaletę, że jest inny niż biały, który jest ważnym kolorem w wielu paletach używanych do rysowania danych. Na przykład:
    <graphBackgroundColor>0xffffffff</graphBackgroundColor>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.

<ipAdressMaxRequestions & gt;

  • [ ** <ipAdressMaxRequestions > ** ] (# ipaddressmaxrequests) jest rzadko używanym opcjonalnym znacznikiem (pierwszy obsługiwany zERDDAP™v2.12) w obrębie<erddapDatasets > tag indatasets.xmlktóry jest częścią systemu ograniczającego zdolność nadmiernie agresywnych, legalnych użytkowników i złośliwych użytkowników do składania dużej liczby jednoczesnych wniosków, które obniżałyby wydajność systemu dla innych użytkowników. ipAddress MaxRequestions określa maksymalną liczbę jednoczesnych wniosków, które zostaną przyjęte z dowolnego konkretnego adresu IP. Dodatkowe wnioski otrzymają błąd HTTP 429: Zbyt wiele żądań. Małe, statyczne pliki w erddap / download / i erddap / images / NIE są zwolnione z tej liczby. Domyślnie to 15. Maksymalna dopuszczalna wartość to 1000, co jest szalenie wysokie - nie rób tego!ERDDAP™nie zaakceptuje liczby mniejszej niż 6, ponieważ wielu uprawnionych użytkowników (w szczególności przeglądarek internetowych orazWMSklienci) uzupełnić do 6 wniosków na raz. WERDDAP™Daily Report i podobne informacje napisane do pliku log.txt z każdym Major Dataset Reload, będzie teraz zawierać liter żądań tych adresów IP pod tytułem "Adres IP Requester IP (Zbyt wiele żądań) ". Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.

Sekcja "Major LoadDatasets Time Series" w status.html zawiera kolumnę "too Many", która zawiera listę żądań, które przekroczyły ustawienia ipAddressMaxRequests użytkownika i w ten sposób zobaczył błąd "Too Many Requests". Pozwala to łatwo zobaczyć, kiedy są aktywne zbyt agresywne prawnych użytkowników i złośliwych użytkowników, więc można (opcjonalnie) look in the log.txt file and decide if you wanna blacklist those users.

Nie ma nic złego w ustawieniu tego na większą liczbę. To zależy od ciebie. Ale to pozwala / zachęca ludzi do tworzenia systemów, które wykorzystują dużą liczbę wątków do pracy nad projektami, a następnie nie daje im żadnych informacji zwrotnych, że to, co robią nie przynosi im żadnych korzyści.

<ipAdressMaxRequestsActive

  • [ ** <ipAdressMaxRequestsActive > ** ] (# ipaddressmaxrequestsactive) jest rzadko używanym opcjonalnym znacznikiem (pierwszy obsługiwany zERDDAP™v2.12) w obrębie<erddapDatasets > tag indatasets.xmlktóry jest częścią systemu ograniczającego zdolność nadmiernie agresywnych, legalnych użytkowników i złośliwych użytkowników do składania dużej liczby jednoczesnych wniosków, które obniżałyby wydajność systemu dla innych użytkowników. ipAdressMaxRequestsActive określa maksymalną liczbę jednoczesnych wniosków, które będą aktywnie przetwarzane z dowolnego konkretnego adresu IP. Dodatkowe wnioski zostaną rozpatrzone w kolejce. Małe, statyczne pliki w erddap / download / i erddap / images / are exempt from this count and the related throttling. Domyślnie 2. Maksymalna dopuszczalna wartość to 100, co jest szalenie wysokie - nie rób tego! Można ustawić to na 1, aby być rygorystycznym, zwłaszcza jeśli masz problemy z nadmiernie agresywnych lub złośliwych użytkowników. Użytkownicy będą nadal szybko uzyskać wszystkie dane, które chcą (do ipAdressMaxRequestions) Ale nie będą w stanie przechować zasobów systemu. Nie zalecamy ustawiania tej liczby na większą liczbę, ponieważ pozwala to nadmiernie agresywnych, legalnych użytkowników i złośliwych użytkowników zdominowaćERDDAPzdolności przetwórcze. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.  

<ipAdressUnlimited & gt;

  • [ ** <ipAdressUnlimited > ** ] (# ipadegarsunlimited) jest rzadko używanym opcjonalnym znacznikiem (pierwszy obsługiwany zERDDAP™v2.12) w obrębie<erddapDatasets > tag indatasets.xmlktóry jest częścią systemu ograniczającego zdolność nadmiernie agresywnych, legalnych użytkowników i złośliwych użytkowników do składania dużej liczby jednoczesnych wniosków, które obniżałyby wydajność systemu dla innych użytkowników. ipAddressUnlimited to oddzielona od comma- lista adresów IP, które chcesz umożliwić nieograniczony dostęp do TwojegoERDDAP. Sprawdź w dzienniku. plik txt, aby sprawdzić, jakiego formatu używa serwer dla adresów IP. Na niektórych serwerach adresy IP będą w formacie #. #. #. # (gdzie # jest liczbą całkowitą od 0 do 255) ; mając na uwadze, że na innych będzie to w formacie #: #: #: #: #: #: #: #: #: #: #: # #. Wnioski na tej liście nie podlegają ani ustawieniom ipAdressMaxRequestions ani ipAdressMaxRequestsActive. To może być drugorzędne.ERDDAP™lub dla niektórych użytkowników lub serwerów w Twoim systemie.ERDDAP™zawsze dodaje " (nieznany adres IP) ", któreERDDAP™używa, gdy adres IP requestera nie może być określony, np. dla innych procesów działających na tym samym serwerze. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.

Jeśli z jakiegoś powodu wszystkie prośby użytkownika otrzymają komunikat błędu "Timeout czeka na inne żądania do przetworzenia"., wtedy można rozwiązać problem dodając adres IP użytkownika do listy ipAddressUnlimited, stosując tę zmianę, a następnie usunąć go z tej listy.

<loadDatasetsMinMinMinMinutes & gt;

  • [ ** <loadDatasetsMinMinMinMinMinutes > ** ] (# loaddatasetsminminutes) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlokreślenie minimalnego czasu (w minutach) między głównym ładunkiem Zestawy danych (kiedyERDDAP™procesy regeneracjidatasets.xml, w tym sprawdzanie każdego zbioru danych w celu sprawdzenia, czy musi być ponownie załadowany zgodnie z jego ponownym załadowaniem Każdy protokół ustalający, domyślnie = 15) . Np.
    <loadDatasetsMinMinutes>15</loadDatasetsMinMinutes>  

Jeśli dany bieg loadDatasets zajmuje mniej niż ten czas, ładownik po prostu wielokrotnie przegląda katalog flag i / lub śpi do czasu upływu czasu. Domyślnie 15 minut, co powinno być dobre dla prawie każdego. Jedyną wadą dla ustawienia tej liczby na mniejszą liczbę jest to, że zwiększy częstotliwość, żeERDDAP™ponownie testuje zbiory danych, które mają błędy uniemożliwiające załadowanie (np. zdalny serwer jest w dół) . Jeżeli istnieje wiele takich zbiorów danych i są one często poddawane ponownemu badaniu, źródło danych może uznać je za uciążliwe / agresywne zachowanie. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, to zostało określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<loadDatasetsMaxMinut & gt;

  • [ ** <loadDatasetsMaxMinutes > ** ] (# loaddatasetsmaxminutes) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlokreślić maksymalny czas (w minutach) duży ładunek Zestawy danych są dozwolone (przed obciążeniem Nici z danymi traktowane jako "zablokowane" i jest przerywane) (domyślny = 60) . Np.
    <loadDatasetsMaxMinutes>60</loadDatasetsMaxMinutes>  

Ogólnie rzecz biorąc, powinno to być ustawione na co najmniej dwa razy tyle, ile rozsądnie sądzicie, że przeładowanie wszystkich zbiorów danych (łącznie) należy (ponieważ komputery i sieci są czasami wolniejsze niż oczekiwano) Powinno to być zawsze znacznie dłuższe niż LoadDatasetsMinMinMinMinMinutes. Domyślnie 60 minut. Niektórzy ludzie to przedłużą. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, to zostało określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<logLevel & gt;

  • [ ** <logLevel > ** ] (# loglevel) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlaby określić, ile wiadomości diagnostycznych jest wysyłanych do pliku log.txt. Można ustawić na "ostrzeżenie" (najmniej wiadomości) , "info" (domyślny) lub "wszyscy" (większość wiadomości) . Np.
    <logLevel>info</logLevel>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, to zostało określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<partialRequestMaxBytes & gt; oraz<partialRequestMaxCells & gt;

  • [ ** <partialRequestMaxBytes > ] (# partialrequestmaxbytes- and- partialrequestmaxcells) I... <partialRequestMaxCells > ** ] (# partialrequestmaxbytes- and- partialrequestmaxcells) są rzadko używane znaczniki optyczne w obrębie<erddapDatasets > tag indatasets.xml. W miarę możliwości (i to nie zawsze jest możliwe) ,ERDDAP™łamie duże żądania danych na kawałki, aby zachować pamięć.

Z 32 bitamiJava, w uproszczeniu, maksymalna liczba jednoczesnej duża żądania jest około 3 / 4 dostępnej pamięci (wartość -Xmx przekazana Tomcat) podzielony przez rozmiar kawałka (np. 1200 MB / 100 MB = > 12 wniosków) . Inne rzeczy wymagają pamięci, więc rzeczywista liczba wniosków będzie mniejsza. W praktyce chunking nie zawsze jest możliwy. Więc jeden ogromny lub kilka bardzo dużych jednocześnie niechudych próśb może spowodować problemy na 32 bitJava.

Z 64 bitamiJava, wartość -Xmx może być znacznie większa. Pamięć jest więc znacznie mniej prawdopodobna.

Możesz nadpisać domyślny rozmiar kawałka, definiując te znaczniki wdatasets.xml (o różnych wartościach niż pokazane tutaj) : W przypadku sieci:<partialRequestMaxBytes > 100000000</ partialRequestMaxBytes > Dla tabel:<partialRequestMaxCells > 1000000</ partialRequestMaxCells >

partialRequestMaxBytes jest preferowaną maksymalną liczbą bajtów dla częściowego żądania danych sieciowych (część całkowitego wniosku) . wartość domyślna = 100000000 (10 ^ 8) . Większe rozmiary niekoniecznie są lepsze. (i nie przejść ponad 500 MB, ponieważ jest to domyślny limit THREDDS dlaDAPodpowiedzi) . Ale większe rozmiary mogą wymagać mniej dostępu ton plików (Pomyśl oERDdane satelitarne z każdym punktem czasowym w oddzielnym pliku - lepiej uzyskać więcej danych z każdego pliku w każdym częściowym wniosku) .

partialRequestMaxCells jest preferowaną maksymalną liczbą komórek (nRows\ * nColumns w tabeli danych) dla częściowego wniosku o wydanie danych dotyczących tabeli (część całkowitego wniosku) . Domyślnie = 100000. Większe rozmiary niekoniecznie są lepsze. Powodują one dłuższe czekanie na początkową partię danych ze źródła.

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, zostały określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<requestBlacklist & gt;

  • [ ** <requestBlacklist > ** ] (# requestblacklist) jest znacznikiem optycznymw obrębie<erddapDatasets > tag indatasets.xmlktóry zawiera oddzieloną od commaa listę numerycznych adresów IP, które będą na czarnej liście. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.
    • Można to wykorzystać do odparciaOdmowa ataku służby, zbyt gorliwyrobot sieciowylub jakiegokolwiek innego rodzaju kłopotliwego użytkownika.
    • Kłopotliwy użytkownik... JeśliERDDAP™spowalnia czołganie się lub zamraża / zatrzymuje się, przyczyną jest często kłopotliwy użytkownik, który uruchamia więcej niż jeden skrypt na raz i / lub co duża liczba bardzo dużych, niezwykle nieefektywnych, lub niepoprawnych żądań, lub jednocześnie wniosków. Zajrzyj.log.txtaby sprawdzić, czy tak jest i znaleźć numeryczny adres IP kłopotliwego użytkownika. Jeśli to jest problem, powinieneś prawdopodobnie czarną listę tego użytkownika.

KiedyERDDAP™otrzymuje żądanie z czarnego adresu IP, zwróci błąd HTTP 403: Zakazane. towarzyszący wiadomość o błędzie tekstowym zachęca użytkownika do wysyłania wiadomości e-mail,ERDDAPAdministrator, aby rozwiązać problemy. Jeśli mają czas na przeczytanie komunikatu błędu (wielu najwyraźniej nie) i skontaktować się z tobą, można wtedy pracować z nimi, aby uruchomić tylko jeden skrypt na raz, zrobić bardziej efektywne żądania, naprawić problemy w ich skrypcie (na przykład żądanie danych z zdalnego zbioru danych, które nie mogą odpowiedzieć przed upływem czasu) lub cokolwiek innego było źródłem kłopotów.

Użytkownicy są często po prostu nieświadomi, że ich wnioski są kłopotliwe. Często są nieświadomi błędów, rażącej nieefektywności lub innych problemów ze swoimi skryptami. Często tak myślą, ponieważERDDAP™oferuje dane za darmo, że mogą poprosić o tyle danych, ile chcą, np. poprzez uruchomienie wielu skryptów lub za pomocą wielu wątków jednocześnie.

  • Możesz im wyjaśnić, że każdyERDDAP™, teraz ważne jak duże i potężne, ma ograniczone zasoby (Czas procesora, dysk twardy I / O, przepustowość sieci itp.) i nie jest sprawiedliwe, jeśli jeden użytkownik żąda danych w sposób, który wytłumi innych użytkowników lub przeciążeniaERDDAP.
  • Gdy użytkownik wie, jak złożyć 2 jednoczesne wnioski, często nie widzą powodu, aby nie złożyć 5, 10 lub 20 jednoczesnych wniosków, ponieważ dodatkowe wnioski nic ich nie kosztuje. To jak asymetryczna wojna: tutaj broń ofensywna ma ogromną przewagę (koszt zerowy) nad bronią obronną (instalacji skończonej o rzeczywistych kosztach) .
  • Wskaż im, że maleją zyski z składania coraz większej liczby wniosków jednocześnie; dodatkowe wnioski po prostu dalej blokują żądania innych użytkowników; nie dają one ogromnej poprawy dla nich.
  • Przypomnij im, że są inni użytkownicy (zarówno przypadkowych użytkowników, jak i innych użytkowników obsługujących skrypty) Więc to nie w porządku z ich strony.ERDDAPZasoby.
  • Należy zwrócić uwagę, że giganci technologiczni skłonili użytkowników do oczekiwania nieskończonych zasobów z usług internetowych. Podczas gdy są sposoby, aby ustawićsieci / klastry / federacjeERDDAPsdoERDDAP™system z większą ilością zasobów, większośćERDDAP™administratorzy nie mają pieniędzy ani siły roboczej, by stworzyć takie systemy, a taki system nadal będzie skończony. WERDna przykład, jest jedna osoba (ja) pisanieERDDAP™2ERDDAPs (z pomocą mojego szefa) , i zarządzanie kilkoma źródłami danych, wszystkie z rocznym budżetem sprzętu $0 (polegamy na okazjonalnych grantach, aby zapłacić za sprzęt) . To nie jest Google, Facebook, Amazon, itd. 100 inżynierów i miliony dolarów przychodów do recyklingu w coraz większych systemach. I nie możemy po prostu przenieść naszychERDDAP™na przykład Amazon AWS, ponieważ koszty przechowywania danych są duże, a opłaty za emisję danych są duże i zmienne, podczas gdy nasz budżet na usługi zewnętrzne jest stały 0 dolarów.
  • Moja prośba do użytkowników jest: dla nieczułych na czas wniosków (który jest zdecydowanie najczęstszym przypadkiem) Ich system powinien składać tylko jedną prośbę na raz. Jeżeli wnioski są wrażliwe na czas (np. wiele .pngs na stronie internetowej, wiele płytek dlaWMSklient itp.) , może 4 jednoczesne wnioski powinny być max (i tylko na bardzo krótki czas) .
  • Jeśli wyjaśnisz sytuację użytkownikowi, większość użytkowników zrozumie i będzie skłonna dokonać niezbędnych zmian, dzięki czemu można usunąć ich adres IP z czarnej listy.  
  • Aby zaczarować użytkownika, dodaj ich numeryczny adres IP do oddzielonej od comma listy adresów IP w<requestBlacklist > w Twoimdatasets.xmlplik. Aby znaleźć kłopotliwy adres IP użytkownika, zobacz wERDDAP™ bigParentDirectory / logs / log.txt file ( bigParentDirectory jest określony wsetup.xml) sprawdzić, czy tak jest i znaleźć adres IP tego użytkownika. Adres IP dla każdego żądania jest wymieniony na liniach zaczynających się od "& # 123; & # 123; & # 123; & # 123; #" i jest 4 liczbami oddzielonymi przez okresy, na przykład, 123.45.67.8. Poszukiwanie "ERROR" pomoże Ci znaleźć problemy, takie jak nieprawidłowe żądania.
  • Możesz również zastąpić ostatni numer w adresie IP\(na przykład, 202.109.200.\) zablokować zakres adresów IP, 0- 255.
  • Możesz również zastąpić ostatnie 2 numery w adresie IP\.\ (na przykład, 121.204.\.\) aby zablokować szerszy zakres adresów IP, 0-255.0-255.
  • Na przykład:
    <requestBlacklist>98.76.54.321, 202.109.200.\\*, 121.204.\\*.\\*</requestBlacklist>
  • Nie musisz zaczynać od nowa.ERDDAP™dla zmian<requestBlacklist > do wejścia w życie. Zmiany zostaną wykryte następnym razemERDDAP™sprawdza, czy jakiekolwiek zestawy danych muszą być ponownie załadowane. Lub, można przyspieszyć proces odwiedzającsetDataset URL flagidla dowolnego zbioru danych.
  • TwójERDDAP™raport dzienny zawiera wykaz / zestawienie najbardziej aktywnych zgłoszeń dopuszczonych i zablokowanych.
  • Jeśli chcesz dowiedzieć się, jaka domena / instytucja jest powiązana z numerycznym adresem IP, możesz użyć darmowej, odwrotnej usługi internetowej DNS jak https://network-tools.com/ .
  • Mogą być czasy, kiedy sensowne jest blokowanie niektórych użytkowników na wyższym poziomie, na przykład złośliwych użytkowników. Na przykład, można zablokować ich dostęp do wszystkiego na serwerze, nie tylkoERDDAP. W Linuksie jedną z takich metod jest użycieiptables. Na przykład, można dodać regułę, która zablokuje wszystko pochodzące z 198.51.100.0 z polecenia iptables I INPUT -s 198.51.100.0 - j DROP

<slowDownTroubleMillis & gt;

  • [ ** <slowDownTroubleMillis > ** ] (# slowdown troublemillis) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóra zawiera liczbę całkowitą określającą liczbę milisekund (domyślny = 1000) wstrzymanie odpowiedzi na wszystkie nieudane żądania, np. nieznany zestaw danych, żądanie zbyt duże, użytkownik na czarnej liście. Np.
    <slowDownTroubleMillis>2000</slowDownTroubleMillis>

Jeśli skrypt składa jeden wniosek zaraz po drugim, to może szybko złożyć jeden zły wniosek po drugim. Z tym ustawieniem, można spowolnić upadający skrypt takERDDAP™nie jest zalany złymi życzeniami. Jeśli człowiek złoży złą prośbę, nie zauważą nawet tego opóźnienia. Zalecenia:

  • Jeśli problemem jest rozproszone zaprzeczenie usługi (DOS) atak od 100 + atakujący, ustawić to na mniejszą liczbę (100?) . Uwolnienie ich na zbyt długo prowadzi do zbyt wielu aktywnych wątków.
  • Jeśli problem jest z 1-10 źródeł, ustawić to na 1000 ms (domyślny) , ale większa liczba (jak 10000) jest również rozsądne. To ich spowalnia, więc marnują mniej zasobów sieciowych. Ponadto, 1000 ms lub więcej nie będzie denerwować użytkowników ludzi, którzy składają złą prośbę.

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.  

<subscriptionEmailBlacklist & gt;

  • [ ** <subskrypcja EmailBlacklist > ** ] (# subscriptionemailblacklist) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóry zawiera oddzieloną od comma- listę adresów e-mail, które są natychmiast na czarnej liście zsystem subskrypcji, na przykład
    <subscriptionEmailBlacklist>bob@badguy.com, john@badguy.com</subscriptionEmailBlacklist>  

To system nieczuły. Jeśli adres e-mail zostanie dodany do tej listy, jeśli ten adres e-mail ma subskrypcje, subskrypcje zostaną anulowane. Jeśli adres e-mail na liście spróbuje subskrybować, wniosek zostanie odrzucony. Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.  

Tekst standardowy

  • Tekst standardowy -- Istnieje kilka znaczników optycznych (rzadko są stosowane) w obrębie<erddapDatasets > tag indatasets.xmlaby określić tekst, który pojawia się w różnych miejscach wERDDAP. Jeśli chcesz zmienić domyślny tekst, skopiuj istniejącą wartość z znacznika tej samej nazwy w tomcat / webapps / erddap / WEB- INF / classes / gov / noaa / pfel / erddap / utili.messages.xml dodatasets.xml, a następnie modyfikować zawartość. Korzyść z posiadania tych wdatasets.xmljest to, że można określić nowe wartości w każdej chwili, nawet gdyERDDAP™Ucieka. Wszelkie zmiany wartości tych znaczników będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. Nazwy znaczników opisują ich cel, ale zobacz domyślną zawartość w messages.xml, aby uzyskać głębsze zrozumienie.

    • <Standard License >

    • <Norma Kontakt >

    • <StandardDataLicenses >

    • <Standard DisandisererOfEndorsement >

    • <Standard DisconsiderarOfExternalLinks >

    • <Standard GeneralDisclaimer >

    • <standard Polityka priorytetowa >

    • <startHeadHtml5 >

    • <startBodyHtml5 > jest dobrym znacznikiem do zmiany w celu dostosowania wyglądu górnej części każdej strony w TwoimERDDAP. W szczególności, można użyć tego, aby łatwo dodać tymczasową wiadomość naERDDAP™strona główna (np. "Sprawdź nowy zestaw danych JPL MUR SST v4.1"... lub "TenERDDAP™będzie offline do konserwacji 2019- 05- 08T17: 00: 00 PDT przez 2019- 05- 08T20: 00: 00 PDT ".) . Jeden dziwak z wkładaniem tego znacznikadatasets.xmljest: po ponownym uruchomieniuERDDAP, pierwszy wniosekERDDAP™zwróci domyślny start BodyHtml5 HTML, ale każdy kolejny wniosek będzie używał HTML startBodyHtml5 określonego wdatasets.xml.

    • <Krótki opis Html > jest dobrym znacznikiem do zmiany w celu dostosowania opisuERDDAP. Zauważ, że możesz łatwo to zmienić, aby dodać tymczasową wiadomość na stronie głównej (np. "toERDDAP™będzie offline do konserwacji 2019- 05- 08T17: 00: 00 PDT przez 2019- 05- 08T20: 00: 00 PDT ".) .

    • <endBodyHtml5 >

PrzedERDDAP™v2.00, zostały określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<nietypowe Aktywność & gt;

  • [ ** <unusualActivity > ** ] (# unusualactivity) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlw celu określenia maksymalnej liczby wniosków pomiędzy dwoma operacjami LoadDatasets, które uważa się za normalne (domyślny = 10000) . Jeśli liczba ta zostanie przekroczona, e-mail zostanie wysłany do emailEverythingTo (jak określono w setup.xml) . Np.
    <unusualActivity>10000</unusualActivity>  

Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera. PrzedERDDAP™v2.00, to zostało określone w setup.xml, który jest nadal dozwolony, ale zniechęcony.  

<updateMaxEvents & gt;

  • [ ** <updateMaxEvents > ** ] (# updatemaxevents) jest rzadko używanym znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlokreślić maksymalną liczbę zdarzeń zmiany pliku (domyślny = 10) Który będzie obsługiwany przez<updateEveryNMillis >] (# updateeverynmillis) system przed przełączeniem na przeładowanie zbioru danych. Na przykład:
    <updateMaxEvents>10</updateMaxEvents>  

System updateEveryNMillis jest przeznaczony do bardzo szybkiego działania tuż przed przetworzeniem wniosku użytkownika. Jeśli istnieje wiele zdarzeń zmiany pliku, to prawdopodobnie nie może działać szybko, więc zamiast tego wymaga przeładowania zbioru danych. Jeśli u pacjenta występujeERDDAP™zajmuje się zbiorami danych, które muszą być aktualizowane nawet w przypadku zmian w dużej liczbie plików danych, można to ustawić na większą liczbę (100?) .

<użytkownik & gt;

  • [ ** <użytkownik > ** ] (# user) jest znacznikiem optycznym w obrębie<erddapDatasets > tag indatasets.xmlktóry identyfikuje nazwę użytkownika, hasło (jeżeli uwierzytelnienie = niestandardowe) oraz role (Lista oddzielona od comma-) . Korzystanie z nazwy użytkownika i hasła różni się nieznacznie w zależności od wartości [<uwierzytelnienie >] (/ docs / server- admin / additional- information # authentication) wERDDAPplik setup.xml.
    • To częśćERDDAPjestsystem bezpieczeństwaza ograniczenie dostępu do niektórych zbiorów danych do niektórych użytkowników.
    • Rozdziel<użytkownik > tag dla każdego użytkownika. Opcjonalnie, jeśli uwierzytelnienie = oauth2, można skonfigurować dwa<użytkownik > tagi dla każdego użytkownika: jeden dla gdy użytkownik loguje się przez Google, jeden dla użytkownika loguje się przez Orcid, prawdopodobnie z tych samych ról.
    • Jeśli nie ma<użytkownik > tag dla klienta, s / he będzie mógł uzyskać dostęp tylko do publicznych zbiorów danych, tj. zbiorów danych, które nie mają [<accessibleTo >] (# accessibleto) tag.
    • nazwa użytkownika Dla uwierzytelniania = niestandardowe, nazwa użytkownika jest zazwyczaj kombinacją liter, cyfr, podkreśleń i okresów. Dla uwierzytelniania = email, nazwa użytkownika jest adresem e-mail użytkownika. To może być każdy adres e-mail. Dla uwierzytelniania = google, nazwa użytkownika jest pełnym adresem e-mail użytkownika. Obejmuje to konta zarządzane przez Google-@noaa.govrachunki. Dla uwierzytelniania = orcid, nazwa użytkownika jest numerem konta użytkownika Orcid (z kreskami) . Dla uwierzytelniania = oauth2, nazwa użytkownika jest pełnym adresem e-mail użytkownika lub numerem konta użytkownika Orcid (z kreskami) .
    • hasło Dla uwierzytelniania = e-mail, google, orcid lub oauth2, nie określa atrybutu hasła. Dla uwierzytelniania = niestandardowe, należy podać atrybut hasła dla każdego użytkownika.
      • Hasła wprowadzone przez użytkowników są delikatne i muszą mieć 8 lub więcej znaków, więc są trudniejsze do złamania. Obecnie nawet 8 znaków można szybko i niedrogo złamać za pomocą brutalnej siły przy użyciu klastra komputerów na AWS.ERDDAP™Wymusza minimum 8 znaków tylko wtedy, gdy użytkownik próbuje się zalogować (nie wtedy, gdy<użytkownik > tag jest przetwarzany, ponieważ ten kod widzi tylko hash digest hasła, a nie jawne hasło tekstowe).
      • setup.xml<passwordEncoding > określa sposób przechowywania haseł w<użytkownik > tags indatasets.xml. W celu zwiększenia bezpieczeństwa, opcje są następujące:
        • MD5 (Nie używaj tego!) -- dla atrybutu hasłem, należy podać DD5 hash digest hasła użytkownika.
        • UEPMD5 (Nie używaj tego!) -- dla atrybutu hasłem, należy podać wartość DD5 nazwa użytkownika :ERDDAP: hasło . Nazwa użytkownika i "ERDDAP"są używane dosól wartość haszu, co utrudnia odkodowanie.
        • SHA256 (niezalecane) -- dla atrybutu haseł, należy podać SHA- 256 hash digest hasła użytkownika.
        • UEPSHA256 (domyślnie, zalecane hasło Kodowanie. Ale znacznie lepiej: użyj opcji uwierzytelniania google, orchidei lub oauth2.) -- dla atrybutu hasłem, należy podać SHA- 256 nazwa użytkownika :ERDDAP: hasło . Nazwa użytkownika i "ERDDAP"są używane do solenia wartości haszu, co utrudnia odkodowanie.
      • W systemie Windows można wygenerować wartości digest hasła MD5 poprzez pobranie programu MD5 (takie jakMD5) i używanie (na przykład) : dd5-djsmith:ERDDAP: actualPassword
      • Na Linuksie / Uniksie możesz wygenerować wartości DD5, używając programu built- in md5sum (na przykład) : echo -n "jsmith:ERDDAP: actualPassword "|dd5sum
      • Przechowywane hasła tekstowe są wrażliwe na przypadki. Przechowywane formularze haseł MD5 i UEPMD5 nie są wrażliwe na przypadki.
      • Na przykład (przy użyciu UEPMD5) , jeśli nazwa użytkownika = "jsmith" i hasło = "myHasło",<użytkownik > tag jest:
            <user username="jsmith"  
password="57AB7ACCEB545E0BEB46C4C75CEC3C30"
roles="JASmith, JASmithGroup" />

gdzie zapisane hasło zostało wygenerowane z dd5-djsmith:ERDDAP: myHasło

  • role to oddzielona comma- lista ról, dla których użytkownik jest upoważniony. Każdy<zbiór danych > może mieć [<accessibleTo >] (# accessibleto) tag, który wymienia role, które są dopuszczone do dostępu do tego zbioru danych. Dla danego użytkownika i danego zbioru danych, jeżeli jedna z ról na liście ról użytkownika pasuje do jednej z ról na liście zbiorów danych<accessibleTo > role, wtedy użytkownik jest upoważniony do dostępu do tego zbioru danych.

Każdy użytkownik, który loguje się automatycznie otrzymuje rolę\[anyoneLogged W\], czy istnieje<użytkownik > tag dla nich wdatasets.xmlAlbo i nie. Więc jeśli dany zbiór danych ma

            <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

następnie każdy użytkownik, który jest zalogowany będzie uprawniony do dostępu do tego zbioru danych, nawet jeśli nie ma<użytkownik > tag dla nich wdatasets.xml.

  • Wszelkie zmiany wartości tego znacznika będą skuteczne następnym razemERDDAP™odczytdatasets.xml, w tym w odpowiedzi na zbiór danychbandera.  

<pathRegex & gt;

  • [ ** <pathRegex > ** ] (# pathregex) pozwala określić wyrażenie regularne, które ogranicza które ścieżki (które podkatalogi) zostaną włączone do zbioru danych. Domyślnie jest.\ *, który pasuje do wszystkich ścieżek. Jest to rzadko używane, rzadko potrzebne, OPTIONAL tag dlaEDDGridZestawy danych FromFiles, EDDTableFromFiles oraz kilka innych typów zbiorów danych. Jednakże, kiedy tego potrzebujesz, naprawdę tego potrzebujesz.

Aby to zadziałało, musisz być naprawdę dobry w wyrażeniach regularnych. Widzisz to?dokumentacja regexorazregex tutorial. W szczególności, musisz wiedzieć o grupach przechwytywania (coś wewnątrz nawiasów) oraz "lub" symbol "|". Razem pozwalają określić dowolną liczbę opcji, np.: (option1|opcja2|opcja3) . Ponadto, każda z opcji może być niczym, np., (|opcja2|opcja3) . Ponadto należy wiedzieć, że grupy wychwytywania mogą być zagnieżdżone, tzn. każda opcja w grupie wychwytywania może zawierać inną grupę wychwytywania, np.: (|opcja2 (|opcja2 b|option2c) |opcja3) co mówi, że po opcji2 nie może być nic, option2b, option2c. Dla pathRegexes każda opcja będzie jedną nazwą folderu, po której następuje a /, np. bar /.

Trudna część pathRegex jest: KiedyERDDAP™rekursywnie schodzi z drzewa katalogów, pathRegex musi zaakceptować wszystkie ścieżki napotkane w drodze do katalogów z danymi. Regex z zagnieżdżonymi grupami to dobry sposób, by sobie z tym poradzić.

Przykład: Załóżmy, że mamy następującą strukturę katalogową:

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

i określony fileDirectory jest / foo / bar /, i chcemy po prostu.ncpliki w D\[0- 9\]{4} / a / podkatalogi. Rozwiązaniem jest ustawienie pathRegex na / foo / bar / (|D\[0- 9\]{4} / (|a /) )
To mówi: Ścieżka musi zacząć się od / foo / bar / Po którym może nastąpić nic lub D\[0- 9\]{4} / Po którym może nastąpić nic lub

Tak, pathRegex może być niezwykle trudny do sformułowania. Jeśli utkniesz, zapytaj programistę. (Najbliższa rzecz w prawdziwym świecie do czarnoksiężnika mówiącego zaklęcia?) lub wysłać e-mail do Chrisa. John w Noah.

<zestaw danych & gt;

  • [ ** <zbiór danych > ** ] (# dataset) jest opcjonalny (ale zawsze używane) tag wewnątrz<erddapDatasets > tag indatasets.xmlże (jeśli zawierają wszystkie informacje między<zbiór danych > oraz</ dataset >) całkowicie opisuje jeden zestaw danych. Na przykład:
    <dataset type="EDDGridFromDap" datasetID="erdPHssta8day" active="true"> ... </dataset>  

MOŻNA być wiele znaczników zbioru danych w Twoimdatasets.xmlplik. Trzy atrybuty MOŻE pojawić się w<dataset > tag:  

  • typ = " a Rodzaj " jest atrybutem WYMAGANYM w obrębie<dataset > tag indatasets.xmlktóry identyfikuje typ zbioru danych (na przykład, czy jest toEDDGrid/ gridded or EDDTable / tabular dataset) oraz źródło danych (na przykład baza danych, pliki lub pilotOPeNDAPserwer) . Patrz Lista typów danych .  

zbiór danych Id

  • datasetID= " aDatasetID " jest atrybutem WYMAGANYM w obrębie<dataset > tag, który przypisuje krótki (zazwyczaj<15 znaków), unikalny, identyfikujący nazwę zbioru danych.
    • WdatasetIDMusi być list (A- Z, a- z) po której następuje liczba A- Z, a- z, 0- 9 i\ _ (ale najlepiej jeśli<32 znaki łącznie).
    • Zestaw danych Identyfikatory są wrażliwe, ale nie tworzą dwóchdatasetIDs, które różnią się tylko literami górnymi / małymi. To spowoduje problemy na komputerach Windows (Twój i / lub komputer użytkownika) .
    • Najlepsze praktyki: Zalecamy użyciewielbłąd Przypadek.
    • Najlepsze praktyki: Zalecamy, aby pierwsza część była skrótem lub skrótem nazwy instytucji źródłowej, a druga skrótem nazwy zbioru danych. Gdy to możliwe, tworzymy nazwę, która odzwierciedla nazwę źródła dla zbioru danych. Na przykład, użyliśmydatasetID= "erdPHssta8day "dla zbioru danych zNOAA NMFS SWFSCDział Badań nad Środowiskiem (ERD) która jest wyznaczona przez źródło jako satelita / PH /ssta / 8 dnia.
    • Jeśli zmienisz nazwę zbioru danych, stary zbiór danych (ze starą nazwą) będzie nadal żyć wERDDAP. Jest to zbiór danych "sierot", ponieważ specyfikacja dla niego wdatasets.xmlJuż go nie ma. Należy się tym zająć:
      1. DlaERDDAP™V2.19 i później, nie musisz nic robić.ERDDAP™automatycznie usunie te zbiory danych osieroconych.
      2. DlaERDDAP™v2.18 i wcześniej należy zrobić coś, aby usunąć zbiory danych osieroconych: Dodać aktywny = "false" dataset, np.,
                <dataset type="EDDTableFromNcFiles" datasetID="*theOldName*" active="false" />  

Po następnym dużym ładunku Zestawy danych, Możesz usunąć ten znacznik po tym, jak stary zbiór danych jest nieaktywny.  

aktywny

  • aktywny = " boolean " jest atrybutem optycznym w obrębie<dataset > tag indatasets.xmlktóry wskazuje, czy zbiór danych jest aktywny (kwalifikuje się do wykorzystania wERDDAP) Albo i nie.
    • Ważne wartości są prawdziwe (domyślny) i fałszywe.
    • Ponieważ wartość domyślna jest prawdziwa, nie musisz używać tego atrybutu dopóki nie chcesz tymczasowo lub trwale usunąć tego zbioru danych zERDDAP.
    • Jeśli po prostu usunąć aktywny = "true" dataset zdatasets.xml, zbiór danych będzie nadal aktywny wERDDAP™ale nigdy nie będzie uaktualniony. Taki zbiór danych będzie "sierotą" i będzie wymieniony jako taki w statusie. html strona internetowa tuż poniżej listy zbiorów danych, które nie udało się załadować.
    • Jeśli ustawisz active = "false",ERDDAP™dezaktywuje zbiór danych następnym razem, gdy spróbuje zaktualizować zbiór danych. Kiedy to robisz,ERDDAP™nie wyrzuca żadnych informacji, które mógł przechowywać o zbiorze danych i na pewno nie robi nic z prawdziwymi danymi.
    • W celu usunięcia zbioru danych zERDDAP™, seeWymuś usunięcie zbioru danych.  

** Kilka tagów może pojawić się między<zbiór danych > oraz</ dataset > tagi. **
Istnieją pewne różnice, w których znaczniki są dozwolone, przez które rodzaje zbiorów danych. Zob. dokumentacja dotycząca konkretnegorodzaj zbioru danychszczegóły.

<dostępne Do & gt;

  • [ ** <dostępne Do > ** ] (# accessibleto) jest znacznikiem optycznym w obrębie<dataset > tag, który określa oddzieloną od comma- listęrolektóre mają dostęp do tego zbioru danych. Na przykład:
    <accessibleTo>RASmith, NEJones</accessibleTo>  
    • To częśćERDDAPjestsystem bezpieczeństwaza ograniczenie dostępu do niektórych zbiorów danych do niektórych użytkowników.
    • Jeśli ten znacznik nie jest obecny, wszyscy użytkownicy (nawet jeśli się nie zalogowali) będzie miał dostęp do tego zbioru danych.
    • Jeśli ten znacznik jest obecny, ten zestaw danych będzie widoczny i dostępny tylko dla użytkowników, którzy mają jedną z określonych ról. Ten zbiór danych nie będzie widoczny dla użytkowników, którzy nie są zalogowani.
    • Każdy użytkownik, który loguje się automatycznie otrzymuje rolę\[anyoneLogged W\], czy istnieje<użytkownik > tag dla nich wdatasets.xmlAlbo i nie. Więc jeśli dany zbiór danych ma
        <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

następnie każdy użytkownik, który jest zalogowany będzie uprawniony do dostępu do tego zbioru danych, nawet jeśli nie ma<użytkownik > tag dla nich wdatasets.xml.  

<graphsAccessibleTo & gt;

  • [ ** <graphsAccessibleTo > ** ] (# grapsaccessibleto) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlktóra określa, czy grafika i metadane dla zbioru danych są dostępne publicznie. Oferuje sposób częściowego obejścia zbioru danych [<accessibleTo >] (# accessibleto) ustawienie. Dozwolone wartości to:
    • auto... Wartość ta (lub brak<graphsAccessibleTo > tag dla zbioru danych) sprawia, że dostęp do wykresów i metadanych z zbioru danych naśladuje zbiór danych<accessibleTo > setting. Więc jeśli zbiór danych jest prywatny, jego wykresy i metadane będą prywatne. A jeśli zbiór danych jest publiczny, jego wykresy i metadane będą publiczne.
    • publiczne -- To ustawienie sprawia, że wykresy i metadane zbioru danych są dostępne dla każdego, nawet użytkowników, którzy nie są zalogowani, nawet jeśli zbiór danych jest inaczej prywatny, ponieważ ma<accessibleTo > tag.  

<dostępne ViaFiles & gt;

Jeśli wartość jest prawdziwa,ERDDAP™sprawi, że użytkownicy będą mogli przeglądać i pobierać pliki źródłowe zbioru danych poprzezERDDAPjest"files"system. Patrz"files"systemdokumentacjawięcej informacji.

Wartość domyślna<accessibleViaFiles > pochodzi z<defaultAccessibleViaFiles > wsetup.xml. Ma domyślną wartość false, ale zalecamy dodanie tego znacznika do setup.xml z wartością true.

Zalecenie... Zalecamy udostępnienie wszystkich odpowiednich zbiorów danych przez system plików poprzez ustawienie<defaultAccessibleViaFiles > do true in setup.xml ponieważ istnieje grupa użytkowników, dla których jest to preferowany sposób uzyskania danych. Między innymi,"files"system ułatwia użytkownikom sprawdzenie, które pliki są dostępne i kiedy ostatnio się zmieniały, co ułatwia użytkownikowi utrzymanie własnej kopii całego zbioru danych. Jeśli na ogół nie chcesz, aby dane były dostępne przez system plików, ustaw<defaultAccessibleViaFiles > do false. W każdym przypadku należy po prostu użyć<accessibleViaFiles > dla kilku zbiorów danych, które są wyjątkami od ogólnej polityki określonej przez<defaultAccessibleViaFiles > (na przykład, gdy zbiór danych wykorzystuje.ncmlpliki, które nie są naprawdę przydatne dla użytkowników) .  

<dostępne ViaWMS& gt;

  • [ ** <dostępne ViaWMS> ** ] (# accessibleviawms) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmldla wszystkichEDDGridPodklasy. Może mieć wartość prawdy. (domyślny) albo fałszywe. Na przykład:
    <accessibleViaWMS>true</accessibleViaWMS>  

Jeśli wartość jest fałszywa,ERDDAPjestWMSserwer nie będzie dostępny dla tego zbioru danych. Jest to powszechnie stosowane w przypadku zbiorów danych o pewnych wartościach długości geograficznej powyżej 180 (który technicznie jest nieważny dlaWMSusługi) , i dla których oferujesz również wariant zbioru danych o wartościach długości całkowitej w zakresie -180 do 180 przezEDDGridLonPM180. Jeśli wartość jest prawdziwa,ERDDAP™spróbuje udostępnić zbiór danych za pośrednictwemERDDAPjestWMSserwer. Ale jeśli zestaw danych jest całkowicie nieodpowiedni dlaWMS (np. brak danych dotyczących długości lub szerokości geograficznej) , wtedy zbiór danych nie będzie dostępny poprzezERDDAPjestWMSserwer, niezależnie od tego ustawienia.  

<dodaj Zmienne Gdzie & gt;

  • [<addVarieblesWhere >] (# addvariableswhere) jest znacznikiem optycznym w obrębie<dataset > tag dla wszystkich zbiorów danych EDDTable.

Wnioski do dowolnego zbioru danych EDDTable mogą zawierać & dodać Zmienne Gdzie (" atrybut Nazwa "," atrybut Wartość ") , który mówiERDDAP™aby dodać wszystkie zmienne w zbiorze danych AssioneName = AssioneValue do listy wymaganych zmiennych. Na przykład, jeśli użytkownik dodaje & dodać Zmienne Gdzie ("ioos\_category"," Wind ") do zapytania,ERDDAPbędzie dodać wszystkie zmienne w zbiorze danych, które mająioos\_category= Atrybut wiatru do listy wymaganych zmiennych (na przykład, windSpeed, windDirection, windGustSpeed) . atrybut Nazwa oraz atrybut Wartość są wrażliwe na przypadek.

Wdatasets.xml, jeśli fragment dataset.xml dla zbioru danych ma

<addVariablesWhere>*attributeNamesCSV*<addVariablesWhere>  

na przykład:

<addVariablesWhere>ioos\\_category,units<addVariablesWhere>  

Formularz dostępu do danych (Strona internetowa .html) dla zbioru danych będzie zawierać widget (dla każdego atrybutu Nazwa na liście oddzielonej od comma-) zaraz poniżej listy zmiennych, które pozwalają użytkownikom określić wartość atrybutu. Jeśli użytkownik wybierze wartość atrybutu dla jednej lub kilku nazw atrybutów, zostaną one dodane do żądania poprzez & dodać Zmienne Gdzie (" atrybut Nazwa "," atrybut Wartość ") . Tak więc, ten znacznik wdatasets.xmlpozwala określić listę nazw atrybutów, które pojawią się w formularzu dostępu do danych dla tego zbioru danych i ułatwia użytkownikom dodawanie & addVariables W przypadku gdy działa na wniosek. W AssioneNamesCSV Lista jest delikatna.

<altitudeMetersPerSourceUnit & gt;

  • [ ** <altitudeMetersPerSourceUnit > ** ] (# altitude demeterspersourceunit) jest znacznikiem optycznym w obrębie<dataset > tag w zbiorach danych. xxml dla EDDTableFromSOSzbiory danych (Tylko!) która określa liczbę pomnożoną przez wysokość źródłową lub wartości głębokości w celu przekształcenia ich w wartości wysokości (w metrach nad poziomem morza) . Na przykład:
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>  

Ten znacznik MUSI być stosowany, jeśli wartość osi pionowej zbioru danych nie są licznikami, dodatnie = w górę. W przeciwnym razie jest to opcja optyczna, ponieważ wartość domyślna wynosi 1. Na przykład:

  • Jeżeli źródło jest już mierzone w metrach nad poziomem morza, należy użyć 1 (lub nie używać tego znacznika, ponieważ 1 jest wartością domyślną) .
  • Jeżeli źródło jest mierzone w metrach poniżej poziomu morza, należy użyć -1.
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>
  • Jeżeli źródło mierzone jest w km nad poziomem morza, należy użyć 0,001.  

<defaultDataQuery & gt;

  • [ ** <defaultDataQuery > ** ] (# defaultdataquery) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlTo mówiERDDAP™używać określonego zapytania (część URL po "?") jeśli plik .html Rodzaj (Formularz dostępu do danych) jest wymagane bez zapytania.
    • Prawdopodobnie rzadko będzie to konieczne.
    • Potrzebujesz kodu XML- encode (nie encode) domyślne zapytania, ponieważ znajdują się w dokumencie XML. Na przykład, i staje się & amp;,<staje się<, > staje się & gt;.
    • Proszę sprawdzić swoją pracę. Łatwo jest popełnić błąd i nie dostać tego, czego się chce.ERDDAP™będzie próbował oczyścić swoje błędy -- ale nie polegać na tym, ponieważ\*jak\*może ulec zmianie.
    • W przypadku zbiorów danych griddap powszechnym zastosowaniem jest określenie innej wartości domyślnej głębokości lub wysokości (na przykład:\[0\]zamiast\[ostatni\]) . W każdym razie należy zawsze wymienić wszystkie zmienne, zawsze używać tych samych wartości wymiarów dla wszystkich zmiennych i prawie zawsze używać\[0\],\[ostatni\]lub\[0: ostatni\]dla wartości wymiarów. Na przykład:
        <defaultDataQuery>u\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\],v\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]</defaultDataQuery>
    • DlatabledapJeśli nie podasz żadnych ograniczeń, żądanie zwróci cały zestaw danych, który może być niepraktycznie duży, w zależności od zestawu danych. Jeśli nie chcesz określić żadnych ograniczeń, zamiast mieć puste<defaultDataQuery > (który jest taki sam jak brak określenia wartości domyślnej DataQuery) , musisz wyraźnie wymienić wszystkie zmienne, które chcesz włączyć do defaultDataQuery.
    • Dlatabledapzbiory danych, najczęściej używane jest do określenia innego domyślnego zakresu czasowego (w stosunku do maks. (czas) , na przykład, & time > = max (czas) -1 dzień, lub względem teraz, na przykład, & czas > =now-1 dzień) . Pamiętaj, że żądanie braku zmiennych danych jest takie samo jak podanie wszystkich zmiennych danych, więc zazwyczaj możesz po prostu podać nowe ograniczenie czasowe. Na przykład:
        <defaultDataQuery>&amp;time&gt;=max(time)-1day</defaultDataQuery>  

lub

    <defaultDataQuery>&amp;time&gt;=now-1day</defaultDataQuery>  

<defaultGraphQuery & gt;

  • [ ** <defaultGraphQuery > ** ] (# defaultgraphquery) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlTo mówiERDDAP™używać określonego zapytania (część URL po "?") jeśli plik .graph Rodzaj (Formularz Make A Graph) jest wymagane bez zapytania.
    • Prawdopodobnie rzadko będzie to konieczne.
    • Potrzebujesz kodu XML- encode (nie encode) domyślne zapytania, ponieważ znajdują się w dokumencie XML. Na przykład, i staje się & amp;,<staje się<, > staje się & gt;.
    • Proszę sprawdzić swoją pracę. Łatwo jest popełnić błąd i nie dostać tego, czego się chce.ERDDAP™będzie próbował oczyścić swoje błędy -- ale nie polegać na tym, ponieważ\*jak\*może ulec zmianie.
    • W przypadku zbiorów danych griddap najpowszechniejszym zastosowaniem jest określenie innej wartości domyślnej głębokości lub wysokości (na przykład:\[0\]zamiast\[ostatni\]) i / lub w celu określenia, że określona zmienna jest graficzna. W każdym razie, będziesz prawie zawsze używać\[0\],\[ostatni\]lub\[0: ostatni\]dla wartości wymiarów. Na przykład:
        <defaultGraphQuery>temp\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]&amp;.draw=surface&amp;.vars=longitude|latitude|temp</defaultGraphQuery>  
    (ale postaw wszystko na jednej linii)
    • DlatabledapZestawy danych, jeśli nie podasz żadnych ograniczeń, to żądanie wyrysuje cały zestaw danych, który może zająć dużo czasu, w zależności od zestawu danych.
    • Dlatabledapzbiory danych, najczęściej używane jest do określenia innego domyślnego zakresu czasowego (w stosunku do maks. (czas) , na przykład, & time > = max (czas) -1 dzień, lub względem teraz, na przykład, & czas > =now-1 dzień) . Pamiętaj, że żądanie braku zmiennych danych jest takie samo jak podanie wszystkich zmiennych danych, więc zazwyczaj możesz po prostu podać nowe ograniczenie czasowe. Na przykład:
        <defaultGraphQuery>&amp;time&gt;=max(time)-1day</defaultGraphQuery>  

lub

    <defaultGraphQuery>&amp;time&gt;=now-1day</defaultGraphQuery>  

<dimensionValuesInMemory & gt;

  • [ ** <wymiar ValuesInMemory > ** ] (# dimensionvalues in memory) (prawda (domyślny) lub false) jest optyczny i rzadko używany znacznik wewnątrz<dataset > tag dla dowolnegoEDDGridzestaw danych, który mówiERDDAP™gdzie zachować wartości źródłowe wymiarów (znany również jakoaxisVariables) :

    • true = w pamięci (który jest szybszy, ale wykorzystuje więcej pamięci)
    • false = na dysku (która jest wolniejsza, ale nie używa pamięci)

Na przykład:

<dimensionValuesInMemory>false</dimensionValuesInMemory>  

Należy używać tego tylko z niedomyślną wartością false jeśliERDDAP™posiada wiele zbiorów danych o bardzo dużych wymiarach (np. miliony wartości, np. wEDDGridZestawy plików FromAudioFiles) orazERDDAPUżywanie pamięci jest zawsze za wysokie. Patrz Pamięć: obecnie przy użyciu linii\[Twoja domena\]/erddap/status.htmldo monitorowaniaERDDAP™wykorzystanie pamięci.  

<fileTableInMemory & gt;

  • [ ** <FileTableInMemory > ** ] (# filetableinmemory) (true or false (domyślny) ) jest znacznikiem optycznym w obrębie<dataset > tag dla dowolnegoEDDGridPliki FromFiles i EDDTable Zestaw danych FromFiles, który mówiERDDAP™gdzie przechowywać tabelę plików (który posiada informacje o każdym pliku danych źródłowych) :

    • true = w pamięci (który jest szybszy, ale wykorzystuje więcej pamięci)
    • false = na dysku (która jest wolniejsza, ale nie używa pamięci)

Na przykład:

<fileTableInMemory>true</fileTableInMemory>  

Jeśli ustawisz to na true dla dowolnego zbioru danych, miej oko na Pamięć: aktualnie przy użyciu linii\[Twoja domena\]/erddap/status.htmlzapewnienie, żeERDDAP™Nadal ma mnóstwo pamięci.  

<fgdcFile & gt;

  • [ ** <fgdcFile > ** ] (# fgdcfile) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlTo mówiERDDAP™korzystanie z wcześniej wytworzonego pliku FGDC zamiastERDDAP™Spróbuj wygenerować plik. Zastosowanie:
    <fgdcFile>*fullFileName*</fgdcFile>  

pełna Nazwa pliku może odnosić się do pliku lokalnego (gdzieś w systemie plików serwera) lub URL zdalnego pliku. Jeśli pełna Nazwa pliku \ = "" lub plik nie zostanie znaleziony, zbiór danych nie będzie miał żadnych metadanych FGDC. Jest to również przydatne, jeśli chcesz zahamować metadane FGDC dla określonego zbioru danych. Albo, można umieścić<fgdcActive > false</ fgdcActive > in setup.xml to tellERDDAP™nie oferować metadanych FGDC dla żadnego zbioru danych.  

<iso19115 Plik & gt;

  • [ ** <iso19115Plik > ** ] (# iso19115file) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlTo mówiERDDAP™używać wcześniej wykonanego pliku ISO 19115 zamiastERDDAP™Spróbuj wygenerować plik. Zastosowanie:
    <iso19115File>*fullFileName*</iso19115File>  
    pełna Nazwa pliku może odnosić się do pliku lokalnego (gdzieś w systemie plików serwera) lub URL zdalnego pliku. Jeśli pełna Nazwa pliku \ = "" lub plik nie zostanie znaleziony, zbiór danych nie będzie miał metadanych ISO 19115. Jest to również przydatne, jeśli chcesz zahamować metadane ISO 19115 dla określonego zbioru danych. Albo, można umieścić<iso19115Active > false</ iso19115Aktywny > w setup.xml powiedziećERDDAP™nie oferować metadanych ISO 19115 dla żadnego zbioru danych.  

<matchAxis NDigits & gt;

  • [ ** <matchAxisNDigits > ** ] (# matchaxisnnumers) jest znacznikiem optycznym w obrębieEDDGrid <dataset > tag forEDDGridzbiory danych stanowiące agregacje, np. agregacje plików. Za każdym razem, gdy zestaw danych jest przeładowany,ERDDAP™sprawdza, czy wartości osi każdego składnika agregacji są takie same. Precyzja badania jest określona przezmatchAxisNDigits, która określa całkowitą liczbę cyfr, które muszą pasować podczas badania wartości osi podwójnej precyzji, 0 - 18 (domyślny) . Podczas badania wartości osi zmiennoprzecinkowej, badanie przeprowadza się za pomocą matchAxisNDigits / 2 cyfry. Wartość 18 lub wyższa mówiEDDGridzrobić dokładny test. Wartość 0 mówiEDDGridnie przeprowadzać żadnych badań, które nie są zalecane, z wyjątkiem opisanych poniżej.

ChociażEDDGridpozwala składnikom agregacji na nieco odmienne wartości osi, tylko jeden zestaw wartości osi jest pokazywany użytkownikowi. Zestaw pochodzi z tego samego składnika, który dostarcza metadane źródłowe zbioru danych. Na przykład:EDDGridZestawy danych FromFiles, które są określone przez<metadataFrom > setting (domyślny = ostatni) .

Używanie matchAxisNDigits\ = 0 jest w większości przypadków mocno zniechęcone, ponieważ wyłącza wszystkie kontrole. Nawet minimalne sprawdzenie jest przydatne, ponieważ zapewnia, że składniki są odpowiednie do agregacji. Wszyscy zakładamy, że wszystkie składniki są odpowiednie, ale nie zawsze tak jest. Jest to zatem ważny test na zdrowie psychiczne. Nawet wartości matchAxisNDigits1, 2, 3 lub 4 są zniechęcane, ponieważ różne wartości osi często wskazują, że składniki zostały utworzone (Przykuty?) w inny sposób, a zatem nie nadają się do agregacji.

Jest jeden przypadek, w którym użycie matchAxisNDigits\ = 0 jest przydatne i zalecane: z agregacją zdalnych plików, np. danych w wiadrach S3. W tym przypadku, jeśli zestaw danych używa cacheFromUrl, cacheSizeGB, matchAxisNDigits\ = 0, iEDDGridSystem plików FromFiles dlaAgregacja poprzez Nazwy plikówWięc...EDDGridnie musi czytać wszystkich zdalnych plików, aby dokonać agregacji. Pozwala to na bardzo szybkie załadowanie zbiorów danych wykonanych z danych w wiadrach S3 (w przeciwieństwie do absurdalnie powoli, jeśliEDDGridmusi pobrać i przeczytać wszystkie pliki) .

<nThreads & gt;

  • Począwszy odERDDAP™wersja 2.00, jeżeli jakakolwiek podklasa plików EDDTableFromFiles lubEDDGridodczytuje dane ze swojego źródła, może odczytać jeden kawałek danych (np. jeden plik źródłowy) w czasie (w jednej nitce) (to jest domyślne) lub więcej niż jeden kawałek danych (np., 2 + pliki źródłowe) w czasie (w 2 lub więcej wątkach) podczas rozpatrywania każdego wniosku.  
    • Zasada Thumba: Dla większości zbiorów danych w większości systemów, użyj nThreads = 1, domyślnie. Jeśli masz potężny komputer (dużo rdzeni procesora, dużo pamięci) , następnie rozważyć ustawienie nThreads na 2, 3, 4 lub wyżej (ale nigdy więcej niż liczba rdzeni procesora w komputerze) dla zbiorów danych, które mogłyby przynieść korzyści:

      • Większość zbiorów danych EDDTableFromFiles skorzysta.
      • Dane, w których coś powoduje opóźnienie zanim część danych może być rzeczywiście przetwarzana, będą korzystne, na przykład:
        • Zestawy danych zzewnętrznie skompresowane (np.,.gz) binarne (np.,.nc) pliki, ponieważERDDAP™musi zdekompresować cały plik zanim zacznie odczytywać plik.
        • Używane zestawy danychcacheSizeGB, ponieważERDDAP™często musi pobrać plik zanim go odczyta.
        • Zestawy danych z plikami danych przechowywanymi w systemie plików równoległych o dużej przepustowości, ponieważ może dostarczyć więcej danych, szybciej, na żądanie. Przykłady równoległych systemów plików to:JBOD,pNFS,GlusterFSAmazon S3 i Google Cloud Storage.  

Ostrzeżenie: Przy użyciu nThreads > 1, miej oko naERDDAPwykorzystanie pamięci, wykorzystanie nici i ogólna reakcja (patrzERDDAPstrona statusu) . Zob. uwagi dotyczące tych kwestii poniżej.  

  • Dla danego zbioru danych, to ustawienie nThreads może pochodzić z różnych miejsc:

    • Jeślidatasets.xmlkawałek na zestaw danych ma<nThreads > tag (w obrębie<dataset > tag, nie jako atrybut globalny) o wartości > = 1, ta wartość nTreads jest używana. Możesz więc podać inną liczbę dla każdego zbioru danych.
    • W przeciwnym razie, jeślidatasets.xmlma<nTableThreads > tag (dla tabeli EDD Zestawy danych FromFiles) lub<nGridThreads > tag (zamiastEDDGridzbiory danych) o wartości > = 1, poza<dataset > tag, że wartość nThreads jest używany.
    • W przeciwnym razie stosuje się 1 nitkę, co jest bezpiecznym wyborem, ponieważ wykorzystuje najmniejszą ilość pamięci.  

DlaoryginałERDDAP™instalacja, używamy <nTableThreads > 6</ nTableThreads > (To potężny serwer.) Trudne żądania zajmują teraz 30% poprzedniego czasu.  

Monitorowanie wykorzystania zasobów

Podczas eksperymentowania z różnymi ustawieniami nThreads (i być może zadawanie trudnych próśbERDDAP) , można monitorować wykorzystanie zasobów komputera:

  • Na makach, użyj Finder: Aplikacje: Narzędzia: Monitor aktywności
  • Na Linuksie użyj góry
  • W systemie Windows 10, użyj Ctrl + Shift + Esc do otwarcia menedżera zadań  
Ostrzeżenie: zmniejszenie odpowiedzi

W izolacji,ERDDAP™będzie spełniać żądanie do zbioru danych z wyższym ustawionym nThreads szybciej niż jeśli nThreads = 1. Ale podczas gdy wniosek ten jest rozpatrywany, inne wnioski innych użytkowników będą nieco zatłoczone i uzyskać wolniejszą odpowiedź. Również, kiedyERDDAP™odpowiada na dane żądanie, inne zasoby obliczeniowe (np. dostęp do dysku, przepustowość sieci) może być ograniczenie, zwłaszcza z wyższych ustawień nTread. Tak więc przy wyższych ustawieniach nThreads ogólna responsibility systemu będzie gorsza, gdy zostanie rozpatrzone wiele wniosków - to może być bardzo irytujące dla użytkowników! Z tego powodu: nigdy nie ustawia nThreads na więcej niż liczba rdzeni procesora w komputerze. nThreads = 1 jest najsprawiedliwszym ustawienie od każdego żądania (wśród kilku jednoczesnych wniosków) uzyska równy udział zasobów obliczeniowych. Ale im potężniejszy komputer, tym mniejszy będzie problem.  

Ostrzeżenie: Wyższa pamięć ZastosowanieEDDGridZestawy danych

Wykorzystanie pamięci podczas przetwarzania żądań jest bezpośrednio proporcjonalne do ustawienia nThreads. Bezpieczną zasadą kciuka jest: musisz ustawićERDDAPUstawienia pamięcido co najmniej 2 GB + (2GB\ * nThreads) . Niektóre prośby do niektórych zbiorów danych będą wymagały więcej pamięci. Na przykład, ustawienie nThreads = 3 dla dowolnychEDDGridzbiór danych oznacza, że ustawienie -Xmx powinno być co najmniej -Xmx8000M. Jeśli ustawienie pamięci jest większe niż 3 / 4 fizycznej pamięci komputera, należy zmniejszyć ustawienie nThreads tak, że można zmniejszyć ustawienie pamięci.

Zapotrzebowanie na potrzeby przetwarzania wątków do zbiorów danych EDDTable jest prawie zawsze niższe, ponieważ pliki są zwykle znacznie mniejsze. Jednak jeśli dany zbiór danych EDDTable ma ogromny (np. > = 1 GB) pliki danych, a następnie uwagi powyżej będą miały zastosowanie również do tych zbiorów danych.

Niezależnie od ustawień nThreads, miej oko na statystyki korzystania z pamięciERDDAPstrona statusu. Nie powinieneś nigdy zbliżać się do maksimum wykorzystania pamięci wERDDAP; w przeciwnym razie pojawią się poważne błędy i niepowodzenia.

Tymczasowo ustawić na 1

Jeśli aktualne wykorzystanie pamięci jest nawet nieznacznie wysokie,ERDDAP™ustawi nThreads na 1. Tak więc,ERDDAP™Oszczędza pamięć, gdy brakuje pamięci.  

Zwraca diminishing

Istnieją malejące zyski do zwiększenia ustawienia nThreads: 2 wątki będą o wiele lepsze niż 1 (Jeśli zignorujemy dynamiczne przeciążenie) . Ale 3 będzie tylko kawałkiem lepszym niż 2. A 4 będzie tylko nieznacznie lepsze niż 3.

W jednym teście trudnego pytania do dużego zbioru danych EDDTable, czas odpowiedzi przy użyciu 1, 2, 3, 4, 5, 6 wątków wynosił 38, 36, 20, 18, 13, 11 sekund. (Teraz używamy nTableThreads = 6 na tym serwerze.)

nTreads = 2: Chociaż często istnieje znacząca korzyść z określenia nThreads = 2 zamiast nThreads = 1, często nie zrobi to dużej różnicy w czasie zegara potrzebnym do odpowiedzi na życzenie danego użytkownika. Powodem jest: z nThreads = 1, najbardziej nowoczesne CPU będzie częstodynamicznie nadzegar (turbo boost) tymczasowo zwiększyć prędkość zegara procesora. Tak więc z nThreads = 1, jeden rdzeń będzie często pracować z większą prędkością zegara niż każdy z dwóch rdzeni, jeśli używasz nThreads = 2. Niezależnie od tego, nadal uważamy, że lepiej jest używać nThreads = 2 niż nThreads = 1, ponieważ ustawienie to przyniesie lepsze rezultaty w szerszej różnorodności sytuacji. I oczywiście, jeśli Twój komputer ma wystarczające rdzenie procesora, jeszcze wyższe ustawienie nThreads powinno dać lepsze wyniki.

Jak wspomniano powyżej, bardzo wysokie ustawienia nThreads mogą prowadzić do szybszych odpowiedzi na niektóre wnioski, ale ryzyko ogólnego spadkuERDDAP™responsibility and high memory use (jak zaznaczono powyżej) Podczas gdy te wnioski są rozpatrywane, to generalnie nie jest to dobry pomysł.

CPU Rdzenie

Nie powinieneś ustawiać nThreads na liczbę większą niż liczba rdzeni procesora w procesorze komputera. Zasadniczo wszystkie nowoczesne CPU mają wiele rdzeni (np. 2, 4 lub 8) . Niektóre komputery mają nawet wiele komputerów (np. 2 CPU\ * 4 rdzenie / CPU = 8 rdzeni CPU) . Aby dowiedzieć się, ile procesorów i rdzeni komputer ma:

  • Na maks, używać Klucz opcji : Menu Apple: Informacje systemowe
  • Na Linuksie użyj cat / proc / cpuinfo
  • W systemie Windows 10, użyj Ctrl + Shift + Esc do otwarcia Menedżer zadań: Wydajność (Logiczne procesory pokazują całkowitą liczbę rdzeni procesora)

Tak, większość procesorów mówi, że obsługują 2 wątki na rdzeń (przezhipergwintowanie) Ale te 2 wątki dzielą się zasobami obliczeniowymi, więc nie zobaczysz dwukrotnej przepustowości procesora pod dużym obciążeniem. Na przykład komputer z jednym procesorem z 4 rdzeniami może twierdzić, że obsługuje do 8 wątków, ale nigdy nie należy przekraczać nThreads = 4 w tymERDDAP. Pamiętaj o tym:

  • Ustawienie nThreadsERDDAP™jest na życzenie.ERDDAP™często obsługuje wiele wniosków jednocześnie.
  • ERDDAP™robi rzeczy inne niż żądania procesowe, np. przeładowuje zbiory danych.
  • KiedyERDDAP™odpowiada na dane żądanie, inne zasoby obliczeniowe (np. dostęp do dysku, przepustowość sieci) mogą ograniczać. Im wyżej ustawisz nThreads, tym większe prawdopodobieństwo, że te inne zasoby zostaną ograniczone i spowolniąERDDAPogólnej reakcji.
  • System operacyjny robi rzeczy inne niż uruchomićERDDAP.

Najlepiej więc nie ustawiać ustawienia nThreads na więcej niż liczbę rdzeni w procesorze komputera.  

Twój przebieg maja Vary (YMMV)

Wyniki różnych ustawień nThreads będą bardzo zróżnicowane dla różnych wniosków o różne zestawy danych w różnych systemach. Jeśli naprawdę chcesz poznać efekt różnych ustawień nThreads, wykonaj realistyczne testy.  

Dlaczego nThreads na życzenie?

Słyszę, jak niektórzy z was myślą: "Dlaczego nThreads jest na życzenie? Gdybym to kodował, użyłbym jednej stałej puli nici pracownika i kolejki komunikacyjnej dla lepszej wydajności". Problem z użyciem jednej puli wątków i kolejki komunikacyjnej jest taki, że jedna trudna prośba zaleje kolejkę licznymi powolnymi zadaniami. To by skutecznie zablokowałoERDDAP™od nawet rozpoczęcia prac nad zadaniami związanymi z innymi wnioskami do pierwotnego wniosku (zasadniczo) Skończone. Tak więc, nawet proste kolejne wnioski zareagowałyby bardzo powoli.ERDDAPwykorzystanie nThreads na żądanie prowadzi do bardziej sprawiedliwego wykorzystania zasobów obliczeniowych.  

nThreads vs.

Niestety,ERDDAPsystem nThreads nigdy nie będzie tak skuteczny jak prawdziwe równoległe za pośrednictwem wielu komputerów pracowniczych, przy czym każdy pracuje nad kawałkiem danych, w sposób, w jaki Hadoop lub Apache Spark są zazwyczaj używane. Kiedy zadanie jest naprawdę równoległe / dystrybuowane do wielu komputerów, każdy komputer może wykorzystać wszystkie swoje zasoby w swojej części zadania. ZERDDAPsystem nThreads, każdy gwint konkuruje o przepustowość tego samego komputera, dyski, pamięć, itp. Niestety, większość z nas nie ma środków ani funduszy, by je założyć, ani nawet wynająć. (na Amazon Web Services (AWS) lub Google Cloud Platform (GCP) ) ogromne sieci komputerów. Ponadto, w przeciwieństwie do relacyjnej bazy danych, która może zwracać wiersze wyników w dowolnej kolejności,ERDDAP™składa obietnicę zwrotu wierszy wyników w spójnym porządku. To ograniczenie sprawia, żeERDDAPimplementacja nThreads jest mniej skuteczna. Ale...ERDDAPnThreads jest przydatny w wielu przypadkach.

Jednak są sposoby, abyERDDAP™skala do obsługi ogromnej liczby żądań szybko poprzez utworzeniesiatka / klaster / federacjaERDDAPs.  

<palety & gt;

  • Począwszy odERDDAP™wersja 2.12,datasets.xmlmoże zawierać<palety > znacznik (wewnątrz<erddapDatasets >), który zastępuje<palety > wartość znacznika z messages.xml (lub powraca do wartości messages.xml jeśli znacznik wdatasets.xmljest pusty) . Pozwala to na zmianę listy dostępnych palet podczasERDDAP™Ucieka. Pozwala również dokonać zmiany i mieć to utrzymuje, gdy zainstalować nową wersjęERDDAP. OSTRZEŻENIE: Palety wymienione wdatasets.xmlmusi być superzestawem palet wymienionych w messages.xml;ERDDAP™będzie rzucać wyjątek i zaprzestać przetwarzaniadatasets.xml. Zapewnia to, żeERDDAP™instalacje przynajmniej obsługują te same palety rdzenia. OSTRZEŻENIE:ERDDAP™sprawdza, czy pliki palet określone w messages.xml rzeczywiście istnieją, ale nie sprawdza plików palet wymienionych wdatasets.xml. Twoim obowiązkiem jest zapewnienie obecności akt.

Również zaczynając odERDDAP™Wersja 2.12, jeśli wykonasz podkatalog cptfiles wERDDAP™katalog treści,ERDDAP™skopiuje wszystkie pliki\ * .cpt w tym katalogu do\[tomcat\]/ webapps / erddap / WEB- INF / cptfiles za każdym razemERDDAP™Zaczyna się. Tak więc, jeśli wstawisz własne pliki cpt do tego katalogu, te pliki będą używane przezERDDAP™, bez dodatkowego wysiłku z Twojej strony, nawet jeśli zainstalować nową wersjęERDDAP.

UWAGA: Jeśli dodasz niestandardowe palety do swojegoERDDAP™i maszEDDGridFromaErddap i / lub EDDTableFromErddap w zestawach danychERDDAP™, następnie użytkownicy będą zobaczyć własne opcje palety naERDDAP™Zrób stronę Wykres, ale jeśli użytkownik spróbuje jej użyć, otrzyma wykres z domyślną (zwykle tęcza) Palette. To dlatego, że obraz jest wykonany przez pilotaERDDAP™który nie ma palety na zamówienie. Jedynym rozwiązaniem jest teraz wysłać e-mail do pilotaERDDAP™administrator do dodawania własnych palet do jego / jejERDDAPlub e-mail do Chrisa. John na Noaa.gov poprosić, aby palety zostały dodane do standarduERDDAP™dystrybucji.

<onChange & gt;

  • [ ** <onChange > ** ] (# onchange) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlktóry określa działanie, które zostanie wykonane przy tworzeniu tego zbioru danych (kiedyERDDAP™jest ponownie uruchomiony) i kiedy ten zbiór danych zmienia się w jakikolwiek sposób.
    • ObecnieEDDGridpodklasy, wszelkie zmiany metadanych lub zmiennej osiowej (Na przykład, nowy punkt czasowy dla danych w czasie bliskim-rzeczywistym) jest uważany za zmianę, ale przeładowanie zbioru danych nie jest uważane za zmianę (sam w sobie) .
    • Obecnie, dla podklas EDDTable, jakiekolwiek przeładowanie zbioru danych jest uważane za zmianę.
    • Obecnie dozwolone są tylko dwa rodzaje działań:
      • " http://" albo " https://" -- Jeśli akcja zaczyna się od " http://" albo " https://" ,ERDDAP™wyśleHTTP GETżądanie do określonego adresu URL. Odpowiedź zostanie zignorowana. Na przykład, URL może powiedzieć jakiejś innej usługi internetowej, aby coś zrobić.
        • Jeśli adres URL ma część zapytania (Po "?) To musi być już% zakodowanych. Musisz zakodować specjalne znaki w ograniczeniach (inne niż początkowe '&' i główne'='w ograniczeniach) w postaci% HH, gdzie HH jest dwucyfrową wartością szesnastkową znaku. Zazwyczaj trzeba zamienić kilka znaków interpunkcji:% na% 25, & na% 26 ", na% 22,<% 3C, =% 3D, >% 3E, +% 2B,|w% 7C,\[w% 5B,\]do% 5D, spacja do% 20 i konwertuj wszystkie znaki powyżej # 127 na ich formę UTF- 8, a następnie procent kodowania każdego bajtu formy UTF- 8 do formatu% HH (poproś programistę o pomoc) . Na przykład, &stationID> = "41004" staje się &stationID% 3E =% 2241004% 22 Procent kodowania jest na ogół wymagany przy dostępieERDDAPza pomocą oprogramowania innego niż przeglądarka. Przeglądarki zwykle zajmują się procentowym kodowaniem. W niektórych sytuacjach, trzeba procent kodowania wszystkich znaków innych niż A- Za- z0- 9\ _ -!. ~ ' () \ *, ale nadal nie koduj inicjału '&' lub głównego'='w ograniczeniach. Języki programowania mają do tego narzędzia (na przykład patrzJavajestjava.net.URLEncoderorazJavaSkrypt [encodeURIComponent()] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) i są strony internetowe, które procent kodowania / dekodowania dla Ciebie.
        • Oddatasets.xmljest plikiem XML, należy również & -encode ALL '&',<", i" > "w URL jako" & amp; ",<', i' & gt; 'po procentach kodowania.
        • Przykład: Dla URL, który można wpisać do przeglądarki jako: https://www.company.com/webService?department=R%26D&param2=value2
          Należy określić<onChange > tag poprzez (na jednej linii)
            <onChange>https://www.company.com/webService?department=R%26D&amp;param2=value2</onChange>
      • mailto: -- Jeśli akcja zaczyna się od "mailto:",ERDDAP™wyśle e-mail na kolejny adres e-mail wskazujący, że zbiór danych został zaktualizowany / zmieniony. Na przykład:<onChange > mailto: john.smith @ company.com</ onChange > Jeśli masz dobry powódERDDAP™Aby wesprzeć jakiś inny rodzaj działania, wyślij nam e-mail opisujący co chcesz.
    • Ten znacznik jest opcjonalny. Może być ich tyle, ile chcesz. Użyj jednego z tych znaczników dla każdej czynności, która ma być wykonana.
    • Jest to analogiczne doERDDAPsystem subskrypcji e-mail / URL, ale te działania nie są stale przechowywane (tj. są one przechowywane tylko w obiekcie EDD) .
    • Aby usunąć subskrypcję, po prostu usunąć<onChange > tag. Zmiana zostanie odnotowana przy następnym załadowaniu zbioru danych.  

<przeładowanie EveryNMinutes & gt;

  • [ ** <przeładowanie Każdy protokół > ** ] (# reloadeverynminutes) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlprawie wszystkich typów zbioru danych, które określają, jak często zbiór danych powinien być ponownie załadowany. Na przykład:
    <reloadEveryNMinutes>60</reloadEveryNMinutes>
    • Ogólnie, zbiory danych, które często się zmieniają (na przykład, uzyskać nowe pliki danych) należy często ładować, na przykład co 60 minut.

    • Dane, które zmieniają się rzadko, powinny być przeładowane rzadko, na przykład co 1440 minut (dobę) lub 10080 minut (raz w tygodniu) .

    • Ten znacznik jest opcjonalny, ale zalecany. Domyślnie to 10080.

    • Przykładem jest:<przeładowanie EveryNMinutes > 1440</ przeładowanie Każdy protokół >

    • Po ponownym załadowaniu zbioru danych, wszystkie pliki bigParentDirectory / cache / datasetID katalog został usunięty.

    • Bez względu na to, do czego to jest ustawione, zestaw danych nie będzie ładowany częściej niż<loadDatasetsMinMinMinMinMinutes > (domyślny = 15) , jak określono wsetup.xml. Więc jeśli chcesz, aby dane były przeładowane bardzo często, musisz ustawić zarówno reloadEveryNMinutes jak i loadDatasets Minuty do małych wartości.

    • Nie ustawiać reloadEveryNMinutes do tej samej wartości co loadDatasets MinMinminutes, ponieważ upływający czas prawdopodobnie (na przykład) 14: 58 lub 15: 02, więc zbiór danych zostanie przeładowany tylko w około połowie głównych przeładowań. Zamiast tego, użyj mniejszej (na przykład 10) lub większe (na przykład, 20) przeładowanie Każda minuta.

    • Niezależnie od reloadEveryNMinutes, można ręcznie powiedziećERDDAP™aby jak najszybciej przeładować określony zestaw danych poprzezplik znacznika.

    • Dla ciekawskich programistów -- WERDDAP™, przeładowanie wszystkich zbiorów danych jest obsługiwane przez dwa pojedyncze wątki celu. Jeden wątek inicjuje drobne przeładowanie, jeśli znajduje plik flagi lub duże przeładowanie (który sprawdza wszystkie zestawy danych w celu sprawdzenia, czy muszą być ponownie załadowane) . Drugi wątek przeładowuje dane pojedynczo. Te wątki działają w tle, zapewniając, że wszystkie zestawy danych są przechowywane na bieżąco. Nitka, która faktycznie robi reloads przygotowuje nową wersję zbioru danych następnie swap go na miejsce (zasadniczo zastępując starą wersję atomicznie) . Więc jest bardzo możliwe, że następująca sekwencja zdarzeń występuje (To dobra rzecz.) :

      1. ERDDAP™uruchamia przeładowanie zbioru danych (tworzenie nowej wersji) w tle.
      2. Użytkownik 'A' składa wniosek do zbioru danych.ERDDAP™wykorzystuje bieżącą wersję zbioru danych do utworzenia odpowiedzi. (To dobrze. Nie było opóźnienia dla użytkownika, a obecna wersja zbioru danych nigdy nie powinna być bardzo nieświeża.)
      3. ERDDAP™kończy tworzenie nowej przeładowanej wersji zbioru danych i swapów nowej wersji do produkcji. Wszystkie kolejne nowe żądania są obsługiwane przez nową wersję zbioru danych. Dla zachowania spójności żądanie użytkownika A jest nadal wypełniane oryginalną wersją.
      4. Użytkownik 'B' składa wniosek do zbioru danych orazERDDAP™wykorzystuje nową wersję zbioru danych do utworzenia odpowiedzi.
      5. Ostatecznie wnioski użytkowników A i B są wypełniane (być może A kończy się najpierw, być może B kończy najpierw) .

Słyszę, jak ktoś mówi: "Tylko dwie trójki! Ha! To żałosne! Powinien to skonfigurować tak, aby przeładowanie zbiorów danych wykorzystywało tyle wątków, ile jest potrzebne, tak aby wszystko działo się szybciej i bez opóźnień". Tak i nie. Problem polega na tym, że ładowanie więcej niż jednego zbioru danych na raz stwarza kilka trudnych nowych problemów. Wszystkie muszą zostać rozwiązane lub rozwiązane. Obecny system działa dobrze i ma możliwe do opanowania problemy (na przykład, możliwość opóźnienia przed zauważoną flagą) . (Jeśli potrzebujesz pomocy w zarządzaniu nimi, zobacz naszerozdział dotyczący uzyskania dodatkowego wsparcia.) Powiązaneaktualizacja EveryNMillis. system działa w wątkach odpowiedzi, więc może i prowadzi do aktualizacji wielu zbiorów danych (nie pełne przeładowanie) jednocześnie.

Proactive vs Reactive

ERDDAPsystem przeładowania jest aktywny -- zbiory danych są przeładowane wkrótce po ich przeładowaniu Każdy protokół kończy się (Stają się "nieświeże", ale nigdy bardzo nieświeże) , czy zbiór danych otrzymuje wnioski od użytkowników, czy nie. Więc...ERDDAP™Zestawy danych są zawsze aktualizowane i gotowe do użycia. W przeciwieństwie do podejścia reaktywnego THREDDS: żądanie użytkownika jest tym, co mówi THREDDS, aby sprawdzić, czy zestaw danych jest nieaktualny (To może być bardzo nudne.) . Jeśli jest nieświeży, THREDDS sprawia, że użytkownik czeka (często przez kilka minut) podczas przeładowania zbioru danych.

<aktualizacja EveryNMillis & gt;

  • [ ** <updateEveryNMillis > ** ] (# updateeverynmillis) jest znacznikiem optycznym w obrębie<dataset > tag indatasets.xmlniektórych typów zbioru danych, które pomagająERDDAP™praca z zbiorami danych, które zmieniają się bardzo często (tak często jak mniej więcej co sekundę) . W przeciwieństwie doERDDAPjest regularne, aktywne, [<przeładowanie Każda minuta >] (# reloadeverynminutes) system do całkowitego przeładowania każdego zbioru danych, ten dodatkowy system optyczny jest reaktywny (wywołany żądaniem użytkownika) i szybciej, ponieważ jest przyrostowy (tylko aktualizowanie informacji, które muszą być aktualizowane) . Na przykład, jeśli wniosek doEDDGridZestaw danych FromDap występuje częściej niż określona liczba milisekund od ostatniej aktualizacji,ERDDAP™będzie sprawdzić, czy są jakieś nowe wartości dla lewej (pierwszy, zwykle"time") rozmiar i, jeśli tak, po prostu pobrać te nowe wartości przed obsługą żądania użytkownika. System ten jest bardzo dobry w utrzymaniu szybko zmieniających się zbiorów danych up- to- date z minimalnymi wymaganiami dotyczącymi źródła danych, ale kosztem nieznacznego spowolnienia przetwarzania niektórych żądań użytkowników.
    • Aby korzystać z tego systemu, dodaj (na przykład) :
      <updateEveryNMillis>1000</updateEveryNMillis>  

zaraz po<przeładowanie EveryNMinutes > tag dla zbioru danych wdatasets.xml. Liczba milisekund może być tak mała jak 1 (w celu zapewnienia, że zestaw danych jest zawsze up- to- date) . Wartość 0 (domyślny) lub liczba ujemna wyłącza system.

  • Ze względu na ich przyrostowy charakter, aktualizacje powinny zakończyć się bardzo szybko, więc użytkownicy nie powinni czekać długo.
  • Jeśli drugi wniosek o dane pojawi się przed zakończeniem poprzedniej aktualizacji, drugi wniosek nie uruchomi kolejnej aktualizacji.
  • W całej dokumentacji, będziemy próbować użyć słowa "reload" dla regularnych, pełnych reloadów zbioru danych i "update" dla tych nowych przyrostowych, częściowych aktualizacji.
  • Do celów badań, niektóre diagnostyki są drukowane log.txt, jeśli [<logLevel >] (# loglevel) wdatasets.xmljest ustawiony na "wszystko".
  • Jeśli używasz przyrostowych aktualizacji, a szczególnie jeśli left most (pierwszy) , na przykład, czas, oś jest duża, możesz chcieć ustawić<przeładowanie EveryNMinutes > do większej liczby (1440?) , tak, że aktualizacje zrobić większość pracy, aby utrzymać zestaw danych up- to- date, a pełne reloads są wykonywane rzadko.
  • Uwaga: ten nowy system aktualizacji metadanych (na przykład czasactual\_range, time\ _ recovery\ _ end,...) ale nie uruchamia onChange (email lub dotknij URL) lub zmienićRSSpasza (Może powinien...) .
  • Dla wszystkich zbiorów danych, które używają podklasEDDGridPliki FromFilesorazPliki EDDTableFromFiles:
    • OSTRZEŻENIE: po dodaniu nowego pliku danych do zbioru danych kopiując go do katalogu, któryERDDAP™jest niebezpieczeństwo, żeERDDAP™będzie zauważyć plik częściowo zapisany; spróbuj go odczytać, ale nie, ponieważ plik jest niekompletny; zadeklarować plik jako "zły" plik i usunąć go (tymczasowo) z zbioru danych. Aby uniknąć tego, my ZALECENIE OGÓLNE że skopiujesz nowy plik do katalogu z tymczasową nazwą (na przykład, 20150226.ncTmp) nie pasuje do pliku zbiorów danych NameRemex (* * *.nc) , następnie zmienić nazwę pliku na poprawną nazwę (na przykład, 20150226.nc) . Jeśli użyjesz tego podejścia,ERDDAP™ignoruje plik tymczasowy i zauważa poprawnie nazwany plik tylko wtedy, gdy jest kompletny i gotowy do użycia.
    • Jeśli zmodyfikujesz istniejące dane (na przykład dodanie nowego punktu danych) ,<updateEveryNMillis > będzie działać dobrze, jeśli zmiany pojawią się atomicznie (w jednej chwili) i plik jest zawsze poprawny. Na przykład, biblioteka netcdf- java pozwala na dodatki do nieograniczonego wymiaru "classic".ncPlik v3 ma być wykonany atomicznie. <updateEveryNMillis > będzie działać źle, jeśli plik jest nieprawidłowy podczas wprowadzania zmian.
    • <updateEveryNMillis > będzie działać dobrze dla zbiorów danych, gdzie jeden lub kilka plików zmienia się w krótkim czasie.
    • <updateEveryNMillis > będzie słabo pracować dla zbiorów danych, gdzie duża liczba plików zmienia się w krótkim czasie (chyba że zmiany pojawiają się atomicznie) . Dla tych zbiorów danych lepiej nie używać<updateEveryNMillis > i ustawićbanderapowiedziećERDDAP™Przeładować zestaw danych.
    • <updateEveryNMillis > nie aktualizuje informacji związanych z [<subsetVariables>] (# subsetvarels) . Zwykle nie jest to problem, ponieważsubsetVariablesmieć informacje o rzeczach, które nie zmieniają się zbyt często (na przykład, lista nazw stacji, szerokości geograficznej i długości geograficznej) . JeślisubsetVariableszmiany danych (na przykład, gdy nowa stacja jest dodana do zbioru danych) , a następnie skontaktować się zURL flagidla zbioru danych, aby powiedziećERDDAP™Przeładować zestaw danych. W przeciwnym razie,ERDDAP™nie zauważy nowego podzbioru Zmienna informacja do czasu ponownego załadowania zbioru danych (<przeładowanie EveryNMinutes >).
    • Naszym ogólnym zaleceniem jest użycie:
        <reloadEveryNMinutes>1440</reloadEveryNMinutes>  
    <updateEveryNMillis>10000</updateEveryNMillis>
    • Kłopoty? Na komputerach Linuksa, jeśli używasz<updateEveryNMillis > zEDDGridPliki FromFiles lub klasy EDDTableFromFiles, możesz zobaczyć problem, w którym zestaw danych nie wczytuje (od czasu do czasu lub konsekwentnie) z komunikatem błędu: "IOException: Limit użytkowników instancji inofilizacyjnych lub zbyt wiele otwartych plików". Przyczyną może być błąd wJavaco powoduje, że nie zbierane są śmieci. Ten problem jest uniknięty wERDDAP™v1.66 i wyższa. Więc najlepszym rozwiązaniem jest przełączanie najnowszej wersjiERDDAP. Jeśli to nie rozwiązuje problemu (to jest, jeśli masz naprawdę dużą liczbę zbiorów danych za pomocą<updateEveryNMillis >), można rozwiązać ten problem poprzez wywołanie:
      sudo sysctl fs.inotify.max\\_user\\_watches=65536  
      sudo sysctl fs.inotify.max\\_user\\_instances=1024
      sudo sysctl -p

Albo użyć wyższych liczb, jeśli problem utrzymuje się. Domyślnie dla zegarków to 8192. Domyślnie dla instancji wynosi 128.

  • Możesz umieścić<updateMaxEvents > 10</ updateMaxEvents > wdatasets.xml (z innymi ustawieniami w pobliżu góry) aby zmienić maksymalną liczbę zmian w pliku (domyślny = 10) które będą przetwarzane przez system updateEveryNMillis. Większa liczba może być przydatna dla zbioru danych, gdzie jest bardzo ważne, aby były one zawsze aktualizowane. Patrzdokumentacja updateMaxEvents.
  • Dla ciekawskich programistów -- te przyrostowe aktualizacje, w przeciwieństwie doERDDAPpełnaPrzeładowanie EveryNMinutessystem, wystąpić w wątkach żądanie użytkownika. Tak więc, każda liczba zbiorów danych może być aktualizowana jednocześnie. Jest kod (i zamek) w celu zapewnienia, że tylko jeden wątek pracuje nad aktualizacją danego zbioru danych w danym momencie. Umożliwienie wielokrotnych jednoczesnych aktualizacji było łatwe; dopuszczenie wielu jednoczesnych pełnych reloadów byłoby trudniejsze.  

<sourceCanConstrainStringEQNE & gt;

  • [ ** <sourceCanConstrainStringEQNE > ** ] (# sourcecanconsiminstringeqne) jest znacznikiem optycznym w ramach tabeli EDDTable<dataset > tag indatasets.xmlOkreśla, czy źródło może ograniczyć zmienne String za pomocą = i! = operatorów.
    • Dla EDDTableFromDapSequence odnosi się to wyłącznie do zewnętrznych zmiennych String sekwencji. Zakłada się, że źródło nie może znieść żadnych ograniczeń dotyczących zmiennych sekwencji wewnętrznej.
    • Ten znacznik jest opcjonalny. Ważne wartości są prawdziwe (domyślny) i fałszywe.
    • Dla EDDTableFromDapSequenceOPeNDAPSerwery DRDS, powinno być ustawione na true (domyślny) .
    • Dla EDDTableFromDapSequence Serwery Dapper, to powinno być fałszywe.
    • Przykładem jest:
        <sourceCanConstrainStringEQNE>true</sourceCanConstrainStringEQNE>  

 

<sourceCanConstrainStringGTLT & gt;

  • [ ** <sourceCanConstrainStringGTLT > ** ] (# sourcecanconsiminstringgtlt) jest znacznikiem optycznym w ramach tabeli EDDTable<dataset > tag, który określa, czy źródło może ograniczyć zmienne String<,<=, >, i > = operatorzy.
    • Dla EDDTableFromDapSequence odnosi się to wyłącznie do zewnętrznych zmiennych String sekwencji. Zakłada się, że źródło nie może znieść żadnych ograniczeń dotyczących zmiennych sekwencji wewnętrznej.
    • Ważne wartości są prawdziwe (domyślny) i fałszywe.
    • Ten znacznik jest opcjonalny. Domyślnie jest to prawda.
    • Dla EDDTableFromDapSequenceOPeNDAPSerwery DRDS, powinno być ustawione na true (domyślny) .
    • Dla EDDTableFromDapSequence Serwery Dapper, to powinno być fałszywe.
    • Przykładem jest:
        <sourceCanConstrainStringGTLT>true</sourceCanConstrainStringGTLT>  

 

<sourceCanConstrainStringRegex & gt;

  • [ ** <sourceCanConstrainStringReget > ** ] (# sourcecanlightingregex) jest znacznikiem optycznym w ramach tabeli EDDTable<dataset > tag, który określa, czy źródło może ograniczać zmienne String za pomocą wyrażeń regularnych, a jeśli tak, to czym jest operator.
    • Ważne wartości to "= " (doDAPstandard) " =" (omyłkowo obsługiwane przez wieluDAPserwery) albo "" (wskazując, że źródło nie obsługuje wyrażeń regularnych) .
    • Ten znacznik jest opcjonalny. Domyślnie jest ".
    • Dla EDDTableFromDapSequenceOPeNDAPSerwery DRDS, to powinno być ustawione na "" (domyślny) .
    • Dla EDDTableFromDapSequence Serwery Dapper, to powinno być ustawione na "" (domyślny) .
    • Przykładem jest:
        <sourceCanConstrainStringRegex>=~</sourceCanConstrainStringRegex>  

<sourceCanDodistinct & gt;

  • [ ** <sourceCanDoDistinct > ** ] (# sourcecandodistant) jest opcjonalnym znacznikiem w bazie danych EDDTableFromDatabase<dataset > tag, który określa, czy baza danych źródłowa powinna obsługiwać & odrębne () ograniczenia w zapytaniach użytkowników.
    • Ten znacznik jest opcjonalny. Ważne wartości są nie (ERDDAP™rękojeści odrębne; domyślne) , częściowy (źródło uchwyty odrębne iERDDAP™Jeszcze raz.) i tak (źródło uchwyty odrębne) .
    • Jeśli pacjent stosujeERDDAP™Kończy mu się pamięć podczas obsługi odrębnej, użyj tak.
    • Jeśli używasz "tak" i baza danych źródłowa działa zbyt wolno, nie używaj.
    • częściowy daje najgorsze z obu: jest powolny, ponieważ obsługa bazy danych odrębnych jest powolny i może zabraknąć pamięci wERDDAP.
    • Bazy danych interpretują DISTINCT jako wniosek o unikalne rzędy wyników, podczas gdyERDDAP™interpretuje go jako wniosek o sortowanie listy unikalnych wierszy wyników. Jeśli ustawisz to na częściowe lub tak,ERDDAP™automatycznie informuje także bazę danych o sortowaniu wyników.
    • Jedna mała różnica w wynikach: Nie|częściowy,ERDDAP™sortuje "" na początku wyników (przed nie- "strings) . Z tak, baza danych może (Postgres będzie) sortuj "" na końcu wyników (po nie- "strings) . Zgaduję, że wpłynie to również na sortowanie krótkich słów i dłuższych słów, które zaczynają się od krótkiego słowa. Na przykład:ERDDAP™będzie sortować "Simon" przed "Simons".
    • Przykładem jest:
        <sourceCanDoDistinct>yes</sourceCanDoDistinct>  

 

<sourceCanOrderBy & gt;

  • [ ** <źródło CanOrderBy > ** ] (# sourcecanderby) jest opcjonalnym znacznikiem w bazie danych EDDTableFromDatabase<dataset > tag, który określa, czy baza danych źródłowa powinna obsługiwać &orderBy (...) ograniczenia w zapytaniach użytkowników.
    • Ten znacznik jest opcjonalny. Ważne wartości są nie (ERDDAP™UchwytyorderBy (...) ; domyślne) , częściowy (uchwyty źródłoweorderByorazERDDAP™Jeszcze raz.) i tak (uchwyty źródłoweorderBy (...) ) .
    • Jeśli pacjent stosujeERDDAP™kończy się pamięć podczas obsługiorderBy (...) , użyj tak.
    • Jeśli używasz tak i obsługi bazy danych źródłowychorderBy (...) zbyt wolno, użyj nie.
    • częściowy daje najgorsze z obu: jest powolny, ponieważ obsługa bazy danychorderBy (...) jest powolny i może zabraknąć pamięci wERDDAP.
    • Jedna mała różnica w wynikach: Nie|częściowy,ERDDAP™sortuje "" na początku wyników (przed nie- "strings) . Z tak, baza danych może (Postgres będzie) sortuj "" na końcu wyników (po nie- "strings) . Może to również wpływać na sortowanie krótkich słów i dłuższych słów, które zaczynają się od krótkiego słowa. Na przykład:ERDDAP™będzie sortować "Simon" przed "Simons", ale nie jestem pewien jak baza danych będzie sortować je.
    • Przykładem jest:
        <sourceCanOrderBy>yes</sourceCanOrderBy>  

 

<sourceNeedsExpandedFP\ _ EQ & gt;

  • [ ** <sourceNeedsExpandedFP\ _ EQ > ** ] (# sourceeedexpandedfp _ eq) jest znacznikiem optycznym w ramach tabeli EDDTable<dataset > tag, który określa (prawda (domyślny) lub false) jeśli źródło potrzebuje pomocy z zapytaniami<numeryczne Zmienna > =<floatingPointValue > (i! =, > =,<=). Na przykład:
    <sourceNeedsExpandedFP\\_EQ>false</sourceNeedsExpandedFP\\_EQ>
    • Dla niektórych źródeł danych, numeryczne zapytania dotyczące =,! =,<=, lub > = nie mogą działać zgodnie z życzeniem z numerami zmiennoprzecinkowymi. Na przykład, wyszukiwanie długości geograficznej = 220.2 może się nie udać, jeśli wartość jest zapisywana jako 220.200000000001.
    • Problem ten powstaje, ponieważ liczby zmiennoprzecinkowe sąniereprezentowane dokładnie w komputerach.
    • Jeśli sourceNeedsExpandedFP\ _ EQ jest ustawiony na true (domyślny) ,ERDDAP™modyfikuje pytania wysyłane do źródła danych, aby uniknąć tego problemu. To jest zawsze bezpieczne i w porządku zostawić ten zestaw do prawdy.  

<sourceUrl& gt;

  • [ ** <sourceUrl> ** ] (# sourceurl) jest wspólnym znacznikiem w globalnym zbiorze danych<addAttributes> tag określający adres URL, który jest źródłem danych.
    • Przykładem jest:
        <sourceUrl>https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/VH/chla/1day</sourceUrl>  
    (ale postaw wszystko na jednej linii)
    • WERDDAP™, wszystkie zestawy danych będą miały "sourceUrl"w połączonych atrybutach globalnych, które są pokazywane użytkownikom.
    • Dla większości typów zbiorów danych ten znacznik jest WYMAGANY. Zobacz opis typu zbioru danych, aby dowiedzieć się, czy jest to WYMAGANE czy nie.
    • Dla niektórych zbiorów danych, oddzielny<sourceUrl> znacznik nie jest dozwolony. Zamiast tego, musisz dostarczyć "sourceUrl"atrybut globalny, zwykle w świecie\ >addAttributes<. Jeśli nie ma rzeczywistego adresu źródłowego (na przykład, jeśli dane są przechowywane w plikach lokalnych) , ten atrybut często ma po prostu wartość placeholder, na przykład,<att name = "name" > (pliki lokalne) </ att >.
    • Dla większości zbiorów danych jest to podstawa adresu URL używanego do żądania danych. Na przykład:DAPserwery, to jest URL, do którego można dodać .dods, .das, .dds lub .html.
    • Oddatasets.xmljest plikiem XML, musisz również zakodować '&',<", i" > "w URL jako" & amp; ",<", i" & gt; ".
    • Dla większości typów zbiorów danych,ERDDAP™dodaje oryginałsourceUrl ("localSourceUrl" w kodu źródłowego) doatrybuty globalne (gdzie staje się "publicSourceUrl" w kodzie źródłowym) . Kiedy źródłem danych są pliki lokalne,ERDDAP™dodajesourceUrl= " (pliki lokalne) "do globalnych atrybutów jako zabezpieczenie bezpieczeństwa. Kiedy źródło danych jest bazą danych,ERDDAP™dodajesourceUrl= " (baza danych źródłowych) "do globalnych atrybutów jako zabezpieczenie bezpieczeństwa. Jeśli niektóre z twoich zbiorów danych używają niepublicznychsourceUrljest (zazwyczaj dlatego, że ich komputer jest w DMZ lub na lokalnym LAN) można użyć [<convertToPublicSourceUrl >] (# converttopublicsourceurl) tagi do określenia, jak przekonwertować lokalnysourceUrls do publicznejsourceUrlb.
    • AsourceUrlmoże rozpocząć się odhttp://,https://, ftp: / / i być może inne przedrostki.httpspołączenia odczytują i sprawdzają cyfrowy certyfikat źródła, aby upewnić się, że źródło jest tym, za kogo się podaje. W rzadkich przypadkach kontrola ta może się nie udać z błędem "javax.net.ssl.SSLProtocolution Exception: handshake alert: unfasted\ _ name". Jest to prawdopodobnie spowodowane nazwą domeny na certyfikacie, która nie pasuje do nazwy domeny, której używasz. Można i należy przeczytać szczegółysourceUrlCertyfikat w przeglądarce internetowej, w szczególności lista "DNS Name" s w sekcji "Temat Nazwa alternatywna".

W niektórych przypadkachsourceUrlużywasz może być aliasem nazwy domeny na certyfikacie. Na przykład: https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ będzie rzucać ten błąd, ale https://opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ , który używa nazwy domeny na certyfikacie, nie będzie. Rozwiązaniem w tych przypadkach jest zatem znalezienie i użycie nazwy domeny na świadectwie. Jeśli nie możesz go znaleźć na certyfikacie, skontaktuj się z dostawcą danych.

W innych przypadkach nazwa domeny na świadectwie może dotyczyć grupy nazw. Jeśli tak się stanie lub problem jest inaczej nie do rozwiązania, proszę wysłać e-mail do Chrisa. John w Noa.gov zgłosić problem.  

<addAttributes>

  • [ ** <addAttributes> ** ] (# addattriates) jest opcjonalnym znacznikiem dla każdego zbioru danych i dla każdej zmiennej, która pozwalaERDDAPadministratorzy kontrolują atrybuty metadanych związane z zbiorem danych i jego zmiennymi.
    • ERDDAP™łączy atrybuty ze źródła zbioru danych ("sourceAtrybuty") i "addAttributes"które definiujesz wdatasets.xml (które mają pierwszeństwo) do "combinadAtrybuty", które są coERDDAP™Użytkownicy widzą. Tak więc, można użyćaddAttributesaby ponownie zdefiniować wartości sourceAtrybuty, dodać nowe atrybuty lub usunąć atrybuty.
    • W<addAttributes> tag obudowy 0 lub więcej ** <att > ** subtags, które są używane do określenia poszczególnych atrybutów.
    • Każdy atrybut składa się z nazwy i wartości (który posiada określony typ danych, na przykład podwójny) .
    • Może być tylko jeden atrybut o podanej nazwie. Jeśli jest ich więcej, ostatni ma pierwszeństwo.
    • Wartość może być pojedynczą wartością lub oddzieloną od przestrzeni listą wartości.
    • Składnia
      • Kolejność<att > podznaczniki wewnątrzaddAttributesTo nieważne.
      • W<format att > subtag jest
          <att name="*name*" \\[type="*type*"\\] >*value*</att>
      • Nazwa miejsca docelowego wszystkich atrybutów MUSI zaczynać od litery (A- Z, a- z) MUSI zawierać tylko znaki A- Z, a- z, 0- 9 lub '\ _'.
      • Jeśli<att > subtag nie ma wartości lub wartości null, atrybut ten zostanie usunięty z połączonych atrybutów. Na przykład:<att nazwa = "wiersze" / > usunie wiersze z połączonych atrybutów. Na przykład:<att name = "coordinates" > null</ att > usunie współrzędne z połączonych atrybutów.
atrybut Rodzaj
  • [Opcjonalna wartość typu dla<att > subtagi] (# Assionetype) wskazuje typ danych dla wartości. Domyślny typ to String. Przykładem atrybutu String jest:
    <att name="creator\\_name">NASA/GSFC OBPG</att>
    • Ważne typy dla pojedynczych wartości są bajtem (8- bitowa liczba całkowita) , krótkie (16-bitowa liczba całkowita) , int (32- bitowa liczba całkowita) , długi (64- bitowa liczba całkowita) , float (32- bitowy punkt zmienny) , podwójna (64- bitowy punkt zmienny) Char i String. Na przykład:
      <att name="scale\\_factor" type="float">0.1</att>

Patrz te notatki otyp danych znaków. Patrz te notatki otyp danych długich.

  • Ważne typy list wartości oddzielonych od przestrzeni kosmicznej (lub wartości pojedyncze) są byteList, shortList, unsignedShortList, charList, intList, longList, floatList, double Lista. Na przykład:
    <att name="actual\\_range" type="doubleList">10.34 23.91</att>  

UnsignedShortList pozwala określić listę niepodpisanych szortów, ale zostaną one przekształcone w listę odpowiednich znaków Unicode (np. "65 67 69" zostanie przekształcone w "A C E". Jeśli podasz CharList, koduj specjalne znaki (np. spacja, podwójne cytaty, backslash,<# 32, lub > # 127) jak można je kodować w sekcji danych pliku NCSV (np. ",", "\" "lub" ","\\ ","\n","\ u20ac ") . Nie ma żadnej listy. Zapisz wartości String jako wieloliniowe String. Na przykład:

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

 

Atrybuty globalne

  • [ ** Atrybuty globalne / Atrybuty globalne<addAttributes> ** ] (# global- atrybuty) -- <addAttributes> jest znacznikiem optycznym w obrębie<dataset > tag używany do zmiany atrybutów, które odnoszą się do całego zbioru danych.

    • ** Użyj globalnego<addAttributes> zmiana globalnych atrybutów zbioru danych. ** ERDDAP™Łączy atrybuty globalne ze źródła zbioru danych (** sourceAtrybuty ) i globalny addAttributes które definiujesz wdatasets.xml (które mają pierwszeństwo) do globalnego combinedAtrybuty ** , które są coERDDAP™Użytkownicy widzą. Tak więc, można użyćaddAttributesaby ponownie zdefiniować wartości sourceAtrybuty, dodać nowe atrybuty lub usunąć atrybuty.
    • Zobacz ** <addAttributes> Informacje] (# addattriates) które stosuje się do globalnych i zmiennych <addAttributes> ** .
    • FGDCorazISO 19115-2 / 19139Metadane -- Normalnie,ERDDAP™automatycznie wygeneruje ISO 19115-2 / 19139 i FGDC (FGDC- STD- 001- 1998) Pliki metadanych XML dla każdego zbioru danych z wykorzystaniem informacji z metadanych zbioru danych. Więc, dobre metadane zbioru danych prowadzi do dobregoERDDAP-generowane metadane ISO 19115 i FGDC. Proszę rozważyć umieszczenie dużo czasu i wysiłku w poprawę metadanych zestawów danych (co i tak jest dobre.) . Większość atrybutów metadanych zbioru danych wykorzystywanych do generowania metadanych ISO 19115 i FGDC pochodzi zStandard metadanych ACDDi są tak zaznaczone poniżej.
    • Wiele atrybutów globalnych są szczególne w tymERDDAP™Szuka ich i używa na różne sposoby. Na przykład, link doinfoUrljest zawarty na stronach internetowych z listami zbiorów danych i innych miejsc, aby użytkownicy mogli dowiedzieć się więcej o zbiorze danych.
    • Kiedy użytkownik wybiera podzbiór danych, globalAtrybuty związane z długością, szerokość, wysokość (lub głębokość) oraz przedziały czasowe (na przykład, Southernmost\ _ Northing, Northernmost\ _ Northing, time\ _ coverage\ _ start, time\ _ coverage\ _ end) są automatycznie generowane lub aktualizowane.
    • Prosta próbka globalna<addAttributes> jest:
      <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>

Atrybut pustego cwhdf\ _ version powoduje atrybut źródła cwhdf\ _ version (jeżeli istnieje) do usunięcia z ostatecznej, połączonej listy atrybutów.

  • Dostarczanie tych informacji pomagaERDDAP™zrobić lepszą pracę i pomaga użytkownikom zrozumieć zbiory danych. Dobre metadane czynią zestaw danych użytecznym. Niewystarczające metadane czynią zbiór danych bezużytecznym. Proszę wziąć czas, aby zrobić dobrą pracę z atrybutami metadanych.
Specjalne atrybuty globalne wERDDAP™
potwierdzenie
  • potwierdzenie oraz Potwierdzenie (odACDDstandard metadanych) jest zalecanym sposobem uznania grupy lub grup, które udzieliły wsparcia (w szczególności finansowe) dla projektu, który stworzył te dane. Na przykład:
    <att name="acknowledgment">AVISO</att>

Należy zauważyć, że ACDD 1.0 i 1.1 użyły słowa "potwierdzenie" (co jest zwykłą pisownią w USA) , ale ACDD 1.3 zmienił to na "potwierdzenie" (co jest zwykłą pisownią w Wielkiej Brytanii) . Rozumiem, że zmiana była zasadniczo wypadkiem i z pewnością nie rozpoznali konsekwencji zmiany. Co za bałagan! Teraz są miliony plików danych na całym świecie, które mają "uznanie" i miliony, które mają "uznanie". Podkreśla to szaleństwo "prostych" zmian w standardzie i podkreśla potrzebę stabilności standardów. Ponieważ ACDD 1.3 (która jest wersją ACDD, żeERDDAP™wsparcie) mówi "potwierdzenie", właśnie toERDDAP™ (w szczególności GenerateDatasets Xml) Zachęca.  

cdm\ _ wysokość\ _ proxy
  • cdm\ _ wysokość\ _ proxy jest tylko dla zbiorów danych EDDTable, które nie mają zmiennej wysokości lub głębokości, ale mają zmienną, która jest pośrednikiem dla wysokości lub głębokości (na przykład, ciśnienie, sigma, butelka) , można użyć tego atrybutu do identyfikacji tej zmiennej. Na przykład:
    <att name="cdm\\_altitude\\_proxy">pressure</att>  

Jeślicdm\ _ data\ _ typejest Profil lub TrajektoryProfil i nie ma zmiennej wysokości lub głębokości, cdm\ _ wysokość\ _ proxy MUSI być zdefiniowane. Jeśli jest zdefiniowany cdm\ _ highway\ _ proxy,ERDDAP™doda następujące metadane do zmiennej:\ _ Współrzędne AxisType = Wysokość i oś = Z.  

cdm\ _ data\ _ type

CDM nadal się rozwija i może się ponownie zmienić.ERDDAP™jest zgodny z powiązanymi i bardziej szczegółowymiGeometrie do pobierania próbek dyskretnych (DSG) RozdziałCF 1.6konwencje dotyczące metadanych (poprzednio zwane konwencjami obserwacyjnymi punktów CF) .

  • Albo zbiór danych jest globalnysourceAtrybutylub jego globalny<addAttributes> MUSI zawierać atrybut cdm\ _ data\ _ type. Kilka typów zbioru danych (jak EDDTable FromObis Przewodniczący) będzie ustawić to automatycznie.
  • DlaEDDGridsety danych, opcje cdm\ _ data\ _ type to Grid (domyślne i zdecydowanie najczęściej typ dlaEDDGridzbiory danych) , MovingGrid, Other, Point, Profil, RadialSweep, TimeSeries, TimeSeriesProfile, Swath, Trajectory i TrajectoryProfil. ObecnieEDDGridnie wymaga podania żadnych powiązanych metadanych ani nie sprawdza, czy dane odpowiadają cdm\ _ data\ _ type. To prawdopodobnie zmieni się w najbliższej przyszłości.
  • EDDTable wykorzystuje cdm\ _ data\ _ type w sposób rygorystyczny, a nie CDM, które z jakiegoś powodu nie zostały zaktualizowane, aby być zgodne z DSG. Jeśli metadane zbioru danych nie spełniająERDDAPwymagania cdm\ _ data\ _ type (zob. poniżej) , zestaw danych nie będzie ładować i wygenerujekomunikat błędu. (To dobrze, że komunikat błędu powie wam, co jest nie tak, żebyście mogli to naprawić.) A jeśli dane zbioru danych nie pasują do konfiguracji metadanych zbioru danych (na przykład, jeżeli w zbiorze danych czasowych istnieje więcej niż jedna szerokość geograficzna dla danej stacji) , niektóre wnioski o dane zwrócą nieprawidłowe dane w odpowiedzi. Więc upewnij się, że wszystko będzie dobrze.

Dla wszystkich tych zbiorów danych, w konwencjach iMetadata\_Conventionsatrybuty globalne, patrz CF- 1.6 (nie CF- 1.0, 1.1, 1.2, 1.3, 1.4 lub 1.5) , ponieważ CF- 1.6 jest pierwszą wersją uwzględniającą zmiany związane z Geometrią pobierania próbek dyskretnych (DSG) konwencje.

  • ERDDAP™nie ma prostego związku z DSG CF
  • ERDDAP™może dokonać poprawnego zbioru danych DSG z zbioru danych źródłowych, który jest już prawidłowym plikiem DSG (s) , lub z zbioru danych źródłowych, który nie jest ustawiony dla DSG, ale może być tak poprzez zmiany metadanych (niektóre z nich sąERDDAP-konkretne w celu zapewnienia bardziej ogólnego podejścia do określenia konfiguracji DSG) .
  • ERDDAP™wykonuje wiele testów ważności przy załadowaniu zbioru danych. Jeśli zbiór danych z cdm\ _ data\ _ type (lubfeatureType) atrybut skutecznie ładuje wERDDAP™Więc...ERDDAP™twierdzi, że zbiór danych spełnia wymogi DSG (inaczej,ERDDAP™rzuci wyjątek wyjaśniający pierwszy problem, który znalazł) . UWAGA: Pomyślnie załadowany zbiór danych wydaje się spełniać wymogi DSG (posiada właściwą kombinację atrybutów) , ale nadal może być nieprawidłowo skonfigurowane, co prowadzi do nieprawidłowych wyników w.ncCF oraz.ncPliki odpowiedzi CFMA. (Oprogramowanie jest mądre w niektórych aspektach i nie ma pojęcia w innych.)
  • Kiedy spojrzeć na metadane zbioru danych wERDDAP™, zbiór danych DSG wydaje się być wERDDAPWewnętrzny format (olbrzymi, podobny do bazy danych stół) . Nie jest w jednym z formatów DSG (np. wymiary i metadane są niewłaściwe) , ale informacje potrzebne do traktowania zbioru danych jako zbioru danych DSG znajdują się w metadanych (na przykład cdm\ _ data\ _ type = TimeSeries i cdm\ _ timeseries\ _ variables = aCsvListOfStationRelatedVarables w metadanych globalnych i cf\ _ role = timeseries\ _ id dla niektórych zmiennych) .
  • Jeśli użytkownik żąda podzbioru zbioru danych w.ncCF (do.ncplik w formacie pliku DSG 's Contiguous Ragged Array) lub.ncPlik CFMA (a.ncplik w formacie pliku wielowymiarowego tablicy DSG) , że plik będzie ważny plik CF DSG. UWAGA: Jeżeli jednak zestaw danych został ustawiony nieprawidłowo (aby obietnice złożone przez metadane nie były prawdziwe) , wtedy plik odpowiedzi będzie technicznie poprawny, ale będzie w jakiś sposób nieprawidłowy.  
EDDTable cdm _ data _ types
  • Dla zbiorów danych EDDTable, opcje cdm\ _ data\ _ type (oraz związane z nimi wymogi w zakresieERDDAP) są
Punkt
  • Punkt-- jest dla zestawu pomiarów wykonanych w niepowiązanych czasach i miejscach.
    • Podobnie jak w przypadku wszystkich cdm\ _ data\ _ types innych niż Inne, zbiór danych punktowych MUSI mieć długość, szerokość i czas zmiennych.
Profil
  • Profil-- jest zestawem pomiarów wykonanych w jednym czasie, na jednej długości geograficznej, ale na więcej niż jednej głębokości (lub wysokość) . Zestaw danych może być zbiorem tych profili, na przykład 7 profili z różnych lokalizacji. Ten cdm\ _ data\ _ type nie oznacza żadnego logicznego połączenia pomiędzy profilami.

  • Jedna ze zmiennych (na przykład, profil\ _ number) MUSI posiadać atrybut zmiennej cf\ _ role = profil\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje profile.

    <att name="cf\\_role">profile\\_id</att>  

Jeśli żadna inna zmienna nie jest odpowiednia, należy rozważyć użycie zmiennej czasu.

cdm\ _ profil\ _ zmienne
  • Zestaw danych MUSI zawierać globalny atrybutcdm\ _ profil\ _ zmienne, gdzie wartość jest oddzieloną od comma- listą zmiennych, które posiadają informacje o każdym profilu. Dla danego profilu wartości tych zmiennych MUSI być stałe. Na przykład:
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Lista MUSI zawierać zmienną cf\ _ role = profil\ _ id i wszystkie inne zmienne z informacjami o profilu, oraz czas, szerokość i długość geograficzną. Lista nigdy nie będzie zawierać wysokości, głębokości ani żadnych zmiennych obserwacyjnych.  

\[Opinion: cdm\ _ data\ _ type = Profil powinien być rzadko stosowany. W praktyce, dany zbiór danych jest zazwyczaj albo TimeSeriesProfil (profile w stałej pozycji) lub TrajektoryProfil (profile wzdłuż trajektorii) i w związku z tym należy odpowiednio określić jako takie.\]

Seria czasu
  • Seria czasu-- jest sekwencją pomiarów (np. temperatura wody morskiej) na jednej, stałej, szerokości, długości geograficznej, głębokości (lub wysokość) lokalizacja. (Pomyśl o tym jak o "stacji".) Zestawienie danych może być zbiorem tych TimeSeries, na przykład sekwencją z każdego z 3 różnych miejsc.
    • Jedna ze zmiennych (na przykład, station\ _ id) MUSI mieć atrybut zmiennej cf\ _ role = timeseries\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje stacje.
      <att name="cf\\_role">timeseries\\_id</att>
cdm\ _ timeseries\ _ variables
  • Zestaw danych MUSI zawierać globalny atrybutcdm\ _ timeseries\ _ variables, gdzie wartość jest oddzieloną od comma- listą zmiennych, które posiadają informacje o każdej stacji. Dla danej stacji wartości tych zmiennych MUSI być stałe. Na przykład:
    <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Lista MUSI zawierać zmienną cf\ _ role = timeseries\ _ id i wszystkie inne zmienne z informacjami o stacji, która prawie zawsze zawiera szerokość i długość geograficzną (oraz wysokość lub głębokość, jeżeli występują) . Lista nigdy nie będzie zawierać czasu ani żadnych zmiennych obserwacyjnych.

  • W przypadku niektórych boji motorowych zbiór danych może mieć dwa zestawy zmiennych szerokości i długości geograficznej:
    1. Jedna para wartości szerokości i długości geograficznej, które są stałe (tj. stałe położenie cumowania) . WERDDAP™, dać te zmiennedestinationNames szerokości i długości geograficznej i włączyć te zmienne do listy cdm\ _ timeseries\ _ variables.
    2. Dokładne wartości szerokości i długości geograficznej związane z każdą obserwacją. WERDDAP™, dać te zmienne różnedestinationNames (np. preciseLat i precyzyjne Lon) i nie włączaj tych zmiennych do listy cdm\ _ timeseries\ _ variables. Uzasadnienie jest następujące: z perspektywy teoretycznej, dla zbioru danych DSG TimeSeries, szerokość i długość geograficzna (oraz wysokość lub głębokość, jeżeli występują) lokalizacja stacji MUSI być stała.
Profil TimeSeriesProfile
  • Profil TimeSeriesProfile-- jest dla sekwencji profili pobranych na jednej, stałej, długości geograficznej. Każdy profil jest zestawem pomiarów wykonanych na wielu wysokościach lub głębokościach. Zestaw danych może być zbiorem tych plików TimeSeriesProfiles, na przykład sekwencją profili pobranych w każdym z 12 różnych miejsc.
    • Jedna ze zmiennych (na przykład, station\ _ id) MUSI mieć atrybut zmiennej cf\ _ role = timeseries\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje stacje.
        <att name="cf\\_role">timeseries\\_id</att>
    • Jedna ze zmiennych (na przykład, profil\ _ number) MUSI posiadać atrybut zmiennej cf\ _ role = profil\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje profile.
      <att name="cf\\_role">profile\\_id</att>  
      (Podany profil\ _ id musi być unikalny tylko dla danego timeseries\ _ id.) Jeśli żadna inna zmienna nie jest odpowiednia, należy rozważyć użycie zmiennej czasu.
    • Zestaw danych MUSI zawierać globalAtrybuty cdm\ _ timeseries\ _ variables, gdzie wartość jest oddzieloną comma- list zmiennych, które posiadają informacje o każdej stacji. Dla danej stacji wartości tych zmiennych MUSI być stałe. Na przykład:
      <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Lista MUSI zawierać zmienną cf\ _ role = timeseries\ _ id i wszystkie inne zmienne z informacjami o stacji, która prawie zawsze zawiera szerokość i długość geograficzną. Lista nigdy nie będzie zawierać czasu, wysokości, głębokości ani żadnych zmiennych obserwacyjnych.

  • Zestaw danych MUSI zawierać globalAtrybuty cdm\ _ profile\ _ variables, gdzie wartość jest oddzieloną od comma- list zmiennych, które posiadają informacje o każdym profilu. Dla danego profilu wartości tych zmiennych MUSI być stałe. Na przykład:
    <att name="cdm\\_profile\\_variables">profile\\_number,time</att>

Lista MUSI zawierać zmienną cf\ _ role = profil\ _ id oraz wszystkie inne zmienne z informacjami o profilu, które prawie zawsze zawierają czas. Lista nigdy nie będzie zawierać szerokości geograficznej, długości geograficznej, wysokości, głębokości ani żadnych zmiennych obserwacyjnych.

Trajektoria
  • Trajektoria-- jest sekwencją pomiarów wykonanych wzdłuż trajektorii (ścieżka przez przestrzeń i czas) (np. morze\ _ woda\ _ temperatura przyjmowana przez statek podczas poruszania się przez wodę) . Zestaw danych może być zbiorem tych Trajektorii, na przykład sekwencją z każdego z 4 różnych statków.
    • Jedna ze zmiennych (na przykład statek\ _ id) MUSI posiadać atrybut cf\ _ role = trajektoria\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje trajektorie.
      <att name="cf\\_role">trajectory\\_id</att>
cdm\ _ trajektoria\ _ zmienne
  • Zestaw danych MUSI zawierać globalny atrybutcdm\ _ trajektoria\ _ zmienne, gdzie wartość jest oddzieloną od comma- listą zmiennych, które posiadają informacje o każdej trajektorii. Dla danej trajektorii wartości tych zmiennych MUSI być stałe. Na przykład:
    <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Lista MUSI zawierać zmienną cf\ _ role = trajektoria\ _ id i wszystkie inne zmienne z informacjami o trajektorii. Lista nigdy nie będzie zawierać czasu, szerokości geograficznej, długości geograficznej ani żadnych zmiennych obserwacyjnych.

Profil trajektoryName
  • Profil trajektoryName-- to sekwencja profili wziętych wzdłuż trajektorii. Zestawienie danych może być zbiorem tych profili TrajectoryProfile, na przykład sekwencją profili pobranych przez 14 różnych statków.
    • Jedna ze zmiennych (na przykład statek\ _ id) MUSI posiadać atrybut zmiennej cf\ _ role = trajektoria\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje trajektorie.
      <att name="cf\\_role">trajectory\\_id</att>
    • Jedna ze zmiennych (na przykład, profil\ _ number) MUSI posiadać atrybut zmiennej cf\ _ role = profil\ _ id w celu identyfikacji zmiennej, która jednoznacznie identyfikuje profile.
      <att name="cf\\_role">profile\\_id</att>  
      (Podany profil\ _ id musi być unikalny tylko dla danej trajektorii\ _ id.) Jeśli żadna inna zmienna nie jest odpowiednia, należy rozważyć użycie zmiennej czasu.
    • Zestaw danych MUSI zawierać globalAtrybut cdm\ _ trajektoria\ _ zmienne, gdzie wartość jest oddzieloną od comma- lista zmiennych, które mają informacje o każdej trajektorii. Dla danej trajektorii wartości tych zmiennych MUSI być stałe. Na przykład:
      <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Lista MUSI zawierać zmienną cf\ _ role = trajektoria\ _ id i wszystkie inne zmienne z informacjami o trajektorii. Lista nigdy nie będzie zawierać zmiennych związanych z profilami, czasu, szerokości, długości geograficznej lub jakichkolwiek zmiennych obserwacyjnych.

  • Zestaw danych MUSI zawierać globalAtrybuty cdm\ _ profile\ _ variables, gdzie wartość jest oddzieloną od comma- list zmiennych, które posiadają informacje o każdym profilu. Dla danego profilu wartości tych zmiennych MUSI być stałe. Na przykład:
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Lista MUSI zawierać zmienną cf\ _ role = profil\ _ id oraz wszystkie inne zmienne z informacjami o profilu, które prawie zawsze zawierają czas, szerokość i długość geograficzną. Lista nigdy nie będzie zawierać wysokości, głębokości ani żadnych zmiennych obserwacyjnych.

Inne
  • Inne-- nie ma żadnych wymagań. Użyj go, jeśli zestaw danych nie pasuje do jednej z innych opcji, w szczególności, jeśli zestaw danych nie zawiera szerokości, długości i zmiennych czasowych.  
  • Wszystkie zbiory danych EDDTable ze zmiennymi czasu i długości.
  • Zestawy danych z profilami MUSI mieć zmienną wysokości, zmienną głębokości lubcdm\ _ wysokość\ _ proxyzmienna.
  • Jeśli nie możesz zrobić zestawu danych spełniających wszystkie wymagania dla idealnego cdm\ _ data\ _ type, użyj "Point" (który ma niewiele wymagań) lub "Inne" (który nie ma żadnych wymagań) Zamiast tego.
  • Informacje te są wykorzystywane przezERDDAP™na różne sposoby, na przykład, ale głównie do tworzenia.ncPliki CF (.ncpliki, które są zgodne z Contiguous Ragged Array Reprezentations związane z plikiem dataset 's cdm\ _ data\ _ type) oraz.ncPliki CFMA (.ncpliki zgodne z wielowymiarowymi reprezentacjami tablic związanych z plikiem cdm\ _ data\ _ type) zgodnie z definicją wGeometrie do pobierania próbek dyskretnych (DSG) RozdziałCFkonwencje dotyczące metadanych, które wcześniej nazywano "konwencjami obserwacji punktów CF".
  • Podpowiedź: Dla tych zbiorów danych, prawidłowe ustawienie dlasubsetVariablesjest zazwyczaj kombinacją wszystkich zmiennych wymienionych w atrybutach cdm\ _...\ _ zmiennych. Na przykład, dla TimeSeriesProfile, użyj cdm\ _ timeseries\ _ variables plus cdm\ _ profile\ _ variables.
contributor\_name
  • contributor\_name (odACDDstandard metadanych) jest zalecany sposób identyfikacji osoby, organizacji lub projektu, który przyczynił się do tego zbioru danych (na przykład pierwotny twórca danych, zanim został ponownie przetworzony przez twórcę tego zbioru danych) . Na przykład:
        <att name="contributor\\_name">NOAA OceanWatch - Central Pacific</att>  

Jeśli "podmiot przekazujący dane" nie ma zastosowania do zbioru danych, pomiń ten atrybut. W porównaniu docreator\_nameczasami jest to bardziej skoncentrowane na źródle finansowania.

contributor\_role

Jeśli "podmiot przekazujący dane" nie ma zastosowania do zbioru danych, pomiń ten atrybut.

Konwencje
  • Konwencje (odCFstandard metadanych) ZALECA SIĘ. (Może być wymagane w przyszłości.) Wartość jest oddzieloną od comma- list standardów metadanych, które ten zbiór danych postępuje. Na przykład:
    <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>  

Wspólne konwencje metadanych stosowane wERDDAP™są:

Jeśli zbiór danych jest zgodny z dodatkowym standardem metadanych, proszę dodać nazwę do listy CSV w atrybucie konwencji.

coverage\_content\_type
  • coverage\_content\_type (odISO 19115standard metadanych) jest polecanym sposobem identyfikacji rodzaju danych zaprogramowanych (wEDDGridzbiory danych) . Na przykład:
    <att name="coverage\\_content\\_type">modelResult</att>  

Jedynymi dopuszczalnymi wartościami są pomocnicze informacje, obraz, modelResult, fizyczne Pomiar (wartość domyślna przy generowaniu metadanych ISO 19115) , qualityInformation, referenceInformation, and thematisClassification. (Nie używaj tego znacznika do zbiorów danych EDDTable.)

creator\_name
  • creator\_name (odACDDstandard metadanych) jest zalecany sposób identyfikacji osoby, organizacji lub projektu (jeżeli nie jest to konkretna osoba lub organizacja) , najbardziej odpowiedzialny za stworzenie (lub ostatnie ponowne przetwarzanie) danych. Na przykład:
    <att name="creator\\_name">NOAA NMFS SWFSC ERD</att>  

Jeżeli dane zostały szeroko przetworzone (na przykład dane satelitarne z poziomu 2 do poziomu 3 lub 4) , to zwykle reprocesor jest wymienione jako twórca i oryginalny twórca jest wymienione poprzezcontributor\_name. W porównaniu doprojekt, jest to bardziej elastyczne, ponieważ może zidentyfikować osobę, organizację lub projekt.

creator\_email
  • creator\_email (odACDDstandard metadanych) jest poleconym sposobem identyfikacji adresu e-mail (prawidłowo sformatowane) który zapewnia sposób na kontakt z twórcą. Na przykład:
    <att name="creator\\_email">erd.data@noaa.gov</att>  
creator\_url
  • creator\_url (odACDDstandard metadanych) jest poleconym sposobem identyfikacji URL dla organizacji, która stworzyła zbiór danych, lub URL z informacjami o tym zbiorze danych twórcy (ale to jest bardziej celeminfoUrl) . Na przykład:
    <att name="creator\\_url">https://www.pfeg.noaa.gov</att>  
date\_created
  • date\_created (odACDDstandard metadanych) jest zalecanym sposobem określenia daty, w której dane zostały po raz pierwszy utworzone (na przykład, przetworzone do tej formy) , w formacie ISO 8601. Na przykład:
    <att name="date\\_created">2010-01-30</att>  

Jeżeli dane są okresowo dodawane do zbioru danych, jest to pierwsza data udostępnienia oryginalnych danych.

date\_modified
  • date\_modified (odACDDstandard metadanych) jest zalecanym sposobem identyfikacji daty ostatniej modyfikacji danych (na przykład, gdy błąd został naprawiony lub kiedy dodano najnowsze dane) , w formacie ISO 8601. Na przykład:
    <att name="date\\_modified">2012-03-15</att>  
date\_issued
  • date\_issued (odACDDstandard metadanych) jest zalecanym sposobem określenia daty, w której dane zostały po raz pierwszy udostępnione innym, w formacie ISO 8601, na przykład 2012- 03- 15. Na przykład:
    <att name="date\\_issued">2010-07-30</att>  

Na przykład zbiór danych może miećdate\_created2010- 01- 30, ale został udostępniony tylko publicznie 2010- 07- 30.date\_issuedjest rzadziej stosowany niżdate\_createdorazdate\_modified. Jeślidate\_issuedjest pominięty, przyjmuje się, że jest taki sam jakdate\_created.

globalnydrawLandMask
  • drawLandMask -- Jest to globalny atrybut optyczny używany przezERDDAP™ (i brak standardów metadanych) która określa wartość domyślną dla opcji "Draw Land Mask" w formularzu Make A Graph ( datasetID .graph) i dla parametru & .land w URL z prośbą o mapę danych. Na przykład:
    <att name="drawLandMask">over</att>  

PatrzdrawLandMaskprzegląd.

featureType
  • featureType (odCFstandard metadanych) jest IGNORED i / lub Replaced. Jeśli zbiór danychcdm\ _ data\ _ typejest właściwe,ERDDAP™automatycznie użyje go do stworzeniafeatureTypeatrybut. Więc nie musisz tego dodawać.

Jednakże, jeśli pacjent stosujePliki EDDTableFromNcCFFilesdo tworzenia zbioru danych z plików, które następują poCF Geometrie do pobierania próbek dyskretnych (DSG) standard, same pliki muszą miećfeatureTypeprawidłowo zdefiniowane, tak abyERDDAP™może poprawnie odczytać pliki. Jest to część wymogów FS dla tego typu pliku.  

historia
  • historia (odCForazACDDnormy metadanych) jest globalnym atrybutem wieloliniowym z wierszem dla każdego etapu przetwarzania danych. Na przykład:
    <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>
    • Idealnie, każda linia posiada ISO 8601: 2004 (E) sformatowana data + timeZ (na przykład, 2011-08-05T08: 55: 02Z) po którym następuje opis etapu przetwarzania.
    • ERDDAP™Tworzy to, jeśli nie istnieje.
    • Jeśli już istnieje,ERDDAP™dołączy nowe informacje do istniejących informacji.
    • Historia jest ważna, ponieważ pozwala klientom cofnąć się do oryginalnego źródła danych.
infoUrl
  • infoUrl jest to globalny atrybut WYMAGANY z URL strony internetowej z więcej informacji o tym zbiorze danych (zazwyczaj na stronie internetowej instytucji źródłowej) . Na przykład:
    <att name="infoUrl">http://www.globec.org/</att>
    • Albo zbiór danych jest globalnysourceAtrybutylub jego globalny<addAttributes> MUSI zawierać ten atrybut.
    • infoUrljest ważne, ponieważ pozwala klientom dowiedzieć się więcej o danych z oryginalnego źródła.
    • ERDDAP™wyświetla link doinfoUrlw sprawie formularza dostępu do danych ( datasetID .html) , Zrób stronę wykresu ( datasetID .graph) oraz innych stron internetowych.
    • Jeśli adres URL ma część zapytania (Po "?) To musi być już% zakodowanych. Musisz zakodować specjalne znaki w ograniczeniach (inne niż początkowe '&' i główne'=', jeśli istnieje) w postaci% HH, gdzie HH jest dwucyfrową wartością szesnastkową znaku. Zazwyczaj trzeba zamienić kilka znaków interpunkcji:% na% 25, & na% 26 ", na% 22,<% 3C, =% 3D, >% 3E, +% 2B,|w% 7C,\[w% 5B,\]do% 5D, spacja do% 20 i konwertuj wszystkie znaki powyżej # 127 na ich formę UTF- 8, a następnie procent kodowania każdego bajtu formy UTF- 8 do formatu% HH (poproś programistę o pomoc) . Na przykład, &stationID> = "41004" staje się &stationID% 3E =% 2241004% 22 Procent kodowania jest na ogół wymagany przy dostępieERDDAPza pomocą oprogramowania innego niż przeglądarka. Przeglądarki zwykle zajmują się procentowym kodowaniem. W niektórych sytuacjach, trzeba procent kodowania wszystkich znaków innych niż A- Za- z0- 9\ _ -!. ~ ' () \ *, ale nadal nie koduj inicjału '&' lub głównego'='. Języki programowania mają do tego narzędzia (na przykład patrzJavajestjava.net.URLEncoder
      orazJavaSkrypt [encodeURIComponent()] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) i są strony internetowe, które procent kodowania / dekodowania dla Ciebie.
    • Oddatasets.xmljest plikiem XML, należy również & -encode ALL '&',<", i" > "w URL jako" & amp; ",<', i' & gt; 'po procentach kodowania.
    • infoUrljest unikalny dlaERDDAP. Nie pochodzi z żadnego standardu metadanych.
instytucja
  • instytucja (odCForazACDDnormy metadanych) jest globalnym atrybutem WYMAGANYM z krótką wersją nazwy instytucji, która jest źródłem tych danych (zazwyczaj akronim, zazwyczaj<20 znaków). Na przykład:
    <att name="institution">NASA GSFC</att>
    • Albo zbiór danych jest globalnysourceAtrybutylub jego globalny<addAttributes> MUSI zawierać ten atrybut.
    • ERDDAP™wyświetla instytucję za każdym razem, gdy wyświetla listę zbiorów danych. Jeżeli nazwa instytucji tutaj jest dłuższa niż 20 znaków, tylko pierwsze 20 znaków będzie widoczne na liście zbiorów danych (ale cała instytucja może być postrzegana przez umieszczenie kursora myszy nad przylegającą ikoną "?") .
    • Jeśli dodasz instytucję do listy<categoryAttributes> wERDDAPjestsetup.xmlplik, użytkownicy mogą łatwo znaleźć zestawy danych z tej samej instytucji poprzezERDDAP"Search for Datasets by Category" na stronie głównej.
słowa kluczowe
  • słowa kluczowe (odACDDstandard metadanych) to lista słów i krótkich zwrotów oddzielona od comma- (na przykład:GCMD Nauka Słowa kluczowe) które opisują zbiór danych w sposób ogólny i nie zakładają żadnej innej wiedzy o zbiorze danych (na przykład, dla danych oceanograficznych, obejmują ocean) . Na przykład:
    <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>  

Oddatasets.xmljest dokumentem XML, znakami i,<, i > w atrybucie jak słowa kluczowe (np. > znaki w GCMD nauki słowa kluczowe) muszą być zakodowane jako & amp;,<i & gt; odpowiednio. Kiedy zestaw danych jest załadowanyERDDAP,

  • "Earth Science >" dodaje się do początku każdego słowa kluczowego GCMD, które go brakuje.
  • GCMD słowa kluczowe są konwertowane do Title Case (to znaczy, pierwsze litery są kapitalizowane) .
  • Słowa kluczowe są przekształcane w sortowane kolejność i wszelkie znaki nowej linii są usuwane.  
keywords\_vocabulary
  • keywords\_vocabulary (odACDDstandard metadanych) jest atrybutem ZALECONYM: jeśli postępujesz zgodnie z wytycznymi dotyczącymi słów / zwrotów w atrybucie słów kluczowych (na przykład, GCMD Nauka Słowa kluczowe) , umieścić nazwę tej wytycznej tutaj. Na przykład:
    <att name="keywords\\_vocabulary">GCMD Science Keywords</att>  
licencja
  • licencja (odACDDstandard metadanych) jest STRONGLY ZALECA globalny atrybut z licencją i / lub ograniczenia użytkowania. Na przykład:
    <att name="license">\\[standard\\]</att>
    • Jeśli "\[standard\]"występuje w wartości atrybutu, zostanie zastąpiony przez standardERDDAP™licencji<StandardLicence > tag inERDDAPjest \[tomcat\]/ webapps / erddap / WEB- INF / classes / gov / noaa / pfel / erddap / util / messages.xml file.  
Metadata\_Conventions
  • Metadata\_Conventions pochodzi z przestarzałychACDD 1, 0 (które zidentyfikowano wMetadata\_Conventionsjako "UnidataDataset Discovery v1.0 ") standard metadanych. Wartość atrybutu była oddzieloną od comma- list konwencji metadanych używanych w tym zbiorze danych. Jeśli zbiór danych używa ACDD 1.0, atrybut ten jest ZALECANY, na przykład,
    <att name="Metadata\\_Conventions">COARDS, CF-1.6, Unidata Dataset Discovery v1.0</att>  

Ale...ERDDAP™teraz zaleca ACDD- 1.3 Jeśliprzełączanie zestawów danych do użycia ACDD- 1.3, stosowanieMetadata\_Conventionsjest STRONGLY ZAINTERESOWANY: po prostu używać [<Konwencja >] (# konwencje) Zamiast tego.

processing\_level
projekt
  • projekt (odACDDstandard metadanych) jest atrybutem optycznym pozwalającym zidentyfikować projekt, którego częścią jest zbiór danych. Na przykład:
    <att name="project">GTSPP</att>  

Jeśli zbiór danych nie jest częścią projektu, nie używaj tego atrybutu. W porównaniu docreator\_name, to koncentruje się na projekcie (nie osoby lub organizacji, które mogą być zaangażowane w wiele projektów) .

publisher\_name
  • publisher\_name (odACDDstandard metadanych) jest zalecanym sposobem identyfikacji osoby, organizacji lub projektu, który publikuje ten zbiór danych. Na przykład:
    <att name="publisher\\_name">JPL</att>  

Na przykład, jesteś wydawcą, jeśli inna osoba lub grupacreatedzestaw danych, a ty tylko go ponownie podajesz poprzezERDDAP. Jeśli "wydawca" nie odnosi się do zbioru danych, pomiń ten atrybut. W porównaniu docreator\_name, wydawca prawdopodobnie nie znacząco modyfikował lub przetwarza dane; wydawca udostępnia dane w nowym miejscu.

publisher\_email
  • publisher\_email (odACDDstandard metadanych) jest poleconym sposobem identyfikacji adresu e-mail (poprawnie sformatowane, na przykład, John\ _ smith @ greater .org) który zapewnia sposób na kontakt z wydawcą. Na przykład:
    <att name="publisher\\_email">john\\_smith@great.org</att>  

Jeśli "wydawca" nie odnosi się do zbioru danych, pomiń ten atrybut.

publisher\_url
  • publisher\_url (odACDDstandard metadanych) jest poleconym sposobem identyfikacji URL dla organizacji, która opublikowała zbiór danych, lub URL z informacji wydawcy o tym zbiorze danych (ale to jest bardziej celeminfoUrl) . Na przykład:
    <att name="publisher\\_url">https://podaac.jpl.nasa.gov</att>  

Jeśli "wydawca" nie odnosi się do zbioru danych, pomiń ten atrybut.

real\_time
  • real\_time jest globalnym atrybutem String (nie z żadnej normy) wskazanie, czy jest to zbiór danych w czasie rzeczywistym. Na przykład:
    <att name="real\\_time">true</att>  

Jeśli to fałsz (domyślny) ,ERDDAP™będzie buforować odpowiedzi na żądania dla typów plików, gdzie cały plik musi być utworzony przedERDDAP™może zacząć wysyłać odpowiedź do użytkownika i ponownie je do około 15 minut (np.,.nc, .png) . Jeśli to jest ustawione na prawdę,ERDDAP™nigdy nie buforuje plików odpowiedzi i zawsze zwraca nowo utworzone pliki.

sourceUrlatrybut
  • sourceUrl jest atrybutem globalnym z URL źródła danych. Na przykład:
    <att name="sourceUrl">https://opendap.co-ops.nos.noaa.gov/ioos-dif-sos/SOS</att>  
    (ale postaw wszystko na jednej linii)
    • ERDDAP™zwykle tworzy ten globalny atrybut automatycznie. Dwa wyjątki to EDDTableFromHyraxPliki i pliki EDDTableFromThreddsFiles.
    • Jeśli źródłem są pliki lokalne i pliki zostały utworzone przez organizację, użyj
        <att name="sourceUrl">(local files)</att>
    • Jeśli źródłem jest lokalna baza danych i dane zostały utworzone przez organizację, użyj
        <att name="sourceUrl">(local database)</att>
    • sourceUrljest ważne, ponieważ pozwala klientom cofnąć się do pierwotnego źródła danych.
    • sourceUrljest unikalny dlaERDDAP. Nie pochodzi z żadnego standardu metadanych.
standard\_name\_vocabulary
  • standard\_name\_vocabulary (odACDDstandard metadanych) jest atrybutem ZALECONYM w celu identyfikacji nazwy kontrolowanego słownika, z którego zmiennastandard\_names są zajęte. Na przykład:
    <att name="standard\\_name\\_vocabulary">CF Standard Name Table v77</att>  

dla wersji 77Tabela nazwy standardowej CF.  

subsetVariables
  • subsetVariables (wyłącznie dla zbiorów danych EDDTable) jest globalnym atrybutem ZALECONYM, który pozwala na określenie oddzielonej od comma- listy [<dataVariable>] (# datavariable) destinationNames do identyfikacji zmiennych o ograniczonej liczbie wartości (podano inny sposób: zmienne, dla których każda z wartości ma wiele duplikatów) . Na przykład:
    <att name="subsetVariables">station\\_id, longitude, latitude</att>  

Jeśli ten atrybut jest obecny, zbiór danych będzie miał datasetID .subset strona internetowa (i link do niego na każdej liście danych) które pozwala użytkownikom szybko i łatwo wybrać różne podzbiory danych.

  • Za każdym razem, gdy załadowany jest zestaw danych,ERDDAPładunki i przechowuje na dysku stół ze wszystkimi odrębnymi () kombinacje podzbioru Wartości zmiennej zmiennej.ERDDAP™może to odczytaćsubsetVariablestabeli i przetwarzania go bardzo szybko (szczególnie w porównaniu do odczytu wielu plików danych lub uzyskiwania danych z bazy danych lub innej usługi zewnętrznej) .
  • To pozwalaERDDAP™zrobić 3 rzeczy:
    1. PozwalaERDDAP™umieszczanie listy możliwych wartości na liście rozwijanej w Formularzu Dostęp do Danych, tworzenie strony internetowej Graph oraz .subset stron internetowych.
    2. PozwalaERDDAP™oferowanie strony .subset dla tego zbioru danych. Ta strona jest interesująca, ponieważ ułatwia znalezienie poprawnych kombinacji wartości tych zmiennych, które dla niektórych zbiorów danych i niektórych zmiennych są bardzo, bardzo trudne (prawie niemożliwe) . Następnie, wszystkie prośby użytkownika o odrębne () podzbiór Zmienne dane będą bardzo szybkie.
    3. Jeśli istnieje żądanie użytkownika, które odnosi się tylko do podzbioru tych zmiennych,ERDDAP™może szybko przeczytaćsubsetVariablestabelę i odpowiedź na wniosek. To może zaoszczędzić mnóstwo czasu i wysiłku dlaERDDAP.
  • KolejnośćdestinationNames można określić określa sortowanie kolejności na datasetID .subset strony internetowej, więc zazwyczaj będzie określać najważniejsze zmienne najpierw, a następnie najmniej ważne. Na przykład, dla zbiorów danych z szeregiem czasu dla kilku stacji, można użyć, na przykład,
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

tak, że wartości są sortowane przez station\ _ id.

  • Oczywiście, to jest twój wybór, które zmienne do włączenia wsubsetVariableslista, ale sugerowane użycie jest:

Ogólnie rzecz biorąc, zawierać zmienne, dla których chceszERDDAP™wyświetlanie listy rozwijanej opcji na formularzu dostępu do danych (.html) i Make- A- Graph (.graph) stron internetowych.

Ogólnie rzecz biorąc, nie zawierają zmiennych z informacjami o funkcjach zbioru danych (stacje, profile i / lub trajektorie, w szczególności zcdm\ _ timeseries\ _ variables,cdm\ _ profil\ _ zmienne,cdm\ _ trajektoria\ _ zmienne) . Istnieje tylko kilka różnych wartości dla tych zmiennych, więc działają one dobrze z listy rozwijanej.

Nigdy nie włączaj żadnych zmiennych danych związanych z indywidualnymi obserwacjami (np. czas, temperatura, zasolenie, prędkość bieżąca) wsubsetVariableslista. Istnieje zbyt wiele różnych wartości dla tych zmiennych, więc lista rozwijanych będzie wolna do wczytania i trudna do pracy z (lub nie działa) .

  • Jeśli liczba różnych kombinacji tych zmiennych jest większa niż około 1 000 000, należy rozważyć ograniczeniesubsetVariablesktóre określają, aby zmniejszyć liczbę różnych kombinacji do poniżej 1.000.000; w przeciwnym razie, datasetID .subset strony internetowe mogą być generowane powoli. W skrajnych przypadkach zestaw danych nie może być załadowanyERDDAP™ponieważ generowanie listy różnych kombinacji wykorzystuje zbyt wiele pamięci. Jeśli tak, MUSI usunąć pewne zmienne zsubsetVariableslista.
  • Jeśli liczba odrębnych wartości którejkolwiek z podgrup zmiennych jest większa niż około 20 000, należy wziąć pod uwagę, aby nie włączać tej zmiennej do listysubsetVariables; w przeciwnym razie, to zajmuje dużo czasu, aby przekazać datasetID .subset, datasetID .graph, oraz datasetID .html strony internetowe. Ponadto, na Mac, jest bardzo trudno dokonać wyboru z listy rozwijanej z ponad 500 elementów z powodu braku paska przewijania. Kompromis polega na: usuwaniu zmiennych z listy, gdy użytkownicy nie mogą wybrać wartości z listy rozwijanej.
  • Należy przetestować każdy zestaw danych, aby sprawdzić, czysubsetVariablesUstawienie jest w porządku. Jeśli serwer danych źródłowych jest powolny i trwa zbyt długo (lub nie) do pobrania danych, albo zmniejszyć liczbę podanych zmiennych lub usunąćsubsetVariablesatrybut globalny.
  • Subset Zmienne są bardzo przydatne. Więc jeśli zestaw danych jest odpowiedni, proszę utworzyćsubsetVariablesatrybut.
  • Tabela EDDFromSOSautomatycznie dodaje
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

kiedy zostanie utworzony zestaw danych.

  • Możliwe ostrzeżenie: jeśli użytkownik datasetID .subset strony internetowej wybiera wartość, która ma znak travegeReturReturn lub newline, datasetID Podzbiór zawiedzie.ERDDAP™nie może pracować wokół tego problemu z powodu niektórych szczegółów HTML. W każdym razie, prawie zawsze dobrym pomysłem jest usunięcie z danych znaków powrotu i nowej linii. Aby pomóc rozwiązać problem, jeśli EDDTable.subsetVariablesMetoda DataTable wERDDAPwykrywa wartości danych, które będą powodować problemy, będzie e-mail ostrzeżenie z listą obraźliwych wartości do e-mail Wszystko Do adresów email określonych w setup.xml. W ten sposób wiesz, co trzeba naprawić.
  • Wstępnie wygenerowane tabele podzbioru. Zazwyczaj, gdyERDDAP™ładuje zbiór danych, żąda odrębnego () subset tabeli danych zmiennych ze źródła danych, tylko poprzez zwykłe żądanie danych. W niektórych przypadkach dane te nie są dostępne ze źródła danych lub pobieranie ze źródła danych może być trudne dla serwera źródła danych. Jeśli tak, można dostarczyć tabelę z informacjami w.jsonlub .csv plik z nazwą tomcat / content / erddap / subset / datasetID .json (lub .csv) . Jeżeli występuje,ERDDAP™przeczyta go raz, gdy zestaw danych jest załadowany i użyje go jako źródła danych podset.
  • Jeśli podczas odczytu pojawi się błąd, zbiór danych nie zostanie wczytany.
  • MUSI mieć dokładnie te same nazwy kolumn (na przykład, ten sam przypadek) jako<subsetVariables>, ale kolumny MOŻE być w dowolnej kolejności.
  • Może mieć dodatkowe kolumny (zostaną usunięte i nowe zbędne wiersze zostaną usunięte) .
  • Brak wartości powinno brakować wartości (nie fałszywe numery jak -99) .
  • .jsonpliki mogą być nieco trudniejsze do stworzenia, ale radzić sobie z znaków Unicode dobrze..jsonpliki są łatwe do utworzenia, jeśli je utworzyć zERDDAP.
  • Pliki .csv są łatwe w obsłudze, ale nadają się tylko do znaków ISO 8859-1. Pliki .csv MUSI mieć nazwy kolumn w pierwszym wierszu i dane w kolejnych wierszach.
  • Dla ogromnych zbiorów danych lub kiedy<subsetVariables> jest źle skonfigurowana, tabela kombinacji wartości może być wystarczająco duża, aby spowodować błędy zbyt wiele danych lub OutOfMemory. Rozwiązaniem jest usunięcie zmiennych z listy<subsetVariables> dla których istnieje duża liczba wartości, lub usunąć zmienne w razie potrzeby, aż wielkość tej tabeli jest rozsądna. Niezależnie od błędu, częściERDDAP™które wykorzystująsubsetVariablessystem nie działa dobrze (np. strony internetowe ładują bardzo powoli) gdy jest zbyt wiele rzędów (np. ponad milion) w tym stole.
  • subsetVariablesnie ma nic wspólnego z określeniem zmiennych, których użytkownicy mogą używać w ograniczeniach, tj. jak użytkownicy mogą wymagać podzbiorów zbioru danych.ERDDAP™zawsze pozwala na stosowanie ograniczeń w odniesieniu do którejkolwiek ze zmiennych.
Jednostki czasowe

Czas i znacznik czasukolumny powinny zawierać ISO 8601: 2004 (E) sformatowana data + czas Struny Z (na przykład, 1985-01-31T15: 31: 00Z) .  

streszczenie
  • streszczenie (odCForazACDDnormy metadanych) jest to globalny atrybut WYMAGANY z długim opisem zbioru danych (zazwyczaj<500 znaków). Na przykład:
    <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>
    • Albo zbiór danych jest globalnysourceAtrybutylub jego globalny<addAttributes> MUSI zawierać ten atrybut.
    • podsumowanie jest bardzo ważne, ponieważ pozwala klientom przeczytać opis zbioru danych, który ma więcej informacji niż tytuł, a tym samym szybko zrozumieć, co jest zbiorem danych.
    • Doradztwo: proszę napisać streszczenie, aby można było opisać zbiór danych jakiejś przypadkowej osobie spotykanej na ulicy lub koledze. Pamiętaj, aby włączyćPięć W i jeden HKto stworzył zestaw danych? Jakie informacje zostały zebrane? Kiedy zebrano dane? Gdzie go zebrano? Dlaczego go zebrano? Jak go zebrano?
    • ERDDAP™wyświetla podsumowanie na formularzu dostępu do danych ( datasetID .html) , Zrób stronę wykresu ( datasetID .graph) oraz innych stron internetowych.ERDDAP™wykorzystuje podsumowanie przy tworzeniu dokumentów FGDC i ISO 19115.
testOutOfDate
  • testOutOfDate (fakultatywnyERDDAP-specyficzny atrybut globalnych metadanych, nie z żadnego standardu) określa, w uproszczony sposób, kiedy dane dotyczące zbioru danych w czasie bliskim-real- time są uważane za niedostępne, określone jakonow- nUnits na przykład:now-2 dni dla danych, które zwykle pojawiają się 24- 48 godzin po wartości czasu. Dla prognozowanych danych, użyj teraz + nUnits na przykład teraz + 6 dni dla prognozowanych danych, które są najwyżej 8 dni w przyszłości. (Patrznow- nUnits Opis składni.) Jeżeli maksymalna wartość czasu dla zbioru danych jest świeższa niż określony czas, zbiór danych jest uważany za up- to- date. Jeżeli maksymalna wartość czasu jest starsza od określonego czasu, zbiór danych jest uważany za up- to- date. W przypadku zbiorów danych poza terminem, istnieje prawdopodobnie problem ze źródłem danych, więcERDDAP™nie jest w stanie uzyskać dostępu do danych z ostatnich punktów czasowych.

WtestOutOfDatewartość jest wyświetlana jako kolumna wallDatasetszbiór danychwERDDAP. Jest również stosowany do obliczania indeksu outOfDate, który jest inną kolumną wallDatasetszestaw danych. Jeśli indeks<1, zbiór danych jest uważany za up- to- date. Jeśli indeks<= 1, zbiór danych jest uważany za niedostępny. Jeśli indeks<= 2, zbiór danych jest uważany za bardzo przestarzały.

WtestOutOfDatewartość jest również używana przezERDDAP™do generowania https://yourDomain/erddap/outOfDateDatasets.html strona internetowa (przykład) który pokazuje zbiory danych, które mają<testOutOfDate> tagi, z zestawami danych w rankingu według tego, jak są nieaktualne. Jeśli zmienisz typ pliku (od .html do .csv,.jsonlCSV,.nc,.tsv...) , można uzyskać te informacje w różnych formatach plików.

Jeśli to możliwe,GenerateDatasetsXmldodajetestOutOfDateatrybut globalnyaddAttributeszestawu danych. Wartość ta jest sugestią opartą na informacjach dostępnych GenerateDatasetsXml. Jeśli wartość nie jest odpowiednia, zmień ją.

"Out- of- date" tutaj jest bardzo różne od [<przeładowanie Każda minuta >] (# reloadeverynminutes) , który dotyczy jak up- to- dateERDDAPWiedza o zbiorze danych jest. W<testOutOfDate> system zakłada, żeERDDAPWiedza o zbiorze danych jest aktualna. Pytanie<testOutOfDate> hands with is: czy wydaje się, że jest coś nie tak ze źródłem danych, powodując, że bardziej aktualne dane nie są dostępne przezERDDAP?

tytuł
  • tytuł (odCForazACDDnormy metadanych) jest wymaganym atrybutem globalnym z krótkim opisem zbioru danych (zazwyczaj<= 95 znaków). Na przykład:
    <att name="title">VIIRSN Level-3 Mapped, Global, 4km, Chlorophyll a, Daily</att>
    • Albo zbiór danych jest globalnysourceAtrybutylub jego globalny<addAttributes> MUSI zawierać ten atrybut.
    • tytuł jest ważny, ponieważ każda lista zestawów danych prezentowanych przezERDDAP (inne niż wyniki wyszukiwania) wymienia zbiory danych w porządku alfabetycznym według tytułu. Więc jeśli chcesz określić kolejność zbiorów danych, lub mieć kilka zbiorów danych zgrupowanych razem, musisz tworzyć tytuły z myślą o tym. Wiele list zbiorów danych (na przykład w odpowiedzi na wyszukiwanie kategorii) , pokazać podzbiór pełnej listy i w innej kolejności. Więc tytuł dla każdego zbioru danych powinien być samodzielny.
    • Jeżeli tytuł zawiera słowo "DEPRECATED" (wszystkie litery kapitałowe) , wtedy zbiór danych otrzyma niższy ranking w poszukiwaniu.  
<axisVariable& gt;
  • [ ** <axisVariable> ** ] (# axisvariable) jest stosowany do opisu wymiaru (nazywane również "osią") . DlaEDDGridZestawy danych, jeden lub więcejaxisVariabletagi są WYMAGANE, i wszystkodataVariableszawsze udostępniaj / używaj wszystkich zmiennych osi. (Dlaczego? A jeśli nie?)
    Musi istnieć zmienna osi dla każdego wymiaru zmiennych danych. Zmienne osiowe MUSI być określone w kolejności, w której zmienne danych ich używają. (Zestawy danych EDDTable NIE mogą być używane<axisVariable> tagi.) Przykładem jest:

  <axisVariable>
      <sourceName\>MT</sourceName>
      <destinationName\>time</destinationName>
      <addAttributes>
        <att name="units">days since 1902-01-01T12:00:00Z</att>
      </addAttributes>
  </axisVariable>

<axisVariable> obsługuje następujące subtagi:

<sourceName\ & gt;
  • [<sourceName\ >] (# sourcename) -- nazwa źródła danych dla zmiennej. To jest imię, któreERDDAP™będzie wykorzystywać przy żądaniu danych ze źródła danych. To jest imię, któreERDDAP™będzie szukać, gdy dane są zwracane ze źródła danych. To delikatna sprawa. To jest konieczne.
<destinationName\ & gt;
  • [<destinationName\ >] (# destinationname) jest nazwą zmiennej, która zostanie pokazana i użyta przezERDDAP™użytkowników.
    • To jest optyczne. W przypadku nieobecnościsourceNamejest używany.
    • Jest to użyteczne, ponieważ pozwala na zmianę tajemniczego lub dziwnegosourceName.
    • destinationNamejest wrażliwy na przypadki.
    • destinationNameMUSI zacząć od litery (A- Z, a- z) i MUSI być następnie 0 lub więcej znaków (A- Z, a- z, 0- 9 i\ _) . ("-" było dozwolone wcześniejERDDAP™wersja 1.10.) Ograniczenie to pozwala na to, aby nazwy zmiennych osi były takie same wERDDAP™, w plikach odpowiedzi oraz we wszystkich programach, w których pliki te będą używane, w tym w językach programowania (jakPython,MatlaborazJavaSkrypt) jeżeli istnieją podobne ograniczenia dotyczące nazw zmiennych.
    • WEDDGridzbiory danych,długość, szerokość, wysokość, głębokość i czaszmienne osi są specjalne.  
axisVariable <addAttributes>
  • [<addAttributes>] (# variable- addattriates) definiuje optyczny zestaw atrybutów ( nazwa = wartość ) które są dodawane do atrybutów źródła dla zmiennej, aby połączyć atrybuty dla zmiennej. Jeśli zmienna jestsourceAtrybutylub<addAttributes> obejmująscale\_factorlubadd\_offsetatrybuty, ich wartości zostaną wykorzystane do rozpakowania danych ze źródła przed dystrybucją do klienta (wynik Wartość = źródło Wartość\ *scale\_factor+add\_offset) . Niezapakowana zmienna będzie tego samego typu danych (na przykład, float) jakoscale\_factororazadd\_offsetwartości.  
<dataVariable& gt;
  • [ ** <dataVariable> ** ] (# datavariable) jest wymagane (dla prawie wszystkich zbiorów danych) tag wewnątrz<dataset > tag, który jest używany do opisu zmiennej danych. Musi być jeden lub więcej przypadków tego znacznika. Przykładem jest:

  <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> obsługuje następujące subtagi:

<sourceName& gt;
  • [<sourceName>] (# sourcename) -- nazwa źródła danych dla zmiennej. To jest imię, któreERDDAP™będzie wykorzystywać przy żądaniu danych ze źródła danych. To jest imię, któreERDDAP™będzie szukać, gdy dane są zwracane ze źródła danych. To delikatna sprawa. To jest konieczne.
Grupy

CF dodał wsparcie dla grup o CF v1.8. Począwszy od ~ 2020,NetCDFnarzędzia wspierają umieszczanie zmiennych w grupach w.ncplik. W praktyce oznacza to, że zmienne mają długą nazwę, która identyfikuje grupę (s) oraz nazwę zmiennej, na przykład group1a / group2c / varName).ERDDAP™obsługuje grupy poprzez konwersję "/" 's w zmiennej<sourceName> w zmiennej "\ _"<destinationName>, na przykład, group1a\ _ group2c\ _ varName. (Kiedy to widzicie, powinniście zrozumieć, że grupy nie są czymś więcej niż konwencją składniową.) Kiedy zmienne są wymienione wERDDAP™wszystkie zmienne w grupie pojawią się razem, naśladując grupę bazową.\[JeśliERDDAP™, w szczególności GenerateDatasets Xml, nie działa tak dobrze, jak to możliwe z plików źródłowych, które mają grupy, proszę wysłać plik próbki do Chrisa. John w Noa.gov.\]

Zestawy plików EDDTableFromFiles mogą używać niektórych specjalnie zakodowanych pseudosourceNames do zdefiniowania nowych zmiennych danych, np. do promowania globalnego atrybutu jako zmiennej danych. Patrzta dokumentacja.

HDFStruktury

Począwszy odERDDAP™v2.12,EDDGridPliki FromNciEDDGridPliki FromNcNiezapakowany może odczytać dane z "struktur" w.nc4 oraz.hdf4 pliki. Aby zidentyfikować zmienną pochodzącą ze struktury,<sourceName> musi stosować format: fullStructureName | memberName , na przykład group1 / myStruct|Mój Członek.

Wartość stała Nazwa pożywki

W zbiorze danych EDDTable, jeśli chcesz utworzyć zmienną (o pojedynczej, stałej wartości) którego nie ma w zbiorze danych źródłowych, użyj:

    <sourceName>=*fixedValue*</sourceName>  

Znak początkowy równa się mówiERDDAP™że stałe Wartość będzie następująca.

  • Dla zmiennych liczbowych stała wartość musi być pojedynczą wartością skończoną lub NaN (nieczuły przypadek, np.\ = NaN) .
  • Dla zmiennych String stała wartość musi być pojedyncza,ciąg w stylu JSON- (ze specjalnymi znakami, które uciekły z\ znakami) , np.\ = "My\" Special\ "String".
  • Dla zmiennej timestamp podać stałą wartość jako liczbę w"seconds since 1970-01-01T00:00:00Z"i stosowanie jednostki = sekundy od 1970- 01-01T00: 00: 00Z.

Pozostałe znaczniki dla<dataVariable> działa tak, jakby była to zmienna regularna. Na przykład, aby utworzyć zmienną o stałej wartości 0,0 (float) , stosować:

<sourceName>=0</sourceName>
<destinationName\>altitude</destinationName>
<dataType>float</dataType>

W nietypowych sytuacjach można nawet określićactual\_rangeaddAttribute, który obejmie oczekiwane wartości destinationMin i destinationMax (które w przeciwnym razie byłyby równe stałej Wartość) .  

Script SourceNames / Zmienne pochodne

Począwszy odERDDAP™v2.10, wPliki EDDTableFromFiles,EDDTableFromDatabaselubNazwy EDDTableFromFileNamezestaw danych,<sourceName> może być wyrażenie (równanie wyceniane do jednej wartości) , przy użyciu formatu

    <sourceName>=*expression*</sourceName>  

lub skrypt (seria poleceń, które zwracają pojedynczą wartość) , przy użyciu formatu

    <sourceName>=*script*</sourceName>  

ERDDAP™opiera się naProjekt Apache JavaJęzyk ekspresji (JEXL) (licencja:Apache) aby ocenić wyrażenia i uruchomić skrypty. Obliczenie dla danej nowej zmiennej odbywa się w jednym wierszu wyników, wielokrotnie dla wszystkich wierszy. Wyrażenia i skrypty używająJava- orazJavaSkrypt-jak składnia i może korzystać z dowolnego z operatorzy i metody wbudowane w JEXL. Skrypty mogą również stosować metody (funkcje) z tych klas:

  • Kalendar2, który jest owijaczem dla niektórych z metod statycznych, czasowych i związanych z kalendarzem w com.cohort.util.Calendar2 (licencja) . Na przykład: Calendar2.parseToEpochSeconds ( sourceTime, data Format czasu ) będzie analizować źródło Łańcuch czasu poprzez łańcuch dateTimeFormat i zwraca"seconds since 1970-01-01T00:00:00Z" (epochSeconds) podwójna wartość.
  • Matematyka, który jest owijaczem dla prawie wszystkich statycznych, matematycznych metod wJava.lang. Matematyka. Na przykład, Math.atan2 ( y, x ) przyjmuje współrzędne prostokątne (y, x) i zwraca współrzędne biegunowe (tablicę podwójnych\[r, theta\]) .
  • Math2, który jest owijaczem dla prawie wszystkich statycznych, matematycznych metod w com.cohort.utilt. Math2 (licencja) . Na przykład: Math2.rondTo ( d, nPlaces ) zaokrągla d do określonej liczby cyfr po prawej stronie przecinka.
  • String, który daje dostęp do wszystkich statycznych, String- związane z metodami wJava.lang. String. String obiektów wERDDAP™wyrażenia i skrypty mogą używać dowolnego z ich powiązanychJavametody opisane w java.lang. Dokumentacja strun. Na przykład, String.valueOf (d) przekształci podwójną wartość d w String (chociaż można również użyć "" + d) .
  • String2, który jest owijaczem dla większości metod statycznych, String- i związanych z array- w com.cohort.util.String2 (licencja) . Na przykład, String2.zeroPad ( number, nDigits ) doda 0 w lewo od numeru String tak, że całkowita liczba cyfr jest nDigits (np. String2.zeroPad ("6", 2) wróci "06") .
  • wiersz, który posiada niestatyczne metody dostępu do danych z różnych kolumn w bieżącym wierszu tabeli danych źródłowych. Na przykład, row.columnString ("rok") odczytuje wartość z kolumny "rok" jako String, podczas gdy, row.column Int ("rok") odczytuje wartość z kolumny "rok" jako liczbę całkowitą.

Ze względów bezpieczeństwa wyrażenia i skrypty nie mogą używać innych klas niż te 6.ERDDAP™wymusza to ograniczenie poprzez utworzenie domyślnej czarnej listy (który zawiera czarną listę wszystkich klas) a potem białas (które w szczególności pozwala na 6 klas opisanych powyżej) . Jeśli potrzebujesz innych metod i / lub innych zajęć, aby wykonać swoją pracę, prosimy wysłać swoje prośby do Chrisa. John w Noa.gov.

Efektywność

Dla zbiorów danych EDDTableFromFiles istnieje tylko bardzo, bardzo minimalne (prawdopodobnie nie zauważalne) spowolnienie dla wniosków o dane z tych zmiennych. Dla EDDTableFromDatabase istnieje ogromna kara za prędkość dla wniosków, które obejmują ograniczenia tych zmiennych (np., (& Instalode0360 > 30 & Instalode0360<40) ponieważ ograniczenia nie mogą być przekazywane do bazy danych, więc baza danych musi zwrócić znacznie więcej danych doERDDAP™ (co jest bardzo czasochłonne) Więc...ERDDAP™może utworzyć nową zmienną i zastosować ograniczenie. Aby uniknąć najgorszego przypadku (jeżeli nie ma ograniczeń przekazywanych do bazy danych) ,ERDDAP™wyrzuca komunikat błędu, aby baza danych nie musiała zwracać całej zawartości tabeli. (Jeśli chcesz to obejść, dodaj ograniczenie do kolumny nieskryptowej, która zawsze będzie prawdziwa, np., & time<3000- 01- 01) Z tego powodu, z EDDTableFromDatabase, prawdopodobnie zawsze lepiej jest utworzyć kolumnę pochodną w bazie danych zamiast używaćsourceName= skryptERDDAP.

Przegląd Jak wyrazić (Lub skrypt) Jest używany:

W odpowiedzi na prośbę użytkownika o dane tabelaryczne,ERDDAP™pobiera dane z serii plików źródłowych. Każdy plik źródłowy wygeneruje tabelę surowych (prosto ze źródła) dane.ERDDAP™będzie następnie przejść przez tabelę surowych danych, wiersz po wierszu, i ocenić wyrażenie lub skrypt raz dla każdego wiersza, w celu stworzenia nowej kolumny, która ma to wyrażenie lub skrypt jakosourceName.

GenerateDatasetsXml

Uwaga: GenerateDatasets Xml jest całkowicie nieświadomy, gdy istnieje potrzeba utworzenia zmiennej z<sourceName> = wyrażenie </sourceName>. Musisz utworzyć zmienną wdatasets.xmlręcznie.

Przykłady wyrażeń:

Oto kilka kompletnych przykładów zmiennych danych, które używają wyrażenia do tworzenia nowej kolumny danych. Oczekujemy, że te przykłady (i ich warianty) będzie obejmować około 95% wykorzystania wszystkich ekspresjisourceNameb.

Łączenie oddzielnej "daty" oraz"time"kolumny w ujednoliconej kolumnie czasu:
    <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>

TosourceNamewyrażenie sprawia, że nowy"time"kolumna przez złączenie wartości String z "date" (yyyy-MM-dd) oraz"time" (HH: mm: ss) kolumny w każdym wierszu pliku źródłowego i przez konwersję tego łańcucha w"seconds since 1970-01-01" (epochSeconds) podwójna wartość.

Lub oczywiście, będziesz musiał dostosować ciąg format czasu do konkretnego formatu w każdym datach i kolumnach czasu, patrz dokumentacja jednostek czasowych.

Technicznie, nie musisz używać Calendar2.parseToEpochSeconds () do konwersji połączonej daty + czasu na epochSeconds. Możesz po prostu przekazać datę + czas String doERDDAP™i określić format (np., yyyy-MM-ddNie 'HH: mm: ss' Z ') poprzez atrybut jednostek. Ale istnieją znaczące zalety konwersji do epochSeconds - w szczególności, EDDTableFromFiles może łatwo śledzić zakres wartości czasu w każdym pliku i tak szybko zdecydować, czy szukać w danym pliku podczas odpowiedzi na żądanie, które ma ograniczenia czasowe.

Pokrewnym problemem jest potrzeba stworzenia ujednoliconej daty + kolumny czasu ze źródła z oddzielnym rokiem, miesiącem, datą, godziną, minutą, sekundą. Rozwiązanie jest bardzo podobne, ale często trzeba zeropad wiele pól, tak, że na przykład miesiąc (1 - 12) i data (1-31) zawsze mają dwie cyfry. Oto przykład z roku, miesiąca, daty:

    <sourceName>=Calendar2.parseToEpochSeconds(row.columnString("year") + 
String2.zeroPad(row.columnString("month"), 2) +
String2.zeroPad(row.columnString("date"), 2), "yyyyMMdd")</sourceName>

Pokrewnym problemem jest potrzeba stworzenia jednolitej kolumny szerokości lub długości geograficznej poprzez połączenie danych w odrębnych stopniach, minutach i sekundach tabeli źródłowej, z których każda jest zapisywana jako liczba całkowita. Na przykład:

    <sourceName>=row.columnInt("deg") + row.columnInt("min")/60.0 + 
row.columnInt("sec")/3660.0</sourceName>
Konwersja kolumny o nazwach "lon" o wartościach długości geograficznej od 0 do 360 ° na kolumnę o nazwach "long" o wartościach od -180 do 180 °
    <dataVariable>
<sourceName>=Math2.anglePM180(row.columnDouble("lon"))</sourceName>
<destinationName>longitude</destinationName>
<dataType>double</dataType>
<addAttributes>
<att name="units">degrees\\_east</att>
</addAttributes>
</dataVariable>

TosourceNamewyrażenie tworzy nową kolumnę "długość geograficzna" poprzez konwersję podwójnej wartości z kolumny "lon" w każdym wierszu pliku źródłowego (przypuszczalnie z wartościami 0 - 360) i przez przekształcenie tego w -180 do 180 podwójną wartość.

Jeśli zamiast tego chcesz przekonwertować wartości długości geograficznej źródła -180 - 180 ° na 0 - 360 °, użyj

    <sourceName>=Math2.angle0360(row.columnDouble("lon"))</sourceName>

Nazewnictwo dwóch zmiennych długości: Jeśli zbiór danych będzie miał 2 zmienne długości geograficznej, zalecamy użyciedestinationName= długość geograficzna zmiennej -180 - 180 ° orazdestinationName= 0360 (i longName =\ "Długość geograficzna 0- 360 °") dla zmiennej 0 - 360 °. Jest to ważne, ponieważ użytkownicy czasami używają Advanced Search do wyszukiwania danych w określonym przedziale długości geograficznej. To wyszukiwanie będzie działać lepiej, jeśli długość geograficzna ma stałe -180 - 180 ° wartości dla wszystkich zbiorów danych. Ponadto atrybuty geoprzestrzenne zbioru danych\ _ lon\ _ min, geoprzestrzenne\ _ lon\ _ max, Westernmost\ _ Easting i Easternmost\ _ Eastings będą ustawiane w spójny sposób (o długościach od -180 do 180 °) ;

Konwersja kolumny o nazwie "tempF" z wartościami temperatury w stopniach\ _ F do kolumny o nazwie "tempC" z temperaturami w stopniach\ _ 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>

TosourceNamewyrażenie tworzy nową kolumnę "tempC" poprzez przekształcenie stopnia float\ _ Wartość F z kolumny "tempF" w każdym wierszu pliku źródłowego do poziomu float\ _ Wartość C.

Zauważ, że Twój zestaw danych może mieć zarówno pierwotną temperaturę Zmienna F i nowa temperatura Zmienna C poprzez posiadanie innej zmiennej z

    <sourceName>tempF</sourceName>
Konwersja kolumn "prędkość" i "kierunek" na dwie kolumny z u, V części
  • Aby dokonać u zmiennej, użyj
    <sourceName>=row.columnFloat("speed") \\* Math.cos(row.columnFloat("direction"))</sourceName>
  • Aby utworzyć zmienną v, użyj
    <sourceName>=row.columnFloat("speed") \\* Math.sin(row.columnFloat("direction"))</sourceName>

Lub, pod warunkiem u, v:

  • Aby zmienić prędkość, użyj
    <sourceName>=Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[0\\]</sourceName>
  • Aby zmienić kierunek, użyj
    <sourceName>=Math.toDegrees(Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[1\\])</sourceName>
Przykład skryptu:

Oto przykład użycia skryptu, nie tylko wyrażenia, jakosourceName. Oczekujemy, że skrypty, w przeciwieństwie do wyrażeń, nie będą często potrzebne. W tym przypadku celem jest zwrócenie brakującej wartości non-NaN (- 99) dla wartości temperatury poza określonym zakresem. Zauważ, że skrypt jest częścią po "=".

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

Jeśli zmienisz wyrażenie lub skrypt zdefiniowane wsourceName, musisz ustawićflaga twardadla zbioru danychERDDAP™usuwa wszystkie informacje buforowane dla zbioru danych i ponownie odczytuje każdy plik danych (przy użyciu nowego wyrażenia lub skryptu) następnym razem, gdy załaduje zestaw danych. Alternatywnie, można użyćDasDsco odpowiada określeniu twardej flagi.

Procent kodu

Jest to jedynie rzadko istotne: Ponieważ wyrażenia i skrypty są zapisane wdatasets.xml, który jest dokumentem XML, musisz procent kodować dowolny<,\ > i & znaki w wyrażeniach i skryptach jako<, & gt; i & amp;.

Wspólne problemy

Powszechnym problemem jest stworzenie zmiennej zsourceName= wyrażenie ale wynikowa kolumna danych ma tylko brakujące wartości. Alternatywnie, niektóre wiersze nowej kolumny mają brakujące wartości i myślisz, że nie powinny. Podstawowym problemem jest to, że coś jest nie tak z wyrażeniem iERDDAPkonwertuje ten błąd na brakującą wartość. Aby rozwiązać problem,

  • Spójrz na wyrażenie, aby zobaczyć, co może być problemem.
  • Zajrzyj.log.txt, który pokaże pierwszą wiadomość o błędzie wygenerowaną podczas tworzenia każdej nowej kolumny.

Częste przyczyny to:

  • Użyłeś złej sprawy. Wyrażenia i skrypty są delikatne.
  • Pominąłeś nazwę klasy. Na przykład, musisz użyć Math.abs () , nie tylko mięśnie brzucha () .
  • Nie robiłaś konwersji typu. Na przykład, jeśli parametrem jest typ danych String i masz podwójną wartość, musisz przekonwertować podwójny na String przez "" + d.
  • Nazwa kolumny w wyrażeniu nie pasuje do nazwy kolumny w pliku (lub nazwa może być inna w niektórych plikach) .
  • Jest błąd składni w wyrażeniu (np. brakujące lub dodatkowe ") ").

Jeśli utkniesz lub będziesz potrzebował pomocy, Proszę podać szczegóły i zobaczyćrozdział dotyczący uzyskania dodatkowego wsparcia.

<destinationName& gt;
  • [<destinationName>] (# destinationname) -- nazwa zmiennej, która zostanie pokazana i użyta przezERDDAP™użytkowników.
    • To jest optyczne. W przypadku nieobecnościsourceNamejest używany.
    • Jest to użyteczne, ponieważ pozwala na zmianę tajemniczego lub dziwnegosourceName.
    • destinationNamejest wrażliwy na przypadki.
    • destinationNameMUSI zacząć od litery (A- Z, a- z) i MUSI być następnie 0 lub więcej znaków (A- Z, a- z, 0- 9 i\ _) . ("-" było dozwolone wcześniejERDDAP™wersja 1.10.) Ograniczenie to pozwala na to, aby nazwy zmiennych danych były takie same wERDDAP™, w plikach odpowiedzi oraz we wszystkich programach, w których pliki te będą używane, w tym w językach programowania (jakPython,MatlaborazJavaSkrypt) jeżeli istnieją podobne ograniczenia dotyczące nazw zmiennych.
    • W zbiorach danych EDDTable,długość, szerokość, wysokość (lub głębokość) oraz czaszmienne danych są specjalne.  
<dane Typ & gt;
  • [<Data Typ >] (# datatype) -- określa typ danych pochodzący ze źródła. (W niektórych przypadkach, na przykład, czytając dane z plików ASCII, określa on sposób przechowywania danych pochodzących ze źródła.)
    • Jest to wymagane przez niektóre typy danych i IGNORED przez inne. Typy danych, które wymagają tego dla swoichdataVariables są:EDDGridPliki From XxxFiles, EDDTableFromXxxFiles, EDDTableFromMWFS, EDDTableFromNOS, EDDTableFromSOS. Inne typy zbiorów danych ignorują ten znacznik, ponieważ otrzymują informacje ze źródła.  
    • Ważne wartości są jednym ze standardowychERDDAP™typy danychplus boolean (zob. poniżej) . Nazwy DataType są wrażliwe na przypadek.  
dane boolean
  • "boolean"to specjalny przypadek.
    • Wewnętrznie,ERDDAP™nie obsługuje typu boolean, ponieważ boolean nie może przechowywać brakujących wartości, a większość typów plików nie obsługuje boolean. Poza tym,DAPnie obsługuje boolean, więc nie byłoby standardowego sposobu na zapytanie boolean zmiennych.
    • Określanie "boolean" dla danych Rodzajdatasets.xmlspowoduje zapisywanie i reprezentowanie wartości boolean jako bajtów: 0 = false, 1 = true, 127 =missing\_value.
    • Użytkownicy mogą określić ograniczenia za pomocą wartości liczbowych (na przykład "isAlive = 1") .
    • ERDDAP™administratorzy czasami potrzebują użyć danych "boolean" Rodzajdatasets.xmlpowiedziećERDDAP™jak oddziaływać ze źródłem danych (np. do odczytu wartości boolean z relacyjnej bazy danych i konwersji ich do 0, 1 lub 127) .  
  • Jeśli chcesz zmienić zmienną danych z dataType w plikach źródłowych (na przykład, krótkie) do niektórych innych danych Typ zbioru danych (na przykład, int) , nie używaj<dataType >, aby określić, co chcesz. (Działa dla niektórych rodzajów zbiorów danych, ale nie dla innych.) Zamiast tego:
    • Stosowanie<dataType > do określenia, co znajduje się w plikach (na przykład, krótkie) .
    • W<addAttributes> dla zmiennej, dodać ascale\_factoratrybut z nowymi danymi Rodzaj (na przykład, int) oraz wartość 1, na przykład,
            <att name="scale\\_factor" type="int">1</att>  
dataVariable <addAttributes>
  • [<addAttributes>] (# variable- addattriates) -- definiuje zbiór atrybutów ( nazwa = wartość ) które są dodawane do atrybutów źródła dla zmiennej, aby połączyć atrybuty dla zmiennej. To jest optyczne. Jeśli zmienna jestsourceAtrybutylub<addAttributes> obejmująscale\_factorlubadd\_offsetatrybuty, ich wartości zostaną wykorzystane do rozpakowania danych ze źródła przed dystrybucją do klienta. Niezapakowana zmienna będzie tego samego typu danych (na przykład, float) jakoscale\_factororazadd\_offsetwartości.
Zmienna<addAttributes>
  • [ ** Atrybuty zmienne / zmienne<addAttributes> ** ] (# variable- addattriates) --<addAttributes> jest znacznikiem optycznym w obrębie<axisVariable> lub<dataVariable> tag używany do zmiany atrybutów zmiennej.

    • ** Użyj zmiennej<addAttributes> do zmiany atrybutów zmiennej. ** ERDDAP™Łączy atrybuty zmiennej ze źródła zbioru danych (** sourceAtrybuty ) i zmienną addAttributes które definiujesz wdatasets.xml (które mają pierwszeństwo) zrobić zmienną " combinedAtrybuty ** ", które są coERDDAP™Użytkownicy widzą. Tak więc, można użyćaddAttributesaby ponownie zdefiniować wartości sourceAtrybuty, dodać nowe atrybuty lub usunąć atrybuty.

    • Zobacz ** <addAttributes> Informacje] (# addattriates) które stosuje się do globalnych i zmiennych <addAttributes> ** .

    • ERDDAP™szuka i używa wielu z tych atrybutów na różne sposoby. Na przykład, wartości ColorBar są wymagane do udostępnienia zmiennej poprzezWMStak, aby mapy mogły być wykonane ze spójnych barów kolorów.

    • Długość geograficzna, szerokość geograficzna, wysokość (lub głębokość) oraz zmienne czasoweautomatycznie uzyskać wiele odpowiednich metadanych (na przykład:jednostki) .

    • Próbka<addAttributes> dla zmiennej danych jest:

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

Atrybut pusty numberOfObservations powoduje atrybut numberOfObservations (jeżeli istnieje) do usunięcia z ostatecznej, połączonej listy atrybutów.

  • Dostarczanie tych informacji pomagaERDDAP™zrobić lepszą pracę i pomaga użytkownikom zrozumieć zbiory danych. Dobre metadane czynią zestaw danych użytecznym. Niewystarczające metadane czynią zbiór danych bezużytecznym. Proszę wziąć czas, aby zrobić dobrą pracę z atrybutami metadanych.
Komentarze o atrybutach zmiennych, które są specjalne wERDDAP:
actual\_range

<att name="actual\_range" type="floatList"\>0.17 23.58</att>

  • Ten atrybut pochodzi zCDCCOARDSorazCF 1,7 +standardy metadanych.
  • Jeśli występuje, MUSI być tablicą dwóch wartości tego samego typu danych co typ danych docelowych zmiennej, określając rzeczywiste (nie teoretyczne lub dozwolone) minimalne i maksymalne wartości danych dla tej zmiennej.
  • Jeśli dane są zapakowanescale\_factorlubadd\_offset,actual\_rangemuszą mieć wartości rozpakowane i być tego samego typu danych co wartości niezapakowane.
  • Dla niektórych źródeł danych (Na przykład, wszystkie dokumenty EDDTableFrom... Zestawy danych plików) ,ERDDAP™określaactual\_rangekażdej zmiennej i ustawiaactual\_rangeatrybut. Z innymi źródłami danych (na przykład, relacyjne bazy danych, Cassandra,DAPPER,Hyrax) , może być kłopotliwe lub uciążliwe dla źródła do obliczenia zakresu, więcERDDAP™Nie żąda tego. W tym przypadku najlepiej jest ustawićactual\_range (szczególnie dla zmiennych długości, szerokości geograficznej, wysokości, głębokości i czasu) przez dodanieactual\_rangeatrybut każdej zmiennej [<addAttributes>] (# addattriates) dla niniejszego zbioru danych wdatasets.xmlna przykład:

<att name="actual\_range" type="doubleList"\>-180 180</att>

  • Dla liczbZmienne czasu i znacznika czasu, podane wartości powinny być odpowiednim źródłem (brak miejsca przeznaczenia) wartości liczbowe. Na przykład, jeśli wartości czasu źródła są przechowywane jako "dni od 1985-01-01", a następnieactual\_rangepowinien być określony w "dni od 1985-01-01". I jeśli chcesz odnosić się do TERAZ jako drugiej wartości dla danych w czasie blis- real- time, które są okresowo aktualizowane, należy użyć NaN. Na przykład, aby określić zakres danych od 1985-01-17 do TERAZ, użyj

<att name="actual\_range" type="doubleList"\>16 NaN</att>

  • Jeśliactual\_rangejest znany (albo przezERDDAP™obliczenie go lub przez dodanie go przez<addAttributes>),ERDDAP™wyświetla go użytkownikowi na formularzu dostępu do danych ( datasetID .html) i zrobić strony wykresu ( datasetID .graph) dla tego zbioru danych i używać go przy generowaniu metadanych FGDC i ISO 19115. Ponadto, ostatnie 7 dniactual\_rangesą używane jako domyślny podzbiór czasu.
  • Jeśliactual\_rangejest znany, użytkownicy mogą korzystać zmin () i max () funkcjew przypadku wniosków, co często jest bardzo przydatne.
  • Dla wszystkich tabel EDDTable... zbiory danych, jeśliactual\_rangejest znany (przez ciebie określając to lub przezERDDAP™Obliczanie go) ,ERDDAP™będzie w stanie szybko odrzucić wszelkie wnioski o dane poza tym zakresem. Na przykład, jeśli najniższa wartość czasu zbioru danych odpowiada 1985-01-17, wówczas wniosek o wszystkie dane od 1985-01-01 do 1985-01-16 zostanie natychmiast odrzucony z komunikatem błędu "Twoje zapytanie nie dało żadnych dopasowanych wyników". To czyniactual\_rangebardzo ważny kawałek metadanych, jak to może zapisaćERDDAP™dużo wysiłku i zaoszczędzić użytkownikowi dużo czasu. I to podkreśla, żeactual\_rangewartości nie mogą być węższe niż rzeczywisty zakres danych; w przeciwnym wypadku,ERDDAP™może błędnie powiedzieć "Nie ma dopasowanych danych", jeżeli w rzeczywistości istnieją odpowiednie dane.
  • Kiedy użytkownik wybiera podzbiór danych i żąda typu pliku zawierającego metadane (na przykład:.nc) ,ERDDAP™modyfikujeactual\_rangew pliku odpowiedzi, aby odzwierciedlić zakres podzbioru.
  • Patrz również:data\_minorazdata\_max, które są alternatywnym sposobem określeniaactual\_range. Jednak, są one niezalecane teraz,actual\_rangejest zdefiniowany przez CF 1,7 +.  
Atrybuty paska kolorów

Istnieje kilka atrybutów zmiennych optycznych, które określają sugerowane atrybuty domyślne dla paska kolorów (używane do konwersji wartości danych na kolory na obrazach) dla tej zmiennej.

  • Jeśli występują, informacje te są wykorzystywane jako informacje domyślne przez griddap itabledapgdy tylko zażądasz obrazu używającego paska kolorów.

  • Na przykład, gdy dane o długości geograficznej latiunde- gridded są wykreślane jako pokrycie na mapie, pasek kolorów określa jak wartości danych są konwertowane na kolory.

  • Posiadanie tych wartości pozwalaERDDAP™do tworzenia obrazów, które używają konsekwentnego paska kolorów w różnych żądaniach, nawet jeśli czas lub inne wartości wymiarów różnią się.

  • Nazwy tych atrybutów zostały stworzone do użycia wERDDAP. Nie pochodzą ze standardu metadanych.

  • Atrybuty związane z paskiem kolorów to:

    • colorBarMinimum określa minimalną wartość na pasku kolorów. Na przykład:

    <att name="colorBarMinimum" type="double"\>-5</att>

    • Jeśli dane są zapakowanescale\_factorlubadd\_offset, określićcolorBarMinimumjako wartość niezapakowana.
    • Wartości danych niższe niżcolorBarMinimumsą reprezentowane przez ten sam kolor cocolorBarMinimumwartości.
    • Atrybut powinien byćtype = "double", niezależnie od typu zmiennej danych.
    • Wartość jest zazwyczaj ładny okrągły numer.
    • Najlepsze praktyki: Zalecamy wartość nieco wyższą od minimalnej wartości danych.
    • Nie ma domyślnej wartości.
  • colorBarMaximum określa maksymalną wartość na pasku kolorów. Na przykład:

<att name="colorBarMaximum" type="double"\>5</att>

  • Jeśli dane są zapakowanescale\_factorlubadd\_offset, określićcolorBarMinimumjako wartość niezapakowana.
  • Wartości danych wyższe niżcolorBarMaximumsą reprezentowane przez ten sam kolor cocolorBarMaximumwartości.
  • Atrybut powinien byćtype = "double", niezależnie od typu zmiennej danych.
  • Wartość jest zazwyczaj ładny okrągły numer.
  • Najlepsze praktyki: Zalecamy wartość nieco niższą od maksymalnej wartości danych.
  • Nie ma domyślnej wartości.
  • kolor BarPalette Określa paletę dla barku. Na przykład:
        <att name="colorBarPalette">WhiteRedBlack</att>
  • WszystkieERDDAP™instalacje obsługują te standardowe palety: BlackBlueWhite, BlackRedWhite, BlackWhite, BlueWhiteRed, LightRainbow, Ocean, OceanDepth, Rainbow, RedWhiteBlue, ReverseRainbow, Topografia, TopographyDepth\[dodany w v1.74\]WhiteBlack, WhiteBlueBlack i WhiteRedBlack.
  • Jeśli zainstalowanododatkowe palety, można odnieść się do jednego z nich.
  • Jeśli ten atrybut nie jest obecny, domyślną wartością jest BlueWhiteRed if\ -1\ *colorBarMinimum=colorBarMaximum; w przeciwnym razie domyślną wartością jest Rainbow.
  • colorBarScale Określa skalę paska kolorów. Na przykład:
        <att name="colorBarScale">Log</att>
  • Ważne wartości to Linear i Log.
  • Jeśli wartością jest log,colorBarMinimummusi być większa niż 0.
  • Jeśli ten atrybut nie jest obecny, domyślną wartością jest Linear.
  • kolor BarContinuous Określa, czy paleta kolorów ma ciągłą paletę kolorów, czy też paleta kolorów ma kilka dyskretnych kolorów. Na przykład:
        <att name="colorBarContinuous">false</att>
  • Ważne wartości są strunami true i false.
  • Jeśli ten atrybut nie jest obecny, domyślny jest true.
  • colorBarNSections Określa domyślną liczbę sekcji na pasku kolorów. Na przykład:
        <att name="colorBarNSections" type="int">6</att>
  • Ważne wartości to dodatnie liczby całkowite.
  • Jeśli ten atrybut nie jest obecny, domyślny jest\ -1, który mówiERDDAP™wybrać liczbę sekcji na podstawie zakresu paska kolorów.
WMS

Główne wymagania dostępności zmiennej poprzezERDDAPjestWMSserwer to:

  • Zestaw danych musi byćEDDGrid... zestaw danych.
  • Zmienna danych MUSI być zmienną zawiązaną.
  • Zmienna danych MUSI mieć zmienne długości i szerokości geograficznej. (Inne zmienne osi są optyczne.)
  • Muszą istnieć pewne wartości długości między -180 a 180.
  • WcolorBarMinimumorazcolorBarMaximumAtrybuty MUSI być określone. (Inne atrybuty pasków kolorów są optyczne.)
data\_minorazdata\_max
  • data\_min oraz data\_max -- Są to przestarzałe atrybuty zmienne zdefiniowane w Eksperymencie Światowego Okrążenia Oceanu (WOCE) opis metadanych. Na przykład:

    <att name="data\_min" type="float"\>0.17</att>
    <att name="data\_max" type="float"\>23.58</att>

    • Zaleca się użycieactual\_range, zamiastdata\_minorazdata\_max, ponieważactual\_rangejest obecnie zdefiniowana w specyfikacji CF.
    • Jeżeli występują, muszą one być tego samego typu danych co typ danych docelowych zmiennej i muszą określać rzeczywiste (nie teoretyczne lub dozwolone) minimalne i maksymalne wartości danych dla tej zmiennej.
    • Jeśli dane są zapakowanescale\_factorlubadd\_offset,data\_minorazdata\_maxmuszą być rozpakowane przy użyciu typu danych.  
zmiennadrawLandMask
  • drawLandMask -- Jest to atrybut zmiennej optional używany przezERDDAP™ (i brak standardów metadanych) która określa wartość domyślną dla opcji "Draw Land Mask" w formularzu Make A Graph ( datasetID .graph) i dla parametru & .land w URL z prośbą o mapę danych. Na przykład:
        <att name="drawLandMask">under</att>  

PatrzdrawLandMaskprzegląd.

Kodowanie
  • \ _ Kodowanie
    • Atrybut ten może być używany tylko ze zmiennymi String.
    • Atrybut ten jest zdecydowanie zalecany.
    • Ten atrybut pochodzi zNetCDFPrzewodnik użytkownika (NUG) .
    • WewnętrznieERDDAP™, Strings są sekwencją 2- bajtowych znaków, które używająZestaw znaków Unicode UCS-2.
    • Wiele typów plików obsługuje tylko znaki 1-byte w Strings i tym samym potrzebuje tego atrybutu, aby zidentyfikować powiązane charset (AKA strona kodowa) która określa sposób mapowania 256 możliwych wartości do zestawu 256 znaków z zestawu znaków UCS-2 i / lub systemu kodowania, np.,UTF- 8 (który wymaga od 1 do 4 bajtów na znak) .
    • Wartości dla\ _ Kodowania są nieczułe.
    • Teoretycznie,ERDDAP™może obsługiwać identyfikatory\ _ Kodowania zta lista IANA, ale w praktyce,ERDDAP™obecnie tylko obsługuje
      • ISO- 8859-1 (Zauważ, że ma kreski, nie podkreślenia) , który ma tę zaletę, że jest identyczny z pierwszych 256 znaków Unicode, oraz
      • UTF- 8.
    • Podczas odczytu plików źródłowych domyślną wartością jest ISO- 8859-1, z wyjątkiem plików netcdf- 4, gdzie domyślną wartością jest UTF- 8.
    • Jest to ciągle problematyczny problem, ponieważ wiele plików źródłowych używa Charsetów lub kodowań, które różnią się od ISO- 8859-1, ale nie identyfikują charsetu lub kodowania. Na przykład wiele plików z danymi źródłowymi jest kopiowanych i wklejanych przez Microsoft Word w systemie Windows, a tym samym mają wyszukane hyfny i apostrofy z charsetu specyficznego dla Windowsa zamiast hyfonów i apostrofów ASCII. Te znaki pojawiają się jako znaki dziwne lub '?' wERDDAP.  
fileAccessBaseUrl
  • fileAccessBaseUrli fileAccessSuffix są bardzo rzadko używane atrybuty, które nie pochodzą z żadnego standardu. Jeśli kolumna EDDTable posiada nazwy plików dostępnych w sieci (np. pliki obrazkowe, wideo lub audio) , możesz dodać
    <att name="fileAccessBaseUrl">*someBaseURL*</a>  

aby określić bazowy adres URL (kończąc na /) konieczne do przekształcenia nazw plików w kompletne adresy URL. W nietypowych przypadkach, takich jak gdy kolumna ma odniesienia do plików .png, ale wartości brakuje.

    <att name="fileAccessSuffix">*someSuffix*</a>  

(na przykład:<att nazwa = "fileAccessSuffix" > .png</ a >) aby określić przyrostek, który ma być dodany, aby nazwy plików zostały włączone do pełnych adresów URL. Następnie.htmlTableodpowiedzi,ERDDAP™pokaże nazwę pliku jako link do pełnego adresu URL (podstawa Url plus nazwa pliku plus przyrostek) .

Jeśli chceszERDDAP™do obsługi powiązanych plików, zrobić oddzielnyNazwy EDDTableFromFileNamezbiór danych dla tych plików (może to być prywatny zestaw danych) .

fileAccessArchive Url
  • fileAccessArchive Url jest bardzo rzadko używanym atrybutem, który nie pochodzi z żadnego standardu. Jeśli kolumna EDDTable posiada nazwy plików dostępnych w sieci (np. pliki obrazkowe, wideo lub audio) które są dostępne przez archiwum (np.,.zipplik) dostępne za pośrednictwem URL, użyj<att nazwa = "fileAccessArchiveUrl" > URL </ att > podać adres URL archiwum.

Jeśli chceszERDDAP™do obsługi pliku archiwum, zrobić oddzielnyNazwy EDDTableFromFileNamezbiór danych dla tego pliku (może to być prywatny zestaw danych) .

ioos\_category
  • ioos\_category -- Jest to atrybut zmiennej WYMAGANEJ, jeśli<variablesMustHaveloosCategory > jest ustawiony na true (domyślny) wsetup.xml; w przeciwnym wypadku jest to opcja optyczna. Na przykład:<att name = "ioos\_category"> Zasolenie</ att > Kategorie są zNOAAZintegrowany system obserwacji oceanów (IOOS) .

    • (Od napisania tego) Nie znamy formalnych definicji tych nazw.
    • Podstawowe nazwy pochodzą z Zdenka Willis '.ppt "Zintegrowany system obserwacji oceanów (IOOS) NOAAPodejście do budowy początkowej zdolności operacyjnej "i zUS IOOS Blueprint (Strona 1-5) .
    • Jest prawdopodobne, że wykaz ten zostanie w przyszłości zmieniony. Jeśli masz jakieś prośby, proszę wysłać e-mail do Chrisa. John w Noah.
    • ERDDAP™obsługuje większą listę kategorii niż IOOS, ponieważ Bob Simons dodał dodatkowe nazwy (głównie oparte na nazwach pól naukowych, na przykład, Biologia, Ekologia, Meteorologia, Statystyki, Taxonomy) dla innych rodzajów danych.
    • Bieżące prawidłowe wartości wERDDAP™są Bathymetery, Biologia, Dolny charakter, CO2, Kolorowe rozpuszczone materii organicznej, Zanieczyszczenia, Currents, Rozpuszczone składniki odżywcze, Rozpuszczone O2, Ekologia, Absorpcja ryb, Gatunki ryb, Fluks ciepła, Hydrologia, Dystrybucja lodu, Identyfikator, Lokalizacja, Meteorologia, Kolor oceanu, Właściwości optyczne, Inne, Patogeny, Phytoplankton Gatunki, Pressure, Produktywność, Jakość, Sality, Poziom morza, Statystyki, Strumień Flow, Waves powierzchniowych, Taxonomy, Temperatura, Czas, Total Suspended Materia, Nieznany, Wiatr, Zooplankton Gatunki, i Zooplankton Abburgh.
    • Istnieje pewne nakładanie się i niejednoznaczność pomiędzy różnymi terminami - zrób co w twojej mocy.
    • Jeśli dodaszioos\_categorydo wykazu<categoryAttributes> wERDDAPjestsetup.xmlplik, użytkownicy mogą łatwo znaleźć zestawy danych z podobnymi danymi poprzezERDDAP"Search for Datasets by Category" na stronie głównej. Spróbuj użyćioos\_categoryposzukiwania zbiorów danych będących przedmiotem zainteresowania.
    • Nie byłodyskusja na tematERDDAP™orazioos\_categorywERDDAP™Grupa Google.

Możesz być kuszony, aby ustawić<variablesMustHaveloosCategory > do false tak, że ten atrybut nie jest wymagany. ("Pfft! Co mnie to obchodzi?") Niektóre powody, aby zostawić to ustawione na prawdziwe (domyślny) i stosowanieioos\_categorysą:

  • Jeśli setup.xml<variablesMustHaveloosCategory > jest ustawiona na true,GenerateDatasetsXmlzawsze tworzy / sugerujeioos\_categoryatrybut dla każdej zmiennej w każdym nowym zbiorze danych. Więc dlaczego po prostu tego nie zostawić?
  • ERDDAP™pozwala użytkownikom na wyszukiwanie zbiorów danych z podziałem na kategorie.ioos\_categoryjest bardzo przydatną kategorią wyszukiwania, ponieważ joos\ _ categories (na przykład, Temperatura) są dość szerokie. To czyniioos\_categoryznacznie lepsze w tym celu niż, na przykład, o wiele lepiej ziarniste CFstandard\_names (które nie są tak dobre w tym celu ze względu na wszystkie synonimy i drobne różnice, na przykład, morze\ _ powierzchnia\ _ temperatura versus morze\ _ woda\ _ temperatura) . (Stosowanieioos\_categoryw tym celu jest kontrolowany przez<categoryAttributes> w pliku setup.xml.) Spróbuj użyćioos\_categoryposzukiwania zbiorów danych będących przedmiotem zainteresowania.
  • Te kategorie są zNOAAZintegrowany system obserwacji oceanów (IOOS) . Kategorie te mają zasadnicze znaczenie dla opisu misji IOOS. Jeśli jesteś wNOAA, wsparcieioos\_categoryjest dobry Jeden...NOAACoś do zrobienia. (Patrz na to.JedenNOAAwideoi być natchnionym!) Jeśli jesteś w innej amerykańskiej lub międzynarodowej agencji, albo pracujesz z agencjami rządowymi, albo pracujesz z jakimś innym systemem obserwacji oceanów, czy to nie dobry pomysł współpracować z biurem IOOS?
  • Prędzej czy później, możesz chcieć coś innego.ERDDAP™aby połączyć się z zestawami danych poprzezEDDGridFromErddaporazEDDTableFromErddap. Jeśli drugaERDDAP™wymagaioos\_categoryTwoje zbiory danych muszą miećioos\_categoryw celuEDDGridFromErddap i EDDTableFromErddap do pracy.
  • To jest psychologicznie dużo łatwiejsze do włączeniaioos\_categorypodczas tworzenia zbioru danych (To tylko kolejna rzecz,ERDDAP™wymaga dodania zbioru danych doERDDAP) , niż dodać go po fakcie (jeśli zdecydowałeś się użyć go w przyszłości) .  
long\_name
  • long\_name (COARDS,CForazACDDnormy metadanych) jest atrybutem zmiennej ZALECONEJ wERDDAP. Na przykład:
        <att name="long\\_name">Eastward Sea Water Velocity</att>
    • ERDDAP™wykorzystujelong\_namedo etykietowania osi na wykresach.
    • Najlepsze praktyki: Capitalize słowa wlong\_nameJakby to był tytuł. (capitalize pierwsze słowo i wszystkie słowa nie-artykuł) . Nie włączaj jednostek dolong\_name. Długa nazwa nie powinna być zbyt długa (zwykle<20 znaków), ale powinny być bardziej opisowe niżdestinationName, który jest często bardzo zwięzły.
    • Jeśli "long\_name"nie jest zdefiniowana w zmiennejsourceAtrybutylub<addAttributes>,ERDDAP™będzie generować go poprzez czyszczeniestandard\_name (jeżeli występuje) lubdestinationName.  
missing\_value
  • missing\_value oraz \ _ Wypełnij Wartość (COARDSorazCF) są atrybutami zmiennymi opisującymi liczbę (na przykład, -9999) który jest używany do reprezentowania brakującej wartości. Na przykład:

<att name="missing\_value" type="double"\>-9999</att>

Dla zmiennych String domyślnie dla obu jest "" (pusty ciąg) . Dla zmiennych liczbowych domyślny jest NaN.

  • ERDDAP™wspiera obamissing\_valuei\ _ FillValue, ponieważ niektóre źródła danych przypisują im nieco inne znaczenie.
  • Jeżeli występują, powinny być tego samego typu danych co zmienna.
  • Jeśli dane są zapakowanescale\_factorlubadd\_offset,missing\_valuei\ _ FillValue powinny być podobnie zapakowane. Podobnie, dla kolumny z Datą String / wartościami czasu, które używają lokalnegotime\_zone,missing\_valuei\ _ FillValue powinny używać lokalnej strefy czasowej.
  • Jeśli zmienna używa tych wartości specjalnych,missing\_valuei / lub\ _ FillValue atrybuty są WYMAGANE.
  • DlaZmienne czasu i znacznika czasu (czy źródło jest strunami czy liczbami) ,missing\_values i\ _ FillValues pojawiają się jako "" (pusty ciąg) kiedy czas jest zapisany jako String i jako NaN kiedy czas jest zapisany jako podwójny. Wartości źródła dlamissing\_valuei\ _ FillValue nie pojawi się w metadanych zmiennej.
  • Dla zmiennych String,ERDDAP™zawsze konwertuje jakiekolwiekmissing\_values lub\ _ FillValue wartości danych w "" (pusty ciąg) . Wartości źródła dlamissing\_valuei\ _ FillValue nie pojawi się w metadanych zmiennej.
  • Dla zmiennych liczbowych: Wmissing\_valuei\ _ FillValue pojawi się w metadanych zmiennej. Dla niektórych formatów danych wyjściowych,ERDDAP™pozostawią te numery specjalne nietknięte, na przykład, zobaczysz -9999. Dla innych formatów danych wyjściowych (w szczególności tekstowe formaty jak .csv i.htmlTable) ,ERDDAP™zastąpi te specjalne numery NaN lub ".
  • Niektóre typy danych mają nieodłączne brakujące znaczniki wartości, które nie muszą być wyraźnie zidentyfikowane zmissing\_valuelub\ _ Atrybuty FillValue: zmienna zmienna zmienna zmienna zmienna zmienna zmienna zmienna zmienna zmienna i zmienna podwójna mają NaN (Nie numer) , Wartości strun używają pustego łańcucha, a wartości char mają charakter\uffff (znak # 65535, który jest wartością Unicode dla not a Character) . Typy danych Integer nie mają nieodłącznych brakujących markerów wartości.
  • Jeśli zmienna całkowita ma brakującą wartość (np. pusta pozycja w pliku .csv) ,ERDDAP™zinterpretuje wartość jako zdefiniowanąmissing\_valuelub\ _ FillValue dla tej zmiennej. Jeżeli żaden nie jest zdefiniowany,ERDDAP™będzie interpretować wartość jako domyślną brakującą wartość dla danego typu danych, która jest zawsze wartością maksymalną, która może być przechowywana przez ten typ danych: 127 dla zmiennych bajtowych, 32767 dla krótkich, 2147483647 dla int, 9223372036854775807 przez długi czas, 255 dla ubyte, 65535 dla ushort, 4294967295 dla uint i 18446744073709551615 dla ulong.
ADD \_FillValue ATTRIBUTES?
  • ADD \_FillValue ATTRIBUTES?
    Za każdym razemERDDAP™ładuje zbiór danych, sprawdza czy zmienne z typami danych źródłowych liczb całkowitych mają zdefiniowanymissing\_valuelub atrybut\ _ FillValue. Jeśli zmienna nie, wtedyERDDAP™drukuje wiadomość do pliku dziennika (zaczynając od "Add\ _ FillValue Atribution?") zalecając, żeERDDAP™administrator dodaj\ _ Wypełnij Atrybut wartości tej zmiennej wdatasets.xml. Jest bardzo przydatne, aby każda zmienna miała\ _ FillValue lubmissing\_valueponieważ brakujące wartości są zawsze możliwe, np. jeśli dany plik w zbiorze danych nie ma danej zmiennej,ERDDAP™musi być w stanie przedstawić tę zmienną jako posiadającą wszystkie brakujące wartości dla tej zmiennej. Jeśli zdecydujesz, że zmienna nie powinna mieć atrybutu\ _ FillValue, możesz dodać <att names = "\ _ FillValue" > null</ att > zamiast tego, który zatłumi wiadomość dla tegodatasetID+ kombinacja zmiennych w przyszłości.

Za każdym razemERDDAP™rozpoczyna się, zbiera wszystkie te zalecenia do wiadomości, która jest zapisywana do pliku dziennika (zaczynając od "ADD \_FillValue ATTRIBUTES? ") , email doERDDAP™administrator, i napisane do pliku danych CSV w\[bigParentDirectory\]/ logi / katalog. Jeśli chcesz, możesz użyć programu GenerateDatasetsXml (oraz opcja AddFillValueAtrybuty) do zastosowania wszystkich sugestii w pliku CSV dodatasets.xmlplik. Dla którejkolwiek zdatasetID/ kombinacje zmiennych w tym pliku, jeśli zdecydujesz, że nie ma potrzeby dodawania przypisanego atrybutu, możesz zmienić atrybut<att names = "\ _ FillValue" > null</ att > w celu stłumienia zaleceniadatasetID+ kombinacja zmiennych w przyszłości.

To ważne! Jak często mawiał Bob: byłoby źle. (i żenujące) jeżeli niektóre dowody globalnego ocieplenia były spowodowane niezidentyfikowanymi brakującymi wartościami w danych (np. wartości temperatur 99 lub 127 stopni\ _ C, które powinny być oznaczone jako brakujące wartości, a tym samym wypaczyć średnie i / lub mediana statystyki wyższe) .

  • \ _ FillValue imissing\_valuewartości dla danej zmiennej w różnych plikach źródłowych muszą być spójne; w przeciwnym wypadku,ERDDAP™akceptuje pliki z jednym zbiorem wartości i odrzuca wszystkie pozostałe pliki jako "złe pliki". Aby rozwiązać problem,
    • Jeśli pliki są zablokowane.ncpliki, możesz użyćEDDGridFromNcFilesUnpacked.
    • Jeśli pliki są plikami tabelarycznymi, możesz użyć EDDTableFrom... 'standaryzacja Co?powiedziećERDDAPdo standaryzacji plików źródłowych, jak są one odczytywaneERDDAP.
    • Dla trudniejszych problemów, można użyćNcMLlubNCOrozwiązać problem.  
scale\_factor
  • scale\_factor (domyślny = 1) oraz add\_offset (domyślny = 0) (COARDSorazCF) są atrybutami zmiennej optycznej opisującymi dane, które są pakowane w prostszy typ danych poprzez proste przekształcenie.
    • Jeżeli występują, ich typ danych różni się od typu danych źródłowych i opisuje typ danych wartości docelowych. Na przykład, źródło danych może mieć zapisane wartości danych zmiennoprzecinkowych z jedną cyfrą dziesiętną zapakowaną jako krótkie litery (int16) , przy użyciuscale\_factor= 0, 1 iadd\_offset= 0. Na przykład,

    <att name="scale\_factor" type="float"\>0.1</att>
    <att name="add\_offset" type="float"\>0</att>

W tym przykładzie:ERDDAP™rozpakowuje dane i przedstawia je użytkownikowi jako wartości danych zmiennoprzecinkowych.

  • Jeżeli występuje,ERDDAP™wyciąga wartości z tych atrybutów, usuwa atrybuty i automatycznie rozpakowuje dane dla użytkownika: miejsce przeznaczenia Wartość = źródło Wartość\ *scale\_factor+add\_offset
    Albo w inny sposób: unpackedValue = spakowany Wartość\ *scale\_factor+add\_offset
  • Wscale\_factororazadd\_offsetwartości dla danej zmiennej w różnych plikach źródłowych muszą być spójne; w przeciwnym wypadku,ERDDAP™akceptuje pliki z jednym zbiorem wartości i odrzuca wszystkie pozostałe pliki jako "złe pliki". Aby rozwiązać problem,
    • Jeśli pliki są zablokowane.ncpliki, możesz użyćEDDGridFromNcFilesUnpacked.
    • Jeśli pliki są plikami tabelarycznymi, możesz użyć EDDTableFrom... 'standaryzacja Co?powiedziećERDDAPdo standaryzacji plików źródłowych, jak są one odczytywaneERDDAP.
    • Dla trudniejszych problemów, można użyćNcMLlubNCOrozwiązać problem.  
standard\_name
  • standard\_name (odCFstandard metadanych) jest atrybutem zmiennej ZALECONEJ wERDDAP. CF utrzymuje listę dozwolonychNazwa standardowa CF. Na przykład:
        <att name="standard\\_name">eastward\\_sea\\_water\\_velocity</att>
    • Jeśli dodaszstandard\_namedo atrybutów zmiennych i dodaćstandard\_namedo wykazu<categoryAttributes> wERDDAPjestsetup.xmlplik, użytkownicy mogą łatwo znaleźć zestawy danych z podobnymi danymi poprzezERDDAP"Search for Datasets by Category" na stronie głównej.
    • Jeśli podasz CFstandard\_namedla zmiennej atrybut jednostek dla zmiennej nie musi być identyczny z jednostkami kanonicznymi określonymi dla nazwy standardowej w tabeli nazw standardowych CF, ale jednostki MUSI być zamienne do jednostek kanonicznych. Na przykład wszystkie CF związane z temperaturąstandard\_names mają "K". (Kelvin Przewodniczący) jako jednostki kanoniczne. Więc zmienna z temperaturąstandard\_nameMUSI mieć jednostki K, stopnia\ _ C, stopnia\ _ F, lub jakiś wariant UDUnits tych nazw, ponieważ wszystkie są interkabriolet.
    • Najlepsze praktyki: Część mocysterowane słownikipochodzi z używania tylko terminów na liście. Więc zalecamy trzymać się terminów zdefiniowanych w kontrolowanym słowniku, i zalecamy nie wymyślanie terminu, jeśli nie ma odpowiedniego na liście. Jeśli potrzebujesz dodatkowych warunków, sprawdź, czy komitet normalizacyjny doda je do kontrolowanego słownictwa.
    • standard\_namewartości są jedynymi wartościami atrybutów CF, które są wrażliwe na przypadek. Zawsze są małe. PoczątekERDDAP™v1.82, GenerateDatasets przekonwertuje litery na małe litery. A kiedy zestaw danych jest załadowanyERDDAP, litery duże są po cichu zmieniane na małe litery.  
time\_precision
  • time\_precisionjest atrybutem optycznym używanym przezERDDAP™ (i brak standardów metadanych) zamiastZmienne czasu i znacznika czasu, które mogą być w zbiornikach danych lub zestawach danych tabelarycznych, orazaxisVariables lubdataVariableb. Na przykład:
        <att name="time\\_precision">1970-01-01</att>  
    time\_precisionOkreśla precyzję, która ma być zastosowanaERDDAP™formatuje wartości czasowe z tej zmiennej jako łańcuchy na stronach internetowych, w tym.htmlTableodpowiedzi. W formatach plików gdzieERDDAP™formaty razy jako łańcuchy (na przykład .csv i.json) ,ERDDAP™tylko używatime\_precision-określony format, jeśli zawiera ułamkowe sekundy; inaczej,ERDDAP™wykorzystuje 1970- 01- 01T00: 00: 00 Format Z.
  • Ważne wartości to 1970- 01, 1970- 01- 01, 1970- 01-01T00Z, 1970- 01-01T00: 00Z, 1970- 01-01T00: 00: 00Z (domyślny) , 1970- 01-01T00: 00: 00.0Z, 1970- 01-01T00: 00: 00.00Z, 1970- 01-01T00: 00: 00.000Z.\[1970 nie jest opcją, ponieważ jest to jedna liczba, więcERDDAP™nie wiem czy to sformatowany ciąg czasu (rok) lub jeśli jest to jakaś liczba sekund od 1970- 01-01T00: 00: 00Z.\]
  • Jeślitime\_precisionnie jest podana lub wartość nie jest dopasowana, wartość domyślna zostanie użyta.
  • Tutaj, jak w innych częściachERDDAP™, wszelkie pola sformatowanego czasu, które nie są wyświetlane, mają wartość minimalną. Na przykład, 1985-07, 1985-07-01, 1985-07-01T00Z, 1985-07-01T00: 00Z i 1985-07-01T00: 00: 00 Z są uważane za równoważne, choć z różnych poziomów precyzji implikowane. To pasuje doISO 8601: 2004"extended"Specyfikacja formatu czasu.
  • OSTRZEŻENIE: Należy stosować tylko ograniczone dawkitime\_precisionjeżeli wszystkie wartości danych dla zmiennej mają tylko minimalną wartość dla wszystkich ukrytych pól.
  • Na przykład, można użyćtime\_precisionz 1970- 01- 01, jeśli wszystkie wartości danych mają godzinę = 0, minuta = 0, a drugi = 0 (na przykład 2005-03-04T00: 00: 00Z i 2005-03-05T00: 00: 00Z) .
  • Na przykład, nie używaćtime\_precisionz 1970- 01- 01, jeśli nie ma wartości -0 godzin, minut lub sekund, (na przykład 2005-03-05T12: 00: 00Z) ponieważ nie zostanie wyświetlona wartość godziny niedomyślnej. W przeciwnym razie, jeśli użytkownik poprosi o wszystkie dane z czasem = 2005-03-05, żądanie nieoczekiwanie zawiedzie.  
time\_zone
  • time\_zone
    • time\_zonejest atrybutem optycznym używanym przezERDDAP™ (i brak standardów metadanych) zamiastZmienne czasu i znacznika czasu, które mogą być ujęte w zbiornikach danych lub zestawach danych tabelarycznych.
    • Domyślnie jest "Zulu" (która jest nowoczesną wersją strefy czasowej GMT) .
    • Informacje ogólne: "przesunięcia czasowe" (np., Pacific Standard Time, -08: 00, GMT- 8) są stałe, specyficzne, offsety względemZulu (GMT) . Natomiast "strefy czasowe" to o wiele bardziej skomplikowane rzeczy, na które wpływa oszczędzanie światła dziennego (np. "US / Pacific") , które miały różne zasady w różnych miejscach w różnych czasach. Strefy czasowe zawsze mają nazwy, ponieważ nie mogą być podsumowane przez prostą wartość offsetową (patrz kolumna "Nazwy baz danych TZ" w tabeli https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones ) .ERDDAPjesttime\_zoneatrybut pomaga uporać się z danymi czasu lokalnego z jakiejś strefy czasowej (np. 1987- 03- 25T17: 32: 05 Pacyfik Czas) . Jeśli posiadasz dane z łańcuchem lub liczbami (stałe) przesunięcie czasu, należy po prostu dostosować dane doZulu (co jest coERDDAP™chce) poprzez określenie innego czasu bazowego w atrybucie jednostek (np. "godziny od 1970- 01-01T08: 00: 00Z", zauważyć T08, aby określić przesunięcie czasu) i zawsze sprawdzaj wyniki, aby zapewnić uzyskanie wyników, które chcesz.
    • Dla zmiennych timestamp z danymi źródłowymi ze Strings atrybut ten pozwala określić strefę czasową, która prowadziERDDAP™aby przekonwertować czas-strefa źródłowa (niektóre w czasie standardowym, niektóre w czasie dziennym) doZulurazy (które są zawsze w czasie standardowym) . Lista ważnych nazw stref czasowych jest prawdopodobnie identyczna z listą w kolumnie TZ https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones . Wspólne strefy czasowe USA to: US / Hawaje, US / Alaska, US / Pacific, US / Mountain, US / Arizona, US / Central, US / Eastern.
    • Dla zmiennych timestamp z numerycznymi danymi źródłowymi można określić "time\_zone"atrybut, ale wartość musi być"Zulu"lub" UTC ". Jeśli potrzebujesz wsparcia dla innych stref czasowych, proszę wysłać e-mail do Chrisa. John w Noa.gov.  
jednostki
  • jednostki (COARDS,CForazACDDstandard metadanych) określa jednostki wartości danych. Na przykład:
        <att name="units">degree\\_C</att>
    • "jednostki" są wymagane albo jako sourceAtribution lub addAttribute dla"time"zmienne i jest STRONGLY ZALECA dla innych zmiennych, w stosownych przypadkach (która jest prawie zawsze) .

    • Ogólnie, zalecamyJednostki UDUnits\ -kompatybilne jednostki, które są wymagane przezCOARDSorazCFstandardy.

    • Innym wspólnym standardem jestUCUM-- ujednolicony kodeks jednostek miary.OGCusługi takie jak:SOS,WCSorazWMSwymagają UUM i często odnoszą się do UUM jako UOM (Jednostki miary) .

    • Zaleca się stosowanie jednego standardu jednostek dla wszystkich zbiorów danychERDDAP. Powinieneś powiedziećERDDAP™którego standardu używasz z<jednostek\ _ standard >, w Twoimsetup.xmlplik.

    • Jednostki dla danej zmiennej w różnych plikach źródłowych muszą być spójne. Jeżeli posiadasz zbiór plików danych, w których jeden podzbiór plików wykorzystuje różne wartości jednostek niż jeden lub więcej innych podzbiór plików (na przykład: "dni od 1985-01-01" versus "dni od 2000-01-01", "stopień\ _ Celsjusza" kontra "deg\ _ C", lub "węzły" kontra "m / s") musisz znaleźć sposób standaryzacji wartości jednostek, inaczej,ERDDAP™załaduje tylko jeden podzbiór plików. Pomyśl o tym: jeśli jeden plik ma jednostki windSpeed = węzły, a drugi ma jednostki windSpeed = m / s, to wartości z dwóch plików nie powinny być włączone do tego samego zagregowanego zbioru danych.

      • Jeśli pliki są zablokowane.ncpliki, w wielu sytuacjach można użyćEDDGridFromNcFilesUnpacked.
      • Jeśli pliki są plikami tabelarycznymi, w wielu sytuacjach można użyć EDDTableFrom... 'standaryzacja Co?powiedziećERDDAPdo standaryzacji plików źródłowych, jak są one odczytywaneERDDAP.
      • Dla trudniejszych problemów, można użyćNcMLlubNCOrozwiązać problem.
    • Sekcja 8.1 normy CF mówi, że jeśli dane zmiennej są pakowane przezscale\_factorlubadd\_offset"Jednostki zmiennej powinny być reprezentatywne dla niezapakowanych danych".

    • Dla zmiennych czasu i znacznika czasu,albo zmiennąsourceAtrybutylub<addAttributes> (która ma pierwszeństwo) Must havejednostkico jest albo

      • Dla zmiennych osi czasu lub zmiennych czasu z danymi liczbowymi:Jednostki UDUnits\ -zgodny ciąg (z formatem jednostki od baseTime ) opis interpretacji wartości czasu źródła (na przykład, sekundy od 1970- 01-01T00: 00: 00Z) .

      jednostki może być jednym z:

          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.

Technicznie rzecz biorąc,ERDDAP™NIE podąża zaUDUNITSstandard przy konwersji"years since"oraz"months since"wartości czasowe"seconds since". WUDUNITSstandard definiuje rok jako stałą, pojedynczą wartość: 3.15569259747e7 sekund. IUDUNITSdefiniuje miesiąc jako rok / 12. Niestety, większość / wszystkie zbiory danych, które widzieliśmy, że używać"years since"lub"months since"wyraźnie planują, aby wartości były latami kalendarzowymi lub miesiącami kalendarzowymi. Na przykład, 3"months since 1970-01-01"zazwyczaj oznacza 1970- 04- 01. Więc,ERDDAP™interpretacje"years since"oraz"months since"jako lata kalendarzowe i miesiące, i nie ściśle przestrzegaćUDUNITSstandard.

W baseTime musi być ISO 8601: 2004 (E) sformatowany łańcuch czasu daty (yyyy-MM-ddNIE 'HH: mm: ssZ, na przykład, 1970- 01-01T00: 00: 00Z) lub jakaś zmiana tego (na przykład, z brakującymi częściami na końcu) .ERDDAP™próbuje pracować z szerokim wachlarzem odmian tego idealnego formatu, na przykład "1970- 1-1 0: 0: 0" jest obsługiwane. Jeżeli brakuje informacji o strefie czasowej, przyjmuje się, żeZulustrefa czasowa (AKA GMT) . Nawet jeśli podano inne przesunięcie czasowe,ERDDAP™nigdy nie używa Daylight Saving Time. Jeśli BaseTime używa innego formatu, należy użyć<addAttributes> aby określić nowy ciąg jednostek wykorzystujący zmianę ISO 8601: 2004 (E) format (np. zmiana dni od 1 stycznia 1985 r. na dni od 1985 r. - 01- 01.

Możesz przetestowaćERDDAPumiejętności radzenia sobie z konkretnymi jednostki od baseTime zERDDAPjestKonwersja czasu. Mam nadzieję, że możesz podłączyć liczbę (pierwsza wartość czasu ze źródła danych?) i ciąg jednostek, kliknij Konwertuj iERDDAP™będzie w stanie przekształcić go w ISO 8601: 2004 (E) sformatowany łańcuch czasu daty. Konwerter zwróci komunikat błędu, jeśli ciąg jednostek nie jest rozpoznawalny.

Jednostki czasowe strun

Dla powszechnie stosowanych formatów czasowych, które są zmianami ISO 8601: 2004 (E) format standardowy (na przykład, 2018-01-02T00: 00: 00Z) , można określić wariantyyyyy-MM-ddNIE 'HH: mm: ssZ, na przykład, używaćyyyy-MM-ddjeśli czas łańcucha ma tylko datę. dla każdego formatu rozpoczynającego się od yyyyyy- M,ERDDAPużywa specjalnego parsera, który jest bardzo wyrozumiały drobnych zmian w formacie. Parser może obsługiwać strefy czasowe w formacie "Z", "UTC", "GMT", ± XX: XX, ± XXXX i ± XX. Jeżeli nie określono części daty (na przykład, minuty i sekundy) ,ERDDAP™przyjmuje najniższą wartość dla tego pola (np. jeśli sekundy nie są określone, przyjmuje się sekundy = 0) .

Dla wszystkich innych formatów czasu łańcuchowego należy dokładnie określić łańcuch formatu czasu kompatybilny z DateTimeFormatter-. Jakyyyy-MM-ddNIE 'HH: mm: ssZ, te struny formatu są zbudowane z znaków, które identyfikują określony rodzaj informacji z łańcucha czasu, np. m oznacza minute -of-hour. Jeśli powtórzysz znak formatu kilka razy, to dodatkowo udoskonali znaczenie, np. m oznacza, że wartość może być określona dowolną liczbą cyfr, mm oznacza, że wartość musi być określona przez dwie cyfry. WJavadokumentacja dla DateTimeFormatter jest surowym przeglądem i nie wyjaśnia tych szczegółów. Oto lista zmian formatów znaków i ich znaczenie wERDDAP™ (co czasami nieco różni się odJavaDateTimeFormatter) :

ZnakiPrzykładyZnaczenie
u, y, Y\ -4712, 0, 1, 10, 100, 2018liczbę roku, dowolną liczbę cyfr.ERDDAP™Leczenie (year-of-era) i Y (week- based- year, ponieważ często jest to błędnie używane zamiast y) jako u,liczba lat astronomicznych. Astronomiczne lata są dodatnie lub ujemne liczby całkowite, które nie korzystają z BCE (BC) lub CE (AD) Oznaczenie ery: 2018 = 2018CE,..., 2 = 2CE, 1 = 1CE, 0 = 1BCE, -1 = 2BCE, -2 = 3BCE,...
Uuuu, yyy, RRRR(Dz.U. L 298 z 26.10.2012, s. 1).4-cyfrowy numer astronomiczny roku (ignorując wszelkie poprzednie '-')
do1, 01, 12liczba miesięczna, każda liczba cyfr (1 = styczeń)
MM01, 122 cyfry (zero wyścielonych) numer miesiąca
MMMJan, jan, JAN3-literowa angielska nazwa miesiąca, nieczuła sprawa
MMMMJan, jan, JAN, styczeń, styczeń, STYCZEŃ3-literowa lub pełna angielska nazwa miesiąca, niedelikatna sprawa
d1, 01, 31liczba dni miesiąca, każda liczba cyfr
dd01, 312 cyfry (zero wyścielonych) Dzień miesiąca. Pierwsza cyfra może być przestrzenią.
D1, 001, 366liczba cyfr, 001 = styczeń 1
DDD001, 366dzień - rok, 3 cyfry, 001 = styczeń 1
EEEz3-literowy dzień-tygodnia, wartość jest ignorowana podczas parsowania
EEEThu, Thu, Thu, Thursday, Thursday, Thursday3 literowe lub pełne angielski dzień-tygodnia, przypadek niewrażliwy, wartość jest ignorowana podczas parsowania
H0, 00, 23H godzina dnia (0- 23) , dowolną liczbę cyfr
HH00, 23HH hour-of-day (00- 23) 2 cyfry. Pierwsza cyfra może być przestrzenią.
aam, AM, pm, PMAM lub PM, niewrażliwe na przypadek
h12, 1, 01, 11Zegar - godzina - godzina - godzina (12, 1, 2,... 11) , dowolną liczbę cyfr
hh12, 01, 11Zegar - godzina - godzina - godzina (12, 1, 2,... 11) 2 cyfry. Pierwsza cyfra może być przestrzenią.
K0, 1, 11Godzina - godzina - godzina (0, 1,... 11) , dowolną liczbę cyfr
KK00, 01, 11godzina - godzina - godzina - godzina, 2 cyfry
m0, 00, 59minute- of- hour, dowolną liczbę cyfr
mm00, 592 cyfry
s0, 00, 59second- of- minute, dowolną liczbę cyfr
ss00, 59second- of- minute, 2 cyfry
S0, 000, 9, 999frakcja -of- second, jak gdyby po przecinku, dowolną liczbę cyfr
SS00, 99Setki sekund, 2 cyfry
SSS000, 999tysiące sekund, 3 cyfry
A0, 0000, 86399999millisecond- of- day, dowolną liczbę cyfr
AAAAAAAA00000000, 86399999milisekunda - dnia, 8 cyfr
N0, 00000000000000, 86399999999999nanosekundowy dzień, dowolną liczbę cyfr. WERDDAP™, to jest skrócone do nMillis.
NNNNNNNNNNNNNNN000000000000, 86399999999999Nanosekundowy dzień, 14 cyfr. WERDDAP™To jest skrócone do nMillis.
n0, 00000000000, 59999999999nanosekunda, każda liczba cyfr. WERDDAP™To jest skrócone do nMillis.
nnnnnnnnnnnnn00000000000, 59999999999Nanosekunda, 11 cyfr. WERDDAP™To jest skrócone do nMillis.
XXX, ZZZZ, -08: 00, + 01: 00strefa czasowa o formacie "Z" lub ± (2-cyfrowy przesunięcie godziny) : (2-cyfrowy offset minut) . To traktuje spacja jako + (niestandardowe) . ZZZ obsługujący 'Z' nie jest standardem, ale zajmuje się częstym błędem użytkownika.
XX, ZZZ -0800, + 0100strefa czasowa o formacie "Z" lub ± (2-cyfrowy przesunięcie godziny) : (2-cyfrowy offset minut) . To traktuje spacja jako + (niestandardowe) . ZZ wspierający 'Z' jest niestandardowy, ale zajmuje się częstym błędem użytkownika.
X, ZZ, -08, + 01strefa czasowa o formacie "Z" lub ± (2-cyfrowy przesunięcie godziny) : (2-cyfrowy offset minut) . To traktuje spacja jako + (niestandardowe) . Z support 'Z' nie jest standardem, ale zajmuje się częstym błędem użytkownika.
xxx\ -08: 00, + 01: 00strefa czasowa o formacie ± (2-cyfrowy przesunięcie godziny) : (2-cyfrowy offset minut) . To traktuje spacja jako + (niestandardowe) .
xx\ -0800, + 0100strefa czasowa o formacie ± (2-cyfrowy przesunięcie godziny) (2-cyfrowy offset minut) . To traktuje spacja jako + (niestandardowe) .
x\ -08, + 01strefa czasowa o formacie ± (2-cyfrowy przesunięcie godziny) . To traktuje spacja jako + (niestandardowe) .
'Nie "," Z "," GMT "początek i koniec serii znaków dosłownych
'' (dwa pojedyncze kwotowania)''dwa pojedyncze cytaty oznaczają dosłowny pojedynczy cytat
\[\]\[ \]początek ("\[") i koniec ("\]") sekcji fakultatywnej. Notacja ta jest obsługiwana tylko dla znaków dosłownych i na końcu łańcucha formatu.
#, & # 123;, & # 125;#, & # 123;, & # 125;zarezerwowane do przyszłego użytku
G, L, Q, e, c, V, z, O, pTe formatowanie znaków są obsługiwane przezJavaDateTimeFormatter, ale obecnie nie obsługiwane przezERDDAP. Jeśli potrzebujesz dla nich wsparcia, napisz do Chrisa. John w Noa.gov.

Uwagi:

  • W czasie z interpunkcją wartości liczbowe mogą mieć zmienną liczbę cyfr (na przykład, w formacie US slash date "1 / 2 / 1985", miesiąc i data mogą być 1 lub 2 cyfry) Format ten musi zatem stosować jednoliterowe żetony, np. M / d / rrrr, które akceptują dowolną liczbę cyfr dla miesiąca i daty.
  • Jeżeli liczba cyfr dla danej pozycji jest stała, np. 01 / 02 / 1985, należy podać liczbę cyfr w formacie, np. MM / dd / rrrr dla dwucyfrowego miesiąca, dwucyfrowego dnia i czterocyfrowego roku.
  • Te formaty są trudne do pracy. Podany format może pracować dla większości, ale nie dla wszystkich, łańcuchów czasu dla danej zmiennej. Zawsze sprawdzaj, czy określony format działa zgodnie z oczekiwaniami wERDDAPdla wszystkich strun czasowych zmiennej.
  • Jeśli to możliwe, GenerateDatasetXml będzie sugerować łańcuchy formatu czasu.
  • Jeśli potrzebujesz pomocy przy generowaniu łańcucha formatu, wyślij wiadomość do Chrisa. John w Noa.gov.

Główna zmienna danych czasowych (dla zbiorów danych tabelarycznych) i główną zmienną osi czasu (dla zestawów danych w sieci) są uznawane przezdestinationNameCzas. Ich metadane jednostkowe muszą być zgodne z UDUNITS- ciągiem jednostek dla liczbowych wartości czasowych, np. "dni od 1970- 01- 01" (dla zestawów danych tabelarycznych lub siateczkowych) lubjednostki odpowiednie do czasów strun, np. "M / d / rrrr". (dla zbiorów danych tabelarycznych) .

Różne jednostki czasowe w różnych Gridded.ncPliki - Jeśli masz kolekcję uchwytów.ncpliki, w których dla zmiennej czasu jeden podzbiór plików używa innych jednostek czasowych niż jeden lub więcej innych podzbiór plików, można użyćEDDGridFromNcFilesUnpacked. Konwertuje wartości czasu do"seconds since 1970-01-01T00:00:00Z"na niższym poziomie, co ukrywa różnice, tak, że można zrobić jeden zestaw danych z kolekcji heterogenicznych plików.

Zmienne znaczników czasu

Zmienne znaczników czasu-- Inne zmienne (axisVariablelubdataVariable, wEDDGridlub zbiór danych EDDTable) może być zmienną timeStamp. Zmienne znaczników czasu są zmiennymi, które mają jednostki związane z czasem i dane czasowe, ale mają<destinationName> inny niż czas. Zmienne TimeStamp zachowują się jak zmienna czasu głównego w tym, że przekształcają format czasu źródła w"seconds since 1970-01-01T00:00:00Z"lub ISO 8601: 2004 (E) format).ERDDAP™rozpoznaje czas Zmienne znaczników według ich czasu związane "jednostki"metadane, które muszą pasować do tego wyrażenia regularnego"\[a- za- Z\]+ + od +\[0- 9\]. + " (dla daty liczbowej Na przykład,"seconds since 1970-01-01T00:00:00Z") lub być datą Tekst w formacie czasowym zawierający "uuuu", "yyyy" lub "YYY" (na przykład ",yyyy-MM-ddNie.) . Ale proszę nadal używaćdestinationName "time"dla daty głównej Zmienna czasu.

Zawsze sprawdzaj swoją pracę, aby mieć pewność, że dane czasowe, które pojawiają się wERDDAP™jest właściwym czasem. Praca z danymi czasowymi jest zawsze trudna i podatna na błędy.

Patrzwięcej informacji o zmiennych czasowych. ERDDAP™ma przydatność doPrzelicz licznik Czas do / z czasu smyczkowego. PatrzJakERDDAP™Transakcje z czasem.  

valid\_range

lub

<att name="valid\_min" type="float"\>0.0</att>
<att name="valid\_max" type="float"\>40.0</att>

  • Jeżeli występują, powinny one być tego samego typu danych co zmienna i powinny określać ważne wartości minimalne i maksymalne danych dla tej zmiennej. Użytkownicy powinni uznać wartości spoza tego zakresu za nieprawidłowe.
  • ERDDAP™nie stosuje sięvalid\_range. Powiedział inaczej:ERDDAP™nie konwertuje wartości danych pozavalid\_rangedo\ _ Wypełnij Wartość lubmissing\_value.ERDDAP™po prostu przekazuje te metadane i pozostawia aplikację do Ciebie. Dlaczego? Po to są te metadane. Jeśli dostawca danych chciałby, dostawca danych mógłby przekonwertować wartości danych pozavalid\_rangebyć\ _ FillValues.ERDDAP™nie odgadł dostawcy danych. Takie podejście jest bezpieczniejsze: jeśli później zostanie wykazane, żevalid\_rangebyła zbyt wąska lub w inny sposób nieprawidłowa,ERDDAP™nie wymazał danych.
  • Jeśli dane są zapakowanescale\_factorlubadd\_offset,valid\_range,valid\_minorazvalid\_maxpowinny być zapakowane dane typu i wartości. OdERDDAP™stosuje sięscale\_factororazadd\_offsetkiedy załaduje zbiór danych,ERDDAP™rozpakujevalid\_range,valid\_minorazvalid\_maxwartości tak, że metadane docelowe (pokazane użytkownikom) wskazuje rodzaj i zakres niezapakowanych danych. Albo, jeśli rozpakowany\ _valid\_rangeatrybut jest obecny, zostanie przemianowanyvalid\_rangekiedyERDDAP™ładuje zbiór danych.
<removeMVRows & gt;
  • [ ** <removeMVRows > ** ] (# removemvrows) jest znacznikiem opcjonalnym wewnątrz znacznika wdatasets.xmldla plików EDDTableFromFiles (w tym wszystkie podklasy) zbiorów danych, chociaż jest on używany tylko dla plików EDDTableFromMultidimNcFiles. Może mieć wartość prawdziwą lub fałszywą. Na przykład, prawda Usuwa to dowolny blok wierszy na końcu grupy, gdzie wszystkie wartości sąmissing\_value,\ _ FillValue, or the Cohort... Array rodzimej wartości brakującej (lub char = # 32 dla CharArrays) . Dotyczy to typu pliku wielowymiarowego CF DSG Array i podobnych plików. Jeśli to prawda, to robi właściwy test i tak zawsze ładuje wszystkie zmienne max dim, więc może to zająć więcej czasu. Domyślną wartością jest false. Zalecenie... Jeśli to możliwe dla zestawu danych, zalecamy ustawienie removeMVRows do false. Ustawienie removeMVRows do true może znacznie spowolnić żądania, choć może być potrzebne do niektórych zbiorów danych.