Импортировать данные из csv в базу данных, когда не все столбцы гарантированы - PullRequest
0 голосов
/ 02 июля 2018

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

В настоящее время у нас есть 3 шага:

1. Import the data literally into its own table to preserve the original data
2. Copy it's data into a table that better represents our own data in structure
3. Then convert that table into our own data

Проблема, с которой я столкнулся, связана с данными, которые предоставляет нам NOAA. Он поставляется в следующем формате:

Station    Station_Name    Elevation    Latitude    Longitude    Date   MXPN    Measurement_Flag    Quality_Flag    Source_Flag    Time_Of_Observation   ...

Начиная с MXPN (Максимальная температура воды в поддоне), который, например, состоит из его столбца и 4 других столбцов после него, он повторяет те же 5 столбцов для каждой формы наблюдения за погодой. Проблема, однако, заключается в том, что, если какой-либо конкретный тип погоды не наблюдался ни на одной из зарегистрированных станций, этот набор из 5 столбцов будет полностью опущен.

Например, если вы посмотрите на станции Центральной Флориды, вы не найдете снега (снегопад в мм). Однако, если вы посмотрите на станции в Нью-Джерси, вы найдете эту колонку, поскольку они сообщают о снегопаде. Это означает, что отображение столбцов 1: 1 невозможно между различными отчетами, и порядок столбцов может быть не гарантирован.

Еще хуже, некоторые типы погоды включают в свое определение подстановочные знаки, например SN * # где * это число от 0 до 8, представляющее тип грунта, а # это число от 1 до 7, представляющее глубину, на которой температура почвы была взята для минимальной температуры почвы, и мы хотели бы собрать их вместе .

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

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

Используемые системы: MariaDB для базы данных. Centos7 для операционной системы (если это действительно становится проблемой) Java выполняется с помощью JPA и Spring Boot, при необходимости в спящем режиме.

1 Ответ

0 голосов
/ 03 июля 2018

Вы создаете новую таблицу для каждого файла.

Я предполагаю, что первые 6 полей присутствуют всегда, и что у вас есть 0 или более вхождений из следующих 5 полей. если вы используете SQL Server, я бы подошел к нему следующим образом:

  1. Запросить каталог information_schema, чтобы получить количество полей в стол. Если счет = 6, то никаких наблюдений нет, если 11 столбцы, то у вас есть 1 наблюдение, если 17, то у вас есть 2 наблюдения и т. д.

  2. Теперь, когда вы знаете количество наблюдений, вы можете написать несколько SQL который зацикливает наблюдения и вставляет их в дочерняя таблица со ссылкой на родительскую таблицу, которая имеет 1-й 6 поля.

извиняюсь, если мои предположения не верны.

-HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...