Драйвер MariaDB ODB C для R дает странные результаты - PullRequest
0 голосов
/ 29 января 2020

При импортировании данных из 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).

...