Upload
gleb-zakhodyakin
View
81
Download
7
Embed Size (px)
Citation preview
Работа с источниками данных в GLPK
v 0.2 2015-04-23
План занятия• Как устроены таблицы• Поддерживаемые источники данных• Использование данных в текстовых файлах• Интерфейс доступа к данным ODBC• Использование таблиц данных в ODBC-источниках• Создание источника данных ODBC• Особенности работы с данными в Excel• Особенности работы с данными в Access
2
Работа с источниками данных
Модель.mod
Данные.dat
GLPK / AMPL + решатель
Отчеты по решению
Вывод в консоль
Модель.modGLPK / AMPL +
решатель
Таблица данных
Таблица данных
Визуализация, анализ
3
Как устроены таблицы данных• В строках таблицы находятся записи о некоторых объектах (товары, заказы, …)• Столбцы таблицы – это характеристики (параметры) объекта• В таблице есть уникальный столбец (один или несколько) – первичный ключ• Первичный ключ используются для ссылки на конкретный объект• Множества в 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
Описание таблицы данных в GLPK• Для чтения данных:
table <имя> IN ‘<драйвер>’ ‘<строка подключения>’‘имя таблицы в источнике данных’ :<имя объекта GLPK> ~ <имя столбца таблицы>;
• Для записи данных:
table <имя> {<индексирующее выражение>} OUT ‘<драйвер>’ ‘<строка подключения>’‘команды для очистки старых данных’‘имя таблицы в источнике данных’ :<имя объекта GLPK> ~ <имя столбца таблицы>;
5
Поддерживаемые 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
Текстовый формат• Формат данных (файл 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
Особенности текстового формата• Простой, человеко-читаемый• Напрямую поддерживается• Excel создает CSV-файлы «русского формата», которые не поддерживаются GLPK
8
Стандартные программные интерфейсы доступа к данным
• 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
Чтение данных из источника (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
Чтение данных из источника (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
Запись данных в таблицу (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
Создание источника данных ODBC• Источник данных (Data Source Name) – описание подключения к данным• В Windows программу настройки источников можно запустить командой:
odbcad32.exe• Если вы используете 32-битную версию Office с 64-битной версией
Windows x64, то программу настройки надо запускать из каталога %windir%\SysWOW64
• Создавайте файловые DSN
13
Содержимое файла DSN• Рекомендуем использовать относительные пути к файлам Excel и Access• Если собираетесь писать в файл Excel - убедитесь, что он не read only
14
Особенности 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
Чтение данных из таблицы 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
Запись данных в таблицу 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
Особенности 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