При импортировании данных из MariaDB в R при использовании MariaDB ODB C 3.1.3 Driver наблюдается странное поведение. Таблица в БД, которую я хочу импортировать:
+----------------------------+---------+-----+------+
| analyse | einheit | MIN | max |
+----------------------------+---------+-----+------+
| ALAT/GPT | U/L | \N | 35 |
| ALAT/GPT | U/L | 1 | 5000 |
| Albumin | g/L | 35 | 55 |
| Albumin | g/L | 1 | 200 |
| Albumin im Urin | mg/L | 0 | 20 |
| Albumin im Urin | mg/L | 0 | \N |
| Albumin/Kreatinin-Quotient | mg/g | 0 | 30 |
| Albumin/Kreatinin-Quotient | mg/g | 0 | 7000 |
| Alkalische Phosphatase | U/L | 36 | 92 |
| Alkalische Phosphatase | U/L | 1 | 3000 |
+----------------------------+---------+-----+------+
Если я импортирую таблицу в R, используя MariaDB ODB C 3.1.3 Драйвер Я получаю это в R:
+------+------------------------------+----------+------+-------+
| row | analyse | einheit | min | max |
+------+------------------------------+----------+------+-------+
| 1 | ALAT/GPT | U/L | NA | 35 |
| 2 | ALAT/GPT | U/L | 0 | 0 | <-
| 3 | Albumin | g/L | 1 | 5000 |
| 4 | Albumin | g/L | 0 | 0 | <-
| 5 | Albumin im Urin | mg/L | 35 | 55 |
| 6 | Albumin im Urin | mg/L | 0 | NA |
| 7 | Albumin/Kreatinin-Quotient | mg/g | 1 | 200 |
| 8 | Albumin/Kreatinin-Quotient | mg/g | 0 | 0 | <-
| 9 | Alkalische Phosphatase | U/L | 0 | 20 |
| 10 | Alkalische Phosphatase | U/L | 0 | 0 | <-
+------+------------------------------+----------+------+-------+
Очевидно, что в столбцах min
и max
пара (0,0) вставлялась в строки 2,4,8 и 10, смещая значения этих столбцов вниз. Это происходит только с указанной таблицей c. Если я импортирую другие таблицы из БД в RI, получим правильные таблицы.
Если я использую MySQL ODB C 8.0 драйвер Unicode , он корректно работает и с этой спецификацией c Таблица. Есть ли причина для такого поведения и возможно ли избежать его при использовании этого драйвера?
Среда:
- Windows 10
- R версии 3.6. 1 (2019-07-05))
- RODB C 1.3-16
- MariaDB 10.4.8
- MariaDB ODB C 3.1 Драйвер
Обновление 1: MariaODB C (версия 3.1.6) соединяется со всей базой данных экземпляра MariaDB, а не только с одной.
Следующий скрипт сравнивает maria-odb c и mysql -odb c.
library("RODBC")
odbcDataSources()
## -- Two connections
## ma: maria-odbc
## my: mysql-odbc
conn_ma <- odbcConnect("tabl_curr_add_mdo")
conn_my <- odbcConnect("tabl_curr_add")
odbcGetInfo(conn_ma)
odbcGetInfo(conn_my)
head(sqlTables(conn_ma),2)
## +--------------+---------------------+
## | TABLE_SCHEM | TABLE_NAME |
## +--------------+---------------------+
## | codes | ci5v09_ch3_00 |
## | codes | ci5v09_ch3_01 |
## +--------------+---------------------+
Схема таблицы / база данных codes
не подключена к правильной базе данных.
head(sqlTables(conn_my),2)
## +---------------+----------------+
## | TABLE_SCHEM | TABLE_NAME |
## +---------------+----------------+
## | tabl_curr_add | arzt |
## | tabl_curr_add | arzt_ctrl_1 |
## +---------------+----------------+
Схема таблицы / база данных tabl
является правильной базой данных.
length(unique(sqlTables(conn_ma)$TABLE_CAT))
## 35 databases
length(unique(sqlTables(conn_my)$TABLE_CAT))
## 1 database
Вывод 1: maria-odb c подключается ко всей базе данных экземпляра MariaDB.
lim_ma <- sqlQuery(conn_ma, "SELECT analyse, min, max FROM tabl_curr_add.labor_limits")
head(lim_ma)
## +--------------------+------+-------+
## | nalyse | min | max |
## +--------------------+------+-------+
## | ALAT/GPT | NA | 35 |
## | ALAT/GPT | 0 | 0 |
## | Albumin | 1 | 5000 |
## | Albumin | 0 | 0 |
## | Albumin im Urin | 35 | 55 |
## | Albumin im Urin | 0 | NA |
## +--------------------+------+-------+
lim_my <- sqlQuery(conn_my, "SELECT analyse, min, max FROM tabl_curr_add.labor_limits")
head(lim_my)
## +--------------------+------+-------+
## | analyse | min | max |
## +--------------------+------+-------+
## | ALAT/GPT | NA | 35 |
## | ALAT/GPT | 1 | 5000 |
## | Albumin | 35 | 55 |
## | Albumin | 1 | 200 |
## | Albumin im Urin | 0 | 20 |
## | Albumin im Urin | 0 | NA |
## +--------------------+------+-------+
Вывод 2: maria-odb c повреждает данные при импорте в R.
Обновление 2: MariaDB ODB C не работает с Excel MSQuery (MySQL ODB C не работает).
Чтобы проверить, относится ли эта проблема только к R или RODB C Я попытался импортировать данные в Excel, используя excel-odb c, mysql -odb c и maria-odb c (последние два с использованием MSquery). excel-odb c и mysql -odb c правильно извлекают таблицу, maria-odb c - нет. Появится следующее сообщение: строковые данные, усеченные справа . Я использовал новейшую версию MariaDB ODB C (3.1.6).