Соответствие заголовков CSV столбцам схемы MySQL - PullRequest
0 голосов
/ 17 октября 2019

Я работаю с множеством CSV, размещенных в корзине AWS S3, со многими различными схемами (например, один CSV может иметь заголовки ['Name', 'Height', 'Weight'], а другой может иметь заголовки ['Имя ',' DOB ',' Sex ']).

У меня есть экземпляр базы данных AWS RDS Aurora MySQL Server, на нем таблица базы данных с охватывающей схемой (например, при использовании приведенного выше примера ее схема может быть['Имя', 'Рост', 'Вес', 'DOB', 'Пол']).

Я написал функцию Python AWS Lambda, которая подключается к базе данных, получает схему соответствующей таблицы в виде списка, подключается к данному CSV из S3, получает заголовки в виде списка и сравнивает их,выдает исключение, если заголовки CSV не являются подмножеством схемы базы данных. Сейчас я пытаюсь написать код для случая, когда заголовки CSV являются подмножеством схемы базы данных, и в этом случае CSV можно безопасно загрузить в базу данных.

Существует ли инструмент для загрузки CSVтак, что его заголовки будут автоматически сопоставлены с соответствующими столбцами в базе данных и строки заполнены соответственно? Например (хотя это выглядит как излишне ресурсоемкий обходной путь), если бы я должен был загрузить CSV в DataFrame pandas, а затем попытаться загрузить его в базу данных, будут ли имена столбцов автоматически совпадать? Если это так, как это будет выглядеть в приведенном ниже коде?

...
if not set(cols).issubset(schema):
        raise Exception('CSV columns are not subset of schema (see above). Please reconfigure schema or column names and retry.')
    else:
        with conn.cursor() as cur:
            * CODE TO LOAD CSV TO DB WITH AUTOMATIC COLUMN-TO-SCHEMA MATCHING *
            conn.commit()
...

1 Ответ

0 голосов
/ 17 октября 2019

Вы хотите, чтобы имена совпадали? Когда они совпадают, вы хотите, чтобы одна строка из каждого CSV создавала всего одну строку в таблице?

Тогда было бы лучше

  1. ЗАГРУЗИТЬ ДАННЫЕ из одного CSV водна таблица (после выполнения CREATE TABLE и записи подходящих параметров в LOAD DATA)
  2. LOAD DATA из другого CSV в другую таблицу (... ditto ...)
  3. INSERT INTOфинальный стол соединение этих двух столов. (INSERT INTO .. (...) SELECT ... JOIN ...)

Если в какой-либо из строк могут отсутствовать строки (для имени), то вам необходим FULL OUTER JOIN. У MySQL такого нет, но его можно смоделировать. Или шаг 3 можно выполнить более чем за один шаг.

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