Парсинг YAML в SQL таблицу с помощью программы Mysql
Хотелось бы узнать, можно ли и как из файла YAML заполнить SQL-таблицу с помощью только(!) MySQL запросов?
Пример YAML-файла:
games:
- id: 1
name: Ships in the ocean
date: 2021-12-10
- id: 5
name: ZOO Railroad
date: 2021-12-09
- id: 14
name: Octopus-destroyer
date: 2021-12-10
- id: 35
name: Ships in the ocean
date: 2021-12-01
Таблица, которая у меня получилась (SQL):
CREATE TABLE IF NOT EXISTS `games`(
id INT UNIQUE PRIMARY KEY,
name VARCHAR(50),
date DATE
);
Запрос, который я делаю (SQL):
LOAD DATA LOCAL INFILE "pathtofile/file.yaml" IGNORE
INTO TABLE games
FIELDS TERMINATED BY '\n'
LINES STARTING BY ':'
TERMINATED BY '\n-'
IGNORE 1 LINES;
Результат:
+----+----------------------------+------------+
| id | name | date |
+----+----------------------------+------------+
| 1 | name: Ships in the ocean | 0000-00-00 |
| 5 | name: ZOO Railroad | 0000-00-00 |
| 14 | name: Octopus-destroyer | 0000-00-00 |
+----+----------------------------+------------+
Нужно, чтобы поля столбца "name" не включали в себя "name: ", и чтобы записывалась валидная дата.
Дополнительно: можно ли выборочно взять поля из объектов для записи? Например, только id и name? (см. пример YAML-файла)
Ответы (1 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Вот так должно работать
LOAD DATA LOCAL INFILE "pathtofile/file.yaml" IGNORE
INTO TABLE games
FIELDS TERMINATED BY '\n'
LINES STARTING BY ':'
TERMINATED BY '\n-'
IGNORE 1 LINES
(
@id,
@name,
@date
) SET
`id` = @id,
`name` = SUBSTRING(TRIM(@name), 7),
`date` = SUBSTRING(TRIM(@date), 7)
;
Т.е. вначале читаем файл в переменные, а потом уже преобразованные переменные вставляем в таблицу.
можно ли выборочно взять поля из объектов для записи?
Да. Нужно исключить их из секции SET