Пропустить основной контент

Работая сdatasets.xmlФайл

\[Эта страница будет представлять интерес только дляERDDAP™Администраторы.\]

После того, как вы последовали заERDDAP™ Инструкция по установкеВы должны редактироватьdatasets.xmlфайл в кот /content/erddap/ для описания наборов данных, которые выERDDAP™Установка будет служить.

Вы можете увидеть примерdatasets.xmlНа GitHub.

Введение

Некоторая сборка требуется

Настройка набора данных вERDDAP™Это не просто вопрос указания на каталог или URL набора данных. Вы должны написать часть XML дляdatasets.xmlкоторый описывает набор данных.

  • Для сетчатых наборов данных, чтобы сделать набор данных соответствующимERDDAPСтруктура данных для сетчатых данных должна идентифицировать подмножество переменных набора данных, которые имеют одинаковые размеры. (Почему? Как?)
  • Текущие метаданные набора данных импортируются автоматически. Но если вы хотите изменить эти метаданные или добавить другие метаданные, вы должны указать их вdatasets.xml. ИERDDAP™нуждается в других метаданных, в том числеглобальные атрибуты (такие какinfoUrlинститут,sourceUrl, резюме и название) ипеременные атрибуты (такие какlong\_nameи единицы) . Так же, как метаданные, которые в настоящее время находятся в наборе данных, добавляют описательную информацию к набору данных, метаданные, запрошенныеERDDAP™Добавляет описательную информацию в набор данных. Дополнительные метаданные являются хорошим дополнением к вашему набору данных и помогают.ERDDAP™Сделайте лучшую работу по представлению ваших данных пользователям, которые не знакомы с ними.
  • ERDDAP™Вы должны делать особые вещи сдолгота, широта, высота (или глубина) и временные переменные.

Если вы купитесь на эти идеи и израсходуете усилия на создание XMLdatasets.xmlВы получаете все преимуществаERDDAP™В том числе:

  • Полный текстовый поиск наборов данных
  • Поиск наборов данных по категориям
  • Форма доступа к данным ( datasetID .html) Таким образом, вы можете запросить подмножество данных в различных форматах файлов.
  • Формы для запроса графиков и карт ( datasetID граф)
  • Сервис Web Map (WMS) для сетчатых наборов данных
  • RESTfulдоступ к вашим данным

Сделатьdatasets.xmlЭто требует значительных усилий для первых нескольких наборов данных. становится легче . После первого набора данных вы часто можете повторно использовать большую часть своей работы для следующего набора данных. К счастью,ERDDAP™поставляется с двумяИнструментыЧтобы помочь вам создать XML для каждого набора данныхdatasets.xml. Если вы застряли, посмотрите нашРаздел о дополнительной поддержке.

Поставщик данных форма

Когда к вам приходит поставщик данных, надеясь добавить некоторые данные в ваш компьютер.ERDDAPЭто может быть трудным и трудоемким для сбора всех метаданных. (Информация о наборе данных) Необходимо добавить набор данных вERDDAP. Многие источники данных (Например, файлы .csv, Файлы Excel, базы данных) не имеют внутренних метаданных, поэтомуERDDAP™имеет форму поставщика данных, которая собирает метаданные от поставщика данных и дает поставщику данных некоторые другие рекомендации, включая обширные рекомендации дляДанные в базах данных. Представленная информация преобразуется вdatasets.xmlформат, а затем по электронной почтеERDDAP™администратор (ты) и письменный (прилагаемый) то BigParent Директория /logs/dataProviderForm.log. Таким образом, форма полуавтоматизирует процесс получения набора данных вERDDAPно этоERDDAP™Администратор должен завершитьdatasets.xmlОбработка и получение файла данных (s) от поставщика или подключения к базе данных.

Подача фактических файлов данных из внешних источников представляет собой огромный риск безопасности.ERDDAP™Не имеет дело с этим. Вы должны найти решение, которое работает для вас и поставщика данных, например, электронная почта. (для небольших файлов) Вытащить из облака (Например, DropBox или Google Drive.) Сайт Sftp (с паролями) или кроссовки нет (USB большой палец или внешний жесткий диск) . Вы должны принимать только файлы от людей, которых вы знаете. Вам нужно будет сканировать файлы на наличие вирусов и принимать другие меры безопасности.

Нет никакой связи вERDDAP™в форму поставщика данных (Например, наERDDAP™домашняя страница) . Вместо этого, когда кто-то говорит вам, что они хотят, чтобы их данные служили вашим.ERDDAPВы можете отправить им электронное письмо, сказав что-то вроде: Да, мы можем получить ваши данные вERDDAP. Для начала, пожалуйста, заполните форму в https://yourUrl/erddap/dataProviderForm.html (илиhttp://еслиhttps://не включен) . После того, как вы закончите, я свяжусь с вами, чтобы проработать окончательные детали. Если вы хотите посмотреть форму (не заполняя его) Вы можете увидеть форму наERD?ERDDAP:Введение,Часть 1,Часть 2,Часть 3иЧасть 4. Эти ссылки наERD ERDDAP™Отправляйте информацию мне, а не вам, так что не отправляйте информацию с ними, если вы действительно не хотите добавлять данные вERD ERDDAP.

Если вы хотите удалить форму поставщика данных из вашейERDDAP™ставить

<dataProviderFormActive>false</dataProviderFormActive>  

В файле setup.xml.

Толчком к этому послужилNOAA2014 годПубличный доступ к результатам исследований (ПАРР) директивакоторая требует, чтобы всеNOAAЭкологические данные, финансируемые за счет средств налогоплательщиков, предоставляются через службу данных. (Не только файлы) В течение 12 месяцев после создания. Повышен интерес к использованиюERDDAP™Чтобы сделать наборы данных доступными через службу ASAP. Нам нужен был более эффективный способ работы с большим количеством поставщиков данных.

Обратная связь / Предложения? Эта форма новая, поэтому, пожалуйста, пишитеerd dot data at noaa dot govЕсли у вас есть какие-либо отзывы или предложения по улучшению этого.

Инструменты

ERDDAP™Он поставляется с двумя программами командной строки, которые являются инструментами, которые помогут вам создать XML для каждого набора данных, который вы хотите.ERDDAP™служить. Как только вы создалиERDDAP™и запустить его (хотя бы один раз) Вы можете найти и использовать эти программы в кот /webapps/erddap/WEB-INF каталог. Есть скрипты оболочки Linux/Unix (с расширением .sh) и Windows скрипты (С расширением .bat) для каждой программы.\[В Linux эти инструменты запускаются одним и тем же пользователем. (Томкат?) Это будет Tomcat.\]Когда вы запустите каждую программу, она задаст вам вопросы. Для каждого вопроса введите ответ, затем нажмите Enter. Или нажмите ^C, чтобы выйти из программы в любое время.

Программа не будет работать?

  • Если вы получили неизвестную программу (или аналогичный) Сообщение об ошибке, проблема в том, что операционная система не может найтиJava. Вы должны выяснить, гдеJavaОн находится на вашем компьютере, затем отредактируйте ссылку java в файле .bat или .sh, который вы пытаетесь использовать.
  • Если вы получаете файл банка не найден или класс не найден сообщение об ошибке, тоJavaВы не можете найти один из классов, перечисленных в файле .bat или .sh. Решение состоит в том, чтобы выяснить, где находится файл .jar, и отредактировать ссылку на него в файле .bat или .sh.
  • Если вы используете версиюJavaЭто слишком старая программа, программа не запускается, и вы увидите сообщение об ошибке. Исключение в потоке "основной" java.lang.UnsupportedClassVersionError: некоторый/класс/имя Неподдерживаемая версия major.minor некоторое число
    Решение заключается в обновлении до последней версииJavaУбедитесь, что файл .sh или .bat для программы использует его.

Инструменты печатают различные диагностические сообщения:

  • Слово «ERROR» используется, когда что-то пошло не так, что процедура не была завершена. Хотя это раздражает, чтобы получить ошибку, ошибка заставляет вас иметь дело с проблемой.
  • Слово «предупреждение» используется, когда что-то пошло не так, но процедуру удалось завершить. Они довольно редкие.
  • Все остальное — лишь информативное сообщение. Вы можете добавить \-verbose кГенерировать наборы данныхXmlилиDasDdsкомандная строка для получения дополнительных информативных сообщений, что иногда помогает решить проблемы.

Эти два инструмента очень полезны, но вы все равно должны внимательно прочитать все эти инструкции на этой странице и самостоятельно принимать важные решения.

Генерировать наборы данныхXml

  • Генерировать наборы данныхXml Программа командной строки, которая может генерировать черновой проект набора данных XML практически для любого типа набора данных.

Мы настоятельно рекомендуем использовать GenerateDatasets Xml вместо того, чтобы создавать кускиdatasets.xmlОт руки, потому что:

  • Генерировать наборы данных Xml работает в считанные секунды. Делать это вручную — это как минимум час работы, даже если вы знаете, что делаете.
  • Генерировать наборы данных Xml работает лучше. Делать это вручную требует обширных знаний о том, какERDDAP™Работает. Маловероятно, что вы сделаете лучшую работу вручную. (Боб Саймонс всегда использует наборы данных Xml для первого черновика, и он написалERDDAP.)
  • Генерировать наборы данных Xml всегда генерирует действительный кусокdatasets.xml. Любой кусокdatasets.xmlВы, вероятно, будете иметь по крайней мере несколько ошибок, которые предотвратятERDDAP™от загрузки набора данных. Часто людям требуется несколько часов, чтобы диагностировать эти проблемы. Не трать свое время. Пусть генерируют Наборы данных Xml делает тяжелую работу. Тогда вы можете усовершенствовать .xml вручную, если хотите.

Когда вы используете наборы данных Программа XML:

  • В Windows, когда вы впервые запускаете GenerateDatasetsXml, вам нужно редактировать файл GenerateDatasetsXml.bat с текстовым редактором, чтобы изменить путь к java. Файл exe, чтобы Windows могла найтиJava.
  • Генерировать наборы данных Xml сначала просит указать EDDType (Набор данных Erd Dap Тип) из набора данных. Видишь?Список типов наборов данных (в этом документе) Чтобы выяснить, какой тип подходит для набора данных, над которым вы работаете. В дополнение к обычным EDDTypes, есть также несколькоСпециальные / псевдотипы наборов данных (Например, тот, который сканирует каталог THREDDS, чтобы создать кусокdatasets.xmlдля каждого из наборов данных в каталоге) .
  • Генерировать наборы данных Затем Xml задает вам ряд вопросов, относящихся к EDDType. Вопросы собирают информацию, необходимую дляERDDAP™получить доступ к источнику данных. Чтобы понять, чтоERDDAP™запрашивает, см. документацию для EDDType, которую вы указали, нажав на тот же тип набора данныхСписок типов наборов данных.

Если вам нужно ввести строку со специальными символами (Например, символы белого пространства в начале или конце, не-ASCII символы) Войдите вСтруна в стиле JSON (с особыми персонажами, сбежавшими с персонажами) . Например, чтобы ввести только символ вкладки, введите «\t» (с окружающими двойными цитатами, которые говорят:ERDDAP™Это струна в стиле JSON.

  • Часто одним из ваших ответов будет не то, что нужно GenerateDatasetsXml. Затем вы можете попробовать снова, с пересмотренными ответами на вопросы, до генерации наборов данных. Xml может найти и понять исходные данные.
  • Если вы правильно отвечаете на вопросы (или достаточно правильно) Генерировать наборы данных Xml подключится к источнику данных и соберет основную информацию (Например, имена переменных и метаданные) . Для наборов данных, которые являются локальнымиNetCDF .ncи связанные файлы, генерировать наборы данных Xml часто печатает ncdump-подобную структуру файла после его первого чтения. Это может дать вам информацию, чтобы лучше ответить на вопросы в последующем цикле через GenerateDatasetsXml.
  • Генерировать наборы данных Затем Xml сгенерирует черновой проект набора данных XML для этого набора данных.
  • Диагностическая информация и черновой проект набора данных XML будут записаны на BigParent Директория /logs/GenerateDatasetsXml.log.
  • Грубый проект набора данных XML будет написан на BigParent Директория /logs/GenerateDatasetsXml.out.

"0 файлов" сообщение об ошибке

Если вы используете GenerateDatasets Xml илиDasDdsЕсли вы пытаетесь загрузитьEDDGridИз... материалов или из... Файлы Dataset inERDDAP™, и вы получаете сообщение об ошибке «0 файлов», указывающее, чтоERDDAP™найдено 0 совпадающих файлов в каталоге (Когда вы думаете, что в этом каталоге есть соответствующие файлы) :

  • Убедитесь, что вы указали полное имя каталога. И если вы указали имя файла образца, убедитесь, что вы указали полное имя файла, включая полное имя каталога.

  • Убедитесь, что файлы действительно находятся в этом каталоге.

  • Проверьте написание названия каталога.

  • Проверьте файл NameRegex. Очень, очень легко делать ошибки с регексами. Для целей тестирования попробуйте regex .\*, который должен соответствовать всем именам файлов. (Посмотри.нормативная документацияиучебник по регексу.)

  • Убедитесь, что пользователь, который запускает программу (Пользователь=tomcat (?) Для Tomcat/ERDDAP) У вас есть разрешение «читать» эти файлы.

  • В некоторых операционных системах (Например, SELinux) В зависимости от системных настроек пользователь, который запустил программу, должен иметь разрешение «читать» для всей цепочки каталогов, ведущих в каталог, в котором есть файлы.

  • Если у вас есть проблемы, которые вы не можете решить,запросить поддержкукак можно больше информации. Аналогичным образом, если кажется, что соответствующий EDDType для данного набора данных не работает с этим набором данных, или если нет соответствующего EDDType, пожалуйста, подавайте заявку на регистрацию.Обсуждение GitHubс подробностями (и образец файла, если это необходимо) .  

Вам нужно отредактировать выход из GenerateDatasets Xml, чтобы сделать его лучше.

 

  • Дисклеймер: Курицаdatasets.xmlСделано, чтобы генерировать наборы данных Xml не идеален. Вы должны прочитать и отредактировать XML, прежде чем использовать его в публичной форме.ERDDAP. Генерировать наборы данных Xml полагается на множество правил, которые не всегда верны. Вы обязаны поддерживать правильность XML, к которому вы присоединились.ERDDAP'S'datasets.xmlФайл.

    (Интересный факт: я не кричу. По историческим юридическим причинам отказ от ответственности должен быть написан во всех колпаках.)

Выход GenerateDatasetsXml является черновым проектом. Вам почти всегда придется его редактировать. Мы приложили и продолжаем прилагать огромные усилия, чтобы сделать выход как можно более готовым, но есть пределы. Часто необходимая информация просто недоступна из исходных метаданных.

Основная проблема заключается в том, что мы запрашиваем компьютерную программу. (Генерировать наборы данныхXml) Если бы вы дали такую же задачу 100 людям, вы бы получили 100 различных результатов. Нет единого «правильного» ответа. Очевидно, программа ближе всего подходит к чтению мыслей Боба. (Не твой) Но даже в этом случае это не всепонимающая программа ИИ, просто куча эвристиков, собранных вместе, чтобы выполнить задачу, похожую на ИИ. (Этот день всепонимающей программы ИИ может наступить, но он еще не наступил. Если это произойдет, у людей могут быть большие проблемы. Будьте осторожны с тем, что вы хотите.)

  • В информационных целях на выходе показаны глобальный источник Атрибуты и переменный источник Атрибуты в виде комментариев.ERDDAP™комбинирует атрибуты иaddAttributes (которые имеют приоритет) Чтобы сделать комбинированный Атрибуты, которые показываются пользователю. (И другие атрибуты автоматически добавляются к долготе, широте, высоте, глубине и временным переменным, когдаERDDAP™Фактически делает набор данных) .  

  • Если вам не нравится исходный атрибут, перезапишите его, добавив дополнительный атрибут с тем же именем, но с другим значением. (или нет, если вы хотите удалить) .  

  • Все этоaddAttributesЭто компьютерные предложения. Редактируйте их! Если вам не нравится дополнительный атрибут, измените его.  

  • Если вы хотите добавить другиеaddAttributesДобавьте их.  

  • Если вы хотите изменить аdestinationNameИзмени это. Но не меняйся.sourceNameС.  

  • Вы можете изменить порядокdataVariableили удалить любой из них.

    • Затем вы можете использоватьDasDds (см. ниже) многократно тестировать XML для этого набора данных, чтобы убедиться, что полученный набор данных отображается так, как вы хотите.ERDDAP.
    • Не стесняйтесь вносить небольшие изменения вdatasets.xmlЧасти, которые были созданы, например, обеспечивают лучшуюinfoUrl, резюме или название.

Не добавляйте стандартные имена

Если вы включаете \-doNotAddStandardNames в качестве параметра командной строки при генерации Наборы данных Xml, генерировать Наборы данных Xml не будет добавлятьstandard\_nameкaddAttributesдля любых переменных, кроме переменных широты, долготы, высоты, глубины или времени (которые очевидныstandard\_names) . Это может быть полезно, если вы используете выход из генерации. Наборы данных Xml непосредственно вERDDAP™Не редактируя выход, потому что генерировать Наборы данных Xml часто угадываетstandard\_nameнеправильно. (Обратите внимание, что мы всегда рекомендуем вам редактировать вывод перед его использованием.ERDDAP.) Использование этого параметра будет иметь другие незначительные связанные эффекты, потому чтоstandard\_nameчасто используется для других целей, например, для создания новогоlong\_name, а также для создания цветовых баров.

Сценарий

В качестве альтернативы интерактивному ответу на вопросы на клавиатуре и циклированию для создания дополнительных наборов данных вы можете предоставить аргументы командной строки для ответа на все вопросы для создания одного набора данных. Генерировать наборы данных Xml обрабатывает эти параметры, записывает вывод в файл вывода и выходит из программы.

Чтобы настроить это, сначала используйте программу в интерактивном режиме и запишите свои ответы. Вот частичный пример: Допустим, вы запускаете сценарий: ./GenerateDatasetsXml.sh Далее введите: EDDTableFromAsciiFiles Введите: /u00/data/ Затем введите: .*\.asc Далее введите: /u00/data/sampleFile.asc Далее введите: ISO-8859-1

Чтобы запустить это неинтерактивным способом, используйте эту командную строку: ./GenerateDatasetsXml.sh EDDTableFromAsciiFiles/u00/data/.\*\.asc/u00/data/sampleFile.asc ISO-8859-1 Таким образом, вы просто перечислите все ответы в командной строке. Это должно быть полезно для наборов данных, которые часто меняются таким образом, что требует повторного запуска наборов данных. Xml (особенноEDDGridИз ThreddsCatalog) .

Подробности:

  • Если параметр содержит пространство или какой-то специальный символ, то закодируйте параметр какСтруна в стиле JSONНапример, "мой параметр с пробелами и двумя\nлинии".
  • Если вы хотите указать пустую строку в качестве параметра, используйте: ничего
  • Если вы хотите указать значение параметра по умолчанию, используйте:  
  • Генерировать наборы данных Xml поддерживает -i наборы данных XmlName # имя параметр командной строки, который вставляет выход в указанныйdatasets.xmlфайл (Дефолт является кот /content/erddap/datasets.xml) . Генерировать наборы данных Xml ищет две строки в наборах данных XmlName:
        <!-- Begin GenerateDatasetsXml #*tagName someDatetime* -->  

и

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

и заменяет все между этими строками новым контентом и изменяет некоторое время.

  • Переключатель i обрабатывается только (и изменения вdatasets.xmlпроизводится только) Если вы используете GenerateDatasets Xml с аргументами командной строки, которые определяют все ответы на все вопросы для одного цикла программы. (См. статью «Сценарий» выше.) (Мышление таково: этот параметр предназначен для использования со сценариями. Если вы используете программу в интерактивном режиме (ввод информации на клавиатуре) Вы, вероятно, сгенерируете некоторые неправильные фрагменты XML, прежде чем сгенерировать тот, который вы хотите.)
  • Если строки «Начало» и «Конец» не найдены, то эти строки и новый контент вставляются прямо перед этим.</erddapDatasets.
  • Существует также -I (капитал i) переключатель для целей тестирования, который работает так же, как -i, но создает файл, называемыйdatasets.xml Время даты и не вносит изменений вdatasets.xml.
  • Не запускайте GenerateDatasets Xml с -i в двух процессах одновременно. Есть вероятность, что будет сохранен только один набор изменений. Могут быть серьезные проблемы (Например, поврежденные файлы) .

Если вы используете «GenerateDatasetsXml-verbose», он будет печатать больше диагностических сообщений, чем обычно.

Специальные / псевдотипы наборов данных

Варианты EDDType в GenerateDatasets Xml соответствие типов EDD, описанных в этом документе (Видишь?Список типов наборов данных) и создать одинdatasets.xmlфрагмент для создания одного набора данных из одного конкретного источника данных. Есть несколько исключений и особых случаев:

EDDGridИз Эрддапа

EDDType генерирует всеdatasets.xmlКуски, которые нужно сделатьEDDGridИз Эрддапанаборы данных от всехEDDGridНаборы данных в удаленномERDDAP. У вас будет возможность сохранить оригинал.datasetIDs (которые могут дублировать некоторыеdatasetIDуже в вашейERDDAP) или создавать новые имена, которые будут уникальными; (Но, как правило, не так читабельны) .  

EDDTable FromErddap

EDDType генерирует всеdatasets.xmlКуски, которые нужно сделатьEDDTable FromErddapнаборы данных из всех наборов данных EDDTable в удаленномERDDAP. У вас будет возможность сохранить оригинал.datasetIDs (которые могут дублировать некоторыеdatasetIDуже в вашейERDDAP) или создавать новые имена, которые будут уникальными; (Но, как правило, не так читабельны) .  

EDDGridИз ThreddsCatalog

EDDType генерирует всеdatasets.xmlКуски, необходимые для всехEDDGridИз папынаборы данных, которые он может найти, сканируя рекурсивно через THREDDS (субподряд) каталог. Существует множество форм каталога THREDDS URL. Эта опция требует URL .xml с /catalog / в нем, например, https://oceanwatch.pfeg.noaa.gov/thredds/catalog/catalog.xml или https://oceanwatch.pfeg.noaa.gov/thredds/catalog/Satellite/aggregsatMH/chla/catalog.xml
(перенаправлено с «Каталог .html») https://oceanwatch.pfeg.noaa.gov/thredds/Satellite/aggregsatMH/chla/catalog.html которые не являются приемлемыми дляEDDGridИз ThreddsCatalog. Если у вас есть проблемы сEDDGridИз Тредд Каталог:

  • Убедитесь, что URL, который вы используете, действителен, включает /catalog / и заканчивается /catalog.xml.
  • Если возможно, используйте публичный IP-адрес. (Например, https://oceanwatch.pfeg.noaa.gov ) URL, а не локальный цифровой IP-адрес (Например, https://12.34.56.78 ) . Если THREDDS доступен только через локальный цифровой IP-адрес, вы можете использовать<конвертироватьToPublicSourceUrl> (#конвертный публичный ресурс) такERDDAP™Пользователи видят публичный адрес, даже еслиERDDAP™Получает данные с локального числового адреса.
  • Если у вас есть проблемы, которые вы не можете решить,Проверьте советы по устранению неполадок.
  • Низкоуровневый код для этого теперь используетUnidatanetcdf-java каталог crawler code (Толстяки. Каталожные классы) Чтобы он мог обрабатывать все каталоги THREDDS (которые могут быть удивительно сложными) БлагодаряUnidataдля этого кода.  
EDDGridLonPM180FromErddapКаталог

Данный тип генерируетdatasets.xmlделатьEDDGridLonPM180наборы данных от всехEDDGridнаборы данных в одномERDDAPкоторые имеют значения долготы более 180.

  • Если возможно, используйте публичный IP-адрес. (Например, https://oceanwatch.pfeg.noaa.gov ) URL, а не локальный цифровой IP-адрес (Например, https://12.34.56.78 ) . ЕслиERDDAP™Доступен только через локальный цифровой IP-адрес, который вы можете использовать.<конвертироватьToPublicSourceUrl> (#конвертный публичный ресурс) такERDDAP™Пользователи видят публичный адрес, даже еслиERDDAP™Получает данные с локального числового адреса.  
EDDGridLon0360FromErddapКаталог

Данный тип генерируетdatasets.xmlделатьEDDGridLon0360наборы данных от всехEDDGridнаборы данных в одномERDDAPкоторые имеют значения долготы менее 0.

  • Если возможно, используйте публичный IP-адрес. (Например, https://oceanwatch.pfeg.noaa.gov ) URL, а не локальный цифровой IP-адрес (Например, https://12.34.56.78 ) . ЕслиERDDAP™Доступен только через локальный цифровой IP-адрес, который вы можете использовать.<конвертироватьToPublicSourceUrl> (#конвертный публичный ресурс) такERDDAP™Пользователи видят публичный адрес, даже еслиERDDAP™Получает данные с локального числового адреса.  
EDDs From Files

Учитывая начальный каталог, он пересекает каталог и все подкаталоги и пытается создать набор данных для каждой группы файлов данных, которые он находит.

  • Это предполагает, что когда набор данных найден, набор данных включает все подкаталоги.
  • Если набор данных найден, аналогичные каталоги братьев и сестер будут рассматриваться как отдельные наборы данных. (Например, каталоги 1990-х, 2000-х, 2010-х годов будут генерировать отдельные наборы данных.) . Их легко комбинировать вручную — просто измените первый набор данных.<fileDir> в родительский каталог и удалить все последующие наборы данных.
  • Это позволит создать лишь частьdatasets.xmlнаиболее распространенный тип расширения файла в каталоге (Не считая .md5, который игнорируется) . Итак, дается каталог с 10.ncфайлы и файлы 5.txt, набор данных будет генерироваться для.ncТолько файлы.
  • Это предполагает, что все файлы в каталоге с одинаковым расширением принадлежат к одному и тому же набору данных. Если в каталоге есть.ncФайлы с данными SST и некоторые.ncФайлы с данными хлорофилла, только один образец.ncФайл будет читаться (ССТ? Хлорофилл?) Для этого типа файла будет создан только один набор данных. Этот набор данных, вероятно, не будет загружаться из-за сложностей с загрузкой двух типов файлов в один и тот же набор данных.
  • Если в каталоге меньше 4 файлов с наиболее распространенным расширением, это предполагает, что они не являются файлами данных и просто пропускают каталог.
  • Если в каталоге есть 4 или более файлов, но это не может успешно генерировать частьdatasets.xmlдля файлов (Например, неподдерживаемый тип файла) Это будет генерироватьEDDTable FromFileNamesНабор данных для файлов.
  • В конце диагностики, что это записывает в файл журнала, непосредственно передdatasets.xmlКуски, это напечатает таблицу с резюме информации, собранной путем пересечения всех подкаталогов. В таблице будут перечислены все подкаталоги и указан наиболее распространенный тип расширения файла, общее количество файлов и какой тип набора данных был создан для этих файлов. (если есть) . Если вы столкнулись со сложной, глубоко вложенной файловой структурой, рассмотрите возможность запуска GenerateDatasets. Xml с EDDType=EDDsFromFiles только для генерации этой информации,
  • Этот вариант может не очень хорошо угадать лучший EDDType для данной группы файлов данных, но это быстро, легко и стоит попробовать. Если исходные файлы подходят, они хорошо работают и являются хорошим первым шагом в создании исходных файлов.datasets.xmlдля файловой системы с большим количеством подкаталогов, каждый с файлами данных из разных наборов данных.  
EDDTable FromEML и EDDTable FromEMLBatch

Специальный EDDType генерируетdatasets.xmlчтобы сделатьEDDTableFromAsciiFilesнабор данных из каждой таблицы, описанной вЭкологический язык метаданныхXML файл. Вариант «Бэтч» работает со всеми файлами EML в локальном или удаленном каталоге. Пожалуйста, смотрите отдельноДокументация для EDDTableFromEML.  

EDDTable FromInPort

Этот специальный EDDType генерируетdatasets.xmlчтобы сделатьEDDTableFromAsciiFilesнабор данных из информации винпорт-хмлФайл. Если вы можете получить доступ к исходному файлу данных (файл inport-xml должен иметь подсказки, где его найти) Вы можете создать рабочий набор данных вERDDAP.

Следующие шаги описывают, как использовать наборы данных Xml с файлом inport-xml, чтобы получить рабочий набор данныхERDDAP.

  1. Если у вас есть доступ к файлу inport-xml (URL или локальный файл) Скачать GenerateDatasets Xml, укажите EDDType=EDDTableFromInPort, укажите URL-адрес inport-xml или полное имя файла, укажите, какой ребенок=0, и укажите другую запрашиваемую информацию (если известно) . (На данный момент вам не нужно иметь файл исходных данных или указывать его имя.) Настройка whatChild=0 сообщает наборы данных Xml записывает информацию для все из<информация о сущности-атрибуте><в файле inport-xml (Если есть какие-либо) . Он также распечатывает сводку справочной информации, включая все скачиваемые URL-адреса, перечисленные в файле inport-xml.
  2. Просмотрите всю эту информацию (Справочная информация, которая генерирует наборы данных Принты Xml) Посетить download-url (s) Чтобы попытаться найти исходный файл данных (s) . Если вы можете найти его (их) скачать (их) в каталог, доступный дляERDDAP. (Если вы не можете найти какие-либо исходные файлы данных, нет смысла продолжать.)
  3. Run Generate скачать Наборы данных Снова XML. Если исходный файл данных соответствует одному из файлов inport-xml<информация о сущности-атрибуте><Сущность>, указать, какой ребенок= Число этой организации (Например, 1, 2, 3, ...) .ERDDAP™будет пытаться сопоставить имена столбцов в файле исходных данных с именами в информации об объекте и предложит принять/отклонить/исправить любые расхождения. Или, если файл inport-xml не имеет<информация о сущности-атрибуте><Сущность>, указать, какой ребенок = 0.
  4. В кускеdatasets.xmlПроизводитель: GenerateDatasets Xml, revise [глобальный]<addAttributes> (#глобальные атрибуты) по мере необходимости/желания.
  5. В кускеdatasets.xmlЭто сделано GenerateDatasetsXml, добавьте/пересмотрите [<dataVariable> (#datavariable) информацию по мере необходимости/желания для описания каждой из переменных. Убедитесь, что вы правильно определили каждую переменную. [править]<sourceName> (#sourcename) (Как видно из источника) , [править]<destinationName> (#назначение) (которые имеют больше ограничений, чем разрешенные персонажи.sourceName) , [править]<единицы> (#единицы) (Особенно если это апеременная времени или метки временигде необходимо указать формат) и [править]<missing\_value> (#missing_value) ,
  6. Когда вы близки к завершению, неоднократно используйтеDasDdsинструмент для быстрого определения того, является ли описание набора данных действительным и появится ли набор данных вERDDAP™Как ты хочешь.  

Было бы здорово, если бы группы, использующие InPort для документирования своих наборов данных, также использовали быERDDAP™Чтобы сделать реальные данные доступными:

  • ERDDAP™Это решение, которое можно использовать прямо сейчас, чтобы вы могли выполнить его.NOAA?Публичный доступ к результатам исследований (ПАРР) требованияПрямо сейчас, а не в какое-то неопределенное время в будущем.
  • ERDDAP™Это делает данные доступными для пользователей, а не только метаданные. (Что такое метаданные без данных?)
  • ERDDAP™Поддерживает метаданные (В частности, единицы переменных) В отличие от некоторых других рассматриваемых серверов данных. (Чем хороши данные без метаданных?) Использовать программное обеспечение, которое не поддерживает метаданные, означает приглашать данные к неправильному пониманию и неправильному использованию.
  • ERDDAP™Это бесплатное программное обеспечение с открытым исходным кодом, в отличие от некоторых других рассматриваемых программ. Постоянное развитиеERDDAP™Уже оплачено. ПоддержкаERDDAP™Пользователи свободны.
  • ERDDAPВнешний вид может быть легко настроен, чтобы отразить и выделить вашу группу. (неERDилиERDDAP) .
  • ERDDAP™предлагает последовательный способ доступа ко всем наборам данных.
  • ERDDAP™Он может считывать данные из многих типов файлов данных и реляционных баз данных.
  • ERDDAP™Они могут иметь дело с большими наборами данных, включая наборы данных, где исходные данные находятся во многих файлах данных.
  • ERDDAP™может записывать данные во многие типы файлов данных по запросу пользователя, включая типы файлов научных данных, такие как netCDF, ESRI .csv иODV .txt.
  • ERDDAP™может создавать пользовательские графики и карты подмножеств данных на основе спецификаций пользователя.
  • ERDDAP™может иметь дело с наборами данных, не относящихся к данным, такими как коллекции изображений, видео или аудиофайлов.
  • ERDDAP™Он был установлен и использован вБолее 60 учреждений по всему миру.
  • ERDDAP™является одним из серверов данных, рекомендуемых для использования внутриNOAAвNOAAПроцедурная директива о доступе к даннымВ отличие от других рассматриваемых программ.
  • ERDDAP™является продуктомNMFS/NOAAИспользуя его внутриNMFSиNOAAОн должен быть предметом гордости дляNMFSиNOAA.

Пожалуйста, дайтеERDDAP™Попробуй. Если вам нужна помощь, пожалуйста, оставьте сообщение вERDDAP™Группа Google.  

AddFillValueАтрибуты

Этот специальный вариант EDDType не является типом набора данных. Это инструмент, который может добавлять атрибуты \_FillValue к некоторым переменным в некоторых наборах данных. Видишь?AddFillValueАтрибуты.  

Найти дубликаты Время

Этот специальный вариант EDDType не является типом набора данных. Вместо этого он сообщает наборы данных Xml для поиска по коллекции сетчатых.nc (связанный) Файлы для поиска и распечатки списка файлов с дублирующими значениями времени. Когда он смотрит на временные значения, он преобразует их из исходных единиц в"seconds since 1970-01-01"В случае, если разные файлы используют разные строки блоков. Вы должны предоставить стартовый каталог (с или без клещей) , имя файла регулярное выражение (Например, .\*\.nc ) и имя переменной времени в файлах.  

слияние

Этот специальный вариант EDDType не является типом набора данных. Вместо этого он сообщает наборы данных Xml для печатислияниеподобная распечатка одной.nc,.ncмл, или.hdfФайл. Он использует netcdf-java.NCdumpЭто более ограниченный инструмент, чем C-версия NCdump. Если вы используете эту опцию, GenerateDatasetsXml попросит вас использовать один из вариантов: «-h» (заголовок) "-с" (координаты vars) "Вальс" (по умолчанию) , "-v var1;var2", "-v var1" (0,0:10,0:20) ". Это полезно, потому что без ncdump трудно понять, что находится в одном месте..nc,.ncмл, или.hdfфайл и, таким образом, какой EDDType вы должны указать для GenerateDatasets Хмл. Для одного.ncфайл мл, это напечатает вывод ncdump для результата.ncИзменения файла мл, применяемые к базовому.ncили.hdfФайл.  

DasDds

  • DasDds Программа командной строки, которую вы можете использовать после того, как вы создали первую попытку XML для нового набора данных.datasets.xml. С помощью DasDds вы можете многократно тестировать и совершенствовать XML. При использовании программы DasDds:
    1. В Windows, когда вы впервые запускаете DasDds, вам нужно отредактировать DasDds. bat файл с текстовым редактором, чтобы изменить путь к java. Файл exe, чтобы Windows могла найтиJava.
    2. DasDds просит васdatasetIDДля набора данных, над которым вы работаете.
    3. DasDds пытается создать набор данныхdatasetID.
      • DasDds всегда печатает множество диагностических сообщений. Если вы используете "DasDds -verbose", DasDds будет печатать больше диагностических сообщений, чем обычно.
      • Для безопасности DasDds всегда удаляет всю кэшированную информацию о наборе данных. (файлы) Для набора данных, прежде чем пытаться создать набор данных. Это эквивалентно установлениюжесткий флагТаким образом, для агрегированных наборов данных вы можете временно настроить файл NameRegex, чтобы ограничить количество файлов, которые находит конструктор данных.
      • Если набор данных не загружается (по какой бы то ни было причине) DasDds остановится и покажет вам сообщение об ошибке для первой обнаруженной ошибки. Не пытайтесь угадать, в чем может быть проблема. Внимательно прочитайте сообщение.
        При необходимости прочитайте предыдущие диагностические сообщения, чтобы найти больше подсказок и информации.
      • Измените набор данных XML, чтобы попытаться решить эту проблему.
        И пусть DasDds снова попытаются создать набор данных.
      • Если вы неоднократно решаете каждую проблему, вы в конечном итоге решите все проблемы.
        и набор данных будет загружаться.
    4. Все выходы DasDds (диагностика и результаты) написаны на экране и BigParent Директория /logs/DasDds.log.
    5. Если DasDds может создать набор данных, то DasDds покажет вам.das (Структура атрибутов набора данных) ,.dds (Описатель набора данных Структура) иПробелы во времени (временные промежутки) информацию для набора данных на вашем экране и запишите их на BigParent Директория /logs/DasDds.out.
    6. Часто вам нужно внести небольшие изменения в XML набора данных, чтобы очистить метаданные набора данных и перезапустить DasDds.

Бонус Инструмент третьей стороны:ERDDAP- кремень

ERDDAP-lint - это программа от Роба Фуллера и Адама Лидбеттера из Ирландского института морской пехоты, которую вы можете использовать для улучшения метаданных.ERDDAP™наборы данных.ERDDAP-lint "содержит правила и простое статическое веб-приложение для проведения некоторых тестов проверки против вашегоERDDAP™Сервер. Все тесты проводятся в веб-браузере". Как будто[Инструмент Unix/Linux](https://en.wikipedia.org/wiki/Lint_(software)Вы можете изменить существующие правила или добавить новые. Видишь?ERDDAP- кременьЗа дополнительной информацией.

Этот инструмент особенно полезен для наборов данных, которые вы создали некоторое время назад и теперь хотите обновить свои текущие настройки метаданных. Ранние версии GenerateDatasets Xml не приложила никаких усилий для создания глобальной сети.creator\_name,creator\_emailСоздатель_тип, илиcreator\_urlметаданные. Вы можете использоватьERDDAP- идентифицировать наборы данных, в которых отсутствуют эти атрибуты метаданных.

Спасибо Робу и Адаму за то, что создали этот инструмент и сделали его доступным для всех.ERDDAP™сообщество.  

Основная структура этогоdatasets.xmlФайл

Необходимые и необязательные теги, разрешенные вdatasets.xmlфайл (Сколько раз они могут появляться) показаны ниже. На практике вашdatasets.xmlУ них будет много<теги dataset> и используйте только другие теги внутри<erddapDatasets по мере необходимости.

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

Возможно, в будущем будут разрешены и другие кодировки, но пока рекомендуется только ISO-8859-1.  

XInclude

Новая версия 2.25 поддерживает XInclude. Для этого необходимо использовать SAX-парсер.<Использование SaxParser>Правда</useSaxParser> в setup.xml. Это позволяет записывать каждый набор данных в свой файл, а затем включать их все в основной файл.datasets.xmlповторно использовать части определений набора данных или и то, и другое. Если вы хотите увидеть пример,EDDTestDataset.javaXInclude для повторного использования переменных определений.  

Заметки

Работая сdatasets.xmlФайл является нетривиальным проектом. Пожалуйста, внимательно прочитайте все эти заметки. После того, как вы выберететип набора данныхПожалуйста, внимательно прочитайте подробное описание.  

Выбор типа набора данных

В большинстве случаев есть только одинERDDAP™Тип набора данных, который подходит для данного источника данных. В некоторых случаях (например,.ncфайлы) Есть несколько вариантов, но обычно один из них определенно лучше. Первое и самое важное решение, которое вы должны принять: целесообразно ли рассматривать набор данных как группу многомерных массивов. (Если так, то посмотритеEDDGridТипы наборов данных) или в виде таблицы данных, подобной базе данных (Если так, то посмотритеТипы наборов данных EDDTable) .  

Обслуживание данных как есть

Обычно нет необходимости изменять источник данных. (Например, конвертировать файлы в другие типы файлов) так чтоERDDAP™Может служить. Одно из предположений оERDDAP™Источник данных будет использоваться как есть. Обычно это работает хорошо. Некоторые исключения:

  • Реляционные базы данных и Кассандра -ERDDAP™Он может обслуживать данные непосредственно из реляционных баз данных и Cassandra. Но из-за проблем с безопасностью, балансировкой нагрузки и производительностью вы можете настроить другую базу данных с теми же данными или сохранить эти данные.NetCDFv3.ncФайлы и иметьERDDAP™обслуживать данные из нового источника данных. Видишь?EDDTable FromDatabaseиEDDTable From Кассандра.
  • Не поддерживаемые источники данных -ERDDAP™Может поддерживать большое количество типов источников данных, но мир заполнен 1000-ми годами. (миллионов?) Различные источники данных (В частности, структуры файлов данных) . ЕслиERDDAP™Не поддерживает источник данных:
    • Если источником данных являетсяNetCDF .ncФайлы, которые вы можете использоватьNcMLизменять файлы данных на лету или использоватьNCOпостоянно изменять файлы данных.
    • Вы можете записать данные в тип источника данных, которыйERDDAP™Поддержка.NetCDF-3.ncФайлы являются хорошей общей рекомендацией, потому что они являются двоичными файлами.ERDDAP™Можно читать очень быстро. Для табличных данных рассмотрите возможность хранения данных в коллекции.ncФайлы, которые используютCF Дискретная геометрия выборки (DSG) Структуры данных Ragged Array и так могут обрабатыватьсяERDDAP?EDDTable FromNcCFFiles). Если они логически организованы (Каждый с данными для куска пространства и времени) ,ERDDAP™Они могут быстро извлекать из них данные.
    • Вы можете запросить поддержку этого источника данных.ERDDAP™По электронной почте Крис. Джон на noaa.gov.
    • Вы можете добавить поддержку этого источника данных, написав код для его обработки самостоятельно. Видишь?тотERDDAP™Руководство программиста
  • Скорость.ERDDAP™Они могут считывать данные из одних источников гораздо быстрее, чем из других. Например, чтениеNetCDFv3.ncСчитывание файлов ASCII происходит медленнее. Если есть большой (1000) или огромный (10 000) количество исходных файлов данных,ERDDAP™Они будут реагировать на запросы данных медленно. Обычно разница не заметна для людей. Однако, если вы думаетеERDDAP™медленный для данного набора данных, вы можете решить проблему, написав данные для более эффективной настройки (обычно: несколько, хорошо структурированных,NetCDFv3.ncфайлы) . Для табличных данных см.Этот совет.  

подсказка

Часто проще создать XML для набора данных, сделав копию рабочего описания набора данных в dataset.xml, а затем изменив его.

Кодирование специальных символов

С тех порdatasets.xmlXML-файл, который вы должныи кодировать"&",<", и ">" в любом содержании как "&",<", и ">". Неправильно:<Название Время и приливы</название> Правильно:<Название Time &amp - Приливы</название>  

XML не терпит синтаксических ошибок

После редактирования файла dataset.xml рекомендуется проверить, что результатХорошо сформированный XMLпутем вставки текста XML в XML-проверку какxmlvalidation.  

Устранение неполадок Советы

  • Другие способы диагностики проблем с наборами данных
    Помимо двух основныхИнструменты,
  • log.txtЭто лог-файл со всемиERDDAPДиагностические сообщения.
  • TheЕжедневный отчетимеет больше информации, чем страница статуса, включая список наборов данных, которые не загружались, и исключения (ошибки) Они генерируются.
  • TheСтраница статусаЭто быстрый способ проверитьERDDAPстатус от любого веб-браузера. Он включает в себя список наборов данных, которые не загружались. (Хотя и не соответствующие исключения) Задачи и задачиСтатистика (показать прогрессEDDGridКопияиEDDTableCopyнаборы данных и любыеEDDGridИз материаловилиEDDTable Из материаловнаборы данных, которые используюткэш FromUrl (Но не кэш SizeGB) ) .
  • Если вы застряли, посмотрите нашРаздел о дополнительной поддержке.  

Специальные переменные

  • Долгота, широта, высота (или глубина) и время (LLAT) переменный destinationNameОни особенные.
  • В целом:
    • Переменные LLAT известныERDDAP™Если переменная оси (дляEDDGridнаборы данных) переменная данных (Для наборов данных EDDTable) destinationNameэто «долгота», «широта», «высота», «глубина», или"time".
    • Мы настоятельно рекомендуем вам использовать эти стандартные имена для этих переменных, когда это возможно. Ни один из них не требуется. Если вы не используете эти переменные имена,ERDDAP™Они не признают их значения. Например, переменные LLAT обрабатываются специально с помощью Make A Graph. ( datasetID граф) Если переменная оси X является «долготой», а переменная оси Y — «широтой», вы получите карту. (использование стандартной проекции, а также маски, политических границ и т.д.) Вместо графа.
    • ERDDAP™автоматически добавит много метаданных в переменные LLAT; (Например, "ioos\_category","единицы", а также несколько связанных со стандартами атрибутов, таких как "\_CoordinateAxisType") .
    • ERDDAP™автоматически будет добавлять множество глобальных метаданных, связанных со значениями LLAT выбранного подмножества данных; (Например, "геопространственный_lon_min") .
    • Клиенты, которые поддерживают эти стандарты метаданных, смогут использовать добавленные метаданные для размещения данных во времени и пространстве.
    • Клиентам будет проще генерировать запросы, которые включают переменные LLAT, потому что имена переменных одинаковы во всех соответствующих наборах данных.
  • Для переменной «долгота» и переменной «широта»:
    • ИспользуйтеdestinationNames «долгота» и «широта», только еслиединицыЭто градусы востока и севера соответственно. Если ваши данные не соответствуют этим требованиям, используйте разные имена переменных. (Например, x, y, lonRadians, latRadians) .
    • Если у вас есть данные о долготе и широте, выраженные в разных единицах и, следовательно, с разными значениями.destinationNames, например, lonRadians и latRadians, Make a Graph ( datasetID граф) Сделаем графики (Например, временные ряды) Вместо карт.
  • Для переменной «высота» и переменной «глубина»:
    • ИспользуйтеdestinationName«Высота» для определения расстояния данных над уровнем моря (Положительные = «высшие» значения) . Вы можете использовать «высоту» для расстояний ниже уровня моря, если значения отрицательны ниже уровня моря (или если вы используете, например, [править]<Att name=""scale\_factor"тип="int">- 1 1</att> (#scale-фактор) Преобразование значений глубины в значения высоты.
    • ИспользуйтеdestinationName"глубина" для определения расстояния данных ниже уровня моря (Положительные = "низовые" значения) .
    • Набор данных может не иметь переменных «высота» и «глубина».
    • Для этих переменных именединицыдолжны быть «м», «метр» или «метры». Если единицы отличаются (Например, фетомы) Вы можете использовать [править]<Att name=""scale\_factor" некоторые ценность </att> (#scale-фактор) и<Att name="units">meters</att> (#единицы) Преобразовать единицы в метры.
    • Если ваши данные не соответствуют этим требованиям, используйте другойdestinationName (Например, над землей, расстояние Внизу) .
    • Если вы знаете вертикальный CRS, пожалуйста, укажите его в метаданных, например, "EPSG:5829" (мгновенная высота над уровнем моря) "EPSG:5831" (мгновенная глубина ниже уровня моря) Или "EPSG:5703" (высота NAVD88) .
  • Для"time"переменная:
    • ИспользуйтеdestinationName "time"только для переменных, которые включают всю дату + время (Дата, если это все, что есть) . Если, например, существуют отдельные столбцы для даты и времени OfDay, не используйте имя переменной."time".
    • Видишь?единицыдля получения дополнительной информации об атрибутах единиц времени и переменных времени.
    • Временная переменная и связанные с нейвремя Штамповые переменныеОни уникальны тем, что всегда преобразуют значения данных из временного формата источника. (Что бы это ни было) в численное значение (секунды с 1970-01-01T00:00:00Z) или струнное значение (ISO 8601:2004 (Е) формат) В зависимости от ситуации.
    • Когда пользователь запрашивает данные времени, он может запросить их, указав время в качестве числового значения. (секунды с 1970-01-01T00:00:00Z) или струнное значение (ISO 8601:2004 (Е) формат) .
    • ERDDAP™имеет полезность дляПреобразовать числовой Время в/из струнного времени.
    • Видишь?КакERDDAPСделки со временем.

Почему только две основные структуры данных?

  • Поскольку клиентам-людям и компьютерным клиентам трудно иметь дело со сложным набором возможных структур набора данных,ERDDAP™использует только две основные структуры данных:
  • Конечно, не все данные могут быть выражены в этих структурах. Таблицы, в частности, являются очень гибкими структурами данных. (Посмотрите на успех программ реляционных баз данных) .
  • Это облегчает создание запросов данных.
  • Это делает ответы на данные простой структурой, что облегчает обслуживание данных в более широком спектре типов стандартных файлов. (Часто они поддерживают простые структуры данных.) . Это главная причина, по которой мы создалиERDDAP™сюда.
  • Это, в свою очередь, облегчает нам (или кто-либо) Написать клиентское программное обеспечение, которое работает со всемиERDDAP™наборы данных.
  • Это облегчает сравнение данных из разных источников.
  • Мы знаем, что если вы привыкли работать с данными в других структурах данных, вы можете изначально подумать, что этот подход является упрощенным или недостаточным. Но все структуры данных имеют компромиссы. Никто не идеален. Даже структуры do-it-all имеют свои недостатки: работа с ними сложна, и файлы могут быть написаны или прочитаны только с помощью специальных библиотек программного обеспечения. Если вы принимаетеERDDAPПодход достаточно, чтобы попытаться работать с ним, вы можете обнаружить, что он имеет свои преимущества. (Поддержка нескольких типов файлов, которые могут содержать ответы данных) . TheERDDAP™слайд-шоу (В частности,Структуры данных сливаются) Много говорят по этим вопросам.
  • И даже если этот подход кажется вам странным, большинствоERDDAP™Клиенты никогда не заметят — они просто увидят, что все наборы данных имеют хорошую простую структуру, и они будут благодарны за то, что они могут получать данные из самых разных источников, возвращаемых в самых разных форматах файлов.  

Размеры

  • Что, если переменные сетки в исходном наборе данных не имеют одинаковых переменных оси?
    вEDDGridВсе переменные данных должны использоваться (доля) Все переменные оси. Таким образом, если исходный набор данных имеет некоторые переменные с одним набором измерений и другие переменные с другим набором измерений, вам придется сделать два набора данных.ERDDAP. Например, вы можете сделать одинERDDAP™Оригинальное название: Some Title (на поверхности) "для удержания переменных, которые просто используют\[время\]\[широта\]\[долгота\]Размеры и сделать другойERDDAP™Оригинальное название: Some Title (на глубинах) "для удержания переменных, которые используют\[время\]\[высота\]\[широта\]\[долгота\]. Или, возможно, вы можете изменить источник данных, чтобы добавить измерение с одним значением. (Например, высота = 0) Чтобы переменные были последовательными.

ERDDAP™не обрабатывает более сложные наборы данных (Например, модели, которые используют сетку треугольников.) Хорошо. Вы можете использовать эти наборы данных вERDDAP™путем создания двух или более наборов данных вERDDAP™ (чтобы все переменные данных в каждом новом наборе данных имели одинаковый набор переменных оси) Но это не то, чего хотят пользователи. Для некоторых наборов данных вы можете рассмотреть возможность создания обычной сетчатой версии набора данных и предложить ее в дополнение к исходным данным. Некоторые клиентские программы могут работать только с обычной сетью, поэтому, делая это, вы получаете дополнительных клиентов.  

Проектируемые сетчатые данные

Некоторые сетевые данные имеют сложную структуру. Спутниковый уровень 2 ("Вдоль трассы") Данные не используют простой прогноз. Модели (и другие) Часто работает с сетчатыми данными по различным нецилиндрическим проекциям. (Например, конический, полярный стереографический, треугольный) или в неструктурированных сетях (Более сложная структура данных) . Некоторые конечные пользователи хотят, чтобы эти данные были такими, как есть, поэтому нет потери информации. Для таких клиентов,ERDDAP™Данные могут служить, как есть, только еслиERDDAP™Администратор разбивает исходный набор данных на несколько наборов данных, причем каждая часть включает переменные, которые разделяют одни и те же переменные оси. Да, это кажется странным для вовлеченных людей, и это отличается от большинства других.OPeNDAPСерверы. НоERDDAP™Особое внимание уделяется обеспечению доступности данных во многих форматах. Это возможно потому, чтоERDDAP™требует более однородной структуры данных. Хотя это немного неловко (т.е. отличается от ожидаемого) ,ERDDAP™Может распространять прогнозируемые данные.

\[Да,ERDDAP™Они могут иметь более свободные требования к структуре данных, но сохраняют требования к выходным форматам. Но это приведет к путанице среди многих пользователей, особенно новичков, поскольку многие, казалось бы, действительные запросы на данные с различными структурами будут недействительными, потому что данные не будут вписываться в тип файла. Мы продолжаем возвращаться к дизайну системы.\]

Некоторым конечным пользователям нужны данные в lat lon цилиндрической проекции, такой как Equirectangular / plate carrée или Mercator, для удобства использования в различных ситуациях. В таких случаях мы поощряемERDDAP™Администратор использует другое программное обеспечение (NCO?Matlab? Р? IDV? ...?) Перепроецировать данные на географическую (Трехугольная проекция / пластина carrée) или другой цилиндрической проекции и служат этой форме данных вERDDAP™как другой набор данных. Это похоже на то, что делают люди, когда преобразуют данные спутникового уровня 2 в данные уровня 3. Одним из таких инструментов являетсяNCOкоторый предлагает варианты расширения для регидирования данных.

ГИС и перепроектирование данных

Поскольку ГИС-мир часто ориентирован на карты, ГИС-программы обычно предлагают поддержку перепроектирования данных, т.е. построения данных на карте с другой проекцией.

В настоящее времяERDDAP™Не имеет инструментов для репроектирования данных. Вместо этого мы рекомендуем использовать внешний инструмент для создания варианта набора данных, где данные были перепроецированы из первоначальной формы на прямоугольную форму. (широта долготы) подходящий дляERDDAP.

По нашему мнению, CF/DAPМир немного отличается от мира ГИС и работает на несколько более низком уровне.ERDDAP™Это отражается. В общем,ERDDAP™Предназначен для работы в основном с данными (Не карты) И не хочет меняться (Например, репроект) Эти данные. ДляERDDAP™, сетчатые данные часто/обычно/предпочтительно связаны со значениями lat lon и цилиндрической проекцией, а не с значениями x,y некоторой проекции. В любом случае,ERDDAP™Он ничего не делает с проекцией данных; он просто передает данные через, как и его текущая проекция, на теорию, что репроекция является значительным изменением данных.ERDDAP™Они не хотят быть вовлеченными в значительные изменения. Кроме того, последующие пользователи могут наивно перепроектировать данные снова, что будет не так хорошо, как просто сделать одну репроекцию. (Так что, еслиERDDAP™Администратор хочет предложить данные в другом прогнозе, отлично; просто перепроектируйте данные в автономном режиме и предложите их в виде другого набора данных.ERDDAP. Множество спутниковых наборов данных предлагаются в качестве так называемого уровня 2. (полоса) и как уровень 3 (Двухугольная проекция) версии.) КогдаERDDAP™Делает карты (напрямую или черезWMSили KML) ,ERDDAP™В настоящее время предлагается делать карты только с проекцией Equirectangular / plate carrée, которая, к счастью, принята большинством картографических программ.

Мы поощряемERDDAP™администраторы используют другое программное обеспечение (NCO?Matlab? Р? IDV? ...?) Перепроецировать данные на географическую (Трехугольная проекция / пластина carrée) или другой цилиндрической проекции и служат этой форме данных вERDDAP™как другой набор данных. Это похоже на то, что делают люди, когда преобразуют данные спутникового уровня 2 в данные уровня 3. Одним из таких инструментов являетсяNCOкоторый предлагает варианты расширения для регидирования данных.

Мы надеемся, чтоERDDAP™В будущем будут созданы встроенные инструменты для создания карт с другими проекциями. Мы также надеемся на улучшение связей с ГИС в будущем. (кроме текущегоWMSобслуживание) . Страшно, что в этом "современном" мире связи между КФ/DAPМир и ГИС все еще очень слабы. Обе эти вещи находятся в списке дел. (Если вы хотите помочь, особенно с подключениемERDDAP™MapServer, пожалуйста, напишите Крису. Джон на noaa.gov.)

Типы данных

ERDDAP™Поддерживает следующие типы данных (имена являются деликатными;'u'Префикс означает «неподписанный»; число многих имен в других системах — это число битов.) :

байт

  • байт подписанные целочисленные значения с диапазоном от -128 до 127. В других системах это иногда называют int8. Это называется «tinyint» от SQL и Cassandra. ERDDAP™конвертироватьбулевыйиз некоторых источников (Например, SQL и Cassandra) в байтах вERDDAP™с значением 0 = ложное, 1 = истинное и 127 =missing\_value.

убайт

  • убайт имеет неподписанные целые значения с диапазоном от 0 до 255. В других системах это иногда называют uint8.

короткий

  • короткий имеет целочисленные значения с диапазоном от -32768 до 32767. В других системах это иногда называют int16. Это называется «smallint» от SQL и Cassandra.

низкорослый

  • низкорослый имеет неподписанные целые значения с диапазоном от 0 до 65535. В других системах это иногда называют uint16.

инт

  • инт подписанные целочисленные значения с диапазоном от -2147483648 до 2147483647. В других системах это иногда называют int32. Это называется "целое число"|числовой (?) "по SQL" и "внутри" по Кассандре.

uint

  • uint имеет неподписанные значения целого числа с диапазоном от 0 до 4294967295. В других системах это иногда называют uint32.

длинный

  • длинный имеет подписанные целочисленные значения с диапазоном -9223372036854775808 до 9223372036854775807. В других системах это иногда называют int64. Это называется "бигинта"|числовой (?) "по SQL и "бигинту" Кассандры". Поскольку многие типы файлов не поддерживают длинные данные, их использование не рекомендуется. По возможности используйте двойной (см. ниже) .

улун

  • улун имеет неподписанные целые числа с диапазоном от 0 до 18446744073709551615 В других системах это иногда называют uint64. Поскольку многие типы файлов не поддерживают данные, их использование не рекомендуется. По возможности используйте двойной (см. ниже) .

плавать

  • плавать IEEE 754 плавает с диапазоном приблизительно +/- 3.402823466e+38. В других системах это иногда называют float32. Это называется "реальным".|плавать (?) |десятичный (?) |числовой (?) «SQL» и «Float» Кассандра. Особое значение NaN означает Не-число. ERDDAP™Преобразует положительные и отрицательные значения бесконечности в NaN.

двойной

  • двойной IEEE 754 двойной с диапазоном приблизительно +/- 1,7976931348623157E+308. В других системах это иногда называют float64. Это называется «двойной точностью».|плавать (?) |десятичный (?) |числовой (?) "по SQL и "двойной" по Кассандре". Особое значение NaN означает Не-число. ERDDAP™Преобразует положительные и отрицательные значения бесконечности в NaN.

шар

  • шар Одиночный, 2 байт (16-битный) Уникальный код UCS-2варьировать от\u0000 (#0) через\uffff (#65535) . \uffffОпределение не-характерно, аналогично двойному значению NaN. Использование char не рекомендуется, потому что многие типы файлов либо не поддерживают чары, либо поддерживают только 1-байтовые чары. (см. ниже) . Подумайте об использовании струн вместо этого. Пользователи могут использовать переменные char для создания графиков.ERDDAP™преобразует символы в их кодовый номер Unicode, который может использоваться в качестве числовых данных.

Струна

  • Струна представляет собой последовательность 0 или более, 2 байта (16-битный) Unicode UCS-2 символы. ERDDAP™использует/интерпретирует 0-длинную строку как недостающее значение.ERDDAP™Он не поддерживает настоящую нулевую строку. Теоретическая максимальная длина струн составляет 2147483647 символов, но, вероятно, в разных местах существуют различные проблемы даже с несколько более короткими струнами. ИспользоватьERDDAPString for SQL's character, varchar, character varying, binary, varbinary, interval, array, multiset, xml, and any other database data type that doesn't fit cleanly with any otherERDDAP™Тип данных. ИспользоватьERDDAPСтруна для "текста" Кассандры и любого другого типа данных Кассандры, который не соответствует чисто ни одному другомуERDDAP™Тип данных.  

ПередERDDAP™v2.10,ERDDAP™Он не поддерживал неподписанные целочисленные типы внутри и предлагал ограниченную поддержку в своих считывателях данных и авторах.

Ограничения типа данных

Вы можете думать оERDDAP™как система, которая имеет виртуальные наборы данных и которая работает путем считывания данных из источника набора данных во внутреннюю модель данных и записи данных в различные службы (например,(OPeN)DAP,WMS) и типы файлов в ответ на запросы пользователей.

  • Каждый считыватель ввода поддерживает подмножество типов данных, которыеERDDAP™Поддержка. Читать данные вERDDAPВнутренние структуры данных не являются проблемой.
  • Каждый автор вывода также поддерживает подмножество типов данных. Это проблема, потому чтоERDDAPНапример, нужно втиснуть длинные данные в типы файлов, которые не поддерживают длинные данные.  

Ниже приведены объяснения ограничений (или нет) различных авторов и какERDDAP™занимается решением проблем. Такие осложнения являются неотъемлемой частьюERDDAPЦель - сделать разрозненные системы совместимыми.

АССИИ

  • АССИИ (.csv,.tsvи т.д.) текстовые файлы -
    • Все числовые данные записываются через представление струн. (с отсутствующими значениями данных, появляющимися в виде строк 0-длины) .

    • ХотяERDDAP™правильно записывает длинные и длинные значения в текстовые файлы ASCII, многие читатели (Например, программы электронных таблиц) Они не могут правильно обращаться с длинными и длинными значениями и вместо этого преобразовывать их в двойные значения. (потеря точности в некоторых случаях) .

    • Данные Char и String записываются через JSON Strings, которые обрабатывают все символы Unicode. (Примечательно, что «необычные» персонажи за пределами ASCII #127, например, евро-персонаж появляется как «\u20ac».) .

Джон

  • Джон (.json,.jsonlCSVи т.д.) текстовые файлы -
    • Все числовые данные записываются через его струнное представление.
    • Данные Char и String записываются как JSON Strings, которые обрабатывают все символы Unicode. (Примечательно, что «необычные» персонажи за пределами ASCII #127, например, евро-персонаж появляется как «\u20ac».) .
    • Недостающие значения для всех типов числовых данных выглядят как нуль.  

.nc3 Файлы

  • .nc3 файла изначально не поддерживают неподписанные целочисленные типы данных. До CF v1.9 CF не поддерживал неподписанные целые типы. Чтобы справиться с этим,ERDDAP™2.10+ следует стандарту NUG и всегда добавляет атрибут «\_Unsigned» со значением «истинно» или «ложно», чтобы указать, являются ли данные из неподписанной или подписанной переменной. Все целочисленные атрибуты пишутся как подписанные атрибуты. (например, байт) с подписанными значениями (например, убайт)actual\_rangeАтрибут со значениями от 0 до 255, появляется как байтовый атрибут со значениями от 0 до -1 (обратное значение комплемента двух значений вне диапазона). Нет простого способа узнать, какие целочисленные атрибуты следует читать как неподписанные атрибуты.ERDDAP™Поддерживает атрибут «\_Unsigned» при чтении.nc3 файла.
  • .nc3 файла не поддерживают длинные или длинные типы данных.ERDDAP™Это происходит путем временного преобразования их в двойные переменные. Двойники могут точно представлять все значения до +/- 9 007 199 254 740 992 Что составляет 253. Это несовершенное решение.UnidataОтказывается от незначительного обновления до.nc3 для решения этой и связанных с ней проблем, ссылаясь.nc4.4 (серьезное изменение) как решение.
  • Спецификация CF (до v1.9) Он сказал, что поддерживает тип данных char, но неясно, предназначен ли char только в качестве строительных блоков char-массивов, которые фактически являются струнами. Вопросы к их списку рассылки давали только запутанные ответы. Из-за этих осложнений лучше всего избегать переменных шара.ERDDAP™Используйте струнные переменные, когда это возможно.
  • Традиционно,.nc3 файла поддерживают только строки с кодировкой ASCII (7-битный, #0 - #127) персонажей. Нюг (иERDDAP) расширить (Начало 2017) путем включения атрибута "\_Encoding" со значением "ISO-8859-1" (Расширение ASCII, которое определяет все 256 значений каждого 8-битного символа.) или «UTF-8», чтобы указать, как кодируются данные строки. Другие кодировки могут быть законными, но не рекомендуется.  

.nc4 Файлы

  • .nc4 файла поддерживают всеERDDAPТипы данных.

Файлы NCCSV

Файлы NCCSV 1.0 не поддерживают неподписанные целые типы данных. NCCSV 1.1+ файлыПоддержка всех неподписанных целочисленных типов данных.  

DAP

  • (OPeN)DAP (.das, .dds, .asc ASCII файлы и .dods двоичные файлы) -
    • (OPeN)DAPПравильно обрабатывает короткие, короткие, int, uint, плавающие и двойные значения.
    • (OPeN)DAPимеет «байтовый» тип данных, который он определяет как неподписанный, в то время как исторически THREDDSERDDAP™Обработали «байт» как подписанный в их(OPeN)DAPуслуг. Чтобы справиться с этим лучше,ERDDAP™2.10+ следует стандарту NUG и всегда добавляет атрибут «\_Unsigned» со значением «истинно» или «ложно», чтобы указать, являются ли данные тем, чтоERDDAP™Звонок байт или убайт. Все байтовые и убайтовые атрибуты записываются как «байтовые» атрибуты с подписанными значениями (например, убайт).actual\_rangeАтрибут со значениями от 0 до 255, появляется как байтовый атрибут со значениями от 0 до -1 (обратное значение комплемента двух значений вне диапазона). Не существует простого способа узнать, какие «байтовые» атрибуты следует читать как атрибуты убайт.
    • (OPeN)DAPне поддерживает подписанные или неподписанные долги.ERDDAP™Это происходит путем временного преобразования их в двойные переменные и атрибуты. Двойники могут точно представлять все значения до 9 007 199 254 740 992. Что составляет 253. Это несовершенное решение.OPeNDAP (организация) Отказывается от незначительного обновления доDAP2.0 для решения этой и связанных с ней проблем, ссылаясь наDAP4.4 (серьезное изменение) как решение.
    • Потому что(OPeN)DAPне имеет отдельного типа данных и технически поддерживает только 1-байтовые символы ASCII; (#0 - #127) В строках переменные данных шара будут отображаться как строки длиной 1 символ в(OPeN)DAP.das, .dds и .dods ответы.
    • Технически, это(OPeN)DAPСпецификация поддерживает только строки с символами, кодируемыми ASCII (#0 - #127) . Нюг (иERDDAP) расширить (Начало 2017) путем включения атрибута "\_Encoding" со значением "ISO-8859-1" (Расширение ASCII, которое определяет все 256 значений каждого 8-битного символа.) или «UTF-8», чтобы указать, как кодируются данные строки. Другие кодировки могут быть законными, но не рекомендуется.  

Комментарии типа данных

  • Из-за плохой поддержки длинных, ulong и char данных во многих типах файлов, мы не рекомендуем использовать эти типы данных в других форматах.ERDDAP. Когда это возможно, используйте двойной вместо длинного и длинного, и используйте струну вместо чар.  
  • Метаданные - потому что(OPeN)DAPРеакции .das и .dds не поддерживают длинные или длинные атрибуты или типы данных. (Вместо этого покажите их как двойники.) Вместо этого вы можете использоватьERDDAPтабличное представление метаданных, как видно изhttp.../erdap/ информация / datasetID .html веб-страница (Например, https://coastwatch.pfeg.noaa.gov/erddap/info/cwwcNDBCMet/index.html ) (которые вы также можете получить в других типах файлов, например, .csv,.htmlTable,.itx,.json,.jsonlCSV1,.jsonlCSV,.jsonlKVP,.mat,.nc,.nccsv,.tsv,.xhtml) или.nccsvОтвет на метаданные (Например, https://coastwatch.pfeg.noaa.gov/erddap/tabledap/cwwcNDBCMet.nccsvMetadata хотя и.nccsvМетаданные доступны только для табличных наборов данных) которые поддерживают все типы данных (В частности, длинный, улун и чар) .  

Медиафайлы

Не все данные представляют собой массивы цифр или текстов. Некоторые наборы данных состоят из или включают медиафайлы, такие как изображения, аудио и видео файлы.ERDDAP™Он имеет некоторые специальные функции, которые облегчают пользователям доступ к медиафайлам. Это двухэтапный процесс:  

  1. Сделайте каждый файл доступным через собственный URL-адрес, через систему, которая поддерживает запросы диапазона байтов. Самый простой способ сделать это - поместить файлы в каталог, которыйERDDAP™Имеет доступ. (Если они находятся в контейнере, как.zipфайл, разблокируйте их, хотя вы можете предложить.zipФайлы для пользователей тоже.) Затем сделайтеEDDTable FromFileNamesНабор данных, чтобы сделать эти файлы доступными черезERDDAP™В частности, черезERDDAP?"files"система.

Все файлы доступны через EDDTableFromFileNames иERDDAP?"files"Поддержка системыЗапросы на диапазон байтов. Обычно, когда клиент (Например, браузер) Делает запрос на URL, получает весь файл в качестве ответа. Но при запросе диапазона байтов запрос указывает диапазон байтов из файла, и сервер возвращает только эти байты. Это актуально здесь, потому что аудио- и видеоплееры в браузерах работают только в том случае, если доступ к файлу осуществляется через байтовые запросы.

Необязательно: Если у вас есть более одного набора данных с соответствующими медиафайлами, вы можете сделать только один EDDTableFromFileNames, который имеет подпапку для каждой группы файлов. Преимущество заключается в том, что когда вы хотите добавить новые медиафайлы для нового набора данных, все, что вам нужно сделать, это создать новую папку и поместить файлы в эту папку. Папка и файлы будут автоматически добавлены в набор данных EDDTableFromFileNames.

  1. Необязательно: Если у вас есть набор данных, который включает ссылки на мультимедийные файлы, добавьте его вERDDAP. Например, у вас может быть файл .csv с строкой для каждого раза, когда кто-то видел кита, и столбец, который включает имя файла изображения, связанного с этим наблюдением. Если имя файла изображения является только именем файла, например, Img20141024T192403Z, а не полным URL-адресом, то вам нужно добавить:FileAccessBase Url и/или fileAccessSuffixатрибуты метаданных для этогоdataVariableкоторый определяет базовый URL и суффикс для этих имен файлов. Если вы сделали файлы доступными через EDDTableFromFileNames, URL будет в форме. основание /erddap/файлы datasetID / Например,
        <att name="fileAccessBaseUrl">*someBaseURL*</a>  
<att name="fileAccessSuffix">.png</a>

Если есть а.zipили другой файл контейнера со всеми медиафайлами, связанными с переменной данных, мы рекомендуем вам также сделать этот файл доступным для пользователей. (См. шаг 1 выше) Затем отождествляем его сFileAccessArchive Урлатрибут.

\[Начинать сERDDAP™v1.82\]Если вы сделаете первый шаг выше (или оба шага) Когда пользователь видитERDDAP™ "files"Система для этого набора данных (или просит видеть подмножество набора данных через.htmlTableЕсли вы сделали второй шаг) ,ERDDAP™Отобразится значок «?» слева от имени файла. Если пользователь парит над этим значком, он увидит всплывающее окно, показывающее изображение, или аудиоплеер, или видеоплеер. Браузеры поддерживают ограниченное количество типов

  • изображение (обычно .gif, .jpg и .png) ,
  • звук (обычно .mp3, .ogg и .wav) и
  • видеофайлы (Обычно это .mp4, .ogv и . веб) .

Поддержка варьируется в зависимости от различных версий различных браузеров на разных операционных системах. Поэтому, если у вас есть выбор, какой тип файла предложить, имеет смысл предложить эти типы.

Или, если пользователь нажимает на имя файла, отображаемое наERDDAP™Веб-страница, их браузер покажет изображение, аудио или видео файл в качестве отдельной веб-страницы. Это в основном полезно для просмотра очень большого изображения или видео, масштабированного до полного экрана, вместо всплывающего окна.

Работа с файлами AWS S3

Веб-служба Amazon (AWS) является продавцомоблачный сервисуслуг.S3Это система хранения объектов, предлагаемая AWS. Вместо иерархической системы каталогов и файлов традиционной файловой системы (Как жесткий диск в вашем ПК) , S3 предлагает только «ведра», которые содержат «объекты». (Мы позвоним им."files") .

Для файлов ASCII (Например, .csv) ,ERDDAP™Может работать с файлами в ведрах напрямую. Единственное, что вам нужно сделать, это указать<fileDir> для набора данных с использованием определенного формата для ведра AWS, например, https://bucketName.s3.aws-region.amazonaws.com/subdirectory/ . Вы не должны использовать<cacheFromUrl>. Смотрите ниже для деталей.

Но для бинарных файлов (например,.nc.grib, .bufr, и.hdfфайлы) Вы должны использовать<cacheFromUrl> система, описанная ниже.ERDDAPNetcdf-java (которыйERDDAP™Использование для чтения данных из этих файлов) и другое программное обеспечение для научных данных предназначено для работы с файлами в традиционной файловой системе, которая предлагаетуровень блоковДоступ к файлам (который позволяет читать фрагменты файла) S3 предлагает толькофайловый уровень (объект) Доступ к файлам (Что позволяет читать весь файл) . AWS предлагает альтернативу S3Упругий Block Store (ЭБС) ), которая поддерживает доступ к файлам на уровне блоков, но стоит дороже, чем S3, поэтому редко используется для массового хранения больших объемов файлов данных. (Когда люди говорят, что хранят данные в облаке (S3) Это дешево, обычно это сравнение яблок с апельсинами.)

Ведра S3

Содержимое ведра. Ключи. Объекты, ограничители.
Технически, ведра S3 не организованы в иерархическую файловую структуру, как файловая система на компьютере. Ведра содержат только «объекты». (файлы) Каждый из них имеет «ключ». (имя) . Примером ключа в этом ведре Noaa-goes17 является

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

URl для этого объекта является

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

AWS поддерживает небольшие изменения в построении этого URL-адреса.ERDDAP™Для этого нужен конкретный формат:    https://bucketName.s3.region.amazonaws.com/key
Обычно, как и в этом примере, ключевые имена выглядят как иерархический путь плюс имя файла, но технически это не так. Поскольку он является общим и полезным,ERDDAP™Рассматривает ключи с /'s, как если бы они были иерархическим путем плюс имя файла, и эта документация будет относиться к ним как таковым. Если ключи ведра не используются / (например, ключ, похожий на ключ) ABI-Lib.2018.052.22.OR\_ABI-L1b-RadM2-M3C10\_G16\_20180522247575), далееERDDAP™Мы будем рассматривать весь ключ как длинное имя файла.

Частные vs Публичные ведра - Администратор ведра S3 может сделать ведро и его содержимое публичным или частным. Если публичный, любой файл в корзине может быть загружен любым, кто использует URL для файла. У Amazon естьОткрытые данныеПрограмма, в которой размещены общедоступные наборы данных (включая данные изNOAANASA и USGS) бесплатно и не взимает плату за скачивание файлов из этих ведер. Если ведро является частным, файлы в ведре доступны только авторизованным пользователям, и AWS взимает плату. (Обычно платит владелец ведра.) Загрузка файлов на не-AWS S3 компьютер.ERDDAP™Может работать с данными в государственных и частных ведрах.

Сертификаты AWS

Чтобы сделать так, чтобыERDDAP™Вы можете читать содержимое частных ведер, вам нужны учетные данные AWS, и вам нужно хранить файл учетных данных в стандартном месте.ERDDAP™Вы можете найти информацию. Посмотреть AWS SDKJava2.x документация:Установите учетные данные по умолчанию. (Возможность хранить значения какJavaПараметры командной строки в\[кот\]/bin/setenv.sh может быть хорошим вариантом.)

AWS /файлы

  • /files/ Системы TheERDDAP™ /файлы / системапозволяет пользователям загружать исходные файлы для набора данных. Мы рекомендуем включить его для всех наборов данных с исходными файлами, потому что многие пользователи хотят загрузить исходные файлы.
    • Если файлы находятся в частном ведре S3, запрос пользователя на загрузку файла будет обработанERDDAP™, который будет считывать данные из файла, а затем передавать их пользователю, тем самым увеличивая нагрузку на ваш файл.ERDDAP™, используя входящую и исходящую полосу пропускания и делая вас (тотERDDAP™администратор) Оплатить сбор за передачу данных в AWS.
    • Если файлы находятся в открытом ведре S3, запрос пользователя на загрузку файла будет перенаправлен на URL-адрес AWS S3 для этого файла, поэтому данные не будут проходить через него.ERDDAP™Таким образом, уменьшая нагрузку наERDDAP. Если файлы находятся в открытых данных Amazon (свободный) Общественное ведро, затем вы (тотERDDAP™администратор) Вам не придется платить комиссию за выход данных в AWS. Таким образом, существует большое преимущество, обслуживающее данные от общественности. (не частный) S3 ведра и огромное преимущество в обслуживании данных от Amazon Open Data (свободный) Ведра.

ERDDAP™AWS S3 Buckets

ERDDAP™AWS S3 Buckets
К счастью, после долгих усилийERDDAP™Он имеет ряд функций, которые позволяют ему решать внутренние проблемы, связанные с доступом к файлам на уровне блоков S3:

  • \[Отказ от ответственности: Работа с ведрами AWS S3 требует много дополнительной работы. AWS — это огромная экосистема сервисов и функций. Есть чему поучиться. Это требует времени и усилий, но это возможно. Будьте терпеливы, и у вас все получится. Посмотреть/просить о помощи ()Документация AWSСайты вродеСкачать Overflowи регулярной ERDDAP™Варианты поддержки) если/когда вы застряли.\]
     
  • Трудно даже узнать структуру каталога и имена файлов в ведре S3.ERDDAP™Есть решение этой проблемы: EDDTableFromFileNames имеет специальное приложение.\\(перенаправлено с «OnTheFly»)опция, которая позволяет вам создать набор данных EDDTableFromFileNames, который позволяет пользователям просматривать содержимое ведра S3 (скачать файлы) через набор данных"files"вариант. Есть одинПример этого ниже.  
  • ERDDAP™Может считывать данные извнешне сжатые файлы данных, так что это нормально, если файлы на S3 хранятся как.gz,.gzip,.bz2, .Z или другие типы файлов данных, сжатых извне, которые могут значительно (2 - 20X) сократить расходы на хранение файлов. Часто нет штрафа за использование сжатых извне файлов, поскольку время сохраняется за счет переноса меньшего файла из S3 в другой файл.ERDDAPпримерно уравновешивает дополнительное время, необходимое дляERDDAP™Декомпрессия файла. Чтобы использовать эту функцию, вам просто нужно убедиться, что набор данных<ФайлNameRegex позволяет использовать тип сжатого файла (Например, путем добавления (|.gz) В конце Регекса) .  
  • Наиболее распространенный случай, когда у вас естьERDDAP™установленный на вашем компьютере для тестирования / разработки и где набор данных имеет двоичные файлы данных, которые хранятся как объекты в корзине S3, один из подходов к получению набора данныхERDDAP™Это:
    1. Создайте каталог на вашем компьютере, чтобы хранить несколько тестовых файлов данных.

    2. Загрузите два файла данных из источника в созданный вами каталог.

    3. ИспользоватьГенерировать наборы данныхXmlЧтобы создать кусокdatasets.xmlдля набора данных на основе двух локальных файлов данных.

    4. Убедитесь, что набор данных работает по желаниюDasDdsи/или ваш местныйERDDAP.

      Следующие шаги делают копию этого набора данных (кто получит данные из ковша S3) На публикеERDDAP.

    5. Копировать кусокdatasets.xmlДля набора данных вdatasets.xmlдля общественностиERDDAP™Это будет служить данным.

    6. Создать каталог на публикеERDDAPлокальный жесткий диск для хранения кэша временных файлов. Каталог не будет использовать много дискового пространства (CacheSizeGB ниже) .

    7. Изменить значение набора данных<тег fileDir>, чтобы он указывал на каталог, который вы только что создали (Даже если каталог пуст) .

    8. Добавитькэш FromUrlтег, который определяет имя ковша набора данных и дополнительный префикс (т.е. директория) В конкретномS3 URL формат, которыйERDDAP™требует.

    9. Добавить [<cacheSizeGB> (#cachefromurl) Тег к набору данных xml (Например, 10 является хорошим значением для большинства наборов данных.) рассказыватьERDDAP™Ограничить размер локального кэша (То есть, не пытайтесь кэшировать все удаленные файлы.) .

    10. Посмотрите, работает ли это в обществе.ERDDAP. Отметим, что в первый разERDDAP™Загружает набор данных, на загрузку потребуется длительное время, посколькуERDDAP™Необходимо скачать и прочитать все файлы данных.

Если набор данных представляет собой огромную коллекцию огромных сетчатых файлов данных, это займет очень много времени и будет непрактичным. В некоторых случаях для сетчатых файлов данных,ERDDAP™Можно извлечь необходимую информацию (Например, точка времени для данных в сетчатом файле данных) От имени файла и избежать этой проблемы. Видишь?Агрегация через Файловые имена.

  1. необязательно (Но особенно для наборов данных EDDTable FromFiles) Вы можете добавитьnПотокиTag to the dataset чтобы сообщитьERDDAPиспользовать более 1 потока при ответе на запрос пользователя о данных. Это минимизирует последствия задержки, которая возникает, когдаERDDAP™читать файлы данных из (удаленный) AWS S3 вставляется в локальный кэш и (возможно) Декомпрессия их.

AWS 3 Открытые данные

Как частьNOAA?Программа Big Data,NOAAМы сотрудничаем с пятью организациями, включая AWS, чтобы изучить потенциальные преимущества хранения копий ключевых наблюдений и результатов моделей в облаке, чтобы позволить вычислять непосредственно данные без необходимости дальнейшего распространения. AWS включает наборы данных, которые он получаетNOAAв рамках своей программы по предоставлению публичного доступа к большой коллекцииОткрытые данные для AWS S3с любого компьютера, будь то Amazon (арендованный компьютер) Сеть AWS или собственный компьютер в любой сети. Приведенный ниже пример предполагает, что вы работаете с общедоступным набором данных.

Доступ к файлам в AWS S3 Bucket

Для частного ведра данных S3 владелец ведра должен предоставить вам доступ к ветру. (Смотрите документацию AWS.)

Во всех случаях вам понадобится учетная запись AWS, потому что AWS SDK предназначен для работы с клиентами.Java (которыйERDDAP™использует для извлечения информации о содержимом ведра) Требуются учетные данные AWS. (Подробнее об этом ниже)

ERDDAP™Доступ к ведрам AWS S3 возможен только в том случае, если вы указали [<cacheFromUrl> (#cachefromurl) (или)<fileDir>) в определенном формате: https://bucketName.s3.aws-region.amazonaws.com/prefix/
где

  • Имя ведра - это краткая форма названия ведра, например, noaa-goes17.
  • Aws-область, например, us-east-1, из колонки «Регион» в одной из таблицКонечные точки обслуживания AWSгде ведро действительно находится.
  • Префикс является необязательным. Если оно присутствует, оно должно'/'.

Например, https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
Этот формат URL является одной из рекомендаций AWS S3:Доступ к ведруиЭто описание префиксов.ERDDAP™требует, чтобы вы объединили URL-адрес корзины и дополнительный префикс в один URL-адрес, чтобы указать<CacheFromUrl> (или<fileDir>), где находятся файлы.

Тестирование публичных ковшечек AWS S3

Для общедоступных ведер вы можете и должны протестировать URL-адрес ведра каталога AWS S3 в своем браузере, например, https://noaa-goes17.s3.us-east-1.amazonaws.com Если URL ведра правильный и подходящий дляERDDAPОн возвращает XML-документ, который (частичный) Список содержимого этого ведра. К сожалению, полный URL (То есть, ведро URL плюс префикс) этоERDDAP™Желания для данного набора данных не работают в браузере. AWS не предлагает систему для легкого просмотра иерархии ведра в вашем браузере. (Если это неправильно, пожалуйста, напишите Крису. Джон на noaa.gov. В противном случае, Amazon, пожалуйста, добавьте поддержку!)

Просмотр содержимого ведра

Ведра S3 часто содержат несколько категорий файлов в нескольких псевдоподкаталогах, которые могут стать парой файлов.ERDDAP™наборы данных. Чтобы сделатьERDDAP™Наборы данных, вам нужно знать начальный каталог для<CacheFromUrl> (или<fileDir>) и формат имен файлов, которые идентифицируют это подмножество файлов. Если вы попытаетесь просмотреть все содержимое ведра в браузере, S3 просто покажет вам первые 1000 файлов. В настоящее время лучший способ для вас, чтобы просмотреть все содержимое ведра, чтобы сделатьEDDTable FromFileNamesнабор данных (на вашем ПКERDDAP™и/или в вашей публичнойERDDAP) , что также дает вам простой способ просматривать структуру каталога и загружать файлы. The<FileDir> для этого будет URL, который вы сделали выше, например, https://noaa-goes17.s3.us-east-1.amazonaws.com .\[Почему AWS S3 не предлагает быстрый и простой способ сделать это без учетной записи AWS?\]Обратите внимание, что когда я делаю это на своем ПК в сети, отличной от Amazon, похоже, что Amazon замедляет реакцию на струйку. (около 100 (?) Файлы на куски) После первых нескольких кусков (1000 файлов на куски) Скачиваются. Так как ведра могут иметь огромное количество файлов (Noaa-goes17 — 26 миллионов) Получение всего содержимого ведра может занять несколько часов EDDTableFromFileNames. (Например, 12!) до конца.\[Amazon, это правда?\]

Как сделать EDDTable Набор данных FromFileNames с ведром AWS S3

Если у вас есть имя ведра, но у вас еще нет списка файлов в ведре S3 или префикса, который идентифицирует местоположение соответствующих файлов в ведре, используйте приведенные ниже инструкции для создания набора данных EDDTableFromFileNames, чтобы вы могли просматривать иерархию каталогов ведра S3 черезERDDAP?"files"система.

  1. Откройте счет AWS ERDDAP™используетAWS SDK дляJavaЧтобы получить информацию из AWS, вам нужноСоздать и активировать учетную запись AWS. Это довольно большая работа, с большим количеством вещей, чтобы учиться.  
  2. Поместите свои учетные данные AWS туда, гдеERDDAP™Их можно найти. Следуйте инструкциям вНастройка учетных данных AWS и региона для развитиятакERDDAP™ (В частности, AWS SDK дляJava) Вы сможете найти и использовать свои учетные данные AWS. ЕслиERDDAP™Не можете найти учетные данные, вы увидите java.lang. Исключение: файл профиля не может быть нулевой ошибкойERDDAPфайл log.txt.

Подсказка для Linux и Mac OS: файл учетных данных должен быть в домашнем каталоге пользователя, на котором работает Tomcat (иERDDAP) (Для этого пункта мы предположим, что пользователь=tomcat) в файле под названием ~/.aws/credentials. Не думайте, что ~ is /home/tomcat — на самом деле используйте cd ~, чтобы узнать, где операционная система думает ~ для пользователя =tomcat. Создайте каталог, если он не существует. Кроме того, после того, как вы поместите файл учетных данных на место, убедитесь, что пользователь и группа для файла являются томкатом, а затем используйте 400 учетных данных chmod, чтобы убедиться, что файл читается только для пользователя = томкат.

  1. Создайте ведро URL вформатировать,ERDDAP™требуетНапример, https://noaa-goes17.s3.us-east-1.amazonaws.com и (для общественных ведер) Проверьте его в браузере, чтобы убедиться, что он возвращает документ XML, который имеет частичный список содержимого этого ведра.  
  2. ИспользоватьГенерировать наборы данныхXmlЧтобы создатьEDDTable FromFileNamesнабор данных:
    • Для начального каталога используйте этот синтаксис: \\\ Скриншоты OnTheFly, YourBucketUrl Например, \\(перенаправлено с «OnTheFly») https://noaa-goes17.s3.us-east-1.amazonaws.com/

    • Имя файла regex? *

    • Рекурсивный? истинный

    • перезаряжать Каждые минуты? 10080

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

    • институт?NOAA

    • резюме? ничего (ERDDAP™Он автоматически создаст достойное резюме.)

    • Название? ничего (ERDDAP™Это позволит создать достойный заголовок автоматически.) Как обычно, вы должны отредактировать полученный XML для проверки правильности и внесения улучшений до того, как часть наборов данных будет использовать его в своей работе.datasets.xml.

  3. Если вы следуете инструкциям выше и загружаете набор данных вERDDAPВы создали набор данных EDDTableFromFiles. В качестве примера, чтобы облегчить просмотр и загрузку файлов из ведер открытых данных AWS, мы создали наборы данных EDDTableFromFileNames (см. список ниже). https://upwell.pfeg.noaa.gov/erddap/search/index.html?searchFor=awsS3Files\_ ) практически для всехAWS S3 Open Data. \[Несколько ведер, которые мы не включили, также имеют большое количество файлов в корневой директории. (больше, чем может быть загружено в разумные сроки) или не разрешать публичный доступ (Разве не все они должны быть публичными?) Запрашивающий платит ведра (Например, Sentinel) .\]
    Если вы нажмете на"files"Ссылка для одного из этих наборов данных, вы можете просматривать дерево каталогов и файлы в этом ведре S3. Из-за дороги\\\* fromOnTheFly EDDTableFromFiles работает, эти списки каталогов всегда идеально актуальны, потому чтоERDDAP™Поймать их на лету. Если вы нажмете вниз по дереву каталога на фактическое имя файла и нажмете на имя файла,ERDDAP™Ваш запрос будет перенаправлен на AWS S3, чтобы вы могли загрузить файл непосредственно из AWS. Затем вы можете проверить этот файл.

Проблемы? Если ваш EDDTable FromFiles не загружаетсяERDDAP™ (или DasDds) Посмотрите в файле log.txt сообщение об ошибке. Если вы видите a java.lang. Исключение: файл профиля не может быть нулевой ошибкой, проблема заключается в том, что AWS SDKJava (используемыйERDDAP) Мы не находим файл учетных данных. См. инструкции по учетным данным выше.  

К сожалению, AWS не позволяет людям использовать браузер для просмотра содержимого публичного ведра.

Тогда вы можете сделатьERDDAP™наборы данных, которые дают пользователям доступ к данным в файлах.
Смотрите инструкции вERDDAP™S3 Ведра (выше) . Для набора данных EDDTableFromFileNames, который вы сделали выше, если вы немного покопаетесь с именами каталогов и файлов в дереве каталогов, становится ясно, что имена каталогов верхнего уровня (Например, ABI-L1b-RadC) соответствует тому, чтоERDDAP™Мы будем называть отдельные наборы данных. Ведро, с которым вы работаете, может быть похожим. Затем вы можете создать отдельные наборы данных вERDDAP™для каждого из этих наборов данных, используя, например, https://noaa-goes17.s3.us-east-1.amazonaws.com/ABI-L1b-RadC/
как<cacheFromUrl>. К сожалению, для этого конкретного примера наборы данных в корзине представляют собой наборы данных уровня 1 или уровня 2, которыеERDDAP™ не особенно хорош вПотому что набор данных представляет собой более сложный набор переменных, которые используют различные размеры.  

Файлы NcML

Файлы NcML позволяют указывать изменения на лету в одном или нескольких исходных источникахNetCDF (v3 или v4) .nc.grib, .bufr, или.hdf (v4 или v5) Файлы, а затем иметьERDDAP™лечить.ncмл файлов в качестве исходных файлов.ERDDAP™наборы данных будут принимать.ncФайлы в любое время.ncФайлы ожидаются. Файлы NcML должны иметь расширение.ncмл. Видишь?UnidataДокументация NcML. NcML полезен, потому что с ним можно что-то сделать. (Например, внесение различных изменений в различные файлы в коллекции, включая добавление размера с определенным значением к файлу.) Что вы не можете сделать сERDDAP?datasets.xml.

  • Изменения в a.ncПоследнее измененное время файла мл приведет к тому, что файл будет перезагружаться всякий раз, когда набор данных перезагружается..ncФайлы данных не будут замечены напрямую.
  • Оригинальное название: NcML Is\*очень\*чувствительны к порядку некоторых элементов в файле NcML. Подумайте о NcML как о том, чтобы указать серию инструкций в указанном порядке с намерением изменить исходные файлы. (состояние в начале/верху файла NcML) в файлы назначения (состояние в конце / нижней части файла NcML) .

Альтернативой NcML являетсяNetCDFОператоры (NCO) . Большая разница заключается в том, что NcML является системой для внесения изменений на лету. (Исходные файлы не изменяются) тогда какNCOмогут быть использованы для внесения изменений в (или новые версии) Файлы. ОбаNCONcML очень гибкий и позволяет вносить практически любые изменения в файлы. Для обоих это может быть сложным, чтобы выяснить, как именно сделать то, что вы хотите сделать - проверить веб для подобных примеров. Оба являются полезными инструментами для подготовки чистых КДФ иHDFФайлы для использования сERDDAPВ частности, внести изменения сверх того, чтоERDDAPСистема манипуляций может это сделать.

Пример No1: Добавление измерения времени с одним значением Вот она..ncмл-файл, создающий новое внешнее измерение (время с 1 значением: 1041379200) и добавляет это измерение к переменной pic в файле под названием 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>

Пример #2: Изменение существующей временной стоимости Иногда источник.ncФайл уже имеет временное измерение и временное значение, но значение неверно. (для ваших целей) . Это.ncВ файле мл говорится: для файла данных под названием «19810825230030-NCEI...», для переменной размерности"time", установить атрибут единицы "секунды с 197001-01T00:00:00Z" и установить временное значение 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>

NetCDFОператоры (NCO)

"Операторы NetCDF (NCO) Содержит дюжину автономных командных программ, которые принимают netCDF.\[v3 или v4\],HDF \[v4 или v5\],\[.grib, .bufr,\]и/илиDAPфайлы в качестве входных данных, а затем работать (Например, получать новые данные, вычислять статистику, печатать, гиперслаб, манипулировать метаданными) и выводить результаты на экран или файлы в текстовом, двоичном или сетевом форматах CDF.NCOпомогает анализ сетчатых научных данных. Стиль командной оболочкиNCOПозволяет пользователям манипулировать и анализировать файлы интерактивно или с помощью экспрессивных скриптов, которые позволяют избежать некоторых накладных расходов на среды программирования более высокого уровня". (из которогоNCOдомашняя страница) .

Альтернативой дляNCOэтоNcML. Большая разница заключается в том, что NcML является системой для внесения изменений на лету. (Исходные файлы не изменяются) тогда какNCOмогут быть использованы для внесения изменений в (или новые версии) Файлы. ОбаNCONcML очень гибкий и позволяет вносить практически любые изменения в файлы. Для обоих это может быть сложным, чтобы выяснить, как именно сделать то, что вы хотите сделать - проверить веб для подобных примеров. Оба являются полезными инструментами для подготовки чистых КДФ иHDFФайлы для использования сERDDAPВ частности, внести изменения сверх того, чтоERDDAPСистема манипуляций может это сделать.

Например, вы можете использоватьNCOсделать единицы переменной времени согласованными в группе файлов, где они изначально не были согласованы. Или вы можете использоватьNCOприменятьscale\_factorиadd\_offsetВ группе файлов, гдеscale\_factorиadd\_offsetимеют разные значения в разных исходных файлах. (Теперь вы можете решить эти проблемы вERDDAP™черезEDDGridИз NcFilesUnpacked, который является вариантомEDDGridFromNcFiles, который распаковывает упакованные данные и стандартизирует временные значения на низком уровне, чтобы иметь дело с файлами сбора, которые имеют разные значения.scale\_factors иadd\_offsetили различные временные единицы.)

NCOСвободное и открытое программное обеспечение, использующееGPL 3.0лицензия.

Пример No1: создание последовательных единиц EDDGridИз материалов и EDDTable Из файлов следует, что единицы для данной переменной идентичны во всех файлах. Если некоторые файлы тривиальны (не функционально) отличается от других (например, единицы времени) "секунды с 197001-01 00:00:00 UTC" "seconds since 1970-01-01T00:00:00Z"Вы можете использоватьNCO?нарисованныйизменять блоки во всех файлах, чтобы они были идентичными nco/ncatted - единицы, время, o,c' секунды с 197001-01T00:00:00Z'.nc
\[Для многих проблем, подобных этой, в EDDTable From... Файлы наборов данных, теперь вы можете использоватьстандартизировать Что?рассказыватьERDDAPСтандартизация исходных файлов по мере их чтенияERDDAP.\]

Ограничения размера набора данных

Вы увидите много ссылок на «2 миллиарда» ниже. Точнее, это ссылка на 2 147 483 647. (231-1-1) , что является максимальным значением 32-битного подписанного целого числа. В некоторых компьютерных языках, напримерJava (которыйERDDAP™Написано в) Это самый большой тип данных, который может использоваться для многих структур данных. (Например, размер массива) .

Для струнных значений (Например, для переменных имен, имен атрибутов, значений атрибутов String и значений данных String) максимальное количество символов на строку вERDDAP™составляет ~2 млрд. Но почти во всех случаях будут небольшие или большие проблемы, если струна превышает разумный размер. (Например, 80 символов для имен переменных и имен атрибутов и 255 символов для большинства значений атрибутов строки и значений данных.) . Например, веб-страницы, на которых отображаются длинные имена переменных, будут неуклюже широкими, а длинные имена переменных будут усечены, если они превышают предел типа файла ответа.

Для сетчатых наборов данных:

  • Максимальное количествоaxisVariables составляет ~ 2 млрд. Максимальное количествоdataVariables составляет ~ 2 млрд. Но если набор данных имеет > 100 переменных, пользователям будет сложно его использовать. И если в наборе данных более 1 миллиона переменных, вашему серверу потребуется много физической памяти и возникнут другие проблемы.
  • Максимальный размер каждого измерения (axisVariable) Это ~2 миллиарда значений.
  • Максимальное общее количество клеток (Изделие всех размеров размеров) Он не ограничен, но может быть ~9e18.

Для табличных наборов данных:

  • Максимальное количествоdataVariables составляет ~ 2 млрд. Но если набор данных имеет > 100 переменных, пользователям будет сложно его использовать. И если в наборе данных более 1 миллиона переменных, вашему серверу потребуется много физической памяти и возникнут другие проблемы.
  • Максимальное количество источников (Например, файлы) Это может быть агрегировано ~ 2 млрд.
  • В некоторых случаях максимальное количество строк из отдельного источника (Например, файл, но не база данных.) Это ~2 миллиарда строк.
  • Я не думаю, что есть другие ограничения.

Для сетчатых и табличных наборов данных существуют некоторые внутренние ограничения на размер подмножества, которые могут быть запрошены пользователем в одном запросе. (часто связаны с >2 миллиардами чего-либо или ~9e18 чем-либо;) Но гораздо более вероятно, что пользователь достигнет определенных ограничений типа файла.

  • NetCDFВерсия 3.ncФайлы ограничены 2 ГБ байтами. (Если это действительно проблема для кого-то, дайте мне знать: Можно добавить поддержку дляNetCDFВерсия 3.nc64-битное расширение илиNetCDFВерсия 4, которая значительно увеличит предел, но не бесконечно.)
  • Браузеры ломаются после всего лишь ~ 500 МБ данных.ERDDAP™Ограничить ответ на.htmlTableЗапрос 400 МБ данных.
  • Многие программы анализа данных имеют схожие ограничения. (Например, максимальный размер измерения часто составляет ~ 2 миллиарда значений.) Таким образом, нет причин усердно работать, чтобы обойти ограничения типа файла.
  • Ограничения типа файла полезны тем, что они предотвращают наивные запросы на действительно огромные объемы данных. (Например, «дайте мне весь этот набор данных», когда набор данных имеет 20 ТБ данных.) Это займет недели или месяцы для загрузки. Чем дольше загрузка, тем больше вероятность того, что она выйдет из строя по разным причинам.
  • Ограничения типа файла полезны тем, что они заставляют пользователя иметь дело с подмножествами разумного размера. (Например, работа с большим сетчатым набором данных через файлы с данными из одной временной точки каждый) .  

Переключение на ACDD-1.3

Мы (особенноГенерировать наборы данныхXml) В настоящее время рекомендуетсяACDD версия 1.3Конвенция была ратифицирована в начале 2015 года и упоминается как ACDD-1.3. До этогоERDDAP™Версия 1.62 (Выпущен в июне 2015 года) ,ERDDAP™используется/рекомендуется оригинал, версия 1.0,NetCDFКонвенция об атрибутах для обнаружения набора данныхкоторый упоминается как "UnidataDataset Discovery v1.0" в глобальных конвенциях иMetadata\_Conventionsатрибуты.

Если ваши наборы данных используют более ранние версии ACDD, мы рекомендуем вам перейти на ACDD-1.3. Это не сложно. ACDD-1.3 совместим с версией 1.0. Переключаться для всех наборов данных (кромеEDDGridFromErddap и EDDTable Наборы данных Erddap) :

  1. Удалить недавно обесценившийся глобальныйMetadata\_ConventionsАтрибут путем добавления (или путем изменения существующегоMetadata\_Conventionsатрибут)
        <att name="Metadata\\_Conventions">null</att>  

Глобальный набор данных<addAttributes>.   2. Если набор данных имеет атрибут Конвенции в глобальном масштабе<addAttributes"Изменить все"UnidataDataset Discovery v1.0" ссылается на "ACDD-1.3. Если набор данных не имеет атрибута Конвенции в глобальном масштабе<addAttributesЗатем добавьте один, который относится к ACDD-1.3. Например,

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

  3. Если набор данных имеет глобальныйstandard\_name\_vocabularyатрибут, пожалуйста, измените формат значения на, например,

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

Если речь идет о более старой версииСтандартная таблица имен CF. Это, вероятно, хорошая идея для перехода на текущую версию. (65 Когда мы это пишем) Поскольку новые стандартные имена добавляются в эту таблицу с последующими версиями, старые стандартные имена редко обесцениваются и никогда не удаляются.   4. Несмотря на то, что ACDD-1.0 включает глобальные атрибутыcreator\_name,creator\_email,creator\_url,Генерировать наборы данныхXmlне добавляли их автоматически до тех пор, покаERDDAP™v1.50. Это важная информация:

  • creator\_nameпозволяет пользователям узнать/цитировать создателя набора данных.
  • creator\_emailсообщает пользователям предпочтительный адрес электронной почты для связи с создателем набора данных, например, если у них есть вопросы о наборе данных.
  • creator\_urlЭто дает пользователям возможность узнать больше о создателе.
  • ERDDAP™Использует всю эту информацию при создании документов метаданных FGDC и ISO 19115-2/19139 для каждого набора данных. Эти документы часто используются внешними поисковыми службами.

Пожалуйста, добавьте эти атрибуты в глобальный набор данных.<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>

Вот так. Надеюсь, это не было слишком сложно.  

Зарр

Версия 2.25ERDDAP™Читать локально Файлы Zarr используютEDDTable FromNcFilesиEDDGridИз NcFiles.

(По состоянию на август 2019 года) Мы можем легко ошибаться, но мы еще не убеждены, чтоЗаррПодобные системы, которые разбивают файлы данных на более мелкие куски, являются отличным решением проблемы.ERDDAP™Считывание данных, хранящихся в облачных сервисах, таких как Amazon AWS S3. Zarr — это отличная технология, которая показала свою полезность в самых разных ситуациях.ERDDAP+S3 будет одной из таких ситуаций. Прежде чем приложить усилия для хранения всех наших данных в Zarr, давайте проведем некоторые тесты, чтобы увидеть, действительно ли это лучшее решение.

Проблемы с доступом к данным в облаке — задержка (Лаг для первого получения данных) Доступ на уровне файлов (Вместо блочного доступа) . Zarr решает проблему доступа на уровне файлов, но ничего не делает с задержкой. По сравнению с просто загрузкой файла (Таким образом, его можно читать как локальный файл с доступом на уровне блоков.) Зарр может даже усугубить проблему задержки, потому что с Зарром чтение файла теперь включает в себя серию из нескольких звонков для чтения различных частей файла. (Каждый со своим лагом) . Проблема задержки может быть решена путем параллелизации запросов, но это решение более высокого уровня, не зависящее от Zarr.

И с Зарром (как в реляционных базах данных) Мы теряем удобство того, что файл данных является простым, единственным файлом, который вы можете легко проверить целостность или сделать / загрузить копию.

ERDDAP™ (как в v2) имеет систему для поддержания локального кэша файлов из источника URL (Например, S3) (см.<CacheFromUrl> и<cacheMaxGB> (#cachefromurl) ). И новый [<nThreads> (#нити) Следует свести к минимуму проблему задержки путем параллелизации поиска данных на высоком уровне.<CacheFromUrl работает очень хорошо для многих сценариев. (Мы не знаем, насколько это выгодно)<nThreads> не имеет дополнительных тестов. Мы признаем, что не проводили синхронизацию на примере AWS с хорошим сетевым подключением, но мы успешно протестировали различные удаленные URL-источники файлов. ИERDDAP?<cacheFromUrl> работает с любым типом файла данных (например,.nc,.hdf.csv,.jsonlCSV) Даже если внешне сжатый (например,.gz) без каких-либо изменений в файлах (Например, переписать их как коллекции Зарра.) .

Вполне вероятно, что различные сценарии будут благоприятствовать различным решениям, например, только нужно прочитать часть файла один раз. (Зарр победит) , vs. нужно прочитать весь файл один раз, vs. нужно прочитать часть или весь файл несколько раз<CacheFromUrl> выиграет.

Прежде чем приложить усилия для хранения всех наших данных в Zarr, давайте проведем некоторые тесты, чтобы увидеть, действительно ли это лучшее решение.

Список типов наборов данных

Если вам нужна помощь в выборе правильного типа набора данных, посмотритеВыбор типа набора данных.

Типы наборов данных делятся на две категории. (Почему?)

EDDGrid

  • EDDGrid наборы данных обрабатывают сетчатые данные.
    • вEDDGridНаборы данных, переменные данных представляют собой многомерные массивы данных.
    • Должна быть переменная оси для каждого измерения. Переменные оси должны быть указаны в порядке их использования переменными данных.
    • вEDDGridВсе переменные данных должны использоваться (доля) Все переменные оси. (Почему? А если нет?)
    • Сортированные значения измерения - Во всемEDDGridнаборы данных, каждое измерение должно быть сортировано (восходящий или нисходящий) . Каждый из них может быть нерегулярным. Никаких связей быть не может. Это является требованием кСтандарт метаданных CF. Если значения любого измерения не сортированы, набор данных не будет загружен иERDDAP™идентифицирует первое несортированное значение в файле журнала, BigParent Директория /logs/log.txt.

Некоторые подклассы имеют дополнительные ограничения (в частности,EDDGridСовокупное существующее измерение требует, чтобы внешнее (самое левое, первое) измерение было восходящим.

Несортированные значения размерности почти всегда указывают на проблему с исходным набором данных. Чаще всего это происходит, когда в агрегацию включается неправильно названный или неподходящий файл, что приводит к несортированному измерению времени. Чтобы решить эту проблему, см. сообщение об ошибке вERDDAP™log.txt файл, чтобы найти значение времени. Затем посмотрите в исходных файлах, чтобы найти соответствующий файл. (либо до, либо после) Это не входит в агрегацию.

  • Смотрите более полное описаниеEDDGridМодель данных.
  • TheEDDGridТипы наборов данных:
    • EDDGridИз аудиофайловагрегирует данные из группы локальных аудиофайлов.
    • EDDGridИз папыРучки сетчатых данных отDAPСерверы.
    • EDDGridИздательство:EDDTableпозволяет конвертировать табличный набор данных в сетчатый набор данных.
    • EDDGridИз Эрддапаобрабатывает сетчатые данные из удаленногоERDDAP.
    • EDDGridИз ЭтопоОбрабатывает встроенные данные топографии ETOPO.
    • EDDGridИз материаловЭто суперкласс всехEDDGridИз... классов материалов.
    • EDDGridИзображения MergeIRFilesагрегирует данные из группы локальных MergeIR.gzФайлы.
    • EDDGridИз NcFilesагрегирует данные из группы локальныхNetCDF (v3 или v4) .ncи связанных с ними файлов.
    • EDDGridИз NcFilesUnpackedявляется вариантом, еслиEDDGridИз NcFiles, который также собирает данные из группы локальныхNetCDF (v3 или v4) .ncи связанных с ними файлов, которыеERDDAP™распаковывать на низком уровне.
    • EDDGridLonPM180Изменение значений долготы ребенкаEDDGridОни находятся в диапазоне от -180 до 180.
    • EDDGridLon0360Изменение значений долготы ребенкаEDDGridОни находятся в диапазоне от 0 до 360.
    • EDDGridSideBySideагрегаты два или болееEDDGridнаборы данных бок о бок.
    • EDDGridСовокупность существующих измеренийагрегаты два или болееEDDGridнаборы данных, каждый из которых имеет различный диапазон значений для первого измерения, но идентичные значения для других измерений.
    • EDDGridКопияМожно сделать локальную копию другогоEDDGridданные и обслуживает данные из локальной копии.  
  • ВсеEDDGridНаборы данных поддерживают настройку nThreads, которая сообщаетERDDAP™Сколько потоков использовать при ответе на запрос. Видишь?nПотокиДокументация для деталей.  

EDDTable

  • EDDTable Наборы данных обрабатывают табличные данные.
    • Табличные данные могут быть представлены в виде таблицы, похожей на базу данных, с строками и столбцами. Каждая колонка (переменная данных) Он имеет имя, набор атрибутов и хранит только один тип данных. Каждая строка имеет наблюдение (или группы связанных ценностей) . Источник данных может иметь данные в другой структуре данных, более сложной структуре данных и/или нескольких файлах данных.ERDDAP™должен иметь возможность сплющивать исходные данные в таблицу, похожую на базу данных, чтобы представить данные в виде табличного набора данных пользователямERDDAP.
    • Смотрите более полное описаниеМодель данных EDDTable.
    • Типы наборов данных EDDTable:
      • EDDTableFromAllDatasetsЭто набор данных более высокого уровня, который содержит информацию обо всех других наборах данных в вашемERDDAP.

      • EDDTableFromAsciiFilesагрегирует данные из запятых, вкладок, полуколонов или разделённых по пространству табличных файлов данных ASCII.

      • EDDTableFromAsciiServiceЭто суперкласс всех классов EDDTableFromAsciiService.

      • EDDTableFromAsciiServiceNOSобрабатывает данные некоторых изNOAAВеб-сервисы NOS.

      • EDDTable FromAudioFilesагрегирует данные из группы локальных аудиофайлов.

      • EDDTable From AwsXmlFilesагрегирует данные с автоматической метеорологической станции (AWS) XML файлы.

      • EDDTable From Кассандраобрабатывает табличные данные из одной таблицы Кассандры.

      • EDDTable FromColumnarAsciiFilesагрегирует данные из табличных файлов данных ASCII с столбцами данных фиксированной ширины.

      • EDDTable FromDapSequenceобрабатывать табличные данные изDAPСерверы последовательности.

      • EDDTable FromDatabaseобрабатывает табличные данные из одной таблицы баз данных.

      • EDDTable FromEDDGridпозволяет создавать набор данных EDDTable изEDDGridнабор данных.

      • EDDTable FromErddapобрабатывает табличные данные с удаленногоERDDAP.

      • EDDTable FromFileNamesСоздает набор данных из информации о группе файлов в файловой системе сервера, но он не обслуживает данные из файлов.

      • EDDTable Из материаловЭто суперкласс всех классов EDDTable From...Files.

      • EDDTable FromHttpGetэтоERDDAPЭто единственная система для импорта и экспорта данных.

      • EDDTable FromHyraxФайлы (Обнародовано) агрегирует данные из файлов с несколькими переменными с общими размерами, обслуживаемымиHyrax OPeNDAPсервер.

      • EDDTable FromInvalidCRAFilesагрегированные данные отNetCDF (v3 или v4) .ncФайлы, которые используют конкретный, недействительный вариант CF DSG Contiguous Ragged Array (КРА) Файлы. ХотяERDDAP™Поддерживает этот тип файла, это недействительный тип файла, который никто не должен начинать использовать. Группы, которые в настоящее время используют этот тип файла, настоятельно рекомендуется использовать.ERDDAP™для создания действительных файлов CF DSG CRA и прекращения использования этих файлов.

      • EDDTableFromJsonlCSVFilesагрегированные данные отДжон Линии файлов CSV.

      • EDDTableFromMultidimNcFilesагрегированные данные отNetCDF (v3 или v4) .ncФайлы с несколькими переменными с общими размерами.

      • EDDTable FromNcFilesагрегированные данные отNetCDF (v3 или v4) .ncФайлы с несколькими переменными с общими размерами. Хорошо продолжать использовать этот тип набора данных для существующих наборов данных, но для новых наборов данных мы рекомендуем использовать вместо этого EDDTableFromMultidimNcFiles.

      • EDDTable FromNcCFFilesагрегированные данные отNetCDF (v3 или v4) .ncфайлы, использующие один из форматов файлов, указанных вCF Дискретная геометрия выборки (DSG) конвенции. Но для файлов, использующих один из многомерных вариантов CF DSG, используютEDDTableFromMultidimNcFilesВместо этого.

      • EDDTable FromNccsvFilesагрегированные данные отNCCSVФайлы ASCII.csv.

      • EDDTable FromNOS (Обнародовано) обрабатывает табличные данные с серверов NOS XML.

      • EDDTable FromOBISобрабатывает табличные данные с серверов OBIS.

      • EDDTableFromParquetFilesобрабатывать данные отпаркет.

      • EDDTable FromSOSобрабатывать табличные данные изSOSСерверы.

      • Скриншоты из ThreddsFiles (Обнародовано) агрегирует данные из файлов с несколькими переменными с общими размерами, обслуживаемымиПЕРЕВОДЫOPeNDAPсервер.

      • EDDTable FromWFSФайлы (Обнародовано) сделать локальную копию всех данных изArcGISMapServerWFSсервера, чтобы данные можно было быстро восстановитьERDDAP™пользователей.

      • EDDTableAggregateRowsможет создавать набор данных EDDTable из группы наборов данных EDDTable.

      • EDDTableCopyВы можете сделать локальную копию многих типов наборов данных EDDTable, а затем быстро восстановить данные из локальной копии.

Подробное описание типов наборов данных

EDDGridИз папы

EDDGridИз папы обрабатывает переменные сетки отDAPСерверы.

  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Вы можете собрать необходимую информацию, чтобы настроить ее или создать свой собственный XML.EDDGridНабор данных FromDap, просмотрев файлы DDS и DAS исходного набора данных в вашем браузере (Добавление .das и .dds вsourceUrlНапример, https://thredds1.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day.dds ) .  
  • EDDGridFromDap может получать данные из любой многомерной переменнойDAPСервер данных. (Раньше,EDDGridFromDap был ограничен переменными, обозначенными как «сетки», но это больше не является требованием.)
     
  • Сортированные значения измерения - Значения для каждого измерения должны быть сортированы по порядку. (восходящий или нисходящий) . Значения могут быть нерегулярно разнесены. Никаких связей быть не может. Это является требованием кСтандарт метаданных CF. Если значения любого измерения не сортированы, набор данных не будет загружен иERDDAP™идентифицирует первое несортированное значение в файле журнала, BigParent Директория /logs/log.txt.

Несортированные значения размерности почти всегда указывают на проблему с исходным набором данных. Чаще всего это происходит, когда в агрегацию включается неправильно названный или неподходящий файл, что приводит к несортированному измерению времени. Чтобы решить эту проблему, см. сообщение об ошибке вERDDAP™log.txt файл, чтобы найти значение времени. Затем посмотрите в исходных файлах, чтобы найти соответствующий файл. (либо до, либо после) Это не входит в агрегацию.

EDDGridДеп скелет 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>

 

EDDGridИздательство:EDDTable

EDDGridИздательство:EDDTable позволяет конвертировать табличный набор данных EDDTable вEDDGridсетчатый набор данных. Помните, чтоERDDAP™Обработка данных как таковаясетчатые наборы данных (подклассыEDDGrid) или табличные наборы данных (Подклассы EDDTable) .

  • Обычно, если у вас есть сетчатые данные, вы просто настраиваетеEDDGridНабор данных напрямую. Иногда это невозможно, например, когда у вас есть данные, хранящиеся в реляционной базе данных.ERDDAP™Доступ возможен только через EDDTableFromDatabase.EDDGridКласс FromEDDTable позволяет исправить эту ситуацию.  
  • Очевидно, что данные в базовом наборе данных EDDTable должны быть (в основном) сетчатые данные, но в табличной форме. Например, набор данных EDDTable может иметь данные CTD: измерения тока на восток и на север, на нескольких глубинах, в несколько раз. Поскольку глубины в каждой точке времени одинаковы,EDDGridFromEDDTable может создавать сетчатый набор данных с измерением времени и глубины, который получает доступ к данным через базовый набор данных EDDTable.  
  • Генерировать наборы данных Xml - Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Вы можете собрать информацию, необходимую для улучшения чернового проекта.  
  • Источник атрибутов - Как и все другие типы данных,EDDGridFromTable исходит из того, что существуют глобальные исходные атрибуты иглобальныйaddAttributes (указанный вdatasets.xml) которые объединяются, чтобы сделать глобальную Атрибуты, которые видят пользователи. Для глобального источника атрибутов,EDDGridFromEDDTable использует глобальную комбинацию Атрибуты базового набора данных EDDTable. (Если вы задумаетесь об этом на минуту, это имеет смысл.)

Аналогично для каждогоaxisVariables иdataVariable?addAttributes,EDDGridFromEDDTable использует комбинацию переменных Атрибуты из базового набора данных EDDTable в качествеEDDGridИсточник атрибутов переменной FromEDDTable. (Если вы задумаетесь об этом на минуту, это имеет смысл.)

Если EDDTable имеет хорошие метаданные, тоEDDGridДля этого часто требуется очень малоaddAttributesМетаданные - всего несколько настроек здесь и там.

  • dataVariables versusaxisVariableс- EDDTable имеет толькоdataVariableС. АнEDDGridВ наборе данных FromEDDTable будет несколькоaxisVariables (Созданный из некоторыхdataVariables) и некоторыеdataVariables (Созданный из оставшихсяdataVariables) .Генерировать наборы данныхXmlУгадайте, на какой EDDTabledataVariableдолжен статьEDDGridИздательство:EDDTableaxisVariables, но это всего лишь предположение. Вы должны изменить выход GenerateDatasetsXml, чтобы указать, какиеdataVariables станетaxisVariables и в каком порядке.  

  • Ценности - Нет ничего о лежащей в основе EDDTable, чтобы сказатьEDDGridОтредактировать возможные значенияaxisVariables в сетчатой версии набора данных, поэтому вы ДОЛЖНЫ предоставить эту информацию для каждогоaxisVariableС помощью одного из этих атрибутов:

    • axisValues — позволяет указать список значений. Например, <Att name="axisValues"Тип = "двойной список">2, 2.5, 3, 3.5, 4</att> Обратите внимание на использование aтип данныхПлюс слово «список». Кроме того, тип списка (Например, двойной) Необходимо сопоставить данные Тип переменной в EDDTable иEDDGridИз наборов данных EDDTable.
    • axisValuesStartStrideStop - позволяет указать последовательность регулярно разнесенных значений, указав значения начала, шага и остановки. Вот пример, который эквивалентен приведенному выше примеру оси Ценности: <Оригинальное название
      Тип = "двойной список"
      (#attributetype)>2, 0,5, 4</att> Опять же, обратите внимание на использование типа данных списка. Кроме того, тип списка (Например, двойной) Необходимо сопоставить данные Тип переменной в EDDTable иEDDGridИз наборов данных EDDTable.  

Обновления - Так же, как нет способа дляEDDGridОт EDDTable до определения оси Ценности от EDDTable изначально, также не существует надежного способа дляEDDGridОт EDDTable до определения от EDDTable, когда изменились значения оси (Особенно, когда есть новые значения для переменной времени.) . В настоящее время единственным решением является изменение атрибута axisValues вdatasets.xmlи перезагрузить набор данных. Например, вы можете написать сценарий для

  1. Поискdatasets.xmlдля datasetID= DatasetID " Вы работаете с правильным набором данных.
  2. Поискdatasets.xmlдля следующего возникновения Источник переменных
    Вы работаете с правильной переменной.
  3. Поискdatasets.xmlдля следующего возникновения
        <att name="axisValuesStartStrideStop" type="doubleList">  

Итак, вы знаете начальную позицию тега. 4. Поискdatasets.xmlдля следующего возникновения

        </att>  

чтобы вы знали конечное положение значений оси. 5. Замените старое начало, шаг, остановите ценности новыми ценностями. 6. Контактыфлаг URLЧтобы набор данных сообщалERDDAP™Перезагрузить набор данных.

Это не идеально, но это работает.  

  • точность - КогдаEDDGridFromEDDTable отвечает на запрос пользователя о данных, он перемещает строку данных из таблицы ответов EDDTable вEDDGridРеакционная сетка. Для этого он должен выяснить, соответствуют ли значения «оси» на данной строке в таблице некоторой комбинации значений оси в сетке. Для целых типов данных легко определить, равны ли два значения. Но для поплавков и двойников это вызывает ужасную проблему чисел с плавающей запятой.не совпадающий точно. (Например, 0,2 против 0,199999999999996) . To (пытаться) Разберись с этим,EDDGridFromTable позволяет указать точный атрибут для любого изaxisVariables, которое определяет общее число десятичных цифр, которые должны быть идентичными.
    • Например,<Att name="precision" type="int">5</att>
    • Для различных типов переменных данных существуют различные значения точности по умолчанию. Дефолты обычно уместны. Если их нет, нужно указать разные значения.
    • ДляaxisVariableкоторые являютсявремя или время Штамповые переменныеПо умолчанию - полная точность (Точный матч) .
    • ДляaxisVariables, которые плавают, точность по умолчанию составляет 5.
    • ДляaxisVariables, которые являются двойными, точность по умолчанию равна 9.
    • ДляaxisVariableкоторые имеют целые типы данных,EDDGridFromEDDTable игнорирует атрибут точности и всегда использует полную точность. (Точный матч) .  
    • Предупреждаю! При выполнении преобразования части табличных данных в часть сетчатых данных, еслиEDDGridFromEDDTable не может соответствовать значению «ось» EDDTable одному из ожидаемых значений.EDDGridЗначения оси от EDDTable,EDDGridСкачать бесплатно FromEDDTable (Без ошибок) Выбрасывает данные из этого ряда таблицы. Например, могут быть другие данные. (Не в сетке) в наборе данных EDDTable. (И если шагнуть 1, не является очевидным дляEDDGridИз таблицы, какие значения оси являются желаемыми значениями, а какие из них должны быть пропущены из-за шага.) Таким образом, если значения точности слишком высоки, пользователь увидит недостающие значения в ответе данных, когда действительно существуют действительные значения данных.

И наоборот, если значения точности установлены слишком низко, значения «оси» EDDTable не должны совпадать.EDDGridЗначения оси от EDDTable будут (ошибочно) совпадение.

Эти потенциальные проблемы ужасны, потому что пользователь получает неправильные данные. (Отсутствие ценностей) Когда нужно получить правильные данные (По меньшей мере сообщение об ошибке) . Это не недостаток вEDDGridИз Таблицы.EDDGridFromTable не может решить эту проблему. Проблема присуща преобразованию табличных данных в сетчатые данные (Если не могут быть сделаны другие предположения, но они не могут быть сделаны здесь.) . Это зависит от вас,ERDDAP™администратора, для Проверьте свойEDDGridСверхъестественное Для того, чтобы убедиться, что значения точности установлены, чтобы избежать этих потенциальных проблем.

пороговый разрыв

  • пороговый разрыв- Это очень необычный тип набора данных. Типы запросов, которые могут быть сделаны на (управляемый) анEDDGridнабор данных (Связанные с диапазонами и шагамиaxisVariables) Они сильно отличаются от типов запросов, которые могут быть сделаны. (управляемый) Набор данных EDDTable (Это связано с диапазонами некоторых переменных.) , исполнениеEDDGridНаборы данных FromEDDTable будут сильно различаться в зависимости от точного запроса и скорости базового набора данных EDDTable. Для запросов, которые имеют значение шага 1,EDDGridFromEDDTable может запросить базовый EDDTable для относительно большого объема данных (Как будто шаг = 1) Затем просеивают результаты, сохраняя данные из одних строк и отбрасывая данные из других. Если он должен просеять много данных, чтобы получить необходимые данные, запрос займет больше времени.

ЕслиEDDGridFromEDDTable может сказать, что будут большие пробелы (С строками нежелательных данных) между строками с желаемыми данными,EDDGridFromEDDTable может выбрать несколько подзапросов к базовому EDDTable вместо одного большого запроса, тем самым пропуская нежелательные строки данных в больших пробелах. Чувствительность к этому решению контролируется значением порога разрыва, указанным в<gapThreshold > тег (По умолчанию = 1000 строк исходных данных) . Установка разрыва Порог на меньшее число приведет к созданию набора данных (в целом) Больше подзапросов. Установка разрыва Порог для большего числа приведет к созданию набора данных (в целом) Меньше подзапросов.

Если порог разрыва слишком мал,EDDGridFromEDDTable будет работать медленнее, потому что накладные расходы на несколько запросов будут больше, чем время, сэкономленное за счет получения некоторых избыточных данных. Если порог разрыва слишком велик,EDDGridFromEDDTable будет работать медленнее, потому что так много избыточных данных будет извлечено из EDDTable. (Как обнаружил Голдилокс, середина «правильная».) Накладные расходы на различные типы наборов данных EDDTable сильно различаются, поэтому единственный способ узнать фактическую лучшую настройку для вашего набора данных - это экспериментировать. Но вы не пойдете слишком далеко неправильно, придерживаясь по умолчанию.

Простой пример: представьте себеEDDGridСтол только одинaxisVariable (время, с размером 100000) одинdataVariable (температура) , и разрыв по умолчанию порог 1000.

  • Если пользователь запрашивает температуру\[0💯5000\], шаг равен 100, поэтому размер разрыва равен 99, что меньше порога разрыва. ТакEDDGridFromTable сделает только один запрос в EDDTable для всех данных, необходимых для запроса. (эквивалентно температуре\[0:5000\]) и выбросить все строки данных, которые ему не нужны.
  • Если пользователь запрашивает температуру\[0:2500:5000\], этот шаг составляет 2500, поэтому размер разрыва составляет 2499, что больше, чем порог разрыва. ТакEDDGridFromTable будет делать отдельные запросы на EDDTable, которые эквивалентны температуре.\[0\]температура\[2500\]температура\[5000000000\].

Расчет размера зазора сложнее при наличии нескольких осей.

Для каждого запроса пользователя,EDDGridFromEDDTable печатает диагностические сообщения, связанные с этимlog.txtФайл.

  • Если<logLevel> (#loglevel) вdatasets.xmlНастроен на информацию, это печатает сообщение как \* nOuterAxes=1 из 4 nOuterRequests=22 Если nOuterAxes=0, то разрыв Threshold не был превышен и на EDDTable будет сделан только один запрос. Если nOuterAxes>0, порог разрыва был превышен, и nOuterRequests будет сделан в EDDTable, соответствующий каждой запрашиваемой комбинации самых левых nOuterAxes. Например, если набор данных имеет 4axisVariables иdataVariableкак на восток\[время\]\[широта\]\[долгота\]\[глубина\]Самый левый (первый) Переменная оси — это время.
  • Если<logLevel>> вdatasets.xmlустанавливается на всех, дополнительная информация записывается в файл log.txt.  

EDDGridEDDTable скелет XML

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

EDD* FromERDDAP

EDDGridИз Эрддапа обрабатывает сетчатые данные из удаленногоERDDAP™Сервер. EDDTable FromErddap обрабатывает табличные данные с удаленногоERDDAP™Сервер.

  • EDDGridFromErddap и EDDTableFromErddap ведут себя не так, как все другие типы наборов данныхERDDAP.
    • Как и другие типы наборов данных, эти наборы данных получают информацию о наборе данных из источника и сохраняют ее в памяти.
    • Как и другие типы данных, когдаERDDAP™поиск наборов данных, отображение формы доступа к данным ( datasetID .html) , или отображает форму Make A Graph ( datasetID граф) ,ERDDAP™использует информацию о наборе данных, который находится в памяти.
    • EDDGridFromErddap и EDDTable Erddap является основой дляСети/кластеры/федерацииизERDDAPs, которые эффективно распределяют использование ЦП (В основном для создания карт) , использование памяти, хранение набора данных и использование полосы пропускания большого центра обработки данных.

перенаправить

  • В отличие от других типов данных, когдаERDDAP™получает запрос на данные или изображения из этих наборов данных,ERDDAP перенаправлятьЗапрос на удаленныйERDDAP™Сервер. Результатом является:
    • Это очень эффективно (CPU, память и пропускная способность) Потому что иначе
      1. КомпозитныйERDDAP™Вы должны отправить запрос другомуERDDAP™ (который требует времени) .
      2. ДругойERDDAP™должен получить данные, переформатировать их и передать данные в композитныйERDDAP.
      3. КомпозитныйERDDAP™должен получать данные (использование полосы пропускания) Переформатировать его (Использование CPU и памяти) и передавать данные пользователю (использование полосы пропускания) . Перенаправляя запрос и позволяя другомуERDDAP™Чтобы отправить ответ непосредственно пользователю, композитныйERDDAP™По сути, не тратит время процессора, память или пропускную способность на запрос.
    • Перенаправление является прозрачным для пользователя независимо от клиентского программного обеспечения. (браузер или любое другое программное обеспечение или инструмент командной строки) .
  • Вы можете сказатьERDDAP™не перенаправлять запросы пользователей путем установки<Перенаправление>фальшивый</redirect>, но это сводит на нет большинство преимуществ типа набора данных ...FromErddap (В частности, рассеивание нагрузки на переднем концеERDDAP™Удаленный / BackendERDDAP) .    

Подписки

Обычно, когдаEDDGridFromErddap и EDDTable Из Эрддапа (повторять) Заряженный на свойERDDAP, они пытаются добавить подписку на удаленный набор данных через удаленныйERDDAPСистема подписки e-mail/URL. Таким образом, когда удаленный набор данных изменяется, удаленныйERDDAP™контактыsetDataset Флаг URLна твоейERDDAP™чтобы локальный набор данных был перезагружен как можно скорее и чтобы локальный набор данных всегда был полностью обновлен и имитировал удаленный набор данных. Таким образом, в первый раз, когда это произойдет, вы должны получить электронное письмо с просьбой подтвердить подписку. Однако, если местныйERDDAP™Вы не можете отправить электронное письмо или удаленныйERDDAPСистема подписки на электронную почту / URL не активна, вы должны отправить удаленное сообщение по электронной почтеERDDAP™администратор и запросить вручную добавить [<OnChange> (#изменить) ...</onChange> теги для всех соответствующих наборов данных, чтобы вызвать ваш набор данныхsetDataset Флаг URL. Увидимся.ERDDAP™Ежедневный отчет для списка setDataset Флаг URL, но просто отправьте ихEDDGridFromErddap и EDDTableFromErddap для удаленного доступаERDDAP™администратор.

Это не работает? Ваши локальные наборы данных не синхронизируются с удаленными наборами данных? Несколько вещей должны работать правильно для этой системы, чтобы ваши наборы данных оставались в актуальном состоянии. Проверьте каждую из этих вещей в порядке:

  1. ТвойERDDAP™должен иметь возможность отправлять электронные письма. Смотрите настройки электронной почты в setup.xml.
  2. В целом (Но не всегда) ВашERDDAP?<Базовый URL и<baseHttpsUrl> не должен иметь номер порта (Например, :8080, :8443) . Если они это делают, используйтепроксипасУдалить порт из Url.
  3. В вашем setup.xml<ПодпискаToRemoteErddapDataset> должна быть установлена на истинность.
  4. Когда местный EDD... Набор данных FromErddap перезагружается, он должен отправить запрос на пультERDDAP™Подписаться на удаленный набор данных. Посмотрите на log.txt, чтобы узнать, происходит ли это.
  5. Вы должны получить электронное письмо с просьбой подтвердить запрос на подписку.
  6. Вы должны нажать на ссылку в этом электронном письме, чтобы подтвердить запрос на подписку.
  7. УдаленныйERDDAP™Надо сказать, что проверка прошла успешно. В любое время вы можете запросить электронное письмо с пультаERDDAP™со списком отложенных и действительных подписок. Смотрите форму в удаленныйrddapBase Урл /erddap/subscriptions/list.html.
  8. Когда меняется удаленный набор данных (Например, получить дополнительные данные) , удаленныйERDDAP™Постарайтесь связаться с флагурлом на вашемERDDAP. Вы не можете проверить это, но вы можете спросить администратора пультаERDDAP™Чтобы проверить это.
  9. ТвойERDDAP™Вы должны получить запрос на установку этого флагурла. Загляните в свой log.txt для запроса «setDatasetFlag.txt» (s) Проверьте, есть ли сообщение об ошибке, связанное с запросами.
  10. ТвойERDDAP™Затем следует попытаться перезагрузить этот набор данных. (Возможно, не сразу, но как можно скорее.) .  

Современный max (время) ?

EDDGridНаборы данных TableFromErddap изменяют только сохраненную информацию о каждом наборе исходных данных, когда набор исходных данных"перезагрузить"и некоторые изменения метаданных (Например, переменная времениactual\_range) , тем самым генерируя уведомление о подписке. Если исходный набор данных содержит данные, которые часто меняются (Новые данные каждую секунду) и использует"обновить"системы, чтобы замечать частые изменения базовых данных,EDDGrid/TableFromErddap не будет уведомлен об этих частых изменениях до следующей «перезагрузки» набора данных.EDDGridТаблица FromErddap не будет полностью обновлена. Вы можете минимизировать эту проблему, изменив исходный набор данных.<ПерезагрузкаEveryNMinutes> в меньшее значение (60? 15?) Чтобы было больше уведомлений о подписке, чтобы сообщитьEDDGrid/TableFromErddap обновляет свою информацию об исходном наборе данных.

Или, если ваша система управления данными знает, когда исходный набор данных имеет новые данные. (Например, через скрипт, который копирует файл данных на место) Если это не очень частое (каждые 5 минут или реже) Есть лучшее решение:

  1. Не используйте<Обновление EveryNMillis> для обновления исходного набора данных.
  2. Установите исходный набор данных<Перезагрузить EveryNMinutes в большее число (1440?) .
  3. Пусть сценарий свяжется с исходным набором данныхфлаг URLСразу после этого он копирует новый файл данных на место.  

Это приведет к тому, что исходный набор данных будет полностью обновлен и заставит его генерировать уведомление о подписке, которое будет отправлено на веб-сайт.EDDGrid/TableFromErddap набор данных. Это приведет кEDDGrid/TableFromErddap Dataset будет полностью обновлен (В течение 5 секунд будут добавлены новые данные) . И все это будет сделано эффективно (Без ненужных перезагрузок набора данных) .  

Нет.addAttributes,axisVariableилиdataVariable

В отличие от других типов наборов данных, EDDTableFromErddap иEDDGridНаборы данных FromErddap не позволяют<addAttributes>,<axisVariable> или<dataVariable> разделы вdatasets.xmlдля этого набора данных. Проблема заключается в том, что это приведет к несоответствиям:

  1. Допустим, это было разрешено, и вы добавили новый глобальный атрибут.
  2. Когда пользователь спрашиваетERDDAP™Для глобальных атрибутов появится новый атрибут.
  3. Когда пользователь спрашиваетERDDAP™Для файла данных, вашERDDAP™Перенаправляет запрос на источникERDDAP. ЭтоERDDAP™Они не знают о новом атрибуте. Таким образом, если он создает файл данных с метаданными, например,.ncфайл, метаданные не будут иметь нового атрибута.

Есть два обходных пути:

  1. Убедить администратора источникаERDDAP™изменения, которые вы хотите внести в метаданные.
  2. Вместо EDDTableFromErddap используйтеEDDTable FromDapSequence. Или вместо того, чтобыEDDGridFromErddap, использованиеEDDGridИз папы. Эти типы EDD позволяют эффективно подключаться к набору данных на удаленном устройстве.ERDDAP™ (но без перенаправления запросов данных) Они позволяют включать глобальные<addAttributes>,<axisVariable> или<dataVariable> разделы вdatasets.xml. Еще одно отличие: вам нужно будет вручную подписаться на удаленный набор данных, чтобы набор данных был на вашем компьютере.ERDDAP™будут уведомлены (черезфлаг URL) при внесении изменений в удаленный набор данных. Таким образом, вы создаете новый набор данных вместо ссылки на удаленный набор данных.  

Другие примечания

  • По соображениям безопасности,EDDGridFromErddap и EDDTable Из Erddap не поддерживают<Доступно>> (#доступность) тег и не может быть использован с удаленными наборами данных, которые требуют входа в систему (потому что они используются).<Доступно>> (#доступность) ). Видишь?ERDDAP?Система безопасностиограничение доступа к некоторым наборам данных для некоторых пользователей.  
  • Начиная сERDDAP™v2.10,EDDGridFromErddap и EDDTableFromErddap поддерживают эту функцию.<Доступные файлы> (#доступные файлы) Тэг. В отличие от других типов наборов данных, по умолчанию верно, но файлы набора данных будут доступны только в том случае, если исходный набор данных также имеет<Доступные файлы> установлен на истинность.  
  • Вы можете использоватьГенерировать наборы данных Программа Xmlчтобы сделатьdatasets.xmlДля этого типа набора данных. Но вы можете легко сделать эти типы наборов данных вручную.  

EDDGridСкелет Эрддапа XML

  • EDDGridСкелет Эрддапа Набор данных XML очень прост, потому что цель состоит в том, чтобы просто имитировать удаленный набор данных, который уже подходит для использования.ERDDAP:

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

EDDTable FromErddap скелет XML

  • Скелет XML для набора данных EDDTableFromErddap очень прост, потому что цель состоит в том, чтобы просто имитировать удаленный набор данных, который уже подходит для использования.ERDDAP:

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

EDDGridИз Этопо

EDDGridИз Этопо служит толькоНабор данных ETOPO1 Global 1-Minute Gridded Elevation (Ice Surface, сетка зарегистрирована, двоичный, 2 байт int: etopo1\_ice\_g\_i2.zip) который распределяется сERDDAP.

  • Только дваdatasetIDподдерживается дляEDDGridFromEtopo, чтобы вы могли получить доступ к данным со значениями долготы от -180 до 180, или значениями долготы от 0 до 360.
  • Нет никаких подтегов, так как данные уже описаны внутри.ERDDAP.
  • Итак, два варианта дляEDDGridНаборы данных FromEtopo (буквально) :
      <!-- 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" />

EDDGridИз материалов

EDDGridИз материалов Это суперкласс всехEDDGridИз... классов материалов. Ты не можешь использоватьEDDGridИз материалов напрямую. Вместо этого используйте подклассEDDGridFromFiles для обработки конкретного типа файла:

В настоящее время другие типы файлов не поддерживаются. Но обычно относительно легко добавить поддержку для других типов файлов. Свяжитесь с нами, если у вас есть запрос. Или, если ваши данные находятся в старом формате файла, от которого вы хотели бы отказаться, мы рекомендуем конвертировать файлы.NetCDFv3.ncФайлы.NetCDFявляется широко поддерживаемым двоичным форматом, обеспечивает быстрый случайный доступ к данным и уже поддерживаетсяERDDAP.

Из файлов Подробности

Следующая информация относится ко всем подклассамEDDGridИз материалов.

Агрегация существующего измерения

Все вариацииEDDGridИз файлов можно агрегировать данные из локальных файлов, где каждый файл имеет 1. (или более) Различные значения для самых левых (первый) размерность, обычно\[время\]которые будут агрегированы. Например, размеры могут быть\[время\]\[высота\]\[широта\]\[долгота\]Файлы могут иметь данные для одного (или несколько) временная стоимость (s) За файл. Полученный набор данных выглядит так, как будто все данные файла были объединены. Большими преимуществами агрегации являются:

  • Размер агрегированного набора данных может быть намного больше, чем один файл может быть удобно. (2 ГБ) .
  • Для данных в реальном времени легко добавить новый файл с последними данными. Вам не нужно переписывать весь набор данных.

Требования к агрегации следующие:

  • Местные файлы не должны быть одинаковымиdataVariables (как определено в наборе данныхdatasets.xml) . Набор данных будет иметьdataVariableопределяется вdatasets.xml. Если файл не имеет данностиdataVariable,ERDDAP™При необходимости будут добавлены недостающие значения.
  • Все этоdataVariableдолжны использовать тот жеaxisVariables/размеры (как определено в наборе данныхdatasets.xml) . Файлы будут агрегированы на основе первых (самый левый) размерность, отсортированная по восходящему порядку.
  • Каждый файл может иметь данные для одного или нескольких значений первого измерения, но не может быть никакого перекрытия между файлами. Если файл имеет более одного значения для первого измерения, значения должны быть отсортированы в порядке возрастания, без связей.
  • Все файлы должны иметь одинаковые значения для всех других измерений. Точность испытаний определяетсяОбсуждение AxisNDigits.
  • Все файлы должны иметь одинаковуюединицыМетаданные для всехaxisVariables иdataVariableС. Если это проблема, вы можете использоватьNcMLилиNCOЧтобы решить проблему.  
Агрегация через имена файлов или глобальные метаданные

Все вариацииEDDGridFromFiles также может объединять группу файлов, добавляя новый левый край. (первый) размерность, обычно время, основанное на значении, полученном из каждого имени файла или из значения глобального атрибута, который находится в каждом файле. Например, имя файла может включать временное значение для данных в файле.ERDDAP™Это позволит создать новое измерение времени.

В отличие от аналогичной функции в THREDDS,ERDDAP™всегда создаетaxisVariableс числовыми значениями (В соответствии с требованиями CF) Никогда не струнные ценности (которые не допускаются CF) . Кроме того,ERDDAP™будет сортировать файлы в агрегации на основе числаaxisVariableЗначение, которое присваивается каждому файлу, так что переменная оси всегда будет иметь сортированные значения, требуемые CF. Подход THREDDS к лексикографической сортировке на основе имен файлов приводит к агрегациям, где значения оси не сортируются. (который не допускается CF) когда имена файлов сортируются иначе, чем производныеaxisVariableценностей.

Чтобы создать одну из этих групп вERDDAP™Вы определите новый левый край (первый) axisVariableС особой, псевдо<sourceName> Что говоритERDDAP™Где и как найти значение для нового измерения из каждого файла.

  • Формат для псевдоsourceNameкоторый получает значение от имени файла (просто filename.ext) это \\\ имя файла, данные Тип , ExtractRegex , Групповой номер *
  • Формат для псевдоsourceNameкоторый получает значение от имени абсолютного пути файла \\\ имя пути, данные Тип , ExtractRegex , Групповой номер * \[Для этого всегда используется название пути.'/'Как персонаж разделителя каталога, никогда не ''.\]
  • Формат для псевдоsourceNameкоторый получает значение от глобального атрибута \\\ глобальный: атрибут Имя , данные Тип , ExtractRegex , Групповой номер *
  • Это псевдоsourceNameОпцион работает иначе, чем другие: вместо создания нового левого (первый) axisVariableЭто заменяет стоимость текущегоaxisVariableс значением, извлеченным из имени файла (просто filename.ext) . Формат является \\\ заменить Файловое имя, данные Тип , ExtractRegex , Групповой номер *  

Описание частей, которые вы должны предоставить:

  • атрибут Имя имя глобального атрибута, который находится в каждом файле и который содержит значение размерности.
  • данные Тип - Это определяет тип данных, которые будут использоваться для хранения значений. Смотрите стандартный списокданные ТипыэтоERDDAP™поддерживает, за исключением того, что здесь не допускается струна, поскольку переменные оси вERDDAP™Не может быть струнных переменных.

Существует дополнительный псевдотип данных, TimeFormat= струна Формат времени Что говоритERDDAP™что значение является струнным временным штампомЕдиницы, подходящие для струнного времени. В большинстве случаев струнный формат TimeFormat, который вам нужен, будет вариацией одного из этих форматов:

  • yyyy-MM-ddT'HH:mm:ss.SSSZ - ISO 8601:2004 (Е) Формат даты. Вам может понадобиться сокращенная версия, например,yyyy-MM-ddTHH:mm:ss илиyyyy-MM-dd.
  • yyyyMMddHHmmss.SSS - компактная версия формата даты ISO 8601. Вам может понадобиться сокращенная версия этого, например, yyyyMMddHHmmss или yyyyMMdd.
  • M/d/yyyy H:mm:ss.SSS — формат даты слэша в США. Вам может понадобиться сокращенная версия этого, например, M/d/yyyy.
  • yyyyDDDHHmmssSSS - это год плюс нулевой день года (Например, 001 = 1 января 365 = 31 декабря в не високосный год; иногда ошибочно называют юлианскую дату.) . Вам может понадобиться сокращенная версия этого, например, yyyyDDD.

Если вы используете этот псевдотип данных, добавьте его в новую переменную.<addAttributes>:

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

Если вы хотите сместить все временные значения, сместите временную величину в единицах, например: 197001-01T12:00:00Z.

  • ExtractRegex - Это тот самыйрегулярное выражение (учебник) который включает в себя группу захвата (в скобках) который описывает, как извлечь значение из имени файла или глобального значения атрибута. Например, имя файла S19980011998031.L3b\_MO\_CHL.nc, группа захвата #1",\dучебник", в обычном выражении S (\dучебник) \dучебник\.L3b\* улавливает первые 7 цифр после S: 1998001.
  • ЗахватGroupNumber - Это число группы захвата. (внутри пары скобок) в обычном выражении, содержащем интересующую информацию. Обычно это 1, первая группа захвата. Иногда вам нужно использовать группы захвата для других целей в регексе, поэтому важным номером группы захвата будет 2. (Вторая группа захвата) или 3 (Третий) и т.д.

Полный пример одного изaxisVariableкоторый создает агрегированный набор данных с новой осью времени, которая получает значения времени от имени файла каждого файла

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

При использовании псевдоданных «TimeFormat=» Тип,ERDDAP™Добавить 2 атрибута вaxisVariableТаким образом, кажется, что они исходят из источника:

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

В данном случае,ERDDAP™Будет создана новая ось под названием"time"с двойными значениями (секунды с 1970-01-01T00:00:00Z) путем извлечения 7 цифр после «S» и до «.L3m» в имени файла и интерпретации их как значений времени, отформатированных как yyyyDDD.

Вы можете отменить базовое время по умолчанию (197001-01T00:00:00Z) путем добавленияДобавить атрибуткоторый определяет различные единицы атрибута с различным базовым временем. Обычная ситуация: есть группы файлов данных, каждый с 1-дневным составом спутникового набора данных, где вы хотите, чтобы значение времени было полдень дня, упомянутого в имени файла. (центрированное время каждого дня) И хотите переменнуюlong\_nameБыть «центрированным временем». Пример, который делает это:

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

Примечание: часы = 12 в базовом времени, что добавляет 12 часов относительно первоначального базового времени 1970-01-01T00:00:00Z.

Полный пример одного изaxisVariableкоторый делает агрегированный набор данных с новой осью «бега» (с внутренними значениями) который получает значения выполнения из глобального атрибута «runID» в каждом файле (с такими значениями, как "r17\_global", где 17 - номер пробега) это

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

Обратите внимание на использование группы захвата No 2 для захвата цифр, которые происходят после «r» или «s» и до «\_global». Этот пример также показывает, как добавить дополнительные атрибуты. (например,ioos\_categoryи единицы) переменной оси.  

Внешне сжатые файлы

  • Наборы данных, которые являются подмножествамиEDDGridИз материалов и EDDTable FromFiles может обслуживать данные непосредственно из файлов данных, сжатых извне, включая.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2и .Z файлы.  

  • Это работает удивительно хорошо!
    В большинстве случаев замедление, связанное с декомпрессией файлов данных малого и среднего размера, незначительно. Если вам нужно сохранить дисковое пространство, мы настоятельно рекомендуем использовать эту функцию, особенно для старых файлов, к которым редко обращаются.  

  • Экономь деньги!
    Это одна из немногих особенностей вERDDAP™Это дает вам возможность сэкономить много денег (хотя и за счет незначительно сниженной производительности) . Если коэффициент сжатия равен, например, 6:1 (Иногда это будет намного выше.) , то для файлов данных набора данных потребуется только 1/6 дискового пространства. Тогда, возможно, вы сможете обойтись 1 рейдом. (для определенного размера) Вместо 6 СПИД (одинакового размера) . Это огромная экономия средств. Надеюсь, возможность сжимать некоторые файлы в коллекции (Старшие из них?) и не сжимать других (Новые?) Чтобы изменить это в любое время, давайте сведем к минимуму недостатки сжатия некоторых файлов. (Медленный доступ) . И если выбор между хранением файлов на ленте (Доступно только по запросу, после задержки) Для хранения их на рейде (Доступно черезERDDAP) Тогда есть огромное преимущество в использовании сжатия, чтобы пользователи могли быть интерактивными и (относительно) быстрый доступ к данным. И если это может спасти вас от покупки дополнительного RAID, эта функция может сэкономить вам около 30 000 долларов.  

  • Для всехEDDGridПодклассы из файлов, если файлы данных имеют расширение, указывающее, что они сжаты извне (В настоящее время:.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2или .Z) ,ERDDAP™будет декомпрессировать файлы в каталог кэша набора данных, когда он их читает (Если они еще не в кэше) . То же самое верно для двоичного файла (например,.nc) Подклассы EDDTableFromFiles.  

  • Подклассы EDDTableFromFiles для небинарных файлов (Например, .csv) , файлы данных с расширением, указывающим, что они сжаты извне, будут сжиматься на лету при чтении файла.  

  • ПРЕДУПРЕЖДЕНИЕ: Если используется тип сжатого файла (например,.tgzили.zip) Поддерживает более 1 файла внутри сжатого файла, сжатый файл должен содержать всего 1 файл.  

  • Эта функция предполагает, что содержимое внешне сжатых файлов не изменяется, так что кэшированный декомпрессированный файл может быть повторно использован. Если некоторые или все файлы данных набора данных иногда изменяются, не сжимайте эти файлы. Это согласуется с обычным использованием, поскольку люди обычно не сжимают файлы, которые им иногда нужно изменить.  

  • <ФайлNameRegex Чтобы сделать эту работу, набор данных<FileNameRegex> должен соответствовать именам сжатых файлов. Очевидно, регексы как.\Сопоставим все имена файлов. Если вы указываете конкретный тип файла, например,\\.nc, то вам нужно изменить regex, чтобы включить расширение сжатия, например, . \.nc\.gz(если все документы будут что-то**.nc.gzфайлы).  

  • Это нормально, если ваш набор данных включает в себя смесь сжатых и не сжатых файлов. Это может быть полезно, если вы считаете, что некоторые файлы (Например, старые файлы) Они будут использоваться реже, и поэтому будет полезно сэкономить дисковое пространство, сжимая их. Чтобы сделать эту работу,<FileNameRegex> должен соответствовать именам сжатых и не сжатых файлов, например, .\или.\\.nc (|\.gz) (где группа захвата в конце этого указывает, что.gzнеобязательно.  

  • Это нормально, если вы сжимаете или декомпрессируете определенные файлы в коллекции в любое время. Если данные не используются [<Обновление EveryNMillis (#updateeverynmillis) Установите набор данныхфлаграссказыватьERDDAP™Перезагрузить набор данных и таким образом заметить изменения. Интересно, что вы можете использовать различные алгоритмы сжатия и настройки для разных файлов в одном наборе данных. (например,.bz2редко используемые файлы,.gzдля не часто используемых файлов и без сжатия для часто используемых файлов) Просто убедитесь, что регекс поддерживает все расширения файлов, которые используются, например, ..nc (|\.gz|\.bz2) .  

  • Конечно, коэффициенты сжатия и скорости для различных алгоритмов сжатия варьируются в зависимости от исходного файла и настроек. (Например, уровень сжатия) . Если вы хотите оптимизировать эту систему для своих файлов, проведите тест различных методов сжатия с вашими файлами и с различными настройками сжатия. Если вы хотите надежного (Не обязательно лучший) Настройка, мы немного рекомендуемgzip (.gz) .gzipне делает самый маленький сжатый файл (достаточно близко) Он очень быстро сжимает файл и (более важным дляERDDAP™пользователи) Очень быстро декомпрессирует файл. Плюс,gzipПрограммное обеспечение поставляется в стандартной комплектации с каждой установкой Linux и Mac OS и легко доступно для Windows через бесплатные инструменты, такие как 7Zip и дополнения Linux, такие как Git Bash. Например, для сжатия исходного файла в.gzВерсия файла (имя файла, но с.gzприлагаемый) использовать (Linux, Mac OS и Git Bash)
    gzip sourceName
    Декомпрессия а.gzВернуться к оригиналу, использовать стрельба sourceName.gz
    Для сжатия каждого из исходных файлов в каталоге и его подкаталогах, рекурсивно, использовать gzip-р Имя режиссера
    Чтобы разложить каждый из.gzфайлы в каталоге и его подкаталогах, рекурсивно, использовать гунцип Имя режиссера
     

  • Предупреждение: не сжимайте внешне (gzip) Файлы, которые уже сжаты внутри! Многие файлы уже сжаты внутри. Если тыgzipЭти файлы, полученные файлы не будут намного меньше (<5%) иERDDAP™Они будут тратить время на их декомпрессию, когда им нужно будет их прочитать. Например:

    • файлы данных: например,.nc4 и.hdf5 файлов: Некоторые файлы используют внутреннее сжатие, а некоторые нет. Сжатые переменные имеют атрибуты «\_ChunkSize». Кроме того, если группа сетчатых.ncили.hdfФайлы бывают разных размеров, скорее всего, они внутренне сжаты. Если они все одинакового размера, они не сжимаются внутри.

    • Файлы изображений: например, .gif, .jpg и .png

    • аудиофайлы: например, .mp3 и .ogg.

    • Видеофайлы: например, .mp4, .ogv и .webm.

Один неудачный случай: аудиофайлы .wav огромны и не сжаты внутри. Было бы неплохо сжать (gzip) Но, как правило, вы не должны этого делать, потому что если вы это сделаете, пользователи не смогут воспроизводить сжатые файлы в своем браузере.  

  • Пример испытания: сжатие (сgzip) Набор данных с сеткой 1523.ncФайлы.

    • Данные в исходных файлах были скудными (Много недостающих ценностей) .
    • Общее дисковое пространство увеличилось с 57 ГБ до сжатия до 7 ГБ после.
    • Запрос на большое количество данных из 1 точки<1 с до и после компрессии.
    • Запрос 1 точки данных для 365 точек времени (Наихудшая ситуация) От 4 с до 71 с.  

Для меня это разумный компромисс для любого набора данных и, конечно, для наборов данных, которые используются нечасто.  

  • Внутреннее сжатие против внешнего — По сравнению с внутренним сжатием файла, предлагаемым.nc4 и.hdf5 файлов,ERDDAPПодход к внешне сжатым двоичным файлам имеет преимущества и недостатки. Недостатком является то, что для однократного чтения небольшой части одного файла внутреннее сжатие лучше.EDDGridОт файлов нужно только разложить несколько кусков (s) Файл, а не весь файл. НоERDDAPПодход имеет некоторые преимущества:

    • ERDDAP™Поддерживает сжатие всех типов файлов данных (двоичный и недвоичный, например,.nc3 и .csv) не только.nc4 и.hdf4.
    • Если основная часть файла должна быть прочитана более одного раза за короткий промежуток времени, то это экономит время на декомпрессию файла один раз и чтение его много раз. Это происходит вERDDAP™Когда пользователь использует Make-A-Graph для набора данных и вносит ряд небольших изменений в график.
    • Возможность иметь сжатые файлы и не сжатые файлы в одной коллекции позволяет вам больше контролировать, какие файлы сжаты, а какие нет. И этот дополнительный контроль приходит без изменения исходного файла (Поскольку вы можете сжать файл, например,.gzЗатем декомпрессируйте его, чтобы получить исходный файл.) .
    • Возможность изменять в любое время, сжат ли данный файл и как он сжат. (Различные алгоритмы и настройки) Это дает вам больше контроля над производительностью системы. Вы можете легко восстановить исходный несжатый файл в любое время.

Хотя ни один из подходов не является победителем во всех ситуациях, ясно, чтоERDDAPСпособность обслуживать данные из внешних сжатых файлов делает внешнее сжатие разумной альтернативой внутреннему сжатию..nc4 и.hdf5. Это важно, учитывая, что внутреннее сжатие является одной из основных причин, по которым люди выбирают использование..nc4 и.hdf5.  

Декомпрессированный кэш

ERDDAP™делает декомпрессированную версию любого сжатого двоичного (например,.nc) Файл данных, когда нужно прочитать файл. Декомпрессированные файлы хранятся в каталоге набора данных внутри BigParent Директория /декомпрессия/. Декомпрессированные файлы, которые не использовались в последнее время, будут удалены, чтобы освободить место, когда совокупный размер файла составляет > 10 ГБ. Вы можете изменить это, установив<DecompressedCacheMaxGB (По умолчанию 10) в наборах данных Xml.xml, например,

        <decompressedCacheMaxGB>40</decompressedCacheMaxGB>  

Кроме того, декомпрессированные файлы, которые не использовались в течение последних 15 минут, будут удалены в начале каждой основной перезагрузки набора данных. Вы можете изменить это, установив<DecompressedCacheMaxMinutesOld> (По умолчанию = 15) в наборах данных Xml.xml, например,

        <decompressedCacheMaxMinutesOld>60</decompressedCacheMaxMinutesOld>  

Большие числа приятны, но кумулятивный размер декомпрессированных файлов может вызвать BigParent Директория Исчезает дисковое пространство, что вызывает серьезные проблемы.  

  • Декомпрессия файла может занять значительное количество времени. (0,1-10 секунд) , наборы данных со сжатыми файлами могут извлечь выгоду из установки набора данных [<nThreads> (#нити) Настройка на большее число (2? 3? 4?) . Недостатки еще более высоких цифр (Например, 5? 6? 7?) Это уменьшает отдачу, и запрос одного пользователя может использовать высокий процент ресурсов системы, что значительно замедляет обработку запросов другого пользователя. Таким образом, нет идеальной настройки nThreads, просто разные последствия в разных ситуациях с разными настройками.  

Сортированные значения измерения

Значения для каждого измерения должны быть сортированы по порядку. (восходящий или нисходящий, за исключением первого (самый левый) измерение, которое должно быть восходящим) . Значения могут быть нерегулярно разнесены. Никаких связей быть не может. Это является требованием кСтандарт метаданных CF. Если значения любого измерения не сортированы, набор данных не будет загружен иERDDAP™идентифицирует первое несортированное значение в файле журнала, BigParent Директория /logs/log.txt.

Несортированные значения размерности почти всегда указывают на проблему с исходным набором данных. Чаще всего это происходит, когда в агрегацию включается неправильно названный или неподходящий файл, что приводит к несортированному измерению времени. Чтобы решить эту проблему, см. сообщение об ошибке вERDDAP™log.txt файл, чтобы найти значение времени. Затем посмотрите в исходных файлах, чтобы найти соответствующий файл. (либо до, либо после) Это не входит в агрегацию.

Директории

Файлы могут быть в одном каталоге или в каталоге и его подкаталогах. (рекурсивно) . Если имеется большое количество файлов (Например, >1000) , операционная система (и таким образомEDDGridИз материалов) Работает намного эффективнее, если хранить файлы в серии подкаталогов. (один в год или один в месяц для наборов данных с очень частыми файлами) Чтобы никогда не было большого количества файлов в данном каталоге.  

<CacheFromUrl>

ВсеEDDGridFromFiles и все наборы данных EDDTableFromFiles поддерживают набор тегов, которые сообщаютERDDAP™загружать и поддерживать копию всех файлов удаленного набора данных или кэш нескольких файлов (скачать по мере необходимости) . Это может быть невероятно полезно. Видишь?кэш Документация Url.

Дистанционные каталоги и HTTP Range Requests

(AKA Byte Serving, Byte Range Requests, Accept-Rangeshttpзаголовок)
EDDGridFromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles и EDDTableFromNcCFFiles иногда обслуживать данные из.ncфайлы на удаленных серверах и доступ к ним через HTTP, если сервер поддерживаетБайт обслуживаетHTTP-запросы диапазона (Механизм HTTP для байтового обслуживания) . Это возможно благодаря Netcdf-java. (которыйERDDAP™использовать для чтения.ncфайлы) Поддержка чтения данных с удаленного.ncФайлы через HTTP-запросы.

Не делай этого! Это ужасно неэффективно и медленно. Вместо этого используйте [<cacheFromUrl>система (#cachefromurl) .

ДоступERDDAP™наборы данных в виде файлов по запросам байтового диапазона - Переверните это, учитывая, что вы можете (в теории) Подумайте о наборе данных вERDDAP™Как гигант.ncфайл с приложением ".nc"на базу OPenDAPURL для данного набора данных (например, https://myserver.org/erddap/griddap/datasetID.nc а также путем добавления запроса после этого для указания подмножества) Возможно, разумно спросить, можно ли использовать netcdf-java.Ferretили какой-либо другойNetCDFклиентское программное обеспечение для чтения данных через HTTP-запросы из диапазонаERDDAP. Ответ - нет, потому что на самом деле нет огромного ".nc"файл. Если вы хотите сделать это, выберите один из этих вариантов:

  • Использовать(OPeN)DAPклиентское программное обеспечение для подключения к услугам griddap, предлагаемымERDDAP. Это то, чтоDAP (и таким образомERDDAP) Он был разработан для. Это очень эффективно.
  • Или скачать исходный файл (s) из которого"files"система (или файл подмножества через.nc? запрос) на компьютер и использовать netcdf-java;Ferretили какой-либо другойNetCDFКлиентское программное обеспечение для чтения (теперь) локальный файл (s) .  

Информация о кэшированных файлах

КогдаEDDGridСначала загружается набор данных FromFiles,EDDGridFromFiles считывает информацию из всех соответствующих файлов и создает таблицы. (Одна строка для каждого файла) с информацией о каждом действительном файле и каждом «плохом» (иной или недействительный) Файл.

  • Таблицы также хранятся на диске.NetCDFv3.ncфайлы в BigParent Директория /dataset/ Last2CharsOfDatasetID / datasetID / в файлах с именем: раскладной.nc (который содержит список уникальных имен каталогов) , файл Столик.nc (который содержит таблицу с информацией каждого действительного файла) , Плохие материалы.nc (который содержит таблицу с информацией о каждом плохом файле) .
  • Чтобы ускорить доступ кEDDGridНабор данных Files (За счет использования большего объема памяти) Вы можете использовать

true
рассказыватьERDDAP™сохранить копию таблицы информации файла в памяти.

  • Копия файловых информационных таблиц на диске также полезна, когдаERDDAP™Отключается и перезапускается: экономитEDDGridИз файлов, которые нужно перечитать все файлы данных.
  • При перезагрузке набора данных,ERDDAP™Нужно только прочитать данные в новых файлах и файлах, которые изменились.
  • Если файл имеет структуру, отличную от других файлов (Например, другой тип данных для одной из переменных или другое значение для "единицы"атрибут) ,ERDDAPДобавляет файл в список «плохих» файлов. Информация о проблеме с файлом будет написана на BigParent Директория /logs/log.txt файл.
  • Вам никогда не нужно удалять или работать с этими файлами. Одно исключение: если вы все еще вносите изменения в набор данныхdatasets.xmlНастройка, вы можете удалить эти файлы, чтобы заставитьERDDAP™Перечитывать все файлы, так как они будут читаться и интерпретироваться по-разному. Если вам нужно удалить эти файлы, вы можете сделать это, когдаERDDAP™Бежит. (Затем установитефлагПерезагрузить набор данных как можно скорее.) Однако,ERDDAP™Как правило, отмечается, чтоdatasets.xmlИнформация не совпадает с файлом Информация о таблице и автоматически удаляет таблицы файлов.
  • Если вы хотите поощрятьERDDAP™для обновления сохраненной информации о наборе данных (Например, если вы просто добавили, удалили или изменили некоторые файлы в каталог данных набора данных.) Используйтефлаговая системапринуждатьERDDAP™Обновление кэшированной информации файла.  

Обработка запросов

Когда обрабатывается запрос клиента на данные,EDDGridFromFiles может быстро заглянуть в таблицу с достоверной информацией о файле, чтобы увидеть, какие файлы имеют запрошенные данные.  

Обновление кэшированной файловой информации

Всякий раз, когда набор данных перезагружается, информация кэшированного файла обновляется.

  • Набор данных периодически перезагружается, как определено<перезагрузить EveryNMinutes> в наборе данныхdatasets.xml.
  • Набор данных перезагружается как можно скорее, когда это возможно.ERDDAP™Выявляете, что вы добавили, удалили,касаться (Чтобы изменить последний файл Измененное время) или изменить файл данных.
  • Набор данных перезагружается как можно скорее, если вы используетефлаговая система.

Когда данные перезагружаются,ERDDAP™Сопоставляет имеющиеся в настоящее время файлы с таблицами кэшированной информации о файлах. Новые файлы читаются и добавляются в действующую таблицу файлов. Файлы, которые больше не существуют, выпадают из таблицы файлов. Файлы, в которых изменилась временная метка файла, считываются, и их информация обновляется. Новые таблицы заменяют старые таблицы в памяти и на диске.  

Плохие файлы

Таблица плохих файлов и причины, по которым файлы были объявлены плохими (поврежденный файл, отсутствующие переменные и т.д.) отправляется по электронной почте Все На адрес электронной почты (Возможно, вы) Каждый раз, когда набор данных перезагружается. Вы должны заменить или восстановить эти файлы как можно скорее.  

Пропавшие переменные

Если некоторые файлы не имеютdataVariables определено в наборе данныхdatasets.xmlКусок, все в порядке. КогдаEDDGridFromFiles читает один из этих файлов, он будет действовать так, как если бы файл имел переменную, но со всеми отсутствующими значениями.  

Проблемы FTP / Советы

Если вы FTP новые файлы данныхERDDAP™сервера в то время какERDDAP™Бежит, есть шанс, чтоERDDAP™Перезагрузка набора данных во время процесса FTP. Это происходит чаще, чем вы думаете! Если это произойдет, файл будет выглядеть действительным. (имеет действительное имя) Но файл еще не действителен. ЕслиERDDAP™пытается прочитать данные из этого недействительного файла, в результате ошибки файл будет добавлен в таблицу недействительных файлов. Это не хорошо. Чтобы избежать этой проблемы, используйте временное имя файла, например, ABC2005..nc\_TEMP .Тогда тест FileNameRegex (см. ниже) Укажет, что это не соответствующий файл. После завершения процесса FTP переименуйте файл в правильное имя. Процесс переименования приведет к тому, что файл станет актуальным в одно мгновение.  

"0 файлов" сообщение об ошибке

Если бежишьГенерировать наборы данныхXmlилиDasDdsЕсли вы пытаетесь загрузитьEDDGridИсточник: Files Dataset inERDDAP™, и вы получаете сообщение об ошибке «0 файлов», указывающее, чтоERDDAP™найдено 0 совпадающих файлов в каталоге (Когда вы думаете, что в этом каталоге есть соответствующие файлы) :

  • Убедитесь, что файлы действительно находятся в этом каталоге.
  • Проверьте написание названия каталога.
  • Проверьте файл NameRegex. Очень, очень легко делать ошибки с регексами. Для целей тестирования попробуйте regex .\*, который должен соответствовать всем именам файлов. (Посмотри.нормативная документацияиучебник по регексу.)
  • Убедитесь, что пользователь, который запускает программу (Пользователь=tomcat (?) Для Tomcat/ERDDAP) У вас есть разрешение «читать» эти файлы.
  • В некоторых операционных системах (Например, SELinux) В зависимости от системных настроек пользователь, который запустил программу, должен иметь разрешение «читать» для всей цепочки каталогов, ведущих в каталог, в котором есть файлы.  

EDDGridФайлы скелет XML

  • Скелет XML для всехEDDGridПодклассы материалов:

  <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*Из аудиофайлов

EDDGridИз аудиофайлов и EDDTable FromAudioFiles агрегированные данные из набора локальных аудиофайлов. (Первые появились вERDDAP™v1.82.) Разница заключается в том, чтоEDDGridFromAudioFiles рассматривает данные как многомерный набор данных (Обычно с 2 размерами:\[Файловый старт Время\]и\[истекший Время внутри файла\]) , тогда как EDDTableFromAudioFiles рассматривает данные как табличные данные (обычно с колонками для файла startTime, прошедшего времени с файлом и данными из аудиоканалов) .EDDGridFromAudioFiles требует, чтобы все файлы имели одинаковое количество образцов, поэтому, если это не так, вы должны использовать EDDTableFromAudioFiles. В противном случае выбор типа EDD полностью зависит от вас. Одно из преимуществ EDDTableFromAudioFiles: вы можете добавлять другие переменные с другой информацией, например,stationIDСтанция Тип. В обоих случаях отсутствие унифицированной временной переменной затрудняет работу с данными из этих типов EDD, но не было хорошего способа настроить унифицированную временную переменную.

Посмотрите на эти суперклассы,EDDGridИз материаловиEDDTable Из материаловДля получения общей информации о том, как работает этот класс и как его использовать.

Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Поскольку аудиофайлы не имеют метаданных, кроме информации, связанной с кодированием звуковых данных, вам придется редактировать выход из наборов данных GenerateDatasets. Xml предоставляет важную информацию (Например, название, резюме,creator\_nameинститут, история) .

Подробности:

  • Существует большое количество форматов аудиофайлов. В настоящее времяERDDAP™Можно читать данные из большинства файлов .wav и .au. В настоящее время он не может читать другие типы аудиофайлов, например, .aiff или .mp3. Если вам нужна поддержка других форматов аудиофайлов или других вариантов .wav и .au, пожалуйста, отправьте свой запрос Крису. Джон на noaa.gov. Или, как обходной путь, который вы можете использовать прямо сейчас, вы можете конвертировать свои аудиофайлы в PCM. Знаменитый (для целочисленных данных) PCM/_FLOAT (для данных с плавающей точкой) .wav файлы так чтоERDDAP™Может работать с ними.
  • В настоящее времяERDDAP™читать аудиофайлы с помощью чегоJavaКласс AudioFormat вызывает кодирование PCM\_FLOAT, PCM\_SIGNED, PCM\_UNSIGNED, ALAW и ULAW.ERDDAP™Преобразует значения PCM\_UNSIGNED (Например, от 0 до 255) подписанные ценности (Например, от -128 до 128) путем перестановки битов в значениях данных.ERDDAP™преобразует ALAW и ULAW, закодированные из их родного формата закодированных байтов в короткие (Int16) ценностей. С тех порJavaBigEndian = реальные данныеERDDAP™Перестраивает байты данных, хранящихся с bigEndian=false (Маленький эндиан) Чтобы правильно читать значения. Для всех остальных кодировок (PCM) ,ERDDAP™Считывает данные как есть.
  • КогдаERDDAP™считывает данные из аудиофайлов, преобразует доступные аудиометаданные файла в глобальные атрибуты. Это всегда будет включать (показанные значения выборки)

Струнный аудиобигэндийский «ложный»; //истинный или ложный внутри аудио Каналы 1; Струнное аудиокодирование «PCM\_SIGNED»; FrameRate 96000.0; // в секунду int audioFrameSize 2; //# байтов данных на кадр float audioSampleRate 96000.0; // в секунду int audioSampleSizeInBits 16; //# битов на канал на образец

ДляERDDAPДля целей фрейм является синонимом выборки, которая представляет собой данные за один момент времени. атрибуты вERDDAP™будет иметь информацию, описывающую данные, как это было в исходных файлах.ERDDAP™Часто это изменяется при чтении данных, например, закодированные данные PCM\_UNSIGNED, ALAW и ULAW преобразуются в PCM\_SIGNED, а BigEndian = ложные данные преобразуются в BigEndian = истинные данные. (Что такое какJavaХочет почитать) . В конце концов, значения данных вERDDAP™всегда будет являтьсякодированный PCMзначения данных (т.е. простые оцифрованные образцы звуковой волны) .

  • КогдаERDDAP™считывает данные из аудиофайлов, считывает весь файл.ERDDAP™Он может считывать до 2 миллиардов образцов на канал. Например, если скорость выборки составляет 44 100 образцов в секунду, 2 миллиарда образцов переводят примерно 756 минут звуковых данных на файл. Если у вас есть аудиофайлы с большим количеством данных, вам нужно разбить файлы на более мелкие куски.ERDDAP™Их можно читать.
  • Потому чтоERDDAP™читать целые аудиофайлы,ERDDAP™должен иметь доступ к большому объему памяти для работы с большими аудиофайлами. Видишь?ERDDAPНастройки памяти. Опять же, если это проблема, обходной путь, который вы можете использовать прямо сейчас, состоит в том, чтобы разбить файлы на более мелкие куски.ERDDAP™Их можно читать с меньшей памятью.
  • Некоторые аудиофайлы были написаны неправильно.ERDDAP™Прилагает небольшие усилия для рассмотрения таких случаев. Но вообще, когда есть ошибка,ERDDAP™Исключение будет (Отклонить этот файл) или (Если ошибка не обнаруживается) Читать данные (Но данные будут неверными) .
  • ERDDAP™Не проверяет и не изменяет громкость звука. В идеале, целочисленные аудиоданные масштабируются для использования всего диапазона типа данных.
  • Аудиофайлы и аудиоплееры не имеют системы отсутствующих значений. (Например, -999 или Float.NaN) . Таким образом, аудиоданные не должны иметь отсутствующих значений. Если отсутствуют ценности (Например, если вам нужно удлинить аудиофайл) Используйте серию 0, которая будет истолкована как совершенное молчание.
  • КогдаERDDAP™считывает данные из аудиофайлов, он всегда создает колонку под названием elapsed Время с временем для каждого образца, в секундах (Хранится как двойник) относительно первого образца (который уже установлен Время = 0,0 с) . сEDDGridИз аудиофайлов это становится переменной оси прошедшего времени.
  • EDDGridОт AudioFiles требуется, чтобы все файлы имели одинаковое количество образцов. Если это не так, вы должны использовать EDDTable FromAudioFiles.
  • ДляEDDGridИз аудиофайлов мы рекомендуем вам установить [<ИзмерениеЦенностиВ памяти> (#dimensionvaluesinmemory) ложный (Как рекомендуется GenerateDatasets Xml) Потому что измерение времени часто имеет огромное количество значений.
  • ДляEDDGridИз аудиофайлов вы почти всегда должны использоватьEDDGridОтраслевая система дляАгрегация через Файловые именапочти всегда путем извлечения даты начала записи; Время с имен файлов. Например,
    <sourceName>\\*\\*\\*fileName,"timeFormat=yyyyMMdd'\\_'HHmmss",aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

Генерировать наборы данных Xml поддержит это и поможет вам в этом.

  • Для EDDTableFromAudioFiles почти всегда следует использовать систему EDDTableFromFiles.\*\**Фильм псевдонимsourceNamesдля извлечения информации из имени файла (Почти всегда дата начала Время для записи) Пусть это будет колонка данных. Например,
    <sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

Формат времени должен быть указан как атрибут единицы:<Att name="units">yyyMMdd''HHmmss</att>  

EDDGridИзображения MergeIRFiles

EDDGridИзображения MergeIRFiles агрегированные данные из локальных,ОбъединениеФайлы, которые принадлежатМиссия измерения тропических осадков (ТРММ) Это совместная миссия НАСА и Японского агентства аэрокосмических исследований. (Джакса) . слияние IR файлы можно скачать изНАСА.

EDDGridFromMergeIRFiles.java была написана и внесла свой вклад вERDDAP™Проект Джонатана Лафит и Филиппа Маковски из R.Tech Engineering (Лицензия: авторское право open source) .

EDDGridИз MergeIRFiles немного необычно:

  • EDDGridFromMergeIRFiles поддерживает сжатые или несжатые исходные файлы данных в любой комбинации в одном наборе данных. Это позволяет сжимать старые файлы, к которым редко обращаются, но не сжимать новые файлы, к которым часто обращаются. Или вы можете изменить тип сжатия с оригинала. Например, Z,.gz.
  • Если у вас есть сжатые и несжатые версии одних и тех же файлов данных в одном и том же каталоге, пожалуйста, убедитесь, что<FileNameRegex> для вашего набора данных соответствует именам файлов, которые вы хотите, чтобы он соответствовал, и не соответствует именам файлов, которые вы не хотите, чтобы он соответствовал.
  • Несжатые исходные файлы данных не должны иметь расширения файла (т.е. "нет" в имени файла) .
  • Сжатые исходные файлы данных должны иметь расширение файла, ноERDDAP™определяет тип сжатия путем проверки содержимого файла, а не путем просмотра расширения файла; (Например, ".Z") . Поддерживаемые типы сжатия включают «gz», «bzip2», «xz», «lzma», «snappy-raw», «snappy-framed», «pack200» и «z». КогдаERDDAP™читает сжатые файлы, декомпрессирует на лету, не записывая на временный файл.
  • Все исходные файлы данных должны использовать исходную систему именования файлов: т.е. YYYYMMDDHH \_4km-пиксель (где YYYYMMDDHH указывает время, связанное с данными в файле) плюс расширение файла, если файл сжат.

Смотрите суперкласс этого класса,EDDGridИз материаловДля получения общей информации о том, как работает этот класс и как его использовать.

Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.  

EDDGridИз NcFiles

EDDGridИз NcFiles агрегированные данные из локальных, сетчатых,GRIB .grb и .grb2файлы,HDF (v4 или v5) .hdfфайлы,.ncмлфайлы,NetCDF (v3 или v4) .ncфайлы, иЗаррфайлы (Версия 2.25) . Файлы Zarr имеют несколько иное поведение и требуют, чтобы файл NameRegex или PathRegex включали «zarr».

Это может работать с другими типами файлов. (Например, BUFR) Мы просто не тестировали его - пожалуйста, отправьте нам несколько образцов файлов.

  • Для файлов GRIB,ERDDAP™Создайте индексный файл .gbx при первом считывании каждого файла GRIB. Таким образом, файлы GRIB должны быть в каталоге, где «пользователь», который запустил Tomcat, имеет разрешение на чтение и запись.
  • Смотрите суперкласс этого класса,EDDGridИз материаловДля получения информации о том, как работает этот класс и как его использовать.
  • Начиная сERDDAP™v2.12,EDDGridИз NcFiles иEDDGridИз NcFiles Неупакованные могут считывать данные из «структур».nc4 и.hdf4 файла. Чтобы определить переменную, которая является структурой,<sourceName> Необходимо использовать формат: Полное название структуры | Имя Например, группа 1/myStruct|Мой член.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Группы в файлах Gridded Nc

Файлы Netcdf4 могут содержать группы. ERDDAP™просто делает набор данных из переменных в одной группе и всех ее родительских групп. Вы можете указать конкретное название группы в GenerateDatasets. Xml (Опустить следящую косу) или использовать «» для генерации наборов данных Xml осуществляет поиск по всем группам переменных, которые используют наибольшие размеры, или использует "\[корень\]"чтобы иметь GenerateDatasets, просто ищите переменные в корневой группе.

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатаете ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

EDDGridИз NcFilesUnpacked

EDDGridИз NcFilesUnpacked является вариантомEDDGridИз NcFilesкоторый собирает данные из локальных, сетчатыхNetCDF (v3 или v4) .ncи связанных с ними файлов. Разница заключается в том, что этот класс распаковывает каждый файл данных до того, как они будут удалены.EDDGridИз материалов просматриваются файлы:

  • Он распаковывает переменные, которые упакованыscale\_factorи/илиadd\_offset.
  • Преобразует \_FillValue иmissing\_valueЦенности, чтобы быть NaN (или MAX\_VALUE для целых типов данных) .
  • Преобразует значения времени и метки времени в"seconds since 1970-01-01T00:00:00Z".

Большим преимуществом этого класса является то, что он обеспечивает способ борьбы с различными ценностями.scale\_factor,add\_offsetПолная стоимость,missing\_valueили единицы времени в различных исходных файлах в коллекции. В противном случае вам придется использовать такой инструмент, какNcMLилиNCOмодифицировать каждый файл, чтобы устранить различия, чтобы файлы могли обрабатыватьсяEDDGridИз NcFiles. Чтобы этот класс работал должным образом, файлы должны соответствовать стандартам CF для соответствующих атрибутов.

  • Если попытаться сделатьEDDGridИз NcFiles Распаковка из группы файлов, с которыми вы ранее пытались и не смогли использоватьEDDGridОт NcFiles до CD BigParent Директория /dataset/ Последние 2 письма / datasetID / где Последние 2 письма Это последние 2 буквыdatasetID, и удалить все файлы в этом каталоге.
  • Начиная сERDDAP™v2.12,EDDGridИз NcFiles иEDDGridИз NcFiles Неупакованные могут считывать данные из «структур».nc4 и.hdf4 файла. Чтобы определить переменную, которая является структурой,<sourceName> Необходимо использовать формат: Полное название структуры | Имя Например, группа 1/myStruct|Мой член.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Файлы Netcdf4 могут содержать группы. Видишь?Эта документация.

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатать ncdump-подобную структуру файла образца. перед Он распакован. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

EDDGridLonPM180

EDDGridLonPM180 Изменение значений долготы ребенка (закрытый) EDDGridнабор данных, который имеет значения долготы более 180 (Например, от 0 до 360) чтобы они находились в диапазоне от -180 до 180 (Долгота плюс или минус 180, отсюда и название) .

  • Это обеспечивает способ сделать наборы данных, которые имеют значения долготы более 180, совместимыми в / сOGCуслуги (Например,WMSсервер вERDDAP) Поскольку всеOGCУслуги требуют значений долготы от -180 до 180.
  • Работа вблизи разрыва вызывает проблемы, независимо от того, находится ли разрыв на долготе 0 или на долготе 180. Этот тип набора данных позволяет избежать этих проблем для всех, предлагая две версии одного набора данных: один со значениями долготы в диапазоне от 0 до 360 ("Тихий океан"?) , один со значениями долготы в диапазоне от -180 до 180 ("Атлантикентрик"?) .
  • Для детских наборов данных со всеми значениями долготы более 180 все новые значения долготы просто на 360 градусов ниже. Например, набор данных со значениями долготы от 180 до 240 станет набором данных со значениями долготы от -180 до -120.
  • Для наборов данных о детях, которые имеют значения долготы для всего мира (приблизительно от 0 до 360) , новое значение долготы будет изменено на (примерно) От 180 до 180: Оригинальные значения от 0 до 180 не изменились. Первоначальные значения 180-360 преобразуются в значения -180-0 и смещаются в начало массива долготы.
  • Для детских наборов данных, которые охватывают 180, но не покрывают земной шар,ERDDAP™вставляет недостающие значения по мере необходимости для создания набора данных, который охватывает весь земной шар. Например, набор данных для детей со значениями долготы от 140 до 200 станет набором данных со значениями долготы от -180 до 180. Значения ребенка от 180 до 200 будут составлять от -180 до -160. Новые значения долготы будут вставляться от 160 до 140. Соответствующие значения данных будут \_FillValues. Значения ребенка от 140 до почти 180 не изменились. Вставка недостающих значений может показаться странной, но она позволяет избежать нескольких проблем, возникающих в результате внезапного скачка значений долготы. (Например, от 160 до 140) .
  • вГенерировать наборы данныхXml, существует специальный «тип набора данных»,EDDGridLonPM180FromErddapCatalog позволяет создаватьdatasets.xmlдляEDDGridНаборы данных LonPM180 от каждогоEDDGridнаборы данных в одномERDDAPкоторые имеют значения долготы более 180. Это позволяет предлагать две версии этих наборов данных: оригинал, с значениями долготы в диапазоне от 0 до 360, и новый набор данных со значениями долготы в диапазоне от -180 до 180.

Набор данных о ребенке в каждомEDDGridLonPM180 будет представлять собойEDDGridИз набора данных Erddap, который указывает на исходный набор данных. Новый набор данныхdatasetIDЭто будет имя оригинального набора данных плюс "\_LonPM180". Например,

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

Положи.EDDGridНабор данных LONPM180 ниже Первоначальный набор данных вdatasets.xml. Это позволяет избежать некоторых возможных проблем.

В качестве альтернативы вы можете заменитьEDDGridFromErddap Child Dataset с оригинальным набором данныхdatasets.xml. Тогда будет только одна версия набора данных: с значениями долготы в пределах от -180 до 180. Мы не рекомендуем это делать, потому что есть моменты, когда каждая версия набора данных более удобна.

  • Если вы предлагаете две версии набора данных, например, одну с долготой от 0 до 360 и одну с долготой от 180 до 180:
    • Вы можете использовать опцию [<доступный ВиаWMSЛожь</Доступный ВиаWMS> (#доступные водоросли) с набором данных 0-360 для принудительного отключенияWMSСервис для этого набора данных. Только версия набора данных LonPM180 будет доступна черезWMS.
    • Существует несколько способов обновления набора данных LonPM180 с изменениями базового набора данных:
      • Если данные ребенка являютсяEDDGridИз набора данных Erddap, который ссылается на набор данных в том жеERDDAP™Набор данных LonPM180 будет пытаться напрямую подписаться на базовый набор данных, чтобы он всегда был обновлен. Прямые подписки не генерируют электронные письма с просьбой подтвердить подписку - проверка должна проводиться автоматически.
      • Если данные ребенка не являютсяEDDGridИз набора данных Erddap, который находится на том жеERDDAP™Набор данных LonPM180 будет пытаться использовать обычную систему подписки для подписки на базовый набор данных. Если у вас есть система подпискиERDDAP™Включившись, вы должны получить электронные письма с просьбой подтвердить подписку. Пожалуйста, сделай это.
      • Если у вас есть система подпискиERDDAP™Отключенный набор данных LonPM180 может иногда иметь устаревшие метаданные до перезагрузки набора данных LonPM180. Поэтому, если система подписки отключена, вы должны установить [...]<перезаряжать EveryNMinutes > (#reloadeverynminutes) Настройка набора данных LonPM180 на меньшее число, так что он с большей вероятностью быстрее улавливает изменения в наборе данных ребенка.

EDDGridСкелет 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 Изменение значений долготы ребенка (закрытый) EDDGridнабор данных, который имеет значения долготы менее 0 (Например, от 180 до 180) чтобы они находились в диапазоне от 0 до 360 (Отсюда и название) .

  • Работа вблизи разрыва вызывает проблемы, независимо от того, находится ли разрыв на долготе 0 или на долготе 180. Этот тип набора данных позволяет избежать этих проблем для всех, предлагая две версии одного набора данных: один со значениями долготы в диапазоне от -180 до 180 ("Атлантикентрик"?) . один со значениями долготы в диапазоне от 0 до 360 ("Тихий океан"?) ,
  • Для детских наборов данных со всеми значениями долготы менее 0 все новые значения долготы просто на 360 градусов выше. Например, набор данных со значениями долготы от -180 до -120 станет набором данных со значениями долготы от 180 до 240.
  • Для наборов данных о детях, которые имеют значения долготы для всего мира (приблизительно от 180 до 180) , новое значение долготы будет изменено на (примерно) От 0 до 360: Оригинальные значения от -180 до 0 преобразуются в 180 до 360 и смещаются в конец массива долготы. Оригинальные значения от 0 до 180 не изменились.
  • Для детских наборов данных, которые охватывают lon=0, но не покрывают земной шар.ERDDAP™вставляет недостающие значения по мере необходимости для создания набора данных, который охватывает весь земной шар. Например, набор данных для детей со значениями долготы от -40 до 20 станет набором данных со значениями долготы от 0 до 360. Значения детей от 0 до 20 будут неизменными. Новые значения долготы будут вставляться от 20 до 320. Соответствующие значения данных будут \_FillValues. Значения ребенка от -40 до 0 станут от 320 до 360. Вставка недостающих значений может показаться странной, но она позволяет избежать нескольких проблем, возникающих в результате внезапного скачка значений долготы. (Например, от 20 до 320) .
  • вГенерировать наборы данныхXml, существует специальный «тип набора данных»,EDDGridLon0360 From ErddapCatalog позволяет генерироватьdatasets.xmlдляEDDGridНаборы данных Lon0360 от каждогоEDDGridнаборы данных в одномERDDAPкоторые имеют значения долготы более 180. Это позволяет предлагать две версии этих наборов данных: оригинал, с значениями долготы в диапазоне от 0 до 360, и новый набор данных со значениями долготы в диапазоне от -180 до 180.

Набор данных о ребенке в каждомEDDGridLon0360 будет представлять собойEDDGridИз набора данных Erddap, который указывает на исходный набор данных. Новый набор данныхdatasetIDЭто будет название оригинального набора данных плюс "\_Lon0360". Например,

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

Положи.EDDGridНабор данных LON0360 ниже Первоначальный набор данных вdatasets.xml. Это позволяет избежать некоторых возможных проблем.

В качестве альтернативы вы можете заменитьEDDGridFromErddap Child Dataset с оригинальным набором данныхdatasets.xml. Тогда будет только одна версия набора данных: с значениями долготы в пределах от 0 до 360. Мы не рекомендуем это делать, потому что есть моменты, когда каждая версия набора данных более удобна.

  • Если вы предлагаете две версии набора данных, например, одну с долготой от 0 до 360 и одну с долготой от 180 до 180:
    • Вы можете использовать опцию [<доступный ВиаWMSЛожь</Доступный ВиаWMS> (#доступные водоросли) с набором данных от 0 до 360 для принудительного отключенияWMSСервис для этого набора данных. Тогда только версия набора данных от 180 до 180 будет доступна черезWMS.
    • Существует несколько способов обновления набора данных Lon0360 с изменениями базового набора данных:
      • Если данные ребенка являютсяEDDGridИз набора данных Erddap, который ссылается на набор данных в том жеERDDAP™Набор данных Lon0360 будет пытаться напрямую подписаться на базовый набор данных, чтобы он всегда был обновлен. Прямые подписки не генерируют электронные письма с просьбой подтвердить подписку - проверка должна проводиться автоматически.
      • Если данные ребенка не являютсяEDDGridИз набора данных Erddap, который находится на том жеERDDAP™Набор данных Lon0360 будет пытаться использовать обычную систему подписки для подписки на базовый набор данных. Если у вас есть система подпискиERDDAP™Включившись, вы должны получить электронные письма с просьбой подтвердить подписку. Пожалуйста, сделай это.
      • Если у вас есть система подпискиERDDAP™Отключенный набор данных Lon0360 может иногда иметь устаревшие метаданные до перезагрузки набора данных Lon0360. Поэтому, если система подписки отключена, вы должны установить [...]<перезаряжать EveryNMinutes > (#reloadeverynminutes) Настройка набора данных Lon0360 на меньшее число, так что он с большей вероятностью быстрее улавливает изменения в наборе данных ребенка.

EDDGridСкелет 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 агрегаты два или болееEDDGridнаборы данных (дети) бок о бок.

  • Полученный набор данных имеет все переменные из всех наборов данных ребенка.
  • Родительский набор данных и все детские наборы данных должны быть разными.datasetIDС. Если какие-либо имена в семье одинаковы, набор данных не будет загружаться. (с сообщением об ошибке, что значения агрегированной оси не сортируются) .
  • Все дети должны иметь одинаковые исходные значения.axisVariables\[1+\] (Например, широта, долгота) . Точность испытаний определяетсяОбсуждение AxisNDigits.
  • Дети могут иметь различные исходные значения дляaxisVariables\[0\] (Например, время) Но они, как правило, в основном одинаковы.
  • Родительский набор данных будет иметь всеaxisVariables\[0\]Источник ценностей всех детей.
  • Например, это позволяет комбинировать исходный набор данных с векторным u-компонентом и другой исходный набор данных с векторным v-компонентом, так что объединенные данные могут обслуживаться.
  • Дети, созданные таким способом, содержатся в частном порядке. Они не являются отдельно доступными наборами данных. (Например, по запросам клиентских данных илиФлаговые файлы) .
  • Глобальные метаданные и настройки для родителя исходят из глобальных метаданных и настроек для первого ребенка.
  • Если есть исключение при создании первого ребенка, то родитель не будет создан.
  • Если есть исключение при создании других детей, это отправляет электронное письмо на электронную почту. (как указано вНастройка.xml) И продолжается с другими детьми.

EDDGridСкелет SideBySide XML

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

EDDGridСовокупность существующих измерений

EDDGridСовокупность существующих измерений агрегаты два или болееEDDGridнаборы данных, каждый из которых имеет различный диапазон значений для первого измерения, но идентичные значения для других измерений.

  • Например, один набор данных может иметь 366 значений. (за 2004 год) Для измерения времени и другого ребенка может быть 365 значений. (на 2005 год) Для измерения времени.
  • Все значения для всех других измерений (Например, широта, долгота) Они должны быть одинаковыми для всех детей. Точность испытаний определяетсяОбсуждение AxisNDigits.
  • Сортированные значения измерения - Значения для каждого измерения должны быть сортированы по порядку. (восходящий или нисходящий) . Значения могут быть нерегулярно разнесены. Никаких связей быть не может. Это является требованием кСтандарт метаданных CF. Если значения любого измерения не сортированы, набор данных не будет загружен иERDDAP™идентифицирует первое несортированное значение в файле журнала, BigParent Директория /logs/log.txt.

Несортированные значения размерности почти всегда указывают на проблему с исходным набором данных. Чаще всего это происходит, когда в агрегацию включается неправильно названный или неподходящий файл, что приводит к несортированному измерению времени. Чтобы решить эту проблему, см. сообщение об ошибке вERDDAP™log.txt файл, чтобы найти значение времени. Затем посмотрите в исходных файлах, чтобы найти соответствующий файл. (либо до, либо после) Это не входит в агрегацию.

  • Родительский набор данных и детский набор данных должны отличаться друг от друга.datasetIDС. Если какие-либо имена в семье одинаковы, набор данных не будет загружаться. (с сообщением об ошибке, что значения агрегированной оси не сортируются) .
  • В настоящее время набор данных ребенка должен бытьEDDGridНабор данных FromDap и MUST имеют самые низкие значения агрегированного измерения (Как правило, самые старые временные значения) . Все остальные дети должны быть практически одинаковыми. (Разница только в значениях для первого измерения) и определяется только ихsourceUrl.
  • Совокупный набор данных получает метаданные от первого ребенка.
  • TheГенерировать наборы данных Программа XmlМожно составить приблизительный проектdatasets.xmlдля одногоEDDGridAggregateExistingDimension основан на наборе файлов, обслуживаемыхHyraxСервер THREDDS. Например, используйте этот вход для программы. («/1988» в URL-адресе заставляет пример работать быстрее) :
      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

Вы можете использовать полученный<sourceUrl> теги или удалить их и откомментировать<sourceUrlТег > (чтобы новые файлы были замечены каждый раз, когда набор данных перезагружается).

EDDGridСовокупный существующий скелет 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>

EDDGridКопия

EDDGridКопия создает и поддерживает локальную копию другогоEDDGridданные и обслуживает данные из локальной копии.

  • EDDGridКопия (и для табличных данных,EDDTableCopy) Это очень простой в использовании и очень эффективный Решение некоторых из самых больших проблем с обслуживанием данных из удаленного источника данных:
    • Доступ к данным из удаленного источника данных может быть медленным.
      • Он может быть медленным, потому что он по своей природе медленный. (Неэффективный тип сервера) ,
      • Потому что он перегружен слишком большим количеством запросов,
      • или потому, что ваш сервер или удаленный сервер ограничен по пропускной способности.
    • Удаленный набор данных иногда недоступен. (Опять же, по разным причинам) .
    • Полагаясь на один источник для данных не масштабируется хорошо (Например, когда многие пользователиERDDAPиспользовать его) .  
  • Как это работает -EDDGridКопирование решает эти проблемы, автоматически создавая и поддерживая локальную копию данных и обслуживая данные из локальной копии.ERDDAP™Данные из локальной копии можно передавать очень быстро. А создание локальной копии снимает нагрузку на удаленный сервер. А локальная копия - это резервная копия оригинала, которая полезна в случае, если с оригиналом что-то случится.

Нет ничего нового в создании локальной копии набора данных. Что нового в этом классе, так это то, что он\*легко\*создавать и\*поддерживать\*локальная копия данных из\*разнообразие\*Типы удаленных источников данных и\*Добавить метаданные\*При копировании данных.

  • Частицы данных -EDDGridКопия делает локальную копию данных, запрашивая куски данных с пульта<Dataset>. Для каждой величины самого левого будет кусочек. (первый) переменной оси.EDDGridКопирование не зависит от индексов удаленного набора данных для оси - они могут меняться.

Предупреждение: если размер куска данных настолько велик (> 2 ГБ) что это вызывает проблемы,EDDGridКопию нельзя использовать. (К сожалению, мы надеемся найти решение этой проблемы в будущем.)

  • \[Альтернативой дляEDDGridКопировать - Если удаленные данные доступны через загружаемые файлы, а не через веб-сервис, используйтекэш Опция FromUrl дляEDDGridИз материалов, который делает локальную копию удаленных файлов и обслуживает данные из локальных файлов.\]
  • Локальные файлы - Каждая часть данных хранится в отдельномNetCDFФайл в подкаталоге BigParent Директория /копия/ datasetID / (как указано вНастройка.xml) . Имена файлов, созданные из значений оси, изменяются, чтобы сделать их безопасными для имени файла (Например, дефисы заменяются на «x2D».) - это не влияет на реальные данные.  
  • Новые данные - Каждый разEDDGridКопия перезагружается, она проверяет пульт<Набор данных, чтобы увидеть, какие куски доступны. Если файл для части данных еще не существует, запрос на получение части добавляется в очередь.ERDDAPЗадача Thread обрабатывает все поставленные в очередь запросы на фрагменты данных один за другим. Вы можете увидеть статистику для задачиThread активности наСтраница статусаи в том,Ежедневный отчет. (Да,ERDDAP™Он может назначать несколько задач для этого процесса, но это будет использовать большую часть пропускной способности удаленного источника данных, памяти и времени процессора, а также большую часть локального.ERDDAPпропускная способность, память и время процессора, ни одна из которых не является хорошей идеей.)

Примечание: В первый разEDDGridКопия загружена, (Если все будет хорошо) В очередь Thread будет добавлено много запросов на фрагменты данных, но локальные файлы данных не будут созданы. Таким образом, конструктор потерпит неудачу, но taskThread продолжит работать и создавать локальные файлы. Если все пойдет хорошо, задача Thread сделает некоторые локальные файлы данных и следующую попытку перезагрузить набор данных. (За 15 минут) Успешно, но изначально с очень ограниченным объемом данных.

ПРИМЕЧАНИЕ: После того, как локальный набор данных содержит некоторые данные и появляется в вашемERDDAPЕсли удаленный набор данных временно или постоянно недоступен, локальный набор данных все равно будет работать.

Предупреждение: если удаленный набор данных большой и/или удаленный сервер медленный (В этом проблема, не так ли?!) Это займет много времени, чтобы сделать полную копию. В некоторых случаях необходимое время будет неприемлемым. Например, передача 1 ТБ данных по линии T1. (0,15 ГБ/с) Это займет не менее 60 дней при оптимальных условиях. Кроме того, он использует большую пропускную способность, память и время процессора на удаленных и локальных компьютерах. Решение состоит в том, чтобы отправить жесткий диск администратору удаленного набора данных, чтобы он мог сделать копию набора данных и отправить жесткий диск обратно вам. использовать эти данные в качестве отправной точки иEDDGridКопия добавит к ней данные. (Это один из способов, которымОблачный сервис Amazon EC2Они справляются с проблемой, хотя их система имеет большую пропускную способность.)

Предупреждение: если заданное значение для самого левого (первый) переменная оси исчезает из удаленного набора данных;EDDGridКопия не удаляет локальный скопированный файл. Если вы хотите, вы можете удалить его самостоятельно.

Grid Copy Check Источник Данные

Thedatasets.xmlдля этого набора данных может иметь дополнительный тег

    <checkSourceData>true</checkSourceData>  

Значение по умолчанию верно. Если / когда вы установите его ложным, набор данных никогда не проверит исходный набор данных, чтобы увидеть, есть ли дополнительные данные.

только с тех пор

Вы можете сказатьEDDGridКопия для создания копии подмножества набора исходных данных вместо всего набора исходных данных путем добавления тега в виде<только с момента некоторые ценность </onlySince> для набора данныхdatasets.xmlкусок.EDDGridКопия будет загружать только значения данных, связанные со значениями первого измерения. (Как правило, временное измерение) которые больше, чем некоторые ценность . некоторые ценность могут быть:

  • Относительное время, указанное черезnow- единицы . Например,<только с моментаnow-2 года</onlySince> сообщает набору данных делать только локальные копии данных для данных, где значения внешнего измерения (Обычно временные значения) в течение последних 2 лет (который переоценивается каждый раз при перезагрузке набора данных, когда он ищет новые данные для копирования) . Видишь?now- единицы описание синтаксиса. Это полезно, если первое измерение имеет временные данные, что обычно и происходит.

    EDDGridКопирование не удаляет локальные файлы данных, которые со временем становятся старше.now- единицы . Вы можете удалить эти файлы в любое время, если захотите. Если вы это сделаете, мы настоятельно рекомендуем вам установитьфлагПосле удаления файлов, чтобы сообщитьEDDGridКопии для обновления списка кэшированных файлов.

  • Фиксированная точка времени, указанная как строка ISO 8601yyyy-MM-ddTHH:mm:ssZ. Например,<Только с>2000-01-01T00:00:00Z</onlySince> сообщает набор данных только для создания локальных копий данных, где значение первого измерения \>=2000-01-01T00:00:00Z . Это полезно, если первое измерение имеет временные данные, что обычно и происходит.  

  • Номер с плавающей точкой. Например,<только с>946684800.0</только с момента. Единицы будут единицами назначения первого измерения. Например, для измерения времени единицы вERDDAP™всегда"seconds since 1970-01-01T00:00:00Z". Итак, 946684800.0"seconds since 1970-01-01T00:00:00Z"эквивалентен 2000-01-01T00:00:00Z. Это всегда полезный вариант, но особенно полезно, когда в первом измерении нет данных о времени.

EDDGridCopy Рекомендуемое использование

  1. создавать<набор данных вход (Родной тип, неEDDGridКопия) для удаленного источника данных. Заставьте его работать правильно, включая все необходимые метаданные.
  2. Если это слишком медленно, добавьте XML-код, чтобы обернуть его вEDDGridКопии данных.
    • Используйте другойdatasetID (Возможно, изменяяdatasetIDстарогоdatasetIDслегка) .
    • Копировать<доступный К>,<перезагрузить EveryNMinutes и<OnChange> из удаленногоEDDGridXML для этогоEDDGridКопии XML. (Их ценности дляEDDGridКопирование материи; их значения для внутреннего набора данных становятся неактуальными.)
  3. ERDDAP™будет создавать и поддерживать локальную копию данных.  
  • Предупреждение:EDDGridКопирование предполагает, что значения данных для каждого фрагмента никогда не меняются. Если / когда они это делают, вам нужно вручную удалить файлы в BigParent Директория /копия/ datasetID которые изменились ифлагнабор данных, подлежащий перезагрузке, чтобы удаленные фрагменты были заменены. Если у вас есть подписка на электронную почту, вы получите два письма: одно, когда набор данных сначала перезагружается и начинает копировать данные, а другое, когда набор данных снова загружается. (автоматически) и обнаруживает новые локальные файлы данных.  
  • Все значения оси должны быть равными. Для каждой из осей, кроме самой левой (первый) Все ценности должны быть равны для всех детей. Точность испытаний определяетсяОбсуждение AxisNDigits.  
  • Настройки, метаданные, переменные -EDDGridКопия использует настройки, метаданные и переменные из прилагаемого набора исходных данных.  
  • Изменение метаданных - Если вам нужно изменить любойaddAttributesили изменить порядок переменных, связанных с исходным набором данных:
    1. ИзменитьaddAttributesДля исходных данных вdatasets.xmlПо мере необходимости.
    2. Удалить один из скопированных файлов.
    3. Установитьфлагнемедленно перезагрузить набор данных. Если вы используете флаг и у вас есть подписка на электронную почту, вы получите два письма: одно, когда набор данных сначала перезагружается и начинает копировать данные, а другое, когда набор данных снова загружается. (автоматически) и обнаруживает новые локальные файлы данных.
    4. Удаленный файл будет восстановлен с новыми метаданными. Если источник данных когда-либо недоступен,EDDGridНабор копий данных будет получать метаданные из восстановленного файла, так как это самый молодой файл.

EDDGridКопия скелета XML

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

EDDTable From Кассандра

EDDTable From Кассандра обрабатывать данные от одногоКассандрастолик. Cassandra является базой данных NoSQL.

  • ERDDAP™Может работать с Cassandra v2 и v3 без изменений или различий в настройке. Мы проверили сКассандра v2 и v3 из Апач. Вполне вероятно, чтоERDDAP™Также можно работать с Кассандрой, загруженной из DataStax.  
  • На август 2019 - май 2021 года у нас были проблемы с тем, чтобы заставить Кассандру работать с AdoptOpenJdk.Javav8. Это привело к EXCEPTION\_ACCESS\_VIOLATION. Но теперь (май 2021 года) Эта проблема исчезла: мы можем успешно использовать Cassandra v2.1.22 и AdoptOpenJdk jdk8u292-b10.  

Один столик

Кассандра не поддерживает «соединений» в реляционных базах данных. ОдинERDDAP™EDDTableFromCassandra dataset maps to one (Возможно, подмножество одного) Стол Кассандра.

Кассандраdatasets.xml

  • ERDDAP™Приходит с КассандройJavaВодитель, так что вам не нужно устанавливать его отдельно.
  • Внимательно прочитайте всю информацию этого документа о EDDTable FromCassandra. Некоторые детали очень важны.
  • КассандраJavaВодитель будет работать с Apache Cassandra (1.2+) Компания DataStax Enterprise (3.1+) . Если вы используете Apache Cassandra 1.2.x, вы должны отредактировать файл cassandra.yaml для каждого узла, чтобы установить start\_native\_transport: true, затем перезагрузить каждый узел.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Вы можете отредактировать это, чтобы настроить его (особенно).<раздел Ключевые имена источников (#partitionkeysourcenames) ). Вы можете собрать большую часть информации, необходимой для создания XML для набора данных EDDTableFromCassandra, связавшись с администратором Cassandra и выполнив поиск в Интернете.

Генерировать наборы данных Xml имеет два специальных варианта для EDDTable FromCassandra:

  1. Если вы войдете в «!!!ПИСАТЬ!!!» (Без цитат) Для ключевого пространства программа покажет список ключевых пространств.
  2. Если вы войдете в определенное ключевое пространство, а затем введите «!!!СТАТЬ!!!» (Без цитат) Для имени таблицы программа будет отображать список таблиц в этом ключевом пространстве и их столбцы.
Чувствительность
  • Случайно-нечувствительные Keyspace и Table Names Кассандра относится к именам ключевых пространств и столов нечувствительным образом. Из-за этого вы никогда не должны использовать зарезервированное слово. (Но в другом случае) Ключевое пространство Кассандры или название стола.
  • Нечувствительные к делу названия колонн - По умолчанию Кассандра рассматривает имена колонок нечувствительным образом. Если вы используете одно из зарезервированных слов Кассандры в качестве названия колонки (Пожалуйста, не надо!) Вы должны использовать
        <columnNameQuotes>"<columnNameQuotes>  

вdatasets.xmlДля этого набора данных, чтобы Кассандра иERDDAP™Мы будем рассматривать названия колонок чувствительным к делу способом. Это, вероятно, будет огромной головной болью для вас, потому что трудно определить чувствительные к случаю версии названий колонок - Кассандра почти всегда отображает имена колонок как все нижние регистры, независимо от истинного случая.

  • Работайте в тесном контакте с администратором Cassandra, который может иметь соответствующий опыт. Если набор данных не загружается, прочитайтесообщение об ошибкеВнимательно выяснить, почему.  

Кассандра<соединение Недвижимость>

Кассандра обладает свойствами соединения, которые могут быть указаны вdatasets.xml. Многие из них повлияют на производительность Кассандры.ERDDAP™связь. К сожалению, свойства Кассандры должны быть установлены программно.JavaТакERDDAP™должен иметь код для каждой собственностиERDDAP™Поддержка. В настоящее времяERDDAP™Поддерживает эти свойства: (Дефолты — это то, что мы видим. По умолчанию ваша система может быть разной.)

  • Общие варианты
    <соединение Имя собственности = сжатие " ни одного|LZ4|быстрый </подключение Собственность (нечувствительный к случаю, default=none)
    (Общий совет по компрессии: не используйте «ничего», если связь между КассандройERDDAP™- локальный/быстрый и используйте LZ4, если соединение удаленное/медленное.)
    <соединение Имя собственности = полномочия " имя пользователя/пароль </подключение Собственность (Это буквально'/')
    <соединение Имя собственности = метрики " истинный|ложный </подключение Собственность (2021-01-25 был по умолчанию = правда, теперь игнорируется и всегда ложно)
    <соединение Имя собственности = порт " целое число </подключение Собственность (Нативный двоичный протокол = 9042)
    <соединение Имя собственности = ssl " истинный|ложный </подключение Собственность (Ложный = False)
    (Моя быстрая попытка использовать ssl провалилась. Если у вас все получится, расскажите, пожалуйста, как вы это сделали.)
  • Поиск вариантов
    <соединение Имя собственности = согласованность Уровень " все|любой|каждый _quorum|локальный|Местный _quorum|Местный_серийный|один|кворум|серийный|три|два </подключение Собственность (нечувствительный к случаю, по умолчанию = ONE)
    <соединение Имя собственности = размер " целое число </подключение Собственность (Дефолт = 5000)
    (Не устанавливайте fetchSize на меньшую величину.)
    <соединение Имя собственности = последовательный уровень согласованности " все|любой|каждый _quorum|локальный|Местный _quorum|Местный_серийный|один|кворум|серийный|три|два </подключение Собственность (нечувствительный к случаю, дефолт = SERIAL)
  • Сокетные опции
    <соединение Имя собственности = ConnectTimeoutMillis " целое число </подключение Собственность (Дефолт = 5000)
    (Не устанавливайте соединение TimeoutMillis имеет меньшую стоимость.)
    <соединение Имя собственности = Живой " истинный|ложный </подключение Собственность <соединение Имя собственности = ReadTimeoutMillis " целое число </подключение Собственность (По умолчанию Cassandra ReadTimeoutMillis составляет 12000.ERDDAP™Изменение по умолчанию до 120000. Если Кассандра бросает readTimeouts, увеличение этого может не помочь, потому что Кассандра иногда бросает их раньше этого времени. Проблема в том, что вы храните слишком много данных на раздел. Ключевая комбинация.)
    <соединение Имя собственности = размер буфера " целое число </подключение Собственность (Неясно, что такое по умолчанию приемный размер. Не устанавливайте это на небольшое значение.)
    <соединение Имя собственности = солингер " целое число </подключение Собственность <соединение Имя собственности = tcpNoDelay " истинный|ложный </подключение Собственность (дефолт = нуль)

Если вам нужно установить другие свойства соединения, см.Раздел о дополнительной поддержке.

Для данного стартапа Tomcat свойства соединения используются только при первом создании набора данных для данного URL-адреса Cassandra. Все перезагрузки этого набора данных и всех последующих наборов данных, которые имеют один и тот же URL, будут использовать эти исходные свойства соединения.

CQL

Язык запросов Кассандра (CQL) Поверхностно похож на SQL, язык запросов, используемый в традиционных базах данных. Потому чтоOPeNDAPЗапросы табличных данных были разработаны для имитации запросов табличных данных SQL, это возможно дляERDDAP™Преобразовать запросы табличных данных в CQL Bound/PreparedStatements.ERDDAP™Запись заявления вlog.txtкак Заявление в виде текста: ЗаявлениеТекст
Версия заявления, которую вы видите, будет текстовым представлением заявления и будет иметь только «?», где будут размещены значения ограничения.  
Не так просто... К сожалению, CQL имеет много ограничений на то, какие столбцы могут быть запрошены, с какими типами ограничений, например, столбцы ключа раздела могут быть ограничены с = и IN.ERDDAP™Отправляет некоторые ограничения Кассандре и применяет все ограничения после получения данных от Кассандры. Чтобы помочьERDDAP™Эффективно работайте с Кассандрой, вам нужно указать [<раздел Ключевые имена источников (#partitionkeysourcenames) [<clusterColumnSourceNames> (#clustercolumnsourcenames) и [<indexColumnSourceNames> (#indexcolumnsourcenames) вdatasets.xmlДля этого набора данных. Это самые важные способы помочьERDDAP™Эффективная работа с Кассандрой. Если ты не скажешьERDDAP™Эта информация, набор данных будет болезненно медленным.ERDDAP™Используйте тонны ресурсов Кассандры.  

<раздел KeySourceNames>

Поскольку ключи раздела играют центральную роль в таблицах Кассандры,ERDDAP™Необходимо знать ихsourceNames и, при необходимости, другая информация о том, как с ними работать.

  • Вы ДОЛЖНЫ указать раздельный список имен источников ключей раздела вdatasets.xmlчерез<раздел Ключевые имена источников. Простой пример,
        <partitionKeySourceNames>station, deviceid<partitionKeySourceNames>  

Более сложный пример,

        <partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
  • TimeStamp Partition Keys - ключи раздела Если один из столбцов ключа раздела представляет собой столбец метки времени, который имеет более грубую версию другого столбца метки времени, укажите это через Разработчик: KeySourcName/otherColumnSourceNametime\_precision
    гдеtime\_precisionявляется одним изtime\_precisionСтруны, используемые в других местахERDDAP. The Trailing Z в оригиналеtime\_precisionстрока является по умолчанию, поэтому не имеет значения, является лиtime\_precisionСтрока заканчивается на Z или нет. Например,ERDDAP™будет интерпретировать дату/образец времени/1970-01-01 как "Ограничения по срокам могут быть установлены на основе ограничений по времени отбора проб с использованием этого метода.time\_precision" Фактическое преобразование ограничений является более сложным, но это общий обзор. Используйте это, когда это уместно. Это позволяетERDDAP™Эффективно работать с Кассандрой. Если эта связь между столбцами существует в таблице Кассандры, и вы не говоритеERDDAP™Набор данных будет болезненно медленнымERDDAP™Используйте тонны ресурсов Кассандры.
  • сингл Ключи раздела ценностей - Если вы хотите AnERDDAP™набор данных для работы только с одним значением одного ключа раздела, указать Раздел KeySourceName = значение . Не используйте цитаты для числового столбца, например, deviceid=1007 Используйте цитаты для столбца строки, например, stationid = "Point Pinos"
  • Dataset Default-Sорт-ордер Порядок ключа раздела<dataVariable"Внутри"datasets.xmlопределяет порядок сортировки результатов по умолчанию от Кассандры. Конечно, пользователи могут запросить другой порядок сортировки для данного набора результатов, приложивorderBy (" разделенный на запятые список переменных ") до конца своего запроса.
  • По умолчанию Кассандра иERDDAP™обращаться с названиями колонок бесчувственным образом. Но если вы установитеОбсуждение NameQuotesна ",ERDDAP™будет относиться к названиям колонок Кассандры в индивидуальном порядке.  

<раздел KeyCSV>

Если это указано,ERDDAP™Он будет использовать его вместо того, чтобы просить Кассандру о разделе. Ключевая информация каждый раз при перезагрузке набора данных. Это дает список различных значений ключа раздела, в том порядке, в котором они будут использоваться. Время должно быть указано как секунды с 197001-01T00:00:00Z. Но есть также два специальных альтернативных способа указать время. (Каждый кодируется как строка) :

  1. время (AISO8601 Время) (Может быть закодирована как строка)
  2. "время (anISO8601StartTime, strideSeconds, stopTime) " (должны быть закодированы как строка)
    останавливаться Время может быть ISO8601 Время или "now-Время суток (например, "now-3 минуты") . останавливаться Время не должно быть точным совпадением начала. Время + x шагов. Строка со временем () значение расширяется на несколько строк перед каждым запросом, поэтому список разделов Ключи всегда могут быть идеально актуальными. Например,
    <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>

Расширяет эту таблицу комбинаций ключей раздела:

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

<clusterColumnSourceNames>

Кассандра принимает SQL-подобные ограничения на кластерные столбцы, которые образуют вторую часть первичного ключа. (после ключа раздела (s) ) . Поэтому важно, чтобы вы определили эти столбцы через<clusterColumnSourceNames. Это позволяетERDDAP™Эффективно работать с Кассандрой. Если есть столбцы кластера и вы не говоритеERDDAPНабор данных будет болезненно медленнымERDDAP™Используйте тонны ресурсов Кассандры.

  • Например,<clusterColumnSourceNames myClusterColumn1, myClusterColumn2 </clusterColumnИсточники
  • Если таблица Кассандры не имеет кластерных столбцов, не укажите<clusterColumnSourceNames> или указать его без значения.
  • По умолчанию Кассандра иERDDAP™обращаться с названиями колонок бесчувственным образом. Но если вы установитеОбсуждение NameQuotesна ",ERDDAP™Мы будем относиться к названиям колонок Кассандра деликатным образом.  

<indexColumnSourceNames>

Кассандра принимает'='ограничения на столбцы вторичных индексов, которые являются столбцами, для которых вы явно создали индексы.

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

(Да, скобки необходимы.)
Поэтому очень полезно, если вы идентифицируете эти столбцы через<IndexColumnSourceNames. Это позволяетERDDAP™Эффективно работать с Кассандрой. Если есть индексные столбцы и вы не знаетеERDDAPНекоторые запросы будут ненужными, болезненно медленными.ERDDAP™Используйте тонны ресурсов Кассандры.

  • Например,<IndexColumnSourceNames myIndexColumn1, myIndexColumn2 </indexColumnИмена источников
  • Если таблица Кассандры не имеет индексных столбцов, не указывайте<indexColumnSourceNames> или указать его без значения.
  • Предупреждение: индексы Кассандры не похожи на индексы баз данных. Индексы Кассандры помогают'='ограничения. И они толькорекомендованныйдля столбцов, которые имеют гораздо меньше различных значений, чем общие значения.
  • По умолчанию Кассандра иERDDAP™обращаться с названиями колонок бесчувственным образом. Но если вы установитеОбсуждение NameQuotesна ",ERDDAP™Мы будем относиться к названиям колонок Кассандра деликатным образом.  

<maxRequestFraction>

КогдаERDDAP™ (повторять) загружает набор данных,ERDDAP™Получает от Кассандры список различных комбинаций ключей раздела. Для огромного набора данных количество комбинаций будет огромным. Если вы хотите запретить пользователям запрашивать большую часть или весь набор данных (или запрос, который требуетERDDAP™загружать большую часть или все данные для дальнейшей фильтрации;) Вы можете сказатьERDDAP™разрешать запросы, которые уменьшают количество комбинаций на некоторое количество<maxRequestFraction> - число с плавающей точкой между 1e-10 (Это означает, что для запроса не может потребоваться более 1 комбинации в миллиарде.) и 1 (по умолчанию, что означает, что запрос может быть для всего набора данных) . Например, если набор данных имеет 10000 различных комбинаций ключей раздела и maxRequestFraction установлен на 0,1, Затем запросы, которые требуют данных из 1001 или более комбинаций, будут генерировать сообщение об ошибке. Запросы, требующие данных из 1000 или менее комбинаций, будут разрешены.

Как правило, чем больше набор данных, тем ниже вы должны установить<maxRequestFraction. Таким образом, вы можете установить его на 1 для небольшого набора данных, 0,1 для среднего набора данных, 0,01 для большого набора данных и 0,0001 для огромного набора данных.

Такой подход далек от совершенства. Это приведет к тому, что некоторые разумные запросы будут отклонены, а некоторые слишком большие запросы будут разрешены. Но это сложная проблема, и это решение намного лучше, чем ничего.

КассандраsubsetVariables

Как и в других наборах данных EDDTable, вы можете указать список, разделенный запятой.<dataVariable>destinationNames в глобальном атрибуте под названием "subsetVariables"для идентификации переменных, имеющих ограниченное число значений. Затем набор данных будет иметь веб-страницу .subset и показывать списки различных значений для этих переменных в выпадающих списках на многих веб-страницах.

Включая только переменные ключа раздела и статические столбцы в списке STRONGLY ENCOУраган. Cassandra сможет генерировать список различных комбинаций очень быстро и легко при каждой перезагрузке набора данных. Одним из исключений являются клавиши разделов с временными метками, которые являются грубыми версиями некоторых других столбцов с временными метками - вероятно, лучше оставить их в списке.subsetVariablesПоскольку существует большое количество значений, они не очень полезны для пользователей.

Если вы включите в список нестатические переменные, то это будет очень вычислительно дорого для Кассандры каждый раз, когда набор данных перезагружается, потому чтоERDDAP™Нужно просмотреть каждый ряд набора данных, чтобы получить информацию. На самом деле, запрос, скорее всего, провалится. Так что, за исключением очень маленьких наборов данных, это очень опасно.

Кассандра DataTypes

Потому что есть некоторая двусмысленность в том, чтоТипы данных КассандрыКарта, на которойERDDAP™Типы данных, необходимо указать [<DataType> (#тип данных) Для каждого из них [<dataVariable> (#datavariable) рассказыватьERDDAP™Какой тип данных использовать. СтандартERDDAP™данные Типы (и наиболее распространенные соответствующие типы данных Cassandra) это:

  • булевый (булевый) которыйERDDAP™как хранить байты
  • байт (Int, если диапазон от -128 до 127)
  • короткий (int, если диапазон составляет от -32768 до 32767)
  • инт (int, counter?, varint?, если диапазон составляет -2147483648 - 2147483647)
  • длинный (Bigint, counter?, varint?, если диапазон составляет -9223372036854775808 до 9223372036854775807)
  • плавать (плавать)
  • двойной (двойной, десятичный (с возможной потерей точности) метка времени)
  • шар (асци или текст, если они никогда не имеют более 1 символа)
  • Струна (acii, text, varchar, inet, uuid, timeuuid, blob, map, set, list?)

Кассандравременная меткаОсобый случай: использованиеERDDAPДвойные данные Тип.

Если вы указали String dataTypeERDDAP™Для карты Кассандры, набора или списка карта, набор или список на каждой строке Кассандры будут преобразованы в одну строку на одной строке в одной строке.ERDDAP™столик.ERDDAP™Имеет альтернативную систему для списков; см. ниже.

тип Списки -ERDDAP[<DataType> (#тип данных) Оригинальное название: CassandradataVariableможет включать в себя регулярныеERDDAP™данные Типы (смотреть выше) плюс несколько специальных типов данных, которые могут использоваться для столбцов списка Cassandra: booleanList, byteList, ubyteList, shortList, ushortList, intList, uintList, longList, ulongList, floatList, doubleList, charList, StringList. Когда один из этих столбцов списка находится в результатах, передаваемых наERDDAP™Каждая строка исходных данных будет расширена до списка. размер () строки данных вERDDAPПростые данные Типы (Например, Int) В этой строке исходных данных будет дублироваться список. размер () Время. Если результаты содержат более одной переменной списка, все списки в заданной строке данных должны иметь одинаковый размер и должны быть «параллельными» списками.ERDDAP™будет генерировать сообщение об ошибке. Например, для измерений токов от ADCP, глубина\[0\]uCurrent\[0\]vCurrent\[0\]и zCurrent\[0\]Все они взаимосвязаны и глубина\[1 1\]uCurrent\[1 1\]vCurrent\[1 1\]и zCurrent\[1 1\]Все они связаны,... Альтернативно, если вы не хотитеERDDAP™Чтобы расширить список на несколько строк вERDDAP™стол, указать строку какdataVariableданные Тип так что весь список будет представлен как одна струна на одну строку вERDDAP.

Cassandra TimeStamp Данные

Данные Кассандры всегда в курсе часовых поясов. Если вы вводите данные метки времени без указания часовой зоны, Кассандра предполагает, что метка времени использует местный часовой пояс.

ERDDAP™поддерживает данные метки времени и всегда представляет данные вZuluчасовой пояс GMT. Поэтому, если вы вводите данные метки времени в Кассандре с использованием часового пояса, отличного от часового пояса.Zulu/GMT, помните, что вам нужно выполнить все запросы для данных временных метокERDDAP™используяZuluчасовой пояс GMT. Так что не удивляйтесь, когда значения метки времени, которые выходят изERDDAPсдвигаются на несколько часов из-за перехода часового пояса с локального наZuluВремя GMT.

  • вERDDAP?datasets.xmlв<dataVariable> tag for a timetamp variable, set
          <dataType>double</dataType>  

и в<addAttributesнабор

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Предложение: Если данные представляют собой временной диапазон, полезно, чтобы значения метки времени относились к центру подразумеваемого временного диапазона. (Например, полдень) . Например, если у пользователя есть данные за 2010-03-26T13:00Z из другого набора данных, и ему нужны самые близкие данные из этого набора данных Cassandra, которые имеют данные за каждый день, то данные за 2010-03-26T12:00Z (представление данных Кассандры на эту дату) Очевидно, что лучший (В отличие от полуночи до или после, где менее очевидно, что лучше.) .
  • ERDDAP™имеет полезность дляПреобразовать числовой Время в/из струнного времени.
  • Видишь?КакERDDAP™Сделки со временем.  

целые нули

Кассандра поддерживает нулевые в Cassandra int (ERDDAP™инт) большой (ERDDAP™длинный) колонны, ноERDDAP™не поддерживает истинные нули для любого целого типа данных. По умолчанию целые числа Cassandra будут преобразованы вERDDAP™2147483647 для колонн внутри, или 9223372036854775807 для длинных колонн. Они будут отображаться как «NaN» в некоторых типах файлов вывода текста. (Например, .csv) "" в других типах файлов вывода текста (Например,.htmlTable) и конкретное число (2147483647 для отсутствующих значений int) В других типах файлов (Например, бинарные файлы, такие как.ncи коврик) . Пользователь может искать строки данных с этим типом отсутствующего значения, ссылаясь на «NaN», например, «&windSpeed=NaN».

Если вы используете какое-либо другое целочисленное значение для указания отсутствующих значений в таблице Кассандра, пожалуйста, укажите это значение в таблице Кассандра.datasets.xml:

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

Для колонок с плавающей точкой Кассандры нули преобразуются в NaNs.ERDDAP. Для типов данных Cassandra, которые преобразуются в строкиERDDAP™Нули превращаются в пустые струны. Это не должно быть проблемой.

Предупреждение: переподготовка уже подготовленного запроса

  • «Предупреждение: переподготовка уже подготовленного запроса» кот /logs/catalina.out (или другой файл журнала Tomcat)
    В документации Кассандры говорится, что есть проблемы, если один и тот же запрос дважды превращается в подготовленное заявление. (или более) . (Посмотри.отчет об ошибках.) Чтобы Кассандра не сошла с ума,ERDDAP™кэшировать все подготовленные заявления, чтобы можно было их повторно использовать. Этот тайник потерян, если / когда Tomcat /ERDDAP™Перезапущен, но я думаю, что это нормально, потому что подготовленные заявления связаны с данной сессией. (междуJavaи Кассандра) которые также утрачены. Вы можете увидеть эти сообщения. Я не знаю другого решения. К счастью, это предупреждение, а не ошибка. (Хотя Кассандра угрожает, что это может привести к проблемам с производительностью.) .

Кассандра утверждает, что подготовленные заявления хороши навсегда.ERDDAPподготовленные заявления никогда не должны становиться устаревшими/недействительными. Если это не так, и вы получаете ошибки о том, что некоторые готовые заявления являются устаревшими / недействительными, то вам нужно перезапустить.ERDDAP™очищатьERDDAPТайник подготовленных заявлений.

Кассандра Безопасность

Видишь?Защитить Кассандру

При работе с Cassandra вы должны делать все максимально безопасно и надежно, чтобы не позволить злоумышленнику повредить вашу Cassandra или получить доступ к данным, к которым они не должны иметь доступ.ERDDAP™Он также пытается делать вещи безопасным способом.

  • Мы призываем вас создатьERDDAP™для подключения к Cassandra в качестве пользователя Cassandra, который имеет доступ только к соответствующий стол (s) У них есть только привилегии чтения.
  • Мы рекомендуем вам установить связь сERDDAP™Кассандре, чтобы она
    • всегда использует SSL,
    • Разрешает соединение только с одного IP-адреса (или один блок адресов) и от одногоERDDAP™пользователя и
    • Передаёт пароли только в хэшированной форме MD5.
  • \[Знать проблемы\]Свойства соединения (Включая пароль!) Сохраняется как простой текст вdatasets.xml. Мы не нашли способа разрешить администратору ввести пароль Кассандры во времяERDDAPСтартап в Tomcat (Что происходит без пользовательского ввода) Таким образом, пароль должен быть доступен в файле. Чтобы сделать это более безопасным:
    • Ты (тотERDDAP™администратор) должен быть собственникомdatasets.xmlПрочитайте и напишите доступ.
    • Создайте группу, в которую входит только пользователь=tomcat. Используйте chgrp, чтобы сделать эту группуdatasets.xmlТолько читать привилегии.
    • Используйте chmod для присвоения привилегий o-rwx (Нет возможности читать или писать для «других» пользователей) дляdatasets.xml.
  • КогдаERDDAP™, пароль и другие свойства соединения хранятся в «частном»Javaпеременных.
  • Запросы клиентов анализируются и проверяются на действительность, прежде чем генерировать запросы CQL для Cassandra.
  • Запросы в Cassandra делаются с помощью CQL Bound/PreparedStatements, чтобы предотвратить инъекцию CQL. В любом случае, Кассандра по своей природе менее восприимчива к инъекциям CQL, чем традиционные базы данных.SQL инъекция.  

Кассандра Спид

Кассандра может быть быстрой или медленной. Есть несколько вещей, которые вы можете сделать, чтобы сделать это быстро:

  • В целом - Характер CQL заключается в том, что запросыдекларативный. Они просто указывают, чего хочет пользователь. Они не содержат спецификации или подсказки о том, как следует обрабатывать или оптимизировать запрос. Так что нет способа дляERDDAP™генерировать запрос таким образом, чтобы помочь Кассандре оптимизировать запрос; (или каким-либо образом определяет, как должен обрабатываться запрос) . В общем, администратор Кассандры должен все настроить. (Например, индексы) оптимизировать под определенные типы запросов.  
  • Указание столбцов временных меток, которые связаны с ключами разделов с более высокой точностью временных меток [<раздел Ключевые имена источников (#partitionkeysourcenames) Это самый важный способ помочьERDDAP™Эффективная работа с Кассандрой. Если эти отношения существуют в столе Кассандры и вы не говоритеERDDAP™Набор данных будет болезненно медленнымERDDAP™Используйте тонны ресурсов Кассандры.  
  • Определение столбцов кластера через [<clusterColumnSourceNames> (#clustercolumnsourcenames) Это второй самый важный способ помочь.ERDDAP™Эффективная работа с Кассандрой. Если есть столбцы кластера и вы не говоритеERDDAP, большое подмножество возможных запросов данных будет ненужным, болезненно медленнымERDDAP™Используйте тонны ресурсов Кассандры.  
  • делатьИндексыДля обычно ограниченных переменных - Вы можете ускорить несколько запросов, создав индексы для столбцов Cassandra, которые часто ограничены ограничениями «=».

Кассандра не может создавать индексы для списка, набора или столбцов карт.

  • Указание колонок индексов через [<indexColumnSourceNames> (#indexcolumnsourcenames) Это важный способ помочьERDDAP™Эффективная работа с Кассандрой. Если есть индексные столбцы и вы не знаетеERDDAPНекоторые запросы данных будут ненужными, болезненно медленными.ERDDAP™Используйте тонны ресурсов Кассандры.  

Кассандра Статс

  • «Cassandra stats» Диагностические сообщения- Для каждогоERDDAP™запрос пользователя к набору данных Cassandra,ERDDAP™напечатает строку в файле журнала, BigParent Директория /logs/log.txt, с некоторой статистикой, связанной с запросом, например,
        \\* Cassandra stats: partitionKeyTable: 2/10000=2e-4 < 0.1 nCassRows=1200 nErddapRows=12000 nRowsToUser=7405  

Используя цифры в приведенном выше примере, это означает:

  • КогдаERDDAP™последний (повторять) Загрузил этот набор данных, - сказал Кассандра.ERDDAP™10000 различных комбинаций ключей раздела.ERDDAP™Кэшировать все различные комбинации в файле.
  • Из-за ограничений пользователя,ERDDAP™2 комбинации из 10000, которые могут иметь желаемые данные. Итак,ERDDAP™Он сделает 2 звонка Кассандре, по одному для каждой комбинации ключей раздела. (Этого требует Кассандра.) Очевидно, что это проблематично, если большой набор данных имеет большое количество комбинаций ключей раздела, и данный запрос не сильно уменьшает это. Вы можете потребовать, чтобы каждый запрос уменьшил ключевое пространство, установив<maxRequestFraction> (#maxquestфракция) . Здесь 2/10000=2e-4, что меньше, чем maxRequestFraction (0,1) Таким образом, просьба была удовлетворена.
  • После применения ограничений на клавиши раздела,колонны кластеровистолбцы индексовкоторые были посланыERDDAP™Кассандра вернула 1200 строк данныхERDDAP™в итоговой таблице.
  • Результат Сет должен был иметьданные Тип = какой-то Списокколонны (В среднем 10 пунктов в списке) Потому чтоERDDAP™Расширил 1200 рядов из Кассандры на 12000 рядов вERDDAP.
  • ERDDAP™Мы всегда применяем все ограничения пользователя к данным Cassandra. В этом случае ограничения, с которыми Кассандра не справилась, сократили число рядов до 7405. Это количество строк, отправленных пользователю.

Наиболее важным использованием этих диагностических сообщений является обеспечение того, чтобыERDDAP™Он делает то, что вы думаете, что он делает. Если это не так (Например, не уменьшается ли количество различных комбинаций, как ожидается?) Затем вы можете использовать информацию, чтобы попытаться выяснить, что происходит не так.  

  • Исследования и эксперименты, чтобы найти и установить лучше.<ConnectionProperty> (#cassandra-подключение) С.  
  • Проверьте скорость сетевого соединения между Cassandra иERDDAP. Если соединение медленное, посмотрите, сможете ли вы его улучшить. Лучшая ситуация – это когдаERDDAP™работает на сервере, подключенном к тому же (быстро) Переключайтесь как сервер, на котором работает узел Cassandra, к которому вы подключаетесь.  
  • Пожалуйста, будьте терпеливы. Внимательно прочитайте информацию здесь и в документации Кассандры. Эксперимент. Проверьте свою работу. Если Кассандра-ERDDAP™Связь по-прежнему медленнее, чем вы ожидаете, пожалуйста, включите схему стола Кассандры.ERDDAP™кусокdatasets.xmlУвидеть нашРаздел о дополнительной поддержке.  
  • Если все остальное провалится, Подумайте о хранении данных в коллекцииNetCDFv3.ncфайлы (особенно.ncФайлы, которые используютCF Дискретная геометрия выборки (DSG) Структуры данных Ragged Array и так могут обрабатыватьсяERDDAP?EDDTable FromNcCFFiles) . Если они логически организованы (Каждый с данными для куска пространства и времени) ,ERDDAP™Они могут быстро извлекать из них данные.  

EDDTable FromCassandra скелет 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>

EDDTable FromDapSequence

EDDTable FromDapSequence обрабатывает переменные в 1- и 2-уровневых последовательностяхDAPСерверы, такие какDAPПер (был в https://www.pmel.noaa.gov/epic/software/dapper/ Теперь прекращено) .

  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его. Вы можете собрать необходимую информацию, просмотрев файлы DDS и DAS исходного набора данных в своем браузере (добавляя .das и .dds в исходный набор данных).sourceUrl(примером является https://dapper.pmel.noaa.gov/dapper/epic/tao\\_time\\_series.cdp.dds ).

  • Переменная находится вDAPпоследовательность, если ответ .dds указывает, что структура данных, удерживающая переменную, является «последовательностью». (бесчувственный случай) .

  • В некоторых случаях вы увидите последовательность в последовательности, 2-уровневую последовательность — EDDTable FromDapSequence также обрабатывает их.

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>

EDDTable FromDatabase

EDDTable FromDatabase обрабатывает данные из одной таблицы реляционных баз данных илисмотреть.

Один столик или взгляд

Если данные, которые вы хотите предоставить, находятся в двух или более таблицах (и, следовательно, требуется соединение для извлечения данных из обеих таблиц одновременно.) Вы должны сделать одиннормализованный (уже присоединившийся) стол илисмотреть со всеми данными, которые вы хотите сделать доступными в виде одного набора данныхERDDAP.

Для больших, сложных баз данных может иметь смысл выделить несколько кусков в виде денормализованных таблиц, каждая из которых будет представлять собой отдельный набор данных.ERDDAP.

Создание денормализованной таблицы для использования вERDDAP™Для вас это может показаться сумасшедшей идеей. Пожалуйста, доверьтесь нам. Существует несколько причин, почемуERDDAP™Работает с денормализованными таблицами:

  • Это намного проще для пользователей. КогдаERDDAP™Представленный набор данных представляет собой одну простую, денормализованную единую таблицу, которую очень легко понять. Большинство пользователей никогда не слышали о нормализованных таблицах, и очень немногие понимают ключи, иностранные ключи или соединения таблиц, и они почти наверняка не знают подробностей различных типов соединений или как указать SQL, чтобы сделать соединение. (или множественные соединения) Правильно. Использование денормализованной таблицы позволяет избежать всех этих проблем. Только эта причина оправдывает использование денормализованной единой таблицы для представления набора данных.ERDDAP™пользователей.  
  • Нормализованные таблицы (несколько таблиц, связанных ключевыми столбцами) Они отлично подходят для хранения данных в базе данных. Но даже в SQL результат, который возвращается пользователю, является денормализованным. (присоединенный) Один столик. Таким образом, представляется разумным представить набор данных пользователям как огромную, денормализованную единую таблицу, из которой они затем могут запрашивать подмножества. (Например, покажите мне строки таблицы, где температура 30) .  
  • Вы можете внести изменения дляERDDAP™Не меняя своих столов. ERDDAP™Есть несколько требований, которые могут отличаться от того, как вы создали свою базу данных. Например,ERDDAP™требует, чтобы данные метки времени хранились в полях «временная метка с часовой зоной». Составляя отдельную таблицу/обзор дляERDDAP™Вы можете внести эти изменения, когда сделаете денормализованную таблицу дляERDDAP. Таким образом, вам не нужно вносить какие-либо изменения в свои таблицы.  
  • ERDDAP™Это позволит воссоздать структуру нормализованных таблиц. Вы можете указать, какие столбцы данных поступают из «внешних» таблиц и, следовательно, имеют ограниченное количество различных значений.ERDDAP™Соберет все различные комбинации значений в этих столбцах и представит их пользователям на специальной странице. Подмножество веб-страницы, которое помогает пользователям быстро выбирать подмножества набора данных. Отдельные значения для каждой колонки также показаны в выпадающих списках на других веб-страницах набора данных.  
  • Денормализованная таблица делает передачу данных от вас кERDDAPУправлять легко. Вы являетесь экспертом для этого набора данных, поэтому имеет смысл принимать решения о том, какие таблицы и какие столбцы присоединиться и как присоединиться к ним. Так что тебе не нужно нам помогать. (Хуже того, конечные пользователи) Несколько таблиц и подробные инструкции, как присоединиться к ним, вы просто должны дать нам доступ к денормализованной таблице.  
  • Денормализованная таблица обеспечивает эффективный доступ к данным. Денормализованная форма обычно быстрее, чем нормализованная. Присоединение может быть медленным. Несколько соединений могут быть очень медленными.  

Чтобы получить данные из двух или более таблиц в базе данныхERDDAP™Есть три варианта:  

  • Рекомендуемый вариант: Вы можете создать файл с запятой или вкладкой с отдельным значением с данными из денормализованной таблицы. Если набор данных огромен, то имеет смысл создать несколько файлов, каждый с сплоченным подмножеством денормализованной таблицы. (Например, данные из меньшего временного диапазона) .

Главное преимущество здесь в том, чтоERDDAP™Вы сможете обрабатывать запросы пользователей на данные без каких-либо дополнительных усилий со стороны вашей базы данных. ТакERDDAP™Это не будет бременем для вашей базы данных или риском для безопасности. Это лучший вариант при любых обстоятельствах, потому чтоERDDAP™Обычно данные из файлов можно получить быстрее, чем из базы данных. (Если конвертировать файлы .csv в.ncФайлы CF) . (Часть причины заключается в том, чтоERDDAP+files - это система только для чтения и не должна иметь дело с внесением изменений при предоставленииАцид (Атомность, последовательность, изоляция, долговечность) .) Кроме того, вам, вероятно, не понадобится отдельный сервер, так как мы можем хранить данные на одном из наших RAID и получать к ним доступ с помощью существующего сервера.ERDDAP™на существующем сервере.

  • Окей вариант: Вы создали новую базу данных на другом компьютере с помощью только денормализованной таблицы. Поскольку эта база данных может быть бесплатной и открытой базой данных, такой как MariaDB, MySQL и PostgreSQL, эта опция не должна стоить много.

Главное преимущество здесь в том, чтоERDDAP™Вы сможете обрабатывать запросы пользователей на данные без каких-либо дополнительных усилий со стороны вашей текущей базы данных. ТакERDDAP™Это не будет бременем для вашей базы данных. Это также устраняет многие проблемы безопасности.ERDDAP™У вас не будет доступа к текущей базе данных.

  • Отчаянный вариант: Мы можем соединитьERDDAP™к вашей текущей базе данных. Для этого вам необходимо:

    • Создайте отдельную таблицу или просмотр с денормализованной таблицей данных.
    • Создайте пользователя «erddap», который имеет доступ только для чтения только к денормализованной таблице. (s) .  

Это вариант, если данные меняются очень часто, и вы хотите, чтобыERDDAP™пользователи получают мгновенный доступ к этим изменениям; однако даже в этом случае имеет смысл использовать опцию файла выше и периодически (Каждые 30 минут?) Замените файл, который содержит данные. Огромные недостатки этого подхода заключаются в том, чтоERDDAP™Запросы пользователей, вероятно, положат невыносимо большую нагрузку на вашу базу данных.ERDDAP™Подключение - это риск безопасности (Мы можем свести к минимуму/управлять рисками.) .

Сделать денормализованную таблицу или вид дляERDDAP™Это хорошая возможность внести некоторые изменения, которыеERDDAP™Потребности, которые не влияют на исходные таблицы:

  • Измените поля / столбцы даты и временных меток, чтобы использовать тип данных, который вызывает Postgresвременная метка с часовым поясом (эквивалент в вашей базе данных) . Отметки времени без информации о часовом поясе не работают правильноERDDAP.
  • Создавайте индексы для колонок, которые пользователи часто ищут.
  • Будьте очень осведомленыВ случае наименований полей/колонн (Например, используйте все нижние регистры) Когда вы их набираете.
  • Не используйте зарезервированные слова для таблицы и для названия поля / колонки.

Если вам нужна помощь в создании денормализованной таблицы или просмотра, пожалуйста, свяжитесь с администратором базы данных. Если вы хотите обсудить весь этот подход или разработать стратегию, как лучше всего это сделать, пожалуйста, напишите Крису. Джон на noaa.gov.

База данных вdatasets.xml

Сложно создать правильныйdatasets.xmlИнформация, необходимая дляERDDAP™установить соединение с базой данных. Будь терпелив. Будьте методичны.

  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Генерировать наборы данных Xml имеет три специальных опции для EDDTable FromDatabase:

  1. Если вы войдете в «!!!ПИСАТЬ!!!» (Без цитат) Для названия каталога программа будет отображать список названий каталога.
  2. Если вы войдете в «!!!ПИСАТЬ!!!» (Без цитат) Для названия схемы программа будет отображать список имен схемы.
  3. Если вы войдете в «!!!ПИСАТЬ!!!» (Без цитат) Для названия таблицы программа будет отображать список таблиц и их столбцов. Первая запись «!!!СТАТЬ!!!» будет использована.
  • Внимательно прочитайте всю информацию этого документа о EDDTableFromDatabase.
  • Вы можете собрать большую часть информации, необходимой для создания XML для набора данных EDDTableFromDatabase, связавшись с администратором базы данных и выполнив поиск в Интернете.
  • Несмотря на то, что базы данных часто трактуют имена столбцов и таблиц в нечувствительном к случаю способе, они чувствительны к случаю в случае, если они не являются таковыми.ERDDAP. Если сообщение об ошибке из базы данных говорит, что имя колонки неизвестно (Например, "Неизвестный идентификатор = " столбец_имя "") Даже если вы знаете, что он существует, попробуйте использовать все капиталы. Имя (наименование) , который часто является истинным, чувствительным к случаю вариантом названия колонки.
  • Работайте в тесном контакте с администратором базы данных, который может иметь соответствующий опыт. Если набор данных не загружается, прочитайтесообщение об ошибкеВнимательно выяснить, почему.  

JDBC водитель

  • [Водитель JDBC и<Имя водителя> (#jdbc-водитель) - Вы должны получить соответствующий файл драйвера .jar JDBC 3 или JDBC 4 для вашей базы данных. положить его в кот /webapps/erddap/WEB-INF/lib после установкиERDDAP. Тогда в твоейdatasets.xmlДля этого набора данных вы должны указать<имя водителя для этого водителя, которое (К сожалению,) отличается от имени файла. Поиск в Интернете для драйвера JDBC для вашей базы данных и имени драйвераJavaЕго нужно использовать.

После того, как вы положили драйвер JDBC .jar вERDDAP™В каталоге lib необходимо добавить ссылку на файл .jar в файлах сценариев .bat и/или .sh для GenerateDatasets. Xml, DasDds и ArchiveADataset, которые находятся в кот /webapps/erddap/WEB-INF/ Directory; в противном случае вы получите ClassNotFoundException при запуске этих сценариев.

К сожалению, JDBC иногда является источником проблем. в качестве посредника междуERDDAP™и база данных, иногда вносит незначительные изменения в стандартный/общий запрос SQL базы данныхERDDAP™создает, тем самым вызывая проблемы (Например, связанные сидентификаторы верхнего/нижнего регистраи связанных сдата/время-зоны) . Пожалуйста, будьте терпеливы, внимательно прочитайте информацию здесь, проверьте свою работу и посмотрите нашуРаздел о дополнительной поддержке.

База данных<соединение Недвижимость>

  • [править]<ConnectionProperty> (#database-connectionproperty) - В этомdatasets.xmlДля вашего набора данных вы должны определить несколько соединений Теги собственности, чтобы сказатьERDDAP™Как подключиться к вашей базе данных (Например, указать имя пользователя, пароль, соединение ssl иприносить размер) . Они отличаются для каждой ситуации и их немного трудно понять. Найдите в Интернете примеры использования драйвера JDBC для подключения к вашей базе данных. The<ConnectionProperty> Имена (Например, «пользователь», «пароль» и «ssl».) , и некоторые из значений свойств соединения можно найти, выполнив поиск в Интернете по "свойствам соединения JDBC" база данных Тип " (Например,OracleMySQL, Amazon RDS, MariaDB, PostgreSQL) .  

Цитаты для имен и деловая чувствительность

  • Оригинальное название: Field/Column Names; Case SensitivityПо умолчанию EDDTableFromDatabase ставит ANSI-SQL-стандартные двойные цитаты вокруг имен полей / столбцов в заявлениях SELECT, если вы использовали зарезервированное слово в качестве имени поля / столбца или специального символа в имени поля / столбца. Двойные цитаты также препятствуют некоторым типам атак SQL-инъекций. Вы можете сказатьERDDAP™использовать «,» или не использовать цитаты через<Колонка Имя Цитаты вdatasets.xmlДля этого набора данных.

Для многих баз данных использование любого типа котировок заставляет базу данных работать с именами полей / столбцов чувствительным образом. (Вместо базы данных по умолчанию случай бесчувственный) . Базы данных часто отображают имена файлов / столбцов как все верхние регистры, когда на самом деле чувствительная форма корпуса отличается. вERDDAP™Пожалуйста, всегда обращайтесь с именами колонок базы данных как с деликатными.

  • Для Марии DB, вам нужно запустить базу данных\--sql-mode=ANSI\_QUOTES.

  • Для MySQL и Amazon RDS необходимо запускать базу данных с помощью\--sql-mode=ANSI\_QUOTES.

  • OracleПоддержка двойных котировок стандарта ANSI-SQLпо умолчанию.

  • PostgreSQL по умолчанию поддерживает двойные котировки стандарта ANSI-SQL.

Не используйте зарезервированное слово для базы данных, каталога, схемы или названия таблицы.ERDDAP™Они не ставят цитаты вокруг себя.

Если возможно, используйте все нижние регистры для базы данных, каталога, схемы, названий таблиц и названий полей при создании таблицы баз данных. (или взгляд) и при упоминании названий полей/колонн вdatasets.xmlвERDDAP. В противном случае вы можете получить сообщение об ошибке, в котором говорится, что база данных, каталог, схема, таблица и/или поле не были найдены. Если вы получили это сообщение об ошибке, попробуйте использовать чувствительную к регистру версию, всю версию верхнего регистра и всю версию имени в нижнем регистре.ERDDAP. Один из них может работать. Если нет, вам нужно изменить название базы данных, каталога, схемы и / или таблицы на все нижние регистры.

База данных<данные Type>

  • База данных[править]<DataType> (#тип данных) Тэги - Потому что есть некоторая двусмысленность в том, чтоТипы баз данныхКарта, на которойERDDAP™Типы данных, необходимо указать [<DataType> (#тип данных) Для каждого из них [<dataVariable> (#datavariable) рассказыватьERDDAP™Какой тип данных использовать. Часть проблемы заключается в том, что разные наборы данных используют разные термины для различных типов данных, поэтому всегда старайтесь соответствовать определениям, а не только именам. Смотрите описание этогостандартныйERDDAP™данные Типы, который включает ссылки на соответствующие типы данных SQL.Дата и метка времениОсобые случаи: использованиеERDDAPДвойные данные Тип.  

База данных Date Time Data

Некоторые столбцы даты базы данных не имеют явного часового пояса. Такие столбцы являются проблемой дляERDDAP. Базы данных поддерживают концепцию даты (С или без времени) без часового пояса, как примерный диапазон времени. НоJava (и таким образомERDDAP) Работает только с мгновенной датой + временем с часовым поясом. Вы можете знать, что данные о дате основаны на местном часовом поясе. (с или без дневного света экономия времени) или GMT/Zuluчасовой пояс, ноJava (иERDDAP) Не надо. Мы изначально думали, что сможем решить эту проблему. (например, путем указания часового пояса для колонки) База данных + JDBC +JavaВзаимодействие сделало это ненадежным решением.

  • Итак,ERDDAP™требует, чтобы вы хранили все данные о дате и времени даты в таблице базы данных с типом данных базы данных, который соответствует типу JDBC «метка времени с часовым поясом». (В идеале используется GMT/Zuluчасовой пояс) .
  • вERDDAP?datasets.xmlв<dataVariable> tag for a timetamp variable, set

      <dataType>double</dataType>

и в<addAttributesнабор

          <att name="units">seconds since 1970-01-01T00:00:00Z</att>
  • Предложение: Если данные представляют собой временной диапазон, полезно, чтобы значения метки времени относились к центру подразумеваемого временного диапазона. (Например, полдень) . Например, если у пользователя есть данные за 2010-03-26T13:00Z из другого набора данных, и ему нужны ближайшие данные из набора данных базы данных, который имеет данные за каждый день, то данные базы данных за 2010-03-26T12:00Z (представление данных на эту дату) Очевидно, что лучший (В отличие от полуночи до или после, где менее очевидно, что лучше.) .
  • ERDDAP™имеет полезность дляПреобразовать числовой Время в/из струнного времени.
  • Видишь?КакERDDAPСделки со временем.

целые нули

Базы данных поддерживают нули в целых числах (Int, smallint, tinyint) колонны, ноERDDAP™не поддерживает истинные нули. Нули базы данных будут преобразованы вERDDAP™127 для байтовых колонок, 255 для убайтовых колонок, 32767 для коротких колонок, 65535 для коротких колонок, 2147483647 для внутритрубных колонок, 4294967295 для точечных колонок, 9 223 372 036 854 775 807 для длинных колонн или 18446744073709551615 для улонговых колонн. Если вы используете эти дефолты, пожалуйста, укажите ихmissing\_valueдля пользователей набора данных вERDDAP™с

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

или

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

В качестве альтернативы можно использовать "missing\_value"атрибут вместо "\_FillValue". Генерировать наборы данных Xml автоматически добавляет эти атрибуты \_FillValue, когда он генерирует предложенные атрибуты.datasets.xmlдля наборов данных базы данных.

Для столбцов с плавающей точкой базы данных нули преобразуются в NaN вERDDAP. Для типов данных базы данных, которые преобразуются в строкиERDDAP™Нули превращаются в пустые струны.

Безопасность базы данных

  • При работе с базами данных необходимо делать все максимально безопасно и надежно, чтобы не позволить злоумышленнику повредить вашу базу данных или получить доступ к данным, к которым они не должны иметь доступа.ERDDAP™Он также пытается делать вещи безопасным способом.
    • Подумайте о тиражировании на другом компьютере базы данных и таблиц баз данных с данными, которые вы хотитеERDDAP™служить. (Для коммерческих баз данных, таких какOracleЭто предполагает дополнительные лицензионные сборы. Но для баз данных с открытым исходным кодом, таких как PostgreSQL, MySQL, Amazon RDS и MariaDB, это ничего не стоит.) Это обеспечивает высокий уровень безопасности, а также предотвращаетERDDAP™Запросы на замедление исходной базы данных.
    • Мы призываем вас создатьERDDAP™подключиться к базе данных в качестве пользователя базы данных, имеющего доступ только к соответствующий база данных (s) У них есть только привилегии чтения.
    • Мы рекомендуем вам установить связь сERDDAP™В базу данных, чтобы
      • всегда использует SSL,
      • Разрешает соединение только с одного IP-адреса (или один блок адресов) и от одногоERDDAP™пользователя и
      • Передаёт пароли только в хэшированной форме MD5.
    • \[Знать проблемы\]Свойства соединения (Включая пароль!) Сохраняется как простой текст вdatasets.xml. Мы не нашли способа разрешить администратору ввести пароль базы данных во времяERDDAPСтартап в Tomcat (Что происходит без пользовательского ввода) Таким образом, пароль должен быть доступен в файле. Чтобы сделать это более безопасным:
      • Ты (тотERDDAP™администратор) должен быть собственникомdatasets.xmlПрочитайте и напишите доступ.
      • Создайте группу, в которую входит только пользователь=tomcat. Используйте chgrp, чтобы сделать эту группуdatasets.xmlТолько читать привилегии.
      • Используйте chmod для присвоения привилегий o-rwx (Нет возможности читать или писать для «других» пользователей) дляdatasets.xml.
    • КогдаERDDAP™, пароль и другие свойства соединения хранятся в «частном»Javaпеременных.
    • Запросы клиентов анализируются и проверяются на достоверность перед генерацией запросов SQL для базы данных.
    • Запросы в базу данных выполняются с помощью SQL PreparedStatements, чтобы предотвратитьSQL инъекция.
    • Запросы в базу данных подаются с выполнением Запрос (не исполнять заявление) Ограничить запросы только на чтение (Поэтому попытка SQL-инъекции изменить базу данных также потерпит неудачу.) .  

SQL

  • Потому чтоOPeNDAPЗапросы табличных данных были разработаны для имитации запросов табличных данных SQL, это легко дляERDDAP™Преобразовать запросы табличных данных в простые подготовленные состояния SQL. Например, вERDDAP™запросить
    time,temperature&time>=2008-01-01T00:00:00Z&time&lt;=2008-02-01T00:00:00Z  

Преобразуется в подготовленное состояние SQL

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

ERDDAP™Запросы с & уточнением () и/или и/илиorderBy ( переменные ) добавляем дистинкт и/или порядок переменные Заявление, подготовленное SQL. В целом это значительно замедлит ответ из базы данных. ERDDAP™Подготовленное заявление вlog.txtкак

    statement=*thePreparedStatement*  

Это будет текстовое представление Подготовленного заявления, которое может немного отличаться от фактического Подготовленного заявления. Например, в Подготовленном заявлении время кодируется особым образом. Но в представлении текста они отображаются как даты ISO 8601.  

Скорость базы данных

  • Базы данных могут быть медленными. Есть некоторые вещи, которые вы можете сделать:
    • В целом - Суть SQL заключается в том, что запросыдекларативный. Они просто указывают, чего хочет пользователь. Они не содержат спецификации или подсказки о том, как следует обрабатывать или оптимизировать запрос. Так что нет способа дляERDDAP™генерировать запрос таким образом, чтобы он помогал базе данных оптимизировать запрос; (или каким-либо образом определяет, как должен обрабатываться запрос) . В общем, администратор базы данных должен настраивать вещи. (Например, индексы) оптимизировать под определенные типы запросов.
Установите размер Fetch

Базы данных возвращают данныеERDDAP™по частям. По умолчанию разные базы данных возвращают разное количество строк в куски. Часто это число очень мало и очень неэффективно. Например, по умолчанию дляOracleЭто 10! Прочитайте документацию JDBC для драйвера JDBC вашей базы данных, чтобы найти свойство соединения для установки, чтобы увеличить это, и добавьте это к описанию набора данных вdatasets.xml. Например, Для MySQL и Amazon RDS используйте

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

Для MariaDB в настоящее время нет возможности изменить размер приманки. Но это запрошенная функция, поэтому ищите в Интернете, чтобы узнать, была ли она реализована. ДляOracleиспользовать

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

Для PostgreSQL используйте

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

Но не стесняйтесь менять номер. Установка слишком большого числа вызоветERDDAP™использовать много памяти и с большей вероятностью исчерпать память.

Свойства Connection

Каждая база данных имеет другие свойства соединения, которые могут быть указаны вdatasets.xml. Многие из них влияют на работу базы данных.ERDDAP™связь. Пожалуйста, прочитайте документацию для драйвера JDBC вашей базы данных, чтобы увидеть варианты. Если вы найдете свойства соединения, которые полезны, пожалуйста, отправьте электронное письмо с подробной информацией.erd dot data at noaa dot gov.

  • Сделать стол... Вы, вероятно, получите более быстрые ответы, если вы периодически (Каждый день? Когда появляются новые данные?) Создание реальной таблицы (То же самое, как вы создали видео) рассказыватьERDDAP™Получить данные из таблицы вместо видео. Поскольку любой запрос к таблице может быть выполнен без присоединения другой таблицы, ответ будет намного быстрее.
  • Вакуумный стол - MySQL и Amazon RDS будут реагировать намного быстрееОптимизированная таблица. Мария DB будет реагировать быстрее, если вы используетеОптимизированная таблица. PostgreSQL будет реагировать быстрее, если выВАКУУМСтол. Oracleне имеет и не нуждается в аналогичной команде.
  • делатьИндексыДля обычно ограниченных переменных - Вы можете ускорить многие / большинство запросов, создав индексы в базе данных для переменных. (Какие базы данных называют «колоннами») Это часто ограничивается запросом пользователя. В общем случае это те же переменные, которые указаны в [<subsetVariables> (#subsetvariables) и/или переменных широты, долготы и времени.
Используйте Connection Pooling

Обычно,ERDDAP™Подключение к базе данных для каждого запроса. Это самый надежный подход. Более быстрая альтернатива - использовать DataSource, который поддерживает объединение соединений. Чтобы установить его, укажите (Например,)

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

Прямо рядом с<sourceUrl><имя водителя и<соединение Собственность. И в кот /conf/context.xml, определить ресурс с той же информацией, например,

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

Общая информация об использовании DataSource находится на https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html . Видишь?Tomcat Data Source ИнформацияиПримеры источников Tomcat Dataили искать в Интернете примеры использования DataSources с другими серверами приложений.

  • Если все остальное провалится, Подумайте о хранении данных в коллекцииNetCDFv3.ncфайлы (особенно.ncФайлы, которые используютCF Дискретная геометрия выборки (DSG) Структуры данных Ragged Array и так могут обрабатыватьсяERDDAP?EDDTable FromNcCFFiles) . Если они логически организованы (Каждый с данными для куска пространства и времени) ,ERDDAP™Они могут быстро извлекать из них данные.  

EDDTable FromDatabase скелет 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>

EDDTable FromEDDGrid

EDDTable FromEDDGrid позволяет создавать набор данных EDDTable из любогоEDDGridнабор данных.

  • Некоторые общие причины сделать это:
    • Это позволяет запрашивать набор данных сOPeNDAPограничения выбора, который является типом «запроса по значению» (который пользователь мог запросить) .
    • Набор данных по своей сути является табличным набором данных.
  • Значение глобального атрибута «maxAxis0» (обычно типа = "int") , (По умолчанию 10) будет использоваться для ограничения числа осей\[0\] (обычно"time"ось) Значения прилагаемогоEDDGridнабор данных, к которому можно получить доступ по запросу данных. Если вы не хотите, чтобы был какой-либо предел, укажите значение 0. Эта настройка важна, потому что в противном случае пользователю будет слишком легко задать EDDTableFrom.EDDGridПросмотреть все данные сетчатого набора данных. Это займет много времени и почти наверняка потерпит неудачу с ошибкой тайм-аута. Это то, что делает его безопасным для EDDTable From.EDDGridнаборы данных в вашемERDDAPне опасаясь, что они приведут к необоснованному использованию вычислительных ресурсов.
  • Если заключенныйEDDGridявляетсяEDDGridИз ЭрддапаиERDDAP™то же самоеERDDAP, затем EDDTable FromEDDGridВы всегда будете использовать доступную в настоящее время версию набора данных напрямую. Это очень эффективный способ для EDDTableFrom.EDDGridдля доступа к сетчатым данным.
  • Этот класс [<перезаряжать EveryNMinutes > (#reloadeverynminutes) Вот что имеет значение. ЗакрытыйEDDGrid?<Перезагрузка EveryNMinutes игнорируется.
  • Если значение для [<Обновление EveryNMillis (#updateeverynmillis) предоставляется для этого набора данных, он игнорируется. ЗакрытыйEDDGrid?<Обновление EveryNMillis — вот что важно.
  • Генерировать наборы данныхXmlимеет опцию для типа набора данных=EDDTableFromEDDGridДля чего нужен URLERDDAP (Как правило, одинаковыеERDDAP) (Заканчивается на "/erddap/") и регулярное выражение. Генерировать наборы данных Xml сгенерирует XML для EDDTableFromEDDGridнабор данных для каждого сетчатого набора данных вERDDAP™который имеетdatasetIDкоторый соответствует обычному выражению (Используйте . . . , чтобы соответствовать всемdatasetIDs для сетчатых наборов данных) .

Часть XML, генерируемая GenerateDatasetsXml для каждого набора данных, включает:

  • А.datasetIDкоторый являетсяEDDGrid?datasetIDПлюс "_AsATable".
  • Новый глобальный атрибут, который являетсяEDDGridрезюме плюс новый первый абзац, описывающий, что это набор данных.
  • Новый глобальный атрибут, который являетсяEDDGrid"Титул плюс", (Как столик) ".
  • Новый глобальный атрибут maxAxis0 со значением 10.

EDDTable FromEDDGridскелет 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>

EDDTable FromFileNames

EDDTable FromFileNames создает набор данных из информации о группе файлов в файловой системе сервера, включая URL для каждого файла, чтобы пользователи могли загружать файлы черезERDDAP?"files"система. В отличие от всехEDDTable Из материаловПодклассы, этот тип набора данных не обслуживает данные из файлов.

  • EDDTableFromFileИмена полезны, когда:
    • У вас есть группа файлов, которые вы хотите распространять как целые файлы, потому что они не содержат «данные» так же, как обычные файлы данных имеют данные. Например, файлы изображений, видеофайлы, документы Word, файлы электронных таблиц Excel, файлы презентации PowerPoint или текстовые файлы с неструктурированным текстом.
    • У вас есть группа файлов, которые имеют данные в формате, которыйERDDAP™Пока не могу читать. Например, проект-специфический, пользовательский, двоичный формат.  

EDDTableFromFileNames Данные

файл Дир
  • <FileDir>- Это указывает каталог источника в файловой системе сервера с файлами для этого набора данных. Файлы, которые фактически находятся в файловой системе сервера<fileDir> появится в столбце URL этого набора данных в виртуальном каталоге с именем https://serverUrl/erddap/files/datasetID/ . Например, еслиdatasetIDЯвляется JPLMURSSТ. и<fileDir> является /home/data/mur/, В этом каталоге есть файл под названием jplMU.RSST20150103000000.png, URL, который будет показан пользователям для этого файла, будет https://serverUrl/erddap/jplMURSST/jplMURSST20150103000000.png .

Помимо использования локального каталога для<fileDir>, вы также можете указать URL удаленной страницы, похожей на каталог. Это работает с:

Скриншоты OnTheFly

\\(перенаправлено с «OnTheFly»)- Для больших ведер S3 (Noaa-goes17 содержит 26 миллионов файлов) Это может занятьERDDAP™до 12 часов для загрузки всей информации о содержимом ведра (А потом возникают другие проблемы) . Чтобы обойти это, есть специальный способ использовать<fileDir> в EDDTableFromFileNames для создания набора данных с каталогом и именами файлов из ведра AWS S3. В наборе данных не будет списка всех каталогов и имен файлов S3, которые пользователь может искать по запросам к набору данных. Но набор данных получит имена каталогов и файлов на лету, если пользователь пересекает иерархию каталогов с набором данных."files"вариант. Таким образом, это позволяет пользователям просматривать иерархию файлов S3 и файлы через набор данных."files"система. Для этого вместо указания URL-адреса ведёрка S3 в качестве «Начало каталога» (Генерировать наборы данных Xml) или<FileDir> (вdatasets.xml) Используйте:

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

Например:

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

Смотрите документацию дляОбсуждение S3 Buckets inERDDAP™В частности, описание конкретного формата, который должен использоваться для URL-адреса S3. И посмотреть Эти детали и примериспользования\\(перенаправлено с «OnTheFly»)

рекурсивный
  • <рекурсивный - Файлы в подкаталогах<FileDir> с именами, совпадающими<FileRegex> будет отображаться в тех же подкаталогах"files"URL, если<Рекурсивный> является истинным. Дефолт является ложным.
  • [править]<PathRegex> (#патрегекс) - Если рекурсивный = истинный, только имена каталогов, которые соответствуют пути (Дефолт =.) будут приняты. Если рекурсивный = ложный, это игнорируется. Это редко используется, но может быть очень полезным при необычных обстоятельствах. (Посмотри.нормативная документацияиучебник по регексу.)
FileRegex
Содержимое таблицы данных File Names Data Table

В таблице будут колонки с:

  • url- URL, который пользователи могут использовать для загрузки файла черезERDDAP?"files"система.

  • имя Имя файла (Без названия каталога) .

  • Последнее изменение - Время последнего изменения файла (Сохраняется как двойник с"seconds since 1970-01-01T00:00:00Z") . Эта переменная полезна, потому что пользователи могут видеть, изменилось ли содержимое данного файла в последний раз. Эта переменная являетсявремя Переменная маркировкаТаким образом, данные могут выглядеть как числовые значения. (секунды с 1970-01-01T00:00:00Z) или струнное значение (ISO 8601:2004 (Е) формат) В зависимости от ситуации.

  • размер Размер файла в байтах, хранящегося в виде двойников. Они хранятся в виде двойных файлов, потому что некоторые файлы могут быть больше, чем позволяют ints, а длинные файлы не поддерживаются в некоторых типах файлов ответа. Двойники дают точный размер даже для очень больших файлов.

  • Дополнительные столбцы, определяемыеERDDAP™администратор с информацией, извлеченной из имени файла (Например, время, связанное с данными в файле.) на основе двух атрибутов, которые вы указываете в метаданных для каждой дополнительной колонкиdataVariable:

    • ЭкстрактРегекс Это арегулярное выражение (учебник) . Весь регекс должен соответствовать всему имени файла (Не включая название каталога) . Регекс должен включать по меньшей мере одну группу захвата. (раздел регулярного выражения, заключенный в скобки) которыйERDDAP™использует для определения того, какой раздел имени файла извлечь, чтобы стать данными.
    • экстракт Группа: Это число группы захвата. (#1 - первая группа захвата) В обычном выражении. Дефолт составляет 1. Группа захвата представляет собой раздел регулярного выражения, который заключен в скобки.

Вот два примера:

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

В случае переменной времени, если файл имеет имя jplMURSST20150103000000.png, экстрактRegex будет соответствовать имени файла, извлекать символы, которые соответствуют первой группе захвата ("20150103000000") как dataType=String, затем использоватьЕдиницы, подходящие для струнного временидля разбора строк в значениях данных времени (2015-01-03T00:00:00Z) .

В случае переменной дня, если файл имеет имя jplMURSST20150103000000.png, экстрактRegex будет соответствовать имени файла, извлекать символы, которые соответствуют первой группе захвата ("03") как<DataType> (#тип данных) \=int, что дает значение 3.

Другая информация

  • Нет.<Обновление EveryNMillis (#updateeverynmillis) - Этот тип набора данных не нуждается и не может использовать<Обновить тег EveryNMillis>, потому что информация, обслуживаемая EDDTableFromFileNames, всегда идеально актуальна, потому чтоERDDAP™Запрашивает файловую систему, чтобы ответить на каждый запрос данных. Даже если существует огромное количество файлов, этот подход должен работать достаточно хорошо. Ответ может быть медленным, если есть огромное количество файлов, и набор данных не запрашивался в течение некоторого времени. Но в течение нескольких минут после этого операционная система хранит информацию в кэше, поэтому ответы должны быть очень быстрыми.  
  • Вы можете использоватьГенерировать наборы данных Программа Xmlчтобы сделатьdatasets.xmlДля этого типа набора данных. Вы можете добавить/определить дополнительные столбцы с информацией, извлеченной из имени файла, как показано выше.  

EDDTableFromFileИмена скелетов XML

  <dataset type="EDDTableFromFileNames" datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <fileDir>...</fileDir>
      <recursive>...</recursive> <!-- true or false (the default) -->
      <pathRegex>...</pathRegex> <!-- 0 or 1. Only directory names which
        match the pathRegex (default=".\*") will be accepted. -->
      <fileNameRegex>...</fileNameRegex>
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more.
         Each dataVariable MUST include <dataType> tag. -->
  </dataset>

EDDTable Из материалов

EDDTable Из материалов Это суперкласс всех классов EDDTable From...Files. Вы не можете использовать EDDTableFromFiles напрямую. Вместо этого используйте подкласс EDDTableFromFiles для обработки определенного типа файла:

  • EDDTableFromAsciiFilesагрегирует данные из запятых, вкладок, полуколонов или разделённых по пространству табличных файлов данных ASCII.
  • EDDTable FromAudioFilesагрегирует данные из группы локальных аудиофайлов.
  • EDDTable From AwsXmlFilesагрегирует данные с автоматической метеорологической станции (AWS) XML файлы.
  • EDDTable FromColumnarAsciiFilesагрегирует данные из табличных файлов данных ASCII с столбцами данных фиксированной ширины.
  • EDDTable FromHyraxФайлы (Обнародовано) агрегирует данные с несколькими переменными, каждая с общими размерами (Например, время, высота (или глубина) Широта, долгота) и обслуживается аHyrax OPeNDAPсервер.
  • EDDTable FromInvalidCRAFilesагрегированные данные отNetCDF (v3 или v4) .ncФайлы, которые используют конкретный, недействительный вариант CF DSG Contiguous Ragged Array (КРА) Файлы. ХотяERDDAP™Поддерживает этот тип файла, это недействительный тип файла, который никто не должен начинать использовать. Группы, которые в настоящее время используют этот тип файла, настоятельно рекомендуется использовать.ERDDAP™для создания действительных файлов CF DSG CRA и прекращения использования этих файлов.
  • EDDTableFromJsonlCSVFilesагрегированные данные отДжон Линии файлов CSV.
  • EDDTableFromMultidimNcFilesагрегированные данные отNetCDF (v3 или v4) .nc (или.ncмл) файлы с несколькими переменными, каждая с общими размерами (Например, время, высота (или глубина) Широта, долгота) .
  • EDDTable FromNcFilesагрегированные данные отNetCDF (v3 или v4) .nc (или.ncмл) файлы с несколькими переменными, каждая с общими размерами (Например, время, высота (или глубина) Широта, долгота) . Хорошо продолжать использовать этот тип набора данных для существующих наборов данных, но для новых наборов данных мы рекомендуем использовать вместо этого EDDTableFromMultidimNcFiles.
  • EDDTable FromNcCFFilesагрегированные данные отNetCDF (v3 или v4) .nc (или.ncмл) файлы, использующие один из форматов файлов, указанных вCF Дискретная геометрия выборки (DSG) конвенции. Но для файлов, использующих один из многомерных вариантов CF DSG, используютEDDTableFromMultidimNcFilesВместо этого.
  • EDDTable FromNccsvFilesагрегированные данные отNCCSVФайлы ASCII.csv.
  • EDDTableFromParquetFilesобрабатывать данные отпаркет.
  • Скриншоты из ThreddsFiles (Обнародовано) агрегирует данные из файлов с несколькими переменными с общими размерами, обслуживаемымиПЕРЕВОДЫOPeNDAPсервер.
  • EDDTable FromWFSФайлы (Обнародовано) сделать локальную копию всех данных изArcGISMapServerWFSсервера, чтобы данные можно было быстро восстановитьERDDAP™пользователей.

В настоящее время другие типы файлов не поддерживаются. Но обычно относительно легко добавить поддержку для других типов файлов. Свяжитесь с нами, если у вас есть запрос. Или, если ваши данные находятся в старом формате файла, от которого вы хотели бы отказаться, мы рекомендуем конвертировать файлы.NetCDFv3.ncфайлы (особенно.ncФайлы с помощьюCF Дискретная геометрия выборки (DSG) Структура данных Ragged Array -ERDDAP™Они могут быстро извлекать из них данные.) .NetCDFявляется широко поддерживаемым двоичным форматом, обеспечивает быстрый случайный доступ к данным и уже поддерживаетсяERDDAP.

Из материалов Подробности

Следующая информация относится ко всем подклассам EDDTableFromFiles.

Агрегация

Этот класс объединяет данные из локальных файлов. Каждый файл содержит (относительно) Небольшая таблица данных.

  • Полученный набор данных выглядит так, как будто все таблицы файла были объединены. (все строки данных из файла #1, плюс все строки из файла #2,) .
  • Не все файлы должны иметь все указанные переменные. Если файл не имеет заданной переменной,ERDDAP™При необходимости будут добавлены недостающие значения.
  • Переменные во всех файлах должны иметь одинаковые значения.add\_offset,missing\_value,\_Fill ценность,scale\_factorиединицыатрибуты (если есть) .ERDDAP™проверки, но это несовершенный тест - если есть разные значения,ERDDAPОн не знает, какие файлы являются правильными, а какие недействительными. Если это проблема, вы можете использоватьNcMLилиNCOЧтобы решить проблему.  
Сжатые файлы

Файлы исходных данных для всех подклассов EDDTableFromFiles могут быть сжаты извне. (например,.tgz,.tar.gz,.tar.gzip,.gz,.gzip,.zip,.bz2или .Z) . Видишь?Внешне сжатые файлы документация.  

Информация о кэшированных файлах
  • При первой загрузке набора данных EDDTableFromFiles EDDTableFromFiles считывает информацию из всех соответствующих файлов и создает таблицы. (Одна строка для каждого файла) с информацией о каждом действительном файле и каждом «плохом» (иной или недействительный) Файл.
    • Таблицы также хранятся на диске.NetCDFv3.ncфайлы в BigParent Директория /dataset/ Last2CharsOfDatasetID / datasetID / в файлах с именем: раскладной.nc (который содержит список уникальных имен каталогов) , файл Столик.nc (который содержит таблицу с информацией каждого действительного файла) , Плохие материалы.nc (который содержит таблицу с информацией о каждом плохом файле) .
    • Для ускорения доступа к набору данных EDDTableFromFiles (За счет использования большего объема памяти) Вы можете использовать [править]<FileTableInMemory>Правда</fileTableInMemory> (#filetableinmemory)
      рассказыватьERDDAP™сохранить копию таблицы информации файла в памяти.
    • Копия файловых информационных таблиц на диске также полезна, когдаERDDAP™Отключается и перезапускается: сохраняет EDDTable Из файлов, которые нужно перечитать все файлы данных.
    • При перезагрузке набора данных,ERDDAP™Нужно только прочитать данные в новых файлах и файлах, которые изменились.
    • Если файл имеет структуру, отличную от других файлов (Например, другой тип данных для одной из переменных или другое значение для "единицы"атрибут) ,ERDDAPДобавляет файл в список «плохих» файлов. Информация о проблеме с файлом будет написана на BigParent Директория /logs/log.txt файл.
    • Вам никогда не нужно удалять или работать с этими файлами. Одно исключение: если вы все еще вносите изменения в набор данныхdatasets.xmlНастройка, вы можете удалить эти файлы, чтобы заставитьERDDAP™Перечитывать все файлы, так как они будут читаться и интерпретироваться по-разному. Если вам нужно удалить эти файлы, вы можете сделать это, когдаERDDAP™Бежит. (Затем установитефлагПерезагрузить набор данных как можно скорее.) Однако,ERDDAP™Как правило, отмечается, чтоdatasets.xmlИнформация не совпадает с файлом Информация о таблице и автоматически удаляет таблицы файлов.
    • Если вы хотите поощрятьERDDAP™для обновления сохраненной информации о наборе данных (Например, если вы просто добавили, удалили или изменили некоторые файлы в каталог данных набора данных.) Используйтефлаговая системапринуждатьERDDAP™Обновление кэшированной информации файла.  
Обработка запросов
  • ERDDAP™Запросы табличных данных могут накладывать ограничения на любую переменную.
    • Когда клиентский запрос на данные обрабатывается, EDDTableFromFiles может быстро заглянуть в таблицу с достоверной информацией о файле, чтобы увидеть, какие файлы могут иметь соответствующие данные. Например, если каждый исходный файл имеет данные для одного буя фиксированного местоположения, EDDTableFromFiles может очень эффективно определить, какие файлы могут иметь данные в заданном диапазоне долготы и широты.
    • Поскольку таблица достоверной информации о файлах содержит минимальное и максимальное значение каждой переменной для каждого действительного файла, EDDTable FromFiles часто может обрабатывать другие запросы довольно эффективно. Например, если у некоторых буев нет датчика давления воздуха, и клиент запрашивает данные для AirPressure! = NaN, EDDTableFromFiles может эффективно определить, какие буи имеют данные давления воздуха.  
Обновление кэшированной файловой информации

Всякий раз, когда набор данных перезагружается, информация кэшированного файла обновляется.

  • Набор данных периодически перезагружается, как определено<перезагрузить EveryNMinutes> в наборе данныхdatasets.xml.
  • Набор данных перезагружается как можно скорее, когда это возможно.ERDDAP™Выявляете, что вы добавили, удалили,касаться (Чтобы изменить последний файл Измененное время) или изменить файл данных.
  • Набор данных перезагружается как можно скорее, если вы используетефлаговая система.

Когда данные перезагружаются,ERDDAP™Сопоставляет имеющиеся в настоящее время файлы с таблицей кэшированной информации о файлах. Новые файлы читаются и добавляются в действующую таблицу файлов. Файлы, которые больше не существуют, выпадают из таблицы файлов. Файлы, в которых изменилась временная метка файла, считываются, и их информация обновляется. Новые таблицы заменяют старые таблицы в памяти и на диске.  

Плохие файлы

Таблица плохих файлов и причины, по которым файлы были объявлены плохими (поврежденный файл, отсутствующие переменные, неправильные значения оси и т.д.) отправляется по электронной почте Все На адрес электронной почты (Возможно, вы) Каждый раз, когда набор данных перезагружается. Вы должны заменить или восстановить эти файлы как можно скорее.  

Пропавшие переменные

Если некоторые файлы не имеютdataVariables определено в наборе данныхdatasets.xmlКусок, все в порядке. Когда EDDTableFromFiles считывает один из этих файлов, он будет действовать так, как если бы в файле была переменная, но со всеми отсутствующими значениями.  

Данные в реальном времени
  • EDDTableFromFiles рассматривает запросы на самые последние данные как особый случай. Проблема: Если файлы, составляющие набор данных, обновляются часто, вполне вероятно, что набор данных не будет обновляться каждый раз, когда файл изменяется. Таким образом, EDDTableFromFiles не будет знать об изменённых файлах. (Вы можете использоватьфлаговая системаНо это может привести кERDDAP™Перезагрузка набора данных практически постоянно. В большинстве случаев мы не рекомендуем его.) Вместо этого EDDTableFromFiles работает со следующей системой: КогдаERDDAP™Получение запроса данных в течение последних 20 часов (Например, 8 часов назад до настоящего времени) ,ERDDAP™Мы будем искать все файлы, которые имеют какие-либо данные за последние 20 часов. Таким образом,ERDDAP™Не нужно иметь полностью обновленные данные для всех файлов, чтобы найти последние данные. Вы все еще должны установить [<перезаряжать EveryNMinutes > (#reloadeverynminutes) с достаточно небольшой стоимостью (Например, 60) Но он не должен быть крошечным (Например, 3) .  
    • Не рекомендуется Организация данных в режиме реального времени в файлах: Если, например, у вас есть набор данных, который хранит данные для многочисленных станций. (или буй, или траектория,) В течение многих лет вы можете упорядочить файлы так, чтобы, например, был один файл на станцию. Но каждый раз, когда приходят новые данные для станции, нужно прочитать большой старый файл и написать большой новый файл. И когдаERDDAP™Перезагружает набор данных, он замечает, что некоторые файлы были изменены, поэтому он полностью считывает эти файлы. Это неэффективно.  

    • рекомендованный Организация данных в режиме реального времени в файлах: Храните данные в кусках, например, все данные для одной станции / буя / траектории в течение одного года. (или один месяц) . Затем, когда появляется новая дата, только файл с этим годом. (или месяцев) Данные затронуты.

    • Лучшее: ИспользоватьNetCDFv3.ncФайлы с неограниченным размером (время) . Затем, чтобы добавить новые данные, вы можете просто добавить новые данные без необходимости читать и переписывать весь файл. Изменение производится очень эффективно и по существу атомарно, поэтому файл никогда не находится в непоследовательном состоянии.

    • Если вы не можете / не можете использовать.ncФайлы с неограниченным размером (время) Затем, когда вам нужно добавить новые данные, вы должны прочитать и переписать весь затронутый файл. (Надеюсь, он маленький, потому что у него всего год. (или месяцев) ценность данных) . К счастью, все файлы за предыдущие годы (месяцев) При этом станция остается неизменной.

В обоих случаях, когдаERDDAP™Перезагружает набор данных, большинство файлов неизменны; только несколько, небольшие файлы изменились и должны быть прочитаны.  

Директории

Файлы могут быть в одном каталоге или в каталоге и его подкаталогах. (рекурсивно) . Если имеется большое количество файлов (Например, >1000) , операционная система (и, таким образом, EDDTable FromFiles) Работает намного эффективнее, если хранить файлы в серии подкаталогов. (один в год или один в месяц для наборов данных с очень частыми файлами) Чтобы никогда не было большого количества файлов в данном каталоге.  

Дистанционные каталоги и HTTP Range Requests
  • Дистанционные каталоги и HTTP Range Requests (AKA Byte Serving, Byte Range) - EDDGridFromNcFiles, EDDTableFromMultidimNcFiles, EDDTableFromNcFiles и EDDTableFromNcCFFiles иногда могут обслуживать данные из.ncфайлы на удаленных серверах и доступ к ним через HTTP, если сервер поддерживаетБайт обслуживаетHTTP-запросы диапазона (Механизм HTTP для байтового обслуживания) . Это возможно благодаря Netcdf-java. (которыйERDDAP™использовать для чтения.ncфайлы) Поддержка чтения данных с удаленного.ncФайлы через HTTP-запросы.

    Не делай этого!
    Вместо этого используйте [<cacheFromUrl>система (#cachefromurl) .

CacheFromUrl
  • [править] ** <CacheFromUrl> ** ] (#cachefromurl) - ВсеEDDGridFromFiles и все наборы данных EDDTableFromFiles поддерживают набор тегов, которые сообщаютERDDAP™загружать и поддерживать копию всех файлов удаленного набора данных или кэш нескольких файлов (скачать по мере необходимости) . Это невероятно полезная функция.
    • The<Тег cacheFromUrl> позволяет указать URL-адрес со списком файлов удаленного набора данных из списка удаленных файлов.

      ERDDAP™будет копировать или кэшировать эти файлы в наборе данных<FileDir> каталог. Если вам нужна поддержка другого типа удаленного списка файлов (Например, FTP) Пожалуйста, отправьте свой запрос Крису. Джон на noaa.gov.

      • Значение по умолчанию для<cacheFromUrl> tag является нулевым. Если не указать значение для<cacheFromUrl> tag, система копирования/кэша не будет использоваться для этого набора данных.
      • Если набор данных<FileRegex>> Постановка — это нечто иное, чем...ERDDAP™Мы будем загружать только те файлы, которые соответствуют файлу Regex.
      • Если набор данных<рекурсивная настройка является истинной, а удаленные файлы находятся в подкаталогах;ERDDAP™будет искать в удаленных подкаталогах, которые соответствуют набору данных [<PathRegex> (#патрегекс) Создайте ту же структуру каталогов локально и поместите локальные файлы в те же подкаталоги.
      • В генерации наборов данных Xml, если указать<CacheFromUrl> значение, генерировать Наборы данных Xml создаст локальный<FileDir> каталог и копирование 1 удаленного файла в него. Генерировать наборы данных Xml будет генерироватьdatasets.xmlкусочек, основанный на этом образце файла (конкретный образец Файл = ничего) .
      • Если источник данных удаленныйERDDAP™использоватьEDDGridИз ЭрддапаилиEDDTable FromErddapвместо того, чтобы<cacheFromUrl>. Таким образом, ваш местныйERDDAP™Похоже, что у вас есть набор данных, но вам не нужно хранить какие-либо данные локально. Единственная причина использовать<cacheFromUrl> для получения данных с пультаERDDAP™Это когда у вас есть другая причина, по которой вы хотите иметь локальную копию файлов данных. В этом случае:
        • Этот набор данных будет пытаться подписаться на набор данных на удаленном устройстве.ERDDAPЧтобы изменения в этом наборе данных называли флаг этого набора данных Url, заставляя этот локальный набор данных перезагружать и загружать измененные удаленные файлы. Таким образом, локальный набор данных будет обновлен очень скоро после внесения изменений в удаленный набор данных.
        • Вы должны написать администратору удаленногоERDDAP™просить оdatasets.xmlдля удаленного набора данных, чтобы вы могли сделать набор данных в своем локальномERDDAP™Как выглядит набор данных в пультеERDDAP.
      • Если источник данных удаленныйERDDAP™, локальный набор данных будет пытаться подписаться на удаленный набор данных.
        • Если подписка удалась, каждый раз, когда удаленныйERDDAPПерезагружает и имеет новые данные, он свяжется с flagURL для этого набора данных, заставляя его перезагружать и загружать новые и / или измененные файлы данных.
        • Если подписка не работает (по какой бы то ни было причине) или если вы просто хотите убедиться, что локальный набор данных обновлен, вы можете установитьфлагдля локального набора данных, поэтому он будет перезагружаться, поэтому он будет проверять новые и / или измененные удаленные файлы данных.
      • Если источник данных не является удаленнымERDDAPНабор данных будет проверять наличие новых и/или измененных удаленных файлов при перезагрузке. Обычно это контролируется [<перезаряжать EveryNMinutes > (#reloadeverynminutes) . Но если вы знаете, когда есть новые удаленные файлы, вы можете установитьфлагдля локального набора данных, поэтому он будет перезагружать и проверять новые и / или измененные удаленные файлы данных. Если это происходит регулярно в определенное время суток (Например, в 7 утра) Вы можете сделать работу cron, чтобы использоватьcurlЧтобы связаться с флагом Url для этого набора данных, поэтому он будет перезагружать и проверять новые и / или измененные удаленные файлы данных.
    • The<Тег cacheSizeGB> определяет размер локального кэша. Возможно, вам нужно использовать его только при работе с облачными системами хранения данных.Amazon S3обычно используемая система хранения, которая является частьюAmazon Web Services (AWS) . По умолчанию - -1.

      • Если ценность является<= 0 (Например, значение по умолчанию -1) , ERDDAP™будет загружать и поддерживать Полная копия Все файлы удаленного набора данных в наборе данных<FileDir>.
        • Это установка, которая рекомендуется, когда это возможно.
        • Каждый раз, когда набор данных перезагружается, он сравнивает имена, размеры и последние измененные времена удаленных файлов и локальных файлов и загружает любые удаленные файлы, которые являются новыми или изменились.
        • Если файл на удаленном сервере исчезнет,ERDDAP™не удаляет соответствующий локальный файл (В противном случае, если что-то временно не так с удаленным сервером,ERDDAP™Вы можете удалить некоторые или все локальные файлы.) .
        • С этой настройкой, как правило, вы будете устанавливать<Обновите EveryNMillis> до -1, поскольку набор данных знает, когда он скопировал новые файлы данных на место.
      • Если значение >0, ERDDAP™загружать файлы из удаленного набора данных по мере необходимости в локальный кэш (в наборе данных)<fileDir>) с пороговым размером указанного количества ГБ.
        • Кэш должен быть достаточно большим, чтобы вместить как минимум несколько файлов данных.
        • В общем, чем больше кэш, тем лучше, потому что следующий запрашиваемый файл данных, скорее всего, уже будет в кэше.
        • Кеширование следует использовать только тогда, когдаERDDAP™работает на сервере облачных вычислений (Например, пример вычислений AWS) удаленные файлы в облачной системе хранения (Например, AWS S3) .
        • Когда дисковое пространство, используемое локальными файлами, превышает кэш SizeGB,ERDDAP™Скоро будет (Может быть, не сразу) удалить некоторые из кэшированных файлов (В настоящее время, на основе наименее используемых (Лу) алгоритм) пока дисковое пространство, используемое локальными файлами, не<0.75**CacheSizeGB («Цель») . Да, бывают случаи, когда LRU работает очень плохо — нет идеального алгоритма.
        • ERDDAP™Никогда не пытаться удалить кэшированный файл, которыйERDDAP™Его начали использовать в течение последних 10 секунд. Это несовершенная система для работы с кэш-системой и системой чтения файлов данных, которая только слабо интегрирована. Благодаря этому правилу,ERDDAP™Возможно, не удастся удалить достаточное количество файлов, чтобы достичь своей цели, и в этом случае он будет печатать ПРЕДУПРЕЖДЕНИЕ к файлу log.txt, и система будет тратить много времени, пытаясь обрезать кэш, и возможно, что размер файлов в кэше может значительно превышать кэшSizeGB. Если это когда-либо произойдет, используйте для этого набора данных более крупный набор CacheSizeGB.
        • В настоящее времяERDDAP™Никогда не проверяйте, есть ли на удаленном сервере новая версия файла в локальном кэше. Если вам нужна эта функция, пожалуйста, напишите Крису. Джон на noaa.gov.
      • Хотя использование одних и тех же названий тегов может означать, что система копирования и система кэша используют одну и ту же базовую систему, это неверно.
        • Система копирования активно запускает задачи Thread для загрузки новых и измененных файлов каждый раз, когда набор данных перезагружается. Только файлы, которые были скопированы в локальный каталог, доступны черезERDDAP™набор данных.
        • Система кэша получает список удаленных файлов каждый раз, когда набор данных перезагружается, и делает вид, что все эти файлы доступны через файл.ERDDAP™набор данных. Интересно, что все удаленные файлы даже отображаются на /файлах / веб-страницах набора данных и доступны для загрузки. (Хотя, возможно, только после задержки, когда файл сначала загружается с удаленного сервера в локальный кэш.)
      • Наборы данных, использующие CacheSizeGB, могут извлечь выгоду из использованияnПотокиустановка более 1, поскольку это позволит набору данных загружать более 1 удаленного файла одновременно.
    • The<тег cachePartialPathRegex> - это редко используемый тег, который может указать альтернативу для набора данных.<PathRegex> (#патрегекс) . Дефолт является нулевым.

      • Используйте это, только если вы копируете весь набор данных по умолчанию.<cacheSizeGB> значение -1.<cacheSizeGB> значения >1, это будет проигнорировано, потому что это бессмысленно.
      • См. [документация для<PathRegex> (#патрегекс) Наставление о том, как построить регекс.
      • Если это указано, он будет использоваться каждый раз, когда набор данных перезагружается, за исключением первого раза, когда набор данных перезагружается в начале месяца.
      • Это полезно, когда удаленный набор данных хранится в лабиринте подкаталогов и когда подавляющее большинство этих файлов редко, если вообще когда-либо, изменяются. ()<кашель НАСА<кашель Например, вы можете указать<cachePartialPathRegex, который соответствует текущему году или текущему месяцу. Эти регексы очень сложно указать, потому что все частичные и полные названия путей должны соответствовать .<PartialPathRegex и потому, что<cachePartialPathRegex> должен работать с удаленными URL и локальными каталогами. Примером реальной жизни является:
            <cacheFromUrl>https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/</cacheFromUrl>  
\\>!-- \\[2020-10-21 This server is no longer reliably available.\\] For most types of remote directories, omit the filename (e.g., contents.html for Hyrax). -->
<fileDir>/u00/satellite/MUR41/</fileDir>
<fileNameRegex>\\*\\.nc</fileNameRegex>
<recursive>true</recursive>
<pathRegex>.\\*</pathRegex>
<cachePartialPathRegex>.\\*/v4\\.1/(|2018/(|01./))</cachePartialPathRegex>

Образец URL выше имеет файлы в подкаталогах на основе года. (например, 2018) и день в году (Например, 001, 002, ..., 365 или 366) . Обратите внимание, что<CachePartialPathRegex Начнем с .*, затем имеет специальный подкаталог, который является общим для удаленных URL-адресов и локальных каталогов, например, /v4\.1/ Затем есть серия вложенных групп захвата, где первый вариант - ничто. Второй вариант – это конкретное значение.

Приведенный выше пример будет соответствовать каталогам только в течение следующих 10 дней 2018 года, например: https://data.nodc.noaa.gov/ghrsst/GDS2/L4/GLOB/JPL/MUR/v4.1/2018/010/ \[2020-10-21 Этот сервер больше не доступен.\]
день 011, 012, ..., 019. (Посмотри.нормативная документацияиучебник по регексу.)
Если вам нужна помощь в создании<cachePartialPathRegex>, пожалуйста, напишите нам<CacheFromUrl > Крис. Джон на noaa.gov.

  • Общий подход: Если вы хотите использовать<cachePartialPathRegex>, не используйте его изначально, потому что вы хотитеERDDAP™Сначала загрузите все файлы. ПослеERDDAP™Загрузил все файлы, добавьте их в набор данныхdatasets.xml.  
Тысячи файлов

Если в вашем наборе данных много тысяч файлов,ERDDAP™Они могут медленно реагировать на запросы данных из этого набора данных. Здесь есть два вопроса:  

  1. Количество файлов в каталоге. Внутренне,ERDDAP™Работает с одинаковой скоростью независимо от того, находятся ли n файлов в одном каталоге или разбросаны по нескольким каталогам.   Но есть проблема: Чем больше файлов в данном каталоге, тем медленнее операционная система возвращает список файлов в каталоге. (в файл) тоERDDAP. Время отклика может быть О (n log n) . Трудно сказать, сколько файлов в одном каталоге слишком много, но 10 000, вероятно, слишком много. Таким образом, если ваша настройка генерирует много файлов, здесь может быть рекомендация: поместите файлы в логически организованные подкаталоги. (Например, станция или станция/год) .

Еще одна причина использовать подкаталоги: если пользователь хочет использоватьERDDAP?"files"Система поиска имени самого старого файла для станции X быстрее и эффективнее, если файлы находятся в подкаталогах станции/год, потому что нужно передавать гораздо меньше информации.

  1. Общее количество файлов. Для табличных наборов данных,ERDDAP™отслеживает диапазон значений для каждой переменной в каждом файле. Когда пользователь делает запрос,ERDDAP™Он должен прочитать все данные из всех файлов, которые могут содержать данные, соответствующие запросу пользователя. Если пользователь запрашивает данные с ограниченного времени (Например, один день или один месяц) ТогдаERDDAP™Вам не придется открывать слишком много файлов в вашем наборе данных. Но есть крайние случаи, когда почти каждый файл может иметь совпадающие данные. (Например, когда температура воды = 13,2C) . Поскольку это требуетERDDAP™Немного времени (частично время поиска на HDD, частично время чтения заголовка файла) Чтобы открыть данный файл (Больше, если в каталоге много файлов) Существует значительный штраф за время, если общее количество файлов, которыеERDDAP™Открытие должно быть очень большим. Даже открытие 1000 файлов занимает много времени. Таким образом, есть преимущества для периодической консолидации ежедневных файлов в большие куски. (1 станция в течение 1 года) . Я понимаю, что вы можете не хотеть делать это по разным причинам, но это приводит к гораздо более быстрым ответам. В крайних случаях (Например, я имею дело с набором данных GTSPP, который имеет ~ 35 миллионов исходных файлов.) Обслуживание данных из огромного количества исходных файлов нецелесообразно, посколькуERDDAPОтвет на простые запросы может занять несколько часов и использовать тонны памяти. Консолидация исходных файлов в меньшее число (Для ГЦПП у меня сейчас 720, 2 в месяц) ,ERDDAP™Они могут реагировать достаточно быстро. Видишь?Миллионы файлов
     

Н.Б. Твердые государственные приводы великолепны! Самый быстрый, простой и дешевый способ помочьERDDAP™Сделка с огромным количеством (маленький) Файлы должны использовать твердотельный диск. Видишь?Твердые государственные приводы великолепны!
 

Миллионы файлов
  • Некоторые наборы данных имеют миллионы исходных файлов.ERDDAP™С этим можно справиться, но со смешанными результатами.

    • Для запросов, которые включают только переменные, перечисленные в [<subsetVariables> (#subsetvariables) ,ERDDAP™Он имеет всю необходимую информацию, уже извлеченную из файлов данных и сохраненную в одном файле, поэтому он может реагировать очень быстро.
    • По другим просьбам,ERDDAP™Может сканировать набор данныхИнформация о кэшированном файлеИ выясните, что только некоторые файлы могут иметь данные, которые имеют отношение к запросу и, таким образом, быстро отвечают.
    • Но для других запросов (Например, температура воды = 18°C) где любой файл может иметь соответствующие данные,ERDDAP™Необходимо открыть большое количество файлов, чтобы увидеть, есть ли в каждом из них какие-либо данные, относящиеся к запросу. Файлы открываются последовательно. Любая операционная система и любая файловая система (кроме твердотельных накопителей) Это занимает много времени (такERDDAP™Медленно реагирует) И действительно завязывает файловую систему (такERDDAP™Медленно реагирует на другие запросы) .

К счастью, есть решение.

  1. Настройка набора данных на непубличныйERDDAP™ (Ваш персональный компьютер?) .
  2. Создать и запустить сценарий, который запрашивает серию.ncФайлы CF, каждый с большой частью набора данных, как правило, период времени (Например, все данные за определенный месяц.) . Выберите период времени, чтобы все полученные файлы были менее 2 ГБ. (Но, надеюсь, больше 1 ГБ) . Если набор данных имеет данные в реальном времени, запустите скрипт для регенерации файла за текущий период времени. (Например, в этом месяце) часто (Каждые 10 минут? Каждый час?) . Просьбы кERDDAP™для.ncФайлы CF создаютNetCDFv3.ncФайл, который используетCF Дискретная геометрия выборки (DSG) Структуры данных Ragged Array.
  3. УстановитьEDDTable FromNcCFFilesНабор данных для вашей публикиERDDAP™который получает данные от.nc (CF) Файлы.ERDDAP™Вы можете быстро извлечь данные из этих файлов. А так как сейчас их десятки или сотни (Вместо миллионов) файлов, даже еслиERDDAP™Нужно открыть все файлы, это можно сделать быстро.

Да, эта система требует некоторого времени и усилий для настройки, но она работает очень, очень хорошо. Большинство запросов данных обрабатываются в 100 раз быстрее, чем раньше. \[Боб знал, что это возможно, но это был Кевин О'Брайен, который первым сделал это и показал, что это работает хорошо. Сейчас, Боб использует это для набора данных GTSPP, который имеет около 18 миллионов исходных файлов.ERDDAP™В настоящее время обслуживает около 500.nc (CF) Файлы.\]

Н.Б. Твердые государственные приводы великолепны! Самый быстрый, простой и дешевый способ помочьERDDAP™Сделка с огромным количеством (маленький) Файлы должны использовать твердотельный диск. Видишь?Твердые государственные приводы великолепны!
 

Огромные файлы
  • Один огромный файл данных (Особенно большие файлы данных ASCII) Это может вызвать ошибку OutOfMemory. Если это проблема, то она должна быть очевидной, потому чтоERDDAP™Вы не сможете загрузить набор данных. Решение, если это возможно, заключается в разделении файла на несколько файлов. В идеале файл можно разделить на логические фрагменты. Например, если файл содержит данные за 20 месяцев, разделите его на 20 файлов, каждый из которых содержит данные за 1 месяц. Но есть и преимущества, даже если основной файл расщепляется произвольно. Этот подход имеет несколько преимуществ: а Это уменьшит объем памяти, необходимый для чтения файлов данных, до 1/20-го, поскольку за один раз читается только один файл. b) Часто,ERDDAP™Он может обрабатывать запросы намного быстрее, потому что он должен искать только один или несколько файлов, чтобы найти данные для данного запроса. с) Если сбор данных продолжается, то существующие 20 файлов могут оставаться неизменными, и вам нужно только изменить один маленький новый файл, чтобы добавить данные следующего месяца в набор данных.  
Проблемы FTP / Советы
  • Если вы FTP новые файлы данныхERDDAP™сервера в то время какERDDAP™Бежит, есть шанс, чтоERDDAP™Перезагрузка набора данных во время процесса FTP. Это происходит чаще, чем вы думаете! Если это произойдет, файл будет выглядеть действительным. (имеет действительное имя) Но файл не действителен. ЕслиERDDAP™пытается прочитать данные из этого недействительного файла, в результате ошибки файл будет добавлен в таблицу недействительных файлов. Это не хорошо. Чтобы избежать этой проблемы, используйте временное имя файла, например, ABC2005..nc\_TEMP .Тогда тест FileNameRegex (см. ниже) Укажет, что это не соответствующий файл. После завершения процесса FTP переименуйте файл в правильное имя. Процесс переименования приведет к тому, что файл станет актуальным в одно мгновение.
Файловое имя Extracts

\[Эта особенность замедляется. Пожалуйста, используйте\*\**Фильм псевдонимsourceNameВместо этого.\]
EDDTableFromFiles имеет систему для извлечения строки из каждого имени файла и использования ее для создания псевдопеременных данных. В настоящее время не существует системы для интерпретации этих строк как дат/времен. Существует несколько XML-тегов для настройки этой системы. Если вам не нужна часть или вся эта система, просто не указывайте эти теги или используйте значения «».

  • PreExtractRegex являетсярегулярное выражение (учебник) Используется для идентификации текста, который должен быть удален из начала имени файла. Удаление происходит только при совпадении регекса. Обычно это начинается с «^», чтобы соответствовать началу имени файла.
  • пост ExtractRegex - это обычное выражение, используемое для идентификации текста, который удаляется из конца имени файла. Удаление происходит только при совпадении регекса. Обычно это заканчивается на «$», чтобы соответствовать концу имени файла.
  • ExtractRegex Если присутствует, это регулярное выражение используется после preExtractRegex и postExtractRegex для идентификации строки, которая должна быть извлечена из имени файла. (Например, еслиstationID) . Если регекс не совпадает, используется все имя файла (минус предварительный выписка и пост выписка) . Используйте «.\*» для сопоставления всего имени файла, оставшегося после preExtractRegex и postExtractRegex.
  • колонка NameForExtract - это имя источника колонки данных для извлеченных строк. А.dataVariableс этимsourceNameДолжно быть вdataVariableсписок (с любым типом данных, но обычно струна) .

Например, если набор данных имеет файлы с именами, такими как XYZAble..ncXYZBaker.ncXYZCharlie.ncВы хотите создать новую переменную (stationID) при чтении каждого файла, который будет иметь значения идентификатора станции (Эйбл, Бейкер, Чарли, ...) Извлеченные из имен файлов, вы можете использовать эти теги:

  • <preExtractRegex>^XYZ</preExtractRegex> Начальный ^ — это регулярное выражение особого характера, котороеERDDAP™Поиск XYZ в начале имени файла. Это приводит к удалению XYZ, если он найден в начале имени файла. (Например, имя файла XYZAble.ncстановится способным.nc) .
  • <PostExtractRegex.nc$</postExtractRegex $ в конце - это обычное выражение особого характера.ERDDAP™В поисках.ncВ конце имени файла. Поскольку . является регулярным выражением особого характера (который соответствует любому персонажу) Он кодируется как \. здесь (потому что 2E является шестнадцатеричным числом символов для периода) . Это вызывает.ncЕсли он найден в конце имени файла, его нужно удалить. (Например, частичное имя файла способный.ncстановится способным) .
  • <ЭкстрактRegex>.</tractRegex> Регулярное выражение совпадает со всеми остальными персонажами (Например, частичное имя файла Able становится экстрактом для первого файла) .
  • <СтолбецNameForExtractstationID</columNameForExtract> Это говоритERDDAP™Создать новую колонку источника под названиемstationIDПри чтении каждого файла. Каждая строка данных для данного файла будет иметь текст, извлеченный из его имени файла. (Например, способный) Как ценность вstationIDколонна.

В большинстве случаев для этих тегов экстракта существует множество значений, которые дают одинаковые результаты — регулярные выражения очень гибкие. Но в некоторых случаях есть только один способ получить желаемые результаты.  

ПсевдоsourceNames

Каждая переменная в каждом наборе данныхERDDAP™имеет [<sourceName> (#sourcename) который определяет имя источника переменной. EDDTableFromFiles поддерживает несколько псевдоsourceNameкоторые извлекают ценность из другого места (Например, имя файла или значение глобального атрибута) и способствовать тому, чтобы это значение было столбцом постоянных значений для этой части данных. (Например, таблица данных этого файла) . Для этих переменных вы должны указать тип данных переменной через<DataType> (#тип данных) Тэг. Если извлеченная информация является строкой dateTime, вы указываете формат строки dateTime в строке dateTime.атрибут единицы. псевдоsourceNameВарианты следующие:  

глобальный:sourceNames

Глобальный атрибут метаданных в каждом файле исходных данных может быть представлен в виде столбца данных. Если переменная<sourceName> Имеет формат

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

Тогда, когдаERDDAP™считывает данные из файла,ERDDAP™Мы будем искать глобальный атрибут этого имени. (Например, PI) и создать колонку, заполненную значением атрибута. Это полезно, когда атрибут имеет разные значения в разных исходных файлах, потому что в противном случае пользователи будут видеть только одно из этих значений для всего набора данных. Например,

        <sourceName>global:PI</sourceName>

Когда вы продвигаете атрибут, чтобы быть данными,ERDDAP™удаляет соответствующий атрибут. Это уместно, потому что значение предположительно различно в каждом файле; в то время как в агрегированном наборе данныхERDDAP™Он будет иметь только одну ценность. При желании можно добавить новое значение для атрибута для всего набора данных, добавив<Att name="" атрибут Имя " новый ценность </att> для глобального набора данных [<addAttributes> (#addattributes) . Глобальные атрибуты, которыеERDDAP™требует, например, учреждения, необходимо добавить новое значение для атрибута.  

переменная:sourceNames

Атрибут метаданных переменной в каждом файле может быть повышен до столбца данных. Если переменная<sourceNameИмеет формат

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

Тогда, когдаERDDAP™считывает данные из файла,ERDDAP™будет искать указанный атрибут (Например, ID) указанного переменного (Например, инструмент) и создать колонку, заполненную значением атрибута. Родительская переменная (Например, инструмент) Не обязательно быть одним изdataVariables включены в определение набора данных вERDDAP. Например,

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

Это полезно, когда атрибут имеет разные значения в разных исходных файлах, потому что в противном случае пользователи будут видеть только одно из этих значений для всего набора данных.

Когда вы продвигаете атрибут, чтобы быть данными,ERDDAP™удаляет соответствующий атрибут. Это уместно, потому что значение предположительно различно в каждом файле; в то время как в агрегированном наборе данныхERDDAP™Он будет иметь только одну ценность. При желании можно добавить новое значение для атрибута для всего набора данных, добавив<Att name="" атрибут Имя " новый ценность </att> для переменной [<addAttributes> (#addattributes) . для атрибутов, которыеERDDAP™требует, например,ioos\_category (В зависимости от вашей настройки) Вы должны добавить новое значение для атрибута.

имя файлаsourceNames

Вы можете извлечь часть имени файла и продвигать его как столбец данных. Формат для этого псевдо [<sourceName> (#sourcename) это

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

Например,

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

Когда EDDTableFromFiles считывает данные из файла, он будет следить за именем файла. (Например, A201807041442.slcpV1.nc) соответствует указанному регулярному выражению ("регекс") и извлекать указанные (В этом случае первый) группа захвата (который является частью, окруженной скобками) Например, «201807041442». (Посмотри.нормативная документацияиучебник по регексу.) Регекс может быть определен как строка с окружающими цитатами или без них. Если регекс указан как строка с окружающими котировками, строка должна бытьСтруна в стиле JSON (с особыми персонажами, сбежавшими с персонажами) . Номер группы захвата обычно равен 1. (Первая группа захвата) Но это может быть любое число.  

имя путиsourceNames

Вы можете извлечь часть полного пути файла Имя (/directories/fileName.ext) Пусть это будет колонка данных. Формат для этого псевдо [<sourceName> (#sourcename) это

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

Например,

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

Когда EDDTableFromFiles считывает данные из файла, он гарантирует полное имя пути. (Например, /data/myDatasetID/BAY17/B201807041442.nc. Для этого теста разделители каталогов всегда будут'/'Никогда, никогда ") соответствует указанному регулярному выражению ("регекс") и извлекать указанные (В этом случае первый) группа захвата (который является частью, окруженной скобками) Например, «BAY17». (Посмотри.нормативная документацияиучебник по регексу.) Регекс может быть определен как строка с окружающими цитатами или без них. Если регекс указан как строка с окружающими котировками, строка должна бытьСтруна в стиле JSON (с особыми персонажами, сбежавшими с персонажами) . Номер группы захвата обычно равен 1. (Первая группа захвата) Но это может быть любое число.  

"0 файлов" сообщение об ошибке
  • Если бежишьГенерировать наборы данныхXmlилиDasDdsЕсли вы пытаетесь загрузить EDDTable из... Файлы Dataset inERDDAP™, и вы получаете сообщение об ошибке «0 файлов», указывающее, чтоERDDAP™найдено 0 совпадающих файлов в каталоге (Когда вы думаете, что в этом каталоге есть соответствующие файлы) :
    • Убедитесь, что файлы действительно находятся в этом каталоге.
    • Проверьте написание названия каталога.
    • Проверьте файл NameRegex. Очень, очень легко делать ошибки с регексами. Для целей тестирования попробуйте regex .\*, который должен соответствовать всем именам файлов. (Посмотри.нормативная документацияиучебник по регексу.)
    • Убедитесь, что пользователь, который запускает программу (Пользователь=tomcat (?) Для Tomcat/ERDDAP) У вас есть разрешение «читать» эти файлы.
    • В некоторых операционных системах (Например, SELinux) В зависимости от системных настроек пользователь, который запустил программу, должен иметь разрешение «читать» для всей цепочки каталогов, ведущих в каталог, в котором есть файлы.  
стандартизировать Что?
  • Когда любой подкласс EDDTableFromFiles объединяет набор исходных файлов, для данной переменной все исходные файлы должны иметь одинаковые значения атрибутов для нескольких атрибутов:scale\_factor,add\_offsetНеподписанный,missing\_value, \_FillValue и единицы. Подумайте об этом: если один файл имеет блоки скорости ветра = узлы, а другой имеет блоки скорости ветра = m / с, то значения данных из двух файлов не должны быть включены в один и тот же агрегированный набор данных. Таким образом, когда EDDTableFromFiles сначала создает набор данных, он считывает значения атрибутов из одного файла, а затем отклоняет все файлы, которые имеют разные значения для этих важных атрибутов. Для большинства коллекций файлов это не проблема, потому что атрибуты всех переменных согласованы. Однако для других коллекций файлов это может привести к тому, что 1%, 10%, 50%, 90% или даже 99% файлов будут отклонены как «плохие» файлы. Это проблема.

EDDTable From Files имеет систему для решения этой проблемы: стандартизация Что. Стандартизировать Настройка говорит EDDTableFromFiles стандартизировать файлы, как только он их читает, прежде чем EDDTableFromFiles смотрит на атрибуты, чтобы увидеть, являются ли они последовательными.

С другой стороны, если набор данных не имеет этой проблемы, не используйте стандартизацию. Что. стандартизировать Что такое потенциальные риски (обсужден ниже) и неэффективности. Поэтому, если вам не нужны функции стандартизации Нет необходимости сталкиваться с потенциальными рисками и неэффективностью. Самая большая неэффективность заключается в том, что различные стандарты Какие опции используются набором данных, это означает, что исходные файлы хранят данные значительно по-разному. (Например, с различнымиscale\_factorиadd\_offsetили со строками времени, использующими различные форматы) . Таким образом, для данного ограничения в запросе пользователя не существует способа дляERDDAP™создать ограничение на уровне одного источника, которое может быть применено ко всем исходным файлам. ТакERDDAP™Они могут применять ограничения только на более высоком уровне. ТакERDDAP™Необходимо прочитать данные из большего количества файлов, прежде чем применять ограничения более высокого уровня назначения. Запросы на наборы данных, которые используют стандартизацию Что требует больше времени для обработки.

Чтобы использовать эту систему, нужно указать

    <standardizeWhat>*standardizeWhat*</standardizeWhat>  

вdatasets.xmlДля EDDTable из... Набор данных файлов(в пределах<dataset> tag.

The стандартизировать Что? Значение указывает, какие изменения EDDTable FromFiles следует попытаться применить. Изменения представляют собой сумму некоторой комбинации:

  1. распаковать Это делает много общих и безопасных операций для стандартизации числовых столбцов в файлах:
    • Еслиscale\_factorи/илиadd\_offsetатрибуты присутствуют, удаляют их и применяют для распаковки значений данных.
    • Упакованные атрибуты (Например, real_min, actual_max,actual\_range,data\_min,data\_max, data\_range,valid\_min,valid\_max,valid\_range) , если присутствует, если переменная была упакована, и если значения атрибутов были упакованы (Это сложно, но достаточно надежно) .
    • Если \_FillValue и/илиmissing\_valueПрисутствуют, преобразуют эти значения данных вERDDAP"стандартные" недостающие значения: MAX\_VALUE для целых типов (например, 127 для байтов, 32 767 для коротких и 2 147 483 647 для интов, 9223372036854775807 Для длинных) Для двойников и поплавков.
    • Удалить старую \_FillValue и/илиmissing\_valueатрибуты (если есть) , и заменить их просто \_FillValue=\[тотERDDAP™Стандартное недостающее значение\].  
  2. Стандартизация числовых времен Если числовая колонка имеет числовые временные единицы в стиле CF (" Время с тех пор время ", например, "дни с 1900-01-01") Это преобразует дату Временные ценности в"seconds since 1970-01-01T00:00:00Z"Значения и изменения атрибутов единиц указывают на это. Если это выбрано и есть вероятность, что эта переменнаяscale\_factorилиadd\_offsetТакже необходимо выбрать #1.  
  3. Применять струнуmissing\_value
    Если столбец строки имеет \_FillValue и/илиmissing\_valueатрибуты, это преобразует эти значения в «» и удаляет атрибуты.  
  4. Найти числовойmissing\_value
    Если числовой столбец не имеет \_FillValuemissing\_valueатрибуты, это пытается идентифицировать неопределенное числоmissing\_value (Например, -999, 9999, 1e37f) и конвертировать его экземпляры в «стандартные» значения (MAX\_VALUE для целых типов, и NAN для двойных и плавающих) . Этот вариант имеет риск: если наибольшее или наименьшее действительное значение данных выглядит как недостающее значение (Например, 999) Затем эти действительные значения данных преобразуются в недостающие значения. (Например, NaN) .  
  5. Изменить строку "N/A" на "" Для каждого столбца струн преобразуйте несколько строк, обычно используемых для указания отсутствующего значения струны в «». В настоящее время это выглядит как «», «...», «-», «?», «???», «N/A», «NA», «None», «not applicable», «null», «unknown», «unspecified». Струнный поиск нечувствителен к регистру и применяется после того, как строки обрезаны. «Другого» и «Другого» в списке нет. Этот вариант имеет риск: Струны, которые вы считаете действительными, могут быть преобразованы в «».  
  6. Стандартизация по струнам ISO 8601 DateTimes Для каждого столбца струн попробуйте преобразовать не чисто числовые даты струн. (Например, «2 января 2018 года») Стандарт ISO 8601 String dateTimes ("2018-01-02") . Примечание Все значения данных для столбца должны использовать один и тот же формат, в противном случае эта опция не будет вносить никаких изменений в данный столбец. Этот вариант имеет риск: Если есть столбец со значениями строк, которые просто выглядят как общая дата Они будут преобразованы в ISO 8601 String dateTimes.  
  7. Стандартизация компактных дат ISO 8601 DateTimes Для каждой строки или колонки целочисленного типа попробуйте преобразовать чисто числовые даты строки. (Например, "20180102") Стандарт ISO 8601 String dateTimes ("2018-01-02") . Примечание Все значения данных для столбца должны использовать один и тот же формат, в противном случае эта опция не будет вносить никаких изменений в данный столбец. Этот вариант имеет риск: Если есть столбец со значениями, которые не являются компактной датой Времена, но похожие на компактные даты, будут преобразованы в ISO 8601 String dateTimes.  
  8. Стандартизировать единицы Это пытается стандартизировать строку единиц для каждой переменной. Например, "метры в секунду", "метр/секунда","m.s^-1","m s-1"«m.s-1» будет преобразован в «m.s-1». Это не меняет значения данных. Это хорошо работает для действительногоUDUNITSединицы строк, но могут иметь проблемы с недействительными или сложными строками. Вы можете справиться с проблемами, указывая конкретные пары из одного в другой.<СтандартизацияUdunits вERDDAP? \[кот\]/webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml файл. Пожалуйста, напишите любые изменения, которые вы вносите в Крис. John at noaa.gov, чтобы они могли быть включены в сообщения по умолчанию. Этот вариант имеет риск: Это может смешать некоторые сложные или недействительные единицы; однако вы можете использовать описанный выше обходной путь, чтобы обойти проблемы, если они возникают.  

Значение стандартизации по умолчанию Что такое 0, что ничего не делает.

Если вы меняете значение стандартизации Что, в следующий раз, когда набор данных будет перезагружен,ERDDAP™Перечитает все файлы данных для набора данных, чтобы восстановить мини-базу данных с информацией о каждом файле. Если в наборе данных много файлов, это займет много времени.

Примечания:

  • Сложная вещь - Стандартизировать Какая настройка используется для всех столбцов в исходном файле. Так, например, использование #2048 может успешно преобразовать столбец компактных струнных дат в ISO 8601 String dateTimes, но он также может ошибочно преобразовать столбец со струнами, которые просто выглядят как компактные даты.  
  • datasets.xmlи генерировать наборы данных Xml - Особенно сложно получить правильные настройки вdatasets.xmlЧтобы ваш набор данных работал так, как вы хотите. Лучший подход (как всегда) Это:
    1. ИспользоватьГенерировать наборы данныхXmlУказать значение стандартизации Что вы хотели бы использовать.
    2. ИспользоватьDasDdsдля обеспечения правильной загрузки набора данных и отражения стандартизации; Какие настройки вы указали.
    3. Проверьте набор данных вручную, когда он находится вERDDAP™Для обеспечения того, чтобы затронутые переменные работали так, как ожидалось.  
  • Риски - Варианты #256 и выше более рискованны, т.е. существует большая вероятность того, чтоERDDAP™Это приведет к изменениям, которые не должны быть сделаны. Например, опция #2048 может случайно преобразовать переменную со строками идентификатора станции, которые выглядят как «компактные» даты ISO 8601. (например, 20180102) Стандарт ISO 8601"extended"даты ("2018-01-02") .  
  • Медленно после смены... Поскольку ценность стандартизации Что изменяет значения данных, которые EDDTableFromFiles видит для каждого файла данных, если изменить стандартизацию Какая настройка, EDDTableFromFiles выкинет всю кэшированную информацию о каждом файле (который включает в себя min и max для каждой переменной данных в каждом файле) Перечитайте каждый файл данных. Если набор данных имеет большое количество файлов, это может занять много времени, поэтому для перезагрузки набора данных в первый раз потребуется много времени.ERDDAP™Перезагружает его после внесения изменений.  
  • Эвристика - Варианты #256 и выше используют эвристику для внесения своих изменений. Если вы столкнулись с ситуацией, когда эвристика принимает плохое решение, пожалуйста, напишите Крису описание проблемы. Джон в Ноаа. Правительство, чтобы мы могли улучшить эвристику.  
  • Альтернативы - Если один из вариантов стандартизации What не решает проблему для данного набора данных, вы можете решить проблему, сделав.ncмл. файлПараллельно каждый файл данных и определять изменения в вещах в файлах, чтобы файлы были последовательными. Затем расскажите EDDTable... Набор данных файлов для агрегирования.ncМл файлов.

Или использоватьNCOВносить изменения в файлы так, чтобы они были последовательными.

Отдельные колонны на год, месяц, дату, час, минуту, секунду

Довольно часто табличные файлы данных имеют отдельные столбцы для года, месяца, даты, часа, минуты, секунды. ПередERDDAP™v2.10 единственным решением было редактирование файла данных для объединения этих столбцов в единый столбец времени. сERDDAP™2.10+ Вы можете использовать [править]<sourceName>= выражение <sourceName> (#sourcename) рассказыватьERDDAP™Как объединить столбцы источника для создания унифицированного столбца времени, чтобы вам больше не приходилось редактировать исходный файл.

<skipHeaderToRegex>
  • [править]<skipHeaderToRegex (#skipheadertoregex) - Опционально. (Только для наборов данных EDDTableFromAsciiFiles и EDDTableFromColumnarAsciiFiles.)
    Когда EDDTableFromAsciiFiles считывает файл данных, он игнорирует все строки до и включая строку, которая соответствует этому обычному выражению. По умолчанию «», который не использует эту опцию. Примером является
    <skipHeaderToRegex>\\\*\\\*\\\* END OF HEADER.\\*<skipHeaderToRegex>  

которая будет игнорировать все линии до и включая линию, начинающуюся с "\*\** Конец руководителя".

Когда вы используете этот тег,<столбецNamesRow> и<FirstDataRow> действует так, как если бы заголовок был удален до прочтения файла. Например, вы бы использовали столбецNamesRow=0, если имена столбцов находятся в строке сразу после заголовка.

Если вы хотите использовать генерацию Наборы данных Xml с набором данных, который нуждается в этом теге:

  1. Создайте новый, временный, образец файла путем копирования существующего файла и удаления заголовка.
  2. Запуск генерирует Наборы данных Xml и указать этот образец файла.
  3. вручную добавить<skipHeaderToRegex> Tag to thedatasets.xmlкусок.
  4. Удалите временный образец файла.
  5. Используйте набор данных вERDDAP.
<skipLinesRegex>

Опционально. (Только для наборов данных EDDTableFromAsciiFiles и EDDTableFromColumnarAsciiFiles.)
Когда EDDTableFromAsciiFiles считывает файл данных, он игнорирует все строки, которые соответствуют этому обычному выражению. По умолчанию «», который не использует эту опцию. Примером является

    <skipLinesRegex>#.\\*<skipLinesRegex>  

Он игнорирует все строки, начинающиеся с «#».

Когда вы используете этот тег,<столбецNamesRow> и<FirstDataRow> действует так, как будто все соответствующие строки были удалены до прочтения файла. Например, вы можете использовать столбецNamesRow=0, даже если в начале файла есть несколько строк, начиная с «#».

EDDTableFromFiles скелет XML

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

EDDTableFromAsciiService

EDDTableFromAsciiService По сути, это скриншот. Он предназначен для работы с источниками данных, которые имеют простой веб-сервис для запроса данных. (Часто HTML форма на веб-странице) которые могут возвращать данные в структурированном формате ASCII. (Например, запятая или столбцовый формат ASCII, часто с другой информацией до и/или после данных.) .

EDDTableFromAsciiService является суперклассом всех классов EDDTableFromAsciiService. Вы не можете использовать EDDTableFromAsciiService напрямую. Вместо этого используйте подкласс EDDTableFromAsciiService для обработки определенных типов услуг:

В настоящее время другие виды услуг не поддерживаются. Но обычно относительно легко поддерживать другие услуги, если они работают аналогичным образом. Свяжитесь с нами, если у вас есть запрос.

Подробности

Следующая информация относится ко всем подклассам EDDTableFromAsciiService.

  • Ограничения -ERDDAP™Запросы табличных данных могут накладывать ограничения на любую переменную. Базовая служба может допускать или не допускать ограничения для всех переменных. Например, многие службы поддерживают ограничения только на названия станций, широту, долготу и время. Поэтому, когда подкласс EDDTableFromAsciiService получает запрос на подмножество набора данных, он передает как можно больше ограничений службе исходных данных, а затем применяет оставшиеся ограничения к данным, возвращенным службой, прежде чем передать данные пользователю.
  • Валидный диапазон - В отличие от многих других типов наборов данных, EDDTableFromAsciiService обычно не знает диапазона данных для каждой переменной, поэтому он не может быстро отклонять запросы на данные за пределами допустимого диапазона.
  • Отзывы о ASCII Text Response Когда EDDTableFromAsciiService получает ответ от текстовой службы ASCII, он должен подтвердить, что ответ имеет ожидаемый формат и информацию, а затем извлечь данные. Вы можете указать формат, используя различные специальные теги в фрагменте XML для этого набора данных:
    • <<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>><теги beforeData10> - Вы можете указать серию фрагментов текста (сколько хотите, до 10) что EDDTableFromAsciiService должен искать в заголовке текста ASCII, возвращенного службой<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>><До даты 10. Например, это полезно для проверки того, что ответ включает в себя ожидаемые переменные с использованием ожидаемых единиц. Последний тег перед данными, который вы указываете, идентифицирует текст, который происходит непосредственно перед началом данных.
    • <После данных - Это указывает текст, который EDDTableFromAsciiService будет искать в тексте ASCII, возвращенном службой, что означает конец данных.
    • <NoData - Если EDDTableFromAsciiService находит этот текст в тексте ASCII, возвращенном службой, он приходит к выводу, что нет данных, которые соответствуют запросу.

EDDTableFromAsciiService скелет XML

  <dataset type="EDDTableFromAsciiService..." datasetID\="..." active\="..." >
      <accessibleTo>...</accessibleTo> <!-- 0 or 1 -->
      <graphsAccessibleTo>auto|public</graphsAccessibleTo> <!-- 0 or 1 -->
      <reloadEveryNMinutes>...</reloadEveryNMinutes> <!-- 0 or 1 -->
      <defaultDataQuery>...</defaultDataQuery> <!-- 0 or 1 -->
      <defaultGraphQuery>...</defaultGraphQuery> <!-- 0 or 1 -->
      <addVariablesWhere>...</addVariablesWhere> <!-- 0 or 1 -->
      <fgdcFile>...</fgdcFile> <!-- 0 or 1 -->
      <iso19115File>...</iso19115File> <!-- 0 or 1 -->
      <onChange>...</onChange> <!-- 0 or more -->
      <sourceUrl>...</sourceUrl>
      <beforeData1>...<beforeData1> <!-- 0 or 1 -->
      ...
      <beforeData10>...<beforeData10> <!-- 0 or 1 -->
      <afterData>...<afterData> <!-- 0 or 1 -->
      <noData>...<noData> <!-- 0 or 1 -->
      <addAttributes>...</addAttributes> <!-- 0 or 1 -->
      <dataVariable>...</dataVariable> <!-- 1 or more -->
  </dataset>

EDDTableFromAsciiServiceNOS

EDDTableFromAsciiServiceNOS делает наборы данных EDDTable из услуг текстовых данных ASCII, предлагаемыхNOAA?Национальная океаническая служба (НОС) . Для получения информации о том, как работает этот класс и как его использовать, посмотрите суперкласс этого класса.EDDTableFromAsciiService. Вряд ли кому-то, кроме Боба Саймонса, понадобится использовать этот подкласс.

Поскольку данные в ответе от службы NOS используют столбцовый формат текста ASCII, переменные данных, отличные от широты и долготы, должны иметь специальный атрибут, который определяет, какие символы каждой строки данных содержат данные этой переменной, например,

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

 

EDDTableFromAllDatasets

EDDTableFromAllDatasets Это набор данных более высокого уровня, который содержит информацию обо всех других наборах данных, которые в настоящее время загружаются в ваш компьютер.ERDDAP. В отличие от других типов наборов данных, не существует спецификации дляallDatasetsнабор данныхdatasets.xml.ERDDAP™автоматически создает один набор данных EDDTableFromAllDatasets (сdatasetID=allDatasets) . Таким образом,allDatasetsДанные будут создаваться в каждомERDDAP™Установка будет работать одинаково в каждомERDDAP™установка.

TheallDatasetsDataset - это табличный набор данных. Он имеет ряд информации для каждого набора данных. Он имеет столбцы с информацией о каждом наборе данных, например,datasetID, доступно, учреждение, название, minLongitude, maxLongitude, minLatitude, maxLatitude, minTime, maxTime и т.д. Потому чтоallDatasetsявляется табличным набором данных, вы можете запросить его так же, как вы можете запросить любой другой табличный набор данных вERDDAP™Вы можете указать тип файла для ответа. Это позволяет пользователям искать наборы данных, представляющие интерес, очень мощными способами.  

EDDTableFromAsciiFiles

EDDTableFromAsciiFiles агрегирует данные из запятых, вкладок, полуколонов или разделённых по пространству табличных файлов данных ASCII.

  • Чаще всего файлы будут иметь имена столбцов в первой строке и данные, начинающиеся во второй строке. (Здесь первая строка файла называется строкой номер 1.) Но вы можете использовать<столбецNamesRow> и<FirstDataRow в вашемdatasets.xmlфайл для указания другого номера строки.
  • ERDDAP™позволяет строкам данных иметь разное количество значений данных.ERDDAP™предполагает, что недостающие значения данных являются конечными столбцами в строке.ERDDAP™присваивает стандартные недостающие значения для недостающих значений данных. (Добавлено v1.56)
  • С файлами ASCII легко работать, но они не являются наиболее эффективным способом хранения данных. Для большей эффективности сохраняйте файлы какNetCDFv3.ncфайлы (с одним измерением, «рядом», общим для всех переменных) Вместо этого. Ты можешьиспользоватьERDDAP™Для создания новых файлов.
  • Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Из-за полного отсутствия метаданных в файлах ASCII вам всегда нужно будет редактировать результаты GenerateDatasetsXml.
  • Предупреждение: когдаERDDAP™считывает файлы данных ASCII, если обнаруживает ошибку в заданной строке (Например, неправильное количество элементов) Он записывает предупреждающее сообщение ("Предупреждение: плохая линия (s) "... с перечнем плохих линий на последующих линиях") кlog.txt файлЗатем он продолжает читать остальные файлы данных. Таким образом, вы несете ответственность за периодический просмотр. (или написать сценарий для этого) для этого сообщения в журнале. txt для устранения проблем в файлах данных.ERDDAP™Он настроен таким образом, чтобы пользователи могли продолжать читать все доступные действительные данные, даже если некоторые строки файла имеют недостатки.  

EDDTable From AwsXmlFiles

EDDTable From AwsXmlFiles агрегирует данные с автоматической метеорологической станции (AWS) XML файлы данных с использованием WeatherBug Rest XML API (который больше не активен) .

EDDTable FromColumnarAsciiFiles

EDDTable FromColumnarAsciiFiles агрегирует данные из табличных файлов данных ASCII с столбцами фиксированной ширины.

  • Чаще всего файлы будут иметь имена столбцов в первой строке и данные, начинающиеся во второй строке. Первая строка в файле называется строкой #1. Но вы можете использовать<столбецNamesRow> и<FirstDataRow в вашемdatasets.xmlфайл для указания другого номера строки.

  • The<addAttributes> для каждого<dataVariable> для этих наборов данных ДОЛЖНЫ включать эти два специальных атрибута:

    • <Att name="StartColumn"> целое число <Att> - указывает столбец символов в каждой строке, которая является началом этой переменной данных.
    • <Att name="stopColumn"> целое число <Att> - указывает столбец символов в каждой строке, которая является 1 после окончания этой переменной данных.

Первая колонка символов называется колонкой #0. Например, для этого файла, который имеет временные значения, соответствующие значениям температуры:

      0         1         2        <-- character column number 10's digit
0123456789012345678901234567 <-- character column number 1's digit
time temp
2014-12-01T12:00:00Z12.3
2014-12-02T12:00:00Z13.6
2014-12-03T12:00:00Z11.0

Переменная времени должна иметь

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

Переменная времени будет иметь

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

Эти атрибуты должны быть указаны для всех переменных, кромефиксированная стоимостьиимя файла-источникпеременных.

  • С файлами ASCII легко работать, но они не являются эффективным способом хранения данных. Для большей эффективности сохраняйте файлы какNetCDFv3.ncфайлы (с одним измерением, «рядом», общим для всех переменных) Вместо этого. Ты можешьиспользоватьERDDAP™Для создания новых файлов.
  • Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Из-за сложности определения начальных и конечных позиций для каждого столбца данных и полного отсутствия метаданных в файлах ASCII вам всегда нужно будет редактировать результаты из GenerateDatasetsXml.  

EDDTable FromHttpGet

EDDTable FromHttpGet отличается от всех других типов наборов данныхERDDAP™в том, что у него есть система, посредством которой конкретные «авторы» могут добавлять данные, пересматривать данные или удалять данные из набора данных обычным способом.HTTP GETилиПостзапросы от компьютерной программы, скрипта или браузера. Набор данных запрашивается пользователями таким же образом, как и все другие наборы данных EDDTable.ERDDAP. Посмотрите описание суперкласса этого класса.EDDTable Из материаловДля того, чтобы почитать об особенностях, которые унаследованы от этого суперкласса.

Уникальные особенности EDDTableFromHttpGet описаны ниже. Вы должны прочитать весь этот начальный раздел и понять его; в противном случае у вас могут возникнуть нереалистичные ожидания или у вас могут возникнуть проблемы, которые трудно исправить.

Преднамеренное использование

Эта система предназначена для:

  • табличный (на месте) данные, а не сетчатые данные.
  • Данные реального времени - Цель состоит в том, чтобы позволить автору (Например, датчик, автоматизированный QC-скрипт или конкретный человек.) Чтобы внести изменения в набор данных (черезВставить или удалить команду) сделать эти изменения доступными дляERDDAP™пользователей менее чем за 1 секунду и, возможно, намного быстрее. Большая часть этой 1 секунды - сетевое время.ERDDAP™Обработать запрос можно примерно за 1 мс, а данные сразу доступны пользователям. Это абыстро,крепкийиНадежная система.
  • Почти любая частота данных - Эта система может принимать редкие данные. (Например, ежедневно) Очень частые данные (Например, данные 100 Гц) . Если вы оптимизируете систему, она может обрабатывать данные более высокой частоты. (10 кГц, если вы идете в крайности) .
  • Данные от одного датчика или набора аналогичных датчиков.
  • Версия/Воспроизводимая наука/DOIс- Ситуации, в которых нужно уметь вносить изменения в данные (Например, изменить флаг контроля качества) , знать, какой автор внес каждое изменение, знать временную метку, когда автор внес изменение, и (по запросу) Вы можете увидеть исходные данные до внесения изменений. Таким образом, эти наборы данных имеют правоDOIs. Потому что они встречаютDOIтребование, чтобы набор данных не менялся, за исключением агрегирования. Как правило, наборы данных в реальном времени не имеют права наDOIпотому что данные часто изменяются задним числом (Например, для целей QA/QC) .  

Как только данные находятся в наборе данных EDDTableFromHttpGet, любой пользователь может запросить данные таким же образом, как и данные из любого другого набора данных EDDTable.  

Экспериментальный: Будь осторожна.

Поскольку эта система является новой и поскольку потерянные данные об окружающей среде не могут быть повторно получены, вы должны рассматривать EDDTable FromHttpGet как экспериментальную. Если вы переходите от другой системы, запустите старую систему и новую систему параллельно, пока вы не будете уверены, что новая система работает хорошо. (недели или месяцы, а не только часы или дни) . Во всех случаях убедитесь, что ваша система отдельно архивирует URL-адреса .insert и .delete, которые отправляются в набор данных EDDTableFromHttpGet. (Даже если только в журналах Apache и / или Tomcat) По крайней мере, на некоторое время. И во всех случаях убедитесь, что файлы данных, созданные вашим набором данных EDDTableFromHttpGet, регулярно резервируются на внешние устройства хранения данных. (Обратите внимание, чторысь. может очень эффективно создавать резервные копии файлов данных, созданных EDDTableFromHttpGet.)
 

.insert and .delete

Для любого набора данных вERDDAP™Когда вы отправляете запрос наERDDAP™для подмножества данных в наборе данных вы указываете тип файла, который вы хотите для ответа, например, .csv,.htmlTable,.nc,.json. EDDTable FromHttp Get расширяет эту систему для поддержки двух дополнительных типов файлов, которые могут быть вставлены. (или изменить) или удалить данные в наборе данных:

  • вставить
    • Запрос отформатирован как стандартный ответ формы HTML, с парами ключ = значение, разделенными на '&'. Например, https://some.erddap.url/erddap/tabledap/myDataset**.insert**?stationID=46088&time=2016-03-30T12:37:55Z&latitude=10.1&longitude=-150.1&airTemp=17.23&waterTemp=12.3&author=JohnSmith\_someKey1
      рассказыватьERDDAP™Добавить или изменить данные дляstationID=46088 за указанное время.
    • Автором этого изменения является Джон Смит, а ключом является SomeKey1.
    • URL должен содержать действительные значения. (Недостающие ценности) Для всего этогоhttpПолучить требуемые переменные
    • Если значенияhttpТребуется Переменные в запросе (например,stationIDвремя) соответствовать значениям на строке уже в наборе данных, новые значения эффективно перезаписывают старые значения (Хотя старые значения по-прежнему доступны, если пользователь запрашивает данные из предыдущеговерсияиз набора данных) .
    • .insert URL никогда не должен включать &timestamp (ERDDAP™генерирует эту ценность) или &command= (Об этом сообщает .insert (Командование = 0) или .delete (Что такое командный 1 1) ) .
    • Если URL-адрес .insert не указывает значения для других столбцов, которые находятся в наборе данных, они считаются нативными отсутствующими значениями. (MAX\_VALUE для целочисленных типов данных, NaN для поплавков и дублеров и "" для строк) .  
    • .delete
      • Запрос отформатирован как стандартный ответ формы HTML, с парами ключ = значение, разделенными на '&'. Например, https://some.erddap.url/erddap/tabledap/myDataset**.delete**?stationID=46088&time=2016-03-30T12:37:55Z&author=JohnSmith\_someKey1
        рассказыватьERDDAP™Чтобы удалить данные дляstationID=46088 в указанное время.
      • Автором этого изменения является Джон Смит, а ключом является SomeKey1.
      • URL должен указыватьhttpПолучить требуемые переменныев запросе (например,stationIDвремя) . Если эти значения соответствуют значениям в строке, уже в наборе данных (которые обычно) Старые ценности эффективно удаляются. (Старые значения по-прежнему доступны, если пользователь запрашивает данные из предыдущего.версияиз набора данных) .
      • Нет необходимости указывать значения для не-HttpGetRequiredVariables, кроме автора, который необходим для аутентификации запроса.  

Подробности:

  • Запросы .insert и .delete отформатированы как стандартные ответы формы HTML, с парами ключ = значение, разделенными '&'. Ценности должны быть% кодируется. Таким образом, необходимо закодировать специальные символы в форму %HH, где HH — 2-значное шестнадцатеричное значение символа. Обычно нужно просто преобразовать несколько символов пунктуации: % в %25, & в %26, "в %22,<в %3C, = в %3D, > в %3E, + в %2B,|в %7С,\[в %5B,\]в %5D, в %20 и преобразовать все символы выше #127 в форму UTF-8, а затем в % кодировать каждый байт формы UTF-8 в формат %HH (Попросите программиста помочь) .
  • Запросы .insert и .delete должны включатьhttpПолучить требуемые переменныеНапример,stationIDи время. Для запросов вставки переменные, которые не указаны в запросе, считаются отсутствующими значениями. (MAX\_VALUE для целочисленных переменных, NaN для поплавковых и двойных переменных и пустая строка для струнных переменных) . Для запросов .delete значения для не-HttpGetRequired Переменные (кроме автора, что необходимо) игнорируются.
  • Запросы .insert и .delete должны включать имя автора и ключ автора через параметр в форме author= Автор__key Последний параметр в запросе. Требование, чтобы это было последним, гарантирует, что весь запрос был полученERDDAP. Только автор (Не ключ) Они будут храниться в файле данных. Вы должны указать список разрешенных Автор__key через глобальный атрибутhttpGetKeys
  • .insert и .delete параметры могут быть скалярными. (одиночный) значения или массивы любой длины в виде\[значение1, значение2, значение3, ..., значениеN\]. Для данного запроса все переменные с массивами должны иметь массивы с одинаковым числом значений. (Иначе это ошибка) . Если запрос имеет скалярные и массивные значения, скалярные значения реплицируются, чтобы стать массивами с той же длиной, что и указанные массивы, например, &stationID=46088 может рассматриваться какstationID=\[46088,46088,46088\]. Схемы являются ключом квысокая пропускная способность. Без массивов будет сложно вставить или удалить более 8 строк данных в секунду от удаленного автора. (Из-за всей накладной сети) . С помощью массивов будет легко вставить или удалить более 1000 строк данных в секунду с удаленного датчика.
  • .insert and .delete скачать (Без сообщения об ошибке) числа с плавающей точкой, когда ожидаются целые числа. В этих случаях набор данных округляет значения до целых чисел.
  • .insert and .delete скачать (Без сообщения об ошибке) целые числа и числа с плавающей точкой, которые находятся вне диапазона типа данных переменной. В этих случаях набор данных сохраняет значения какERDDAPРодные недостающие значения для этого типа данных (MAX\_VALUE для целых типов и NaN для поплавков и двойников) .  

Ответ

Если URL-адрес .insert или .delete удалится, код ответа HTTP будет 200. (Хорошо.) Ответом будет текст с.jsonобъект, например,

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

Обратите внимание, что метки времени имеют миллисекундную точность.

Если URL-адрес .insert или .delete не работает, вы получите код ответа HTTP, отличный от 200. (Хорошо.) Например, ошибка 403 Запрещено, если вы вводите неправильное значение ключа автора.ERDDAP™Отправляет код ответа HTTP (не, например, а.jsonформатированная ошибка) Потому что так делают в Интернете, и потому что ошибки могут произойти в любой точке системы. (Например, в сети, которая возвращает ошибку HTTP.) . Если ошибка произошла отERDDAP™Ответ может содержать текст (не.json) Более подробное объяснение того, что пошло не так, но код ответа HTTP (200 - Хорошо, все остальное - проблема) Это правильный способ проверить, удалось ли вставить .insert или .delete. Если проверка кода ответа HTTP невозможна или неудобна, найдите в тексте ответа «статус»: «успех», который должен быть надежным показателем успеха.

Log Files

Когда EDDTableFromHttpGet получает команды .insert и .delete, он просто добавляет информацию в соответствующий файл в наборе файлов журналов, каждый из которых представляет собой таблицу, хранящуюся в файле.Джон Линии файла CSV. Когда пользователь запрашивает данные,ERDDAP™быстро считывает соответствующие файлы журналов, применяет изменения в наборе данных в том порядке, в котором они были сделаны, а затем фильтрует запрос через ограничения пользователя, как и любые другиеERDDAP™Запрос данных. Разделение данных на различные файлы журналов, хранение различных фрагментов информации (Например, временная метка команды, и была ли команда вставлена или удалена.) и различные аспекты настройки набора данных, все это позволяетERDDAPхранить и извлекать данные из этого набора данных очень быстро и очень эффективно.  

Безопасность и автор

Каждая команда .insert и .delete должна включать &author= Автор__key как последний параметр, где ключ автора состоит из идентификатора автора (Вы выбрали: имя, инициалы, псевдоним, номер) Подчеркивание и секретный ключ. TheERDDAP™Администратор будет работать с авторами для создания списка действительных значений ключей автора, которые могут быть изменены в любое время. Когда EDDTableFromHttpGet получает команду .insert или .delete, он гарантирует, что ключ authorID является последним параметром и действителен. Поскольку это последний параметр, это указывает на то, что вся командная строка достиглаERDDAP™и не была усечена. Секретный ключ гарантирует, что только конкретные авторы могут вставлять или удалять данные в наборе данных.ERDDAP™Затем извлекает идентификатор автора и сохраняет его в переменной автора, чтобы каждый мог видеть, кто несет ответственность за данное изменение набора данных. Вставить и удалить команды можно только черезhttps: (безопасный) ERDDAP™URL. Это гарантирует, что передаваемая информация будет храниться в секрете во время транзита.  

временная метка

Как часть системы журнала, EDDTableFromHttpGet добавляет метку времени (время, когдаERDDAPПолучил запрос) Для каждой команды, которую он хранит в файлах журнала. Потому чтоERDDAP™генерирует временную метку, а не авторов, не имеет значения, вносят ли разные авторы изменения с компьютеров с часами, установленными в несколько разное время. Временная метка достоверно указывает время, когда было внесено изменение в набор данных.  

HTTP POST

  • Как насчет HTTP POST?
    HTTPПост является лучшей альтернативой (по сравнению сHTTP GET) для отправки информации от клиента на HTTP-сервер. Если вы можете, или если вы действительно хотите улучшить безопасность, используйте POST вместо GET для отправки информации.ERDDAP. POST более безопасен, потому что: с GET иhttpsURL передается безопасным способом, но весь URL (Включая параметры, включая ключ автора) будет написан для Apache, Tomcat иERDDAP™Файлы журналов, где кто-то может прочитать их, если файлы не защищены должным образом. С POST параметры передаются безопасным способом и не записываются в файлы журналов. POST немного сложнее для клиентов и не поддерживается так широко клиентским программным обеспечением, но языки программирования поддерживают его. Контент, который вы отправляете в набор данных через GET или POST, будет одинаковым, только отформатированным по-другому.  

httpТребуется Переменные глобальные атрибуты

Существенной частью того, что заставляет работать всю эту систему, является необходимый глобальный атрибут.httpТребуется Переменные, которые представляют собой разделенный запятой списокdataVariableИмена источников, которые однозначно идентифицируют ряд данных. Это должно быть как можно меньше и почти всегда будет включать временную переменную. Вот, например, рекомендуемыеhttpТребуется Переменные для каждого изCF Дискретная геометрия выборки (DSG) (Имена идентификаторов могут отличаться в вашем наборе данных.) :

  • Для серии Time:stationIDВремя

  • Для Trajectory: trajectoryID, время

  • Профиль: Время (Предполагая, что время - это профиль) глубина

  • Для серии Time Профиль:stationIDВремя (Предполагая, что время - это профиль) глубина

  • Для траектории Профиль: траектория, время (Предполагая, что время - это профиль) глубина

Взять в качестве примера TimeSeries: Введите команду .insert, которая включаетstationID=46088 и время =2016-06-23T19:53:00Z (и другие значения для других переменных) :

  • Если нет существующих данных для этой станции и этого времени, то эффект будет заключаться в добавлении данных в набор данных.
  • Если существуют данные для этой станции и того времени, то эффект будет заключаться в замене существующего ряда данных новыми данными. (Конечно, посколькуERDDAP™хранит журнал каждой команды, которую он получает, старые данные все еще находятся в журнале. Если пользователь запрашивает данные из версии набора данных до этого изменения, он увидит более старые данные.)
     

httpGetDirectoryСтруктура

  • httpДирекция Get Структура глобальных атрибутов и данных (Лог) Файловые имена
    Частью того, что делает эту систему эффективной, являетсяERDDAP™создает набор данных (вести) Файлы, каждый с разным фрагментом набора данных. Если они установлены хорошо,ERDDAP™Они смогут быстро реагировать на большинство запросов. Эта установка определяетсяhttpГлобальный атрибут GetDirectoryStructure, который представляет собой строку, которая выглядит как относительное имя файла, например, "stationID/10 лет», но на самом деле является спецификацией структуры каталога. Части этого указывают, как каталог и имена файлов для данных (вести) Файлы будут построены.

    • Если часть является целым числом (>= 1 1) Плюс временный период (миллисекунда, секунда, минута, час, дата, месяц, год или их множественное число) Например, через 10 лет набор данных EDDTableFromHttpGet займет временное значение для строки данных. (например, 2016-06-23T19:53:00Z) Вычислите время, усеченное до этой точности. (например, 2010 год) , и сделать папку или имя файла из этого.

Цель состоит в том, чтобы получить достаточно большой объем данных в каждый файл, но гораздо меньше, чем 2 ГБ.

  • В противном случае часть спецификации должна бытьdataVariable?sourceNameНапример,stationID. В этом случае EDDTableFromHttpGet сделает папку или имя файла из значения этой переменной для нового ряда данных. (Например, "46088") .

Потому что данные команд .insert и .delete хранятся в конкретных данных. (вести) EDDTableFromHttpGet обычно должен открыть только один или несколько данных. (вести) Файлы для поиска данных для данного запроса пользователя. Потому что каждая информация (вести) Файл имеет всю соответствующую информацию для своей части набора данных, для EDDTableFromHttpGet быстро и легко сделать конкретную версию. (или текущей версии) набор данных для данных в этом файле (и не должны генерировать запрашиваемую версию всего набора данных) .

Общие рекомендации основаны на количестве и частоте данных. Если предположить 100 байт на строку данных, то...

    | Frequency  <br>of measurements | Recommended  <br>httpGetDirectoryStructure |
| --- | --- |
| \\>=1 per second | *featureID*/1year/1day |
| \\>=1 per minute | *featureID*/2months |
| \\>=1 per hour | *featureID*/10years |
| \\>=1 per day | *featureID* |

Например, если структура каталогаstationID2 месяца и вы вставляете данные с двух станций (46088 и 46155) с временными значениями с декабря 2015 года по май 2016 года, EDDTableFromHttp Get будет создавать каталоги 46088 и 46155 и создавать файлы в каждом из них 2015-11..jsonl, 2016-01.jsonl, 2016-03.jsonl, 2016-05.jsonл (каждый из которых содержит данные за 2 месяца для соответствующей станции;) . В любое время в будущем, если вы используете .insert или .delete для изменения или удаления данных, например, для станции 46088 в 2016-04-05T14:45:00Z, EDDTableFromHttp Get добавит эту команду к 46088/2016-03.jsonl, соответствующие данные (вести) Файл. И очевидно, что в будущем можно добавлять данные для других станций в любое время, поскольку набор данных просто создаст дополнительные каталоги, необходимые для хранения данных с новых станций.

httpGetKeys

Каждый EDDTable Из Http Набор данных должен иметь глобальный атрибутhttpGetKeys, который определяет список разрешенных авторов и их секретные ключи как список, разделенный запятой. Автор__key Например, JohnSmith\_someKey1, HOBOLogger\_someKey2, QCScript59\_someKey3.

  • Автор_ключи чувствительны к регистру и должны быть полностью символами ASCII (#33 - #126, и без каких-либо запятых).
  • Ключи похожи на пароли, поэтому они должны быть >=8 символов, трудно угадать и без внутренних словарных слов. Вы должны относиться к ним так, как вы относитесь к паролям - держите их в секрете.
  • Первый символ «\» отделяет автора от ключа, поэтому имя автора не может включать символ «\». (Но ключ может) .
  • Любой автор может иметь один или несколько ключей автора, например, JohnSmith. Key1, Джон Смит Key7 и т.д.
  • Вы можете изменить значение этого атрибута в любое время. Изменения вступают в силу при следующей загрузке набора данных.
  • Эта информация будет удалена из глобальных атрибутов набора данных до ее публикации.
  • Каждый запрос к набору данных для вставки или удаления данных должен включать &author= Автор__key параметр. После проверки достоверности ключа,ERDDAP™Сохраняет авторскую часть (Не ключ) в файле данных.

Настройка

Вот рекомендуемые шаги для настройки набора данных EDDTableFromHttpGet:

  1. Сделайте основной каталог для хранения данных этого набора данных. Для этого воспользуемся /data/testGet/. Пользователь запускает GenerateDatasetsXml и пользователь запускаетERDDAP™Оба должны иметь доступ к этой директории.  

  2. Используйте текстовый редактор, чтобы сделать образец.jsonФайл CSV с расширением.jsonВ этом каталоге. Имя не важно. Например, его можно назвать образцом..jsonл Сделайте 2 строки.jsonl файл CSV с именами колонок на первой строке и фиктивными/типичными значениями (Правильный тип данных) на второй линии. Вот образец файла, который подходит для сбораfeatureTypeДанные TimeSeries, измеряющие температуру воздуха и воды. \[ДляfeatureType= Траектория, вы можете изменитьstationIDБыть траекторией.\]
    \[ДляfeatureType=Профиль, вы можете изменитьstationIDЧтобы быть профильным ID и добавить переменную глубины.\]

    \["stationID""time", "широта", "долгота", "воздух-темп", "вода-темп", "таймштамп", "автор", "командир"\] \["myStation", "2018-06-25T17:00:00Z", 0,0, 0,0, 0,0, 0,0, "SomeBody", 0\]

Примечание:

  • Фактические значения данных не имеют значения, потому что вы в конечном итоге удалите этот файл, но они должны быть правильного типа данных. Примечательно, что переменная времени должна использовать тот же формат, что и фактические данные из источника.
  • Для всех переменных,sourceNameбудет равнятьсяdestinationNameПоэтому используйте правильные/окончательные имена переменных, включая время, широту, долготу и иногда глубину или высоту, если переменные с этой информацией будут включены.
  • Почти всегда существует переменная, называемая временем, которая записывает время, когда было сделано наблюдение. Это может быть строка типа данных сЕдиницы, подходящие для струнного времени (например,yyyy-MM-dd'T'HH:mm:ss.SSSZ) или данные Тип двойной сединицы, подходящие для численного времени (Например, секунды с 197001-01T00:00:00Z или какое-либо другое базовое время) .
  • Три колонны (Как правило, последние три) Должно быть временная метка, автор, команда.
  • Колонка метки времени будет использоваться EDDTableFromHttpGet для добавления метки времени, указывающей, когда она добавила заданную строку данных в файл данных. Он будет иметь двойной тип данных и единицы секунды с 197001-01T00:00:00Z.
  • Колонка автора с строкой типа данных будет использоваться для записи того, какой автор предоставил данные этой строки. Авторизованные авторы определяютсяhttpГлобальный атрибут GetKeys. Хотя ключи указаны как Автор__key и находятся в URL-адресе запроса в этой форме, только часть автора сохраняется в файле данных.
  • Колонка команд с байтом dataType укажет, являются ли данные на этой строке вставкой. (0) или удаление (1 1) .  
  1. Запуск GenerateDatasets Xml и расскажи

    1. Тип набора данных EDDTableFromHttpGet
    2. Директория является (В этом примере) /данные/тест Вставай.
    3. Образцовый файл является (В этом примере) /data/testGet/startup.jsonл
    4. ThehttpТребуется Переменные являются (В этом примере) stationIDВремя Смотрите описаниеhttpПолучить требуемые переменныениже.
    5. Если данные собираются каждые 5 минут,httpВ этом примере GetDirectoryStructurestationID2 месяца. Смотрите описаниеhttpGetDirectoryСтруктураниже.
    6. ThehttpGetKeys

Добавить выход (кусок отdatasets.xmlдля набора данных) тоdatasets.xml.   4. Редактироватьdatasets.xmlДля этого набора данных, чтобы сделать его правильным и полным. Заменить все ???? с правильным содержанием.   5. Для<FileTableInMemory> настройка:

  • Установите это, если набор данных обычно получает частые запросы .insert и / или .delete. (Например, чаще, чем один раз каждые 10 секунд) . Это помогает EDDTableFromHttpGet быстрее реагировать на запросы .insert и/или .delete. Если вы установите это, EDDTableFromHttpGet все равно будет периодически сохранять файлTable и связанную с ним информацию на диск. (по мере необходимости примерно каждые 5 секунд) .
  • Сделать это ложным (по умолчанию) если набор данных обычно получает нечастые запросы .insert и/или .delete (Например, менее одного раза каждые 10 секунд) .  
  1. Примечание: Можно использовать<CacheFromUrl> и соответствующие настройки вdatasets.xmlдля EDDTable Из Http Получить наборы данных как способ сделать и поддерживать локальную копию удаленного набора данных EDDTableFromHttpGet на другомERDDAP. Однако в этом случае этот локальный набор данных отклонит любые запросы .insert и .delete.

Использование EDDTable Наборы данных HTTPGet

  • Авторы могут делать «запросы», которыевставлять данные или удалять данные из набора данных.  
  • После того, как реальные данные были вставлены в набор данных, вы можете и должны удалить исходный образец файла данных.  
  • Пользователи могут запрашивать данные из набора данных, как и для любого другого набора данных EDDTable.ERDDAP. Если запрос не содержит ограничения в столбце метки времени, то запрос получает данные из текущей версии набора данных. (файл журнала после обработки всех команд ввода и удаления и повторного сортированияhttpПолучить требуемые переменные) .  
  • Пользователи также могут делать запросы, которые относятся к наборам данных EDDTableFromHttpGet:
    • Если запрос включает в себя<или<= ограничение столбца метки времени, затемERDDAP™обрабатывает строки файла журнала вплоть до указанной временной метки. По сути, это временно удаляет все изменения, внесенные в набор данных после этого значения метки времени. Больше информации см.Версия.
    • Если запрос включает в себя >, >= или = ограничение столбца метки времени, например, &timestamp<=0, тоERDDAP™возвращает данные из файлов данных как есть, без обработки команд ввода и удаления.
  • В будущем мы предполагаем, что инструменты будут созданы. (нами? тобой?) для работы с этими наборами данных. Например, может быть скрипт, который считывает необработанные файлы журнала, применяет другое уравнение калибровки и генерирует / обновляет другой набор данных с этой полученной информацией. Обратите внимание, что сценарий может получить исходные данные через запрос наERDDAP™ (который получает данные в формате файла, с которым легче всего работать сценарию) и генерировать/обновлять новый набор данных через .insert "запросы"ERDDAP. Сценарий не требует прямого доступа к файлам данных, он может быть на любом авторском компьютере.  

Подробная информация о EDDTableFromHttpGet

Темами являются:

Вот подробная информация:

Не меняйте настройки!

После того, как набор данных был создан, и вы добавили к нему данные:

  • Не добавляйте и не удаляйтеdataVariableС.
  • Не меняйтеsourceNameилиdestinationNameизdataVariableС.
  • Не меняйте данные Тип этогоdataVariableС. Но вы можете изменитьdataVariableМетаданные.
  • Не меняйтеhttpТребуется Переменные глобальные атрибуты.
  • Не меняйтеhttpГлобальный атрибут GetDirectoryStructure.

Если вам нужно изменить что-либо из этих вещей, сделайте новый набор данных и перенесите все данные в новый набор данных.  

КРУД

В информатике четыре основные команды для работы с набором данных:Создавать, читать, обновлять, удалять (КРУД) . SQL, язык для работы с реляционными базами данных, имеет эквивалент в INSERT, SELECT, UPDATE и DELETE. В EDDTableFromHttpGet

  • .insert представляет собой комбинацию CREATE и UPDATE.
  • .delete - удаленный.
  • Обычная система для запроса подмножеств данных READ.

Таким образом, EDDTableFromHttpGet поддерживает все основные команды для работы с набором данных.  

  • Запросы .insert или .delete без ошибок возвращают код состояния HTTP=200 и объект JSON, например,
    {
"status":"success",
"nRowsReceived":1,
"stringTimestamp":"2018-03-26T15:34:05.552Z",
"numericTimestamp":1.522078445552E9
}

Значения двух временных меток относятся к одной и той же миллисекунде, которая является миллисекундой, которая будет храниться в переменной временных меток для строк данных, которые были вставлены или удалены.ERDDAP™В будущем название и форматирование этих пар ключевых значений не изменятся.ERDDAP™В будущем к объекту JSON могут быть добавлены дополнительные пары ключевых значений.  

Недействительные запросы

Недействительные запросы .insert или .delete возвращают код состояния ошибки HTTP, отличный от status=200, и в набор данных не будет внесено никаких изменений. Это включает в себя запросы с неправильной информацией об авторе, неправильные имена переменных, разные длины массивов для разных переменных, отсутствующие требуемые переменные, отсутствующие требуемые переменные значения и т. Д. Если запрос включает в себя более одного файла данных, возможно, что часть запроса будет успешной, а часть - неудачной. Однако это не должно быть проблемой, если датчик, отправляющий запрос, рассматривает любой сбой как полный сбой. Например, если вы скажетеERDDAP™вставить (или удалить) Дважды подряд одни и те же данные, в худшем случае эта информация хранится дважды, близко друг к другу в файле журнала. Трудно понять, как это может вызвать проблемы.  

HttpGet скорость

Запросы .insert или .delete (не считатьhttpнад головой) , шариковые фигуры скорость .insert или .delete 1ms per.insert с 1 строкой данных 2 мс на .insert с 10 строками данных в массивах (\[\])
3 мс на .insert с 100 строками данных в массивах (\[\])
13 мс на вставку с 1000 строками данных в массивах (\[\])
Ясно, что массивы являются ключом квысокая пропускная способность. Без массивов будет сложно вставить или удалить более 8 строк данных в секунду от удаленного автора. (Из-за всей накладной сети) . С помощью массивов будет легко вставить или удалить более 1000 строк данных в секунду с удаленного датчика.

С очень большими объемами данных по запросу вы достигнете предела Tomcat до максимальной длины запроса. (По умолчанию 8KB?) , но это может быть увеличено путем редактирования настройки maxHttpHeaderSize в вашем кот /conf/server.xml HTTP/1.1 Подключение.

КогдаERDDAP™Данные JSON Lines CSV (вести) Файлы, есть небольшой штраф времени по сравнению с чтением двоичных файлов данных. Мы чувствовали, что на этот раз штраф при чтении был разумной ценой, чтобы заплатить за скорость и надежность системы при записи данных. (который имеет первостепенное значение) .

SSD

Для большей скорости,использоватьТвердотельный двигатель (SSD) для хранения данных. Они имеют гораздо более быстрое время доступа к файлам.<0,1 мс), чем жесткие диски (3 - 12 мс) . Они также имеют более высокую скорость передачи данных. (200 - 2500 Мб/с) чем жесткие диски (~200 Мб/с) . За последние годы их стоимость значительно снизилась. Хотя ранние SSD имели проблемы после большого количества записей в данный блок, эта проблема теперь значительно уменьшена. Если вы просто используете SSD для записи данных один раз, прочитайте его много раз, даже SSD потребительского уровня. (Это значительно дешевле, чем SSD корпоративного уровня.) Она должна длиться долго.

Настойчивый

Мы постарались сделать эту систему максимально простой в работе и надежной.

  • Система предназначена для того, чтобы иметь несколько потоков (Например, датчик, автоматизированный сценарий QC и человек.) Одновременно работает над одним и тем же набором данных и даже над одним и тем же файлом. Большая часть этого становится возможной благодаря использованию подхода к хранению данных с помощью файла журнала и очень простого типа файла.Джон Линии файлов CSVДля хранения данных.
  • Еще одним огромным преимуществом JSON Lines CSV является то, что если файл когда-либо будет поврежден (Например, недействительный из-за ошибки в строке) Легко открыть файл в текстовом редакторе и исправить проблему.
  • Другим преимуществом является то, что если в файле есть ошибка на строке, система все равно может прочитать все данные на строках до и после строки ошибки. И система все еще может регистрировать дополнительную информацию .insert и .delete.
  • Огромное преимущество использования доступных стандартных файлов (По сравнению с реляционной базой данных или Cassandra или другим программным обеспечением) : Нет другого программного обеспечения, которое должно поддерживаться и которое должно работать для хранения или извлечения данных. И легко создавать резервные копии стандартных файлов в любое время и поэтапно, потому что данные находятся в кусках. (Через некоторое время изменится только файл текущего времени для каждой станции.) . В отличие от этого, для создания внешних резервных файлов из баз данных и из Cassandra требуются значительные усилия и время простоя системы.  
Системная надежность

Разумно ожидать, что один серверERDDAP™иметь время безотказной работы 99,9% - это около 9 часов простоя в год (Вы можете использовать это в одну плохую ночь!) . Если вам повезет, вы можете получить 99,99% времени безотказной работы. (53 минуты простоя в год) Поскольку только несколько перезагрузок для обновлений займут много времени. Придется принимать крайние меры (отдельный резервный сервер, источник бесперебойного питания, резервное кондиционирование воздуха, персонал 24x7x365 для мониторинга сайта и т.д.) У вас есть небольшой шанс на 99,999% безотказной работы (5,25 минут простоя в год) . Даже тогда крайне маловероятно, что вы достигнете 99,999% времени безотказной работы. (или 99,99%) Часто проблемы находятся вне вашего контроля. Например, Amazon Web Service и Google предлагают удивительно надежные веб-сервисы, но большая часть из них иногда не работает в течение нескольких часов.

Лицом к лицу, все хотятERDDAP™100% безотказной работы или, по крайней мере, хваленые «шесть девяток» (99.9999% времени безотказной работы равняется 32 секундам простоя в год) Но вы не получите его, независимо от того, сколько времени, усилий и денег вы тратите.

НоERDDAP™Время безотказной работы здесь не настоящая цель. Цель – построить надежный система Тот, который не теряет данных. Это решаемая проблема.

Решение заключается в том, чтобы встроить отказоустойчивость в компьютерное программное обеспечение, которое отправляет данные наERDDAP. В частности, это программное обеспечение должно поддерживать очередь данных, ожидающих, чтобы пойти кERDDAP. Когда данные добавляются в очередь, программное обеспечение должно проверить ответ.ERDDAP. Если ответ не включает полученные данные. Никаких ошибок, тогда программное обеспечение должно оставить данные в очереди. Когда больше данных генерируется и добавляется в очередь, программное обеспечение должно снова попытаться вставить данные в очередь. (Возможно, с помощью\[\]система) . Это будет иметь успех или провал. Если это не удастся, он попробует снова позже. Если вы пишете программное обеспечение, чтобы оно работало таким образом, и если программное обеспечение готово стоять в очереди на несколько дней данных, у вас действительно есть хороший шанс загрузить 100% данных датчика.ERDDAP. И вы сделаете это без больших усилий или затрат.

\[Справочная информация: Мы не думали об этом.Именно так компьютерные сети достигают надежности. Компьютерные сети по своей природе ненадежны. Таким образом, когда вы передаете файл с одного компьютера на другой, отправляющее программное обеспечение знает / ожидает, что некоторые пакеты могут быть потеряны. Если он не получает надлежащего подтверждения для данного пакета от получателя, он отправляет потерянный пакет. При таком подходе относительно простое программное обеспечение отправителя и получателя может создать надежную систему передачи файлов поверх ненадежной сети.\]

Почему файлы JSON Lines CSV?

Использование EDDTableFromHttpGetДжон Линии файлов CSVДля хранения данных. Причины таковы:

  • Основная причина заключается в том, что простота файлов JSON Lines CSV обеспечивает быстрый, простой и надежный способ записи нескольких потоков в данный файл. (Например, путем синхронизации имени файла) .
  • Если файл JSON Lines CSV когда-либо был поврежден (Например, недействительный из-за ошибки в строке) EDDTable FromFromHttpGet все еще может считывать все данные на всех строках до и после строки ошибки. И система .insert и .delete может продолжать добавлять новые данные в файл данных.
  • Поскольку CSV-файлы JSON Lines являются файлами ASCII, если файл когда-либо был поврежден, его легко исправить. (в текстовом редакторе) .
  • JSON Lines поддерживает CSV Струны Unicode.
  • JSON Lines CSV поддерживает строки переменной длины (не ограничивается некоторой максимальной длиной) .
  • JSON Lines CSV поддерживает 64-битные целые числа (долго) .
  • Формальный характер и дополнительный синтаксис JSON Lines CSV (Старая школа CSV) Это дает дополнительную уверенность в том, что данная линия не была повреждена.

Изначально мы пытались использовать.nc3 файла с неограниченным размером. Однако были проблемы:

  • Основной проблемой было: Не существует надежного способа позволить нескольким потокам писать на.nc3 файл, даже если потоки взаимодействуют, выполняя записи синхронизированным способом.
  • Если.nc3 файл становится поврежденным, система .insert и .delete не может продолжать использовать файл.
  • Потому что.nc3 файла являются двоичными, если файл поврежден (Что они делают из-за многопоточной проблемы) Их чрезвычайно трудно или невозможно исправить. Нет инструментов, которые могли бы помочь с ремонтом.
  • CF не может указать кодировку строк, поэтому нет официального способа поддержки Unicode, например, кодирования UTF-8. Мы пытались заставить CF поддерживать атрибут \_Encoding, но не смогли добиться прогресса. (Unidata, к их чести, поддерживает атрибут \_Encoding.)
  • .nc3 файла поддерживают только строки фиксированной длины. Опять же, мы пытались получить CF иUnidataОни поддерживали струны переменной длины, но не могли добиться прогресса.
  • .nc3 файла не поддерживают простой способ отличить односимвольные переменные от струнных. Опять же, мы пытались получить CF иUnidataПоддерживать систему для различения этих двух типов данных, но не удалось добиться какого-либо прогресса.
  • .nc3 файла поддерживают только 8-битные символы с неопределенной кодировкой. Опять же, мы пытались получить CF иUnidataподдерживать систему для уточнения кодирования, но не смогли добиться какого-либо прогресса.
  • .nc3 файла не поддерживают 64-разрядные целые числа (долго) . Опять же, мы пытались получить CF иUnidataПоддерживать систему долго, но не смогли добиться прогресса.  
Версия

Потому что EDDTable Из Http Получите журнал всех изменений в наборе данных с меткой времени и автором каждого изменения, он может быстро воссоздать этот набор данных в любой момент времени. В каком-то смысле есть версия на любой момент времени. Если запрос пользователя на данные включает временную метку<= ограничение, например, &timestamp<=2016-06-23T16:32:22.128Z (любой момент времени) но без ограничения автора или приказа,ERDDAP™ответит на запрос, сначала сгенерировав версию набора данных на данный момент времени. Тогда,ERDDAP™применяет другие ограничения пользователя, как и при любом другом запросе данныхERDDAP. EDDTableFromHttpGet настроен так, что этот процесс очень быстрый и эффективный, даже для очень больших наборов данных.

Аналогичным образом, пользователь может узнать, когда набор данных был в последний раз обновлен, запросив ...?timestamp&timestamp=max (временная метка) неясный ()

И для любого запроса данных, для любой версии набора данных пользователи могут видеть, какой автор внес какие изменения, и когда они их внесли.

Данная система позволяетВоспроизводимая наукапотому что любой человек в любое время может запросить данные из версии набора данных в любой момент времени. Эта мелкозернистая версия невозможна с любой другой системой, о которой мы знаем. Основной механизм очень эффективен, поскольку не требуется дополнительного пространства для хранения, а затраты на обработку действительно минимальны.

Не у всех есть потребность в этом типе мелкозернистых версий, но это чрезвычайно полезно, возможно, необходимо, в контексте большой организации управления данными. (Например, OOI, Earth Cube, Data One иNOAANCEI) где набор данных может иметь несколько авторов (Например, датчик, автоматизированный QC-скрипт и человеческий редактор.) .

\[История: Потребность в такого рода версиях впервые появилась у меня (Бобби) Когда мы читали и обсуждали OOI в 2008 году. В то время у OOI была громоздкая, медленная, неэффективная система для версий на основе Git. Git отлично подходит для того, для чего он был разработан, но не для этого. В 2008 году, во время обсуждения OOI, я разработал обширную, эффективную альтернативную OOI-систему для управления данными, включая многие функции, которые я добавил.ERDDAP™С тех пор и в том числе эта система. В то время и с тех пор OOI была привержена своей системе версий и не интересовалась альтернативами. В 2016 году другие аспекты этого плана вступили в силу, и я начал его реализовывать. Поскольку было много перерывов в работе над другими проектами, я не заканчивал до 2018 года. Даже сейчас мне неизвестно о какой-либо другой научной системе данных, которая предлагает такой быстрый и легкий доступ к версии данных из любой точки времени, для часто меняющихся наборов данных. Простые файловые системы этого не предлагают. Относительные базы данных — нет. Кассандра - нет.\]

HTTPS скачать и удалить
  • Как насчет HTTPS PUT и Delete?
    Протокол передачи гипертекста (HTTP) является основой Всемирной паутины и причиной того, что URL-адреса веб-страниц начинаются с " http://" или "" https://" . HTTPS - это HTTP с дополнительным уровнем безопасности. Каждый день браузеры, скрипты и компьютерные программы создают миллиарды HTTP. (S) Встать Запрос на получение информации из удаленных источников. HTTP (S) включает в себя и другиеглаголыОсобенно PUT (Чтобы перенести данные на сервер) и удалять (Чтобы удалить данные с сервера) . Да, PUT и DELETE — это правильный способ вставлять данные в набор данных и удалять их через HTTP. (S) . GET поддерживается любым программным обеспечением, которое может работать с HTTP. (S) . С GET действительно легко работать. Все уже знают, как работать с GET, и многие знают, как использовать POST. (которые могут быть использованы практически таким же образом, как и) Мы создали EDDTableFromHttpGet для работы с GET и POST. Очень мало людей (Немногие программисты) Мы всегда работали с PUT и DELETE. PUT и DELETE обычно поддерживаются только компьютерными языками, поэтому для их использования требуется искусная программа. Таким образом, PUT и DELETE обычно являются гораздо более громоздким подходом, учитывая то, как развивались инструменты.  
HttpGet Заметки
  • Заметки
    • Нет.dataVariableМожно использовать dataType=char. Вместо этого используйте dataType=String. Если вам действительно нужен dataType=char, напишите Крису. Джон на noaa.gov.  
Спасибо.
  • Спасибо за основную идею.
    Основная идея для EDDTableFromHttpGet (То есть, используяHTTP GETзапрос на добавление данных в набор данных) Это от UCAR (NCAR?) Облачные сервисы передачи данных в реальном времени (Слова) Проект. Формат параметров в запросе (повторяющийся Имя = значение Разделенный &'s) Это тот же стандартный формат, который используется HTML-формами на веб-страницах. Это простая и блестящая идея и тем более потому, что она идеально сочетается сERDDAPсуществующая система для работы с табличными данными. Идея очевидна задним числом, но я (Бобби) Не думал об этом. EDDTable FromHttp Используйте эту основную идею в сочетании с нашими идеями о том, как ее реализовать, чтобы создать систему, которая будет работать.ERDDAP™для загрузки данных. Помимо основной идеи использования GET для ввода данных в систему, реализация EDDTableFromHttpGet полностью отличается и полностью независима от CHORDS. (Например, файлы журналов, фрагментация данных, другая система безопасности, поддержка CRUD, воспроизводимые данные) . Наше знакомство с CHORDS было всего лишь вебинаром. Мы не смотрели на их код и не читали об их проекте, потому что сразу поняли, что хотим внедрить систему по-другому. Но мы благодарны им за основную идею. Полная ссылка на слова является Daniels, M.D., Kerkez, B., Chandrasekar, V., Graves, S., Stamps, D.S., Martin, C., Dye, M., Gooch, R., Bartos, M., Jones, J., Keiser, K. (2014 год) . Облачные сервисы обработки данных в реальном времени для Geosciences (Слова) программное обеспечение. UCAR/NCAR — Лаборатория наблюдения Земли. https://doi.org/10.5065/d6v1236q
     

EDDTable FromHyraxФайлы

EDDTable FromHyraxФайлы (обесцененный) агрегирует файлы данных с несколькими переменными, каждая с одним или несколькими общими размерами (Например, время, высота (или глубина) Широта, долгота) и обслуживается аHyrax OPeNDAPсервер.

  • Данный тип данных является Обнародовано . Новое и более общее решение заключается в использованиикэш Вариант FromUrl для EDDTable Из материалов (или вариант) , который делает локальную копию удаленных файлов и обслуживает данные из локальных файлов. The<Опция cacheFromUrl> может использоваться с любым типом табличного файла данных. **
    Если вы не можете заставить это работать по какой-то причине, напишите Крису. Джон на noaa.gov. Если до 2020 года жалоб не будет, этот тип набора данных может быть удален. **
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.
  • В большинстве случаев каждый файл имеет несколько значений для самого левого. (первый) Например, измерение времени.
  • Файлы часто (Но не обязательно) имеют одно значение для других измерений (Например, высота (или глубина) Широта, долгота) .
  • Файлы могут иметь переменные символов с дополнительным измерением. (Например, nCharacters) .
  • HyraxСерверы могут быть идентифицированы как «/dods-bin/nph-dods/» или «/opendap/» в URL.
  • Этот класс скриншотовHyraxвеб-страницы со списками файлов в каждом каталоге. В связи с этим он очень специфичен для нынешнего формата.HyraxВеб-страницы. Мы постараемся приспособитьсяERDDAP™Если и когда будущие версииHyraxИзмените порядок перечисления файлов.
  • The<Настройка fileDir> игнорируется. Поскольку этот класс загружает и делает локальную копию каждого удаленного файла данных,ERDDAP™Вынуждает файл Чтобы быть BigParent Директория /копия/ datasetID /.
  • Для<sourceUrl>, используйте URL базового каталога набора данных вHyraxсервера, например, <sourceUrl> http://edac-dap.northerngulfinstitute.org/dods-bin/nph-dods/WCOS/nmsp/wcos/ </sourceUrl> (Но поставьте его на одну линию) (К сожалению, этот сервер больше не доступен.) . ThesourceUrlВеб-страница обычно имеет ""OPeNDAPСерверный индекс\[название\]"наверху.
  • Поскольку этот класс всегда загружает и делает локальную копию каждого удаленного файла данных, вы никогда не должны заворачивать этот набор данных.EDDTableCopy.
  • Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.
  • Смотрите примеры 1D, 2D, 3D и 4D дляEDDTable FromNcFiles.  

EDDTable FromInvalidCRAFiles

EDDTable FromInvalidCRAFiles агрегированные данные отNetCDF (v3 или v4) .ncФайлы, которые используют конкретный, недействительный вариант CF DSG Contiguous Ragged Array (КРА) Файлы. ХотяERDDAP™Поддерживает этот тип файла, это недействительный тип файла, который никто не должен начинать использовать. Группы, которые в настоящее время используют этот тип файла, настоятельно рекомендуется использовать.ERDDAP™для создания действительных файлов CF DSG CRA и прекращения использования этих файлов.

Подробности: Эти файлы имеют несколько переменных размера строки, каждый с атрибутом sample_dimension. Файлы не являются CF-стандартными файлами, потому что множественный образец (обс) Размеры должны быть декодированы и связаны друг с другом этим дополнительным правилом и обещанием, которое не является частью спецификации CF DSG: "Вы можете связать заданное, например, значение температуры (размерность temp\obs) с заданным значением глубины (z\_obs размерность, размерность с наибольшим количеством значений) , потому что: температурный ряд\_size (Для определенного набора) будет равно либо 0, либо соответствующему ряду глубины (для этого каста) (Это правило) . Таким образом, если температурный ряд \_size не равен 0, то значения n температуры для этого отлива непосредственно относятся к значениям n глубины для этого отлива. (Это обещание) "

Другая проблема с этими файлами: переменная Principal\_Investigator row\_size не имеет атрибута sample\_dimension и не следует вышеупомянутому правилу.

Образцы файлов для этого типа набора данных можно найти в https://data.nodc.noaa.gov/thredds/catalog/ncei/wod/ \[2020-10-21 Этот сервер больше не доступен\].

Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Первое, что генерирует наборы данных Xml делает для этого типа набора данных после того, как вы ответите на вопросы, распечатайте ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.  

EDDTableFromJsonlCSVFiles

EDDTableFromJsonlCSVFiles агрегированные данные отДжон Линии файлов CSV. Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

  • Как говорит jsonlines.org, этот формат «лучше, чем CSV». (И юридически, как федеральный служащий, я не могу согласиться или не согласиться с ними - насколько это безумно?) . CSV никогда не была официально определена и затруднена историческим багажом, связанным с его связью с оригинальными программами электронных таблиц. Для сравнения, JSON Lines CSV полностью определена и имеет преимущества от подключения к широко используемому стандарту JSON, который, в свою очередь, выигрывает от его подключения к стандарту JSON.JavaСценарий иJava. Примечательно, что существует полная поддержка длинных целых чисел и символов Unicode в строках, а также четкий способ включения других специальных символов. (Особенно Tabs и Newlines) внутри струн.

Этот формат особенно хорош для наборов данных, где необходимо периодически добавлять дополнительные строки в конец данного файла данных. По этой причине и другие (смотреть выше) ,EDDTable FromHttpGetJson Lines использует CSV файлы для хранения данных.

  • Предполагается, что входные файлы кодируются UTF-8. Однако, учитывая, что dddd Формат для кодирования специальных символов (Например, \u20ac является кодировкой для символа евро.) , у вас есть возможность записывать файлы так, чтобы они содержали только 7-битные символы ASCII с помощью \u dddd Кодирование всех символов выше #127.  
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатаете ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

  • Предупреждение: когдаERDDAP™читать JSON Линии файлов данных CSV, если обнаруживается ошибка на заданной строке (Например, неправильное количество элементов) Он записывает предупреждающее сообщение ("Предупреждение: плохая линия (s) "... с перечнем плохих линий на последующих линиях") кlog.txt файлЗатем он продолжает читать остальные файлы данных. Таким образом, вы несете ответственность за периодический просмотр. (или написать сценарий для этого) для этого сообщения в журнале. txt для устранения проблем в файлах данных.ERDDAP™Он настроен таким образом, чтобы пользователи могли продолжать читать все доступные действительные данные, даже если некоторые строки файла имеют недостатки.  

EDDTableFromMultidimNcFiles

EDDTableFromMultidimNcFiles агрегированные данные отNetCDF (v3 или v4) .nc (или.ncмл) файлы с несколькими переменными, каждая из которых имеет одно или несколько общих измерений. Файлы могут иметь переменные символов с дополнительным измерением или без него. (Например, Стринг14) . Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

  • Если файлы являются многомерными вариантами CF DSG, используйте этот тип набора данных вместоEDDTable FromNcCFFiles.  
  • Для новых табличных наборов данных из.ncФайлы, используйте эту опцию, прежде чем пробовать старыеEDDTable FromNcFiles. Некоторые преимущества этого класса:
    • Этот класс может читать больше переменных из более широкого спектра файловых структур. Если вы указали размеры CSV (сепарированный запятой список имен измерений) Генерировать наборы данных Xml или<CCV> в пределахdatasets.xmlинформацию для одного из этих наборов данных, затемERDDAP™Он будет читать только переменные в исходных файлах, которые используют некоторые или все из этих измерений, а также все скалярные переменные. Если измерение находится в группе, необходимо указать его полное наименование, например: " Название группы/измерение ".
    • Этот класс часто может очень быстро отклонить файлы, если они не соответствуют ограничениям запроса. Поэтому чтение данных из больших коллекций часто идет намного быстрее.
    • Этот класс обрабатывает истинные переменные (неструнные переменные) Правильно.
    • Этот класс может обрезать струнные переменные, когда создатель не использовал Netcdf-java. (который добавляет char #0, чтобы отметить конец строки) .
    • Этот класс лучше подходит для работы с отдельными файлами, в которых отсутствуют определенные переменные или размеры.
    • Этот класс может удалять блоки строк с отсутствующими значениями, указанными дляCF Дискретная геометрия выборки (DSG) Многомерные массивные файлы
       
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатаете ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

Группа: Генерировать наборы данных Xml будет просить группу. Вы можете ввести «», чтобы он искал любые / все группы, некоторые Группа "или" SomeGroup/SomeSubGroup "чтобы он искал определенную группу, или"\[корень\]"чтобы он искал только корневую группу. Строка «Группа» становится<В группе> вdatasets.xmlИнформация для набора данных (Хотя и\[корень\]"становится") .

Размеры CSV Генерировать наборы данных Xml запросит строку «DimensionsCSV». Это разделённый на запятую список имен источников набора измерений. Генерировать наборы данных Xml будет читать только переменные в выборке.ncФайлы, которые используют некоторые или все эти размеры (Никаких других измерений) плюс все скалярные переменные в файле, и сделать набор данных из этих переменных данных. Если измерение находится в группе, необходимо указать его полное наименование, например: " Название группы/измерение ". Если ничего не указать (Пустая струна) Генерировать наборы данных Xml будет искать переменные с наибольшим количеством измерений, по теории, что они будут наиболее интересными, но могут быть моменты, когда вы захотите сделать набор данных из какой-то другой группы переменных данных, которая использует какую-то другую группу измерений. Если просто указать имя измерения, которого не существует (Например, NO\_MATCH) ,ERDDAP™Мы найдем все скалярные переменные. Строка «DimensionsCSV» становится<CCV> в пределахdatasets.xmlИнформация для набора данных.

лечить отклонения

Существует категория инвалидов.ncфайлы (Потому что они не следуют правилам CF.) которые имеют несколько измерений (Например, лат, лон, время) когда нужно использовать только одно измерение (Например, время) Например:

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

EDDTableFromMultidimNcFiles имеет специальную функцию для работы с этими файлами: если вы добавите глобальный атрибут «treatDimensionsAs» в наборы данных по всему мируaddAttributesВы можете сказатьERDDAP™для обработки определенных измерений (Например, лат и lon) Как будто это другое измерение. (Например, время) . Значение атрибута должно представлять собой список, разделенный запятой, в котором указываются размеры "от", а затем размерность "до", например, лат, лон, время
ПотомERDDAP™Прочитает файл так, как если бы он был:

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

Конечно, текущий размер каждого из измерений в списке должен быть одинаковым; в противном случаеERDDAP™Мы будем рассматривать файл как «плохой файл».

Обратите внимание, что эти файлы недействительны, потому что они не следуют правилам CF. Даже если быERDDAP™Мы настоятельно рекомендуем вам не создавать такие файлы, потому что другие программные средства на основе CF не смогут правильно их читать. Если у вас уже есть такие файлы, мы настоятельно рекомендуем заменить их действительными файлами как можно скорее.

EDDTable FromNcFiles

EDDTable FromNcFiles агрегированные данные отNetCDF (v3 или v4) .nc (или.ncмл) файлы иЗаррфайлы (Версия 2.25) с несколькими переменными, каждая с одним общим измерением (Например, время) или более одного общего измерения (Например, время, высота (или глубина) Широта, долгота) . Файлы должны иметь одинаковые имена измерений. Данный файл может иметь несколько значений для каждого из измерений, и значения могут быть разными в разных исходных файлах. Файлы могут иметь переменные символов с дополнительным измерением. (Например, Стринг14) . Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

Файлы Zarr имеют несколько иное поведение и требуют, чтобы файл NameRegex или PathRegex включали «zarr».

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатаете ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

Размеры CSV Генерировать наборы данных Xml запросит строку «DimensionsCSV». Это разделённый на запятую список имен источников набора измерений. Генерировать наборы данных Xml находит переменные в данных.ncфайлы, которые используют некоторые или все из этих измерений, а также все скалярные переменные, и делают набор данных из этих переменных данных. Если ничего не указать (Пустая струна) Генерировать наборы данных Xml будет искать переменные с наибольшим количеством измерений, по теории, что они будут наиболее интересными, но могут быть моменты, когда вы захотите сделать набор данных из какой-то другой группы переменных данных, которая использует какую-то другую группу измерений.

  • 1D Пример: 1D файлы несколько отличаются от 2D, 3D, 4D, ... файлов.
    • У вас может быть набор.ncФайлы данных, где каждый файл имеет данные за один месяц от одного дрейфующего буя.
    • Каждый файл будет иметь 1 размер, например время. (размер =\[много\]) .
    • Каждый файл будет иметь одну или более 1D переменных, которые используют это измерение, например, время, долготу, широту, температуру воздуха.
    • Каждый файл может иметь переменные 2D символов, например, с размерами. (Время, персонажи) .  
  • 2D Пример:
    • У вас может быть набор.ncФайлы данных, где каждый файл имеет данные за один месяц от одного дрейфующего буя.
    • Каждый файл будет иметь 2 измерения, например, время. (размер =\[много\]) ид (Размер = 1) .
    • Каждый файл будет иметь 2 1D переменные с теми же именами, что и размерность, и с использованием того же имени размерность, например, время. (время) id (id) . Эти 1D переменные должны быть включены в список.<dataVariable> в XML наборе данных.
    • Каждый файл будет иметь одну или несколько 2D переменных, например, долготу, широту, температуру воздуха, температуру воды, ...
    • Каждый файл может иметь переменные 3D символов, например, с размерами. (Время,id,nCharacters) .  
  • 3D Пример:
    • У вас может быть набор.ncФайлы данных, где каждый файл имеет данные за один месяц от одного стационарного буя.
    • Каждый файл будет иметь 3 измерения, например, время. (размер =\[много\]) Лат (Размер = 1) и лон (Размер = 1) .
    • Каждый файл будет иметь 3 1D переменные с теми же именами, что и размерность, и с использованием того же имени размерность, например, время. (время) Лат (лат) lon (один) . Эти 1D переменные должны быть включены в список.<dataVariable> в XML наборе данных.
    • Каждый файл будет иметь одну или несколько 3D переменных, например, температуру воздуха, температуру воды, температуру воды и т.д.
    • Каждый файл может иметь переменные 4D символов, например, с размерами. (Time,lat,lon,nCharacters) .
    • Имя файла может иметь имя буя в названии файла.  
  • 4D Пример:
    • У вас может быть набор.ncФайлы данных, где каждый файл имеет данные за один месяц с одной станции. В каждый момент времени станция принимает показания на нескольких глубинах.
    • Каждый файл будет иметь 4 измерения, например, время. (размер =\[много\]) глубина (размер =\[много\]) Лат (Размер = 1) и лон (Размер = 1) .
    • Каждый файл будет иметь 4 1D переменных с теми же именами, что и размерность, и с использованием того же имени размерность, например, время. (время) глубина (глубина) Лат (лат) lon (один) . Эти 1D переменные должны быть включены в список.<dataVariable> в XML наборе данных.
    • Каждый файл будет иметь одну или несколько 4D переменных, например, температуру воздуха, температуру воды, температуру воды и т.д.
    • Каждый файл может иметь переменные 5D символов, например, с размерами. (время, глубина, лат,лон,nCharacters) .
    • Имя файла может иметь имя буя в названии файла.  

EDDTable FromNcCFFiles

EDDTable FromNcCFFiles агрегаты данных агрегаты данных изNetCDF (v3 или v4) .nc (или.ncмл) файлы, использующие один из форматов файлов, указанных вCF Дискретная геометрия выборки (DSG) конвенции. Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

Для файлов, использующих один из многомерных вариантов CF DSG, используйтеEDDTableFromMultidimNcFilesВместо этого.

CF DSG определяет десятки форматов файлов и включает в себя множество незначительных вариаций. Этот класс имеет дело со всеми вариациями, о которых мы знаем, но мы, возможно, пропустили одну из них. (или более) . Так что если этот класс не может читать данные из ваших файлов CF DSG, пожалуйста.обратиться за дополнительной поддержкой.

Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.  

EDDTable FromNccsvFiles

EDDTable FromNccsvFiles агрегированные данные отNCCSVФайлы ASCII.csv. Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.

Первое, что GenerateDatasetsXml делает для этого типа набора данных после того, как вы ответите на вопросы, - это распечатаете ncdump-подобную структуру файла образца. Итак, если вы введете несколько глупых ответов для первого цикла через наборы данных Xml, по крайней мере, вы сможете увидеть,ERDDAP™Вы можете прочитать файл и посмотреть, какие размеры и переменные находятся в файле. Затем вы можете дать лучшие ответы для второго цикла через GenerateDatasetsXml.

  • Предупреждение: когдаERDDAP™считывает файлы данных NCCSV, если обнаруживает ошибку в заданной строке (Например, неправильное количество элементов) Он записывает предупреждающее сообщение ("Предупреждение: плохая линия (s) "... с перечнем плохих линий на последующих линиях") кlog.txt файлЗатем он продолжает читать остальные файлы данных. Таким образом, вы несете ответственность за периодический просмотр. (или написать сценарий для этого) для этого сообщения в журнале. txt для устранения проблем в файлах данных.ERDDAP™Он настроен таким образом, чтобы пользователи могли продолжать читать все доступные действительные данные, даже если некоторые строки файла имеют недостатки.  

EDDTable FromNOS

EDDTable FromNOS (Обнародовано) обрабатывает данные из aNOAA НОСИсточник, который используетSOAP+XMLЗапросы и ответы. Он очень специфичен дляNOAAXML от NOS. См. образец набора данных EDDTableFromNOS в наборах данных2.xml.  

EDDTable FromOBIS

EDDTable FromOBIS Обработка данных из биогеографической информационной системы океана (БИС) сервер (был http://www.iobis.org ) . Возможно, больше нет активных серверов, которые используют этот устаревший тип серверной системы OBIS.

  • Серверы OBIS ожидают запрос XML и возвращают ответ XML.
  • Все серверы OBIS обслуживают одни и те же переменные одинаково. (был http://iobis.org/tech/provider/questions ) Вам не нужно много указывать, чтобы настроить набор данных OBIS вERDDAP.
  • Вы должны включить "creator\_email"Атрибут в глобальном масштабеaddAttributesПоскольку эта информация используется в рамках лицензии. Подходящий адрес электронной почты можно найти, прочитав ответ XML от sourceURL.
  • Вы можете получить или не получить глобальный атрибут.<subsetVariables> (#subsetvariables) Работа с сервером OBIS. Если вы попытаетесь, попробуйте одну переменную. (Научные имена или гены) .

EDDTable FromOBIS скелет XML

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

EDDTableFromParquetFiles

EDDTableFromParquetFiles обрабатывать данные отпаркет. Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.

  • Parquet предназначен для очень эффективного сжатия, поэтому он может дать вам меньшие размеры файлов, чем другие форматы.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.
  • Предупреждение: когдаERDDAP™читает файлы данных Parquet, если обнаруживает ошибку на заданной строке (Например, неправильное количество элементов) Он записывает предупреждающее сообщение ("Предупреждение: плохая линия (s) "... с перечнем плохих линий на последующих линиях") кlog.txt файлЗатем он продолжает читать остальные файлы данных. Таким образом, вы несете ответственность за периодический просмотр. (или написать сценарий для этого) для этого сообщения в журнале. txt для устранения проблем в файлах данных.ERDDAP™Он настроен таким образом, чтобы пользователи могли продолжать читать все доступные действительные данные, даже если некоторые строки файла имеют недостатки.  

EDDTable FromSOS

EDDTable FromSOS Обработка данных от службы наблюдения датчика (SWE/SOS) Сервер.

  • Этот тип набора данных объединяет данные из группы станций, которые все обслуживаются однимSOSСервер.
  • Все станции обслуживают один и тот же набор переменных (Хотя источник для каждой станции не должен обслуживать все переменные.) .
  • SOSСерверы ожидают запрос XML и возвращают ответ XML.
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его. Нелегко создать набор данных XML дляSOSнаборы данных вручную. Чтобы найти необходимую информацию, вы должны посетитьsourceUrl+? обслуживаниеSOS&request=GetCapabilities"в браузере; посмотрите на XML; сделайте запрос GetObservation вручную; и посмотрите на ответ XML на запрос.
  • При случайном добавлении новых видовSOSСерверы и изменения в старых серверах, становится все труднее дляERDDAP™автоматически обнаруживать тип сервера по ответам сервера. Использование<SosServerType (с значением IOOS\_NDBC, IOOS\_NOS,OOSTethysили кто) В настоящее время настоятельно рекомендуется. Если у вас возникли проблемы с наборами данных этого типа, попробуйте повторно запустить наборы данных GenerateDatasets. Xml для этогоSOSСервер. генерировать Наборы данных Xml позволит вам попробовать разные<Варианты sosServerType>, пока вы не найдете правильный для данного сервера.
  • SOSОбзор:
    • Сви (Сенсор Web Enablement) иSOS (Сенсорная служба наблюдения) естьСтандарты OpenGIS®. На этом сайте есть стандартные документы.

    • TheOGCВеб-сервисы Общая спецификация ver 1.1.0 (OGC06-121r3) Охватывает строительство запросов GET и POST (см. раздел 7.2.3 и раздел 9) .

    • Если вы отправляете запрос getCapabilities xmlSOSсервер (sourceUrl+ "?сервис"SOS&request=GetCapabilities") , вы получаете результат xml со списком станций и наблюдаемых Свойства, для которых имеются данные.

    • Наблюдаемая собственность является формальной ссылкой URI на собственность. Например, urn:ogc:phenomenon:longitude:wgs84 или https://mmisw.org/ont/cf/parameter/sea\\_water\\_temperature

    • Наблюдаемая собственность не является переменной.

    • Более чем одна переменная может иметь одинаковую наблюдаемую Собственность (Например, внутри и снаружи Темп мог наблюдаться оба Собственность https://mmisw.org/ont/cf/parameter/air\\_temperature ) .

    • Если вы отправляете запрос getObservation xmlSOSСервер, вы получаете результат xml с описаниями имен полей в ответе, полевых блоках и данных. Названия полей будут включать долготу, широту, глубину. (возможно) И время.

    • КаждыйdataVariableДля EDDTable FromSOSдолжен включать атрибут «наблюдаемая собственность», который идентифицирует наблюдаемую собственность, которая должна быть запрошена у сервера для получения этой переменной. Часто, несколькоdataVariables перечислит ту же составную наблюдаемую собственность.

    • Тип данных для каждогоdataVariableСервер может не указывать. Если это так, вы должны посмотреть ответы на XML-данные с сервера и назначить соответствующие ответы.<DataType>s (#тип данных) вERDDAP™набор данныхdataVariableопределения.

    • (На момент написания этого) некоторыеSOSсерверы отвечают на запросы GetObservation более чем на один наблюдаемый Собственность, просто возвращая результаты для первого из наблюдаемых свойств. (Никаких сообщений об ошибках!) См. запрос параметров конструктора Отдельно наблюдаемые свойства.

  • EDDTable FromSOSавтоматически добавляет

    station\_id, longitude, latitude
    Глобальные атрибуты набора данных при создании набора данных.

  • SOSСерверы обычно выражаютединицыс помощьюUCUMсистема. БольшинствоERDDAP™Серверы экспресс-единицы сUDUNITSсистема. Если вам нужно конвертировать между двумя системами, вы можете использоватьERDDAPВеб-сервис для преобразования UCUM в / изUDUNITS.

EDDTable FromSOSскелет XML

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

Скриншоты из ThreddsFiles

Скриншоты из ThreddsFiles (обесцененный) агрегирует файлы данных с несколькими переменными, каждая с одним или несколькими общими размерами (Например, время, высота (или глубина) Широта, долгота) и обслуживается аПЕРЕВОДЫOPeNDAPсервер.

  • Данный тип данных является Обнародовано . Новое и более общее решение заключается в использованиикэш Вариант FromUrl для EDDTable Из материалов (или вариант) , который делает локальную копию удаленных файлов и обслуживает данные из локальных файлов. The<Опция cacheFromUrl> может использоваться с любым типом табличного файла данных из любого веб-источника, который публикует каталог-подобный список файлов. **
    Если вы не можете заставить это работать по какой-то причине, напишите Крису. Джон на noaa.gov. Если до 2020 года жалоб не будет, этот тип набора данных может быть удален. **
  • Мы настоятельно рекомендуем использоватьГенерировать наборы данных Программа XmlЧтобы составить приблизительный проектdatasets.xmlКусок для этого набора данных. Затем вы можете отредактировать это, чтобы настроить его.
  • В большинстве случаев каждый файл имеет несколько значений для самого левого. (первый) Например, измерение времени.
  • Файлы часто (Но не обязательно) имеют одно значение для других измерений (Например, высота (или глубина) Широта, долгота) .
  • Файлы могут иметь переменные символов с дополнительным измерением. (Например, nCharacters) .
  • Серверы THREDDS могут быть идентифицированы «/thredds/» в URL-адресах. Например,
    https://www.ncei.noaa.gov/thredds/catalog/uv/6h\\_strs\\_agg/catalog.html
  • Серверы THREDDS имеют каталоги в разных местах. Этот класс требует, чтобы URL включал «/thredds/catalog/». Обычно вы можете найти эту переменную, начав в браузере в корневом каталоге, а затем нажав на нужный подкаталог.
  • Этот класс читает файлы каталога.xml, обслуживаемые THREDDS со списками<Каталог Refs> (Дополнительные подфайлы catalog.xml) и<набор данных> (файлы данных) .
  • The<Настройка fileDir> игнорируется. Поскольку этот класс загружает и делает локальную копию каждого удаленного файла данных,ERDDAP™Вынуждает файл Чтобы быть BigParent Директория /копия/ datasetID /.
  • Для<sourceUrl> использовать URL-адрес файла catalog.xml для набора данных на сервере THREDDS, например: для этого URL-адреса, который может использоваться в веб-браузере; https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.html \[2020-10-21 Этот сервер больше не доступен.\], использовать<sourceUrl> https://data.nodc.noaa.gov/thredds/catalog/nmsp/wcos/catalog.xml </sourceUrl> (Но поставьте его на одну линию) .
  • Поскольку этот класс всегда загружает и делает локальную копию каждого удаленного файла данных, вы никогда не должны заворачивать этот набор данных.EDDTableCopy.
  • Этот тип набора данных поддерживает OPTIONAL, редко используемый, специальный тег.<Специальный режим режим </specialMode>, который может быть использован для указания того, что специальные, жестко закодированные правила должны использоваться для определения того, какие файлы должны быть загружены с сервера. В настоящее время единственным действительным режим SAMOS используется с наборами данных из https://tds.coaps.fsu.edu/thredds/catalog/samos загружать только файлы с номером последней версии.
  • Смотрите суперкласс этого класса,EDDTable Из материаловДля получения информации о том, как работает этот класс и как его использовать.
  • Смотрите примеры 1D, 2D, 3D и 4D дляEDDTable FromNcFiles.  

EDDTable FromWFSФайлы

EDDTable FromWFSФайлы (Обнародовано) сделать локальную копию всех данных изArcGISMapServerWFSсервера, чтобы данные можно было быстро восстановитьERDDAP™пользователей.

  • Необходимо указать специально отформатированныйsourceUrlГлобальный атрибут TellERDDAP™Как запрашивать информацию о функциях с сервера. Пожалуйста, используйте этот пример в качестве шаблона:
    <att name="sourceUrl">http://*someUrl/dir1/dir2*/MapServer/WFSServer?request=GetFeature&amp;service=WFS&amp;typename=aasg:BoreholeTemperature&amp;format=&quot;text/xml;%20subType=gml/3.1.1/profiles/gmlsf/1.0.0/0"</att>  

(Положите все на одну линию)

  • Вам нужно добавить специальный глобальный атрибут, чтобы сказать:ERDDAP™Как определить имена фрагментов данных, которые должны быть загружены. Это, вероятно, будет работать для всех EDDTableFromWFSФайлы наборов данных:
    <att name="rowElementXPath">/wfs:FeatureCollection/gml:featureMember</att>
  • Поскольку этот класс всегда загружает и делает локальную копию каждого удаленного файла данных, вы никогда не должны заворачивать этот набор данных.EDDTableCopy.
  • Смотрите суперкласс этого класса,EDDTable Из материаловДля получения дополнительной информации о том, как работает этот класс и как его использовать.  

EDDTableAggregateRows

EDDTableAggregateRows Может создавать набор данных EDDTable из группы «детских» наборов данных EDDTable.

  • Вот некоторые варианты использования EDDTableAggregateRows:
    • Вы можете создать набор данных EDDTableAggregateRows из двух различных типов файлов или источников данных, например, набор данных с данными до конца прошлого месяца, хранящимися в хранилище..ncФайлы CF и набор данных с данными за текущий месяц хранятся в реляционной базе данных.
    • Вы можете создать набор данных EDDTableAggregateRows, чтобы справиться с изменением исходных файлов. (Например, изменился формат времени или переменное имя, или данные. Типscale\_factor/add\_offsetменяться) . В этом случае один ребенок получает данные из файлов, сделанных до изменения, а другой ребенок получает данные из файлов, сделанных после изменения. Использование EDDTableAggregateRows является альтернативой использованиюNcMLилиNCO. Если нет отличительной особенности в именах файлов (чтобы вы могли использовать)<Чтобы определить, какой файл принадлежит к какому набору данных ребенка, вам, вероятно, нужно хранить файлы для двух наборов данных ребенка в разных каталогах.
    • Вы можете создать набор данных EDDTableAggregateRows, который имеет общее подмножество переменных одного или нескольких похожих, но разных наборов данных, например, набор данных, который делает набор данных профиля из комбинации набора данных профиля, набора данных TimeSeriesProfile и набора данных TrajectoryProfile. (которые имеют несколько различных переменных и некоторые переменные в общем — в этом случае вам придется сделать специальные варианты для наборов данных о детях, только с обычными переменными) .
    • У вас может быть несколько отдельных наборов данных, каждый из которых имеет один и тот же тип данных, но с другой станции. Вы можете оставить эти наборы данных нетронутыми, но также создать набор данных EDDTableAggregateRows, который имеет данные со всех станций - каждый из наборов данных ребенка может быть простым.EDDTable FromErddap, который указывает на один из существующих наборов данных станции. Если вы это сделаете, дайте каждому из наборов данных EDDTableFromErddap разныеdatasetIDчем оригинальные автономные наборы данных, например, путем добавления «Дитя» к оригиналуdatasetID.
  • Каждый из детей<Указанный набор данных должен быть полным набором данных, как если бы это был автономный набор данных. Каждый должен иметь одинаковоеdataVariablesв том же порядке, с тем жеdestinationNames,данные Типы,missing\_values,\_FillValuesиединицы. Метаданные для каждой переменной для набора данных EDDTableAggregateRows поступают от переменных в первом наборе данных для детей, но EDDTableAggregateRows обновит их.actual\_rangeМетаданные являются фактическим диапазоном для всех детей.
  • Рекомендация: Получите каждый из наборов данных ребенка, работающих как автономные наборы данных. Затем попробуйте сделать набор данных EDDTableAggregateRows, разрезав и вставивdatasets.xmlДля каждого в новый EDDTableAggregate Набор данных.
  • Dataset Default-Sорт-ордер Порядок наборов данных ребенка определяет общий порядок сортировки результатов по умолчанию. Конечно, пользователи могут запросить другой порядок сортировки для данного набора результатов, приложивorderBy (" разделенный на запятые список переменных ") до конца своего запроса.
  • Источникглобальный АтрибутыEDDTableAggregateRows - это объединенные глобальные атрибуты из первого набора данных о детях. EDDTableAggregate Строки могут иметь глобальный<addAttributes• предоставлять дополнительные глобальные атрибуты или переопределять исходные глобальные атрибуты.

EDDTableAggregate Rows скелет XML

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

EDDTableCopy

EDDTableCopy Вы можете сделать локальную копию многих типов наборов данных EDDTable, а затем быстро восстановить данные из локальной копии.

  • EDDTableCopy (и для сетевых данных,EDDGridКопия) Это очень простой в использовании и очень эффективный Решение некоторых из самых больших проблем с обслуживанием данных из удаленных источников данных:
    • Доступ к данным из удаленного источника данных может быть медленным.
      • Они могут быть медленными, потому что они по своей природе медленные. (Неэффективный тип сервера) ,
      • Потому что они перегружены слишком большим количеством запросов.
      • или потому, что ваш сервер или удаленный сервер ограничен по пропускной способности.
    • Удаленный набор данных иногда недоступен. (Опять же, по разным причинам) .
    • Полагаясь на один источник для данных не масштабируется хорошо (Например, когда многие пользователиERDDAPиспользовать его) .  
  • EDDTableCopy решает эти проблемы, автоматически делая и поддерживая локальную копию данных и обслуживая данные из локальной копии.ERDDAP™Данные из локальной копии можно передавать очень быстро. А изготовление и использование локальной копии снимает нагрузку на удаленный сервер. А локальная копия - это резервная копия оригинала, которая полезна в случае, если с оригиналом что-то случится.

Нет ничего нового в создании локальной копии набора данных. Что нового в этом классе, так это то, что он\*легко\*создавать и\*поддерживать\*локальная копия данных из\*разнообразие\*Типы удаленных источников данных и\*Добавить метаданные\*При копировании данных.

EDDTableCopy vs.<CashFromUrl>

<CacheFromUrl является альтернативой EDDTableCopy. Они работают по-разному.

  • EDDTable Копирование работает путем запроса кусков данных из удаленной службы и хранения этих кусков в локальных файлах. Таким образом, EDDTableCopy полезен в некоторых случаях, когда данные доступны через удаленный сервис.
  • [править]<cacheFromUrl> (#cachefromurl) загружает существующие файлы, перечисленные на удаленном веб-сайте.<CacheFromUrl является более простым в использовании и более надежным, поскольку он может легко определить, когда есть новый удаленный файл данных или когда удаленный файл данных изменился и, следовательно, должен быть загружен.

Если есть ситуации, когда EDDTableCopy или<cacheFromUrl> можно использовать<cacheFromUrl>, потому что это проще и надежнее.  

<экстракция Наименования>

EDDTable Копия делает локальную копию данных, запрашивая фрагменты данных из удаленного набора данных. EDDTable Копия определяет, какие куски запрашивать, запрашивая & отличительные () ценностей для<Источник: DestinationNames (Указанное вdatasets.xmlсм. ниже) , которые являются разделенными по пространству именами назначения переменных в удаленном наборе данных. Например,

    <extractDestinationNames>drifter profile</extractDestinationNames>  

могут давать различные комбинации значений drifter=tig17,profile=1017, drifter=tig17,profile=1095, ... drifter=une12,profile=1223, drifter=une12,profile=1251, ....

В ситуациях, когда одна колонка (Например, профиль) может быть все, что требуется для однозначной идентификации группы строк данных, если имеется очень большое количество, например, профилей, может быть полезно также указать дополнительный экстракт Направление Имя (Например, дрифтер) который служит для деления профилей. Это приводит к меньшему количеству файлов данных в данном каталоге, что может привести к более быстрому доступу.

Локальные файлы

Каждая часть данных хранится в отдельномNetCDFФайл в подкаталоге BigParent Директория /копия/ datasetID / (как указано вНастройка.xml) . Существует один подкаталоговый уровень для всех, кроме последнего извлечения. Например, данные для tig17+1017 будут храниться в BigParent Директория /copy/sampleDataset/tig17/1017.nc. Например, данные для une12+1251 будут храниться в BigParent Директория /copy/sampleDataset/une12/1251.nc. Каталог и имена файлов, созданные из значений данных, изменяются, чтобы сделать их безопасными для файловых имен. (Например, пространства заменяются на «x20».) - это не влияет на реальные данные.  

Новые данные

Каждый раз EDDTable Копия перезагружается, она проверяет удаленный набор данных, чтобы увидеть, какие отдельные куски доступны. Если файл для части данных еще не существует, запрос на получение части добавляется в очередь.ERDDAPЗадача Thread обрабатывает все поставленные в очередь запросы на фрагменты данных один за другим. Вы можете увидеть статистику для задачиThread активности наСтраница статусаи в том,Ежедневный отчет. (Да,ERDDAP™Он может назначать несколько задач для этого процесса, но это будет использовать большую часть пропускной способности удаленного источника данных, памяти и времени процессора, а также большую часть локального.ERDDAPпропускная способность, память и время процессора, ни одна из которых не является хорошей идеей.)

ПРИМЕЧАНИЕ: Первый раз, когда загружается копия EDDTable, (Если все будет хорошо) В очередь Thread будет добавлено много запросов на фрагменты данных, но локальные файлы данных не будут созданы. Таким образом, конструктор потерпит неудачу, но taskThread продолжит работать и создавать локальные файлы. Если все пойдет хорошо, задача Thread сделает некоторые локальные файлы данных и следующую попытку перезагрузить набор данных. (За 15 минут) Успешно, но изначально с очень ограниченным объемом данных.

ПРИМЕЧАНИЕ: После того, как локальный набор данных содержит некоторые данные и появляется в вашемERDDAPЕсли удаленный набор данных временно или постоянно недоступен, локальный набор данных все равно будет работать.

Предупреждение: если удаленный набор данных большой и/или удаленный сервер медленный (В этом проблема, не так ли?!) Это займет много времени, чтобы сделать полную копию. В некоторых случаях необходимое время будет неприемлемым. Например, передача 1 ТБ данных по линии T1. (0,15 ГБ/с) Это займет не менее 60 дней при оптимальных условиях. Кроме того, он использует большую пропускную способность, память и время процессора на удаленных и локальных компьютерах. Решение состоит в том, чтобы отправить жесткий диск администратору удаленного набора данных, чтобы он мог сделать копию набора данных и отправить жесткий диск обратно вам. Используйте эти данные в качестве отправной точки, и EDDTableCopy добавит к ним данные. (Вот как облачный сервис Amazon EC2 справлялся с этой проблемой, несмотря на то, что его система имеет большую пропускную способность.)

ПРЕДУПРЕЖДЕНИЕ: Если данная комбинация значений исчезает из удаленного набора данных, EDDTableCopy НЕ удаляет локальный скопированный файл. Если вы хотите, вы можете удалить его самостоятельно.

Столовая копия<CheckSourceData>

Thedatasets.xmlдля этого набора данных может иметь дополнительный тег

    <checkSourceData>true</checkSourceData>  

Значение по умолчанию верно. Если / когда вы установите его ложным, набор данных никогда не проверит исходный набор данных, чтобы увидеть, есть ли дополнительные данные.  

  1. создавать<набор данных вход (Родной тип, а не EDDTableCopy) для удаленного источника данных. Заставьте его работать правильно, включая все необходимые метаданные.
  2. Если это слишком медленно, добавьте XML-код, чтобы обернуть его в набор данных EDDTableCopy.
    • Используйте другойdatasetID (Возможно, изменяяdatasetIDстарогоdatasetIDслегка) .
    • Копировать<доступный К>,<перезагрузить EveryNMinutes и<onChange> от удаленного XML EDDTable до XML EDDTableCopy. (Их значения для EDDTableCopy, их значения для внутреннего набора данных становятся неактуальными.)
    • создавать<extractDestinationNames> tag (смотреть выше) .
    • <orderExtractBy> - это OPTIONAL разделённый список имен переменных назначения в удаленном наборе данных. Когда каждая часть данных загружается с удаленного сервера, эта часть будет сортироваться по этим переменным. (Если первая переменная связана, то вторая переменная, если первая переменная связана,) . В некоторых случаях,ERDDAP™Вы сможете быстрее извлекать данные из локальных файлов данных, если первая переменная в списке является числовой переменной. ("time"считать как числовую переменную) . Но выберите эти переменные таким образом, который подходит для набора данных.
  3. ERDDAP™будет создавать и поддерживать локальную копию данных.  
  • Предупреждение: EDDTableCopy предполагает, что значения данных для каждого фрагмента никогда не меняются. Если / когда они это делают, вам нужно вручную удалить файлы в BigParent Директория /копия/ datasetID которые изменились ифлагнабор данных, подлежащий перезагрузке, чтобы удаленные фрагменты были заменены. Если у вас есть подписка на электронную почту, вы получите два письма: одно, когда набор данных сначала перезагружается и начинает копировать данные, а другое, когда набор данных снова загружается. (автоматически) и обнаруживает новые локальные файлы данных.  
  • Изменение метаданных - Если вам нужно изменить любойaddAttributesили изменить порядок переменных, связанных с исходным набором данных:
    1. ИзменитьaddAttributesДля исходных данных вdatasets.xmlПо мере необходимости.
    2. Удалить один из скопированных файлов.
    3. Установитьфлагнемедленно перезагрузить набор данных. Если вы используете флаг и у вас есть подписка на электронную почту, вы получите два письма: одно, когда набор данных сначала перезагружается и начинает копировать данные, а другое, когда набор данных снова загружается. (автоматически) и обнаруживает новые локальные файлы данных.
    4. Удаленный файл будет восстановлен с новыми метаданными. Если исходный набор данных когда-либо недоступен, набор данных EDDTableCopy получит метаданные из восстановленного файла, поскольку он является самым молодым файлом.  
  • EDDGridКопияОн очень похож на EDDTableCopy, но работает с сетчатыми наборами данных.

EDDTableCopy скелет XML

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

Подробности

Вот подробные описания общих тегов и атрибутов.

<Угловая степеньUnits>

  • [править] ** <Угловые градусные единицы> ** ] (#угловые степени) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlкоторый содержит разделенный запятой список строк единиц, которыеERDDAP™следует рассматривать как угловые градусные единицы. Если переменная имеет одну из этих величин,tabledap?orderByMeanФильтр вычисляет среднее значение особым образом, затем сообщает среднее значение как значение от -180 до 180. Видишь?ERDDAPEDStatic.java исходный код файла для текущего списка по умолчанию. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.

<Угловая степень TrueUnits>

  • [править] ** <угловой Степень истинности ** ] (#угловая стрелка) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlкоторый содержит разделенный запятой список строк единиц, которыеERDDAP™следует рассматривать как угловые степени истинные единицы. Если переменная имеет одну из этих величин,tabledap?orderByMeanФильтр вычисляет среднее значение особым образом, затем сообщает среднее значение как значение от 0 до 360. Видишь?ERDDAPEDStatic.java исходный файл для текущего списка по умолчанию. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.  

<CommonStandardNames>

  • [править] ** <Стандартные имена ** ] (#стандартные имена) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlУказать раздельный список общихСтандартные названия CF. Например,
    <commonStandardNames>air\\_pressure, ..., wind\\_to\\_direction</commonStandardNames>  

Этот список используется в DataProviderForm3.html для удобства пользователей. Если вы хотите предоставить эту информацию вdatasets.xmlНачните с копирования текущего списка по умолчанию в<DEFAULT\_commonStandardNames вERDDAP? \[кот\]/webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml файл.  

<cacheMinutes>

  • [править] ** <CacheMinutes ** ] (#cacheminutes) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlУказать возраст (В минуты) при котором файлы в кэше должны быть удалены (По умолчанию 60) . Например,
    <cacheMinutes>60</cacheMinutes>  

В общем, только файлы изображений (Поскольку одни и те же изображения часто запрашиваются повторно.) и.ncфайлы (Они должны быть полностью созданы перед отправкой пользователю.) Они кэшированы. Хотя может показаться, что данный запрос должен всегда возвращать один и тот же ответ, это не так. Например, atabledapЗапрос, который включает время некоторые Время Изменится, когда появятся новые данные для набора данных. Запрос сетки, который включает\[последний\]Изменится временной размер, когда появятся новые данные для набора данных. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.  

<конвертировать InterpolateRequestCSVExample>

  • [править] ** <Преобразование InterpolateRequestCSVExmple ** ] (#convertinterpolaterequestcsvexample) является опциональным тегом внутри<erddapDatasets метитьdatasets.xml \[Начиная сERDDAP™v2.10\]который содержит пример, который будет показан на веб-странице конвертера. Значение по умолчанию: jplMURSST41/Анализ.sst/Bilinear/4.

<конвертировать InterpolateDatasetIDVariableList>

  • [править] ** <Переменный список InterpolateDatasetIDVariableList ** ] (#конвертинтерполированный инвариабельный список) является опциональным тегом внутри<erddapDatasets метитьdatasets.xml \[Начиная сERDDAP™v2.10\]Содержит список CSVdatasetIDвариабельность Примеры имен, которые будут использоваться в качестве предложений веб-страницы конвертера Интерпола. Значение по умолчанию: jplMURSST41/Анализ.sst.

<конвертироватьToPublicSourceUrl>

  • [править] ** <ПреобразоватьToPublic SourceUrl ** ] (#конвертный публичный ресурс) является опциональным тегом внутри<erddapDatasets метитьdatasets.xmlкоторый содержит атрибут «от» и «к», который определяет, как преобразовать соответствующий локальныйsourceUrl (Обычно IP номер) в общественноеsourceUrl (доменное имя) "от" должно иметь форму\[что-то\]//\[что-то\]/". Там может быть 0 или больше этих меток. Дополнительную информацию см. [<sourceUrl> (#sourceurl) . Например,
    <convertToPublicSourceUrl from="https://192.168.31.18/" to="https://oceanwatch.pfeg.noaa.gov/" />  

Это приведет к совпадению местныхsourceUrl (такие как https://192.168.31.18/thredds/dodsC/satellite/BA/ssta/5day )
в общественноеsourceUrl ( https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/BA/ssta/5day ) . Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.

Но по соображениям безопасности и причинам, связанным с системой подписки, Не используйте эту игрушку!
Вместо этого всегда используйте общественное доменное имя в<sourceUrl> Tag and use the/etc/hosts tableконвертировать локальные доменные имена в IP-номера без использования DNS-сервера. Вы можете проверить, правильно ли доменное имя преобразовано в номер IP, используя: пинг some.domain.name
 

Данные: изображение/png;base64

  • Когда пользователь просит.htmlTableОтвет изERDDAP™, если данные в ячейке строки содержат данные: изображение/png;base64, за которым следует закодированное изображение .png base64,ERDDAP™Отобразится икона (чтобы пользователь мог видеть изображение, если оно нависает над ним) и кнопки для сохранения текста или изображения в буфер обмена. Эта особенность была добавлена вERDDAP™v2.19 Марко Альба.

drawLandMask

  • drawLandMask Установка по умолчанию, которая контролирует, когда и как должна быть нарисована маска, когдаERDDAP™Нарисовал карту. Он может быть указан в трех разных местах вdatasets.xml (от самого низкого до самого высокого приоритета) :

    1. ЕслиdrawLandMaskуказывается в пределах<erddapDatasets (не связан с каким-либо конкретным набором данных) Затем он определяет значение по умолчаниюdrawLandMaskдля всех переменных во всех наборах данных. Например,
        <drawLandMask>under</drawLandMask>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAPчитатьdatasets.xml. Если этого тега нет, базовое значение по умолчанию ниже.   2. ЕслиdrawLandMaskопределяется как глобальный атрибут данного набора данных, затем указывает значение по умолчаниюdrawLandMaskдля всех переменных в этом наборе данных, отменяя любую более низкую настройку приоритета. Например,

    <att name="drawLandMask">under</att>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™Перезагружает этот набор данных.   3. ЕслиdrawLandMaskуказывается как атрибут переменной в данном наборе данных, затем указывает значение по умолчаниюdrawLandMaskдля этой переменной в этом наборе данных, отменяя любую более низкую настройку приоритета. Например,

    <att name="drawLandMask">under</att>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™Перезагружает этот набор данных.

Пользователь может переопределить по умолчанию (Где бы он ни был указан) выбрав значение «Нарисовать маску земли» из выпадающего списка на веб-странице Make A Graph набора данных или включив &.land = ценность URL, который запрашивает карту изERDDAP.

Во всех ситуациях существует 4 возможных значения для атрибута:

  • «под» рисует маску до того, как она рисует данные на карте. Для сетчатых наборов данных земля выглядит как постоянный светло-серый цвет. Для табличных наборов данных «под» показывает топографические данные по суше и океанам.
  • "Вверх" - Для сетчатых наборов данных «over» рисует маску после того, как она рисует данные на картах, чтобы маскировать любые данные над землей. Для табличных наборов данных «сверху» показана батиметрия океана и постоянная светло-серая, где есть земля, оба рисуются под данными.
  • «Очертания» просто рисует очертания маски, политических границ, озер и рек.
  • "Выключено" ничего не рисует.

<e-mailDiagnosticsToErdData>

  • [править] ** <emailDiagnosticsToErdData> ** ] (#emaildiagnosticstoerddata) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xml. Значение тега может быть истинным (по умолчанию) или ложным. Если это правда,ERDDAP™Я отправлю стековый след Крису. Джон в Ноаа. глава (тотERDDAP™команда разработчиков) . Это должно быть безопасно, так как нет конфиденциальной информации. (Например, запрос Url) Он включен в электронную почту. Это должно позволить поймать любые неясные, совершенно неожиданные ошибки, которые приводят к NullPointerExceptions. В противном случае пользователь видит исключения, ноERDDAP™Команда разработчиков не (Мы не знаем, есть ли проблема, которую нужно решить.) .  

<graphBackgroundColor>

  • [править] ** <Источник: BackgroundColor ** ] (#graphbackgroundcolor) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlУказать цвет фона по умолчанию на графиках. Это касается практически всех графов. Есть несколько ситуаций, которые не затронуты. Цвет определяется как 8-значное шестнадцатеричное значение в форме 0xAARRGGBB, где AA, RR, GG и BB являются непрозрачными, красными, зелеными и синими компонентами соответственно. «0x» является чувствительным к случаю, но шестнадцатеричные цифры не чувствительны к случаю. Например, полностью непрозрачный (ff) Зеленовато-голубой цвет с красным = 22, зеленый = 88, синий = ee будет 0xff2288ee. Непрозрачный белый - 0xffffffff. По умолчанию непрозрачный светло-голубой (0xffccccff) , который имеет то преимущество, что отличается от белого, который является важным цветом во многих палитрах, используемых для рисования данных. Например,
    <graphBackgroundColor>0xffffffff</graphBackgroundColor>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.

<ipAddressMaxRequests>

  • [править] ** <ipAddressMaxЗапросы ** ] (#ipaddressmaxrequests) Редко используемый дополнительный тег (Первый, поддержанныйERDDAP™v2.12) в пределах<erddapDatasets метитьdatasets.xmlЭто часть системы, которая ограничивает способность чрезмерно агрессивных законных пользователей и злонамеренных пользователей делать большое количество одновременных запросов, которые ухудшают производительность системы для других пользователей. ipAddress MaxRequests определяет максимальное количество одновременных запросов, которые будут приниматься с любого конкретного IP-адреса. Дополнительные запросы получат ошибку HTTP 429: Слишком много запросов. Небольшие статические файлы в erddap/download/ и erddap/images/ не освобождаются от этого подсчета. По умолчанию 15. Максимально допустимая - 1000, что безумно высоко - не делайте этого!ERDDAP™не будет принимать число менее 6, потому что многие законные пользователи (В частности, веб-браузеры иWMSклиенты) Составьте до 6 запросов одновременно. TheERDDAP™Ежедневный отчет и аналогичная информация, записанная в файл log.txt с каждой основной перезагрузкой набора данных, теперь будут включать в себя подборку запросов по этим IP-адресам под названием «IP-адрес запроса». (Слишком много запросов) ". Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.

Раздел «Major LoadDatasets Time Series» status.html включает в себя столбец «tooMany», в котором перечислено количество запросов, которое превысило настройку ipAddressMaxRequests пользователя и, таким образом, увидело ошибку «Too Many Requests». Это позволяет легко увидеть, когда есть активные чрезмерно агрессивные законные пользователи и злонамеренные пользователи. (необязательно) Посмотрите в файле log.txt и решите, хотите ли вы внести этих пользователей в черный список.

Нет ничего плохого в том, чтобы установить это на большее число. Это зависит от тебя. Но это позволяет / побуждает людей настраивать системы, которые используют большое количество потоков для работы над проектами, а затем не дает им обратной связи о том, что то, что они делают, не приносит им никакой пользы.

<ipAddressMaxRequestsActive>

  • [править] ** <ipAddressMaxRequestsActive ** ] (#ipaddressmaxrequestsactive) Редко используемый дополнительный тег (Первый, поддержанныйERDDAP™v2.12) в пределах<erddapDatasets метитьdatasets.xmlЭто часть системы, которая ограничивает способность чрезмерно агрессивных законных пользователей и злонамеренных пользователей делать большое количество одновременных запросов, которые ухудшают производительность системы для других пользователей. ipAddressMaxRequestsActive определяет максимальное количество одновременных запросов, которые будут активно обрабатываться с любого конкретного IP-адреса. Дополнительные запросы будут стоять в очереди до тех пор, пока не будут обработаны предыдущие запросы. Небольшие статические файлы в erddap/download/ и erddap/images/ ARE освобождаются от этого подсчета и соответствующего дросселирования. Дефолт составляет 2. Максимально допустимое число - 100, что безумно высоко - не делайте этого! Вы можете установить это на 1, чтобы быть строгим, особенно если у вас есть проблемы с чрезмерно агрессивными или вредоносными пользователями. Пользователи быстро получат все данные, которые они запрашивают. (Скачать ipAddressMaxRequests) Но они не смогут использовать системные ресурсы. Мы не рекомендуем устанавливать это на большее число, потому что это позволяет чрезмерно агрессивным законным пользователям и злонамеренным пользователям доминировать.ERDDAPОбрабатывающая способность. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.  

<ipAddressUnlimited>

  • [править] ** <ipAddressUnlimited ** ] (#ipaddressunlimited) Редко используемый дополнительный тег (Первый, поддержанныйERDDAP™v2.12) в пределах<erddapDatasets метитьdatasets.xmlЭто часть системы, которая ограничивает способность чрезмерно агрессивных законных пользователей и злонамеренных пользователей делать большое количество одновременных запросов, которые ухудшают производительность системы для других пользователей. ipAddressUnlimited - это раздельный список IP-адресов, который вы хотите разрешить неограниченный доступ к вашемуERDDAP. Загляни в свой журнал. txt файл, чтобы увидеть, какой формат ваш сервер использует для IP-адресов. На некоторых серверах IP-адреса будут в формате #.#.#.# (где # - целое число от 0 до 255) ; тогда как на других он будет в формате #:#:#:#:#:#:#:#:# . Заявители в этом списке не подчиняются ни ipAddressMaxRequests, ни настройкам ipAddressMaxRequestsActive. Это может быть вторичнымERDDAP™или для определенных пользователей или серверов в вашей системе.ERDDAP™Всегда добавляет " (неизвестный IP-адрес) ", которыйERDDAP™использует, когда IP-адрес запрашивающего не может быть определен, например, для других процессов, выполняемых на том же сервере. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.

Если по какой-то причине все запросы пользователя получают сообщение об ошибке «Timeout waiting for your other requests to process»., то можно решить проблему, добавив IP-адрес пользователя в список ipAddressUnlimited, применив это изменение, а затем удалив его из этого списка.

<loadDatasetsMinMinutes>

  • [править] ** <Скачать игру MinMinutes ** ] (#loaddatasetsminminutes) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlУказать минимальное время (В минуты) между основными нагрузками Наборы данных (когдаERDDAP™переработкаdatasets.xmlвключая проверку каждого набора данных, чтобы увидеть, нужно ли его перезагружать в соответствии с его перезагрузкой Настройка EveryNMinutes, по умолчанию = 15) . Например,
    <loadDatasetsMinMinutes>15</loadDatasetsMinMinutes>  

Если заданный запуск загрузочных наборов занимает меньше этого времени, загрузчик просто неоднократно просматривает каталог флага и/или спит до тех пор, пока не пройдет оставшееся время. По умолчанию 15 минут, что должно быть хорошо практически для всех. Единственным недостатком установки этого числа на меньшее число является то, что оно увеличивает частоту.ERDDAP™возвращает наборы данных, которые имеют ошибки, которые препятствуют их загрузке (Например, удаленный сервер отключен) . Если таких наборов данных много, и они часто перепроверяются, источник данных может счесть это оскорбительным или агрессивным поведением. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.  

<loadDatasetsMaxMinutes>

  • [править] ** <Обсуждение DatasetsMaxMinutes ** ] (#loaddatasetsmaxminutes) является опциональным тегом внутри<erddapDatasets метитьdatasets.xmlУказать максимальное время (В минуты) большая нагрузка Усилия по сбору данных допускаются (перед нагрузкой Нить наборов данных рассматривается как «застопорившаяся» и прерывается) (По умолчанию 60) . Например,
    <loadDatasetsMaxMinutes>60</loadDatasetsMaxMinutes>  

В целом, это должно быть установлено как минимум в два раза дольше, чем вы думаете, что перезагрузка всех наборов данных. (совокупно) следует принимать (Компьютеры и сети иногда медленнее, чем ожидалось.) Это всегда должно быть намного дольше, чем загружаемые наборы данных. По умолчанию 60 минут. Некоторые люди установят это дольше. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.  

<logLevel>

  • [править] ** <logLevel>> ** ] (#loglevel) является опциональным тегом внутри<erddapDatasets метитьdatasets.xmlуказать, сколько диагностических сообщений отправляется в файл log.txt. Его можно настроить на «предупреждение» (Самые маленькие сообщения) "Инфо" (по умолчанию) или «все» (Больше всего сообщений) . Например,
    <logLevel>info</logLevel>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.  

<PartialRequestMaxBytes><PartialRequestMaxCells>

  • [править] ** <PartialRequestMaxBytes ] (#partialrequestmaxbytes-and-partialrequestmaxcells) и <PartialRequestMaxCells ** ] (#partialrequestmaxbytes-and-partialrequestmaxcells) Редко используются OPTIONAL теги в<erddapDatasets метитьdatasets.xml. Когда это возможно (И это не всегда возможно) ,ERDDAP™Разбивает большие запросы данных на куски для сохранения памяти.

32-битныйJavaВ упрощенном смысле максимальное число одновременных большой запросы составляют примерно 3/4 доступной памяти; (Значение -Xmx перешло к Tomcat) разделенный на размер куска (Например, 1200 МБ / 100 МБ => 12 запросов) . Другие вещи требуют памяти, поэтому фактическое количество запросов будет меньше. На практике дробление не всегда возможно. Таким образом, один огромный или несколько очень больших одновременных несъемных запросов могут вызвать проблемы на 32 битах.Java.

64-битныйJavaЗначение -Xmx может быть намного больше. Таким образом, память гораздо менее вероятно будет ограничением.

Вы можете переопределить размер фрагмента по умолчанию, определив эти теги вdatasets.xml (с различными значениями, показанными здесь) : Для сетей:<PartiveRequestMaxBytes>100000000000</partialRequestMaxBytes Для столов:<PartialRequestMaxCells>1000000</partialRequestMaxCells>

PartialRequestMaxBytes - предпочтительное максимальное количество байтов для частичного запроса данных сетки. (Часть общего запроса) . Дефолт = 100000000 (108) . Большие размеры не обязательно лучше (и не превышать 500 Мб, потому что это предел по умолчанию для THREDDS.DAPответы) . Но для больших размеров может потребоваться меньше доступа к тоннам файлов. (думатьERDСпутниковые данные с каждой точкой времени в отдельном файле - лучше получать больше данных из каждого файла в каждом частичном запросе) .

PartialRequestMaxCells — предпочтительное максимальное количество клеток. (nRows \* nКолонки в таблице данных) Частичный запрос данных TABLE (Часть общего запроса) . Дефолт = 100000. Большие размеры не обязательно лучше. Это приводит к более длительному ожиданию исходной партии данных из источника.

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, они были указаны в setup.xml, что все еще разрешено, но не рекомендуется.  

<Запрос Blacklist>

  • [править] ** <Запросить Blacklist ** ] (#запросить черный список) является опциональным тегомв пределах<erddapDatasets метитьdatasets.xmlкоторый содержит отдельный список цифровых IP-адресов, которые будут внесены в черный список. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.
    • Это может быть использовано для защиты отОтказ в обслуживании атакиСлишком ревностныйВеб роботили любой другой тип проблемного пользователя.
    • Неудобный пользователь - ЕслиERDDAP™Замедляет сканирование или замораживает / останавливает, причиной часто является проблемный пользователь, который запускает более одного сценария одновременно и / или делает большое количество очень больших, чрезвычайно неэффективных или недействительных запросов или одновременных запросов. Посмотри.log.txtпосмотреть, так ли это, и найти цифровой IP-адрес проблемного пользователя. Если это проблема, вы должны занести этого пользователя в черный список.

КогдаERDDAP™Получив запрос с занесенного в черный список IP-адреса, он вернет HTTP Error 403: Forbidden. Сопроводительное текстовое сообщение об ошибке побуждает пользователя отправить вам электронное письмо.ERDDAPАдминистратор, чтобы решить проблемы. Если вам нужно время, чтобы прочитать сообщение об ошибке (Многие, по-видимому, не) Вы можете работать с ними, чтобы заставить их запускать только один сценарий за раз, делать более эффективные запросы, исправлять проблемы в их сценарии. (Например, запрос данных из удаленного набора данных, который не может ответить до истечения времени) Или что-то еще было источником проблем.

Пользователи часто просто не знают, что их запросы вызывают беспокойство. Они часто не знают об ошибках, грубой неэффективности или других проблемах со своими сценариями. Они часто думают, что это потому, чтоERDDAP™предлагает данные бесплатно, чтобы они могли запрашивать столько данных, сколько они хотят, например, запустив несколько сценариев или используя несколько потоков одновременно.

  • Вы можете объяснить им, что каждыйERDDAP™Как бы велика и могущественна она ни была, она обладает ограниченными ресурсами. (Время процессора, жесткий диск I/O, пропускная способность сети и т. Д.) и это несправедливо, если один пользователь запрашивает данные таким образом, что вытесняет других пользователей или перегружает их.ERDDAP.
  • Когда пользователь знает, как сделать 2 одновременных запроса, он часто не видит причин не делать 5, 10 или 20 одновременных запросов, поскольку дополнительные запросы ничего не стоят. Это как асимметричная война: здесь наступательное оружие имеет огромное преимущество. (нулевая стоимость) над оборонительным оружием (Конечная установка с реальными затратами) .
  • Обратите внимание на то, что все больше и больше одновременных запросов уменьшаются; дополнительные запросы просто еще больше блокируют запросы других пользователей; они не приносят им значительного улучшения.
  • Напомните им, что есть и другие пользователи. (как случайные пользователи, так и другие пользователи, запускающие скрипты) Так что это несправедливо по отношению ко всемERDDAPРесурсы.
  • Технологические гиганты заставили пользователей ожидать от веб-сервисов бесконечных ресурсов. Хотя есть способы создатьСети/кластеры/федерацииERDDAPsчтобы сделатьERDDAP™с большим количеством ресурсов, большинствоERDDAP™У администраторов нет денег или рабочей силы для создания таких систем, и такая система все равно будет конечной. вERDНапример, есть один человек (я) писатьERDDAP™Управляя двумяERDDAPs (С помощью моего босса) и управление несколькими источниками данных с годовым аппаратным бюджетом в 0 долл. (Мы полагаемся на случайные гранты для оплаты оборудования) . Это не Google, Facebook, Amazon и т. д. со 100 инженерами и миллионами долларов дохода для переработки во все более крупные системы. И мы не можем просто переместить нашиERDDAP™Например, Amazon AWS, потому что затраты на хранение данных велики, а сборы за выход данных велики и изменчивы, в то время как наш бюджет на внешние услуги составляет фиксированный 0 долларов.
  • Мой запрос к пользователям: для невременных запросов (который является наиболее распространенным случаем) Их система должна делать только один запрос за раз. Если запросы чувствительны ко времени (Например, несколько .pngs на веб-странице, несколько плиток дляWMSклиента и т.д.) Тогда, возможно, 4 одновременных запроса должны быть максимальными. (И только на очень короткое время) .
  • Если вы объясните ситуацию пользователю, большинство пользователей поймут и будут готовы внести необходимые изменения, чтобы вы могли удалить их IP-адрес из черного списка.  
  • Чтобы внести пользователя в черный список, добавьте его цифровой IP-адрес в список IP-адресов, разделенный запятой.<Черный список> в вашемdatasets.xmlФайл. Чтобы найти проблемный IP-адрес пользователя, загляните вERDDAP™ BigParent Директория /logs/log.txt файл ( BigParent Директория указывается вНастройка.xml) Чтобы узнать, так ли это, и найти IP-адрес этого пользователя. IP-адрес для каждого запроса указан в строках, начинающихся с «{{{{{#» и представляет собой 4 номера, разделенные периодами, например, 123.45.67.8. Поиск «ERROR» поможет вам найти такие проблемы, как недействительные запросы.
  • Вы также можете заменить последний номер в IP-адресе на\(например, 202.109.200).\) блокировать диапазон IP-адресов 0-255.
  • Вы также можете заменить последние 2 номера в IP-адресе.\.\ (Например, 121.204.\.\) блокировать более широкий диапазон IP-адресов 0-255.0-255.
  • Например,
    <requestBlacklist>98.76.54.321, 202.109.200.\\*, 121.204.\\*.\\*</requestBlacklist>
  • Вам не нужно перезагружатьERDDAP™Для изменений в<«Черный список» вступает в силу. Изменения будут обнаружены в следующий раз.ERDDAP™Проверьте, нужно ли перезагружать какие-либо наборы данных. Вы можете ускорить процесс, посетивsetDataset Флаг URLдля любого набора данных.
  • ТвойERDDAP™Ежедневный отчет содержит список/список наиболее активных разрешенных и заблокированных заявителей.
  • Если вы хотите выяснить, какой домен / учреждение связано с числовым IP-адресом, вы можете использовать бесплатный обратный веб-сервис DNS. https://network-tools.com/ .
  • Могут быть случаи, когда имеет смысл блокировать определенных пользователей на более высоком уровне, например, вредоносных пользователей. Например, вы можете заблокировать их доступ ко всему на вашем сервере.ERDDAP. В Linux одним из таких методов являетсяiptables. Например, вы можете добавить правило, которое будет блокировать все, что исходит от 198.51.100.0 с помощью команды. iptables - I INPUT -s 198.51.100.0 -j DROP

<DownTroubleMillis>

  • [править] ** <Медленный DownTroubleMillis ** ] (#slowdowntroublemillis) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlкоторый содержит целое число, определяющее число миллисекунд (Дефолт = 1000) приостановить при ответе на все несостоявшиеся запросы, например, неизвестный набор данных, запрос слишком большой, пользователь в черном списке. Например,
    <slowDownTroubleMillis>2000</slowDownTroubleMillis>

Если сценарий делает один запрос сразу после другого, он может быстро сделать один плохой запрос за другим. С помощью этой настройки вы можете замедлить неудачный сценарий, чтобыERDDAP™Он не переполнен плохими запросами. Если человек делает плохую просьбу, он даже не заметит этой задержки. Рекомендации:

  • Если проблема - распределенный отказ в обслуживании (ДДОС) атака от 100+ злоумышленников, установить это на меньшее число (100?) . Замедление их всех слишком долго приводит к слишком большому количеству активных нитей.
  • Если беда из 1-10 источников, установите это на 1000 мс. (по умолчанию) , но большее число (как 10000) Это тоже разумно. Это замедляет их работу, поэтому они тратят меньше сетевых ресурсов. Кроме того, 1000 мс или около того не раздражают пользователей, которые делают плохой запрос.

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.  

<подпискаEmailBlacklist>

  • [править] ** <подписка Электронная почта Blacklist ** ] (#subscriptionemailblacklist) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlкоторый содержит разделенный запятой список адресов электронной почты, которые немедленно внесены в черный списокСистема подпискиНапример,
    <subscriptionEmailBlacklist>bob@badguy.com, john@badguy.com</subscriptionEmailBlacklist>  

Это нечувствительная к случаю система. Если в этот список будет добавлен адрес электронной почты, если этот адрес электронной почты имеет подписки, подписки будут отменены. Если адрес электронной почты в списке пытается подписаться, запрос будет отклонен. Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.  

Стандартный текст

  • Стандартный текст - Существует несколько опционных тегов (Большинство из них редко используются) в пределах<erddapDatasets метитьdatasets.xmlдля указания текста, который появляется в различных местахERDDAP. Если вы хотите изменить текст по умолчанию, скопируйте существующее значение из тега с тем же именем. кот /webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util.mesages.xml вdatasets.xmlЗатем модифицируйте контент. Преимущество их в том, чтоdatasets.xmlВы можете указать новые значения в любое время, даже еслиERDDAP™Бежит. Любые изменения в значениях этих тегов вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. Имена тегов описывают их цель, но для более глубокого понимания см. контент по умолчанию в Messages.xml.

    • <Стандартная лицензия

    • <Стандартный контакт>

    • <Стандартные лицензии

    • <StandardDisclaimerOfEndorsement

    • <StandardDisclaimerOfExternalLinks>

    • <Стандартный GeneralDisclaimer

    • <стандартный Политика конфиденциальности>

    • <Скачать HeadHtml5

    • <StartBodyHtml5> - это хороший тег для изменения, чтобы настроить внешний вид верхней части каждой веб-страницы в вашем веб-сайте.ERDDAP. В частности, вы можете использовать это, чтобы легко добавить временное сообщение наERDDAP™домашняя страница (Например, "Проверить новый набор данных JPL MUR SST v4.1 ..." или "ЭтоERDDAP™будет отключен для технического обслуживания 2019-05-08T17:00:00 PDT до 2019-05-08T20:00:00 PDT".) . Одна причуда поместить этот тег вdatasets.xmlЭто: когда вы перезагружаетесьERDDAPПервая просьба кERDDAP™Вернет старт по умолчанию BodyHtml5 HTML, но каждый последующий запрос будет использовать начальныйBodyHtml5 HTML, указанный вdatasets.xml.

    • <Краткое описание Html> - это хороший тег для изменения, чтобы настроить описание вашегоERDDAP. Обратите внимание, что вы можете легко изменить это, чтобы добавить временное сообщение на главную страницу. (Например, "ЭтоERDDAP™будет отключен для технического обслуживания 2019-05-08T17:00:00 PDT до 2019-05-08T20:00:00 PDT".) .

    • <EndBodyHtml5

ПередERDDAP™v2.00, они были указаны в setup.xml, что все еще разрешено, но не рекомендуется.  

<необычное Деятельность>

  • [править] ** <Необычная активность ** ] (#необычная активность) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlуказать максимальное количество запросов между двумя прогонами LoadDatasets, что считается нормальным; (По умолчанию 10000) . Если это число превышено, электронное письмо отправляется на электронную почту EverythingTo (как указано в setup.xml) . Например,
    <unusualActivity>10000</unusualActivity>  

Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг. ПередERDDAP™v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.  

<обновление MaxEvents>

  • [править] ** <Обновление MaxEvents ** ] (#updatemaxevents) Редко используемый OPTIONAL тег в<erddapDatasets метитьdatasets.xmlУказать максимальное количество событий изменения файла (По умолчанию 10) Это будет решаться [..]<Обновление EveryNMillis (#updateeverynmillis) система перед переключением на перезагрузку набора данных. Например,
    <updateMaxEvents>10</updateMaxEvents>  

Система EveryNMillis предназначена для быстрой работы непосредственно перед обработкой запроса пользователя. Если происходит много событий, связанных с изменением файлов, то, вероятно, он не может работать быстро, поэтому вместо этого он требует перезагрузки набора данных. Если выERDDAP™имеет дело с наборами данных, которые должны быть обновлены, даже если есть изменения в большом количестве файлов данных, вы можете установить это на большее количество (100?) .

<пользователь>

  • [править] ** <пользователь ** ] (пользователь) является опциональным тегом внутри<erddapDatasets метитьdatasets.xmlкоторый идентифицирует имя пользователя, пароль (Если аутентификация=обычай) и роли (раздельный список) . Использование имени пользователя и пароля несколько отличается в зависимости от значения [<аутентификация> (/docs/server-admin/additional-information #authentication) в твоемERDDAPфайл setup.xml.
    • Это частьERDDAP?Система безопасностиограничение доступа к некоторым наборам данных для некоторых пользователей.
    • Сделайте отдельный<Тег пользователя для каждого пользователя. По желанию, если аутентификация=oauth2, можно настроить две<пользователь теги для каждого пользователя: один для того, когда пользователь входит в систему через Google, когда пользователь входит в систему через Orcid, предположительно с теми же ролями.
    • Если нет никакого<user> tag для клиента, s/he будет иметь доступ только к общедоступным наборам данных, то есть наборам данных, которые не имеют<Доступно>> (#доступность) Тэг.
    • имя пользователя Для аутентификации = обычно имя пользователя представляет собой комбинацию букв, цифр, подчеркиваний и периодов. Для аутентификации = e-mail, имя пользователя - адрес электронной почты пользователя. Это может быть любой адрес электронной почты. Для аутентификации = Google, имя пользователя является полным адресом электронной почты пользователя Google. Это включает в себя учетные записи, управляемые Google, такие как@noaa.govсчета. Для аутентификации = orcid имя пользователя - номер учетной записи пользователя Orcid. (с тире) . Для аутентификации=auth2 имя пользователя - полный адрес электронной почты пользователя Google или номер учетной записи пользователя Orcid. (с тире) .
    • пароль Для аутентификации=email, google, orcid или oauth2 не указывайте атрибут пароля. Для аутентификации=обычай необходимо указать атрибут пароля для каждого пользователя.
      • Пароли, которые вводят пользователи, чувствительны к регистру и должны иметь 8 или более символов, чтобы их было сложнее взломать. В настоящее время даже 8 символов можно быстро и недорого взломать грубой силой, используя кластер компьютеров на AWS.ERDDAP™8-символьный минимум выполняется только тогда, когда пользователь пытается войти в систему (а не когда пользователь пытается войти в систему).<Тег user> обрабатывается, потому что этот код видит только хеш-дайджест пароля, а не пароль в простом тексте.
      • setup.xml<Пароль Кодирование определяет, как пароли хранятся в<пользователь теги вdatasets.xml. В целях повышения безопасности возможны следующие варианты:
        • MD5 (Не используйте это!) - для атрибута пароля укажите хеш-дайджест MD5 пароля пользователя.
        • UEPMD5 (Не используйте это!) - для атрибута пароля укажите хеш-дайджест MD5 имя пользователя :ERDDAP: пароль . Имя пользователя и "ERDDAP"используется длясоль значение хеширования, что затрудняет его декодирование.
        • SHA256 (не рекомендуется) - для атрибута пароля укажите хеш-дайджест SHA-256 пароля пользователя.
        • UEPSHA256 (По умолчанию, рекомендуется кодирование паролем. Но гораздо лучше: используйте опции аутентификации google, orchid или oauth2.) - для атрибута пароля укажите хеш-дайджест SHA-256 имя пользователя :ERDDAP: пароль . Имя пользователя и "ERDDAP"используются для соления хеш-значения, что затрудняет его расшифровку.
      • В Windows вы можете генерировать значения дайджеста паролей MD5, загрузив программу MD5. (такие какMD5) и использовать (Например,) : md5 -djsmith:ERDDAP: Реальный пароль
      • В Linux/Unix можно генерировать значения MD5, используя встроенную программу md5sum. (Например,) : Эхо-н" джмит:ERDDAP: Реальный пароль "|md5sum
      • Хранимые пароли с простым текстом чувствительны к делу. Сохраненные формы паролей MD5 и UEPMD5 не являются конфиденциальными.
      • Например, (Использование UEPMD5) , если имя пользователя = "jsmith" и пароль = "myPassword",<user> tag - это:
            <user username="jsmith"  
password="57AB7ACCEB545E0BEB46C4C75CEC3C30"
roles="JASmith, JASmithGroup" />

где сохраненный пароль был сгенерирован md5 -djsmith:ERDDAPMyPassword

  • Роли - это разделенный запятой список ролей, на которые авторизован пользователь. Любой<Набор данных может иметь [<Доступно>> (#доступность) тег, в котором перечислены роли, которым разрешен доступ к этому набору данных. Для данного пользователя и данного набора данных, если одна из ролей в списке ролей пользователя соответствует одной из ролей в списке набора данных<Доступный> ролям, то пользователь имеет право доступа к этому набору данных.

Каждый пользователь, который входит в систему, автоматически получает роль.\[кто-нибудь заплатит в\]Если существует a<User> Tag для нихdatasets.xmlИли нет. Если данный набор данных имеет

            <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

Любой пользователь, который вошел в систему, будет иметь право доступа к этому набору данных, даже если его нет.<User> Tag для нихdatasets.xml.

  • Любые изменения в стоимости этого тега вступят в силу в следующий раз.ERDDAP™читатьdatasets.xmlв том числе в ответ на набор данныхфлаг.  

<PathRegex>

  • [править] ** <PathRegex ** ] (#патрегекс) Позволяет указать регулярное выражение, которое ограничивает, какие пути (какие подкаталоги) Они будут включены в набор данных. По умолчанию это .\*, который соответствует всем путям. Это редко используемый, редко необходимый, OPTIONAL тег дляEDDGridНаборы данных из файлов, наборы данных из файлов и несколько других типов наборов данных. Однако, когда вам это нужно, вы действительно нуждаетесь в этом.

Чтобы сделать эту работу, вы должны быть действительно хороши с регулярными выражениями. Посмотри.нормативная документацияиучебник по регексу. В частности, вам нужно знать о группах захвата. (Что-то внутри скобок) и символ "или"|". Вместе они позволяют указать любое количество вариантов, например, (вариант 1|вариант 2|опция 3) . Кроме того, любой из вариантов не может быть ничем, например, (|вариант 2|опция 3) . Кроме того, вы должны знать, что группы захвата могут быть вложены, т.е. любой вариант в группе захвата может содержать другую группу захвата, например, (|вариант 2 (|вариант 2 b|Option2C) |опция 3) Это означает, что за вариантом 2 не может следовать ничего, или за вариантом 2b, или за вариантом 2c. Для pathRegexes каждый вариант будет иметь одно имя папки, за которым следует a/, например, bar/.

Сложная часть пути Regex: когдаERDDAP™Рекурсивно спускается по дереву каталогов, путьRegex должен принимать все пути, которые он встречает на своем пути к каталогам с данными. Regex с вложенными группами захвата - хороший способ справиться с этим.

Пример: Предположим, что мы имеем следующую структуру каталога:

/foo/bar/D0001/a/\\*.nc  
/foo/bar/D0001/b/\\*.nc
/foo/bar/D0002/a/\\*.nc
/foo/bar/D0002/b/\\*.nc
...
/foo/bar/E0001/a/\\*.nc
...

и указанный файлDirectory является /foo/bar/, и мы просто хотим.ncФайлы в D\[0-9\]{4}/a/ подкаталоги. Решение заключается в настройке PathRegex на /foo/bar/ (|D\[0-9\]{4} (|а)) )
Это говорит: Путь должен начинаться с /foo/bar За этим может следовать ничто или D.\[0-9\]{4} Это может сопровождаться ничем или

Да, PathRegex может быть невероятно трудно сформулировать. Если вы застряли, спросите у программиста (Самое близкое в реальном мире к волшебнику, извергающему заклинания?) Или отправьте письмо Крису. Джон на noaa.gov.

<Dataset>

  • [править] ** <набор данных ** ] (#набор данных) является опциональным (всегда используется) в пределах одного<erddapDatasets метитьdatasets.xml(если вы включаете всю информацию между<набор данных> и</dataset>) полностью описывает один набор данных. Например,
    <dataset type="EDDGridFromDap" datasetID="erdPHssta8day" active="true"> ... </dataset>  

Может быть любое количество тегов набора данных в вашемdatasets.xmlФайл. Три атрибута могут появиться в<dataset> tag:  

  • тип="" а Тип " является обязательным атрибутом в<dataset> tag indatasets.xmlкоторый идентифицирует тип набора данных (Например, является ли онEDDGrid/gridded или EDDTable/tabular dataset) и источник данных (Например, база данных, файлы или пультOPeNDAPсервер) . Видишь? Список типов наборов данных .  

набор данных Ид

  • datasetID= DatasetID " является обязательным атрибутом в<тег dataset>, который присваивает короткий (обычно)<15 символов), уникальный, идентифицирующий имя набору данных.
    • ThedatasetIDДолжно быть письмо (A-Z, a-z) За ним следует любое количество A-Z, a-z, 0-9 и \_ (но лучше всего, если это не так).<Всего 32 символа.
    • Набор данных Идентификаторы чувствительны к случаю, но не создавайте дваdatasetIDs, которые отличаются только верхними / нижними буквами. Это вызовет проблемы на компьютерах Windows (Ваш и/или компьютер пользователя) .
    • Лучшие практики: Мы рекомендуем использоватьверблюд Дело.
    • Лучшие практики: Мы рекомендуем, чтобы первая часть была аббревиатурой или аббревиатурой имени учреждения-источника, а вторая часть была аббревиатурой или аббревиатурой имени набора данных. Когда это возможно, мы создаем имя, которое отражает имя источника для набора данных. Например, мы использовалиdatasetID= erdPHssta8day" для набора данныхNOAA NMFS SWFSCОтдел экологических исследований (ERD) который определяется источником как спутник/PH/sst8 дней.
    • Если вы меняете имя набора данных, старый набор данных (со старым именем) будет жить вERDDAP. Это «сиротский» набор данных, потому что спецификация для негоdatasets.xmlТеперь его нет. С этим необходимо бороться:
      1. ДляERDDAP™v2.19 и более поздние, вам не нужно ничего делать.ERDDAP™Мы автоматически удалим эти данные.
      2. ДляERDDAP™v2.18 и ранее, вам нужно сделать что-то, чтобы удалить сиротские наборы данных: Сделать активный = "ложный" набор данных, например,
                <dataset type="EDDTableFromNcFiles" datasetID="*theOldName*" active="false" />  

После следующей большой нагрузки Наборы данных, Вы можете удалить этот тег после того, как старый набор данных неактивен.  

активный

  • Активный = булевый " является опциональным атрибутом в<dataset> tag indatasets.xmlЧто означает, что набор данных активен (пригодных для использования вERDDAP) Или нет.
    • Действительные ценности истинны (по умолчанию) и ложные.
    • Поскольку по умолчанию верно, вам не нужно использовать этот атрибут, пока вы не захотите временно или навсегда удалить этот набор данных изERDDAP.
    • Если вы просто удалите активный = «настоящий» набор данныхdatasets.xmlПри этом данные будут активны вERDDAP™Но никогда не будет обновляться. Такой набор данных будет «сиротой» и будет указан в статусе. html веб-страница прямо под списком наборов данных, которые не удалось загрузить.
    • Если вы установили активный = "ложный",ERDDAP™Отключит набор данных в следующий раз, когда он попытается обновить набор данных. Когда ты это делаешь,ERDDAP™не выбрасывает какую-либо информацию, которую он мог хранить о наборе данных, и, конечно, не делает ничего с фактическими данными.
    • Чтобы удалить набор данных изERDDAP™Видишь?Удаление Force Dataset.  

** Между ними могут появляться различные<набор данных> и</dataset> Tags. **
Есть некоторые вариации, в которых теги разрешены, по каким типам наборов данных. См. документацию для конкретногоТип набора данныхДля деталей.

<доступный To>

  • [править] ** <доступный Чтобы ** ] (#доступность) является опциональным тегом в<тег dataset>, который определяет список, разделенный запятойроликоторые имеют доступ к этому набору данных. Например,
    <accessibleTo>RASmith, NEJones</accessibleTo>  
    • Это частьERDDAP?Система безопасностиограничение доступа к некоторым наборам данных для некоторых пользователей.
    • Если этого нет, все пользователи (Даже если они не вошли в систему) будет иметь доступ к этому набору данных.
    • Если этот тег присутствует, этот набор данных будет виден и доступен только зарегистрированным пользователям, которые имеют одну из указанных ролей. Этот набор данных не будет виден пользователям, которые не вошли в систему.
    • Каждый пользователь, который входит в систему, автоматически получает роль.\[кто-нибудь заплатит в\]Если существует a<User> Tag для нихdatasets.xmlИли нет. Если данный набор данных имеет
        <accessibleTo>\\[anyoneLoggedIn\\]</accessibleTo>  

Любой пользователь, который вошел в систему, будет иметь право доступа к этому набору данных, даже если его нет.<User> Tag для нихdatasets.xml.  

<ГрафыДоступные к >

  • [править] ** <ГрафыДоступно> ** ] (#графы доступны) является опциональным тегом в<dataset> tag indatasets.xmlкоторый определяет, доступны ли графика и метаданные для набора данных для общественности. Он предлагает способ частично отменить набор данных [<Доступно>> (#доступность) установка. Допустимые значения:
    • авто- Это значение (или отсутствие а)<graphsAccessibleTo> tag for the dataset) делает доступ к графам и метаданным из набора данных имитирующим набор данных<Доступно>Настройка. Поэтому, если набор данных является частным, его графики и метаданные будут частными. И если набор данных является общедоступным, его графики и метаданные будут общедоступными.
    • публичный - Этот параметр делает графики и метаданные набора данных доступными для всех, даже для пользователей, которые не вошли в систему, даже если набор данных в противном случае является конфиденциальным, потому что у него есть<Доступно> Tag.  

<доступный ViaFiles>

Если значение истинно,ERDDAP™Это позволит пользователям просматривать и загружать файлы исходных данных набора данных черезERDDAP?"files"система. Видишь?"files"системыдокументацияЗа дополнительной информацией.

По умолчанию значение<Доступные файлы исходит из<Доступные файлы > вНастройка.xml. Он имеет значение ложного по умолчанию, но мы рекомендуем добавить этот тег в ваш setup.xml со значением истинного.

Рекомендация - Мы рекомендуем сделать все соответствующие наборы данных доступными через файловую систему, установив<По умолчанию AccessibleViaFiles> соответствует действительности в setup.xml, поскольку существует группа пользователей, для которых это предпочтительный способ получения данных. Среди прочих причин,"files"Система позволяет пользователям легко видеть, какие файлы доступны и когда они в последний раз изменились, что облегчает пользователю сохранение собственной копии всего набора данных. Если вы обычно не хотите делать наборы данных доступными через файловую систему, установите<По умолчаниюДоступные файлы> Ложные. В любом случае, просто используйте<* для немногих наборов данных, которые являются исключениями из общей политики, установленной<Доступные файлы > (Например, когда набор данных использует.ncмлФайлы, которые не очень полезны для пользователей) .  

<доступный ВиаWMS>

  • [править] ** <доступный ВиаWMS> ** ] (#доступные водоросли) является опциональным тегом в<dataset> tag indatasets.xmlдля всехEDDGridПодклассы. Он может иметь значение истинного (по умолчанию) или ложным. Например,
    <accessibleViaWMS>true</accessibleViaWMS>  

Если значение ложное,ERDDAP?WMSСервер не будет доступен для этого набора данных. Это обычно используется для наборов данных, которые имеют некоторые значения долготы более 180. (которые технически недействительны дляWMSуслуги) , и для которого вы также предлагаете вариант набора данных со значениями долготы полностью в диапазоне от -180 до 180EDDGridLonPM180. Если значение истинно,ERDDAP™Мы постараемся сделать набор данных доступным черезERDDAP?WMSСервер. Но если набор данных совершенно не подходит дляWMS (Например, нет данных о долготе или широте.) Тогда набор данных не будет доступен черезERDDAP?WMSсервера, независимо от этого параметра.  

<добавлять Переменные Где >

  • [править]<Переменные где >>> (#addvariables Везде) является опциональным тегом внутри<Тег dataset> для всех наборов данных EDDTable.

Запросы на любой набор данных EDDTable могут включать &add Переменные Где? (" атрибут Имя "" атрибут ценность ") Что говоритERDDAP™Добавить все переменные в набор данных, где атрибутName = атрибутValue Список запрашиваемых переменных. Например, если пользователь добавляет &add Переменные Где? ("ioos\_category"Ветер") на запрос,ERDDAPдобавит все переменные в набор данных, которые имеютioos\_category= Атрибут ветра в списке запрашиваемых переменных (Например, WindSpeed, WindDirection, WindGustSpeed) . атрибут Имя и атрибут ценность Они чувствительны к случаям.

вdatasets.xmlесли часть dataset.xml для набора данных имеет

<addVariablesWhere>*attributeNamesCSV*<addVariablesWhere>  

Например,

<addVariablesWhere>ioos\\_category,units<addVariablesWhere>  

Форма доступа к данным (.html веб-страница) для набора данных будет включать виджет (Для каждого из них в отдельном списке) Ниже списка переменных, который позволяет пользователям указывать значение атрибута. Если пользователь выбирает значение атрибута для одного или нескольких имен атрибутов, они будут добавлены в запрос через &add. Переменные Где? (" атрибут Имя "" атрибут ценность ") . Таким образом, этот тег вdatasets.xmlПозволяет указать список имен атрибутов, которые будут отображаться в Форме доступа к данным для этого набора данных и облегчает пользователям добавление и добавление переменных. Где выполняется запрос. The атрибутNamesCSV Список деликатный.

<высотометрыPerSourceUnit>

  • [править] ** <Высотные измерителиPerSourceUnit ** ] (#altitudemeterspersourceunit) является опциональным тегом внутри<Тег dataset> в наборах данных. xxml для EDDTableFromSOSнаборы данных (Только!) который определяет число, умноженное на значения высоты или глубины источника, чтобы преобразовать их в значения высоты. (в метрах над уровнем моря) . Например,
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>  

Этот тег ДОЛЖЕН использоваться, если значения вертикальной оси набора данных не являются счетчиками, положительный = вверх. В противном случае он опционален, так как значение по умолчанию равно 1. Например,

  • Если источник уже измеряется в метрах над уровнем моря, используйте 1 (или не используйте этот тег, так как 1 - значение по умолчанию) .
  • Если источник измеряется в метрах ниже уровня моря, используйте -1.
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>
  • Если источник измеряется в км над уровнем моря, используйте 0,001.  

<DataQuery>

  • [править] ** <По умолчанию DataQuery ** ] (#по умолчанию) является опциональным тегом в<dataset> tag indatasets.xmlчто говоритERDDAP™для использования указанного запроса (Часть URL после «?».) Если файл .html Тип (Форма доступа к данным) Запрашивается без запроса.
    • Вам, вероятно, редко придется использовать это.
    • Вам нужен XML-код (не процентный код) запросы по умолчанию, поскольку они находятся в XML-документе. Например, & становится &<становится<> становится >
    • Пожалуйста, проверьте свою работу. Легко ошибиться и не получить то, что хочешь.ERDDAP™Мы постараемся исправить ваши ошибки, но не полагайтесь на это, поскольку\*как\*Он очищается, может измениться.
    • Для наборов данных griddap, общее использование этого заключается в том, чтобы указать другое значение глубины или высоты по умолчанию. (Например,\[0\]вместо того, чтобы\[последний\]) . В любом случае, вы всегда должны перечислять все переменные, всегда использовать одни и те же значения размерности для всех переменных и почти всегда использовать\[0\],\[последний\]или\[0:Последний\]Для значений измерений. Например:
        <defaultDataQuery>u\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\],v\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]</defaultDataQuery>
    • ДляtabledapНаборы данных, если вы не укажете никаких ограничений, запрос вернет весь набор данных, который может быть непрактично большим, в зависимости от набора данных. Если вы не хотите указывать какие-либо ограничения, а не иметь пустой<По умолчанию DataQuery (Это то же самое, что не указывать по умолчанию DataQuery) , вам нужно явно перечислить все переменные, которые вы хотите включить в DataQuery по умолчанию.
    • Дляtabledapнаборы данных, наиболее распространенным использованием которых является указание другого диапазона времени по умолчанию (относительно max (время) Например, &time>=max (время) -1 день, или относительно сейчас, например, &time>=now-1 день) . Помните, что запрос переменных данных не совпадает с указанием всех переменных данных, поэтому обычно вы можете просто указать новое ограничение времени. Например:
        <defaultDataQuery>&amp;time&gt;=max(time)-1day</defaultDataQuery>  

или

    <defaultDataQuery>&amp;time&gt;=now-1day</defaultDataQuery>  

<По умолчанию GraphQuery>

  • [править] ** <По умолчанию GraphQuery ** ] (#defaultgraphry) является опциональным тегом в<dataset> tag indatasets.xmlчто говоритERDDAP™для использования указанного запроса (Часть URL после «?».) Если файл .graph Тип (Создайте графическую форму) Запрашивается без запроса.
    • Вам, вероятно, редко придется использовать это.
    • Вам нужен XML-код (не процентный код) запросы по умолчанию, поскольку они находятся в XML-документе. Например, & становится &<становится<> становится >
    • Пожалуйста, проверьте свою работу. Легко ошибиться и не получить то, что хочешь.ERDDAP™Мы постараемся исправить ваши ошибки, но не полагайтесь на это, поскольку\*как\*Он очищается, может измениться.
    • Для наборов данных griddap наиболее распространенным использованием этого является определение другого значения глубины или высоты по умолчанию. (Например,\[0\]вместо того, чтобы\[последний\]) и/или указать, что конкретная переменная должна быть отображена на графике. В любом случае, вы почти всегда будете использовать\[0\],\[последний\]или\[0:Последний\]Для значений измерений. Например:
        <defaultGraphQuery>temp\\[last\\]\\[0\\]\\[0:last\\]\\[0:last\\]&amp;.draw=surface&amp;.vars=longitude|latitude|temp</defaultGraphQuery>  
    (Положите все на одну линию)
    • ДляtabledapНаборы данных, если вы не указываете никаких ограничений, запрос будет отображать весь набор данных, что может занять много времени, в зависимости от набора данных.
    • Дляtabledapнаборы данных, наиболее распространенным использованием которых является указание другого диапазона времени по умолчанию (относительно max (время) Например, &time>=max (время) -1 день, или относительно сейчас, например, &time>=now-1 день) . Помните, что запрос переменных данных не совпадает с указанием всех переменных данных, поэтому обычно вы можете просто указать новое ограничение времени. Например:
        <defaultGraphQuery>&amp;time&gt;=max(time)-1day</defaultGraphQuery>  

или

    <defaultGraphQuery>&amp;time&gt;=now-1day</defaultGraphQuery>  

<размерностьValuesInMemory>

  • [править] ** <измерение Ценности в памяти ** ] (#dimensionvaluesinmemory) (истинный (по умолчанию) ложный) Опциональный и редко используемый тег в<Тег dataset> для любогоEDDGridнабор данных, который сообщаетERDDAP™где хранить исходные значения измерений (Также известный какaxisVariables) :

    • Правда = в памяти (Он быстрее, но использует больше памяти.)
    • Ложь = на диске (Медленнее, но не использует память)

Например,

<dimensionValuesInMemory>false</dimensionValuesInMemory>  

Вы должны использовать это только с непо умолчанию значение ложного, если выERDDAP™Имеет множество наборов данных с очень большими размерами (миллионы ценностей, например, вEDDGridНаборы данных AudioFiles) иERDDAPИспользование памяти всегда слишком высоко. Смотрите Память: в настоящее время используется линия\[Ваш домен\]/erddap/status.htmlконтролироватьERDDAP™Использование памяти.  

<FileTableInMemory>

  • [править] ** <FileTableInMemory ** ] (#filetableinmemory) (истинный или ложный (по умолчанию) ) является опциональным тегом внутри<Тег dataset> для любогоEDDGridИз материалов и EDDTable Набор данных из файлов, который сообщаетERDDAP™Где хранить файлTable (который содержит информацию о каждом файле исходных данных) :

    • Правда = в памяти (Он быстрее, но использует больше памяти.)
    • Ложь = на диске (Медленнее, но не использует память)

Например,

<fileTableInMemory>true</fileTableInMemory>  

Если вы установите это для любого набора данных, следите за памятью: в настоящее время используется строка в\[Ваш домен\]/erddap/status.htmlобеспечить, чтобыERDDAP™У него много свободной памяти.  

<fgdcFile>

  • [править] ** <fgdcFile> ** ] (#fgdcfile) является опциональным тегом в<dataset> tag indatasets.xmlчто говоритERDDAP™использовать готовый файл FGDC вместоERDDAP™Попробуйте создать файл. Использование:
    <fgdcFile>*fullFileName*</fgdcFile>  

полный Имя файла Может ссылаться на локальный файл (где-то в файловой системе сервера) URL удаленного файла. Если полный Имя файла или файл не найден, набор данных не будет иметь метаданных FGDC. Это также полезно, если вы хотите подавить метаданные FGDC для определенного набора данных. Или вы можете поставить<fgdcActive>ложный</fgdcActive> в setup.xmlERDDAP™не предлагать метаданные FGDC для любого набора данных.  

<Изо19115 File>

  • [править] ** <Изо19115 Файл ** ] (#iso19115file) является опциональным тегом в<dataset> tag indatasets.xmlчто говоритERDDAP™использовать готовый файл ISO 19115 вместоERDDAP™Попробуйте создать файл. Использование:
    <iso19115File>*fullFileName*</iso19115File>  
    полный Имя файла Может ссылаться на локальный файл (где-то в файловой системе сервера) URL удаленного файла. Если полный Имя файла Если файл не найден, набор данных не будет иметь метаданных ISO 19115. Это также полезно, если вы хотите подавить метаданные ISO 19115 для определенного набора данных. Или вы можете поставить<Изо19115Активный>ложный</iso19115Active> в setup.xmlERDDAP™не предлагать метаданные ISO 19115 для любого набора данных.  

<ось матча NDigits>

  • [править] ** <matchAxisNDigits> ** ] (#matchaxisndigits) является опциональным тегом внутриEDDGrid <dataset> tag дляEDDGridнаборы данных, которые представляют собой агрегации, например, агрегации файлов. Каждый раз, когда набор данных перезагружается,ERDDAP™проверяет, что значения оси каждого компонента агрегации одинаковы. Точность испытаний определяетсяОбсуждение AxisNDigits, в котором указывается общее число цифр, которые должны совпадать при тестировании значений оси двойной точности, 0 - 18 (по умолчанию) . При тестировании значений поплавковой оси тест проводится с помощью matchAxisNDigits/2 цифр. Значение 18 или выше говоритEDDGridЧтобы сделать точный тест. Значение 0 говоритEDDGridНе следует делать никаких тестов, которые не рекомендуются, кроме как описано ниже.

ХотяEDDGridпозволяет компонентам агрегации иметь несколько разные значения оси, пользователю показан только один набор значений оси. Набор состоит из того же компонента, который предоставляет исходные метаданные набора данных. Например, дляEDDGridНаборы данных FromFiles, которые определяются<Метаданные > Настройка (Дефолт - последний) .

Использование matchAxisNDigits\=0 в большинстве случаев сильно обескураживает, поскольку отключает всю проверку. Даже минимальная проверка полезна, потому что она гарантирует, что компоненты подходят для агрегирования. Мы все предполагаем, что все компоненты подходят, но это не всегда так. Таким образом, это важный тест на здравомыслие. Даже значения matchAxisNDigits1, 2, 3 или 4 не рекомендуется, потому что различные значения оси часто указывают на то, что компоненты были созданы. (бинд?) Иными словами, они не подходят для агрегирования.

Существует один случай, когда использование matchAxisNDigits\=0 полезно и рекомендуется: с агрегациями удаленных файлов, например, данных в ведрах S3. В этом случае, если набор данных использует кэш FromUrl, кэшSizeGB, matchAxisNDigits\=0, иEDDGridОтраслевая система дляАгрегация через Файловые именаТогдаEDDGridНе нужно читать все удаленные файлы, чтобы выполнить агрегацию. Это позволяет наборам данных, сделанным из данных в ведрах S3, загружаться очень быстро. (В отличие от абсурдно медленногоEDDGridНеобходимо скачать и прочитать все файлы) .

<nThreads>

  • Начиная сERDDAP™версии 2.00, когда любой подкласс EDDTable FromFiles илиEDDGridсчитывает данные из своего источника, может считывать один кусок данных (Например, один исходный файл) в то время (в одной нити) (Это дефолт) или более одной части данных (например, 2+ исходных файлов) в то время (в 2 или более потоках) при обработке каждого запроса.  
    • Правило большого пальца: Для большинства наборов данных в большинстве систем используйте nThreads=1 по умолчанию. Если у вас мощный компьютер (Много процессорных ядер, много памяти) , затем подумайте о настройке nThreads на 2, 3, 4 или выше (Но никогда больше, чем количество ядер процессора в компьютере.) Для наборов данных, которые могут принести пользу:

      • Большинство наборов данных EDDTableFromFiles получат выгоду.
      • Наборы данных, где что-то вызывает задержку до того, как часть данных может быть обработана, выиграют, например:
        • Наборы данных ссжатый снаружи (например,.gz) бинарный (например,.nc) Файлы, потому чтоERDDAP™Необходимо декомпрессировать весь файл, прежде чем он начнет читать файл.
        • Наборы данных, которые используютCacheSizeGBПотому чтоERDDAP™Часто приходится скачивать файл, прежде чем он сможет его прочитать.
        • Наборы данных с файлами данных, хранящимися в параллельной файловой системе с высокой пропускной способностью, поскольку они могут доставлять больше данных, быстрее, при запросе. Примеры параллельных файловых систем включаютДжейбод,NFS,ГлюстерФСAmazon S3 и Google Cloud Storage.  

Предупреждение: При использовании nThreads>1 следите заERDDAPИспользование памяти, использование потоков и общая отзывчивость (смотретьERDDAPСтраница статуса) . См. комментарии по этим вопросам ниже.  

  • Для данного набора данных эта настройка nThreads может поступать из разных мест:

    • Еслиdatasets.xmlЧасть для набора данных имеет<nThreads> tag (в пределах<тег dataset>, а не глобальный атрибут с значением >= 1, используется значение nThreads. Таким образом, вы можете указать разные номера для каждого набора данных.
    • В противном случае, еслиdatasets.xmlимеет<nTableThreads> tag (для EDDTable Из наборов данных Files) или<nGridThreads> Tag (дляEDDGridнаборы данных) со значением >= 1, за пределами а<тег dataset>, используется значение nThreads.
    • В противном случае используется 1 поток, что является безопасным выбором, поскольку он использует наименьшее количество памяти.  

ДляоригинальныйERDDAP™установкаМы используем <nTableThreads> 6.6</nTableThreads> (Это мощный сервер.) Сложные запросы сейчас занимают 30% от предыдущего времени.  

Мониторинг использования ресурсов

Когда вы экспериментируете с различными настройками nThreads (и, возможно, делать сложные выборочные запросыERDDAP) Вы можете контролировать использование ресурсов вашего компьютера:

  • На компьютерах Mac используйте Finder : Applications : Utilities : Activity Monitor
  • В Linux используйте top
  • В Windows 10, используйте Ctrl + Shift + Esc Откройте диспетчер задач  
Предупреждение: снижение отзывчивости

В изоляции,ERDDAP™Выполнит запрос к набору данных с более высокой настройкой nThreads быстрее, чем если nThreads=1. Но пока этот запрос обрабатывается, другие запросы от других пользователей будут несколько вытеснены и получат более медленный ответ. Кроме того, когдаERDDAP™отвечает на заданный запрос, другие вычислительные ресурсы (например, доступ к дисковому диску, пропускная способность сети) Возможно ограничение, особенно при более высоких настройках nThreads. Таким образом, при более высоких настройках nThreads общая отзывчивость системы будет хуже, когда обрабатываются несколько запросов - это может очень раздражать пользователей! Из-за этого: никогда не устанавливайте nThreads больше, чем количество ядер процессора в компьютере. nThreads=1 является самой справедливой установкой с момента каждого запроса. (нескольких одновременных запросов) Получит равную долю вычислительных ресурсов. Но чем мощнее компьютер, тем меньше это будет проблемой.  

Предупреждение: Высшая память Использовать дляEDDGridНаборы данных

Использование памяти при обработке запросов прямо пропорционально настройке nThreads. Довольно безопасное эмпирическое правило: вам нужно установитьERDDAPНастройки памятикак минимум 2 ГБ + (2 ГБ \* nThreads) . Некоторые запросы к некоторым наборам данных требуют больше памяти, чем это. Настройка nThreads=3 для любогоEDDGridНабор данных означает, что настройка -Xmx должна быть не менее -Xmx8000M. Если эта настройка памяти больше 3/4 физической памяти компьютера, уменьшите настройку nThreads, чтобы вы могли уменьшить настройку памяти.

Использование памяти для обработки запросов потоков к наборам данных EDDTable почти всегда ниже, потому что файлы обычно намного меньше. Однако, если данный набор данных EDDTable имеет огромный (Например, >=1 ГБ) Файлы данных, а затем комментарии выше будут применяться и к этим наборам данных.

Независимо от настройки nThreads, внимательно следите за статистикой использования памяти на вашем компьютере.ERDDAPСтраница статуса. Вы никогда не должны приближаться к максимизации использования памяти.ERDDAPВ противном случае будут серьезные ошибки и неудачи.

Временно установленный на 1

Если текущее использование памяти немного выше,ERDDAP™Установите nThreads для этого запроса на 1. Таким образом,ERDDAP™Сохраняет память, когда памяти мало.  

Уменьшение возвратов

Уменьшаются доходы от увеличения настройки nThreads: 2 потока будут намного лучше, чем 1. (Если мы игнорируем динамический разгон) . Но 3 будет лишь куском лучше 2. И 4 будет лишь незначительно лучше, чем 3.

В одном тесте сложного запроса на большой набор данных EDDTable время ответа с использованием 1, 2, 3, 4, 5, 6 потоков составляло 38, 36, 20, 18, 13, 11 секунд. (На этом сервере используется nTableThreads=6.)

nThreads=2: Хотя часто существует значительное преимущество в определении nThreads=2 вместо nThreads=1, часто это не будет иметь большого значения в тактовом времени, необходимом для ответа на запрос данного пользователя. Причина в том, что при nThreads=1 большинство современных процессоров частодинамически разгон (турбонаддув) временно увеличить тактовую частоту ЦПУ. Таким образом, с nThreads=1 одно ядро часто будет работать с более высокой тактовой частотой, чем каждое из двух ядер, если использовать nThreads=2. Несмотря на это, мы по-прежнему считаем, что лучше использовать nThreads=2, а не nThreads=1, поскольку эта настройка даст лучшие результаты в более широком спектре ситуаций. И, конечно же, если на вашем компьютере достаточно ядер процессора, еще более высокая настройка nThreads должна дать лучшие результаты.

Как обсуждалось выше, очень высокие настройки nThreads могут привести к более быстрым ответам на некоторые запросы, но риск в целом снизился.ERDDAP™отзывчивость и высокое использование памяти (Как отмечалось выше) Хотя эти запросы обрабатываются, это, как правило, не очень хорошая идея.

процессор ядра

Вы никогда не должны устанавливать nThreads на число, превышающее количество ядер процессора в процессоре компьютера. По сути, все современные процессоры имеют несколько ядер (Например, 2, 4 или 8) . Некоторые компьютеры даже имеют несколько процессоров. (Например, 2 CPU \* 4 ядра/CPU = 8 ядер CPU) . Чтобы узнать, сколько процессоров и ядер у компьютера:

  • На Mac, использовать Вариант ключа Меню Apple: системная информация
  • Для Linux используйте cat /proc/cpuinfo
  • В Windows 10, используйте Ctrl + Shift + Esc открывать Диспетчер задач: производительность (Логические процессоры показывают общее количество ядер процессора)

Да, большинство процессоров в наши дни говорят, что они поддерживают 2 потока на ядро. (черезгиперпоточность) Но 2 потока разделяют вычислительные ресурсы, поэтому вы не увидите удвоенную пропускную способность на процессоре под большой нагрузкой. Например, компьютер с одним процессором с 4 ядрами может претендовать на поддержку до 8 потоков, но вы никогда не должны превышать nThreads = 4 в этом.ERDDAP. Помните:

  • N-образные нити, расположенные вERDDAP™по запросу.ERDDAP™Часто обрабатывает несколько запросов одновременно.
  • ERDDAP™выполняет другие действия, кроме обработки запросов, например, перезагружает наборы данных.
  • КогдаERDDAP™отвечает на заданный запрос, другие вычислительные ресурсы (например, доступ к дисковому диску, пропускная способность сети) может быть ограничивающим. Чем выше вы установите nThreads, тем больше вероятность того, что эти другие ресурсы будут максимизированы и замедлятся.ERDDAPОбщая отзывчивость.
  • Операционная система делает вещи, отличные от запускаERDDAP.

Поэтому лучше не устанавливать настройку nThreads больше, чем количество ядер в процессоре компьютера.  

Ваш пробег может Варь (ИММВ)

Результаты различных настроек nThreads будут сильно различаться для разных запросов к различным наборам данных в разных системах. Если вы действительно хотите узнать влияние различных настроек nThreads, запустите реалистичные тесты.  

Почему nThreads per request?

Я слышу, как некоторые из вас думают: «Почему nThreads per request? Если бы я кодировал это, я бы использовал один постоянный рабочий пул потоков и очередь сообщений для повышения производительности». Проблема с использованием одного пула рабочих потоков и очереди сообщений заключается в том, что один сложный запрос заполнит очередь множеством медленных задач. Это эффективно блокируетERDDAP™от начала работы над задачами, связанными с другими запросами, до первоначального запроса (по существу) Закончил. Таким образом, даже простые последующие запросы будут реагировать очень медленно.ERDDAPИспользование nThreads для запроса приводит к гораздо более справедливому использованию вычислительных ресурсов.  

nThreads vs. Несколько рабочих компьютеров

К сожалению,ERDDAPСистема nThreads никогда не будет столь эффективной, как настоящая параллелизация с помощью нескольких рабочих компьютеров, каждый из которых работает над куском данных, так, как обычно используются Hadoop или Apache Spark. Когда задача действительно распараллелена/распределена на несколько компьютеров, каждый компьютер может использовать все свои ресурсы со своей стороны задачи. сERDDAPСистема nThreads, каждый из потоков конкурирует за пропускную способность одного и того же компьютера, дисководы, память и т. Д. К сожалению, у большинства из нас нет ресурсов или средств для создания или даже аренды. (Amazon Web Services (AWS) Google Cloud Platform (ГКП) ) Массивные сети компьютеров. Кроме того, в отличие от реляционной базы данных, которая может возвращать строки результатов в любом порядке,ERDDAP™дает обещание вернуть строки результатов в последовательном порядке. Это ограничение делаетERDDAPРеализация nThreads менее эффективна. НоERDDAPN-потоки полезны во многих случаях.

Однако есть способы сделатьERDDAP™масштаб, позволяющий быстро обрабатывать огромное количество запросов, создаваяСеть/кластер/федерацияERDDAPs.  

<палитры >

  • Начиная сERDDAP™Версия 2.12,datasets.xmlможет включать в себя<palettes> tag (внутри)<erddapDatasets>), который перекрывает<палитры > значение тега от messages.xml (или возвращается к значению message.xml, если тег вdatasets.xmlпустой) . Это позволяет вам изменить список доступных палитр.ERDDAP™Бежит. Он также позволяет вносить изменения и сохранять их при установке новой версии.ERDDAP. Предупреждение: палитры, перечисленные вdatasets.xmlдолжен быть набором палитр, перечисленных в message.xml; в противном случаеERDDAP™бросит исключение и прекратит обработкуdatasets.xml. Это гарантирует, что всеERDDAP™Установки, по крайней мере, поддерживают те же основные палитры. Предупреждение:ERDDAP™проверяет, что файлы палитры, указанные в message.xml, действительно существуют, но не проверяет файлы палитры, перечисленные вdatasets.xml. Вы несете ответственность за то, чтобы файлы присутствовали.

Также начиная сERDDAP™Версия 2.12, если вы делаете подкаталог cptfilesERDDAP™каталог контента,ERDDAP™будет копировать все файлы \*.cpt в этом каталоге в\[кот\]/webapps/erddap/WEB-INF/cptfils каталог каждый разERDDAP™Начинается. Таким образом, если вы разместите пользовательские файлы cpt в этом каталоге, эти файлы будут использоваться дляERDDAP™без дополнительных усилий с вашей стороны, даже при установке новой версииERDDAP.

ПРЕДУПРЕЖДЕНИЕ: Если вы добавляете пользовательские палитры в своиERDDAP™И у тебя естьEDDGridНаборы данных FromErddap и/или EDDTableFromErddapERDDAP™Затем пользователи увидят ваши пользовательские опции палитры наERDDAP™Создайте веб-страницы A Graph, но если пользователь попытается их использовать, он получит график по умолчанию. (Обычно радуга) палитра. Это связано с тем, что изображение создается удаленнымERDDAP™который не имеет привычной палитры. Единственным решением сейчас является электронная почта удаленногоERDDAP™администратор, чтобы добавить свои пользовательские палитры к своемуERDDAPИли написать Крису. Джон на noaa.gov попросил добавить палитры в стандартERDDAP™распределения.

<onChange>

  • [править] ** <OnChange> ** ] (#изменить) является опциональным тегом в<dataset> tag indatasets.xmlкоторый определяет действие, которое будет сделано при создании этого набора данных (когдаERDDAP™возобновляется) и всякий раз, когда этот набор данных каким-либо образом изменяется.
    • В настоящее время дляEDDGridподклассы, любое изменение метаданных или переменной оси (Например, новая точка времени для данных в реальном времени) считается изменением, но перезагрузка набора данных не считается изменением. (сам по себе) .
    • В настоящее время для подклассов EDDTable любая перезагрузка набора данных считается изменением.
    • В настоящее время допускаются только два вида действий:
      • " http://" или "" https://" - Если действие начинается с " http://" или "" https://" ,ERDDAP™Отправит ли онHTTP GETЗапрос на указанный URL. Ответ будет проигнорирован. Например, URL-адрес может указывать другому веб-сервису что-то делать.
        • Если URL имеет часть запроса (После ""?) Это должно быть уже% кодируется. Вам нужно кодировать специальные символы в ограничениях. (В отличие от начального и основного'='ограничения) в форму %HH, где HH — 2-значное шестнадцатеричное значение символа. Обычно нужно просто преобразовать несколько символов пунктуации: % в %25, & в %26, "в %22,<в %3C, = в %3D, > в %3E, + в %2B,|в %7С,\[в %5B,\]в %5D, в %20 и преобразовать все символы выше #127 в форму UTF-8, а затем в % кодировать каждый байт формы UTF-8 в формат %HH (Попросите программиста помочь) . Например, &stationID>="41004" становится иstationID%3E=%2241004%22 Процент кодирования обычно требуется при доступеERDDAPчерез программное обеспечение, отличное от браузера. Браузеры обычно обрабатывают процент кодирования для вас. В некоторых ситуациях вам нужно закодировать все символы, кроме A-Za-z0-9. " () \*, но все же не кодируйте начальное '&' или основное'='в ограничениях. Языки программирования имеют инструменты для этого (например, см.Java?java.net.URLEncoderиJavaСценарий [encodeURIComponent()] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) и существуют Сайты, которые закодируют / декодируют для вас.
        • С тех порdatasets.xmlXML-файл, вы должны также и кодировать все '&', ''<', и '>' в URL как '&', '<', и '>' после процента кодирования.
        • Пример: Для URL, который вы можете ввести в браузер как: https://www.company.com/webService?department=R%26D&param2=value2
          Вы должны указать<onChange> Tag via (На одной линии)
            <onChange>https://www.company.com/webService?department=R%26D&amp;param2=value2</onChange>
      • почта: - Если действие начинается с «mailto:»,ERDDAP™отправит электронное письмо на следующий адрес электронной почты, указывающий, что набор данных был обновлен / изменен. Например:<onChange>mailto:john.smith@company.com</onChange> Если у вас есть веская причина дляERDDAP™Чтобы поддержать некоторые другие действия, отправьте нам электронное письмо с описанием того, что вы хотите.
    • Этот тег является опциональным. Там может быть столько тегов, сколько вы хотите. Используйте один из этих тегов для каждого выполняемого действия.
    • Это аналогичноERDDAPСистема подписки на электронную почту / URL, но эти действия не хранятся постоянно (То есть они хранятся только в объекте EDD.) .
    • Чтобы удалить подписку, просто удалите<onChange> Tag. Изменение будет отмечено при следующей перезагрузке набора данных.  

<перезагрузкаEveryNMinutes>

  • [править] ** <перезаряжать EveryNMinutes ** ] (#reloadeverynminutes) является опциональным тегом в<dataset> tag indatasets.xmlпочти всех типов наборов данных, которые определяют, как часто набор данных должен быть перезагружен. Например,
    <reloadEveryNMinutes>60</reloadEveryNMinutes>
    • Как правило, наборы данных, которые часто меняются. (Например, получить новые файлы данных) Его следует часто перезагружать, например, каждые 60 минут.

    • Наборы данных, которые меняются нечасто, следует перезагружать нечасто, например, каждые 1440 минут. (ежедневно) 10080 минут (еженедельно) .

    • Этот тег опционален, но рекомендуется. По умолчанию 10080.

    • Примером является:<Скачать EveryNMinutes>1440<Перезагрузка EveryNMinutes

    • При перезагрузке набора данных все файлы в BigParent Директория /кэш/ datasetID Каталог удаляется.

    • Независимо от того, что это настроено, набор данных не будет загружаться чаще, чем<Скачать игру MinMinutes (дефолт = 15) Как указано вНастройка.xml. Поэтому, если вы хотите, чтобы наборы данных перезагружались очень часто, вам нужно установить как перезагрузку EveryNMinutes, так и загрузку наборов данных. Минуты до малых значений.

    • Не устанавливайте перезагрузку EveryNMinutes на то же значение, что и загрузка Минуты, потому что истекшее время, вероятно, будет (Например,) 14:58 или 15:02, поэтому набор данных будет перезагружен только примерно в половине основных перезагрузок. Вместо этого используйте меньший (Например, 10) или больше (Например, 20) перезаряжать Стоимость EveryNMinutes.

    • Независимо от перезагрузки EveryNMinutes, вы можете вручную сказать:ERDDAP™как можно скорее перезагрузить определенный набор данных черезфайл флага.

    • Любопытные программисты - вERDDAP™Перезагрузка всех наборов данных обрабатывается двумя одноцелевыми потоками. Один поток инициирует небольшую перезагрузку, если он находит файл флага или большую перезагрузку. (который проверяет все наборы данных, чтобы увидеть, нужно ли их перезагружать) . Другой поток выполняет фактическую перезагрузку наборов данных по одному за раз. Эти потоки работают в фоновом режиме, гарантируя, что все наборы данных обновляются. Поток, который фактически выполняет перезагрузку, готовит новую версию набора данных, а затем меняет его на место. (Замена старой версии атомарно) . Поэтому вполне возможно, что происходит следующая последовательность событий. (Это хорошо) :

      1. ERDDAP™начинает перезагрузку набора данных (Создание новой версии) На заднем плане.
      2. Пользователь «А» делает запрос к набору данных.ERDDAP™использует текущую версию набора данных для создания ответа. (Это хорошо. Для пользователя задержки не было, и текущая версия набора данных никогда не должна быть очень устаревшей.)
      3. ERDDAP™заканчивает создание новой перезагруженной версии набора данных и меняет эту новую версию на производство. Все последующие новые запросы обрабатываются новой версией набора данных. Для согласованности запрос пользователя А по-прежнему заполняется оригинальной версией.
      4. Пользователь «B» делает запрос на набор данных иERDDAP™использует новую версию набора данных для создания ответа.
      5. В конечном итоге запросы пользователя A и пользователя B будут выполнены. (возможно A финиширует первым, возможно B финиширует первым) .

Я слышу, как кто-то говорит: "Просто два удара! Ха! Это отстой! Он должен настроить это так, чтобы перезагрузка наборов данных использовала столько потоков, сколько необходимо, чтобы все это делалось быстрее и с небольшим отставанием или без него». Да и нет. Проблема заключается в том, что загрузка более одного набора данных за раз создает несколько новых проблем. Все они должны быть решены или решены. Действующая система работает хорошо и имеет управляемые проблемы. (Например, вероятность задержки до того, как будет замечен флаг.) . (Если вам нужна помощь в управлении ими, см.Раздел о дополнительной поддержке.) связанныйобновление EveryNMillisСистема работает в потоках откликов, поэтому она может и приводит к обновлению нескольких наборов данных. (Не полная перезагрузка) одновременно.

Проактивный vs. реактивный

ERDDAPСистема перезагрузки активна - наборы данных перезагружаются вскоре после их перезагрузки Время EveryNMinutes истекло (То есть, они становятся «устарелыми», но никогда не очень застойными.) Получает ли набор данных запросы от пользователей или нет. ТакERDDAP™Наборы данных всегда актуальны и готовы к использованию. Это противоречит реактивному подходу THREDDS: запрос пользователя - это то, что говорит THREDDS проверить, не устарел ли набор данных. (может быть очень устаревшим) . Если он устарел, THREDDS заставляет пользователя ждать. (Часто в течение нескольких минут) При этом набор данных перезагружается.

<обновление EveryNMillis>

  • [править] ** <Обновление EveryNMillis ** ] (#updateeverynmillis) является опциональным тегом в<dataset> tag indatasets.xmlНекоторые типы данных, которые помогаютERDDAP™Работа с наборами данных, которые часто меняются (Чаще всего примерно каждую секунду) . отличиеERDDAPРегулярный, активный,<перезаряжать EveryNMinutes > (#reloadeverynminutes) Система для полной перезагрузки каждого набора данных, эта дополнительная система является реактивной. (вызванный запросом пользователя) Быстрее, потому что это постепенно (Обновление информации, которую необходимо обновить) . Например, если запрос наEDDGridНабор данных FromDap происходит более указанного количества миллисекунд с момента последнего обновления.ERDDAP™Посмотрим, есть ли какие-то новые ценности для левых. (Во-первых, обычно"time") размер и, если это так, просто скачайте эти новые значения перед обработкой запроса пользователя. Эта система очень хорошо поддерживает быстро меняющийся набор данных с минимальными требованиями к источнику данных, но за счет небольшого замедления обработки некоторых запросов пользователей.
    • Чтобы использовать эту систему, добавьте (Например,) :
      <updateEveryNMillis>1000</updateEveryNMillis>  

сразу после<Скачать EveryNMinutes Тег для набора данных вdatasets.xml. Количество миллисекунд, которые вы указываете, может быть всего 1. (Чтобы убедиться, что набор данных всегда актуален) . Значение 0 (по умолчанию) Отрицательное число выключает систему.

  • Из-за их постепенного характера обновления должны заканчиваться очень быстро, поэтому пользователям никогда не придется долго ждать.
  • Если второй запрос данных поступает до завершения предыдущего обновления, второй запрос не вызовет другого обновления.
  • Во всей документации мы постараемся использовать слово «перезагрузка» для регулярных полных перезагрузок набора данных и «обновление» для этих новых постепенных, частичных обновлений.
  • Для целей тестирования некоторые диагностические средства печатаются на log.txt, если [<logLevel> (#loglevel) вdatasets.xmlНастроен на «все».
  • Если вы используете дополнительные обновления и особенно если самые левые (первый) Например, время, ось большая, вы можете установить<Перезагрузить EveryNMinutes в большее число (1440?) Таким образом, обновления выполняют большую часть работы по обновлению набора данных, а полная перезагрузка выполняется нечасто.
  • Примечание: эта новая система обновления обновляет метаданные (Например, времяactual\_rangeВремя _покрытие _конец, ...) но не вызывает изменения (Электронная почта или сенсорный URL) или изменитьRSSкормить (Возможно, это должно...) .
  • Для всех наборов данных, использующих подклассыEDDGridИз материаловиEDDTable Из материалов:
    • Предупреждение: когда вы добавляете новый файл данных в набор данных, копируя его в каталог, которыйERDDAP™Если посмотреть, есть опасность, чтоERDDAP™заметит частично написанный файл; попытается прочитать его, но потерпит неудачу, потому что файл неполный; объявит файл «плохим» файлом и удалит его. (временно) из набора данных. Чтобы избежать этого, мы СИЛЬНО РЕКОМЕНДУЕТСЯ что вы копируете новый файл в каталог с временным именем (Например, 20150226.ncТрубка) Это не соответствует файлу наборов данных Имя: Regex (\*\.nc) Затем переименовать файл в правильное имя (Например, 20150226.nc) . Если использовать такой подход,ERDDAP™Проигнорирует временный файл и заметит только правильно названный файл, когда он будет готов к использованию.
    • Если вы изменяете существующие файлы данных (Например, для добавления новой точки данных) ,<Предыдущая статьяEveryNMillis будет работать хорошо, если изменения появятся атомарно (В одно мгновение) Файл всегда является действительным. Например, библиотека netcdf-java позволяет вносить дополнения в неограниченный размер «классической» библиотеки..ncФайл v3 должен быть сделан атомарно. <Обновление EveryNMillis будет работать плохо, если файл недействителен во время внесения изменений.
    • <Обновление EveryNMillis будет хорошо работать для наборов данных, где один или несколько файлов изменяются за короткий промежуток времени.
    • <Обновление EveryNMillis будет плохо работать для наборов данных, где большое количество файлов изменяется за короткий промежуток времени. (Если изменения не проявляются атомарно) . Для этих наборов данных лучше не использовать<обновить EveryNMillis> и установитьфлаграссказыватьERDDAP™Перезагрузить набор данных.
    • <Обновление EveryNMillis не обновляет информацию, связанную с [<subsetVariables> (#subsetvariables) . Как правило, это не проблема, так какsubsetVariablesУ вас есть информация о вещах, которые не меняются очень часто. (Например, список названий станций, широт и долгот) . ЕслиsubsetVariablesИзменение данных (Например, когда в набор данных добавляется новая станция) Затем свяжитесь сфлаг URLЧтобы набор данных сообщалERDDAP™Перезагрузить набор данных. В противном случаеERDDAP™Не заметит нового подмножества Переменная информация до следующей перезагрузки набора данных (<Скачать EveryNMinutes.
    • Наша общая рекомендация заключается в использовании:
        <reloadEveryNMinutes>1440</reloadEveryNMinutes>  
    <updateEveryNMillis>10000</updateEveryNMillis>
    • Проблемы? На компьютерах Linux, если вы используете<Обновление EveryNMillis сEDDGridВ классах FromFiles или EDDTableFromFiles вы можете увидеть проблему, когда набор данных не загружается. (время от времени или последовательно) Сообщение об ошибке: «IOException: пользовательский лимит инотификационных экземпляров достиг или слишком много открытых файлов». Причиной может быть ошибка вJavaЭто приводит к тому, что инотифицированные экземпляры не собирают мусор. Эту проблему можно избежать вERDDAP™v1.66 и выше. Поэтому лучшим решением будет переключение последней версии.ERDDAP. Если это не решает проблему (то есть, если у вас есть действительно большое количество наборов данных, использующих этот метод).<Обновить EveryNMillis>, исправить эту проблему можно позвонив:
      sudo sysctl fs.inotify.max\\_user\\_watches=65536  
      sudo sysctl fs.inotify.max\\_user\\_instances=1024
      sudo sysctl -p

Используйте более высокие цифры, если проблема сохраняется. По умолчанию для часов 8192. По умолчанию, например, 128.

  • Вы можете поставить<Обновление MaxEvents>10</updateMaxEvents> вdatasets.xml (рядом с другими вершинами,) Чтобы изменить максимальное количество изменений файла (По умолчанию 10) Обработка будет осуществляться с помощью системы EveryNMillis. Большее число может быть полезно для набора данных, где очень важно постоянно обновлять их. Видишь?Обновление документации MaxEvents.
  • Для любопытных программистов - эти дополнительные обновления, в отличие отERDDAPполныйСкачать EveryNMinutesСистема, происходит в потоках запросов пользователя. Таким образом, любое количество наборов данных может обновляться одновременно. Есть код (и замок) Чтобы гарантировать, что только один поток работает над обновлением для любого заданного набора данных в любой данный момент. Разрешить несколько одновременных обновлений было легко; разрешить несколько одновременных полных перезагрузок было бы сложнее.  

<Источник: CanConstrainStringEQNE>

  • [править] ** <Источник: CanConstrainStringEQNE ** ] (#sourcecanconstrainstringeqne) Опциональный тег в EDDTable<dataset> tag indatasets.xmlЭто указывает, может ли источник ограничивать струнные переменные операторами = и !
    • Для EDDTableFromDapSequence это относится только к переменным струн внешней последовательности. Предполагается, что источник не может справиться с какими-либо ограничениями на переменные внутренней последовательности.
    • Этот тег является опциональным. Действительные ценности истинны (по умолчанию) и ложные.
    • Для EDDTable FromDapSequenceOPeNDAPСерверы DRDS, это должно быть установлено (по умолчанию) .
    • Для EDDTable FromDapSequence Даппер серверы, это должно быть установлено ложным.
    • Примером является:
        <sourceCanConstrainStringEQNE>true</sourceCanConstrainStringEQNE>  

 

<Источник: CanConstrainStringGTLT>

  • [править] ** <Источник: CanConstrainStringGTLT ** ] (#sourcecanconstrainstringgtlt) Опциональный тег в EDDTable<тег dataset>, который определяет, может ли источник ограничивать переменные String<,<=, > и >= операторы.
    • Для EDDTableFromDapSequence это относится только к переменным струн внешней последовательности. Предполагается, что источник не может справиться с какими-либо ограничениями на переменные внутренней последовательности.
    • Действительные ценности истинны (по умолчанию) и ложные.
    • Этот тег является опциональным. Дефолт - это правда.
    • Для EDDTable FromDapSequenceOPeNDAPСерверы DRDS, это должно быть установлено (по умолчанию) .
    • Для EDDTable FromDapSequence Даппер серверы, это должно быть установлено ложным.
    • Примером является:
        <sourceCanConstrainStringGTLT>true</sourceCanConstrainStringGTLT>  

 

<Источник: CanConstrainStringRegex>

  • [править] ** <Источник: CanConstrainStringRegex ** ] (#sourcecanconstrainstringregex) Опциональный тег в EDDTable<тег dataset>, который определяет, может ли источник ограничивать переменные строки регулярными выражениями, и если да, то что такое оператор.
    • Действительные значения «=» (тотDAPстандартный) "=" (ошибочно поддерживается многимиDAPсерверы) или "" (указывает на то, что источник не поддерживает регулярные выражения) .
    • Этот тег является опциональным. Дефолт - это "".
    • Для EDDTable FromDapSequenceOPeNDAPСерверы DRDS должны быть настроены на "" (по умолчанию) .
    • Для EDDTable FromDapSequence Даппер серверы, это должно быть установлено на "" (по умолчанию) .
    • Примером является:
        <sourceCanConstrainStringRegex>=~</sourceCanConstrainStringRegex>  

<Источник: CanDoDistinct>

  • [править] ** <Источник: CanDoD Distinct ** ] (#sourcecandodistinct) Опциональный тег в EDDTableFromDatabase<тег dataset>, который определяет, должна ли исходная база данных обрабатывать и отличать () ограничения в пользовательских запросах.
    • Этот тег является опциональным. Действительные значения не (ERDDAP™Отличается от других; дефолт) частично (Источник обрабатывает различные иERDDAP™Справляйся с этим снова) и да (Источник обрабатывает различные) .
    • Если вы не используете иERDDAP™У вас заканчивается память при работе с различными, используйте «да».
    • Если вы используете «да», а исходная база данных обрабатывается слишком медленно, используйте «нет».
    • Частичное дает вам худшее из обоих: оно медленное, потому что обработка базы данных отличается медленным и может исчерпать память.ERDDAP.
    • Базы данных интерпретируют DISTINCT как запрос только на уникальные строки результатов.ERDDAP™интерпретирует его как запрос на сортированный список уникальных строк результатов. Если вы установите это частично или да,ERDDAP™Он также автоматически сообщает базе данных сортировать результаты.
    • Одна небольшая разница в результатах: без|частичный,ERDDAP™Сортировать "" в начале результатов (перед «не» строками) . Если да, то база данных может (Postgres будет) Сортировка "" в конце результатов (после не-"" струн) . Я предполагаю, что это также повлияет на сортировку коротких слов по сравнению с более длинными словами, которые начинаются с короткого слова. Например,ERDDAP™Сортировать «Симон» перед «Симонами».
    • Примером является:
        <sourceCanDoDistinct>yes</sourceCanDoDistinct>  

 

<Источник: CanOrderBy>

  • [править] ** <источник CanOrderBy ** ] (#sourcecanorder) Опциональный тег в EDDTableFromDatabase<тег dataset>, который определяет, должна ли исходная база данных обрабатывать иorderBy (...) ограничения в пользовательских запросах.
    • Этот тег является опциональным. Действительные значения не (ERDDAP™ручкиorderBy (...) ; дефолт) частично (Источник обрабатываетorderByиERDDAP™Справляйся с этим снова) и да (Источник обрабатываетorderBy (...) ) .
    • Если вы не используете иERDDAP™Исчезает память при обработкеorderBy (...) Используй "да".
    • Если вы используете «да» и исходная база данных обрабатываетorderBy (...) Медленно, не надо.
    • Частичное дает вам худшее из обоих: это медленно, потому что обработка базы данныхorderBy (...) Он медленный и может исчерпать память.ERDDAP.
    • Одна небольшая разница в результатах: без|частичный,ERDDAP™Сортировать "" в начале результатов (перед «не» строками) . Если да, то база данных может (Postgres будет) Сортировка "" в конце результатов (после не-"" струн) . Это также может повлиять на сортировку коротких слов по сравнению с более длинными словами, которые начинаются с короткого слова. Например,ERDDAP™«Симон» будет сортироваться раньше «Симонс», но я не уверен, как база данных будет сортировать их.
    • Примером является:
        <sourceCanOrderBy>yes</sourceCanOrderBy>  

 

<ИсточникNeedsExpandedFP\_EQ>

  • [править] ** <Источник: NeedsExpandedFP_EQ ** ] (#sourceneedsexpandedfp_eq) Опциональный тег в EDDTable<Тег dataset>, который указывает (истинный (по умолчанию) ложный) Если источник нуждается в помощи с запросами<числовой Переменная>=<FloatPointValue> (и!=,>=,<=). Например,
    <sourceNeedsExpandedFP\\_EQ>false</sourceNeedsExpandedFP\\_EQ>
    • Для некоторых источников данных числовые запросы, включающие =, !=,<=, или >= может не работать с числами с плавающей запятой. Например, поиск по долготе = 220,2 может выйти из строя, если значение сохраняется как 220,20000000000001.
    • Эта проблема возникает потому, что числа с плавающей точкой являютсяне представлены точно в компьютерах.
    • Источник: NeedsExpandedFP_EQ устанавливается на истинное (по умолчанию) ,ERDDAP™модифицирует запросы, отправленные в источник данных, чтобы избежать этой проблемы. Всегда безопасно и хорошо оставить этот набор верным.  

<sourceUrl>

  • [править] ** <sourceUrl> ** ] (#sourceurl) является общим тегом в глобальном наборе данных<addAttributesТег, который определяет URL, который является источником данных.
    • Примером является:
        <sourceUrl>https://oceanwatch.pfeg.noaa.gov/thredds/dodsC/satellite/VH/chla/1day</sourceUrl>  
    (Положите все на одну линию)
    • вERDDAP™Все наборы данных будут иметь "sourceUrl"в объединенных глобальных атрибутах, которые показаны пользователям.
    • Для большинства типов наборов данных этот тег требуется. Посмотрите описание типа набора данных, чтобы узнать, требуется это или нет.
    • Для некоторых наборов данных отдельные<sourceUrlТег не допускается. Вместо этого вы должны предоставить "sourceUrl"Глобальный атрибутКак правило, в глобальномaddAttributes<. Если нет фактического источника URL (Например, если данные хранятся в локальных файлах.) , этот атрибут часто просто имеет значение заполнителя, например,<Att name="имя"> (локальные файлы) </att>.
    • Для большинства наборов данных это основа URL-адреса, который используется для запроса данных. Например, дляDAPЭто URL-адрес, к которому могут быть добавлены .dods, .das, .dds или .html.
    • С тех порdatasets.xmlXML-файл, вы также должны кодировать '&', ''<', и '>' в URL как '&', '<и ">".
    • Для большинства типов данных,ERDDAP™Добавить оригиналsourceUrl («LocalSourceUrl» в исходном коде) кглобальные атрибуты (где он становится «publicsourceurl» в исходном коде) . Когда источником данных являются локальные файлы,ERDDAP™добавлятьsourceUrl= (локальные файлы) "к глобальным атрибутам в качестве меры предосторожности. Если источником данных является база данных,ERDDAP™добавлятьsourceUrl= (База исходных данных) "к глобальным атрибутам в качестве меры предосторожности. Если некоторые из ваших наборов данных используют непубличныеsourceUrl? (Как правило, потому что их компьютер находится в вашем DMZ или в локальной локальной сети.) Вы можете использовать [<конвертироватьToPublicSourceUrl> (#конвертный публичный ресурс) Теги, чтобы указать, как конвертировать местныйsourceUrls для общественностиsourceUrlС.
    • А.sourceUrlМожет начаться сhttp://,https://ftp:// и, возможно, другие приставки.httpsСвязи считывают и проверяют цифровой сертификат источника, чтобы убедиться, что источник тот, кто они говорят. В редких случаях эта проверка может не сработать с ошибкой «javax.net.ssl.SSLProtocolException: handshake alert: unreconized\_name». Вероятно, это связано с тем, что доменное имя в сертификате не соответствует доменному имени, которое вы используете. Вы можете и должны прочитать подробностиsourceUrlСертификат в вашем веб-браузере, в частности, список «Имя DNS» в разделе «Объектное альтернативное имя».

В некоторых случаях,sourceUrlИспользуемое вами имя может быть псевдонимом доменного имени в сертификате. Например, https://podaac-opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ Это приведет к ошибке, но https://opendap.jpl.nasa.gov/opendap/allData/ccmp/L3.5a/monthly/flk/ , который использует доменное имя в сертификате, не будет. Поэтому решение в этих случаях заключается в поиске и использовании доменного имени в сертификате. Если вы не можете найти его в сертификате, свяжитесь с поставщиком данных.

В других случаях доменное имя в сертификате может быть для группы имен. Если это происходит или проблема неразрешима, пожалуйста, напишите Крису. Джон на noaa.gov, чтобы сообщить о проблеме.  

<addAttributes>

  • [править] ** <addAttributes> ** ] (#addattributes) Опциональный тег для каждого набора данных и для каждой переменной, которая позволяетERDDAPАдминистраторы контролируют атрибуты метаданных, связанные с набором данных и его переменными.
    • ERDDAP™объединяет атрибуты из источника набора данных ("Атрибуты источника") и "addAttributes"который вы определяете вdatasets.xml (которые имеют приоритет) чтобы создать «комбинированные атрибуты», которыеERDDAP™Пользователи видят. Таким образом, вы можете использоватьaddAttributesпереопределять значения атрибутов источника, добавлять новые атрибуты или удалять атрибуты.
    • The<addAttributes> тег включает 0 или более ** <аттестат ** субтеги, которые используются для указания индивидуальных атрибутов.
    • Каждый атрибут состоит из имени и значения. (который имеет определенный тип данных, например двойной) .
    • Может быть только один атрибут с заданным именем. Если их больше, то последний имеет приоритет.
    • Значение может быть единым значением или сепарированным по пространству списком значений.
    • синтаксис
      • Порядок проведения<Att> подтеги внутриaddAttributesЭто не важно.
      • The<Att> Subtag Формат
          <att name="*name*" \\[type="*type*"\\] >*value*</att>
      • Имя назначения всех атрибутов должно начинаться с буквы (A-Z, a-z) и должны содержать только символы A-Z, a-z, 0-9 или '\_'.
      • Если<Подтег att> не имеет значения или значения нуля, этот атрибут будет удален из объединенных атрибутов. Например,<Att name="rows"/> удалит строки из объединенных атрибутов. Например,<Att name="coordinates">null</att> удаляет координаты из объединенных атрибутов.
атрибут Тип
  • [Вариантное значение типа для<Att> подтеги (#атрибутив) указывает тип данных для значений. Типом по умолчанию является String. Примером атрибута струны является:
    <att name="creator\\_name">NASA/GSFC OBPG</att>
    • Действительные типы для однозначных значений являются байтами (8-битное целое число) короткий (16-битное подписанное целое число) , int (32-битное подписанное целое число) Долго (64-битное подписанное целое число) Поплавать (32-битная плавающая точка) Двойной (64-битная плавающая точка) Шар и Стринг. Например,
      <att name="scale\\_factor" type="float">0.1</att>

Посмотреть эти заметки оТип данных Char. Посмотреть эти заметки оДлинный тип данных.

  • Действительные типы для разделённых по пространству списков значений (или единичные значения) являются byteList, shortList, unsignedShortList, charList, intList, longList, floatList, double Список. Например,
    <att name="actual\\_range" type="doubleList">10.34 23.91</att>  

UnsignedShortList позволяет указать список неподписанных шортов, но они будут преобразованы в список соответствующих символов Unicode (например, «65 67 69» будет преобразован в «A C E»). Если вы указываете charList, кодируйте любые специальные символы (например, пространство, двойные цитаты, обратная косая черта).<#32, или >#127), как вы бы кодировать их в разделе данных файла NCCSV (например, ", "\" или """, "\", "\n", "\u20ac") . Нет никакого струнного списка. Храните значения струн как многострочные струны. Например,

<att name="history">2011-08-05T08:55:02Z ATAM - made CF-1.6 compliant.  
2012-04-08T08:34:58Z ATAM - Changed 'height' from double to float.</att>

 

Глобальные атрибуты

  • [править] ** Глобальные атрибуты / Global<addAttributes> ** ] (#глобальные атрибуты) - <addAttributes> является опциональным тегом в<тег dataset>, который используется для изменения атрибутов, применимых ко всему набору данных.

    • ** Используйте глобальную<addAttributesДля изменения глобальных атрибутов набора данных. ** ERDDAP™объединяет глобальные атрибуты из источника набора данных (** Источник Атрибуты ) и глобальной addAttributes которую вы определяете вdatasets.xml (которые имеют приоритет) Чтобы сделать глобальную Комбинированные атрибуты ** Что это такоеERDDAP™Пользователи видят. Таким образом, вы можете использоватьaddAttributesпереопределять значения атрибутов источника, добавлять новые атрибуты или удалять атрибуты.
    • Смотри. ** <addAttributes> информация] (#addattributes) Что относится к глобальным и переменным <addAttributes> ** .
    • ФГДКиISO 19115-2/19139Метаданные - Обычно,ERDDAP™автоматически генерировать ISO 19115-2/19139 и FGDC; (FGDC-STD-001-1998) XML-файлы метаданных для каждого набора данных с использованием информации из метаданных набора данных. Итак, Хорошие метаданные набора данных приводят к хорошимERDDAP- сгенерированные метаданные ISO 19115 и FGDC. Пожалуйста, подумайте о том, чтобы потратить много времени и усилий на улучшение метаданных ваших наборов данных. (Что хорошо делать в любом случае) . Большинство атрибутов метаданных набора данных, которые используются для генерации метаданных ISO 19115 и FGDC, являютсяСтандарт метаданных ACDDОб этом говорится ниже.
    • Многие глобальные атрибуты являются особенными в том, чтоERDDAP™Ищите их и используйте по-разному. Например, ссылка наinfoUrlОн включен на веб-страницах со списками наборов данных и в других местах, чтобы пользователи могли узнать больше о наборе данных.
    • Когда пользователь выбирает подмножество данных, глобальные атрибуты связаны с долготой, широтой, высотой переменной. (или глубина) и временные диапазоны (Например, Southernmost\_Northing, Northernmost\_Northing, time\_coverage\_start, time\_coverage\_end) Они автоматически генерируются или обновляются.
    • Простая выборка глобальных<addAttributes> это:
      <addAttributes> 
      <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>
      <att name="infoUrl">https://coastwatch.pfeg.noaa.gov/infog/PH\\_ssta\\_las.html</att>
      <att name="institution">NOAA CoastWatch, West Coast Node</att>
      <att name="title">SST, Pathfinder Ver 5.0, Day and Night, Global</att>
      <att name="cwhdf\\_version" />
      </addAttributes>

Пустой атрибут cwhdf\_version вызывает атрибут source cwhdf\_version (если есть) быть удалены из окончательного сводного списка атрибутов.

  • Предоставление этой информации помогаетERDDAP™Сделайте свою работу лучше и помогите пользователям понять наборы данных. Хорошие метаданные делают набор данных пригодным для использования. Недостаток метаданных делает набор данных бесполезным. Пожалуйста, найдите время, чтобы сделать хорошую работу с атрибутами метаданных.
Особые глобальные атрибуты вERDDAP™
признание
  • признание и признание (из которогоACDDстандарт метаданных) Рекомендуемый способ признания группы или групп, оказавших поддержку (В частности, финансовые) Для проекта, который создал эти данные. Например,
    <att name="acknowledgment">AVISO</att>

Обратите внимание, что ACDD 1.0 и 1.1 используют написание «признание». (Это обычное написание в США.) , но ACDD 1.3 изменил это на "признание" (Это обычное написание в Великобритании.) . Я понимаю, что изменение было по сути случайностью и что они, конечно, не осознавали последствий изменения. Какой беспорядок! Сейчас в мире существуют миллионы файлов данных, которые имеют «признание», и миллионы, которые имеют «признание». Это подчеркивает глупость «простых» изменений в стандарте и подчеркивает необходимость стабильности в стандартах. Из-за ACDD 1.3 (Это версия ACDD, котораяERDDAP™поддержка) Он говорит «признание», вот чтоERDDAP™ (В частности, генерировать наборы данных Xml) Поощряет.  

cdm\_alitude\_proxy
  • cdm\_alitude\_proxy Это только для наборов данных EDDTable, которые не имеют переменной высоты или глубины, но имеют переменную, которая является прокси для высоты или глубины. (Например, давление, сигма, бутылочное число) Вы можете использовать этот атрибут для идентификации этой переменной. Например,
    <att name="cdm\\_altitude\\_proxy">pressure</att>  

Еслиcdm\_data\_typeПрофиль или TrajectoryProfile и нет переменной высоты или глубины, cdm\_altitude\_proxy Должен быть определен. Если определяется cdm\_altitude\_proxy,ERDDAP™Добавить в переменную следующие метаданные: \_Coordinate AxisType = высота и axis = Z.  

cdm\_data\_type
  • cdm\_data\_type (из которогоACDDстандарт метаданных) является глобальным атрибутом, указывающим наUnidata Общая модель данныхТип данных для набора данных. Например,
    <att name="cdm\\_data\\_type">Point</att>  

МЧР все еще развивается и может снова измениться.ERDDAP™Соответствует соответствующим и более подробнымДискретная геометрия выборки (DSG) Глава из этогоCF 1.6конвенции о метаданных (Ранее он назывался CF Point Observation Conventions.) .

  • Или глобальный набор данныхИсточник Атрибутыили глобальной<addAttributes> Необходимо включить атрибут cdm\_data\_type. Несколько типов наборов данных (как EDDTable Из Оби) Он установит это автоматически.
  • ДляEDDGridНаборы данных, параметры cdm\_data\_type - Grid (По умолчанию и, безусловно, наиболее распространенный тип дляEDDGridнаборы данных) , MovingGrid, Other, Point, Profile, RadialSweep, TimeSeries, TimeSeriesProfile, Swath, Trajectory и TrajectoryProfile. В настоящее времяEDDGridне требует указания каких-либо связанных метаданных и не проверяет соответствие данных типу cdm\data\. Это, вероятно, изменится в ближайшем будущем.
  • EDDTable использует cdm\_data\_type строго, следуя спецификации DSG CF, а не CDM, которая по какой-то причине не была обновлена, чтобы соответствовать DSG. Если метаданные набора данных не соответствуютERDDAPТребования cdm\_data\_type (см. ниже) , набор данных не будет загружаться и будет генерироватьсообщение об ошибке. (Это хорошо, в том смысле, что сообщение об ошибке скажет вам, что не так, чтобы вы могли это исправить.) И если данные набора данных не соответствуют установке метаданных набора данных (Например, если для данной станции имеется более одного значения широты в наборе данных временных рядов) Некоторые запросы на данные будут возвращать неверные данные в ответ. Поэтому убедитесь, что вы все правильно поняли.

Для всех этих наборов данных в Конвенциях иMetadata\_ConventionsГлобальные атрибуты, пожалуйста, обратитесь к CF-1.6 (не CF-1.0, 1.1, 1.2, 1.3, 1.4 или 1.5) CF-1.6 является первой версией, которая включает изменения, связанные с дискретной геометрией выборки. (DSG) конвенции.

  • ERDDAP™имеет непростую связь с CF DSG
  • ERDDAP™может сделать действительный набор данных DSG из исходного набора данных, который уже является действительным файлом DSG. (s) , или из исходного набора данных, который не настроен для DSG, но может быть сделан так через изменения в метаданных (Некоторые из которых являютсяERDDAP- специфичный для обеспечения более общего подхода к определению установки DSG) .
  • ERDDAP™делает много тестов валидности, когда загружает набор данных. Если набор данных имеет cdm\_data\_type (илиfeatureType) Атрибут успешно загружается вERDDAP™ТогдаERDDAP™Это означает, что набор данных соответствует требованиям DSG. (В противном случаеERDDAP™Исключение, объясняющее первую проблему, которую он нашел) . ПРЕДУПРЕЖДЕНИЕ: Успешно загруженный набор данных отвечает требованиям DSG (имеет правильное сочетание атрибутов) но все еще может быть неправильно настроен, что приводит к неправильным результатам в.ncCF и.ncФайлы ответов CFMA. (Программное обеспечение является умным в некоторых отношениях и невежественным в других.)
  • Когда вы смотрите на метаданные набора данных вERDDAP™DSG Dataset находится вERDDAPВнутренний формат (Гигантская таблица, похожая на базу данных) . Это не в одном из форматов DSG. (Например, размеры и метаданные неверны.) Но информация, необходимая для обработки набора данных как набора данных DSG, находится в метаданных. (Например, cdm\_data\_type=TimeSeries и cdm\_timeseries\_variables= aCsvListOfStationСвязанные переменные в глобальных метаданных и cf\_role=timeseries\_id для некоторой переменной) .
  • Если пользователь запрашивает поднабор данных в.ncCF (ан.ncФайл в формате DSG Contiguous Ragged Array) или.ncФайл CFMA (а.ncФайл в формате многомерного массива DSG) Этот файл будет действительным CF DSG. ПРЕДУПРЕЖДЕНИЕ: Однако, если набор данных был установлен неправильно (Чтобы обещания, данные метаданных, не соответствовали действительности.) Затем файл ответа будет технически действителен, но каким-то образом будет некорректным.  
EDDTable cdm_data_types
  • Для наборов данных EDDTable опции cdm\_data\_type (и соответствующих требований вERDDAP) есть
Точка
  • Точка- для набора измерений, сделанных в несвязанные времена и места.
    • Как и во всех других типах cdm\data\, наборы данных Точки должны иметь переменные долготы, широты и времени.
профиль
  • профиль- это совокупность измерений, проведенных в одно время, в одном месте широтной долготы, но на более чем одной глубине. (высота или) . Набор данных может представлять собой набор этих профилей, например, 7 профилей из разных мест. Этот тип cdm\_data\_type не подразумевает никакой логической связи между любым из профилей.

  • Одна из переменных (Например, профиль \_number) Необходимо иметь атрибут переменной cf\_role=profile\_id для идентификации переменной, которая однозначно идентифицирует профили.

    <att name="cf\\_role">profile\\_id</att>  

Если нет другой подходящей переменной, рассмотрите возможность использования временной переменной.

cdm\_profile\_variables
  • Набор данных должен включать глобальный атрибутcdm\_profile\_variablesгде значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждом профиле. Для данного профиля значения этих переменных должны быть постоянными. Например,
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Список должен включать переменную cf\_role=profile\_id и все другие переменные с информацией о профиле, времени, широте и долготе. Список никогда не будет включать высоту, глубину или любые переменные наблюдения.  

\[Мнение: cdm\_data\_type=Профиль следует использовать редко. На практике, данный набор данных, как правило, является либо TimeSeriesProfile. (Профили в фиксированном положении) или траектория (Профили вдоль траектории) И поэтому должны быть правильно определены как таковые.\]

Сериалы времени
  • Сериалы времени- это последовательность измерений (Например, температура морской воды) взятый на одной, фиксированной, широте, долготе, глубине (высота или) местоположение. (Думайте об этом как о «станции».) Набор данных может представлять собой совокупность этих временных рядов, например последовательность из каждого из 3 различных мест.
    • Одна из переменных (Например, Station_id) Необходимо иметь атрибут переменной cf\_role=timeseries\_id для идентификации переменной, которая однозначно идентифицирует станции.
      <att name="cf\\_role">timeseries\\_id</att>
cdm\_timeseries\_variables
  • Набор данных должен включать глобальный атрибутcdm\_timeseries\_variablesгде значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждой станции. Для данной станции значения этих переменных должны быть постоянными. Например,
    <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Список должен включать переменную cf\_role=timeseries\_id и все другие переменные с информацией о станции, которая почти всегда включает широту и долготу. (и высоту или глубину, если таковые имеются) . Список никогда не будет включать в себя время или какие-либо переменные наблюдения.

  • Для некоторых пришвартованных буев набор данных может иметь два набора переменных широты и долготы:
    1. Одна пара значений широты и долготы, которые являются постоянными (т.е. фиксированное местоположение причала) . вERDDAP™Дайте этим переменнымdestinationNames широты и долготы, и включить эти переменные в список cdm\_timeseries\_variables.
    2. Точные значения широты и долготы, связанные с каждым наблюдением. вERDDAP™Дайте этим переменным разныеdestinationNames (Например, точный лат и точный Лон) Не включайте эти переменные в список cdm\_timeseries\_variables. Основанием для этого является: с теоретической точки зрения, для набора данных DSG TimeSeries, широты и долготы. (и высоту или глубину, если таковые имеются) Месторасположение станции должно быть постоянным.
TimeSeriesПрофиль
  • TimeSeriesПрофиль- для последовательности профилей, взятых в одном фиксированном месте широты долготы. Каждый профиль представляет собой набор измерений, выполняемых на нескольких высотах или глубинах. Набор данных может представлять собой набор этих Профилей TimeSeries, например, последовательность профилей, взятых в каждом из 12 различных мест.
    • Одна из переменных (Например, Station_id) Необходимо иметь атрибут переменной cf\_role=timeseries\_id для идентификации переменной, которая однозначно идентифицирует станции.
        <att name="cf\\_role">timeseries\\_id</att>
    • Одна из переменных (Например, профиль \_number) Необходимо иметь атрибут переменной cf\_role=profile\_id для идентификации переменной, которая однозначно идентифицирует профили.
      <att name="cf\\_role">profile\\_id</att>  
      (Заданный профиль _id должен быть уникальным только для заданных временных рядов _id.) Если нет другой подходящей переменной, рассмотрите возможность использования временной переменной.
    • Набор данных должен включать в себя глобальные переменные атрибута cdm\_timeseries\_variables, где значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждой станции. Для данной станции значения этих переменных должны быть постоянными. Например,
      <att name="cdm\\_timeseries\\_variables">station\\_id,station\\_type,latitude,longitude</att>

Список должен включать переменную cf\_role=timeseries\_id и все другие переменные с информацией о станции, которая почти всегда включает широту и долготу. Список никогда не будет включать в себя время, высоту, глубину или любые переменные наблюдения.

  • Набор данных должен включать в себя глобальные переменные атрибута cdm\profile\, где значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждом профиле. Для данного профиля значения этих переменных должны быть постоянными. Например,
    <att name="cdm\\_profile\\_variables">profile\\_number,time</att>

Список должен включать переменную cf\_role=profile\_id и все другие переменные с информацией о профиле, которая почти всегда включает время. Список никогда не будет включать широту, долготу, высоту, глубину или любые переменные наблюдения.

Траектория
  • Траектория- это последовательность измерений, сделанных по траектории (Путь через пространство и время) (Например, температура моря/воды/температуры, принимаемой судном при движении по воде.) . Набор данных может представлять собой совокупность этих Траекторий, например последовательность из каждого из 4 различных кораблей.
    • Одна из переменных (Например, ship_id) Необходимо иметь атрибут cf\_role=trajectory\_id для идентификации переменной, которая однозначно идентифицирует траектории.
      <att name="cf\\_role">trajectory\\_id</att>
cdm\_trajectory\_variables
  • Набор данных должен включать глобальный атрибутcdm\_trajectory\_variablesгде значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждой траектории. Для данной траектории значения этих переменных должны быть постоянными. Например,
    <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Список должен включать переменную cf\_role=trajectory\_id и все другие переменные с информацией о траектории. Список никогда не будет включать время, широту, долготу или любые переменные наблюдения.

TrajectoryProfile
  • TrajectoryProfile- это последовательность профилей, взятых по траектории. Набор данных может представлять собой набор этих TrajectoryProfiles, например, последовательность профилей, взятых 14 различными судами.
    • Одна из переменных (Например, ship_id) Необходимо иметь переменный атрибут cf\_role=trajectory\_id для идентификации переменной, которая однозначно идентифицирует траектории.
      <att name="cf\\_role">trajectory\\_id</att>
    • Одна из переменных (Например, профиль \_number) Необходимо иметь атрибут переменной cf\_role=profile\_id для идентификации переменной, которая однозначно идентифицирует профили.
      <att name="cf\\_role">profile\\_id</att>  
      (Данный профиль должен быть уникальным только для данной траектории.) Если нет другой подходящей переменной, рассмотрите возможность использования временной переменной.
    • Набор данных должен включать в себя глобальные переменные атрибута cdm\trajectory\, где значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждой траектории. Для данной траектории значения этих переменных должны быть постоянными. Например,
      <att name="cdm\\_trajectory\\_variables">ship\\_id,ship\\_type,ship\\_owner</att>

Список должен включать переменную cf\_role=trajectory\_id и все другие переменные с информацией о траектории. Список никогда не будет включать связанные с профилем переменные, время, широту, долготу или любые переменные наблюдения.

  • Набор данных должен включать в себя глобальные переменные атрибута cdm\profile\, где значение представляет собой разделенный запятой список переменных, которые имеют информацию о каждом профиле. Для данного профиля значения этих переменных должны быть постоянными. Например,
    <att name="cdm\\_profile\\_variables">profile\\_number,time,latitude,longitude</att>

Список должен включать переменную cf\_role=profile\_id и все другие переменные с информацией о профиле, которая почти всегда включает время, широту и долготу. Список никогда не будет включать высоту, глубину или любые переменные наблюдения.

другой
  • другой- нет никаких требований. Используйте его, если набор данных не соответствует одному из других вариантов, особенно если набор данных не включает переменные широты, долготы и времени.  
  • Все наборы данных EDDTable с типом cdm\_data\_type, отличным от «Другого», должны иметь переменные долготы, широты и времени.
  • Наборы данных с профилями должны иметь переменную высоты, переменную глубины илиcdm\_alitude\_proxyпеременная.
  • Если вы не можете заставить набор данных соответствовать всем требованиям для идеального типа cdm\data\, используйте «Точка». (который имеет мало требований) или «другой» (который не имеет требований) Вместо этого.
  • Эта информация используетсяERDDAP™различными способами, например, но в основном для.ncФайлы CF (.ncФайлы, которые соответствуют представлениям Contiguous Ragged Array, связанным с cdm\_data\_type набора данных) и.ncФайлы CFMA (.ncфайлы, которые соответствуют многомерным представлениям массива, связанным с cdm\_data\_type набора данных) как определено вДискретная геометрия выборки (DSG) Глава из этогоCFКонвенции по метаданным, которые ранее назывались «Конвенции по наблюдению за точками CF».
  • Подсказка: Для этих наборов данных правильная настройка дляsubsetVariablesОбычно это комбинация всех переменных, перечисленных в атрибутах cdm\_...\_variables. Например, для TimeSeriesProfile используйте cdm\_timeseries\_variables плюс cdm\_profile\_variables.
contributor\_name
  • contributor\_name (из которогоACDDстандарт метаданных) Рекомендуемый способ идентификации человека, организации или проекта, которые внесли свой вклад в этот набор данных. (Например, первоначальный создатель данных, прежде чем он был переработан создателем этого набора данных.) . Например,
        <att name="contributor\\_name">NOAA OceanWatch - Central Pacific</att>  

Если «вкладчик» на самом деле не относится к набору данных, опустите этот атрибут. По сравнению сcreator\_nameИногда это больше связано с источником финансирования.

contributor\_role
  • contributor\_role (из которогоACDDстандарт метаданных) Это рекомендуемый способ определения ролиcontributor\_name. Например,
        <att name="contributor\\_role">Source of Level 2b data</att>  

Если «вкладчик» на самом деле не относится к набору данных, опустите этот атрибут.

Конвенции
  • Конвенции (из которогоCFстандарт метаданных) Он настоятельно рекомендуется. (Это может потребоваться в будущем.) Значение представляет собой разделенный запятой список стандартов метаданных, которым следует этот набор данных. Например:
    <att name="Conventions">COARDS, CF-1.6, ACDD-1.3</att>  

Общие конвенции о метаданных, используемые вERDDAP™это:

Если ваш набор данных соответствует некоторому дополнительному стандарту метаданных, пожалуйста, добавьте имя в список CSV в атрибуте Конвенции.

coverage\_content\_type
  • coverage\_content\_type (из которогоISO 19115стандарт метаданных) Рекомендуемый способ определения типа сетчатых данных (вEDDGridнаборы данных) . Например,
    <att name="coverage\\_content\\_type">modelResult</att>  

Единственными допустимыми значениями являются вспомогательная информация, изображение, модельРезультат, физическое Измерение (По умолчанию, когда генерируются метаданные ISO 19115) , информация о качестве, справочная информация и тематическая классификация. (Не используйте этот тег для наборов данных EDDTable.)

creator\_name
  • creator\_name (из которогоACDDстандарт метаданных) Рекомендуемый способ идентификации человека, организации или проекта (Если не конкретный человек или организация) Наиболее ответственные за создание (или самая последняя переработка) этих данных. Например,
    <att name="creator\\_name">NOAA NMFS SWFSC ERD</att>  

Если данные были тщательно обработаны (Например, спутниковые данные от уровня 2 до уровня 3 или 4.) , то обычно репроцессор указан как создатель и оригинальный создатель указан черезcontributor\_name. По сравнению спроектЭто более гибко, поскольку может идентифицировать человека, организацию или проект.

creator\_email
  • creator\_email (из которогоACDDстандарт метаданных) Это рекомендуемый способ идентифицировать адрес электронной почты (правильно отформатированный) Это дает возможность связаться с создателем. Например,
    <att name="creator\\_email">erd.data@noaa.gov</att>  
creator\_url
  • creator\_url (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый способ идентификации URL для организации, создавшей набор данных, или URL с информацией создателя об этом наборе данных. (Но это, скорее, цельinfoUrl) . Например,
    <att name="creator\\_url">https://www.pfeg.noaa.gov</att>  
date\_created
  • date\_created (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый способ определения даты, с которой данные были впервые созданы (Например, в такой форме) в формате ISO 8601. Например,
    <att name="date\\_created">2010-01-30</att>  

Если данные периодически добавляются в набор данных, это первая дата, когда были предоставлены исходные данные.

date\_modified
  • date\_modified (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый способ определения даты последнего изменения данных (Например, когда была исправлена ошибка или добавлены последние данные.) в формате ISO 8601. Например,
    <att name="date\\_modified">2012-03-15</att>  
date\_issued
  • date\_issued (из которогоACDDстандарт метаданных) РЕКОМЕНДУЕМ способ определения даты, когда данные были впервые предоставлены другим, в формате ISO 8601, например, 2012-03-15. Например,
    <att name="date\\_issued">2010-07-30</att>  

Например, набор данных может иметьdate\_created2010-01-30, но был выпущен в открытый доступ только 2010-07-30.date\_issuedиспользуется реже, чемdate\_createdиdate\_modified. Еслиdate\_issuedОпущен, предполагается, что он такой же, как иdate\_created.

глобальныйdrawLandMask
  • drawLandMask - Это универсальный атрибут, используемыйERDDAP™ (Отсутствие стандартов метаданных) который определяет значение по умолчанию для опции «Draw Land Mask» в форме Make A Graph набора данных ( datasetID граф) и для параметра &.land в URL, запрашивающем карту данных. Например,
    <att name="drawLandMask">over</att>  

Видишь?drawLandMaskобзор.

featureType
  • featureType (из которогоCFстандарт метаданных) Игнорируется и/или заменяется. Если набор данныхcdm\_data\_typeуместно,ERDDAP™автоматически использовать его для созданияfeatureTypeатрибут. Поэтому нет необходимости добавлять его.

Однако, если вы используетеEDDTable FromNcCFFilesдля создания набора данных из файлов, которые следуют заCF Дискретная геометрия выборки (DSG) стандартныйСами файлы должны иметьfeatureTypeправильно определены, так чтоERDDAP™Вы можете прочитать файлы правильно. Это часть требований CF DSG к этому типу файлов.  

история
  • история (из которогоCFиACDDстандарты метаданных) Это РЕКОМЕНДУемый многолинейный глобальный атрибут String с линией для каждого этапа обработки данных. Например,
    <att name="history">2011-08-05T08:55:02Z CMOR: Rewrote data to comply with CF standards.  
    2012-04-08T08:34:58Z CMOR: Converted 'height' type from 'd' to 'f'.</att>
    • В идеале каждая строка имеет ISO 8601:2004. (Е) Форматированная дата + TimeZ (Например, 2011-08-05T08:55:02Z) Затем следует описание этапа обработки.
    • ERDDAP™Это происходит, если его еще не существует.
    • Если он уже существует,ERDDAP™Добавить новую информацию к уже имеющейся.
    • История важна, потому что она позволяет клиентам вернуться к исходному источнику данных.
infoUrl
  • infoUrl Требуемый глобальный атрибут с URL веб-страницы с дополнительной информацией об этом наборе данных (обычно на сайте организации-источника) . Например,
    <att name="infoUrl">http://www.globec.org/</att>
    • Или глобальный набор данныхИсточник Атрибутыили глобальной<addAttributes> Необходимо включить этот атрибут.
    • infoUrlЭто важно, потому что позволяет клиентам узнать больше о данных из исходного источника.
    • ERDDAP™отображает ссылку наinfoUrlФорма доступа к данным Data Access Form ( datasetID .html) Создайте веб-страницу Graph ( datasetID граф) и другие веб-страницы.
    • Если URL имеет часть запроса (После ""?) Это должно быть уже% кодируется. Вам нужно кодировать специальные символы в ограничениях. (В отличие от начального и основного'='Если есть) в форму %HH, где HH — 2-значное шестнадцатеричное значение символа. Обычно нужно просто преобразовать несколько символов пунктуации: % в %25, & в %26, "в %22,<в %3C, = в %3D, > в %3E, + в %2B,|в %7С,\[в %5B,\]в %5D, в %20 и преобразовать все символы выше #127 в форму UTF-8, а затем в % кодировать каждый байт формы UTF-8 в формат %HH (Попросите программиста помочь) . Например, &stationID>="41004" становится иstationID%3E=%2241004%22 Процент кодирования обычно требуется при доступеERDDAPчерез программное обеспечение, отличное от браузера. Браузеры обычно обрабатывают процент кодирования для вас. В некоторых ситуациях вам нужно закодировать все символы, кроме A-Za-z0-9. " () \*, но все же не кодируйте начальное '&' или основное'='. Языки программирования имеют инструменты для этого (например, см.Java?java.net.URLEncoder
      иJavaСценарий [encodeURIComponent()] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent ) ) и существуют Сайты, которые закодируют / декодируют для вас.
    • С тех порdatasets.xmlXML-файл, вы должны также и кодировать все '&', ''<', и '>' в URL как '&', '<', и '>' после процента кодирования.
    • infoUrlявляется уникальным дляERDDAP. Это не стандарт метаданных.
учреждение
  • учреждение (из которогоCFиACDDстандарты метаданных) Требуемый глобальный атрибут с краткой версией названия учреждения, которое является источником этих данных (обычно аббревиатура, как правило).<20 персонажей. Например,
    <att name="institution">NASA GSFC</att>
    • Или глобальный набор данныхИсточник Атрибутыили глобальной<addAttributes> Необходимо включить этот атрибут.
    • ERDDAP™отображает учреждение всякий раз, когда оно отображает список наборов данных. Если имя учреждения здесь длиннее 20 символов, в списке наборов данных будут видны только первые 20 символов. (Но все учреждение можно увидеть, поместив курсор мыши над соседним значком «?») .
    • Если вы добавили учреждение в список<categoryAttributes> вERDDAP?Настройка.xmlфайл, пользователи могут легко найти наборы данных из того же учреждения черезERDDAP«Поиск наборов данных по категориям» на главной странице.
ключевые слова
  • ключевые слова (из которогоACDDстандарт метаданных) Рекомендуемый список слов и коротких фраз, разделенный запятой (Например,GCMD Научные ключевые слова) которые описывают набор данных общим образом и не предполагают каких-либо других знаний о наборе данных (Например, океанографические данные включают океан.) . Например,
    <att name="keywords">ano, circulation, coastwatch, currents, derived, Earth Science &gt; Oceans &gt; Ocean Circulation &gt; Ocean Currents, eastward, eastward\\_sea\\_water\\_velocity, experimental, hf radio, meridional, noaa, northward, northward\\_sea\\_water\\_velocity, nuevo, ocean, oceans, radio, radio-derived, scan, sea, seawater, velocity, water, zonal</att>  

С тех порdatasets.xmlXML-документ, символы и<, и > в атрибуте, как ключевые слова (Например, символы > в ключевых словах науки GCMD) должны быть закодированы как &<и > соответственно. Когда набор данных загружается вERDDAP,

  • «Наука о Земле» добавляется к началу любого ключевого слова GCMD, в котором его нет.
  • Ключевые слова GCMD преобразуются в Title Case (Первые буквы капитализируются) .
  • Ключевые слова перегруппированы в отсортированный порядок, и любые символы новой линии удаляются.  
keywords\_vocabulary
  • keywords\_vocabulary (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый атрибут: если вы следуете руководству для слов / фраз в атрибуте ключевых слов (GCMD Science Ключевые слова) Назовите название этого руководства здесь. Например,
    <att name="keywords\\_vocabulary">GCMD Science Keywords</att>  
лицензия
  • лицензия (из которогоACDDстандарт метаданных) СТРОИТЕЛЬНО РЕКОМЕНДУЕТСЯ глобальный атрибут с лицензией и / или ограничениями использования. Например,
    <att name="license">\\[standard\\]</att>
    • Если\[стандартный\]"происходит в значении атрибута, оно будет заменено стандартомERDDAP™лицензии от<Стандартная лицензия> Tag inERDDAP? \[кот\]/webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml файл.  
Metadata\_Conventions
  • Metadata\_Conventions от устаревшегоACDD 1.0 (который был идентифицирован вMetadata\_ConventionsкакUnidataDataset Discovery v1.0") Стандарт метаданных. Значение атрибута представляло собой разделенный запятой список конвенций метаданных, используемых этим набором данных. Если набор данных использует ACDD 1.0, этот атрибут настоятельно рекомендуется, например,
    <att name="Metadata\\_Conventions">COARDS, CF-1.6, Unidata Dataset Discovery v1.0</att>  

НоERDDAP™В настоящее время рекомендуется ACDD-1.3. Если у вас естьПереключите наборы данных на ACDD-1.3, использованиеMetadata\_ConventionsСильная дискредитация: просто используйте<Конвенции> (#конвенции) Вместо этого.

processing\_level
проект
  • проект (из которогоACDDстандарт метаданных) Опциональный атрибут для идентификации проекта, частью которого является набор данных. Например,
    <att name="project">GTSPP</att>  

Если набор данных не является частью проекта, не используйте этот атрибут. По сравнению сcreator\_nameЭто сосредоточено на проекте (не является лицом или организацией, которые могут участвовать в нескольких проектах;) .

publisher\_name
  • publisher\_name (из которогоACDDстандарт метаданных) Рекомендуемый способ идентифицировать человека, организацию или проект, который публикует этот набор данных. Например,
    <att name="publisher\\_name">JPL</att>  

Например, вы являетесь издателем, если другой человек или группасозданныйНабор данных, и вы просто сохраняете его черезERDDAP. Если «издатель» на самом деле не относится к набору данных, опустите этот атрибут. По сравнению сcreator\_nameИздатель, вероятно, существенно не модифицировал или не обрабатывал данные; издатель просто делает данные доступными в новом месте.

publisher\_email
  • publisher\_email (из которогоACDDстандарт метаданных) Это рекомендуемый способ идентифицировать адрес электронной почты (правильно отформатированный, например, john\_smith@great.org) Это дает возможность связаться с издателем. Например,
    <att name="publisher\\_email">john\\_smith@great.org</att>  

Если «издатель» на самом деле не относится к набору данных, опустите этот атрибут.

publisher\_url
  • publisher\_url (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый способ идентификации URL для организации, которая опубликовала набор данных, или URL с информацией издателя об этом наборе данных. (Но это, скорее, цельinfoUrl) . Например,
    <att name="publisher\\_url">https://podaac.jpl.nasa.gov</att>  

Если «издатель» на самом деле не относится к набору данных, опустите этот атрибут.

real\_time
  • real\_time Глобальный атрибут струн (Ни в одном стандарте) Укажите, является ли это набором данных в реальном времени. Например,
    <att name="real\\_time">true</att>  

Если это ложно (по умолчанию) ,ERDDAP™будет кэшировать ответы на запросы типов файлов, где весь файл должен быть создан доERDDAP™Вы можете начать отправлять ответ пользователю и повторно использовать его в течение примерно 15 минут. (например,.nc.png) . Если это истинно,ERDDAP™Никогда не будет кэшировать файлы ответа и всегда будет возвращать вновь созданные файлы.

sourceUrlатрибут
  • sourceUrl Это глобальный атрибут с URL источника данных. Например,
    <att name="sourceUrl">https://opendap.co-ops.nos.noaa.gov/ioos-dif-sos/SOS</att>  
    (Положите все на одну линию)
    • ERDDAP™Обычно этот глобальный атрибут создается автоматически. Два исключения – это EDDTableFrom.HyraxФайлы и EDDTable FromThreddsFiles.
    • Если источником являются локальные файлы и файлы были созданы вашей организацией, используйте
        <att name="sourceUrl">(local files)</att>
    • Если источником является локальная база данных и данные были созданы вашей организацией, используйте
        <att name="sourceUrl">(local database)</att>
    • sourceUrlЭто важно, поскольку позволяет клиентам вернуться к исходному источнику данных.
    • sourceUrlявляется уникальным дляERDDAP. Это не стандарт метаданных.
standard\_name\_vocabulary
  • standard\_name\_vocabulary (из которогоACDDстандарт метаданных) РЕКОМЕНДУемый атрибут для идентификации названия контролируемой лексики, из которой переменнаяstandard\_names взяты. Например,
    <att name="standard\\_name\\_vocabulary">CF Standard Name Table v77</att>  

Для версии 77Стандартная таблица имен CF.  

subsetVariables
  • subsetVariables (Только для EDDTable) Это РЕКОМЕНДУемый глобальный атрибут, который позволяет вам указать список, разделенный запятой.<dataVariable> (#datavariable) destinationNames для идентификации переменных, имеющих ограниченное число значений (Другой способ: переменные, для которых каждое из значений имеет много дубликатов.) . Например,
    <att name="subsetVariables">station\\_id, longitude, latitude</att>  

Если этот атрибут присутствует, набор данных будет иметь datasetID .subset web page (и ссылку на него в каждом списке наборов данных) Это позволяет пользователям быстро и легко выбирать различные подмножества данных.

  • Каждый раз, когда загружается набор данных,ERDDAPЗагрузка и хранение на диске стола со всеми различными () Комбинации подмножества Значения переменной переменной.ERDDAP™Можно прочитать, чтоsubsetVariablesСтол и обработать его очень быстро (Особенно по сравнению с чтением большого количества файлов данных или получением данных из базы данных или другого внешнего сервиса.) .
  • Это позволяетERDDAP™Чтобы сделать 3 вещи:
    1. позволяетERDDAP™разместить список возможных значений в раскрывающемся списке в форме доступа к данным, на веб-странице Make A Graph и на веб-страницах .subset.
    2. позволяетERDDAP™Предложить веб-страницу .subset для этого набора данных. Эта страница интересна тем, что она позволяет легко найти действительные комбинации значений этих переменных, что для некоторых наборов данных и некоторых переменных очень, очень сложно. (Почти невозможно) . Все запросы пользователей на различные () подмножество Переменные данные будут очень быстрыми.
    3. Если есть запрос пользователя, который относится только к подмножеству этих переменных,ERDDAP™Можно быстро прочитатьsubsetVariablesТаблица и ответ на запрос. Это может сэкономить массу времени и усилий дляERDDAP.
  • Порядок проведенияdestinationNames вы указываете определяет порядок сортировки на datasetID .subset веб-страница, поэтому вы обычно указываете сначала наиболее важные переменные, а затем наименее важные. Например, для наборов данных с данными временных рядов для нескольких станций можно использовать, например,
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

Величины сортируются по Station_id.

  • Очевидно, что это ваш выбор, какие переменные включить вsubsetVariablesСписок, но предлагаемое использование:

Включите переменные, для которых вы хотитеERDDAP™отображать раскрывающийся список опций в форме доступа к данным набора данных (.html) Исполнитель: Make-A-Graph (граф) Веб-страницы.

В общем, включают переменные с информацией об особенностях набора данных. (Станции, профили и/или траектории, в частностиcdm\_timeseries\_variables,cdm\_profile\_variables,cdm\_trajectory\_variables) . Для этих переменных есть только несколько различных значений, поэтому они хорошо работают с выпадающими списками.

Никогда не включайте переменные данных, связанные с индивидуальными наблюдениями. (Например, время, температура, соленость, текущая скорость) вsubsetVariablesсписок. Для этих переменных слишком много разных значений, поэтому выпадающий список будет медленно загружаться и с ним трудно работать. (или не работать) .

  • Если число различных комбинаций этих переменных больше, чем около 1 000 000, вы должны рассмотреть вопрос об ограничении числа этих переменных.subsetVariablesчто вы указываете, чтобы уменьшить число различных комбинаций до менее чем 1 000 000; в противном случае datasetID .subset веб-страницы могут генерироваться медленно. В крайних случаях набор данных может не загружаться вERDDAP™Потому что создание списка различных комбинаций использует слишком много памяти. Если это так, вы должны удалить некоторые переменные изsubsetVariablesсписок.
  • Если число различных значений какой-либо одной подмножественной переменной превышает около 20 000, вы должны рассмотреть возможность не включать эту переменную в список.subsetVariablesВ противном случае требуется много времени для передачи datasetID .subset, datasetID .граф, и datasetID .html веб-страницы. Кроме того, на Mac очень трудно сделать выбор из выпадающего списка с более чем 500 элементами из-за отсутствия полосы прокрутки. Компромисс заключается в том, чтобы удалить переменные из списка, когда пользователи вряд ли выберут значения из выпадающего списка.
  • Вы должны проверить каждый набор данных, чтобы увидеть,subsetVariablesНастройка в порядке. Если сервер исходных данных медленный и занимает слишком много времени (или проваливается) чтобы загрузить данные, либо уменьшить количество указанных переменных, либо удалитьsubsetVariablesГлобальный атрибут.
  • Подмножество Переменные очень полезны. Если ваш набор данных подходит, пожалуйста, создайтеsubsetVariablesатрибут.
  • EDDTable FromSOSавтоматически добавляет
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

когда создается набор данных.

  • Предупреждение: если пользователь использует datasetID .subset web page выбирает значение, которое имеет символ carriageReturn или newline, datasetID .subset провалится.ERDDAP™Не может обойти эту проблему из-за некоторых деталей HTML. В любом случае, это почти всегда хорошая идея, чтобы удалить карету Возврат и символы новой линии из данных. Чтобы помочь решить проблему, если EDDTable.subsetVariablesDataTable метод вERDDAPобнаруживает значения данных, которые вызовут проблемы, он отправит по электронной почте предупреждение со списком оскорбительных значений на электронную почту Все На адреса электронной почты, указанные в setup.xml. Таким образом, вы знаете, что нужно исправить.
  • Предварительно созданные таблицы подмножеств. Обычно, когдаERDDAP™загружает набор данных, он запрашивает отдельный () Подмножество переменных таблицы данных из источника данных, просто через обычный запрос данных. В некоторых случаях эти данные не доступны из источника данных или извлечение из источника данных может быть затруднено на сервере источника данных. Если это так, вы можете предоставить таблицу с информацией в.json.csv файл с именем кот /content/erddap/subset/ datasetID .json (или .csv) . Если присутствует,ERDDAP™будет читать его один раз при загрузке набора данных и использовать его в качестве источника данных подмножества.
  • Если при чтении есть ошибка, набор данных не будет загружаться.
  • Они должны иметь одинаковые названия колонок. (Например, в том же случае) как<subsetVariablesНо колонки могут быть в любом порядке.
  • Могут быть дополнительные колонки (Они будут удалены, а новые избыточные ряды будут удалены.) .
  • Отсутствующие ценности должны отсутствовать (Не поддельные номера, как 99) .
  • .jsonФайлы могут быть немного сложнее создавать, но хорошо работать с символами Unicode..jsonФайлы легко создавать, если вы их создаете.ERDDAP.
  • С файлами .csv легко работать, но они подходят только для символов ISO 8859-1. .csv файлы должны иметь имена столбцов в первой строке и данные в последующих строках.
  • Для больших массивов данных или когда<subsetVariables> неправильно сконфигурирована, таблица комбинаций значений может быть достаточно большой, чтобы вызвать слишком много данных или ошибки OutOfMemory. Решение заключается в удалении переменных из списка.<subsetVariablesдля которых имеется большое количество значений, или удалить переменные по мере необходимости, пока размер этой таблицы не станет разумным. Вне зависимости от ошибки, частьERDDAP™которые используютsubsetVariablesСистема не работает хорошо (Веб-страницы загружаются очень медленно) Когда слишком много рядов (Например, более миллиона) за этим столом.
  • subsetVariablesЭто не имеет ничего общего с определением того, какие переменные пользователи могут использовать в ограничениях, то есть как пользователи могут запрашивать подмножества набора данных.ERDDAP™Ограничения всегда позволяют ссылаться на любую из переменных.
Единицы времени

Время и метка времениколонки должны иметь ISO 8601:2004 (Е) Форматированная дата + время Z-струны (Например, 1985-01-31T15:31:00Z) .  

резюме
  • резюме (из которогоCFиACDDстандарты метаданных) Требуемый глобальный атрибут с длинным описанием набора данных (обычно)<500 символов. Например,
    <att name="summary">VIIRSN Level-3 Standard Mapped Image, Global, 4km, Chlorophyll a, Daily. The Visible and Infrared Imager/Radiometer Suite (VIIRS) is a multi-disciplinary instrument that flies on the National Polar-orbiting Operational Environmental Satellite System (NPOESS) series of spacecraft, including the NPOESS Preparatory Project (NPP).</att>
    • Или глобальный набор данныхИсточник Атрибутыили глобальной<addAttributes> Необходимо включить этот атрибут.
    • Резюме очень важно, потому что оно позволяет клиентам прочитать описание набора данных, который имеет больше информации, чем заголовок, и таким образом быстро понять, что такое набор данных.
    • Совет: пожалуйста, напишите резюме, чтобы оно работало, чтобы описать набор данных какому-то случайному человеку, которого вы встречаете на улице или коллеге. Не забудьте включитьПять W и один HКто создал набор данных? Какая информация была собрана? Когда были собраны данные? Где он был собран? Почему он был собран? Как он был собран?
    • ERDDAP™отображает резюме в форме доступа к данным набора данных ( datasetID .html) Создайте веб-страницу Graph ( datasetID граф) и другие веб-страницы.ERDDAP™использует резюме при создании документов FGDC и ISO 19115.
testOutOfDate
  • testOutOfDate (необязательныйERDDAPспецифический глобальный атрибут метаданных, а не из какого-либо стандарта;) Упрощенно указывает, когда данные для набора данных в реальном времени считаются устаревшими, указанными какnow- единицы Например,now-2 дня для данных, которые обычно появляются через 24-48 часов после значения времени. Для прогнозных данных используйте сейчас + единицы Например, сейчас +6 дней для прогнозных данных, что максимум 8 дней в будущем. (Видишь?now- единицы описание синтаксиса.) Если максимальное значение времени для набора данных является более поздним, чем указанное время, набор данных считается актуальным. Если максимальное значение времени старше указанного времени, набор данных считается актуальным. Для устаревших наборов данных, предположительно, существует проблема с источником данных.ERDDAP™Невозможно получить доступ к данным из более поздних временных точек.

ThetestOutOfDateзначение отображается как столбец вallDatasetsнабор данныхв твоемERDDAP. Он также используется для вычисления индекса OutOfDate, который является еще одним столбцом в таблице.allDatasetsнабор данных. Если индекс является<1 набор данных считается актуальным. Если индекс является<=1, набор данных считается устаревшим. Если индекс является<=2, набор данных считается устаревшим.

ThetestOutOfDateЦенность также используетсяERDDAP™Чтобы генерировать https://yourDomain/erddap/outOfDateDatasets.html веб-страница (пример) который показывает наборы данных, имеющие<testOutOfDate> теги, с наборами данных, ранжированными по тому, насколько они устаревшие. Если вы измените тип файла (От .html до .csv.jsonlCSV,.nc,.tsv...) Вы можете получить эту информацию в различных форматах файлов.

Когда это возможно,Генерировать наборы данныхXmlДобавить atestOutOfDateОтношение к глобальномуaddAttributesнабором данных. Это значение представляет собой предложение, основанное на информации, доступной для GenerateDatasetsXml. Если значение не подходит, измените его.

"Out-of-date" здесь сильно отличается от<перезаряжать EveryNMinutes > (#reloadeverynminutes) Что касается того, насколько актуальноERDDAPЗнание набора данных есть. The<testOutOfDateСистема предполагает, чтоERDDAPЗнание набора данных обновлено. Вопрос<testOutOfDate> имеет дело с: как представляется, что-то не так с источником данных, в результате чего более свежие данные не могут быть доступныERDDAP?

титул
  • титул (из которогоCFиACDDстандарты метаданных) Требуемый глобальный атрибут с кратким описанием набора данных (обычно)<=95 символов. Например,
    <att name="title">VIIRSN Level-3 Mapped, Global, 4km, Chlorophyll a, Daily</att>
    • Или глобальный набор данныхИсточник Атрибутыили глобальной<addAttributes> Необходимо включить этот атрибут.
    • Заголовок важен, потому что каждый список наборов данных представленERDDAP (Кроме результатов поиска) перечисляет наборы данных в алфавитном порядке, по названию. Поэтому, если вы хотите указать порядок наборов данных или сгруппировать некоторые наборы данных вместе, вы должны создавать заголовки с учетом этого. Множество списков наборов данных (Например, в ответ на поиск по категориям) Покажите подмножество полного списка и в другом порядке. Таким образом, название для каждого набора данных должно стоять самостоятельно.
    • Если заголовок содержит слово «забытый» (Все заглавные буквы) Затем набор данных получит более низкий рейтинг в поиске.  
<axisVariable>
  • [править] ** <axisVariable> ** ] (#переменный) Используется для описания измерения (Также называется «ось».) . ДляEDDGridнаборы данных, один или несколькоaxisVariableТэги востребованы, и всеdataVariablesВсегда делитесь / используйте все переменные оси. (Почему? А если нет?)
    Должна быть переменная оси для каждого измерения переменных данных. Переменные оси должны быть указаны в порядке их использования переменными данных. (Наборы данных EDDTable не могут использоваться)<axisVariable> Тэги. Яркий пример:

  <axisVariable>
      <sourceName\>MT</sourceName>
      <destinationName\>time</destinationName>
      <addAttributes>
        <att name="units">days since 1902-01-01T12:00:00Z</att>
      </addAttributes>
  </axisVariable>

<axisVariable> поддерживает следующие подтеги:

<sourceName\>
  • [править]<sourceName\> (#sourcename) - имя источника данных переменной. Это имя, котороеERDDAP™будет использоваться при запросе данных из источника данных. Это имя, котороеERDDAP™Мы будем искать, когда данные возвращаются из источника данных. Это дело деликатное. Это необходимо.
<destinationName\>
  • [править]<destinationName\> (#назначение) имя переменной, которая будет показана и использованаERDDAP™пользователей.
    • Это опционально. Если отсутствует, тоsourceNameиспользуется.
    • Это полезно, потому что позволяет изменить загадочный или нечетныйsourceName.
    • destinationNameДело деликатное.
    • destinationNameНачать нужно с письма (A-Z, a-z) За ним должно следовать 0 или более символов. (A-Z, a-z, 0-9 и) . (Допускается доERDDAP™Версия 1.10.) Это ограничение позволяет переменным именам оси быть одинаковыми.ERDDAP™в файлах ответа и во всем программном обеспечении, где эти файлы будут использоваться, включая языки программирования; (какPython,MatlabиJavaсценарий) где существуют аналогичные ограничения на переменные имена.
    • вEDDGridнаборы данных,долгота, широта, высота, глубина и времяПеременные оси являются особыми.  
axisVariable <addAttributes>
  • [править]<addAttributes> (#вариабельные атрибуты) Определение опционального набора атрибутов ( имя = ценность ) которые добавляются к атрибутам источника для переменной, чтобы сделать комбинированные атрибуты для переменной. Если переменнаяИсточник Атрибутыили<addAttributes> включатьscale\_factorи/илиadd\_offsetатрибуты, их значения будут использоваться для распаковки данных из источника перед распространением клиенту. (результат Значение = источник Значение *scale\_factor+add\_offset) . Неупакованная переменная будет иметь тот же тип данных. (Например, плавать) какscale\_factorиadd\_offsetценностей.  
<dataVariable>
  • [править] ** <dataVariable> ** ] (#datavariable) требуется (почти для всех наборов данных) Тэг в пределах<тег dataset>, который используется для описания переменной данных. Должен быть 1 или более экземпляров этого тега. Яркий пример:

  <dataVariable>
      <sourceName\>waterTemperature</sourceName>
      <destinationName\>sea\_water\_temperature</destinationName>
      <dataType>float</dataType>
      <addAttributes>
        <att name="ioos\_category">Temperature</att>
        <att name="long\_name">Sea Water Temperature</att>
        <att name="standard\_name">sea\_water\_temperature</att>
        <att name="units">degree\_C</att>
      </addAttributes>
  </dataVariable>

<dataVariable> поддерживает следующие подтеги:

<sourceName>
  • [править]<sourceName> (#sourcename) - имя источника данных переменной. Это имя, котороеERDDAP™будет использоваться при запросе данных из источника данных. Это имя, котороеERDDAP™Мы будем искать, когда данные возвращаются из источника данных. Это дело деликатное. Это необходимо.
Группы

CF добавил поддержку для групп с CF v1.8. Начиная с 2020 года,NetCDFИнструменты, поддерживающие размещение переменных в группах.ncФайл. На практике это просто означает, что переменные имеют длинное имя, которое идентифицирует группу. (s) и переменное имя, например, group1a/group2c/varName.ERDDAP™поддерживает группы путем преобразования «/» в переменную<sourceName> в "\_" в переменной<destinationName>, например, group1a\_group2c\_varName. (Когда вы видите это, вы должны понимать, что группы — это не больше, чем синтаксис.) Если переменные указаны вERDDAP™Все переменные в группе будут появляться вместе, имитируя основную группу.\[ЕслиERDDAP™В частности, генерировать наборы данных Xml, работает не так хорошо, как с исходными файлами, которые имеют группы, пожалуйста, отправьте образец файла Крису. Джон на noaa.gov.\]

Наборы данных EDDTableFromFiles могут использовать некоторые специально закодированные, псевдо-sourceNames для определения новых переменных данных, например, для продвижения глобального атрибута в качестве переменной данных. Видишь?Эта документация.

HDFСтруктуры

Начиная сERDDAP™v2.12,EDDGridИз NcFiles иEDDGridИз NcFiles Неупакованные могут считывать данные из «структур».nc4 и.hdf4 файла. Чтобы определить переменную, которая является структурой,<sourceName> Необходимо использовать формат: Полное название структуры | Имя Например, группа 1/myStruct|Мой член.

Имена источников фиксированной стоимости

В наборе данных EDDTable, если вы хотите создать переменную (с одной фиксированной стоимостью) Этого нет в исходном наборе данных, используйте:

    <sourceName>=*fixedValue*</sourceName>  

Начальный знак равенства говоритERDDAP™что такое фиксированный Ценность будет следовать.

  • Для числовых переменных фиксированное значение должно быть единственным конечным значением или NaN. (случай нечувствительный, например, \=NaN) .
  • Для струнных переменных фиксированное значение должно быть единым,Струна в стиле JSON (с особыми персонажами, сбежавшими с персонажами) Например, \="Моя \"Особая\" Струна.
  • Для переменной временной метки укажите фиксированное значение как число в"seconds since 1970-01-01T00:00:00Z"и использовать единицы = секунды с 197001-01T00:00:00Z.

Другие теги для<dataVariableРаботайте так, как будто это обычная переменная. Например, создать переменную, называемую высотой, с фиксированным значением 0,0. (плавать) Используйте:

<sourceName>=0</sourceName>
<destinationName\>altitude</destinationName>
<dataType>float</dataType>

Для необычных ситуаций можно даже указатьactual\_rangeДобавить атрибут, который будет переопределять ожидаемые значения destinationMin и destinationMax (которая в противном случае равнялась бы фиксированной ценность) .  

Источники / Производные переменные

Начиная сERDDAP™v2.10, вEDDTable Из материалов,EDDTable FromDatabaseилиEDDTable FromFileNamesнабор данных,<sourceName> может быть выражение (Уравнение, которое оценивает одно значение) , используя формат

    <sourceName>=*expression*</sourceName>  

или сценарий (Серия утверждений, возвращающих одно значение) , используя формат

    <sourceName>=*script*</sourceName>  

ERDDAP™опираясь наПроект Apache JavaЯзык выражения (Джекс) (лицензия:Апач) Для оценки выражений и запуска сценариев. Расчет для данной новой переменной производится в пределах одной строки результатов, неоднократно для всех строк. Выражения и сценарии используют аJava- иJavaСкрипт-подобный синтаксис и может использовать любой из Операторы и методы, встроенные в JEXL. Скрипты также могут использовать методы (функции) Из этих классов:

  • Расписание2, который является оберткой для некоторых статических, временных и календарных методов в com.cohort.util.Calendar2 (лицензия) . Например, Календарь2.parseToEpochВторое ( Источник Время, дата Формат времени ) Проанализирует источник Строка времени через строку TimeFormat даты и возврат"seconds since 1970-01-01T00:00:00Z" (вторая эпоха) двойное значение.
  • математика, который является оберткой для почти всех статических, математических методов вjava.lang. математика. Например, Math.atan2 ( y, x ) принимает прямоугольные координаты (y, x) возвращает полярные координаты (Двойники с двойниками\[r, тета\]) .
  • Математика2, который является оберткой для почти всех статических, математических методов в com.cohort.util. Математика2 (лицензия) . Например, Математика 2. ( d, nМеста ) округление d до указанного числа цифр справа от десятичной точки.
  • Струна, которая дает вам доступ ко всем статическим методам, связанным со струнойjava.lang. Струна. Струнные объекты вERDDAP™Выражения и скрипты могут использовать любые связанные с нимиJavaМетоды, описанные в java.lang. Струнная документация. Например, String.valueOf (d) преобразует двойное значение d в строку (Вы также можете использовать «+d») .
  • Струна2, который является оберткой для большинства статических, струнных и массивных методов в com.cohort.util.String2 (лицензия) . Например, String2.zeroPad ( число, nDigits ) добавит 0 в левую часть строки, так что общее число цифр будет nDigits (Например, String2.zeroPad ("6", 2) Вернется «06») .
  • ряд, который имеет нестатические методы доступа к данным из различных столбцов в текущей строке таблицы исходных данных. Например, row.columnString ("Год") читает значение из столбца «год» как строку, тогда как, row.column инти ("Год") Считывает значение из столбца «год» как целое число.

По соображениям безопасности выражения и скрипты не могут использовать другие классы, кроме тех 6.ERDDAP™Это ограничение реализуется путем создания черного списка по умолчанию. (Черный список всех классов) Затем белый список (Что позволяет использовать 6 классов, описанных выше) . Если вам нужны другие методы и / или другие классы для выполнения вашей работы, пожалуйста, отправьте свои запросы Крису. Джон на noaa.gov.

Эффективность

Для наборов данных EDDTableFromFiles существует только очень, очень минимальный набор данных. (Вероятно, не заметно) замедление запросов данных от этих переменных. Для EDDTableFromDatabase существует огромный штраф за скорость для запросов, которые включают ограничения на эти переменные (например, (&longitude0360>30&longitude0360)<40) потому что ограничения не могут быть переданы в базу данных, поэтому база данных должна возвращать гораздо больше данных в базу данных.ERDDAP™ (который очень трудоемкий) так чтоERDDAP™Можно создать новую переменную и применить ограничение. Чтобы избежать худшего случая (где нет ограничений, передаваемых в базу данных) ,ERDDAP™Бросает сообщение об ошибке, так что база данных не должна возвращать все содержимое таблицы. (Если вы хотите обойти это, добавьте ограничение в колонку без сценария, которая всегда будет верной, например, время).<3000-01-01. По этой причине, с EDDTable FromDatabase, вероятно, всегда лучше создать производную колонку в базе данных, чем использовать ее.sourceName=script in inERDDAP.

Оригинальное название: How an Expression (Или сценарий) Используется:

В ответ на запрос пользователя о табличных данных,ERDDAP™Получает данные из серии исходных файлов. Каждый исходный файл будет генерировать таблицу (прямо из источника) данные.ERDDAP™Затем будет проходить через таблицу необработанных данных, строка за строкой, и оценивать выражение или сценарий один раз для каждой строки, чтобы создать новую колонку, которая имеет это выражение или сценарий в качествеsourceName.

Генерировать наборы данныхXml

Обратите внимание, что генерировать наборы данных Xml совершенно не знает, когда возникает необходимость в создании переменной с помощью<sourceName>= выражение </sourceName>. Вы должны создать переменную вdatasets.xmlОт руки.

Примеры выражений:

Вот несколько полных примеров переменных данных, которые используют выражение для создания нового столбца данных. Мы ожидаем, что эти примеры (и их вариации) будет охватывать около 95% использования всех форм выраженияsourceNameС.

Сочетая отдельные «даты» и"time"колонки в единую временную колонку:
    <dataVariable>
<sourceName>=Calendar2.parseToEpochSeconds(row.columnString("date") + "T" +
row.columnString("time") + "Z", "yyyy-MM-dd'T'HH:mm:ss'Z'")</sourceName>
<destinationName>time</destinationName>
<dataType>double</dataType>
<addAttributes>
<att name="units">seconds since 1970-01-01</att>
</addAttributes>
</dataVariable>

ЭтоsourceNameВыражение делает новое"time"столбец путем конкатенирования значений струн из "даты" (yyyy-MM-dd) и"time" (HH:mm:ss) колонки в каждой строке исходного файла и путем преобразования этой строки в"seconds since 1970-01-01" (вторая эпоха) двойное значение.

Или, конечно, вам придется настроить строку формата времени, чтобы иметь дело с конкретным форматом в колонках даты и времени источника каждого набора данных. временные единицы документация.

Технически, вы не должны использовать Календарь2.parseToEpochВторое () Преобразовать объединенную дату + время во вторую эпоху. Вы можете просто передать дату + время СтруныERDDAP™и указать формат (например, yyyy-MM-dd'T'HH:mm:ss'Z') через атрибут юнитов. Но есть значительные преимущества в преобразовании в AgeSeconds - в частности, EDDTableFromFiles может легко отслеживать диапазон значений времени в каждом файле и так быстро решать, следует ли искать в данном файле при ответе на запрос, который имеет временные ограничения.

Связанная с этим проблема заключается в необходимости создания единой колонки «дата+время» из источника с отдельным годом, месяцем, датой, часом, минутой, секундой. Решение очень похожее, но вам часто нужно будет обнулить многие поля, чтобы, например, месяц. (1 - 12) и дата (1 - 31) Всегда есть 2 цифры. Вот пример с годом, месяцем, датой:

    <sourceName>=Calendar2.parseToEpochSeconds(row.columnString("year") + 
String2.zeroPad(row.columnString("month"), 2) +
String2.zeroPad(row.columnString("date"), 2), "yyyyMMdd")</sourceName>

Связанная с этим проблема заключается в необходимости создания единого столбца широты или долготы путем объединения данных в отдельных столбцах степеней, минут и секунд исходной таблицы, каждый из которых хранится в виде целых чисел. Например,

    <sourceName>=row.columnInt("deg") + row.columnInt("min")/60.0 + 
row.columnInt("sec")/3660.0</sourceName>
Преобразование колонки с значениями долготы от 0 до 360° в колонку с значениями от -180 до 180°
    <dataVariable>
<sourceName>=Math2.anglePM180(row.columnDouble("lon"))</sourceName>
<destinationName>longitude</destinationName>
<dataType>double</dataType>
<addAttributes>
<att name="units">degrees\\_east</att>
</addAttributes>
</dataVariable>

ЭтоsourceNameвыражение создает новый столбец «долготы», преобразуя двойное значение из столбца «lon» в каждой строке исходного файла (предположительно с 0 - 360 значениями) и путем преобразования этого в двойное значение -180-180.

Если вы хотите преобразовать значения долготы источника -180 - 180° в 0 - 360°, используйте

    <sourceName>=Math2.angle0360(row.columnDouble("lon"))</sourceName>

Назовите две переменные долготы: Если набор данных будет иметь 2 переменных долготы, мы рекомендуем использоватьdestinationName= долгота для переменной -180 - 180° иdestinationName= долгота 0360 (Оригинальное название: Longitude 0-360°) для переменной 0 - 360°. Это важно, потому что пользователи иногда используют расширенный поиск для поиска данных в определенном диапазоне долготы. Этот поиск будет работать лучше, если долгота последовательно имеет значения -180-180° для всех наборов данных. Кроме того, глобальные атрибуты набора данных geospatial\_lon\_min, geospatial\_lon\_max, Westernmost\_Easting и Easternmost\_Eastings будут последовательно установлены. (с значениями долготы от -180 до 180°) ;

Преобразование колонки под названием "tempF" с температурными значениями в степени F в колонку под названием «темпС» с температурой в степени С:
    <dataVariable>
<sourceName>=(row.columnFloat("tempF")-32)\\*5/9</sourceName>
<destinationName>tempC</destinationName>
<dataType>float</dataType>
<addAttributes>
<att name="units">degrees\\_C</att>
</addAttributes>
</dataVariable>

ЭтоsourceNameвыражение создает новую колонку «tempC», преобразуя степень поплавка Значение F из столбца «tempF» в каждой строке исходного файла в степень поплавка C значение.

Обратите внимание, что ваш набор данных может иметь как первоначальный темп. F переменная и новый темп С переменной, имея другую переменную с

    <sourceName>tempF</sourceName>
Преобразование ветровых колонн «скорость» и «направление» в две колонны с компонентами u,v
  • Чтобы сделать переменную, используйте
    <sourceName>=row.columnFloat("speed") \\* Math.cos(row.columnFloat("direction"))</sourceName>
  • Чтобы сделать переменную v, используйте
    <sourceName>=row.columnFloat("speed") \\* Math.sin(row.columnFloat("direction"))</sourceName>

В соответствии с u,v:

  • Чтобы сделать переменную скорость, используйте
    <sourceName>=Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[0\\]</sourceName>
  • Чтобы изменить направление, используйте
    <sourceName>=Math.toDegrees(Math.atan2(row.columnDouble("v"), row.columnDouble("u"))\\[1\\])</sourceName>
Пример сценария:

Вот пример использования сценария, а не просто выражения, какsourceName. Мы ожидаем, что сценарии, в отличие от выражений, не будут нужны часто. В этом случае цель состоит в том, чтобы вернуть недостающее значение не-NaN. (-99) для значений температуры вне определенного диапазона. Обратите внимание, что сценарий является частью после «=».

    <dataVariable>
<sourceName>=var tc=row.columnFloat("tempC"); return tc&gt;35 || tc&lt;-5? -99.0f : tc\\*9/5+32;</sourceName>
<destinationName>tempF</destinationName>
<dataType>float</dataType>
<addAttributes>
<att name="units">degrees\\_F</att>
</addAttributes>
</dataVariable>
Жесткий флаг

Если вы измените выражение или сценарий, определенный вsourceNameВы должны установитьжесткий флагДля набора данных, чтобыERDDAP™удаляет всю кэшированную информацию для набора данных и перечитывает каждый файл данных (Использование нового выражения или сценария) В следующий раз он загружает набор данных. В качестве альтернативы вы можете использоватьDasDdsЭто эквивалентно установлению жесткого флага.

Процентный код

Это редко бывает актуально: Потому что выражения и сценарии написаны наdatasets.xml, который является XML-документом, вы должны закодировать любой<, \> и символы в выражениях и сценариях как<> и &.

Общие проблемы

Основная проблема заключается в том, что вы создаете переменную.sourceName= выражение Но полученный столбец данных просто имеет недостающие значения. Кроме того, некоторые строки новой колонки имеют недостающие значения, и вы думаете, что они не должны. Основная проблема заключается в том, что что-то не так с выражениемERDDAPПреобразует эту ошибку в недостающее значение. Чтобы решить проблему,

  • Посмотрите на выражение, чтобы увидеть, что проблема может быть.
  • Посмотри.log.txt, который покажет первое сообщение об ошибке, сгенерированное при создании каждой новой колонки.

Общими причинами являются:

  • Ты использовал не тот случай. Выражения и сценарии чувствительны к случаю.
  • Вы опустили название класса. Например, вы должны использовать Math.abs () Не только Абс () .
  • Ты не делала конверсии. Например, если тип данных значения параметра String и у вас есть двойное значение, вам нужно преобразовать двойник в String через «»+d.
  • Имя столбца в выражении не совпадает с именем столбца в файле. (Имя может отличаться в некоторых файлах.) .
  • Существует синтаксическая ошибка в выражении (Например, недостающее или дополнительное) "".

Если вы застряли или нуждаетесь в помощи, Пожалуйста, укажите детали и посмотрите нашРаздел о дополнительной поддержке.

<destinationName>
  • [править]<destinationName> (#назначение) - имя переменной, которая будет показана и использованаERDDAP™пользователей.
    • Это опционально. Если отсутствует, тоsourceNameиспользуется.
    • Это полезно, потому что позволяет изменить загадочный или нечетныйsourceName.
    • destinationNameДело деликатное.
    • destinationNameНачать нужно с письма (A-Z, a-z) За ним должно следовать 0 или более символов. (A-Z, a-z, 0-9 и) . (Допускается доERDDAP™Версия 1.10.) Это ограничение позволяет именам переменных данных быть одинаковыми.ERDDAP™в файлах ответа и во всем программном обеспечении, где эти файлы будут использоваться, включая языки программирования; (какPython,MatlabиJavaсценарий) где существуют аналогичные ограничения на переменные имена.
    • В наборах данных EDDTable,долгота, широта, высота (или глубина) и времяПеременные данных являются особыми.  
<данные Type>
  • [править]<DataType> (#тип данных) - указывает тип данных, поступающих из источника. (В некоторых случаях, например, при чтении данных из файлов ASCII, указывается, как следует хранить данные, поступающие из источника.)
    • Это требуется некоторыми типами наборов данных и не учитывается другими. Типы данных, которые требуют этого для своихdataVariables являются:EDDGridFromXxxFiles, EDDTable FromXxxFiles, EDDTableFromMWFSEDDTable FromNOS, EDDTable FromSOS. Другие типы наборов данных игнорируют этот тег, потому что они получают информацию из источника.  
    • Действительные значения являются любыми из стандартныхERDDAP™Типы данныхплюс булеан (см. ниже) . Имена типов данных чувствительны к случаям.  
Булевы данные
  • "Булин"Это особый случай.
    • Внутренне,ERDDAP™не поддерживает булевый тип, потому что булевы не могут хранить недостающие значения, и большинство типов файлов не поддерживают булевы. Кроме того,DAPне поддерживает булевы, поэтому не будет стандартного способа запроса булевых переменных.
    • Укажите «boolean» для данных Введитеdatasets.xmlЭто приведет к тому, что булевые значения будут храниться и представляться в виде байтов: 0 = ложно, 1 = истинно, 127 =missing\_value.
    • Пользователи могут определять ограничения, используя числовые значения. (Например, «Живой = 1») .
    • ERDDAP™Администраторам иногда приходится использовать «булинные» данные. Введитеdatasets.xmlрассказыватьERDDAP™Как взаимодействовать с источником данных (Например, для считывания булевых значений из реляционной базы данных и преобразования их в 0, 1, или 127.) .  
  • Если вы хотите изменить переменную данных из DataType в исходных файлах (Например, короткий) в некоторых других данных Тип в наборе данных (Например, Int) Не используйте<DataType — указать, что вы хотите. (Он работает для некоторых типов наборов данных, но не для других.) Вместо этого:
    • Использовать<DataType>, чтобы указать, что находится в файлах (Например, короткий) .
    • В этом<addAttributesДля переменной добавьтеscale\_factorАтрибут с новыми данными Тип (Например, Int) и значение 1, например,
            <att name="scale\\_factor" type="int">1</att>  
dataVariable <addAttributes>
  • [править]<addAttributes> (#вариабельные атрибуты) - определяет набор атрибутов ( имя = ценность ) которые добавляются к атрибутам источника для переменной, чтобы сделать комбинированные атрибуты для переменной. Это опционально. Если переменнаяИсточник Атрибутыили<addAttributes> включатьscale\_factorи/илиadd\_offsetатрибуты, их значения будут использоваться для распаковки данных из источника перед распространением клиенту. Неупакованная переменная будет иметь тот же тип данных. (Например, плавать) какscale\_factorиadd\_offsetценностей.
переменный<addAttributes>
  • [править] ** Переменные атрибуты / Переменные<addAttributes> ** ] (#вариабельные атрибуты) -<addAttributes> является опциональным тегом в пределах<axisVariableили<dataVariable> тег, который используется для изменения атрибутов переменной.

    • ** Используйте переменную<addAttributesДля изменения атрибутов переменной. ** ERDDAP™объединяет атрибуты переменной из источника набора данных (** Источник Атрибуты ) и переменной addAttributes которую вы определяете вdatasets.xml (которые имеют приоритет) чтобы сделать переменную " Комбинированные атрибуты ** ", которые являютсяERDDAP™Пользователи видят. Таким образом, вы можете использоватьaddAttributesпереопределять значения атрибутов источника, добавлять новые атрибуты или удалять атрибуты.

    • Смотри. ** <addAttributes> информация] (#addattributes) Что относится к глобальным и переменным <addAttributes> ** .

    • ERDDAP™Он ищет и использует многие из этих атрибутов различными способами. Например, значения ColorBar необходимы, чтобы сделать переменную доступной черезWMS, так что карты могут быть сделаны с последовательными цветными шляпами.

    • Долгота, широта, высота (или глубина) и временные переменныеПолучение большого количества метаданных автоматически (Например,единицы) .

    • Образец<addAttributesДля переменной данных:

        <addAttributes>
              <att name="actual\_range" type="doubleList">10.34 23.91</att>
              <att name="colorBarMinimum" type="double">0</att>
              <att name="colorBarMaximum" type="double">32</att>
              <att name="ioos\_category">Temperature</att>
              <att name="long\_name">Sea Surface Temperature</att>
              <att name="numberOfObservations" />
              <att name="units">degree\_C</att>
        </addAttributes>

Атрибут пустого числаOfObservations вызывает атрибут исходного числаOfObservations. (если есть) быть удалены из окончательного сводного списка атрибутов.

  • Предоставление этой информации помогаетERDDAP™Сделайте свою работу лучше и помогите пользователям понять наборы данных. Хорошие метаданные делают набор данных пригодным для использования. Недостаток метаданных делает набор данных бесполезным. Пожалуйста, найдите время, чтобы сделать хорошую работу с атрибутами метаданных.
Комментарии о переменных атрибутах, которые являются особеннымиERDDAP:
actual\_range
  • actual\_range Это рекомендуемый переменный атрибут. Например,

<att name="actual\_range" type="floatList"\>0.17 23.58</att>

  • Этот атрибут принадлежитCDCCOARDSиCF 1,7+Стандарты метаданных.
  • При наличии он должен представлять собой массив из двух значений одного и того же типа данных, что и тип данных назначения переменной, с указанием фактического (не теоретические или допустимые) Минимальные и максимальные значения данных для этой переменной.
  • Если данные упакованыscale\_factorи/илиadd\_offset,actual\_rangeдолжны иметь неупакованные значения и иметь тот же тип данных, что и неупакованные значения.
  • Для некоторых источников данных (Например, все EDDTable From... Файлы наборов данных) ,ERDDAP™определяетactual\_rangeкаждой переменной и устанавливаетactual\_rangeатрибут. с другими источниками данных (Например, реляционные базы данных, Кассандра,DAPПер,Hyrax) Это может быть трудно или обременительно для источника, чтобы вычислить диапазон.ERDDAP™не требует этого. В этом случае лучше всего, если вы можете установитьactual\_range (особенно для долготы, широты, высоты, глубины и временных переменных) путем добавленияactual\_rangeДля каждой переменной [<addAttributes> (#addattributes) Для этого набора данных вdatasets.xmlНапример,

<att name="actual\_range" type="doubleList"\>-180 180</att>

  • Для числовогопеременные времени и метки времени, указанные значения должны быть соответствующим источником (Не пункт назначения) численные значения. Например, если значения времени источника хранятся как «дни с 1985-01-01», тоactual\_rangeУточняется в "днях с 1985-01-01". И если вы хотите назвать NOW вторым значением для данных, которые периодически обновляются, вы должны использовать NaN. Например, для указания диапазона данных 1985-01-17 до СЕЙЧАС используйте

<att name="actual\_range" type="doubleList"\>16 NaN</att>

  • Еслиactual\_rangeИзвестен (либоERDDAP™Вычисление или добавление через<addAttributes>ERDDAP™отобразит его пользователю в форме доступа к данным ( datasetID .html) Создайте веб-страницы Graph ( datasetID граф) для этого набора данных и использовать его при генерации метаданных FGDC и ISO 19115. Кроме того, последние 7 днейactual\_rangeИспользуются как подмножество времени по умолчанию.
  • Еслиactual\_rangeИзвестно, что пользователи могут использоватьмин. () и макс () функцииВ запросах, которые часто очень полезны.
  • Для всех EDDTable ... наборы данных, еслиactual\_rangeизвестен (либо путем его указания, либоERDDAP™вычислять) ,ERDDAP™Вы сможете быстро отклонить любые запросы на данные за пределами этого диапазона. Например, если наименьшее значение времени набора данных соответствует 1985-01-17, то запрос на все данные с 1985-01-01 по 1985-01-16 будет немедленно отклонен сообщением об ошибке «Ваш запрос не дал соответствующих результатов». Это делаетactual\_rangeОчень важная часть метаданных, так как она может сохранитьERDDAP™Много усилий и экономит пользователю много времени. Это свидетельствует о том, чтоactual\_rangeзначения не должны быть более узкими, чем фактический диапазон данных; в противном случаеERDDAP™может ошибочно сказать «Нет соответствующих данных», когда на самом деле есть соответствующие данные.
  • Когда пользователь выбирает подмножество данных и запрашивает тип файла, который включает метаданные (Например,.nc) ,ERDDAP™изменятьactual\_rangeв файле ответа для отражения диапазона подмножества.
  • Смотрите такжеdata\_minиdata\_maxкоторые являются альтернативным способом определенияactual\_range. Но сейчас они обесценились, так какactual\_rangeОпределяется CF 1,7+.  
Цветовые атрибуты бара

Существует несколько ОПЦИАЛЬНЫХ переменных атрибутов, которые определяют предлагаемые атрибуты по умолчанию для цветовой полосы. (используется для преобразования значений данных в цвета на изображениях) Для этой переменной.

  • При наличии эта информация используется в качестве информации по умолчанию с помощью griddap иtabledapКаждый раз, когда вы запрашиваете изображение, которое использует цветную полосу.

  • Например, когда сетчатые данные широты и долготы отображаются в виде покрытия на карте, цветовая полоса определяет, как значения данных преобразуются в цвета.

  • Наличие этих значений позволяетERDDAP™Для создания изображений, которые используют согласованную цветовую полосу по различным запросам, даже если время или другие значения измерения различаются.

  • Эти имена были созданы для использования вERDDAP. Они не являются стандартом метаданных.

  • Атрибуты, связанные с цветовой гаммой:

    • colorBarMinimum Указывает минимальное значение на цветном шаре. Например,

    <att name="colorBarMinimum" type="double"\>-5</att>

    • Если данные упакованыscale\_factorи/илиadd\_offsetуказатьcolorBarMinimumкак неупакованная стоимость.
    • Значения данных ниже, чемcolorBarMinimumОни имеют тот же цвет, что иcolorBarMinimumценностей.
    • Атрибут должен бытьТип = "двойной"независимо от типа переменной.
    • Обычно это хорошее круглое число.
    • Лучшие практики: Мы рекомендуем значение чуть выше минимального значения данных.
    • Не существует значения по умолчанию.
  • colorBarMaximum Указывается максимальное значение на цветном баре. Например,

<att name="colorBarMaximum" type="double"\>5</att>

  • Если данные упакованыscale\_factorи/илиadd\_offsetуказатьcolorBarMinimumкак неупакованная стоимость.
  • Значения данных выше, чемcolorBarMaximumОни имеют тот же цвет, что иcolorBarMaximumценностей.
  • Атрибут должен бытьТип = "двойной"независимо от типа переменной.
  • Обычно это хорошее круглое число.
  • Лучшие практики: Мы рекомендуем значение чуть ниже максимального значения данных.
  • Не существует значения по умолчанию.
  • цвет Барпалетт Указывает палитру для цветного бара. Например,
        <att name="colorBarPalette">WhiteRedBlack</att>
  • ВсеERDDAP™Установки поддерживают эти стандартные палитры: BlackBlueWhite, BlackRedWhite, BlackWhite, BlueWhiteRed, LightRainbow, Ocean, OceanDepth, Rainbow, RedWhiteBlue, ReverseRainbow, TopographyDepth\[Добавлено в v1.74\], WhiteBlack, WhiteBlueBlack и WhiteRedBlack.
  • Если вы установилидополнительные палитрыВы можете обратиться к одному из них.
  • Если этот атрибут отсутствует, по умолчанию используется BlueWhiteRed, если \-1\*colorBarMinimum=colorBarMaximumВ противном случае по умолчанию будет радуга.
  • ColorBarScale Определяет шкалу для цветного бара. Например,
        <att name="colorBarScale">Log</att>
  • Действительные значения — линейные и логические.
  • Если значение лога,colorBarMinimumдолжно быть больше 0.
  • Если этот атрибут отсутствует, по умолчанию является линейным.
  • цвет Непрерывный Уточняется, имеет ли цвет Бар непрерывную палитру цветов, или же цвет Бар имеет несколько дискретных цветов. Например,
        <att name="colorBarContinuous">false</att>
  • Действительные значения — это строки истинные и ложные.
  • Если этого атрибута нет, по умолчанию это правда.
  • Цветовая гарнитура Указывает количество разделов по умолчанию на ColorBar. Например,
        <att name="colorBarNSections" type="int">6</att>
  • Действительные значения являются положительными целыми числами.
  • Если этого атрибута нет, по умолчанию \-1, который говоритERDDAP™Выберите количество секций в зависимости от диапазона цветового бара.
WMS

Основные требования к переменной, доступной черезERDDAP?WMSСерверы это:

  • Набор данных должен бытьEDDGrid... набор данных.
  • Переменная данных должна быть сетчатой переменной.
  • Переменная данных должна иметь переменные оси долготы и широты. (Другие переменные оси являются опциональными.)
  • Должно быть некоторое значение долготы между -180 и 180.
  • ThecolorBarMinimumиcolorBarMaximumатрибуты должны быть указаны. (Другие цветовые атрибуты являются опциональными.)
data\_minиdata\_max
  • data\_min и data\_max - Это устаревшие переменные атрибуты, определенные в эксперименте по циркуляции мирового океана. (ВУЗ) Описание метаданных. Например,

    <att name="data\_min" type="float"\>0.17</att>
    <att name="data\_max" type="float"\>23.58</att>

    • Мы рекомендуем использоватьactual\_rangeвместо того, чтобыdata\_minиdata\_maxПотому чтоactual\_rangeВ настоящее время определяется спецификацией CF.
    • Если они присутствуют, они должны иметь тот же тип данных, что и тип данных назначения переменной, и указать фактический тип данных. (не теоретические или допустимые) Минимальные и максимальные значения данных для этой переменной.
    • Если данные упакованыscale\_factorи/илиadd\_offset,data\_minиdata\_maxдолжны быть неупакованными значениями с использованием неупакованного типа данных.  
переменныйdrawLandMask
  • drawLandMask - Это опциональный атрибут переменной, используемыйERDDAP™ (Отсутствие стандартов метаданных) который определяет значение по умолчанию для опции «Draw Land Mask» в форме Make A Graph набора данных ( datasetID граф) и для параметра &.land в URL, запрашивающем карту данных. Например,
        <att name="drawLandMask">under</att>  

Видишь?drawLandMaskобзор.

кодирование
  • \_ Кодирование
    • Этот атрибут может использоваться только с струнными переменными.
    • Этот атрибут настоятельно рекомендуется.
    • Этот атрибут принадлежитNetCDFРуководство пользователя (Нюг) .
    • внутренне внутриERDDAP™Струны представляют собой последовательность из 2-байтовых символов, которые используютУникальный код UCS-2.
    • Многие типы файлов поддерживают только 1-байтовые символы в строках и, следовательно, нуждаются в этом атрибуте для идентификации ассоциированных символов. шарсет (Кодовая страница AKA) который определяет, как сопоставить 256 возможных значений с набором из 256 символов, взятых из набора символов UCS-2 и/или системы кодирования, например,UTF-8 (который требует от 1 до 4 байт на символ) .
    • Значения для \_Encoding нечувствительны к регистру.
    • В теории,ERDDAP™может поддерживать идентификаторы кодирования изСписок IANAНо на практике,ERDDAP™В настоящее время только поддержка
      • ISO-8859-1 (Обратите внимание, что у него есть тире, а не подчеркивания) , который имеет то преимущество, что он идентичен первым 256 символам Unicode, и
      • UTF-8.
    • При чтении исходных файлов значение по умолчанию составляет ISO-8859-1, за исключением файлов netcdf-4, где по умолчанию находится UTF-8.
    • Это постоянная проблема, потому что многие исходные файлы используют шарсеты или кодировки, которые отличаются от ISO-8859-1. Например, многие исходные файлы данных имеют некоторые метаданные, скопированные и вставленные из Microsoft Word в Windows, и, таким образом, имеют причудливые дефисы и апострофы из специфичного для Windows набора вместо дефисов и апострофов ASCII. Затем эти персонажи появляются как странные персонажи или «в»?ERDDAP.  
FileAccessBaseUrl
  • FileAccessBaseUrlFileAccessSuffix Очень редко используются атрибуты, которые не являются стандартными. Если колонка EDDTable имеет имена файлов веб-доступных файлов (например, изображение, видео или аудио файлы) Вы можете добавить
    <att name="fileAccessBaseUrl">*someBaseURL*</a>  

Указать базовый URL (Конец с /) Нужно было сделать имена файлов в полные URL. В необычных случаях, например, когда столбец имеет ссылки на файлы .png, но значения не имеют «.png», вы можете добавить:

    <att name="fileAccessSuffix">*someSuffix*</a>  

(например,<Att name="fileAccessSuffix">.png</a> указать суффикс, который будет добавлен, чтобы сделать имена файлов в полные URL-адреса. Тогда для.htmlTableответы,ERDDAP™Отобразит имя файла как ссылку на полный URL (основание Url плюс имя файла плюс суффикс) .

Если ты хочешьERDDAP™Чтобы обслуживать связанные файлы, сделайте отдельныйEDDTable FromFileNamesнабор данных для этих файлов (Это может быть частный набор данных.) .

FileAccessArchive Урл
  • FileAccessArchive Урл Это очень редко используемый атрибут, который не является стандартом. Если колонка EDDTable имеет имена файлов веб-доступных файлов (например, изображение, видео или аудио файлы) которые доступны через архив (например,.zipфайл) доступный через URL, использовать<Att name="fileAccessArchiveUrl"> петля </att>, чтобы указать URL для архива.

Если ты хочешьERDDAP™для обслуживания архивного файла, сделать отдельныйEDDTable FromFileNamesНабор данных для этого файла (Это может быть частный набор данных.) .

ioos\_category
  • ioos\_category - Это обязательный атрибут переменной, если<Переменные MustHaveIoosCategory> устанавливаются на истинное (по умолчанию) вНастройка.xmlВ противном случае он опционален. Например,<Att name=""ioos\_category"Салинность"</att> Категории являются отNOAAИнтегрированная система наблюдения за океаном (ИООС) .

    • (Как написать это) Мы не знаем формальных определений этих названий.
    • Оригинальное название: Zdenka Willis' .ppt "Integrated Ocean Observing System (ИООС) NOAA«Подход к созданию первоначальной операционной способности» иПроект US IOOS (страница 1-5) .
    • Вполне вероятно, что этот список будет пересмотрен в будущем. Если у вас есть запросы, пожалуйста, напишите Крису. Джон на noaa.gov.
    • ERDDAP™Поддерживает больший список категорий, чем IOOS, потому что Боб Саймонс добавил дополнительные имена. (в основном на основе названий научных областей, например, биологии, экологии, метеорологии, статистики, таксономии) Для других типов данных.
    • Текущие действительные значения вERDDAP™Это Bathymetry, Biology, Bottom Character, CO2, Colored Dissolved Organic Matter, Contaminants, Currents, Dissolved Nutrients, Dissolved O2, Ecology, Fish Abundance, Fish Species, Heat Flux, Hydrology, Ice Distribution, Identifier, Location, Meteorology, Ocean Color, Optical Properties, Other, Pathogens, Phytoplankton Species, Pressure, Productivity, Quality, Salinity, Sea Level, Statistics, Stream Flow, Surface Waves, Taxonomy, Temperature, Time, Total Suspended Matter, Unknown, Wind, Zooplankton Species, and Zooplankton Abundance.
    • Есть некоторое совпадение и двусмысленность между различными терминами - делайте все возможное.
    • Если добавитьioos\_categoryк списку<categoryAttributes> вERDDAP?Настройка.xmlфайл, пользователи могут легко найти наборы данных с аналогичными данными черезERDDAP«Поиск наборов данных по категориям» на главной странице. Попробуйте использоватьioos\_categoryПоиск наборов данных, представляющих интерес.
    • Там былоДискуссия оERDDAP™иioos\_categoryвERDDAP™Google Group.

У вас может возникнуть соблазн установить<переменных MustHaveIoosCategory>, чтобы этот атрибут не требовался. ("Пффт! Что это для меня?) Несколько причин оставить его верным (по умолчанию) и использоватьioos\_categoryэто:

  • Если setup.xml<переменные MustHaveIoosCategory Искренне верно,Генерировать наборы данныхXmlвсегда создает/предлагаетioos\_categoryатрибут для каждой переменной в каждом новом наборе данных. Так почему бы просто не оставить его?
  • ERDDAP™Позволяет пользователям искать наборы данных по категориям.ioos\_categoryЭто очень полезная категория поиска, потому что категории ioos (Например, температура) Они довольно широкие. Это делаетioos\_categoryгораздо лучше для этой цели, чем, например, гораздо более мелкозернистый CFstandard\_names (которые не так хороши для этой цели из-за всех синонимов и незначительных вариаций, например, температура моря Море_вода_температура) . (Использование)ioos\_categoryС этой целью контролируется<categoryAttributesВ файле setup.xml. Попробуйте использоватьioos\_categoryПоиск наборов данных, представляющих интерес.
  • Эти категории отNOAAИнтегрированная система наблюдения за океаном (ИООС) . Эти категории имеют основополагающее значение для описания миссии УСВН. Если вы находитесь вNOAAПоддерживаяioos\_categoryЭто хорошо Один.NOAAЧто делать. (Смотри сюда.ОдинNOAAвидеоИ вдохновитесь!) Если вы находитесь в каком-то другом американском или международном агентстве, или работаете с правительственными агентствами, или работаете с какой-то другой системой наблюдения за океаном, разве это не хорошая идея сотрудничать с офисом IOOS США?
  • Рано или поздно вам может понадобиться другойERDDAP™Ссылка на ваши наборы данных черезEDDGridИз ЭрддапаиEDDTable FromErddap. Если другойERDDAP™требуетioos\_categoryВаши данные должны иметьioos\_categoryДля того чтобыEDDGridFromErddap и EDDTableFromErddap для работы
  • С психологической точки зрения его гораздо проще включить.ioos\_categoryКогда вы создаете набор данных (Это просто еще одна вещь, котораяERDDAP™Требуется добавить набор данных вERDDAP) Чтобы добавить его после факта (Если вы решили использовать его в будущем) .  
long\_name
  • long\_name (COARDS,CFиACDDстандарты метаданных) является рекомендуемым переменным атрибутом вERDDAP. Например,
        <att name="long\\_name">Eastward Sea Water Velocity</att>
    • ERDDAP™используетlong\_nameдля маркировки топоров на графиках.
    • Лучшие практики: Капитализировать слова вlong\_nameКак если бы это был титул (капитализировать первое слово и все нестатейные слова) . Не включайте единицы вlong\_name. Долгое имя не должно быть длинным (как правило).<20 символов), но должна быть более описательной, чемdestinationName, который часто бывает очень лаконичным.
    • Еслиlong\_name"не определено в переменнойИсточник Атрибутыили<addAttributes>ERDDAP™Он будет генерироваться путем очисткиstandard\_name (если присутствует) илиdestinationName.  
missing\_value
  • missing\_value и \_Fill ценность (COARDSиCF) переменные атрибуты, описывающие число (Например, -9999) Используется для обозначения недостающего значения. Например,

<att name="missing\_value" type="double"\>-9999</att>

Для струнных переменных по умолчанию для обоих является "" (Пустая струна) . Для числовых переменных по умолчанию для обоих является NaN.

  • ERDDAP™поддерживает обаmissing\_valueи \_FillValue, так как некоторые источники данных придают им несколько иные значения.
  • При наличии они должны быть того же типа данных, что и переменная.
  • Если данные упакованыscale\_factorи/илиadd\_offset,missing\_valueи \_FillValue значения должны быть также упакованы. Аналогично, для столбца со значениями даты/времени строки, в котором используется локальныйtime\_zone,missing\_valueи \_FillValue значения должны использовать местный часовой пояс.
  • Если переменная использует эти специальные значения,missing\_valueи/или \_FillValue атрибуты являются обязательными.
  • Дляпеременные времени и метки времени (Является ли источник строкой или числом) ,missing\_values и \_FillValues отображаются как "" (Пустая струна) Когда время пишется как строка и как NaN, когда время пишется как двойное. Исходные значения дляmissing\_valueи \_FillValue не будет отображаться в метаданных переменной.
  • Для струнных переменных,ERDDAP™Всегда конвертирует любойmissing\_values или \_FillValue значения данных в " (Пустая струна) . Исходные значения дляmissing\_valueи \_FillValue не будет отображаться в метаданных переменной.
  • Для числовых переменных: Themissing\_valueи \_FillValue появится в метаданных переменной. Для некоторых форматов выходных данных,ERDDAP™Эти специальные номера останутся нетронутыми, например, вы увидите -9999. Для других форматов выходных данных (текстовые форматы, такие как .csv и.htmlTable) ,ERDDAP™Эти специальные номера будут заменены на NaN или "".
  • Некоторые типы данных имеют врожденные отсутствующие маркеры значений, которые не должны быть явно идентифицированы с помощьюmissing\_valueатрибуты \_FillValue: поплавковые и двойные переменные имеют NaN (Не числом) , значения струн используют пустую строку, а значения char имеют характер\uffff (символ #65535, значение Unicode для Not a Character) . Целые типы данных не имеют присущих им отсутствующих маркеров значений.
  • Если целочисленная переменная имеет недостающее значение (Например, пустая позиция в файле .csv.) ,ERDDAP™интерпретировать значение как определенноеmissing\_valueили \_FillValue для этой переменной. Если они не определены,ERDDAP™будет интерпретировать значение как отсутствующее значение по умолчанию для этого типа данных, которое всегда является максимальным значением, которое может удерживаться этим типом данных: 127 для байтовых переменных, 32767 для коротких, 2147483647 для int, 9223372036854775807 надолго, 255 для ubyte, 65535 для ushort, 4294967295 для uint и 18446744073709551615 для ulong.
ADD \_FillValue ATTRIBUTES?
  • ADD \_FillValue ATTRIBUTES?
    Каждый разERDDAP™загружает набор данных, проверяет, имеют ли переменные с целыми типами исходных данных определенныйmissing\_value\_FillValue атрибут. Если переменной нет, тоERDDAP™Отпечатывает сообщение в файл журнала (Начните с «Добавить атрибут \_FillValue»?) Рекомендовать, чтобыERDDAP™Администратор добавляет \_Fill Атрибут значения этой переменной вdatasets.xml. Для каждой переменной очень полезно иметь \_FillValue илиmissing\_valueпотому что недостающие значения всегда возможны, например, если данный файл в наборе данных не имеет заданной переменной,ERDDAP™Эта переменная должна иметь все недостающие значения для этой переменной. Если вы решите, что переменная не должна иметь атрибут \_FillValue, вы можете добавить: <Att names="\_FillValue">null<Вместо этого /att>, который будет подавлять сообщение для этогоdatasetIDПеременная комбинация в будущем.

Каждый разERDDAP™Запускается, он собирает все эти рекомендации в сообщение, которое записывается в файл журнала. (начиная с "ADD \_FillValue ATTRIBUTES?) По электронной почте кERDDAP™администратора, и записан в файл данных CSV\[BigParent Директория\]/logs/ каталог. При желании можно воспользоваться программой GenerateDatasetsXml. (и опция AddFillValueAttributes) применять все предложения в файле CSV кdatasets.xmlФайл. Для любого изdatasetID/изменные комбинации в этом файле, если вы решите, что нет необходимости добавлять атрибут, вы можете изменить атрибут на<Att names="\_FillValue">null</att>, чтобы подавить рекомендацию для этогоdatasetIDПеременная комбинация в будущем.

Это важно! Как часто говорил Боб, это было бы плохо. (и смущает) Если некоторые из свидетельств глобального потепления были вызваны неопознанными отсутствующими значениями в данных (Например, значения температуры 99 или 127 градусов C, которые должны были быть помечены как недостающие значения и, таким образом, перекосили среднюю и/или среднюю статистику выше;) .

  • Полная стоимость иmissing\_valueзначения для данной переменной в различных исходных файлах должны быть последовательными; в противном случаеERDDAP™Мы принимаем файлы с одним набором значений и отклоняем все другие файлы как «плохие файлы». Чтобы решить проблему,
    • Если файлы сетчатые.ncФайлы, которые вы можете использоватьEDDGridИз NcFilesUnpacked.
    • Если файлы являются табличными файлами данных, вы можете использовать EDDTable From...Files "стандартизировать Что?рассказыватьERDDAPСтандартизация исходных файлов по мере их чтенияERDDAP.
    • Для более сложных задач вы можете использоватьNcMLилиNCOЧтобы решить проблему.  
scale\_factor
  • scale\_factor (Дефолт = 1) и add\_offset (Дефолт = 0) (COARDSиCF) Опциональные переменные атрибуты, описывающие данные, которые упакованы в более простой тип данных посредством простой трансформации.
    • При наличии их тип данных отличается от типа исходных данных и описывает тип данных значений назначения. Например, источник данных мог хранить значения поплавковых данных с одной десятичной цифрой, упакованной в виде коротких интов. (Int16) используяscale\_factor= 0,1 иadd\_offset= 0, например,

    <att name="scale\_factor" type="float"\>0.1</att>
    <att name="add\_offset" type="float"\>0</att>

В этом примере,ERDDAP™распаковывать данные и представлять их пользователю в виде плавающих значений данных.

  • Если присутствует,ERDDAP™будет извлекать значения из этих атрибутов, удалять атрибуты и автоматически распаковывать данные для пользователя: пункт назначения Значение = источник Значение *scale\_factor+add\_offset
    Или, говоря иначе: неупакованная ценность = упакованная Значение *scale\_factor+add\_offset
  • Thescale\_factorиadd\_offsetзначения для данной переменной в различных исходных файлах должны быть последовательными; в противном случаеERDDAP™Мы принимаем файлы с одним набором значений и отклоняем все другие файлы как «плохие файлы». Чтобы решить проблему,
    • Если файлы сетчатые.ncФайлы, которые вы можете использоватьEDDGridИз NcFilesUnpacked.
    • Если файлы являются табличными файлами данных, вы можете использовать EDDTable From...Files "стандартизировать Что?рассказыватьERDDAPСтандартизация исходных файлов по мере их чтенияERDDAP.
    • Для более сложных задач вы можете использоватьNcMLилиNCOЧтобы решить проблему.  
standard\_name
  • standard\_name (из которогоCFстандарт метаданных) является рекомендуемым переменным атрибутом вERDDAP. CF ведет список разрешенныхСтандартные названия CF. Например,
        <att name="standard\\_name">eastward\\_sea\\_water\\_velocity</att>
    • Если добавитьstandard\_nameатрибуты переменных и добавитьstandard\_nameк списку<categoryAttributes> вERDDAP?Настройка.xmlфайл, пользователи могут легко найти наборы данных с аналогичными данными черезERDDAP«Поиск наборов данных по категориям» на главной странице.
    • Если вы указали CFstandard\_nameДля переменной атрибут единицы для переменной не должен быть идентичным каноническим единицам, указанным для стандартного имени в таблице стандартного имени CF, но единицы должны быть конвертируемыми в канонические единицы. Например, все связанные с температурой CFstandard\_nameУ тебя есть "К" (Кельвин) Канонические единицы. Переменная, связанная с температуройstandard\_nameДолжны иметь единицы K, градус \C, градус \F или некоторый вариант UDUnits этих имен, поскольку все они являются взаимопревращаемыми.
    • Лучшие практики: Часть властиконтролируемые словариЭто происходит от использования только терминов в списке. Поэтому мы рекомендуем придерживаться терминов, определенных в контролируемом словаре, и мы рекомендуем не составлять термин, если в списке нет подходящего. Если вам нужны дополнительные термины, посмотрите, будет ли комитет по стандартам добавлять их в контролируемый словарь.
    • standard\_nameЗначения являются единственными значениями атрибута CF, которые чувствительны к регистру. Все они всегда ниже. Начинать сERDDAP™v1.82, GenerateDatasets преобразует заглавные буквы в заглавные буквы. И когда набор данных загружается вERDDAPВерхние буквы молча меняются на нижние буквы.  
time\_precision
  • time\_precisionОпциональный атрибут, используемыйERDDAP™ (Отсутствие стандартов метаданных) дляпеременные времени и метки времени, которые могут быть в сетчатых наборах данных или табличных наборах данных, и вaxisVariables илиdataVariableС. Например,
        <att name="time\\_precision">1970-01-01</att>  
    time\_precisionОпределяет точность, которую следует использовать каждый разERDDAP™форматирует временные значения из этой переменной в виде строк на веб-страницах, включая.htmlTableОтветы. В форматах файлов, гдеERDDAP™Форматы time as strings (Например, .csv и.json) ,ERDDAP™использует толькоtime\_precision- определенный формат, если он включает дробные секунды; в противном случаеERDDAP™использует 1970-01-01T00:00:00 Формат Z.
  • Действительные значения: 1970-01, 1970-01-01, 1970-01-01T00Z, 1970-01-01T00:00Z, 1970-01-01T00:00Z (по умолчанию) , 1970-01-01T00:00:00.0Z, 1970-01-01T00:00.00Z, 1970-01-01T00:00:00.000Z.\[1970 год не является вариантом, потому что это одно число.ERDDAP™Не могу понять, является ли это отформатированной строкой времени. (год) или если это некоторое количество секунд с 197001-01T00:00:00Z.\]
  • Еслиtime\_precisionне указано или значение не совпадает, будет использоваться значение по умолчанию.
  • Здесь, как и в других частяхERDDAP™Любые поля отформатированного времени, которые не отображаются, имеют минимальное значение. Например, 1985-07, 1985-07-01, 1985-07-01T00Z, 1985-07-01T00:00Z и 1985-07-01T00:00:00. Z считаются эквивалентными, хотя подразумеваются различные уровни точности. Это соответствуетISO 8601:2004"extended"Спецификация формата времени.
  • Предупреждение: Вы должны использовать только ограниченныйtime\_precisionесли все Значения данных для переменной имеют только минимальное значение для всех скрытых полей.
  • Например, вы можете использоватьtime\_precision1970-01-01, если все значения данных имеют час = 0, минута = 0 и секунда = 0 (Например, 2005-03-04T00:00:00Z и 2005-03-05T00:00:00Z) .
  • Например, не используйтеtime\_precision1970-01-01, если имеются значения, не равные 0 часам, минутам или секундам, (Например, 2005-03-05T12:00:00Z) Потому что значение не по умолчанию не будет отображаться. В противном случае, если пользователь запрашивает все данные со временем = 2005-03-05, запрос неожиданно потерпит неудачу.  
time\_zone
  • time\_zone
    • time\_zoneОпциональный атрибут, используемыйERDDAP™ (Отсутствие стандартов метаданных) дляпеременные времени и метки времени, которые могут быть в сетчатых наборах данных или табличных наборах данных.
    • По умолчанию "Zulu" (Это современная версия часового пояса GMT.) .
    • Справочная информация: "смещение времени" (Тихоокеанское стандартное время, -08:00, GMT-8) фиксированные, специфические, смещения относительноZulu (ГМТ) . Напротив, «временные зоны» — это гораздо более сложные вещи, на которые влияет экономия дневного света. (Например, «США/Тихоокеанский регион») которые имели разные правила в разных местах в разное время. В часовых поясах всегда есть имена, так как они не могут быть суммированы простым значением смещения. (см. колонку «Имена баз данных TZ» в таблице https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones ) .ERDDAP?time\_zoneАтрибут помогает обрабатывать данные о местном времени из определенного часового пояса. (например, 1987-03-25T17:32:05 Тихий океан Время) . Если у вас есть строковые или числовые данные времени (фиксированный) Смещение времени, вы должны просто настроить данные наZulu (Что это такоеERDDAP™хотеть) путем указания другого базового времени в атрибуте единицы (Например, "часы с 197001-01T08:00:00Z", обратите внимание на T08, чтобы указать время смещения) Всегда проверяйте результаты, чтобы убедиться, что вы получите желаемые результаты.
    • Для переменных временной метки с исходными данными из строк этот атрибут позволяет указать часовой пояс, который ведетERDDAP™Преобразование времени источника локального времени (Некоторые в стандартное время, некоторые в дневное время) вZuluвремя (Что всегда в стандартное время) . Список действительных названий часовых поясов, вероятно, идентичен списку в столбце TZ. https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones . Общие часовые пояса США: США / Гавайи, США / Аляска, США / Тихий океан, США / Гора, США / Аризона, США / Центральная, США / Восточная.
    • Для переменных временной метки с числовыми исходными данными можно указать "time\_zone«Атрибут, но ценность должна быть»Zulu"или "UTC". Если вам нужна поддержка для других часовых поясов, пожалуйста, напишите Крису. Джон на noaa.gov.  
единицы
  • единицы (COARDS,CFиACDDстандарт метаданных) определяет единицы значений данных. Например,
        <att name="units">degree\\_C</att>
    • «Единицы» требуются либо в качестве исходного атрибута, либо в качестве дополнительного атрибута для"time"переменных и настоятельно рекомендуется для других переменных, когда это необходимо; (который почти всегда) .

    • В целом мы рекомендуемUDUnitsСовместимые единицы, которые требуются дляCOARDSиCFстандартов.

    • Другим стандартом являетсяUCUMЕдиный кодекс единиц измерения.OGCтаких услуг, какSOS,WCSиWMSтребует UCUM и часто называет UCUM UOM. (Единицы измерения) .

    • Мы рекомендуем вам использовать один стандарт для всех наборов данных.ERDDAP. Ты должен сказатьERDDAP™какой стандарт вы используете<Единицы\_стандарт>, в вашемНастройка.xmlФайл.

    • Единицы для данной переменной в различных исходных файлах должны быть последовательными. Если у вас есть набор файлов данных, где одно подмножество файлов использует различные значения блоков, чем одно или несколько других подмножеств файлов (например, "дни с 1985-01-01" против "дней с 2000-01-01", "degree\_Celsius" против "deg\_C", или "узелки" против "м/с") вам нужно найти способ стандартизировать значения единиц, иначе,ERDDAP™Загрузит только одно подмножество файлов. Подумайте об этом: если один файл имеет WindSpeed unit=knots, а другой имеет WindSpeed unit=m/s, то значения из двух файлов не должны быть включены в один и тот же агрегированный набор данных.

      • Если файлы сетчатые.ncФайлы во многих ситуациях, которые вы можете использоватьEDDGridИз NcFilesUnpacked.
      • Если файлы являются табличными файлами данных, во многих ситуациях вы можете использовать EDDTable From...Files. "стандартизировать Что?рассказыватьERDDAPСтандартизация исходных файлов по мере их чтенияERDDAP.
      • Для более сложных задач вы можете использоватьNcMLилиNCOЧтобы решить проблему.
    • Стандартный раздел 8.1 CF гласит, что если данные переменной упакованы черезscale\_factorи/илиadd\_offsetЕдиницы переменной должны быть репрезентативными для неупакованных данных.

    • Для переменных времени и времени,либо переменнаяИсточник Атрибутыили<addAttributes> (который имеет приоритет) Должно бытьединицыкоторый либо

      • Для переменных оси времени или переменных данных времени с числовыми данными:UDUnitsСовместимая строка (с форматом единицы с тех пор время ) Как интерпретировать значения времени источника (Например, секунды с 197001-01T00:00:00Z) .

      единицы может быть любой из:

          ms, msec, msecs, millis, millisec, millisecs, millisecond, milliseconds,  
      s, sec, secs, second, seconds, m, min, mins, minute, minutes, h, hr, hrs, hour, hours,
      d, day, days, week, weeks, mon, mons, month, months, yr, yrs, year, or years.

Технически,ERDDAP™Не следует заUDUNITSСтандарт при преобразовании"years since"и"months since"Значения времени для"seconds since". TheUDUNITSСтандарт определяет год как фиксированное единственное значение: 3.15569259747e7 секунд. ИUDUNITSМесяц определяется как год/12. К сожалению, большинство / все наборы данных, которые мы видели, которые используют"years since"или"months since"Значения должны быть календарными годами или календарными месяцами. Например, 3"months since 1970-01-01"Обычно подразумевается 197004-01. Итак,ERDDAP™толковать"years since"и"months since"как календарные годы и месяцы и не строго соблюдаетUDUNITSстандарт.

The время Должен быть ISO 8601:2004 (Е) Форматированная строка времени даты (yyyy-MM-dd'T'HH:mm:ssZ, например, 1970-01-01T00:00:00Z) или некоторые вариации этого (Например, с отсутствующими частями в конце) .ERDDAP™Старается работать с широким спектром вариаций этого идеального формата, например, поддерживается «1970-1-1 0:0:0». Если информация о часовом поясе отсутствует, предполагается, чтоZuluчасовой пояс (Как GMT) . Даже если указан другой временной зачет,ERDDAP™Никогда не используйте летнее время. Если BaseTime использует другой формат, вы должны использовать<addAttributes> для определения новой строки единиц, в которой используется вариация ISO 8601:2004 (Е) формат (например, изменить дни с 1 января 1985 года на дни с 1985-01-01).

Вы можете проверитьERDDAPСпособность справляться с конкретным единицы с тех пор время сERDDAP?Преобразователь времени. Надеюсь, вы можете подключить номер (Первое значение из источника данных?) и строку единиц, нажмите на Конверт, иERDDAP™Превратить его в ISO 8601:2004 (Е) Форматированная строка времени даты. Преобразователь возвращает сообщение об ошибке, если строка блоков не распознается.

струнные единицы времени

Для широко используемых форматов времени, которые являются вариациями ISO 8601:2004 (Е) стандартный формат (Например, 2018-01-02T00:00:00Z) Вы можете указать вариацииyyyy-MM-dd'T'HH:mm:ssZ, например, использоватьyyyy-MM-ddЕсли время строки имеет только дату. Для любого формата, который начинается с Yyyy-M,ERDDAPИспользует специальный парсер, который очень прощает незначительные вариации в формате. Парсер может обрабатывать часовые пояса в форматах «Z», «UTC», «GMT», ±XX:XX, ±XXXX и ±XXX. Если части даты не указаны (Например, минуты и секунды) ,ERDDAP™принимает наименьшее значение для этого поля (Например, если секунды не указаны, предполагается, что секунды = 0) .

Для всех других форматов времени строки необходимо точно указать строку формата времени, совместимую с DateTimeFormatter. Как будтоyyyy-MM-ddT'HH:mm:ssZ, эти строки формата построены из символов, которые идентифицируют определенный тип информации из временной строки, например, m означает минуту часа. Если вы повторяете символ формата несколько раз, он дополнительно уточняет значение, например, m означает, что значение может быть определено любым количеством цифр, мм означает, что значение должно быть указано 2 цифрами. TheJavaДокументация для DateTimeFormatter является грубым обзором и не делает эти детали ясными. Итак, вот список вариаций символов формата и их значение внутри.ERDDAP™ (который иногда немного отличается отJavaДатаTimeFormatter) :

ПерсонажиПримерызначение
У, у, у\-4712, 0, 1, 10, 100, 2018Годовое число, любое количество цифр.ERDDAP™лечит y (годичный) и Y (неделя на основе года, потому что это часто ошибочно используется вместо) Как и ты,Астрономическое число года. Астрономические годы являются положительными или отрицательными целыми числами, которые не используют BCE. (BC) или CE (AD) Обозначения эпохи: 2018=2018CE, ..., 2=2CE, 1=1CE, 0=1BCE, -1=2BCE, -2=3BCE, ...
Уууу, уй-й, YYYYY\-4712 0000 0001, 0010, 0100, 20184-значный астрономический год (Игнорирование любого предшествующего "-")
Мм1, 01, 12число месяца, любое число цифр (1=январь)
ММ01, 122 цифры (нулевой) номер месяца
МММЯн, Джан, Ян3 буквы английское имя месяца, случай нечувствительный
ММММЯн, Ян, Ян, Январь, Январь, Январь3 буквы или полное английское имя месяца, случай нечувствительный
d1, 01, 31число дня месяца, любое число цифр
dd01, 312 цифры (нулевой) День месяца. Первой «цифрой» может быть пространство.
D1, 001, 366день года, любое количество цифр, 001 = 1 января
ДДД001, 366день года, 3 цифры, 001 = 1 января
ЭЭЭТу, Ту, Ту3 буквы в день недели, значение игнорируется при анализе
EEEEТу, Ту, Ту, четверг, четверг, четверг3 буквы или полный английский день недели, случай нечувствительный, значение игнорируется при анализе
H0, 00, 23H час дня (0-23) , любое количество цифр
HH00, 23HH час дня (00-23) 2 цифры. Первой «цифрой» может быть пространство.
аam, AM, pm, PMАМ или ПМ, чувствительные к случаям
h12, 1, 01, 11час ночи (12, 1, 2, ... 11) , любое количество цифр
hh12, 01, 11час ночи (12, 1, 2, ... 11) 2 цифры. Первой «цифрой» может быть пространство.
К.0, 1, 11час ночи (0, 1, ...11) , любое количество цифр
КК00,01,11час ночи, 2 цифры
м0, 00, 59минута в час, любое количество цифр
мм00, 59минута в час, 2 цифры
s0, 00, 59секунда минуты, любое количество цифр
ss00, 59секунда минуты, 2 цифры
S0, 000, 9, 999доля секунды, как если бы после десятичной точки, любое число цифр
SS00, 99сотые доли секунды, 2 цифры
ССС000, 999тысячи секунд, 3 цифры
А.0 0000, 86399999Миллисекунда дня, любое количество цифр
AAAAAAA00000000, 86399999Миллисекунда дня, 8 цифр
N0 000000000000000000, 86399999999999Наносекунда дня, любое количество цифр. вERDDAP™Это усечено до nMillis.
NNNNNNNNNNNNNN00000000000000, 86399999999999Наносекунда дня, 14 цифр. вERDDAP™Это усечено до nMillis.
n0 00000000000, 59999999999Наносекунда секунды, любое количество цифр. вERDDAP™Это усечено до nMillis.
nnnnnnnnnnnn00000000000, 59999999999Наносекунда секунды, 11 цифр. вERDDAP™Это усечено до nMillis.
XXX, ZZZZ, -08:00, +01:00часовой пояс с форматом «Z» или ± (2-значный час смещения) : (2-значная минута смещения) . Это лечит пространство как + (нестандартный) . Поддержка ZZZ не является стандартной, но имеет дело с распространенной ошибкой пользователя.
XX, ZZZ -0800, +0100часовой пояс с форматом «Z» или ± (2-значный час смещения) : (2-значная минута смещения) . Это лечит пространство как + (нестандартный) . Поддержка ZZ не является стандартной, но имеет дело с распространенной ошибкой пользователя.
X, ZZ, -08, +01часовой пояс с форматом «Z» или ± (2-значный час смещения) : (2-значная минута смещения) . Это лечит пространство как + (нестандартный) . Поддержка Z не является стандартной, но имеет дело с распространенной ошибкой пользователя.
xxx\-08:00, +01:00часовой пояс с форматом ± (2-значный час смещения) : (2-значная минута смещения) . Это лечит пространство как + (нестандартный) .
xx\-0800 +0100часовой пояс с форматом ± (2-значный час смещения) (2-значная минута смещения) . Это лечит пространство как + (нестандартный) .
х\-08, +01часовой пояс с форматом ± (2-значный час смещения) . Это лечит пространство как + (нестандартный) .
""T", "Z", "GMT"Начало и конец серии буквальных символов
" " (Две единичные цитаты)" "Две отдельные цитаты обозначают буквальную единственную цитату
\[\]\[ \]начало ("\[") и конец ("\]") Факультативный раздел. Эта запись поддерживается только для буквальных символов и в конце строки формата.
#, { }#, { }Зарезервировано для будущего использования
G,L,Q,e,c,V,z,O,pЭти символы форматирования поддерживаютсяJavaDateTimeFormatter, но в настоящее время не поддерживаетсяERDDAP. Если вам нужна поддержка, напишите Крису. Джон на noaa.gov.

Примечания:

  • Во время даты с пунктуацией числовые значения могут иметь переменное число цифр. (Например, в американском формате даты слэша «1/2/1985» месяц и дата могут быть 1 или 2 цифры.) Таким образом, формат должен использовать токены с 1 буквой, например, M/d/yyyy, которые принимают любое количество цифр за месяц и дату.
  • Если число цифр для элемента является постоянным, например, 01/02/1985, то укажите количество цифр в формате, например, MM/dd/yyyy для 2-значного месяца, 2-значной даты и 4-значного года.
  • С этими форматами сложно работать. Данный формат может работать для большинства, но не для всех строк времени для данной переменной. Всегда проверяйте, что указанный вами формат работает так, как ожидалось.ERDDAPДля всех струн времени переменной.
  • Когда это возможно, GenerateDatasetXml предложит строки формата времени.
  • Если вам нужна помощь в создании строки формата, пожалуйста, напишите Крису. Джон на noaa.gov.

Основная переменная данных времени (для табличных наборов данных) и основной переменной оси времени (для сетчатых наборов данных) признаются в качествеdestinationNameВремя. Метаданные их единиц должны быть строкой UDUnits-совместимых единиц для числовых значений времени, например, «дни с 197001-01». (для табличных или сетчатых наборов данных) илиЕдиницы, подходящие для струнного времениНапример, "M/d/yyyy" (для табличных наборов данных) .

Разные единицы времени в разных сетках.ncФайлы - Если у вас есть коллекция.ncфайлы, где для переменной времени одно подмножество файлов использует разные единицы времени, чем одно или несколько других подмножеств файлов, вы можете использоватьEDDGridИз NcFilesUnpacked. Преобразует временные значения в"seconds since 1970-01-01T00:00:00Z"на более низком уровне, тем самым скрывая различия, чтобы можно было сделать один набор данных из набора разнородных файлов.

Переменные TimeStamp

Переменные TimeStamp- Любая другая переменная (axisVariableилиdataVariableВ одномEDDGridили EDDTable Dataset) может быть временной переменной. Переменные метки времени — это переменные, которые имеют связанные со временем единицы и данные времени, но имеют<destinationNameКроме времени. Переменные TimeStamp ведут себя как основная переменная времени в том, что они преобразуют формат времени источника в"seconds since 1970-01-01T00:00:00Z"и/или ISO 8601:2004 (Е) формат).ERDDAP™Признает время Штамповые переменные в зависимости от их времени".единицы"метаданные, которые должны соответствовать этому регулярному выражению"\[a-zA-Z\]+ + С тех пор +\[0-9\].+" (для числовой даты Времена, например,"seconds since 1970-01-01T00:00:00Z") Или быть датой Строка формата времени, содержащая «uuuu», «yyyy» или «YYYY» (Например, "yyyy-MM-ddT'HH:mm:ssZ) . Пожалуйста, продолжайте использоватьdestinationName "time"На главную дату Переменная времени.

Всегда проверяйте свою работу, чтобы убедиться, что данные о времени, которые отображаются в вашей работе.ERDDAP™Это правильные временные данные. Работа с данными времени всегда сложная и подвержена ошибкам.

Видишь?Больше информации о переменных времени. ERDDAP™имеет полезность дляПреобразовать числовой Время в/из струнного времени. Видишь?КакERDDAP™Сделки со временем.  

valid\_range

или

<att name="valid\_min" type="float"\>0.0</att>
<att name="valid\_max" type="float"\>40.0</att>

  • Если они присутствуют, они должны иметь тот же тип данных, что и переменная, и указать действительные минимальные и максимальные значения данных для этой переменной. Пользователи должны считать значения за пределами этого диапазона недействительными.
  • ERDDAP™не применять тотvalid\_range. Сказал другой способ:ERDDAP™не преобразовывать значения данных за пределыvalid\_rangeЗаполнить \_Fill ценность илиmissing\_value.ERDDAP™Просто передайте эти метаданные и оставьте приложение на ваше усмотрение. Почему? Вот для чего нужны эти метаданные. Если бы поставщик данных хотел, поставщик данных мог бы преобразовать значения данных за пределамиvalid\_rangeБыть \_FillValuesERDDAP™Во-вторых, не угадайте поставщика данных. Такой подход более безопасен: если впоследствии будет показано, чтоvalid\_rangeбыла слишком узкой или неправильной;ERDDAP™Мы не будем уничтожать данные.
  • Если данные упакованыscale\_factorи/илиadd\_offset,valid\_range,valid\_minиvalid\_maxдолжен быть тип и значения упакованных данных. С тех порERDDAP™применяетсяscale\_factorиadd\_offsetКогда он загружает набор данных,ERDDAP™распаковать будетvalid\_range,valid\_minиvalid\_maxзначения так, чтобы метаданные назначения (показаны пользователям) Укажет неупакованный тип и диапазон данных. Или, если распаковатьvalid\_rangeПрисутствует атрибут, он будет переименованvalid\_rangeкогдаERDDAP™загружает набор данных.
<удалить MVRows>
  • [править] ** <Скачать MVRows ** ] (#удаление) Это опциональный тег внутри тега вdatasets.xmlДля EDDTable FromFiles (включая все подклассы) Наборы данных используются только для EDDTableFromMultidimNcFiles. Он может иметь значение истинного или ложного. Например, истинный Это удаляет любой блок строк в конце группы, где все значенияmissing\_value, \_FillValue, or the CoHort ... Array native missing value (char=#32 для CharArrays) . Это относится к типу файлов CF DSG Multidimensional Array и аналогичным файлам. Если это правда, это делает правильный тест и поэтому всегда загружает все максимальные тусклые переменные, поэтому это может занять дополнительное время. Значение по умолчанию является ложным. Рекомендация - Если это возможно для вашего набора данных, мы рекомендуем установить удаление MVRows на ложный. Настройка removeMVRows на истинный может значительно замедлить запросы, хотя может потребоваться для некоторых наборов данных.