18
Работа с источниками данных в GLPK v 0.2 2015-04-23

Взаимодействие с источниками данных в GLPK

Embed Size (px)

Citation preview

Page 1: Взаимодействие с источниками данных в GLPK

Работа с источниками данных в GLPK

v 0.2 2015-04-23

Page 2: Взаимодействие с источниками данных в GLPK

План занятия• Как устроены таблицы• Поддерживаемые источники данных• Использование данных в текстовых файлах• Интерфейс доступа к данным ODBC• Использование таблиц данных в ODBC-источниках• Создание источника данных ODBC• Особенности работы с данными в Excel• Особенности работы с данными в Access

2

Page 3: Взаимодействие с источниками данных в GLPK

Работа с источниками данных

Модель.mod

Данные.dat

GLPK / AMPL + решатель

Отчеты по решению

Вывод в консоль

Модель.modGLPK / AMPL +

решатель

Таблица данных

Таблица данных

Визуализация, анализ

3

Page 4: Взаимодействие с источниками данных в GLPK

Как устроены таблицы данных• В строках таблицы находятся записи о некоторых объектах (товары, заказы, …)• Столбцы таблицы – это характеристики (параметры) объекта• В таблице есть уникальный столбец (один или несколько) – первичный ключ• Первичный ключ используются для ссылки на конкретный объект• Множества в GLPK – то же самое, что ключевые столбцы в таблицах• Параметры в GLPK считываются из столбцов таблицы

Код Название Цена

1 Хлеб 30

2 Молоко 50

3 Масло 80

Код периода

Код товара

Количество

1 1 1000

1 2 500

1 3 200

2 1 1200

2 2 600

2 3 300

3 1 1500

3 2 700

3 3 400

Код Период

1 Январь

2 Февраль

3 Март

Периоды

Товары

Продажи

4

Page 5: Взаимодействие с источниками данных в GLPK

Описание таблицы данных в GLPK• Для чтения данных:

table <имя> IN ‘<драйвер>’ ‘<строка подключения>’‘имя таблицы в источнике данных’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

• Для записи данных:

table <имя> {<индексирующее выражение>} OUT ‘<драйвер>’ ‘<строка подключения>’‘команды для очистки старых данных’‘имя таблицы в источнике данных’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

5

Page 6: Взаимодействие с источниками данных в GLPK

Поддерживаемые GLPK источники данных• Прямая поддержка (требуется только GLPK):

– Text/CSV – MySQL

• Поддержка через ODBC:– Excel– Access– dBase– sqlite– любая промышленная СУБД

• ODBC – это стандарт для windows-систем. • Для unix-like систем (Linux, MacOS X) нужен iODBC, unixODBC• см. http://en.wikibooks.org/wiki/GLPK/ODBC

6

Page 7: Взаимодействие с источниками данных в GLPK

Текстовый формат• Формат данных (файл orfc.csv)

csv = Comma Separated Values; GLPK поддерживает только американский формат разделителей• Загрузка данных в модель:

"Код","code","name","cal","prota","protv","fata","fatv","carb"1,2,"Баранки, сушки",272,0.00,8.60,0.00,0.50,56.802,194,"Батоны",240,0.00,7.50,0.00,1.00,49.503,193,"Булки городские",270,0.00,7.90,0.00,1.90,53.00

7

Page 8: Взаимодействие с источниками данных в GLPK

Особенности текстового формата• Простой, человеко-читаемый• Напрямую поддерживается• Excel создает CSV-файлы «русского формата», которые не поддерживаются GLPK

8

Page 9: Взаимодействие с источниками данных в GLPK

Стандартные программные интерфейсы доступа к данным

• ODBC – Open Database Connectivity (X/Open, 1990)• JDBC – часть Java Development Kit (Sun, 1997)

Клиент (front-end)

ODBC-клиент (приложение)

ODBC-драйвер

SQL

Данные

CSV, DBF, XLS

MS Access, FoxPro, Btrieve

ODBC API

ODBC SDK

SQL Server, Oracle, DB2, MySQL…

Сервер (Back-End)

GLPK, Access, Excel…

Команды ODBC API

CSV, DBF, XLS

MS Access, FoxPro, Btrieve

9

Page 10: Взаимодействие с источниками данных в GLPK

Чтение данных из источника (GLPK)• Описание таблицы для чтения данных:

table <имя> IN ‘<драйвер>’ ‘<строка подключения>’‘имя таблицы’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

set I dimen 2; param st{I}; table t IN 'ODBC' 'FILEDSN=supply.dsn' 'stock' :

I <- [product, period], st ~ quantity;

столбцы, определяющие индексы элементов множества (первичный ключ)product period quantity

A 1 10A 2 12B 1 100B 2 101

Первичный ключ (Primary Key) – столбец, или несколько столбцов, уникальным образом идентифицирующих каждую запись в таблице данных 10

Page 11: Взаимодействие с источниками данных в GLPK

Чтение данных из источника (GLPK)• Вместо имени таблицы можно указывать SQL-запрос на выборку данных:

table <имя> IN ‘<драйвер>’ ‘<строка подключения>’‘SQL-запрос на выборку’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

