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

Работая с 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™ Вы должны делать особые вещи с долгота, широта, высота (или глубина) и временные переменные .

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

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

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

Переменные в datasets.xml

В качестве ERDDAP™ версия 2.29.0, datasets.xml Сейчас (необязательно) обработанный a Стрингзаместитель . Это имеет много применений, включая установление частных ценностей. (как пароли) Использование переменных среды. Это можно отключить, установив функцию «EnvParsing» в setup.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.

Толчком к этому послужил NOAA 2014 год Публичный доступ к результатам исследований (ПАРР) директива которая требует, чтобы все 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 in ERDDAP™ , и вы получаете сообщение об ошибке «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\_name s) . Это может быть полезно, если вы используете выход из генерации. Наборы данных 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 . У вас будет возможность сохранить оригинал. datasetID s (которые могут дублировать некоторые datasetID уже в вашей ERDDAP ) или создавать новые имена, которые будут уникальными; (Но, как правило, не так читабельны) .  

EDDTable FromErddap

EDDType генерирует все datasets.xml Куски, которые нужно сделать EDDTable FromErddap наборы данных из всех наборов данных EDDTable в удаленном ERDDAP . У вас будет возможность сохранить оригинал. datasetID s (которые могут дублировать некоторые 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™ Получает данные с локального числового адреса.
  • Если у вас есть проблемы, которые вы не можете решить, Проверьте советы по устранению неполадок .
  • Низкоуровневый код для этого теперь использует Unidata netcdf-java каталог crawler code (Толстяки. Каталожные классы) Чтобы он мог обрабатывать все каталоги THREDDS (которые могут быть удивительно сложными) Благодаря Unidata для этого кода.  
EDDGrid LonPM180FromErddapКаталог

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

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

Данный тип генерирует datasets.xml делать EDDGrid Lon0360 наборы данных от всех 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.java XInclude для повторного использования переменных определений.  

Заметки

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

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

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

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

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

  • Реляционные базы данных и Кассандра - ERDDAP™ Он может обслуживать данные непосредственно из реляционных баз данных и Cassandra. Но из-за проблем с безопасностью, балансировкой нагрузки и производительностью вы можете настроить другую базу данных с теми же данными или сохранить эти данные. NetCDF v3 .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™ Они могут считывать данные из одних источников гораздо быстрее, чем из других. Например, чтение NetCDF v3 .nc Считывание файлов ASCII происходит медленнее. Если есть большой (1000) или огромный (10 000) количество исходных файлов данных, ERDDAP™ Они будут реагировать на запросы данных медленно. Обычно разница не заметна для людей. Однако, если вы думаете ERDDAP™ медленный для данного набора данных, вы можете решить проблему, написав данные для более эффективной настройки (обычно: несколько, хорошо структурированных, NetCDF v3 .nc файлы) . Для табличных данных см. Этот совет .  

подсказка

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

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

С тех пор datasets.xml XML-файл, который вы должны и кодировать "&",<", и ">" в любом содержании как "&",<", и ">". Неправильно:<Название Время и приливы</название> Правильно:<Название 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, потому что имена переменных одинаковы во всех соответствующих наборах данных.
  • Для переменной «долгота» и переменной «широта»:
    • Используйте destinationName s «долгота» и «широта», только если единицы Это градусы востока и севера соответственно. Если ваши данные не соответствуют этим требованиям, используйте разные имена переменных. (Например, x, y, lonRadians, latRadians) .
    • Если у вас есть данные о долготе и широте, выраженные в разных единицах и, следовательно, с разными значениями. destinationName s, например, lonRadians и latRadians, Make a Graph ( * datasetID * граф) Сделаем графики (Например, временные ряды) Вместо карт.
  • Для переменной «высота», «предостережение» или «глубина»:
    • Используйте destinationName «Высота» для определения расстояния данных над уровнем моря (Положительные = «высшие» значения) . Вы можете использовать «высоту» для расстояний ниже уровня моря, если значения отрицательны ниже уровня моря (или если вы используете, например, [править]<Att name="" scale\_factor "тип="int">- 1 1</att> (#scale-фактор) Преобразование значений глубины в значения высоты.
    • Используйте destinationName "глубина" для определения расстояния данных ниже уровня моря (Положительные = "низовые" значения) .
    • Альтернативно, для высот, определенных уровнями давления воздуха (такие как изобар ) Вы должны установить destinationName «Давление». Это поддерживает блоки в «hPa», «Pa» и «mbar». (Положительные = "низовые" значения) .
    • Набор данных может иметь только одну переменную «высота», «давление» или «глубина».
    • Для этих переменных «высота» и «глубина» единицы должны быть «м», «метр» или «метры». Если единицы отличаются (Например, фетомы) Вы можете использовать [править]<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 Подход достаточно, чтобы попытаться работать с ним, вы можете обнаружить, что он имеет свои преимущества. (Поддержка нескольких типов файлов, которые могут содержать ответы данных) . The ERDDAP™ слайд-шоу (В частности, Структуры данных сливаются ) Много говорят по этим вопросам.
  • И даже если этот подход кажется вам странным, большинство 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 символов, но, вероятно, в разных местах существуют различные проблемы даже с несколько более короткими струнами. Использовать ERDDAP String 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 other ERDDAP™ Тип данных. Использовать 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».) .
    • Недостающие значения для всех типов числовых данных выглядят как нуль.  

.nc 3 Файлы

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

.nc 4 Файлы

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

Файлы NCCSV

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

DAP

  • (OPeN)DAP (.das, .dds, .asc ASCII файлы и .dods двоичные файлы) -
    • (OPeN)DAPПравильно обрабатывает короткие, короткие, int, uint, плавающие и двойные значения.
    • (OPeN)DAPимеет «байтовый» тип данных, который он определяет как неподписанный, в то время как исторически THREDDS ERDDAP™ Обработали «байт» как подписанный в их(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 (организация) Отказывается от незначительного обновления до DAP 2.0 для решения этой и связанных с ней проблем, ссылаясь на DAP 4.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> система, описанная ниже. ERDDAP Netcdf-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 v2.29 Вы можете использовать s3:// Формат URI вместо ведра URL. Это формат, используемый AWS s3 cli . s3:// название ковша / ключ

The регион Для S3 URI можно указать один из трех способов:

  • The регион Пользователь Tomcat ~/.aws/config профиль
  • The AWS_DEFAULT_REGION переменная среда
  • The aws.region переменная JVM (Setenv.sh для Tomcat)

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

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

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

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

AWS /файлы

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

ERDDAP Также поддерживает анонимные учетные данные для публичных ведер. Чтобы использовать анонимные учетные данные, добавьте <useAwsAnonymous> истинный </useAwsAnonymous> Настройка.xml.

Конечные точки S3

Для совместимого с S3 хранилища объектов, не размещенного Amazon, необходимо настроить конечная точка_url а также указать ваше ведро/ключ, используя s3:// Ури.

The конечная точка_url могут быть определены одним из трех способов:

  • The конечная точка_url Пользователь Tomcat ~/.aws/config профиль
  • The AWS_ENDPOINT_URL переменная среда
  • The aws.endpoint Урл переменная JVM (Setenv.sh для Tomcat)

Полный список переменных конфигурации S3, Посмотреть документацию Amazon .

Самоподписанные сертификаты Для ведер S3 у вас часто есть самоподписанные SSL-сертификаты. Для ERDDAP Чтобы читать из этих ведер, вам нужно добавить свою цепочку сертификатов в трастовый магазин JVM. $JAVA_HOME/jre/lib/security/cacerts . Кроме того, ERDDAP использует AWS Common Runtime Доступ к ветру асинхронно. Это повышает производительность, но также требует, чтобы ваши самоподписанные сертификаты были добавлены в ваш трастовый магазин. Если вы хотите избежать этого, вы можете отключить AWS CRT. <useAwsCrt> ложный </useAwsCrt> Настройка.xml.

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 SDK Java (используемый 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 могут быть использованы для внесения изменений в (или новые версии) Файлы. Оба NCO NcML очень гибкий и позволяет вносить практически любые изменения в файлы. Для обоих это может быть сложным, чтобы выяснить, как именно сделать то, что вы хотите сделать - проверить веб для подобных примеров. Оба являются полезными инструментами для подготовки чистых КДФ и 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 могут быть использованы для внесения изменений в (или новые версии) Файлы. Оба NCO NcML очень гибкий и позволяет вносить практически любые изменения в файлы. Для обоих это может быть сложным, чтобы выяснить, как именно сделать то, что вы хотите сделать - проверить веб для подобных примеров. Оба являются полезными инструментами для подготовки чистых КДФ и HDF Файлы для использования с ERDDAP В частности, внести изменения сверх того, что ERDDAP Система манипуляций может это сделать.

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

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

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

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

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

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

  • NetCDF Версия 3 .nc Файлы ограничены 2 ГБ байтами. (Если это действительно проблема для кого-то, дайте мне знать: Можно добавить поддержку для NetCDF Версия 3 .nc 64-битное расширение или 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 Конвенция об атрибутах для обнаружения набора данных который упоминается как " Unidata Dataset Discovery v1.0" в глобальных конвенциях и Metadata\_Conventions атрибуты.

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

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

Глобальный набор данных< addAttributes >.   2. Если набор данных имеет атрибут Конвенции в глобальном масштабе< addAttributes "Изменить все" Unidata Dataset 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.25 ERDDAP™ Читать локально Файлы 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 Все переменные данных должны использоваться (доля) Все переменные оси. ( Почему? А если нет? ) Новый в ERDDAP™ Версия 2.29.0 с EDDGrid FromNcFiles - это экспериментальная поддержка переменных данных, которые не поддерживают все переменные оси. (или как некоторые называют это 1D и 2D данные в том же наборе данных) .
  • Сортированные значения измерения - Во всем EDDGrid наборы данных, каждое измерение должно быть сортировано (восходящий или нисходящий) . Каждый из них может быть нерегулярным. Никаких связей быть не может. Это является требованием к Стандарт метаданных CF . Если значения любого измерения не сортированы, набор данных не будет загружен и ERDDAP™ идентифицирует первое несортированное значение в файле журнала, BigParent Директория /logs/log.txt.

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

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

  • Смотрите более полное описание EDDGrid Модель данных .
  • The EDDGrid Типы наборов данных:
    • 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™ распаковывать на низком уровне.
    • EDDGrid LonPM180 Изменение значений долготы ребенка EDDGrid Они находятся в диапазоне от -180 до 180.
    • EDDGrid Lon0360 Изменение значений долготы ребенка EDDGrid Они находятся в диапазоне от 0 до 360.
    • EDDGrid SideBySide агрегаты два или более 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 From EDDGrid позволяет создавать набор данных EDDTable из EDDGrid набор данных.
    • EDDTable FromErddap обрабатывает табличные данные с удаленного ERDDAP .
    • EDDTable FromFileNames Создает набор данных из информации о группе файлов в файловой системе сервера, но он не обслуживает данные из файлов.
    • EDDTable Из материалов Это суперкласс всех классов EDDTable From...Files.
    • EDDTable FromHttpGet это ERDDAP Это единственная система для импорта и экспорта данных.
    • EDDTable From Hyrax Файлы (Обнародовано) агрегирует данные из файлов с несколькими переменными с общими размерами, обслуживаемыми 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 Файлы с несколькими переменными с общими размерами.
    • EDDTableFromMqtt Конструирует набор данных на основе сообщений MQTT. Обратите внимание, что документация находится на выделенной странице. Обратите внимание, что существует много сходств с EDDTable FromHttpGet .
    • 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 From SOS обрабатывать табличные данные из SOS Серверы.
    • Скриншоты из ThreddsFiles (Обнародовано) агрегирует данные из файлов с несколькими переменными с общими размерами, обслуживаемыми ПЕРЕВОДЫ OPeNDAP сервер .
    • EDDTable From WFS Файлы (Обнародовано) сделать локальную копию всех данных из ArcGIS MapServer WFS сервера, чтобы данные можно было быстро восстановить 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 ) .  
  • EDDGrid FromDap может получать данные из любой многомерной переменной DAP Сервер данных. (Раньше, EDDGrid FromDap был ограничен переменными, обозначенными как «сетки», но это больше не является требованием.)
     
  • Сортированные значения измерения - Значения для каждого измерения должны быть сортированы по порядку. (восходящий или нисходящий) . Значения могут быть нерегулярно разнесены. Никаких связей быть не может. Это является требованием к Стандарт метаданных 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: измерения тока на восток и на север, на нескольких глубинах, в несколько раз. Поскольку глубины в каждой точке времени одинаковы, EDDGrid FromEDDTable может создавать сетчатый набор данных с измерением времени и глубины, который получает доступ к данным через базовый набор данных EDDTable.  
  • Генерировать наборы данных Xml - Мы настоятельно рекомендуем использовать Генерировать наборы данных Программа Xml Чтобы составить приблизительный проект datasets.xml Кусок для этого набора данных. Вы можете собрать информацию, необходимую для улучшения чернового проекта.  
  • Источник атрибутов - Как и все другие типы данных, EDDGrid FromTable исходит из того, что существуют глобальные исходные атрибуты и глобальный addAttributes (указанный в datasets.xml ) которые объединяются, чтобы сделать глобальную Атрибуты, которые видят пользователи. Для глобального источника атрибутов, EDDGrid FromEDDTable использует глобальную комбинацию Атрибуты базового набора данных EDDTable. (Если вы задумаетесь об этом на минуту, это имеет смысл.)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

EDDGrid EDDTable скелет 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* From ERDDAP

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

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

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

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

Подписки

Обычно, когда EDDGrid FromErddap и EDDTable Из Эрддапа (повторять) Заряженный на свой ERDDAP , они пытаются добавить подписку на удаленный набор данных через удаленный ERDDAP Система подписки e-mail/URL. Таким образом, когда удаленный набор данных изменяется, удаленный ERDDAP™ контакты setDataset Флаг URL на твоей ERDDAP™ чтобы локальный набор данных был перезагружен как можно скорее и чтобы локальный набор данных всегда был полностью обновлен и имитировал удаленный набор данных. Таким образом, в первый раз, когда это произойдет, вы должны получить электронное письмо с просьбой подтвердить подписку. Однако, если местный ERDDAP™ Вы не можете отправить электронное письмо или удаленный ERDDAP Система подписки на электронную почту / URL не активна, вы должны отправить удаленное сообщение по электронной почте ERDDAP™ администратор и запросить вручную добавить [<OnChange> (#изменить) ...</onChange> теги для всех соответствующих наборов данных, чтобы вызвать ваш набор данных setDataset Флаг URL . Увидимся. ERDDAP™ Ежедневный отчет для списка setDataset Флаг URL, но просто отправьте их EDDGrid FromErddap и 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 . Или вместо того, чтобы EDDGrid FromErddap, использование EDDGrid Из папы . Эти типы EDD позволяют эффективно подключаться к набору данных на удаленном устройстве. ERDDAP™ (но без перенаправления запросов данных) Они позволяют включать глобальные<addAttributes>,< axisVariable > или< dataVariable > разделы в datasets.xml . Еще одно отличие: вам нужно будет вручную подписаться на удаленный набор данных, чтобы набор данных был на вашем компьютере. ERDDAP™ будут уведомлены (через флаг URL ) при внесении изменений в удаленный набор данных. Таким образом, вы создаете новый набор данных вместо ссылки на удаленный набор данных.  

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

  • По соображениям безопасности, EDDGrid FromErddap и EDDTable Из Erddap не поддерживают<Доступно>> (#доступность) тег и не может быть использован с удаленными наборами данных, которые требуют входа в систему (потому что они используются).<Доступно>> (#доступность) ). Видишь? ERDDAP ? Система безопасности ограничение доступа к некоторым наборам данных для некоторых пользователей.  
  • Начиная с ERDDAP™ v2.10, EDDGrid FromErddap и 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 поддерживается для EDDGrid FromEtopo, чтобы вы могли получить доступ к данным со значениями долготы от -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 Из материалов напрямую. Вместо этого используйте подкласс EDDGrid FromFiles для обработки конкретного типа файла:

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

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

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

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

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

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

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

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

Все вариации EDDGrid FromFiles также может объединять группу файлов, добавляя новый левый край. (первый) размерность, обычно время, основанное на значении, полученном из каждого имени файла или из значения глобального атрибута, который находится в каждом файле. Например, имя файла может включать временное значение для данных в файле. 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-dd T'HH:mm:ss.SSSZ - ISO 8601:2004 (Е) Формат даты. Вам может понадобиться сокращенная версия, например, yyyy-MM-dd THH: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™ Они будут тратить время на их декомпрессию, когда им нужно будет их прочитать. Например:

    • файлы данных: например, .nc 4 и .hdf 5 файлов: Некоторые файлы используют внутреннее сжатие, а некоторые нет. Сжатые переменные имеют атрибуты «\_ChunkSize». Кроме того, если группа сетчатых .nc или .hdf Файлы бывают разных размеров, скорее всего, они внутренне сжаты. Если они все одинакового размера, они не сжимаются внутри.
    • Файлы изображений: например, .gif, .jpg и .png
    • аудиофайлы: например, .mp3 и .ogg.
    • Видеофайлы: например, .mp4, .ogv и .webm.

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

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

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

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

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

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

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

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

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>

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

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

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

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

Доступ ERDDAP™ наборы данных в виде файлов по запросам байтового диапазона - Переверните это, учитывая, что вы можете (в теории) Подумайте о наборе данных в ERDDAP™ Как гигант .nc файл с приложением " .nc "на базу OPen DAP URL для данного набора данных (например,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, EDDGrid FromFiles считывает информацию из всех соответствующих файлов и создает таблицы. (Одна строка для каждого файла) с информацией о каждом действительном файле и каждом «плохом» (иной или недействительный) Файл.

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

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

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

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

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

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

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

Плохие файлы

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

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

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

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

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

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

Если бежишь Генерировать наборы данныхXml или DasDds Если вы пытаетесь загрузить EDDGrid Источник: Files Dataset in ERDDAP™ , и вы получаете сообщение об ошибке «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.) Разница заключается в том, что EDDGrid FromAudioFiles рассматривает данные как многомерный набор данных (Обычно с 2 размерами: \[ Файловый старт Время \] и \[ истекший Время внутри файла \] ) , тогда как EDDTableFromAudioFiles рассматривает данные как табличные данные (обычно с колонками для файла startTime, прошедшего времени с файлом и данными из аудиоканалов) . EDDGrid FromAudioFiles требует, чтобы все файлы имели одинаковое количество образцов, поэтому, если это не так, вы должны использовать 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) ценностей. С тех пор Java BigEndian = реальные данные 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. \*\**Фильм псевдоним sourceName s для извлечения информации из имени файла (Почти всегда дата начала Время для записи) Пусть это будет колонка данных. Например,
    <sourceName>\\*\\*\\*fileName,aco\\_acoustic\\.(\\[0-9\\]{8}\\_\\[0-9\\]{6})\\.wav,1</sourceName>

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

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

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

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

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

  • EDDGrid FromMergeIRFiles поддерживает сжатые или несжатые исходные файлы данных в любой комбинации в одном наборе данных. Это позволяет сжимать старые файлы, к которым редко обращаются, но не сжимать новые файлы, к которым часто обращаются. Или вы можете изменить тип сжатия с оригинала. Например, 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».

Новый в ERDDAP™ Версия 2.29.0 является экспериментальной поддержкой переменных данных, которые не поддерживают все переменные оси. (или как некоторые называют это 1D и 2D данные в том же наборе данных) . Пожалуйста, свяжитесь с GitHub (Дискуссии или вопросы) с отзывами и багами.

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

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

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

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

EDDGrid LonPM180

** EDDGrid LonPM180** Изменение значений долготы ребенка (закрытый) 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 , существует специальный «тип набора данных», EDDGrid LonPM180FromErddapCatalog позволяет создавать datasets.xml для EDDGrid Наборы данных LonPM180 от каждого EDDGrid наборы данных в одном ERDDAP которые имеют значения долготы более 180. Это позволяет предлагать две версии этих наборов данных: оригинал, с значениями долготы в диапазоне от 0 до 360, и новый набор данных со значениями долготы в диапазоне от -180 до 180.

Набор данных о ребенке в каждом EDDGrid LonPM180 будет представлять собой 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 . Это позволяет избежать некоторых возможных проблем.

В качестве альтернативы вы можете заменить EDDGrid FromErddap 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 на меньшее число, так что он с большей вероятностью быстрее улавливает изменения в наборе данных ребенка.
  • Для наборов данных с максимальной долготой > 360 используйте следующую дополнительную конфигурацию для установки максимального значения, и набор данных будет исправлен до -180 до 180.

    <maxSourceLon>540</maxSourceLon>

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>

EDDGrid Lon0360

** EDDGrid Lon0360** Изменение значений долготы ребенка (закрытый) 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 , существует специальный «тип набора данных», EDDGrid Lon0360 From ErddapCatalog позволяет генерировать datasets.xml для EDDGrid Наборы данных Lon0360 от каждого EDDGrid наборы данных в одном ERDDAP которые имеют значения долготы более 180. Это позволяет предлагать две версии этих наборов данных: оригинал, с значениями долготы в диапазоне от 0 до 360, и новый набор данных со значениями долготы в диапазоне от -180 до 180.

Набор данных о ребенке в каждом EDDGrid Lon0360 будет представлять собой 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 . Это позволяет избежать некоторых возможных проблем.

В качестве альтернативы вы можете заменить EDDGrid FromErddap 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>

EDDGrid SideBySide

** EDDGrid SideBySide** агрегаты два или более EDDGrid наборы данных (дети) бок о бок.

  • Полученный набор данных имеет все переменные из всех наборов данных ребенка.
  • Родительский набор данных и все детские наборы данных должны быть разными. datasetID С. Если какие-либо имена в семье одинаковы, набор данных не будет загружаться. (с сообщением об ошибке, что значения агрегированной оси не сортируются) .
  • Все дети должны иметь одинаковые исходные значения. axisVariable s \[ 1+ \] (Например, широта, долгота) . Точность испытаний определяется Обсуждение AxisNDigits .
  • Дети могут иметь различные исходные значения для axisVariable s \[ 0 \] (Например, время) Но они, как правило, в основном одинаковы.
  • Родительский набор данных будет иметь все axisVariable s \[ 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 для одного EDDGrid AggregateExistingDimension основан на наборе файлов, обслуживаемых 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 Источник Данные

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

    <checkSourceData>true</checkSourceData>  

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

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

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

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

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

  • Фиксированная точка времени, указанная как строка ISO 8601 yyyy-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. Это всегда полезный вариант, но особенно полезно, когда в первом измерении нет данных о времени.

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

  1. создавать<набор данных вход (Родной тип, не EDDGrid Копия) для удаленного источника данных. Заставьте его работать правильно, включая все необходимые метаданные.
  2. Если это слишком медленно, добавьте XML-код, чтобы обернуть его в EDDGrid Копии данных.
    • Используйте другой datasetID (Возможно, изменяя datasetID старого datasetID слегка) .
    • Копировать<доступный К>,<перезагрузить EveryNMinutes и<OnChange> из удаленного EDDGrid XML для этого 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. Java v8. Это привело к 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™ Необходимо знать их sourceName s и, при необходимости, другая информация о том, как с ними работать.

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

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

        <partitionKeySourceNames>deviceid=1007, date/sampletime/1970-01-01<partitionKeySourceNames>
  • TimeStamp Partition Keys - ключи раздела Если один из столбцов ключа раздела представляет собой столбец метки времени, который имеет более грубую версию другого столбца метки времени, укажите это через *Разработчик: KeySourcName/otherColumnSourceName time\_precision *
    где time\_precision является одним из time\_precision Струны, используемые в других местах ERDDAP . The Trailing Z в оригинале time\_precision строка является по умолчанию, поэтому не имеет значения, является ли time\_precision Строка заканчивается на Z или нет. Например, ERDDAP™ будет интерпретировать дату/образец времени/1970-01-01 как "Ограничения по срокам могут быть установлены на основе ограничений по времени отбора проб с использованием этого метода. time\_precision " Фактическое преобразование ограничений является более сложным, но это общий обзор. Используйте это, когда это уместно. Это позволяет ERDDAP™ Эффективно работать с Кассандрой. Если эта связь между столбцами существует в таблице Кассандры, и вы не говорите ERDDAP™ Набор данных будет болезненно медленным ERDDAP™ Используйте тонны ресурсов Кассандры.
  • сингл Ключи раздела ценностей - Если вы хотите An ERDDAP™ набор данных для работы только с одним значением одного ключа раздела, указать Раздел 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 > destinationName s в глобальном атрибуте под названием " subsetVariables "для идентификации переменных, имеющих ограниченное число значений. Затем набор данных будет иметь веб-страницу .subset и показывать списки различных значений для этих переменных в выпадающих списках на многих веб-страницах.

Включая только переменные ключа раздела и статические столбцы в списке STRONGLY E NCO Ураган. 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 dataType ERDDAP™ Для карты Кассандры, набора или списка карта, набор или список на каждой строке Кассандры будут преобразованы в одну строку на одной строке в одной строке. ERDDAP™ столик. ERDDAP™ Имеет альтернативную систему для списков; см. ниже.

тип Списки - ERDDAP [<DataType> (#тип данных) Оригинальное название: Cassandra dataVariable может включать в себя регулярные 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 Увидеть наш Раздел о дополнительной поддержке .  
  • Если все остальное провалится, Подумайте о хранении данных в коллекции NetCDF v3 .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" база данных Тип " (Например, Oracle MySQL, 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 с другими серверами приложений.

  • Если все остальное провалится, Подумайте о хранении данных в коллекции NetCDF v3 .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 From EDDGrid

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

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

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

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

EDDTable From EDDGrid скелет 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 Является JPLMU RSS Т. и<fileDir> является /home/data/mur/, В этом каталоге есть файл под названием jplMU. RSS T20150103000000.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 in ERDDAP™ В частности, описание конкретного формата, который должен использоваться для 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>

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

В случае переменной дня, если файл имеет имя jplMU RSS T20150103000000.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 From Hyrax Файлы (Обнародовано) агрегирует данные с несколькими переменными, каждая с общими размерами (Например, время, высота (или глубина) Широта, долгота) и обслуживается а 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 From WFS Файлы (Обнародовано) сделать локальную копию всех данных из ArcGIS MapServer WFS сервера, чтобы данные можно было быстро восстановить ERDDAP™ пользователей.

В настоящее время другие типы файлов не поддерживаются. Но обычно относительно легко добавить поддержку для других типов файлов. Свяжитесь с нами, если у вас есть запрос. Или, если ваши данные находятся в старом формате файла, от которого вы хотели бы отказаться, мы рекомендуем конвертировать файлы. NetCDF v3 .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 считывает информацию из всех соответствующих файлов и создает таблицы. (Одна строка для каждого файла) с информацией о каждом действительном файле и каждом «плохом» (иной или недействительный) Файл.
    • Таблицы также хранятся на диске. NetCDF v3 .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™ Сопоставляет имеющиеся в настоящее время файлы с таблицей кэшированной информации о файлах. Новые файлы читаются и добавляются в действующую таблицу файлов. Файлы, которые больше не существуют, выпадают из таблицы файлов. Файлы, в которых изменилась временная метка файла, считываются, и их информация обновляется. Новые таблицы заменяют старые таблицы в памяти и на диске.  

Плохие файлы

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

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

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

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

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

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

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

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

Директории

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

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

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

CacheFromUrl
  • [править] ** <CacheFromUrl> ** ] (#cachefromurl) - Все EDDGrid FromFiles и все наборы данных 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 создают NetCDF v3 .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. .nc XYZBaker .nc XYZCharlie .nc Вы хотите создать новую переменную ( stationID ) при чтении каждого файла, который будет иметь значения идентификатора станции (Эйбл, Бейкер, Чарли, ...) Извлеченные из имен файлов, вы можете использовать эти теги:

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

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

Псевдо sourceName s

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

глобальный: sourceName s

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

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

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

        <sourceName>global:PI</sourceName>

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

переменная: sourceName s

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

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

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

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

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

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

имя файла sourceName s

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

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

Например,

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

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

имя пути sourceName s

Вы можете извлечь часть полного пути файла Имя (/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 in ERDDAP™ , и вы получаете сообщение об ошибке «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
    Если числовой столбец не имеет \_FillValue missing\_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 the datasets.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™ установка.

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

EDDTableFromAsciiFiles

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

  • Чаще всего файлы будут иметь имена столбцов в первой строке и данные, начинающиеся во второй строке. (Здесь первая строка файла называется строкой номер 1.) Но вы можете использовать<столбецNamesRow> и<FirstDataRow в вашем datasets.xml файл для указания другого номера строки.
  • ERDDAP™ позволяет строкам данных иметь разное количество значений данных. ERDDAP™ предполагает, что недостающие значения данных являются конечными столбцами в строке. ERDDAP™ присваивает стандартные недостающие значения для недостающих значений данных. (Добавлено v1.56)
  • С файлами ASCII легко работать, но они не являются наиболее эффективным способом хранения данных. Для большей эффективности сохраняйте файлы как NetCDF v3 .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 легко работать, но они не являются эффективным способом хранения данных. Для большей эффективности сохраняйте файлы как NetCDF v3 .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 с- Ситуации, в которых нужно уметь вносить изменения в данные (Например, изменить флаг контроля качества) , знать, какой автор внес каждое изменение, знать временную метку, когда автор внес изменение, и (по запросу) Вы можете увидеть исходные данные до внесения изменений. Таким образом, эти наборы данных имеют право DOI s . Потому что они встречают 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 через глобальный атрибут http GetKeys
  • .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 как последний параметр, где ключ автора состоит из идентификатора автора (Вы выбрали: имя, инициалы, псевдоним, номер) Подчеркивание и секретный ключ. The ERDDAP™ Администратор будет работать с авторами для создания списка действительных значений ключей автора, которые могут быть изменены в любое время. Когда 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 и https URL передается безопасным способом, но весь 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™ хранит журнал каждой команды, которую он получает, старые данные все еще находятся в журнале. Если пользователь запрашивает данные из версии набора данных до этого изменения, он увидит более старые данные.)
     

http GetDirectoryСтруктура

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

Например, если структура каталога stationID 2 месяца и вы вставляете данные с двух станций (46088 и 46155) с временными значениями с декабря 2015 года по май 2016 года, EDDTableFromHttp Get будет создавать каталоги 46088 и 46155 и создавать файлы в каждом из них 2015-11. .json l, 2016-01 .json l, 2016-03 .json l, 2016-05 .json л (каждый из которых содержит данные за 2 месяца для соответствующей станции;) . В любое время в будущем, если вы используете .insert или .delete для изменения или удаления данных, например, для станции 46088 в 2016-04-05T14:45:00Z, EDDTableFromHttp Get добавит эту команду к 46088/2016-03 .json l, соответствующие данные (вести) Файл. И очевидно, что в будущем можно добавлять данные для других станций в любое время, поскольку набор данных просто создаст дополнительные каталоги, необходимые для хранения данных с новых станций.

http GetKeys

Каждый EDDTable Из Http Набор данных должен иметь глобальный атрибут http GetKeys, который определяет список разрешенных авторов и их секретные ключи как список, разделенный запятой. Автор__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 строки .json l файл 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. The http Требуется Переменные являются (В этом примере) stationID Время Смотрите описание http Получить требуемые переменные ниже.
    5. Если данные собираются каждые 5 минут, http В этом примере GetDirectoryStructure stationID 2 месяца. Смотрите описание http GetDirectoryСтруктура ниже.
    6. The http GetKeys

Добавить выход (кусок от 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) Это дает дополнительную уверенность в том, что данная линия не была повреждена.

Изначально мы пытались использовать .nc 3 файла с неограниченным размером. Однако были проблемы:

  • Основной проблемой было: Не существует надежного способа позволить нескольким потокам писать на .nc 3 файл, даже если потоки взаимодействуют, выполняя записи синхронизированным способом.
  • Если .nc 3 файл становится поврежденным, система .insert и .delete не может продолжать использовать файл.
  • Потому что .nc 3 файла являются двоичными, если файл поврежден (Что они делают из-за многопоточной проблемы) Их чрезвычайно трудно или невозможно исправить. Нет инструментов, которые могли бы помочь с ремонтом.
  • CF не может указать кодировку строк, поэтому нет официального способа поддержки Unicode, например, кодирования UTF-8. Мы пытались заставить CF поддерживать атрибут \_Encoding, но не смогли добиться прогресса. ( Unidata , к их чести, поддерживает атрибут \_Encoding.)
  • .nc 3 файла поддерживают только строки фиксированной длины. Опять же, мы пытались получить CF и Unidata Они поддерживали струны переменной длины, но не могли добиться прогресса.
  • .nc 3 файла не поддерживают простой способ отличить односимвольные переменные от струнных. Опять же, мы пытались получить CF и Unidata Поддерживать систему для различения этих двух типов данных, но не удалось добиться какого-либо прогресса.
  • .nc 3 файла поддерживают только 8-битные символы с неопределенной кодировкой. Опять же, мы пытались получить CF и Unidata поддерживать систему для уточнения кодирования, но не смогли добиться какого-либо прогресса.
  • .nc 3 файла не поддерживают 64-разрядные целые числа (долго) . Опять же, мы пытались получить CF и Unidata Поддерживать систему долго, но не смогли добиться прогресса.  
Версия

Потому что EDDTable Из Http Получите журнал всех изменений в наборе данных с меткой времени и автором каждого изменения, он может быстро воссоздать этот набор данных в любой момент времени. В каком-то смысле есть версия на любой момент времени. Если запрос пользователя на данные включает временную метку<= ограничение, например, &timestamp<=2016-06-23T16:32:22.128Z (любой момент времени) но без ограничения автора или приказа, ERDDAP™ ответит на запрос, сначала сгенерировав версию набора данных на данный момент времени. Тогда, ERDDAP™ применяет другие ограничения пользователя, как и при любом другом запросе данных ERDDAP . EDDTableFromHttpGet настроен так, что этот процесс очень быстрый и эффективный, даже для очень больших наборов данных.

Аналогичным образом, пользователь может узнать, когда набор данных был в последний раз обновлен, запросив ...?timestamp&timestamp=max (временная метка) неясный ()

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

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

Не у всех есть потребность в этом типе мелкозернистых версий, но это чрезвычайно полезно, возможно, необходимо, в контексте большой организации управления данными. (Например, OOI, Earth Cube, Data One и NOAA NCEI) где набор данных может иметь несколько авторов (Например, датчик, автоматизированный 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 From Hyrax Файлы

EDDTable From Hyrax Файлы (обесцененный) агрегирует файлы данных с несколькими переменными, каждая с одним или несколькими общими размерами (Например, время, высота (или глубина) Широта, долгота) и обслуживается а 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/&lt;/ sourceUrl > (Но поставьте его на одну линию) (К сожалению, этот сервер больше не доступен.) . The sourceUrl Веб-страница обычно имеет "" 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 FromHttpGet Json 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 (Обнародовано) обрабатывает данные из a NOAA НОС Источник, который использует SOAP+XML Запросы и ответы. Он очень специфичен для NOAA XML от 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 From SOS

**EDDTable From SOS ** Обработка данных от службы наблюдения датчика (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® . На этом сайте есть стандартные документы.
  • The OGC Веб-сервисы Общая спецификация ver 1.1.0 ( OGC 06-121r3) Охватывает строительство запросов GET и POST (см. раздел 7.2.3 и раздел 9) .
  • Если вы отправляете запрос getCapabilities xml SOS сервер ( 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 xml SOS Сервер, вы получаете результат xml с описаниями имен полей в ответе, полевых блоках и данных. Названия полей будут включать долготу, широту, глубину. (возможно) И время.
  • Каждый dataVariable Для EDDTable From SOS должен включать атрибут «наблюдаемая собственность», который идентифицирует наблюдаемую собственность, которая должна быть запрошена у сервера для получения этой переменной. Часто, несколько dataVariable s перечислит ту же составную наблюдаемую собственность.
  • Тип данных для каждого dataVariable Сервер может не указывать. Если это так, вы должны посмотреть ответы на XML-данные с сервера и назначить соответствующие ответы.<DataType>s (#тип данных) в ERDDAP™ набор данных dataVariable определения.
  • (На момент написания этого) некоторые SOS серверы отвечают на запросы GetObservation более чем на один наблюдаемый Собственность, просто возвращая результаты для первого из наблюдаемых свойств. (Никаких сообщений об ошибках!) См. запрос параметров конструктора Отдельно наблюдаемые свойства.
  • EDDTable From SOS автоматически добавляет

    station\_id, longitude, latitude
    Глобальные атрибуты набора данных при создании набора данных.

  • SOS Серверы обычно выражают единицы с помощью UCUM система. Большинство ERDDAP™ Серверы экспресс-единицы с UDUNITS система. Если вам нужно конвертировать между двумя системами, вы можете использовать ERDDAP Веб-сервис для преобразования UCUM в / из UDUNITS .

EDDTable From SOS скелет 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&lt;/ sourceUrl > (Но поставьте его на одну линию) .
  • Поскольку этот класс всегда загружает и делает локальную копию каждого удаленного файла данных, вы никогда не должны заворачивать этот набор данных. EDDTableCopy .
  • Этот тип набора данных поддерживает OPTIONAL, редко используемый, специальный тег.<Специальный режим режим </specialMode>, который может быть использован для указания того, что специальные, жестко закодированные правила должны использоваться для определения того, какие файлы должны быть загружены с сервера. В настоящее время единственным действительным режим SAMOS используется с наборами данных изhttps://tds.coaps.fsu.edu/thredds/catalog/samosзагружать только файлы с номером последней версии.
  • Смотрите суперкласс этого класса, EDDTable Из материалов Для получения информации о том, как работает этот класс и как его использовать.
  • Смотрите примеры 1D, 2D, 3D и 4D для EDDTable FromNcFiles .  

EDDTable From WFS Файлы

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

  • Необходимо указать специально отформатированный sourceUrl Глобальный атрибут Tell ERDDAP™ Как запрашивать информацию о функциях с сервера. Пожалуйста, используйте этот пример в качестве шаблона:
    <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™ Как определить имена фрагментов данных, которые должны быть загружены. Это, вероятно, будет работать для всех EDDTableFrom WFS Файлы наборов данных:
    <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 .
  • Каждый из детей<Указанный набор данных должен быть полным набором данных, как если бы это был автономный набор данных. Каждый должен иметь одинаковое dataVariable s в том же порядке, с тем же destinationName s , данные Типы , missing\_value s , \_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>

The datasets.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. Видишь? ERDDAP EDStatic.java исходный код файла для текущего списка по умолчанию. Любые изменения в стоимости этого тега вступят в силу в следующий раз. ERDDAP™ читать datasets.xml в том числе в ответ на набор данных флаг .

<Угловая степень TrueUnits>

  • [править] ** <угловой Степень истинности ** ] (#угловая стрелка) Редко используемый OPTIONAL тег в<erddapDatasets метить datasets.xml который содержит разделенный запятой список строк единиц, которые ERDDAP™ следует рассматривать как угловые степени истинные единицы. Если переменная имеет одну из этих величин, tabledap ? orderByMean Фильтр вычисляет среднее значение особым образом, затем сообщает среднее значение как значение от 0 до 360. Видишь? ERDDAP EDStatic.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 файлы (Они должны быть полностью созданы перед отправкой пользователю.) Они кэшированы. Хотя может показаться, что данный запрос должен всегда возвращать один и тот же ответ, это не так. Например, a tabledap Запрос, который включает время некоторые Время Изменится, когда появятся новые данные для набора данных. Запрос сетки, который включает \[ последний \] Изменится временной размер, когда появятся новые данные для набора данных. Любые изменения в стоимости этого тега вступят в силу в следующий раз. ERDDAP™ читать datasets.xml в том числе в ответ на набор данных флаг . Перед ERDDAP™ v2.00, это было указано в setup.xml, что все еще разрешено, но не рекомендуется.

<cacheClearMinutes>

  • [править] ** <CacheClearMinutes ** ] (#cacheclearminutes) Редко используемый OPTIONAL тег в<erddapDatasets метить datasets.xml указать частоту для проверки кэшированных файлов и удаления старых (В минуты) (По умолчанию = 15) . Например,
    <cacheClearMinutes>15</cacheClearMinutes>  

Когда сервер завершит обработку запроса, он проверит, как давно был последний кэш. Если это было слишком давно, он будет стоять в очереди на TaskThread, чтобы очистить кэш. Любые изменения в стоимости этого тега вступят в силу в следующий раз. ERDDAP™ читать datasets.xml в том числе в ответ на набор данных флаг . Это может быть указано в setup.xml, но это не рекомендуется.  

<конвертировать InterpolateRequestCSVExample>

  • [править] ** <Преобразование InterpolateRequestCSVExmple ** ] (#convertinterpolaterequestcsvexample) является опциональным тегом внутри<erddapDatasets метить datasets.xml \[ Начиная с ERDDAP™ v2.10 \] который содержит пример, который будет показан на веб-странице конвертера. Значение по умолчанию: jplMU RSS T41/Анализ. sst /Bilinear/4.

<конвертировать InterpolateDatasetIDVariableList>

  • [править] ** <Переменный список InterpolateDatasetIDVariableList ** ] (#конвертинтерполированный инвариабельный список) является опциональным тегом внутри<erddapDatasets метить datasets.xml \[ Начиная с ERDDAP™ v2.10 \] Содержит список CSV datasetID вариабельность Примеры имен, которые будут использоваться в качестве предложений веб-страницы конвертера Интерпола. Значение по умолчанию: jplMU RSS T41/Анализ. 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 запросов одновременно. The ERDDAP™ Ежедневный отчет и аналогичная информация, записанная в файл 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 Ресурсы.
  • Технологические гиганты заставили пользователей ожидать от веб-сервисов бесконечных ресурсов. Хотя есть способы создать Сети/кластеры/федерации ERDDAP s чтобы сделать ERDDAP™ с большим количеством ресурсов, большинство ERDDAP™ У администраторов нет денег или рабочей силы для создания таких систем, и такая система все равно будет конечной. в ERD Например, есть один человек (я) писать ERDDAP™ Управляя двумя ERDDAP s (С помощью моего босса) и управление несколькими источниками данных с годовым аппаратным бюджетом в 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: ERDDAP MyPassword

  • Роли - это разделенный запятой список ролей, на которые авторизован пользователь. Любой<Набор данных может иметь [<Доступно>> (#доступность) тег, в котором перечислены роли, которым разрешен доступ к этому набору данных. Для данного пользователя и данного набора данных, если одна из ролей в списке ролей пользователя соответствует одной из ролей в списке набора данных<Доступный> ролям, то пользователь имеет право доступа к этому набору данных.

Каждый пользователь, который входит в систему, автоматически получает роль. \[ кто-нибудь заплатит в \] Если существует 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 in datasets.xml который идентифицирует тип набора данных (Например, является ли он EDDGrid /gridded или EDDTable/tabular dataset) и источник данных (Например, база данных, файлы или пульт OPeNDAP сервер) . Видишь? Список типов наборов данных .  

набор данных Ид

  • ** datasetID = DatasetID "** является обязательным атрибутом в<тег dataset>, который присваивает короткий (обычно)<15 символов), уникальный, идентифицирующий имя набору данных.
  • The datasetID Должно быть письмо (A-Z, a-z) За ним следует любое количество A-Z, a-z, 0-9 и \_ (но лучше всего, если это не так).<Всего 32 символа.
  • Набор данных Идентификаторы чувствительны к случаю, но не создавайте два datasetID s, которые отличаются только верхними / нижними буквами. Это вызовет проблемы на компьютерах Windows (Ваш и/или компьютер пользователя) .
  • Лучшие практики: Мы рекомендуем использовать верблюд Дело .
  • Лучшие практики: Мы рекомендуем, чтобы первая часть была аббревиатурой или аббревиатурой имени учреждения-источника, а вторая часть была аббревиатурой или аббревиатурой имени набора данных. Когда это возможно, мы создаем имя, которое отражает имя источника для набора данных. Например, мы использовали datasetID = erdPH sst a8day" для набора данных NOAA NMFS SWFSC Отдел экологических исследований ( ERD ) который определяется источником как спутник/PH/ sst 8 дней.
  • Если вы меняете имя набора данных, старый набор данных (со старым именем) будет жить в ERDDAP . Это «сиротский» набор данных, потому что спецификация для него datasets.xml Теперь его нет. С этим необходимо бороться:
    1. Для ERDDAP™ v2.19 и более поздние, вам не нужно ничего делать. ERDDAP™ Мы автоматически удалим эти данные.
    2. Для ERDDAP™ v2.18 и ранее, вам нужно сделать что-то, чтобы удалить сиротские наборы данных: Сделать активный = "ложный" набор данных, например,
                <dataset type="EDDTableFromNcFiles" datasetID="*theOldName*" active="false" />  

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

активный

  • Активный = булевый " является опциональным атрибутом в<dataset> tag in datasets.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 in datasets.xml который определяет, доступны ли графика и метаданные для набора данных для общественности. Он предлагает способ частично отменить набор данных [<Доступно>> (#доступность) установка. Допустимые значения:
    • авто- Это значение (или отсутствие а)<graphsAccessibleTo> tag for the dataset) делает доступ к графам и метаданным из набора данных имитирующим набор данных<Доступно>Настройка. Поэтому, если набор данных является частным, его графики и метаданные будут частными. И если набор данных является общедоступным, его графики и метаданные будут общедоступными.
    • публичный - Этот параметр делает графики и метаданные набора данных доступными для всех, даже для пользователей, которые не вошли в систему, даже если набор данных в противном случае является конфиденциальным, потому что у него есть<Доступно> Tag.  

<доступный ViaFiles>

Если значение истинно, ERDDAP™ Это позволит пользователям просматривать и загружать файлы исходных данных набора данных через ERDDAP ? "files" система . Видишь? "files" системы документация За дополнительной информацией.

По умолчанию значение<Доступные файлы исходит из<Доступные файлы > в Настройка.xml . Он имеет значение ложного по умолчанию, но мы рекомендуем добавить этот тег в ваш setup.xml со значением истинного.

Рекомендация - Мы рекомендуем сделать все соответствующие наборы данных доступными через файловую систему, установив<По умолчанию AccessibleViaFiles> соответствует действительности в setup.xml, поскольку существует группа пользователей, для которых это предпочтительный способ получения данных. Среди прочих причин, "files" Система позволяет пользователям легко видеть, какие файлы доступны и когда они в последний раз изменились, что облегчает пользователю сохранение собственной копии всего набора данных. Если вы обычно не хотите делать наборы данных доступными через файловую систему, установите<По умолчаниюДоступные файлы> Ложные. В любом случае, просто используйте<* для немногих наборов данных, которые являются исключениями из общей политики, установленной<Доступные файлы > (Например, когда набор данных использует .nc мл Файлы, которые не очень полезны для пользователей) .  

<доступный Виа WMS >

  • [править] ** <доступный Виа WMS > ** ] (#доступные водоросли) является опциональным тегом в<dataset> tag in datasets.xml для всех EDDGrid Подклассы. Он может иметь значение истинного (по умолчанию) или ложным. Например,
    <accessibleViaWMS>true</accessibleViaWMS>  

Если значение ложное, ERDDAP ? WMS Сервер не будет доступен для этого набора данных. Это обычно используется для наборов данных, которые имеют некоторые значения долготы более 180. (которые технически недействительны для WMS услуги) , и для которого вы также предлагаете вариант набора данных со значениями долготы полностью в диапазоне от -180 до 180 EDDGrid LonPM180 . Если значение истинно, 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 для EDDTableFrom SOS наборы данных (Только!) который определяет число, умноженное на значения высоты или глубины источника, чтобы преобразовать их в значения высоты. (в метрах над уровнем моря) . Например,
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>  

Этот тег ДОЛЖЕН использоваться, если значения вертикальной оси набора данных не являются счетчиками, положительный = вверх. В противном случае он опционален, так как значение по умолчанию равно 1. Например,

  • Если источник уже измеряется в метрах над уровнем моря, используйте 1 (или не используйте этот тег, так как 1 - значение по умолчанию) .
  • Если источник измеряется в метрах ниже уровня моря, используйте -1.
    <altitudeMetersPerSourceUnit>-1</altitudeMetersPerSourceUnit>
  • Если источник измеряется в км над уровнем моря, используйте 0,001.  

<DataQuery>

  • [править] ** <По умолчанию DataQuery ** ] (#по умолчанию) является опциональным тегом в<dataset> tag in datasets.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 in datasets.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™ где хранить исходные значения измерений (Также известный как axisVariable s) :

    • Правда = в памяти (Он быстрее, но использует больше памяти.)
    • Ложь = на диске (Медленнее, но не использует память)

Например,

<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 in datasets.xml что говорит ERDDAP™ использовать готовый файл FGDC вместо ERDDAP™ Попробуйте создать файл. Использование:
    <fgdcFile>*fullFileName*</fgdcFile>  

полный Имя файла Может ссылаться на локальный файл (где-то в файловой системе сервера) URL удаленного файла. Если полный Имя файла или файл не найден, набор данных не будет иметь метаданных FGDC. Это также полезно, если вы хотите подавить метаданные FGDC для определенного набора данных. Или вы можете поставить<fgdcActive>ложный</fgdcActive> в setup.xml ERDDAP™ не предлагать метаданные FGDC для любого набора данных.  

<Изо19115 File>

  • [править] ** <Изо19115 Файл ** ] (#iso19115file) является опциональным тегом в<dataset> tag in datasets.xml что говорит ERDDAP™ использовать готовый файл ISO 19115 вместо ERDDAP™ Попробуйте создать файл. Использование:
    <iso19115File>*fullFileName*</iso19115File>  
    полный Имя файла Может ссылаться на локальный файл (где-то в файловой системе сервера) URL удаленного файла. Если полный Имя файла Если файл не найден, набор данных не будет иметь метаданных ISO 19115. Это также полезно, если вы хотите подавить метаданные ISO 19115 для определенного набора данных. Или вы можете поставить<Изо19115Активный>ложный</iso19115Active> в setup.xml ERDDAP™ не предлагать метаданные 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 менее эффективна. Но ERDDAP N-потоки полезны во многих случаях.

Однако есть способы сделать ERDDAP™ масштаб, позволяющий быстро обрабатывать огромное количество запросов, создавая Сеть/кластер/федерация ERDDAP s .  

<палитры >

  • Начиная с 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, если вы делаете подкаталог cptfiles ERDDAP™ каталог контента, ERDDAP™ будет копировать все файлы \*.cpt в этом каталоге в \[ кот \] /webapps/erddap/WEB-INF/cptfils каталог каждый раз ERDDAP™ Начинается. Таким образом, если вы разместите пользовательские файлы cpt в этом каталоге, эти файлы будут использоваться для ERDDAP™ без дополнительных усилий с вашей стороны, даже при установке новой версии ERDDAP .

ПРЕДУПРЕЖДЕНИЕ: Если вы добавляете пользовательские палитры в свои ERDDAP™ И у тебя есть EDDGrid Наборы данных FromErddap и/или EDDTableFromErddap ERDDAP™ Затем пользователи увидят ваши пользовательские опции палитры на ERDDAP™ Создайте веб-страницы A Graph, но если пользователь попытается их использовать, он получит график по умолчанию. (Обычно радуга) палитра. Это связано с тем, что изображение создается удаленным ERDDAP™ который не имеет привычной палитры. Единственным решением сейчас является электронная почта удаленного ERDDAP™ администратор, чтобы добавить свои пользовательские палитры к своему ERDDAP Или написать Крису. Джон на noaa.gov попросил добавить палитры в стандарт ERDDAP™ распределения.

<onChange>

  • [править] ** <OnChange> ** ] (#изменить) является опциональным тегом в<dataset> tag in datasets.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.xml XML-файл, вы должны также и кодировать все '&', ''<', и '>' в 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 in datasets.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 in datasets.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 in datasets.xml Это указывает, может ли источник ограничивать струнные переменные операторами = и !
    • Для EDDTableFromDapSequence это относится только к переменным струн внешней последовательности. Предполагается, что источник не может справиться с какими-либо ограничениями на переменные внутренней последовательности.
    • Этот тег является опциональным. Действительные ценности истинны (по умолчанию) и ложные.
    • Для EDDTable FromDapSequence OPeNDAP Серверы DRDS, это должно быть установлено (по умолчанию) .
    • Для EDDTable FromDapSequence Даппер серверы, это должно быть установлено ложным.
    • Примером является:
        <sourceCanConstrainStringEQNE>true</sourceCanConstrainStringEQNE>  

 

<Источник: CanConstrainStringGTLT>

  • [править] ** <Источник: CanConstrainStringGTLT ** ] (#sourcecanconstrainstringgtlt) Опциональный тег в EDDTable<тег dataset>, который определяет, может ли источник ограничивать переменные String<,<=, > и >= операторы.
    • Для EDDTableFromDapSequence это относится только к переменным струн внешней последовательности. Предполагается, что источник не может справиться с какими-либо ограничениями на переменные внутренней последовательности.
    • Действительные ценности истинны (по умолчанию) и ложные.
    • Этот тег является опциональным. Дефолт - это правда.
    • Для EDDTable FromDapSequence OPeNDAP Серверы DRDS, это должно быть установлено (по умолчанию) .
    • Для EDDTable FromDapSequence Даппер серверы, это должно быть установлено ложным.
    • Примером является:
        <sourceCanConstrainStringGTLT>true</sourceCanConstrainStringGTLT>  

 

<Источник: CanConstrainStringRegex>

  • [править] ** <Источник: CanConstrainStringRegex ** ] (#sourcecanconstrainstringregex) Опциональный тег в EDDTable<тег dataset>, который определяет, может ли источник ограничивать переменные строки регулярными выражениями, и если да, то что такое оператор.
    • Действительные значения «=» (тот DAP стандартный) "=" (ошибочно поддерживается многими DAP серверы) или "" (указывает на то, что источник не поддерживает регулярные выражения) .
    • Этот тег является опциональным. Дефолт - это "".
    • Для EDDTable FromDapSequence OPeNDAP Серверы 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.xml XML-файл, вы также должны кодировать '&', ''<', и '>' в URL как '&', '<и ">".
    • Для большинства типов данных, ERDDAP™ Добавить оригинал sourceUrl («LocalSourceUrl» в исходном коде) к глобальные атрибуты (где он становится «publicsourceurl» в исходном коде) . Когда источником данных являются локальные файлы, ERDDAP™ добавлять sourceUrl = (локальные файлы) "к глобальным атрибутам в качестве меры предосторожности. Если источником данных является база данных, ERDDAP™ добавлять sourceUrl = (База исходных данных) "к глобальным атрибутам в качестве меры предосторожности. Если некоторые из ваших наборов данных используют непубличные sourceUrl ? (Как правило, потому что их компьютер находится в вашем DMZ или в локальной локальной сети.) Вы можете использовать [<конвертироватьToPublicSourceUrl> (#конвертный публичный ресурс) Теги, чтобы указать, как конвертировать местный sourceUrl s для общественности 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 (имеет правильное сочетание атрибутов) но все еще может быть неправильно настроен, что приводит к неправильным результатам в .nc CF и .nc Файлы ответов CFMA. (Программное обеспечение является умным в некоторых отношениях и невежественным в других.)
  • Когда вы смотрите на метаданные набора данных в ERDDAP™ DSG Dataset находится в ERDDAP Внутренний формат (Гигантская таблица, похожая на базу данных) . Это не в одном из форматов DSG. (Например, размеры и метаданные неверны.) Но информация, необходимая для обработки набора данных как набора данных DSG, находится в метаданных. (Например, cdm\_data\_type=TimeSeries и cdm\_timeseries\_variables= aCsvListOfStationСвязанные переменные в глобальных метаданных и cf\_role=timeseries\_id для некоторой переменной) .
  • Если пользователь запрашивает поднабор данных в .nc CF (ан .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™ Дайте этим переменным destinationName s широты и долготы, и включить эти переменные в список cdm\_timeseries\_variables.
    2. Точные значения широты и долготы, связанные с каждым наблюдением. в ERDDAP™ Дайте этим переменным разные destinationName s (Например, точный лат и точный Лон) Не включайте эти переменные в список 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
    <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\_created 2010-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.xml XML-файл, вы должны также и кодировать все '&', ''<', и '>' в 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.xml XML-документ, символы и<, и > в атрибуте, как ключевые слова (Например, символы > в ключевых словах науки 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 in ERDDAP ? \[ кот \] /webapps/erddap/WEB-INF/classes/gov/noaa/pfel/erddap/util/messages.xml файл.  
Metadata\_Conventions
  • ** Metadata\_Conventions ** от устаревшего ACDD 1.0 (который был идентифицирован в Metadata\_Conventions как Unidata Dataset 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
<att name="processing\\_level">3</att>  
проект
  • проект (из которого 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\_name s взяты. Например,
<att name="standard\\_name\\_vocabulary">CF Standard Name Table v77</att>  

Для версии 77 Стандартная таблица имен CF .  

subsetVariables
  • ** subsetVariables ** (Только для EDDTable) Это РЕКОМЕНДУемый глобальный атрибут, который позволяет вам указать список, разделенный запятой.< dataVariable > (#datavariable) destinationName s для идентификации переменных, имеющих ограниченное число значений (Другой способ: переменные, для которых каждое из значений имеет много дубликатов.) . Например,
    <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 .
  • Порядок проведения destinationName s вы указываете определяет порядок сортировки на * 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 From SOS автоматически добавляет
        <att name="subsetVariables">station\\_id, longitude, latitude</att>  

когда создается набор данных.

  • Предупреждение: если пользователь использует * datasetID * .subset web page выбирает значение, которое имеет символ carriageReturn или newline, * datasetID * .subset провалится. ERDDAP™ Не может обойти эту проблему из-за некоторых деталей HTML. В любом случае, это почти всегда хорошая идея, чтобы удалить карету Возврат и символы новой линии из данных. Чтобы помочь решить проблему, если EDDTable. subsetVariables DataTable метод в 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™ Невозможно получить доступ к данным из более поздних временных точек.

The testOutOfDate значение отображается как столбец в allDatasets набор данных в твоем ERDDAP . Он также используется для вычисления индекса OutOfDate, который является еще одним столбцом в таблице. allDatasets набор данных. Если индекс является<1 набор данных считается актуальным. Если индекс является<=1, набор данных считается устаревшим. Если индекс является<=2, набор данных считается устаревшим.

The testOutOfDate Ценность также используется ERDDAP™ Чтобы генерироватьhttps://yourDomain/erddap/outOfDateDatasets.htmlвеб-страница ( пример ) который показывает наборы данных, имеющие< testOutOfDate > теги, с наборами данных, ранжированными по тому, насколько они устаревшие. Если вы измените тип файла (От .html до .csv .jsonlCSV , .nc , .tsv ...) Вы можете получить эту информацию в различных форматах файлов.

Когда это возможно, Генерировать наборы данныхXml Добавить a testOutOfDate Отношение к глобальному 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 Тэги востребованы, и все dataVariable s Всегда делитесь / используйте все переменные оси. ( Почему? А если нет? )
    Должна быть переменная оси для каждого измерения переменных данных. Переменные оси должны быть указаны в порядке их использования переменными данных. (Наборы данных 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 могут использовать некоторые специально закодированные, псевдо- sourceName s для определения новых переменных данных, например, для продвижения глобального атрибута в качестве переменной данных. Видишь? Эта документация .

HDF Структуры

Начиная с ERDDAP™ v2.12, EDDGrid Из NcFiles и EDDGrid Из NcFiles Неупакованные могут считывать данные из «структур» .nc 4 и .hdf 4 файла. Чтобы определить переменную, которая является структурой,< 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 .z eroPad ( число, nDigits ) добавит 0 в левую часть строки, так что общее число цифр будет nDigits (Например, String2 .z eroPad ("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 in ERDDAP .

Оригинальное название: 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, указывается, как следует хранить данные, поступающие из источника.)
    • Это требуется некоторыми типами наборов данных и не учитывается другими. Типы данных, которые требуют этого для своих dataVariable s являются: EDDGrid FromXxxFiles, EDDTable FromXxxFiles, EDDTableFromM WFS EDDTable FromNOS, EDDTable From SOS . Другие типы наборов данных игнорируют этот тег, потому что они получают информацию из источника.  
    • Действительные значения являются любыми из стандартных 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>

  • Этот атрибут принадлежит CDC COARDS и 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.
  • The colorBarMinimum и 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
  • ** FileAccessBaseUrl FileAccessSuffix** Очень редко используются атрибуты, которые не являются стандартными. Если колонка 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 гораздо лучше для этой цели, чем, например, гораздо более мелкозернистый CF standard\_name s (которые не так хороши для этой цели из-за всех синонимов и незначительных вариаций, например, температура моря Море_вода_температура) . (Использование) ioos\_category С этой целью контролируется< categoryAttributes В файле setup.xml. Попробуйте использовать ioos\_category Поиск наборов данных, представляющих интерес.
  • Эти категории от NOAA Интегрированная система наблюдения за океаном (ИООС) . Эти категории имеют основополагающее значение для описания миссии УСВН. Если вы находитесь в NOAA Поддерживая ioos\_category Это хорошо Один. NOAA Что делать. (Смотри сюда. Один NOAA видео И вдохновитесь!) Если вы находитесь в каком-то другом американском или международном агентстве, или работаете с правительственными агентствами, или работаете с какой-то другой системой наблюдения за океаном, разве это не хорошая идея сотрудничать с офисом IOOS США?
  • Рано или поздно вам может понадобиться другой ERDDAP™ Ссылка на ваши наборы данных через EDDGrid Из Эрддапа и EDDTable FromErddap . Если другой ERDDAP™ требует ioos\_category Ваши данные должны иметь ioos\_category Для того чтобы EDDGrid FromErddap и 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\_value s и \_FillValues отображаются как "" (Пустая струна) Когда время пишется как строка и как NaN, когда время пишется как двойное. Исходные значения для missing\_value и \_FillValue не будет отображаться в метаданных переменной.
  • Для струнных переменных, ERDDAP™ Всегда конвертирует любой missing\_value s или \_FillValue значения данных в " (Пустая струна) . Исходные значения для missing\_value и \_FillValue не будет отображаться в метаданных переменной.
  • Для числовых переменных: The missing\_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
  • The scale\_factor и add\_offset значения для данной переменной в различных исходных файлах должны быть последовательными; в противном случае ERDDAP™ Мы принимаем файлы с одним набором значений и отклоняем все другие файлы как «плохие файлы». Чтобы решить проблему,
    • Если файлы сетчатые .nc Файлы, которые вы можете использовать EDDGrid Из NcFilesUnpacked .
    • Если файлы являются табличными файлами данных, вы можете использовать EDDTable From...Files " стандартизировать Что? рассказывать ERDDAP Стандартизация исходных файлов по мере их чтения ERDDAP .
    • Для более сложных задач вы можете использовать NcML или NCO Чтобы решить проблему.  
standard\_name
    <att name="standard\\_name">eastward\\_sea\\_water\\_velocity</att>
  • Если добавить standard\_name атрибуты переменных и добавить standard\_name к списку< categoryAttributes > в ERDDAP ? Настройка.xml файл, пользователи могут легко найти наборы данных с аналогичными данными через ERDDAP «Поиск наборов данных по категориям» на главной странице.
  • Если вы указали CF standard\_name Для переменной атрибут единицы для переменной не должен быть идентичным каноническим единицам, указанным для стандартного имени в таблице стандартного имени CF, но единицы должны быть конвертируемыми в канонические единицы. Например, все связанные с температурой CF standard\_name У тебя есть "К" (Кельвин) Канонические единицы. Переменная, связанная с температурой standard\_name Должны иметь единицы K, градус \C, градус \F или некоторый вариант UDUnits этих имен, поскольку все они являются взаимопревращаемыми.
  • Лучшие практики: Часть власти контролируемые словари Это происходит от использования только терминов в списке. Поэтому мы рекомендуем придерживаться терминов, определенных в контролируемом словаре, и мы рекомендуем не составлять термин, если в списке нет подходящего. Если вам нужны дополнительные термины, посмотрите, будет ли комитет по стандартам добавлять их в контролируемый словарь.
  • standard\_name Значения являются единственными значениями атрибута CF, которые чувствительны к регистру. Все они всегда ниже. Начинать с ERDDAP™ v1.82, GenerateDatasets преобразует заглавные буквы в заглавные буквы. И когда набор данных загружается в ERDDAP Верхние буквы молча меняются на нижние буквы.  
time\_precision
  • time\_precision Опциональный атрибут, используемый ERDDAP™ (Отсутствие стандартов метаданных) для переменные времени и метки времени , которые могут быть в сетчатых наборах данных или табличных наборах данных, и в axisVariable s или 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\_precision 1970-01-01, если все значения данных имеют час = 0, минута = 0 и секунда = 0 (Например, 2005-03-04T00:00:00Z и 2005-03-05T00:00:00Z) .
  • Например, не используйте time\_precision 1970-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.  
Обсуждение legacy_time_adjust
  • Обсуждение legacy_time_adjust Начинать с ERDDAP™ 2.29.0, временные переменные работают немного по-разному. В редких случаях, скорее всего, при использовании дней с тех пор За год до 1582 года (так дней с 0000-01-01 или дней с 1-1-1 00:00:0.0 ) Вам нужно будет указать для корректировки переменной даты. Причиной этого является ERDDAP™ Использует библиотеку java.time для внутреннего управления датами. Есть некоторые наборы данных, которые требуют использования старой библиотеки Грегорианского календаря для получения правильных дат.
<axisVariable>
<sourceName>time</sourceName>
<destinationName>time</destinationName>
<!-- sourceAttributes>
... removed several lines ...
<att name="units">days since 1-1-1 00:00:0.0</att>
</sourceAttributes -->
<addAttributes>
... removed several lines ...
<att name="legacy_time_adjust">true</att>
</addAttributes>
</axisVariable>
единицы
  • единицы ( 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" . The UDUNITS Стандарт определяет год как фиксированное единственное значение: 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-dd T'HH:mm:ssZ, эти строки формата построены из символов, которые идентифицируют определенный тип информации из временной строки, например, m означает минуту часа. Если вы повторяете символ формата несколько раз, он дополнительно уточняет значение, например, m означает, что значение может быть определено любым количеством цифр, мм означает, что значение должно быть указано 2 цифрами. The Java Документация для 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Эти символы форматирования поддерживаются Java DateTimeFormatter, но в настоящее время не поддерживается 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-dd T'HH:mm:ssZ) . Пожалуйста, продолжайте использовать destinationName "time" На главную дату Переменная времени.

Всегда проверяйте свою работу, чтобы убедиться, что данные о времени, которые отображаются в вашей работе. ERDDAP™ Это правильные временные данные. Работа с данными времени всегда сложная и подвержена ошибкам.

Видишь? Больше информации о переменных времени . ERDDAP™ имеет полезность для Преобразовать числовой Время в/из струнного времени . Видишь? Как ERDDAP™ Сделки со временем .  

valid\_range

<att name="valid\_range" type="floatList"\>0.0 40.0</att>

или

<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 Быть \_FillValues ERDDAP™ Во-вторых, не угадайте поставщика данных. Такой подход более безопасен: если впоследствии будет показано, что 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 на истинный может значительно замедлить запросы, хотя может потребоваться для некоторых наборов данных.