Миграция из CSV файла

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (3)

просмотр истории страницы
* Будет дублировать лог в папку, где Вы выполнили команду.
* В названии лога укажет дату запуска миграции, например: import_csv_v2.2021-04-15_004551.log

h2. Ошибки миграции

h3. Попытка миграции абонента с тарифом, состоящим из одних цифр
{code}
ValueError: Cannot assign "1243": "Abonents.tarif" must be a "Tarif" instance.
{code}
Рекомендуем при миграции создавать тарифы хотя бы с одной буквой. Иначе могут возникнуть трудности при миграции.
h3. Пропущен разделитель в конфигурационном файле
В примере пропущен разделитель "," на позиции *42* в конфигурационном файле. Сообщение об ошибке:
{code}
ERROR 2019-11-25 14:42:11,717 base 6929 140347412997888 [u'ValueError: Expecting , delimiter: line 42 column 1 (char 1326)', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1564, in start_import', u' File "json/__init__.py", line 339, in loads', u' File "json/decoder.py", line 364, in decode', u' File "json/decoder.py", line 380, in raw_decode']
{code}
Что бы понять в какой строке нет разделителя просматриваем сообщение об ошибке и находим следующее:
{code}
delimiter: line 42
{code}
Для исправления конфигурационного файла откройте его в текстовом редакторе и перейдите на строку *42*.
{code}
vim +42 /var/root/abonents.conf
{code}

{info}
Нумерация столбцов в .csv файле начинается с *0*.
{info}

h3. Конфигурационный файл содержит некорректные параметры
Указанная ошибка появляется, когда программа миграции считывает конфигурационный файл и не может найти в нём параметр.
{code}
ERROR 2019-12-11 17:41:59,790 base 18056 140138050590464 [u'ValueError: Expecting property name: line 5 column 1 (char 71)', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1564, in start_import', u' File "json/__init__.py", line 339, in loads', u' File "json/decoder.py", line 364, in decode', u' File "json/decoder.py", line 380, in raw_decode']
[u'sudo bash -c "export BOOTUP="noncolor";service worker start 2>&1"']
{code}
В указанном случае стояла запятая в конце перечисления параметров конфигурационного файла ("Номер договора": 1,)
{code}
"fields": {
"Баланс": 6,
"Номер договора": 1,
},
{code}
{info}
При перечислении в конфигурационном файле внутри { } используется символ запятая(,), как указатель на следующий параметр
{info}


h3. Неверный тип параметра в конфигурационном файле
Пример ошибки:
{code}
ERROR 2019-11-25 19:24:36,818 base 31955 140598127302400 [u'TypeError: list indices must be integers, not unicode', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1589, in start_import', u' File "file_client/import_csv.py", line 189, in start_import', u' File "file_client/import_csv.py", line 138, in parse_csv']
{code}
Ошибка возникает, когда в конфигурационном файле для параметра указано строковое значение вместо целочисленного. Например вместо номера столбца для тарифа указано его название:
{code}
"Тариф": "Основной тариф",
{code}
Верное значение поля "Тариф" - номер столбца в файле .csv , с названиями тарифов:
{code}
"Тариф": 8,
{code}

h2. Список полей доступных для миграции абонентов
{info}
{warning}

h3. У абонента несколько IP-адресов, как их мигрировать?

Например, абонента Фильчаков Андрей Петрович три IP-адреса: 10.0.0.8, 10.0.0.9, 10.0.0.10.

В CSV сделайте три строки по этому абоненту, они должны отличаться только IP-адресом.

{code}
Фильчаков Андрей Петрович;33.1;Белгород;Ленина;3;1;115;89221100331;15J34;Безлимит512;10.0.0.8;AA:BB:CC:DD:11:22;по ip static
Фильчаков Андрей Петрович;33.1;Белгород;Ленина;3;1;115;89221100331;15J34;Безлимит512;10.0.0.9;AA:BB:CC:DD:11:22;по ip static
Фильчаков Андрей Петрович;33.1;Белгород;Ленина;3;1;115;89221100331;15J34;Безлимит512;10.0.0.10;AA:BB:CC:DD:11:22;по ip static
{code}

h3. В биллинге нет полей для миграции нужных данных. Что делать?

{code}csvformat -D '|' -Q '' -U 3 IntercomWorkbenchRaw.csv | sed 's/NULL//g' > IntercomConverted.csv{code}
В качестве разделителя будет использован символ "|", все поля будут выгружены без кавычек, а поля "NULL" станут пустыми (такая проблема может быть в старых версиях MySQL Workbench).



h2. Ошибки миграции

h3. Попытка миграции абонента с тарифом, состоящим из одних цифр
{code}
ValueError: Cannot assign "1243": "Abonents.tarif" must be a "Tarif" instance.
{code}
Рекомендуем при миграции создавать тарифы хотя бы с одной буквой. Иначе могут возникнуть трудности при миграции.
h3. Пропущен разделитель в конфигурационном файле
В примере пропущен разделитель "," на позиции *42* в конфигурационном файле. Сообщение об ошибке:
{code}
ERROR 2019-11-25 14:42:11,717 base 6929 140347412997888 [u'ValueError: Expecting , delimiter: line 42 column 1 (char 1326)', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1564, in start_import', u' File "json/__init__.py", line 339, in loads', u' File "json/decoder.py", line 364, in decode', u' File "json/decoder.py", line 380, in raw_decode']
{code}
Что бы понять в какой строке нет разделителя просматриваем сообщение об ошибке и находим следующее:
{code}
delimiter: line 42
{code}
Для исправления конфигурационного файла откройте его в текстовом редакторе и перейдите на строку *42*.
{code}
vim +42 /var/root/abonents.conf
{code}

{info}
Нумерация столбцов в .csv файле начинается с *0*.
{info}

h3. Конфигурационный файл содержит некорректные параметры
Указанная ошибка появляется, когда программа миграции считывает конфигурационный файл и не может найти в нём параметр.
{code}
ERROR 2019-12-11 17:41:59,790 base 18056 140138050590464 [u'ValueError: Expecting property name: line 5 column 1 (char 71)', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1564, in start_import', u' File "json/__init__.py", line 339, in loads', u' File "json/decoder.py", line 364, in decode', u' File "json/decoder.py", line 380, in raw_decode']
[u'sudo bash -c "export BOOTUP="noncolor";service worker start 2>&1"']
{code}
В указанном случае стояла запятая в конце перечисления параметров конфигурационного файла ("Номер договора": 1,)
{code}
"fields": {
"Баланс": 6,
"Номер договора": 1,
},
{code}
{info}
При перечислении в конфигурационном файле внутри { } используется символ запятая(,), как указатель на следующий параметр
{info}


h3. Неверный тип параметра в конфигурационном файле
Пример ошибки:
{code}
ERROR 2019-11-25 19:24:36,818 base 31955 140598127302400 [u'TypeError: list indices must be integers, not unicode', u' File "file_client/import_csv.py", line 1612, in <module>', u' File "file_client/import_csv.py", line 1589, in start_import', u' File "file_client/import_csv.py", line 189, in start_import', u' File "file_client/import_csv.py", line 138, in parse_csv']
{code}
Ошибка возникает, когда в конфигурационном файле для параметра указано строковое значение вместо целочисленного. Например вместо номера столбца для тарифа указано его название:
{code}
"Тариф": "Основной тариф",
{code}
Верное значение поля "Тариф" - номер столбца в файле .csv , с названиями тарифов:
{code}
"Тариф": 8,
{code}