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
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.
- 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.
- 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ć.)
- 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.
- W kawałkudatasets.xmlktóre zostały wykonane przez GenerateDatasets Xml, zmienić [globalny<addAttributes>] (# global- atrybuty) w razie potrzeby / w razie potrzeby.
- 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ść) ,
- 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:
- 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.
- DasDds prosi odatasetIDdo zbioru danych nad którym pracujesz.
- 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.
- Wszystkie wyjścia DasDds (diagnostyka i wyniki) są napisane na ekranie i do bigParentDirectory / logs / DasDds.log.
- 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.
- 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
- Inne sposoby diagnozowania problemów z danymi
Oprócz dwóch głównychNarzędzia, - log.txtjest plikiem dziennika z wszystkimiERDDAPwiadomości diagnostyczne.
- WSprawozdanie dzienneposiada więcej informacji niż strona statusu, w tym listę zbiorów danych, które nie zostały załadowane i wyjątki (błędy) Wygenerowali.
- WStrona statusujest szybki sposób, aby sprawdzićERDDAPstatus z dowolnej przeglądarki internetowej. Zawiera listę zbiorów danych, które nie zostały załadowane (choć nie związane wyjątki) i statystyki taskThread (pokazujące postępyEDDGridKopiujorazEDDTableCopyZestawy danych i wszelkieEDDGridPliki FromFileslubPliki EDDTableFromFileszbiory danych, które korzystającacheFromUrl (ale nie cache SizeGB) ) .
- Jeśli utkniesz, zobacz naszerozdział dotyczący uzyskania dodatkowego wsparcia.
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:
- aStruktura danych zawiązanych (na przykład dla danych satelitarnych i danych modelowych) oraz
- atabelaryczna struktura danych (na przykład dla danych z boi in- situ, stacji i trajektorii) .
- 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:
- 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.
- 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
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:
-
Utwórz katalog na komputerze, aby przechowywać kilka testowych plików danych.
-
Pobierz dwa pliki danych ze źródła do katalogu, który właśnie stworzyłeś.
-
StosowanieGenerateDatasetsXmlaby wygenerować kawałekdatasets.xmldla zbioru danych w oparciu o dwa lokalne pliki danych.
-
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.
-
Kopiuj kawałekdatasets.xmldla zbioru danych dodatasets.xmldla ogółu społeczeństwaERDDAP™które będą służyć danych.
-
Utwórz katalog publicznieERDDAPLokalny dysk twardy do przechowywania plików tymczasowych. Katalog nie użyje dużo miejsca na dysku (zobacz CacheSizeGB poniżej) .
-
Zmień wartość zbioru danych<fileDir > tag tak, aby wskazywał na katalog, który właśnie stworzyłeś (nawet jeśli katalog jest pusty) .
-
DodajcacheFromUrltag określający nazwę zbioru danych oraz opcjonalny przedrostek (np. katalog) w szczególnościAws S3 URL Format, któryERDDAP™wymaga.
-
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) .
-
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.
- 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.
- 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ę.
- 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.
- 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.
- 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
-
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.
-
- 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) :
- 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:
- EDDGridPliki FromAudioFilesagregaty danych z grupy lokalnych plików audio.
- EDDGridFromDapUchwyty uchwytów danych zDAPserwerów.
- EDDGridTabela FromEDDTablepozwala przekształcić tabelaryczny zbiór danych w zawiązany zestaw danych.
- EDDGridFromErddapUchwyty uchwytów danych ze zdalnegoERDDAP.
- EDDGridFromEtopotylko obsługuje built- w danych topograficznych ETOPO.
- EDDGridPliki FromFilesjest superklasą wszystkichEDDGridZ zajęć z archiwum.
- EDDGridPliki FromMergeIRFilesdane zagregowane z grupy lokalnych MergeIR.gzpliki.
- EDDGridPliki FromNc@@dane zagregowane z grupy lokalnychNetCDF (v3 lub v4) .ncoraz powiązane pliki.
- EDDGridFromNcFilesUnpackedjest wariantem, jeżeliEDDGridFromNcFiles, które również agreguje dane z grupy lokalnychNetCDF (v3 lub v4) .ncoraz powiązane pliki, któreERDDAP™rozpakowywanie na niskim poziomie.
- EDDGridLonPM180zmienia wartości długości geograficznej dzieckaEDDGridtak, że są one w zakresie -180 do 180.
- EDDGridLon0360zmienia wartości długości geograficznej dzieckaEDDGridwięc są w zakresie od 0 do 360.
- EDDGridSideBySide2 lub więcej agregatówEDDGridzbiory danych obok siebie.
- EDDGridAgregateExistingDimension2 lub więcej agregatówEDDGridzbiory danych, z których każdy ma inny zakres wartości dla pierwszego wymiaru, ale identyczne wartości dla innych wymiarów.
- EDDGridKopiujmoże dokonać lokalnej kopii innegoEDDGriddane i obsługuje dane z lokalnej kopii.
- 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
- Tabela EDD Zestawy danych obsługują dane tabelaryczne.
- Dane tabelaryczne można przedstawić jako tabelę podobną do bazy danych z wierszami i kolumnami. Każda kolumna (zmienna danych) posiada nazwę, zbiór atrybutów i przechowuje tylko jeden typ danych. Każdy wiersz ma obserwację (lub grupy powiązanych wartości) . Źródło danych może mieć dane w innej strukturze danych, bardziej skomplikowanej strukturze danych i / lub wielu plikach danych, aleERDDAP™musi być w stanie przenieść dane źródłowe do tabeli podobnej do bazy danych w celu przedstawienia danych jako tabelarycznego zbioru danych dla użytkownikówERDDAP.
- Patrz bardziej kompletny opisModel danych EDDTable.
- Typy zbiorów danych EDDTable to:
-
EDDTableFromAllDatasetsjest zbiorem danych wysokiego poziomu, który zawiera informacje o wszystkich innych zbiorach danych w TwoimERDDAP.
-
Pliki EDDTableFromAsciiFilesdane zagregowane z plików tabelarycznych ASCII oddzielonych zespołami, tabelami, średnikami lub spacjami.
-
EDDTableFromAsciiServicejest superklasą wszystkich klas EDDTableFromAsciiService.
-
EDDTableFromAsciiServiceNOSobsługuje dane z niektórychNOAAUsługi sieciowe NOS.
-
Pliki EDDTableFromAudioNameagregaty danych z grupy lokalnych plików audio.
-
Tabela EDDFrom Pliki AwsXmlFilesdane agregatów z zestawu Automatic Weather Station (AWS) Pliki XML.
-
EDDTableFromCassandraZajmuje się danymi tabelarycznymi z jednego stołu Cassandra.
-
Pliki EDDTableFromColumnarasciiFilesagregaty danych z tabelarycznych plików danych ASCII z kolumnami danych o ustalonej szerokości.
-
EDDTableFromDapSequenceObsługuje dane tabelaryczne zDAPserwery sekwencji.
-
EDDTableFromDatabaseobsługuje dane tabelaryczne z jednej tabeli bazy danych.
-
Tabela EDDFromEDDGridpozwala utworzyć zestaw danych EDDTable zEDDGridzestaw danych.
-
EDDTableFromErddapobsługuje dane tabelaryczne ze zdalnegoERDDAP.
-
Nazwy EDDTableFromFileNametworzy zbiór danych z informacji o grupie plików w systemie plików serwera, ale nie obsługuje danych z plików.
-
Pliki EDDTableFromFilesjest superklasą wszystkich zajęć z plików EDDTableFrom.
-
EDDTableFromHttpGetenERDDAPto jedyny system importu danych i eksportu danych.
-
Tabela EDDFromHyraxPliki (ZANIECHANE) agregaty danych z plików o kilku zmiennych o wspólnych wymiarach obsługiwanych przezHyrax OPeNDAPserwer.
-
Pliki EDDTableFromInvalidCRAFilesdane 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.
-
Pliki EDDTableFromJsonlCSVFilesdane zagregowane zJSON Linie plików CSV.
-
Pliki EDDTableFromMultidimNc@@dane zagregowane zNetCDF (v3 lub v4) .ncpliki z kilkoma zmiennymi o wspólnych wymiarach.
-
Pliki EDDTableFromNc@@dane zagregowane zNetCDF (v3 lub v4) .ncpliki z kilkoma zmiennymi o wspólnych wymiarach. Dobrze jest nadal używać tego typu zbioru danych dla istniejących zbiorów danych, ale dla nowych zbiorów danych zalecamy stosowanie EDDTableFromMultidimNcFiles zamiast.
-
Pliki EDDTableFromNcCFFilesdane zagregowane zNetCDF (v3 lub v4) .ncplików, które używają jednego z formatów plików określonych przezCF Geometrie do pobierania próbek dyskretnych (DSG) konwencje. Ale dla plików wykorzystujących jeden z wielowymiarowych wariantów CF DSG, użyjPliki EDDTableFromMultidimNc@@Zamiast tego.
-
Pliki EDDTableFromNccsvNamedane zagregowane zNCSSVPliki ASCII .csv.
-
EDDTableFromNOS (ZANIECHANE) obsługuje dane tabelaryczne z serwerów NOS XML.
-
EDDTableFromOBISobsługuje dane tabelaryczne z serwerów OBIS.
-
Pliki EDDTableFromParquetFilesobsługuje dane zParkiet.
-
Tabela EDDFromSOSObsługuje dane tabelaryczne zSOSserwerów.
-
Pliki EDDTableFromThreddsFiles (ZANIECHANE) agregaty danych z plików o kilku zmiennych o wspólnych wymiarach obsługiwanych przezTRZECIAOPeNDAPserwer.
-
Tabela EDDFromWFSPliki (ZANIECHANE) tworzy lokalną kopię wszystkich danych zArcGISMapServerWFSserwer więc dane mogą być szybko ponownie podawane doERDDAP™użytkowników.
-
EDDTableAggregateRowsmoże sporządzić zbiór danych z tabeli EDDTable z grupy zbiorów danych tabeli EDDTable.
-
EDDTableCopymoże zrobić lokalną kopię wielu typów zbiorów danych EDDTable, a następnie szybko ponownie podawać dane z lokalnej kopii.
-
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
- Szukajdatasets.xmlzamiast datasetID= " Identyfikator danych " Więc pracujesz z poprawnym zbiorem danych.
- Szukajdatasets.xmldla następnego wystąpienia
The VariablesSourceName
Więc pracujesz z poprawną zmienną. - 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
- SkładnikERDDAP™musi wysłać wniosek do innegoERDDAP™ (który wymaga czasu) .
- DrugiERDDAP™musi uzyskać dane, przeformatować je i przesłać dane do kompozytuERDDAP.
- 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ń) .
- To bardzo skuteczne. (CPU, pamięć i szerokość pasma) , ponieważ inaczej
- 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:
- TwójERDDAP™musi być w stanie wysyłać e-maile. Zobacz ustawienia email w ustawieniach setup.xml.
- 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.
- W twoich ustawieniach xml,<subscribeToRemoteErddapDataset > musi być ustawiony na true.
- 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.
- Należy uzyskać e-mail z prośbą o potwierdzenie wniosku o subskrypcję.
- Musisz kliknąć na link w tej wiadomości e-mail, aby potwierdzić wniosek o subskrypcję.
- 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.
- 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ć.
- 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.
- 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:
- Nie używaj<updateEveryNMillis >, aby utrzymać zbiór danych źródłowych na bieżąco.
- Ustaw zbiór danych źródłowych<przeładowanie EveryNMinutes > do większej liczby (1440?) .
- 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:
- Powiedzmy, że było dozwolone i dodałeś nowy atrybut globalny.
- Kiedy użytkownik pytaERDDAP™dla atrybutów globalnych pojawi się nowy atrybut.
- 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:
- Przekonaj administratora źródłaERDDAP™aby dokonać zmian, które chcesz do metadanych.
- 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:
- EDDGridPliki FromMergeIRFilesObsługuje dane z uchwytówMergeIR.gzpliki.
- EDDGridPliki FromAudioFilesagregaty danych z grupy lokalnych plików audio.
- EDDGridPliki FromNc@@Obsługuje dane z uchwytówGRIB .grbpliki,HDF (v4 lub v5) .hdfpliki,.ncmlpliki orazNetCDF (v3 lub v4) .ncpliki. Może to działać z innymi typami plików (na przykład, BUFR) Po prostu go nie przetestowaliśmy. Proszę wysłać nam kilka przykładowych plików, jeśli jesteście zainteresowani.
- EDDGridFromNcFilesUnpackedjest wariantemEDDGridPliki FromNc@@NetCDF (v3 lub v4) .ncoraz powiązane pliki, któreERDDAP™rozpakowywanie na niskim poziomie.
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) .
- Dostęp do danych ze zdalnego źródła danych może być powolny.
- 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
- Utwórz<zbiór danych > wpis (rodzimy typ, nieEDDGridKopiuj) dla zdalnego źródła danych. Uruchomić go poprawnie, w tym wszystkie wymagane metadane.
- 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.)
- 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:
- ZmieńaddAttributesdla zbioru danych źródłowych wdatasets.xmlW razie potrzeby.
- Usuń jeden z skopiowanych plików.
- 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.
- 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:
- Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla przestrzeni klawiszy, program wyświetla listę przestrzeni klawiszy
- 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) :
- czas (aISO8601 Czas) (MOŻE być zakodowane jako ciąg znaków)
- "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
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:
- Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla nazwy katalogu program wyświetla listę nazw katalogów.
- Jeśli wpiszesz "!!!! LISTA!!!" (bez kwotowań) dla nazwy schematu program wyświetla listę nazw schematów.
- 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ć.
- Dla MariaDB, spróbuj https://mariadb.com/kb/en/about-the-mariadb-java-client/
W<driverName > do stosowania wdatasets.xml (zob. poniżej) jest prawdopodobnie org.mariadb.jdbc. Kierowca. - Dla MySQL i Amazon RDS, spróbuj https://dev.mysql.com/downloads/connector/j/
W<driverName > do stosowania wdatasets.xml (zob. poniżej) jest prawdopodobnie com.mysql.jdbc. Kierowca. - DlaOracleSpróbuj https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html . W<driverName > do stosowania wdatasets.xml (zob. poniżej) jest prawdopodobnie oracle.jdbc.driver.OracleKierowca.
- Dla Postgresql, mamy kierowcę JDBC 4 z https://mvnrepository.com/artifact/org.postgresql/postgresql
W<driverName > do stosowania wdatasets.xml (zob. poniżej) jest prawdopodobnie org.postgresql. Kierowca. - Dla SQL Server można uzyskać sterownik JTDS JDBC z https://jtds.sourceforge.net . W<driverName > do stosowania wdatasets.xml (zob. poniżej) jest prawdopodobnie net.sourceforge.jtds.jdbc. Kierowca.
- Dla MariaDB, spróbuj https://mariadb.com/kb/en/about-the-mariadb-java-client/
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.
-
Dla Marii DB, musisz uruchomić bazę danych\ -- sql- mode = ANSI\ _ QUOTES.
-
Dla MySQL i Amazon RDS, musisz uruchomić bazę danych z\ -- sql- mode = ANSI\ _ QUOTES.
-
Oracleobsługuje podwójne notowania ANSI- SQLdomyślnie.
-
PostgreSQL domyślnie obsługuje podwójne cytaty ANSI- SQL.
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
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<=2008-02-01T00:00:00Z
zostanie przekonwertowany do SQL PreparedDescription
SELECT "time", "temperature" FROM *tableName*
WHERE "time" >= 2008-01-01T00:00:00Z AND "time" <= 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
- Dane w zbiorze danych EDDTableFromFileNamesjest stołem, któryERDDAP™tworzy on-the@-@ fly z informacjami o grupie lokalnych plików. W tabeli jest wiersz dla każdego pliku. Cztery specjalne atrybuty wdatasets.xmldla tego zbioru danychokreślić, które pliki zostaną włączone do tego zbioru danych:
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:
- Niezagregowane zbiory danych w THREDDS, np., https://data.nodc.noaa.gov/thredds/catalog/aquarius/nodc\\_binned\\_V3.0/monthly/ \[2020- 10- 21 Serwer ten nie jest już dostępny.\]
- Niezagregowane zbiory danych wHyrax, np., https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/
- Większość wykazów katalogów podobnych do ApacheName https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/
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.