Skip to content

Обработка ГАР (в прошлом ФИАС/КЛАДР), в т.ч. конвертация в SQL/CSV/TSV

Notifications You must be signed in to change notification settings

shadz3rg/ru_address

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ru_address: обработка БД ГАР (ex. ФИАС/КЛАДР)

Утилита для конвертации схемы, ключей и данных выгрузки ГАР под импорт в БД MySQL/PostgreSQL/ClickHouse.

Благодаря SAX парсеру потребляет небольшое количество ресурсов (не более 50 мб памяти).

Установка

Требуется Python 3.6+

$ git clone https://github.com/shadz3rg/ru_address.git && cd ru_address
$ # deprecated python setup.py install
$ ~/.local/bin/pip install .

Использование

Для начала необходимо скачать актуальную XSD схему и XML выгрузку с данными ГАР, распаковать на диск.

Все нужные файлы публикуются на оф. сайте ФНС России https://fias.nalog.ru/Frontend

Установка пакета дает доступ к исполняемому файлу ru_address и его под-командам:

Конвертация схемы:

Поддерживаемые форматы схемы и их параметры

Формат ENV параметры
MySQL (mysql)
RA_INCLUDE_DROP - Добавить DROP IF EXIST (по умолчанию "1")
RA_TABLE_ENGINE - Движок таблицы (по умолчанию "MyISAM")
PostgreSQL (psql)
RA_INCLUDE_DROP - Добавить DROP IF EXIST (по умолчанию "1")
ClickHouse (ch)
RA_INCLUDE_DROP - Добавить DROP IF EXIST (по умолчанию "1")
RA_TABLE_ENGINE - Движок таблицы (по умолчанию "MergeTree")

Описание

$ ru_address schema --help
Usage: python -m ru_address.command schema [OPTIONS] SOURCE_PATH OUTPUT_PATH

Convert XSD content into target platform schema definitions.
Get latest schema at https://fias.nalog.ru/docs/gar_schemas.zip
Generate file per table if `output_path` argument is existing directory;
else dumps all tables into single file.

Options:
  --target [mysql|psql|ch]  Target schema format
  -t, --table TEXT          Limit table list to process
  --no-keys                 Exclude keys && column index
  --help                    Show this message and exit.

Примеры

# Простейший вариант
$ ru_address schema /путь/к/файлам /путь/для/экспорта
# С ограниченным списком таблиц
$ ru_address schema /путь/к/файлам /путь/для/экспорта --table=ADDHOUSE_TYPES --table=HOUSE_TYPES
# Экспорт всех таблиц в один файл
$ ru_address schema /путь/к/файлам /путь/для/экспорта/schema.sql

Конвертация данных:

Поддерживаемые форматы дампа и их параметры

Формат ENV параметры
MySQL (mysql)
RA_BATCH_SIZE - Разделить INSERT INTO на части по n-записей (по умолчанию "500")
RA_SQL_ENCODING - Кодировка данных (по умолчанию "utf8mb4")
PostgreSQL (psql)
RA_BATCH_SIZE - Разделить INSERT INTO на части по n-записей (по умолчанию "500")
CSV (csv)
TSV (tsv)

Описание

$ ru_address dump --help
Usage: python -m ru_address.command dump [OPTIONS] SOURCE_PATH OUTPUT_PATH [SCHEMA_PATH]

Convert XML content into target platform dump files.
Get latest data at https://fias.nalog.ru/Frontend

Options:
  --target [mysql|psql|csv|tsv]   Target dump format
  -r, --region TEXT               Limit region list to process
  -t, --table TEXT                Limit table list to process
  -m, --mode [direct|per_region|per_table|region_tree]
                                  Dump output mode (only if `output_path` argument is a valid directory)
  --help                          Show this message and exit.

Примеры

# Простейший вариант
$ ru_address dump /путь/к/файлам /путь/для/сохранения /путь/к/xsd-схеме
# С указанием режима вывода:
# - direct        Вывод в единый файл, используется по умолчанию если /путь/для/сохранения - файл
# - per_region    Вывод данных в единый файл на каждый регион
# - per_table     Вывод данных в единый файл на каждую таблицу
# - region_tree   Вывод повторяет исходную структуру файлов (по умолчанию)
$ ru_address dump /путь/к/файлам /путь/для/сохранения /путь/к/xsd-схеме --mode=per_table
# С ограниченным списком таблиц
$ ru_address dump /путь/к/файлам /путь/для/сохранения /путь/к/xsd-схеме --table=ADDHOUSE_TYPES --table=HOUSE_TYPES
# С ограниченным списком регионов
$ ru_address dump /путь/к/файлам /путь/для/сохранения /путь/к/xsd-схеме --region=01 --region=02
# Экспорт всех таблиц в один файл
$ ru_address dump /путь/к/файлам /путь/для/экспорта/dump.sql /путь/к/xsd-схеме

FAQ

Как передать ENV параметры в приложение?
# Linux (стандартные ENV переменные, в т.ч. на уровне системы)
$ RA_BATCH_SIZE=1000 RA_SQL_ENCODING=utf8 ru_address dump ...
# Linux / Windows
$ ru_address -e RA_BATCH_SIZE 1000 -e RA_SQL_ENCODING utf8 dump ...
Как импортировать CSV данные?
# На примере MariaDB:
$ MariaDB [ru_address]> LOAD DATA INFILE '/var/dump/ADDHOUSE_TYPES.csv' INTO TABLE ADDHOUSE_TYPES FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Как импортировать TSV данные?
# На примере MariaDB:
$ MariaDB [ru_address]> LOAD DATA INFILE '/var/dump/ADDHOUSE_TYPES.tsv' INTO TABLE ADDHOUSE_TYPES LINES TERMINATED BY '\r\n';

About

Обработка ГАР (в прошлом ФИАС/КЛАДР), в т.ч. конвертация в SQL/CSV/TSV

Topics

Resources

Stars

Watchers

Forks