set I dimen 2; param st{I}; table t IN 'ODBC' 'FILEDSN=supply.dsn' 'SELECT product, period, quantity' ' FROM stock' : I <- [product, period], st ~ quantity;

столбцы, определяющие индексы элементов множества (первичный ключ)

product period quantityA 1 10A 2 12B 1 100B 2 101

11

Page 12: Взаимодействие с источниками данных в GLPK

Запись данных в таблицу (GLPK)table <имя> {<индексирующее выражение>} OUT ‘<драйвер>’ ‘<строка подключения>’‘SQL-запрос для очистки данных’‘имя таблицы’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

table t {p in P, t in T} OUT 'ODBC' 'FILEDSN=supply.dsn' 'DELETE FROM stock;' 'stock' :

p ~ product, t ~ period, st[p, t] ~ quantity;

http://en.wikibooks.org/wiki/GLPK/Table_Statement

product period quantityA 1 10A 2 12B 1 100B 2 101

set P := A B;set T := 1..2;param st := A 1 10, A 2 12, B 1 100, B 2 101;

Ключевые столбцы определяютсяиндексирующим выражением

Иногда требуются другие способы обновления данных, они описаны здесь:12

Page 13: Взаимодействие с источниками данных в GLPK

Создание источника данных ODBC• Источник данных (Data Source Name) – описание подключения к данным• В Windows программу настройки источников можно запустить командой:

odbcad32.exe• Если вы используете 32-битную версию Office с 64-битной версией

Windows x64, то программу настройки надо запускать из каталога %windir%\SysWOW64

• Создавайте файловые DSN

13

Page 14: Взаимодействие с источниками данных в GLPK

Содержимое файла DSN• Рекомендуем использовать относительные пути к файлам Excel и Access• Если собираетесь писать в файл Excel - убедитесь, что он не read only

14

Page 15: Взаимодействие с источниками данных в GLPK

Особенности Excel• Не поддерживает DELETE FROM• Не поддерживает DROP TABLE IF EXISTS• Автоматически определяет типы данных при чтении (может определять

неправильно)• Не работает при открытой книге• Рекомендуем использовать формат файла Excel 2003 (xls)

Типы данных при описании столбцов новой таблице

CURRENCY

DATETIME

LOGICAL

NUMBER

TEXT

http://msdn.microsoft.com/en-us/library/ms712640(v=vs.85).aspx15

Page 16: Взаимодействие с источниками данных в GLPK

Чтение данных из таблицы Excel (GLPK)• Описание таблицы для чтения данных:

table <имя> IN ‘<драйвер>’ ‘<строка подключения>’‘[имя таблицы]’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

• Правила описания имени таблицы:– Если таблица содержится на отдельном листе с именем Data, то имя таблицы в GLPK

надо указывать так: [Data$]– Если таблица содержится в именованном диапазоне Data (имя задано в диспетчере

имен), то имя таблицы в GLPK надо указывать так: [Data], т.е. без '$' в конце– Можно использовать адреса диапазонов. Например, таблица, находящаяся в диапазоне

A1:F10 листа MyData, должна быть указана так: [MyData$A1:F10]– Имена, заданные для таблиц (Ctrl-T) в Excel не поддерживаются

set I dimen 2; param st{I}; table t IN 'ODBC' 'FILEDSN=supply.dsn' '[stock$]' : I <- [product, period], st ~ quantity;

Пример чтения данных из таблицы на отдельном листе stockproduct period quantity

A 1 10A 2 12B 1 100B 2 101

16

Page 17: Взаимодействие с источниками данных в GLPK

Запись данных в таблицу Excel (GLPK)table <имя> {<индексирующее выражение>} OUT ‘<драйвер>’ ‘<строка подключения>’‘SQL-запрос для удаления и создания таблицы’‘[имя таблицы$]’ :<имя объекта GLPK> ~ <имя столбца таблицы>;

table t {p in P, t in T} OUT 'ODBC' 'FILEDSN=supply.dsn' 'DROP TABLE stock;''CREATE TABLE [stock]''(product TEXT, period NUMBER, quantity NUMBER);''[stock$]' :

p ~ product, t ~ period, st[p, t] ~ quantity;

product period quantityA 1 10A 2 12B 1 100B 2 101

set P := A B;set T := 1..2;param st := A 1 10, A 2 12, B 1 100, B 2 101;

таблица будет создана на отдельном листе

17

Page 18: Взаимодействие с источниками данных в GLPK

Особенности AccessMicrosoft Access data type Data type

(CREATETABLE)

BIT BIT

COUNTER COUNTER

CURRENCY CURRENCY

DATE/TIME DATETIME

LONG TEXT LONGTEXT

MEMO LONGTEXT

NUMBER (FieldSize= SINGLE) SINGLE

NUMBER (FieldSize= DOUBLE) DOUBLE

NUMBER (FieldSize= BYTE) UNSIGNED BYTE

NUMBER (FieldSize= INTEGER) SHORT

NUMBER (FieldSize= LONG INTEGER) LONG

NUMERIC NUMERIC

TEXT VARCHAR

http://msdn.microsoft.com/en-us/library/ms714540(v=vs.85).aspx

• Access поддерживает DELETE FROM, поэтому можно просто создавать таблицы в графическом конструкторе Access

• При необходимости программного создания, используйте типы данных,указанные в таблице

18