- Часто використовувані скорочення
- Що дає використання реляційної бази даних з мовою R?
- DB2 with BLU Acceleration
- BLU Acceleration for Cloud
- Малюнок 1. Дослідження даних з використанням R (дистанційне)
- Малюнок 2. Дослідження даних в хмарі з використанням R
- Малюнок 3. BLU Acceleration for Cloud - план Trial
- Таблиця 1. Порівняння термінології (R і RDBMS)
- З'єднання за допомогою RJDBC
- Лістинг 1. BLU for Cloud - R-скрипт
- Лістинг 2. RJDBC - вилучення даних
- Лістинг 3. RJDBC - відключення
- Лістинг 4. RJDBC - використання параметрів
- Малюнок 4. Приклад коробчатої діаграми
- Малюнок 5. Windows-інструмент ODBC Data Source Administrator
- Таблиця 2. RODBC - функції з'єднання і метаданих
- Таблиця 3. RODBC - функції метаданих бази даних і таблиць
- Лістинг 5. RODBC - встановлення з'єднання і використання функцій метаданих
- Лістинг 6. RODBC - метод прямого з'єднання
- Таблиця 4. RODBC - функції вилучення та видалення даних
- Лістинг 7. RODBC - діагностика помилок
- Лістинг 8. RODBC - збереження даних
- Використання збережених процедур
- Лістинг 9. RODBC - збережені процедури
- Ресурси для скачування
Швидкодіюче поєднання: DB2 10.5 with BLU Acceleration і R
Посилання на оригінал (in English)
R - це мова програмування з відкритим вихідним кодом, який відмінно підходить для аналізу даних і для роботи з графікою. Спочатку R був розроблений співробітниками Оклендського університету Россом Айхекой (Ross Ihaka) і Робертом Джентлменом (Robert Gentleman). Айхека і Джентлмен хотіли створити мову, який допоміг би їм в процесі викладання студентам вступного курсу по статистиці. Мова R був спроектований під впливом мови S, який був створений компанією Bell Labs в 1970-і роки. R вважається предметно-орієнтованою мовою, оскільки він був розроблений переважно для аналізу даних - і справляється з цим завданням дуже добре. R можна використовувати як у вигляді інтерактивної середовища, так і у вигляді скриптів і моделей, вбудованих в пакети і інтегруються з іншими програмними модулями.
Мова R можна використовувати для аналізу даних з безлічі різних джерел даних, включаючи зовнішні файли або бази даних. У даній статті пояснюється, як підключатися до даних, як запитувати дані і як оновлювати дані, які знаходяться на серверах реляційних баз даних. Ви також дізнаєтеся, чому технологія DB2 v10.5 with BLU Acceleration - це відмінний вибір для аналітики. І, нарешті, в статті пояснюється, яким чином з-поміж BLU Acceleration for Cloud спрощує завантаження та аналіз наборів даних при використанні мови R.
Часто використовувані скорочення
- CRAN: Comprehensive R Archive Network
- CSV: Comma-separated values
- DSN: Data source name
- ODBC: Open Database Connectivity
- RODBC: Open Database Connectivity for R
- SIMD: Single instruction multiple data
- SQL: Structured Query Language
Зовнішні дані
У мові R створення об'єктів і управління ними здійснюються в рамках однієї області пам'яті. У більшості випадків для задач аналізу даних потрібно, щоб дані були доступні у вигляді кадру даних (data frame). Кадр даних можна розглядати як двовимірний масив гетерогенних даних або як таблицю в оперативній пам'яті (in-memory table). Якщо дані вже існують у вигляді текстового файлу з роздільниками, то користувач середовища R може завантажити дані в пам'ять для аналізу за допомогою однієї з безлічі функцій виду read.xxx (), наприклад, функції read.csv () для CSV-файлів. Точно так же, якщо кадр даних R необхідно "екстерналізіровать" у вигляді файлу, можна скористатися безліччю функцій виду write.xxx ().
Мова R дозволяє зберігати кадри даних на диску у вигляді об'єктів (тобто за межами своєї пам'яті) за допомогою вбудованих функцій saveRDS (), save () і save.image (). Потім ці об'єкти можна зчитувати назад в пам'ять для подальшого аналізу. Проте такий механізм персистентності має велику кількість недоліків, в тому числі обмежені розміри простору для кадрів даних. Крім того, існують проблеми, пов'язані з використанням текстових файлів для аналізу даних; вони вимагають значних зусиль для очищення даних і при передачі наборів даних іншим користувачам.
Виникає питання: якщо ваші дані для аналізу згенеровані з використанням існуючих операційних систем і реляційних баз даних, то чому б просто не витягти дані з операційної системи і не заповнити цими даними аналітичну базу даних з метою їх аналізу за допомогою R?
Що дає використання реляційної бази даних з мовою R?
R можна використовувати для дослідження даних і для створення прогнозуючих моделей. Сервери реляційних баз даних призначені для обробки великих обсягів даних і дозволяють забезпечити несуперечливість даних для одночасно працюючих користувачів. Оскільки дані в реляційних базах даних зазвичай зберігаються в нормалізованому вигляді, при виконанні завдань розвідувального аналізу даних (exploratory data analysis, EDA) вам з великою ймовірністю доведеться застосувати певні навички в області SQL для об'єднання релевантних атрибутів в декількох таблицях. Якщо ви працюєте спільно з адміністратором баз даних або з аналітиком даних, добре володіють навичками роботи з реляційними БД, ви можете створювати допоміжні уявлення в режимі "тільки для читання", щоб прискорити аналіз вихідних даних. Працюючи з даними в середовищі DB2, ви можете скористатися інструментом IBM Data Studio або веб-консоллю середовища IBM BLU Acceleration for Cloud для дослідження схеми бази даних або для завдання нового бачення з метою спрощення доступу до даних зі своїх R-скриптів.
За замовчуванням перед виконанням будь-якого Аналіз середовища R завантажує всі дані в оперативну пам'ять. Коли обробку запитів здійснює сервер реляційних баз даних, такий як DB2, система не буде просто завантажувати всі дані з диска в пам'ять. Сервер баз даних проаналізує запит в цілому і визначить найбільш ефективний метод отримання запитуваних результатів.
DB2 with BLU Acceleration
Продукт DB2 10.5 with BLU Acceleration оптимізований для аналітичних задач і тому є відмінним вибором для аналізу даних за допомогою R. На користь рішення DB2 with BLU Acceleration можна привести безліч аргументів, включаючи наступні.
- простота
- Аналіз даних можна виконувати відразу після їх завантаження. Функціональність BLU оптимізована для аналітики, що позбавляє вас від необхідності створення індексів або виконання будь-яких завдань по налаштуванню.
- продуктивність
- BLU використовує столбцовую (columnar) модель зберігання, що скорочує кількість читань з диска і мінімізує обсяг пам'яті, який використовується для підтримки дуже швидкої обробки запитів.
- Застосовувані за замовчуванням вдосконалені методи стиснення даних скорочують використання пам'яті і дискового простору.
На відміну від середовища R, продукт DB2 with BLU Acceleration досліджує всі апаратні можливості свого сервера і оптимізує використання ресурсів. Наприклад, коли це можливо, DB2 задіє SIMD-команди процесора на декількох ядрах. Крім того, DB2 використовує різні механізми кешування пам'яті для зменшення кількості читань даних з диска. Така оптимізація здійснюється автоматично. В даний час ця платформа також доступна в хмарі - у вигляді рішення BLU Acceleration for Cloud.
BLU Acceleration for Cloud
BLU Acceleration for Cloud - це заснований на веб-технологіях сервер баз даних, оптимізований для досягнення максимальної простоти. Всього за кілька хвилин ви можете створити таблиці, завантажити дані і приступити до аналізу. Користувачам надаються відповідні інструменти (IBM Data Studio і IBM InfoSphere Data Architect) для спрощення створення і для супроводу моделей і об'єктів баз даних (таких як таблиці). Після створення схеми ви можете використовувати веб-консоль рішення BLU Acceleration for Cloud для завантаження своїх даних. Передбачено безліч способів завантаження даних, в тому числі локальні файли, сервіси хмарного зберігання (наприклад, Amazon S3), IBM InfoSphere DataStage. У веб-консолі можна виконувати аналіз з використанням Excel, SQL, Cognos Business Insight (BI), а також скриптів і моделей на R.
На рис. 1 показані два різні сценарії роботи користувача мови R з даними, які зберігаються в середовищі BLU Acceleration for Cloud. Аналітик даних може використовувати своє середовище R, наприклад, RStudio, для отримання даних та їх аналізу на своєму власному комп'ютері. В якості альтернативного варіанту аналітик може через браузер створювати і виконувати R-скрипти на хмарному сервері.
Малюнок 1. Дослідження даних з використанням R (дистанційне)
Діаграма на рис. 2 являє приклад середовища R, інтегрованої в середу BLU Acceleration for Cloud. Рішення BLU Acceleration for Cloud надає для R середу виконання і сховище даних в хмарної інфраструктурі. BLU Acceleration for Cloud надає веб-консоль, яка дозволяє всього за кілька хвилин завантажити дані і виконати аналіз. Аналіз даних може здійснюватися з використанням засобів SQL, BI-інструментів, R-скриптів і R-моделей. У вашому розпорядженні є як простий редактор R-скриптів, так і можливість запустити середу RStudio безпосередньо зі свого браузера. На рис. 2 показаний приклад такої інтеграції, в тому числі графічні результати аналізу даних за переписом населення США. Для створення нових скриптів слід натиснути на знак (+), підсвічений в лівому верхньому кутку вікна на рис. 2. Управління R-скриптами здійснюється в хмарі в рамках вашого власного робочого простору. Ви також можете імпортувати скрипти, щоб працювати з ними в хмарі.
Малюнок 2. Дослідження даних в хмарі з використанням R
BLU Acceleration for Cloud - план Trial
Кращий спосіб набути досвіду використання R в роботі з базами даних - скористатися пробною версією BLU Acceleration for Cloud Trial Plan в рамках програми відкритого бета-тестування. Для початку перейдіть на веб-сайт BLU Acceleration for Cloud . Натисніть на кнопку Try BLU Acceleration Now; ви будете направлені на сторінку Plans and Pricing . План Solo передбачає ініціалізацію аналітичного середовища BLU у обраного вами постачальника хмарних сервісів (IBM SoftLayer або Amazon Web Services), а план Trial миттєво надасть вам доступ до власному середовищі на 5 годин.
На рис. 3 показаний віджет BLU Acceleration for для плану Trial. Натисніть на кнопку start. Розпочнеться ініціалізація вашої системи; коли ваш сервер буде готовий, натисніть на Start BLU Acceleration. Тепер ви можете увійти в веб-консоль з ідентифікатором користувача bluadmin і наданим паролем. Щоб перевірити інтеграцію R, перейдіть в область Developing R Scripts і створіть тестовий скрипт з використанням коду, показаного нижче в лістингу 1. Оскільки ви ініціалізували нове середовище, вам, ймовірно, буде запропоновано встановити R і RStudio (ця процедура займає не більше двох хвилин) . У лістингу 1 ви побачите, що в скрипт завантажується пакет з ім'ям bluR. Цей пакет (на даний момент він доступний тільки в рамках BLU Acceleration for Cloud) використовує в якості інтерфейсу доступу до даних RODBC.
Малюнок 3. BLU Acceleration for Cloud - план Trial
Типи даних та міркування з проектування
Дані в середовищі R і дані, що зберігаються в реляційних базах даних, мають певний тип або структуру. Необхідно розуміти відмінності в типах даних, щоб відображати значення належним чином.
R має вельми обмежений набір базових типів даних: character, numeric (цілі числа і числа з плаваючою точкою подвійної точності), logical, raw (двійкові дані). Символьні вектори в R просто відображаються на SQL-дані типу CHARACTER або VARCHAR. Числові типи даних сервера баз даних зазвичай відображаються на типи даних INTEGER і DOUBLE в середовищі R. Оскільки тип даних logical в R не має очевидного еквівалента серед типів даних SQL, цей тип зазвичай відображається в таблицях бази даних на текстове поле. При роботі з даними часових рядів необхідно ретельно продумувати, як ці дані будуть відображатися між R і сервером баз даних.
З точки зору статистичних методів безперервні і категорійні дані обробляються зовсім по-різному. Користувачі R знають про ці відмінності і кодують категорійні дані за допомогою такого типу даних, як factor Після отримання даних з бази даних слід враховувати, як потрібно поводитися з цими даними - як з даними в безперервній формі або як з категорійними даними. Якщо дані дійсно є категорійними, то відповідну змінну необхідно перекодувати або виконати приведення за допомогою функції factor ().
У таблиці 1 наведено зіставлення термінів між R і реляційної СУБД.
Таблиця 1. Порівняння термінології (R і RDBMS)
R SQL / RDBMS кадр даних (data frame) відношення, таблиця спостереження (observation) рядок, кортеж змінна (variable) стовпець, атрибут різні операції ([], subset (), order (), sort ()) Оператори SELECTваріанти підключення
IBM Netezza і R
IBM Netezza Analytics - це вбудована спеціалізована платформа для поглибленої аналітики. Апаратно-програмні комплекси (appliance) Netezza підтримують кілька різних способів використання R, в тому числі аналіз безпосередньо в базі даних і аналіз на стороні клієнта. ознайомтеся з інформацією щодо використання R на платформі Netezza.
Мова R не має вбудованих можливостей доступу до реляційних баз даних, однак на сьогоднішній день існує велика кількість інтерфейсів доступу до даних, які можна отримати від постачальників або на сайті CRAN (Comprehensive R Archive Network).
Далі ви дізнаєтеся, як використовувати RJDBC або RODBC для звернення з середовища R до даних, що зберігаються в серверах баз даних DB2. Якщо ви плануєте звертатися до інших серверів баз даних, ви можете скористатися цими ж інтерфейсами або вивчити можливості інших пакетів для доступу до конкретних баз даних.
З'єднання за допомогою RJDBC
Пакет RJDBC заснований на інтерфейсі DBI (database interface), широко застосовується в співтоваристві R. Пакет DBI містить віртуальні класи, за реалізацію яких відповідає забезпечує драйвер. RJDBC використовує для обміну даними між R і сервером баз даних поєднання JDBC-сумісного драйвера бази даних і середовища JRE (Java Runtime Environment). Ми будемо використовувати для підтримки забезпечує з'єднання JDBC-драйвер від IBM (тип 4). Цей JDBC-драйвер IBM можна використовувати для звернення до баз даних сімейства DB2, включаючи DB2 for Linux, Unix, Windows, DB2 for z / OS, DB2 i. Якщо у вашому середовищі R ще не встановлений пакет RJDBC, встановіть його зі сховищ CRAN командою install.packages ( "RJDBC").
У лістингу 1 пакет RJDBC завантажує R-об'єкт, який представляє JDBC-драйвер. Маршрут до файлу db2jcct4.jar повинен бути описаний у вашій змінної CLASSPATH; а в JAVA_PATH має бути зазначено положення чинної JRE. Функція dbConnect () виділяє сервера баз даних об'єкт channel (канал або з'єднання). З'єднання встановлюється з базою даних з ім'ям SAMPLEDB, яка розташована на сервері з ім'ям хоста blueforcloud.imdemocloud.com.Обратіте увагу, що для з'єднання потрібно пароль, проте в даному скрипті його не збережено.
Лістинг 1. BLU for Cloud - R-скрипт
library (bluR) # Встановити з'єднання з сервером баз даних BLU (локальне з'єднання, # оскільки середовище R виповнюється на тому ж сервері) samplescon <- bluConnect ( "SAMPLEDB", "", "") # Створити простий запит даних у вигляді строкової змінної query <-paste ( 'select * from DB2INST1.US_FUEL_ECONOMY_AUGUST_2013') # Створити кадр даних R на основі SQL-оператора cars <- bludf (samplescon, query) # Вивести на друк характеристики кадру даних і деякі дані з першого рядка nrow (cars) ncol (cars) print (cars [1,1: 4], row.names = FALSE) # Виконати візуалізацію у вигляді коробчатой діаграми boxplot (COMB_FE_CONVENTIONAL_FUEL ~ CYL, cars, names = levels (cars $ CYL), main = "Fuel Consumption - 2013 ", xlab =" Numbe r of Cylinders ", ylab =" Miles / Gallon (mpg) ") # Закрити з'єднання з сервером BLU bluClose (samplescon)Витратьте кілька хвилин на роботу з планом Trial для продукту BLU Acceleration for Cloud і зі скриптом, показаним в лістингу 1. В іншій частині цієї статті буде викладено додаткова інформація за зверненням до даних з R.
У лістингу 2 показано, як за допомогою функції dbSendQuery () відправити SQL-запит серверу через об'єкт з'єднання. Реальні дані повертаються клієнтові тільки при виконанні функції fetch (). У цьому сценарії повертаються всі рядки з результуючого набору, оскільки другому параметру присвоєно значення -1.
Лістинг 2. RJDBC - вилучення даних
query <- paste ( "select * from db2inst1.us_fuel_economy_august_2013") # Відправити запит серверу баз даних rs <- dbSendQuery (conn, query) # Витягти все рядки даних df <- fetch (rs, -1)У лістингу 3 кадр даних df містить результати запиту. Призначення цього скрипта полягає в тому, щоб визначити типи автомобілів з найкращого паливною економічністю і відповідну модель. Результати показують, що згідно з даними нашої таблиці по 1165 автомобілів найкращу комбіновану паливну економічність мають автомобілі Toyota Prius.
Лістинг 3. RJDBC - відключення
# Видалити все результати з відсутніми даними df <- na.omit (df) cat ( "There are", nrow (df), "fuel economy results available with") cat (ncol (df), "different variables. \ N" ) # Знайти в кадрі даних найкращі показники по споживанню палива best_fe <- max (df $ COMB_FE_CONVENTIONAL_FUEL, na.rm = TRUE) cat ( "\ nCar (s) with the best fuel consumption of", best_fe, "miles / gallon. \ n \ n ") print (df [df $ COMB_FE_CONVENTIONAL_FUEL == best_fe, c (1: 4)], row.names = FALSE) # Відключити сервера баз даних dbDisconnect (conn) ---- OUTPUT from Script There are тисяча сто шістьдесят п'ять fuel economy results available with 18 different variables. Car (s) with the best fuel consumption of 50 miles / gallon. MODEL_YEAR MFR_NAME DIVISION CARLINE 2013 Toyota TOYOTA PRIUS 2013 Toyota TOYOTA PRIUS cЯкщо з таблиці бази даних повертаються значення NULL, вони відображаються в кадрі даних R як недоступні (NA). Функція na.omit () в першому рядку лістингу 3 видаляє всі спостереження з відсутніми значеннями. Змінні кадру даних R витягуються з DB2 в вигляді рядків символів у верхньому регістрі. Щоб вивільнити ресурси бази даних на сервері, не забувайте виконувати функціюdbDisconnect () в кінці своїх R-скриптів.
Можна також зв'язати об'єкти R з SQL-операторами за допомогою функції dbSendQuery () (лістинг 4).
Лістинг 4. RJDBC - використання параметрів
mfr <- "BMW" query <- paste ( "select * from db2inst1.us_fuel_economy_august_2013 where mfr_name =?") # Відправити сервера баз даних запит з підстановкою параметра rs <- dbSendQuery (conn, query, mfr) df.bmw <- fetch (rs, -1) # Перетворити змінну в тип даних factor df.bmw $ CYL <- factor (df.bmw $ CYL) # Створити коробчатую діаграму за кількістю циліндрів boxplot (COMB_FE_CONVENTIONAL_FUEL ~ CYL, df.bmw, names = levels (df .bmw $ CYL), main = "Fuel Consumption - 2013", xlab = "Number of Cylinders", ylab = "Miles / Gallon (mpg)")У лістингу 4 значення manufacturer не є частиною тексту запиту; воно відсилається в складі запиту під час виконання функції dbSendQuery ().
На рис. 4 показана коробчатая діаграма, яку ми без праці створили на основі повернутого кадру даних.
Малюнок 4. Приклад коробчатої діаграми
З'єднання за допомогою RODBC
RODBC - це більш ефективний і більш швидкий інтерфейс доступу до даних DB2 для користувачів R. Пакет RODBC доступний в репозиторії CRAN і використовується багатьма учасниками спільноти R. Якщо пакет RODBC ще не встановлений у вашому середовищі R, встановіть його командою install.packages ( "RODBC ").
Інтерфейс ODBC спочатку був розроблений корпорацією Microsoft на початку 1990-х рр. За минулий з тих пір час він став офіційним стандартом для доступу до даних під загальною назвою SQL / CLI (Call Level Interface). Середа ODBC складатиметься з таких компонентів ODBC Driver Manager і ODBC-сумісного драйвера для конкретного сервера баз даних. В операційній системі Windows компонент ODBC Driver Manager вбудований в саму платформу, проте в разі Linux або інших платформ компонент ODBC Driver Manager слід встановити окремо.
Для з'єднання з базою даних за допомогою RODBC-драйвера необхідно вказати розташування сервера, ім'я бази даних та інформацію для доступу (наприклад, ім'я користувача і пароль). Ім'я бази даних зазвичай задається у вигляді DSN-імені ODBC. DSN-ім'я - це детальна посилання на базу даних, яка може бути як локальної, так і віддаленої щодо клієнтського комп'ютера. DSN можна розглядати як псевдонім бази даних - він не зобов'язаний відповідати справжньому імені бази даних, заданому на сервері.
Для створення DSN-імен на платформі Windows застосовується інструмент ODBC Data Source Administrator, доступний в меню Control Panel-> Administration Tools. На рис. 5 показані кілька DSN-імен, визначених на цьому клієнтському комп'ютері.
Малюнок 5. Windows-інструмент ODBC Data Source Administrator
Якщо ви плануєте використовувати R і DB2 Express-C for Windows з локальними базами даних, то DSN-імена для ваших баз даних вже повинні існувати в системі. Якщо ви хочете звертатися до віддаленої базі даних, то необхідно виконати наступні дії: отримати подробиці з'єднання від постачальника сервера баз даних, каталогізувати це з'єднання і задати DSN-ім'я в інструменті ODBC Data Source Administrator.
Крім того, існує метод прямого з'єднання, яким ви можете скористатися, якщо хочете обійтися без DSN-імен.
Пакет RODBC надає кілька функцій, що мають відношення до з'єднань (таблиця 2).
Таблиця 2. RODBC - функції з'єднання і метаданих
Функція Опис / призначення Інформація на вході Інформація на виході odbcDataSources () Надає список доступних DSN-імен. Не потрібно Символьний вектор DSN-імен. odbcConnect (dsn, uid, pwd, ...) Встановлює з'єднання з сервером баз даних. dsn = "DSN_name", uid = "USERID", pwd = "password" - інші необов'язкові параметри Об'єкт channel, що представляє активне з'єднання з базою даних. odbcDriverConnect (connection = "", ...) Встановлює з'єднання з сервером баз даних. connection string.Значення для DSN, ідентифікатора користувача і пароля повинні бути надані в одному рядку. Див. Приклад в лістингу 6 . Об'єкт channel, що представляє активне з'єднання з базою даних. odbcGetInfo (channel) Надає детальну інформацію про час активного з'єднання з базою даних. Об'єкт channel, що представляє активне з'єднання з сервером баз даних. Іменований символьний вектор, що описує з'єднання, включаючи тип ODBC-драйвера і рівень відповідності стандартам API.
Під час активного з'єднання (channel) з нашої бази даних, ми можемо використовувати функції метаданих для дослідження підтримуваних типів даних, визначень таблиць і заданих в них стовпців.
У таблиці 3 представлені три корисні функції для роботи з метаданими бази даних, доступні в RODBC.
Таблиця 3. RODBC - функції метаданих бази даних і таблиць
Функція Опис / призначення Інформація на вході Інформація на виході sqlTypeInfo (channel, ...) Надає інформацію про підтримувані типи даних ODBC-бази даних channel Кадр даних підтримуваних типів даних і їх характеристик. sqlTables (channel, ...) Надає опис об'єктів табличного виду, визначених у рамках бази даних. channelрекомендовані необов'язкові параметри: "schema =", "tableType =" Кадр даних, що містить подробиці про таблиці, про уявленнях і інших об'єктах табличного виду в базі даних. sqlColumns (channel, sqtable, ...) Надає опис стовпців, визначених у рамках таблиці. channel, table name Кадр даних, що містить подробиці про імена стовпців і про інших атрибутах таблиці.
Коли ви визначите, з якою таблицею ви збираєтеся працювати, скористайтеся функцією sqlFetch () для отримання даних в R. Пакет RODBC відобразить ці дані на відповідний тип даних R, виходячи із заданих відображень, які містяться в вихідної інформації функції getSqlTypeInfo ( "DB2 / NT ").
Розглянемо простий R-скрипт, який встановлює з'єднання з базою даних з використанням DSN-імені та задає деяку базову інформацію. Програма визначить кількість табличних об'єктів і стовпців у зазначеній таблиці. Функція sqlFetch () витягує всі дані в R і показує перший рядок, яка була повернута в кадрі даних.
У лістингу 5 функція odbcConnect () і функції метаданих показують, що в схемі "DB2INST1" є 27 таблиць і що в таблиці fuel economy задано 18 стовпців. Функція sqlFetch () запитує вміст таблиці і створює кадр даних з ім'ям cars. Перші чотири змінні першого спостереження в кадрі даних демонструються користувачеві; потім з'єднання з сервером бази даних закривається за допомогою функції odbcCloseAll ().
Лістинг 5. RODBC - встановлення з'єднання і використання функцій метаданих
library (RODBC) dsn.name <- "blusamp" user.name <- "granthut" con1 <- odbcConnect (dsn = dsn.name, uid = user.name, pwd) table.list <- sqlTables (con1, tableType = "TABLE", schema = "DB2INST1") cat ( "There are", nrow (table.list), "tables in the DB2INST1 schema. \ n") table.name <- "DB2INST1.US_FUEL_ECONOMY_AUGUST_2013" col.list <- sqlColumns (con1, table.name) cat ( "There are", nrow (col.list), "columns defined in", table.name, "\ n") # Показати один рядок з таблиці cars <- sqlFetch (con1, table.name) print (cars [1,1: 4], row.names = FALSE) # Закрити з'єднання odbcCloseAll () cat ( "Database connections are closed. \ n") ---- OUTPUT from Script There are 27 tables in the DB2INST1 schema. There are 18 columns defined in DB2INST1.US_FUEL_ECONOMY_AUGUST_2013 MODEL_YEAR MFR_NAME DIVISION CARLINE 2013 BMW BMW 135i Convertible Database connections are closed.Інший метод встановлення з'єднання з базами даних DB2 за допомогою RODBC передбачає застосування функції odbcDriverConnect (). У лістингу 6 зверніть увагу на те, що db.name- це реальне ім'я бази даних на сервері баз даних, яке не обов'язково збігається з DSN-ім'ям, створеним на клієнтському комп'ютері.
Лістинг 6. RODBC - метод прямого з'єднання
driver.name <- "{IBM DB2 ODBC DRIVER}" db.name <- "SAMPLEDB" host.name <- "bluforcloud.imdemocloud.com" port <- "50001" user.name <- "granthut" # Використовуємо повну рядок з'єднання для встановлення з'єднання з базою даних SAMPLE con.text <- paste ( "DRIVER =", driver.name, "; Database =", db.name, "; Hostname =", host.name, "; Port =" , port, "; PROTOCOL = TCPIP", "; UID =", user.name, "; PWD =", pwd, sep = "") con1 <- odbcDriverConnect (con.text)витяг даних
Головний мотив застосування R для аналізу даних, що зберігаються на серверах баз даних, замість аналізу файлів полягає в тому, що такий підхід допомагає впоратися з труднощами, пов'язаними з великими наборами даних. Як зазначалося вище, за замовчуванням R завантажує всі дані в пам'ять, тому робота з великими наборами даних буде ефективніше, якщо витягувати лише фрагменти даних за допомогою умовних SQL-запитів.
Як показано в таблиці 4, функція sqlQuery () дозволяє відправити сервера баз даних будь-допустимий SQL-запит. Якщо ви маєте повноваження для застосування операції DROP до таблиць або для видалення даних, то функції sqlDrop () і sqlClear () також доступні.
Таблиця 4. RODBC - функції вилучення та видалення даних
Функція Опис / призначення Інформація на вході Інформація на виході sqlQuery (channel, query, ...) Виконує SQL-запит на сервері баз даних і повертає результати. channel, queryрекомендовані опції: errors = FALSE (допомагає фіксувати можливі помилки) Кадр даних результуючого набору. Дані будуть відображені на сумісні типи даних R. sqlDrop (channel, sqtable, ...) Видаляє вміст і визначення таблиці з бази даних. channel, table Зверніть увагу, що ця функція спробує виконати операцію DROP TABLE. sqlClear (channel, sqtable, ...) Видаляє всі рядки з таблиці в базі даних. channel, table Зверніть увагу, що ця функція спробує виконати операцію TRUNCATE TABLE.
Вельми універсальну функцію sqlQuery () можна використовувати для ініціювання SQL-операторів на мові DML (Data Manipulation Language), таких як SELECT, INSERT, UPDATE, DELETE, і для ініціювання SQL-операторів на мові DDL (Data Definition Language), таких як CREATE TABLE. SQL-оператор в лістингу 7 містить помилку. Тип даних вказано некоректно - фраза INTEGR повинна була б мати вигляд INTEGER. На щастя, в нашому розпорядженні є функція odbcGetErrMsg () для отримання і демонстрації докладного повідомлення про помилку. Ця функція дуже корисна при редагуванні і тестуванні R-скриптів.
Лістинг 7. RODBC - діагностика помилок
res <- sqlQuery (con1, "CREATE TABLE TESTDATA (c1 INTEGR)", errors = FALSE) if (res == -1) {cat ( "An error has occurred. \ n") msg <- odbcGetErrMsg (con1) print (msg)} else {cat ( "Table was created successfully. \ n")} ---- OUTPUT from Script An error has occurred. [1] "42704 -204 [IBM] [CLI Driver] [DB2 / LINUXX8664] SQL0204N \" INTEGR \ "is an undefined name. SQLSTATE = 42704 \ r \ n" [2] "[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE TESTDATA (c1 INTEGR)' "Зберігання даних
Збереження даних в реляційних БД зазвичай проводиться за допомогою SQL-оператора INSERT. Якщо у вас є кадр даних R і ви хочете помістити ці дані на зберігання в реляційну базу даних, скористайтеся функцією sqlSave (). За замовчуванням ця функція створює нову таблицю з тими ж даними, які містяться в змінної кадру даних. Імена стовпців також будуть збігатися з іменами стовпців в кадрі даних. При бажанні ви можете не зберігати імена рядків R з кадру даних в збереженої таблиці, оскільки в рамках вашого набору даних зазвичай є природний ключ.
ФункціяsqlSave () заповнює таблицю даними з кадру даних за допомогою SQL-оператора INSERT. Якщо ви хочете зберегти великий набір даних, може бути краще створити зовнішній файл даних із роздільниками, а потім застосувати високошвидкісний завантажувач конкретної бази даних для публікації даних і їх передачі в колективне користування іншим аналітикам даних. Після того як дані будуть збережені в реляційної базі даних, вам більше не доведеться турбуватися про підтримку їх цілісності та доступності - сервер баз даних візьме це на себе.
У лістингу 8 функція sqlSave () створює і наповнює нову таблицю. Оскільки кадр даних має ім'я CLASSMARKS, таблиця буде мати таке ж ім'я. У цьому сценарії параметр safer дозволяє скрипту замінити існуючу таблицю з таким же ім'ям. За замовчуванням при спробі зберегти дані в існуючу таблицю повертається помилка.
Лістинг 8. RODBC - збереження даних
tab.name <- "CLASSMARKS" NAMES <- c ( "Bob", "Mary", "Fred") MARKS <- c (78,88,91) # Створити кадр даних з результатами тесту і іменами CLASSMARKS <- data. frame (NAMES, MARKS, stringsAsFactors = FALSE) # Створити нову таблицю і наповнити її даними з кадру даних CLASSMARKS sqlSave (con1, CLASSMARKS, rownames = FALSE, safer = FALSE) NEWCLASS <- sqlFetch (con1, tab.name) cat ( " Mean mark for the class is ", mean (NEWCLASS [," MARKS "])," \ n ") ---- OUPUT from Script Mean mark for the class is 85.66667Крім того, можна модифікувати дані в існуючих таблицях за допомогою RODBC-функції sqlUpdate (). Як більш ефективної альтернативи я рекомендую використовувати SQL-оператори UPDATE, або просто зберегти нові дані в тимчасовій таблиці за допомогою функції sqlSave (), а потім виконати SQL-оператор UPSERT для цих таблиць. Для функції sqlUpdate () потрібно параметр index, службовець для однозначної ідентифікації кожного рядка в існуючій таблиці.
Використання збережених процедур
Збережені процедури - це програмні модулі, керовані і виконувані сервером баз даних. Оскільки дані розташовані на одному сервері з програмою, збережені процедури можуть виявитися досить ефективними і виконувати деякі завдання набагато швидше, ніж додатки на стороні клієнта. Збережені процедури DB2 можуть бути написані з використанням різних мов програмування, таких як Java, C, PL / SQL і SQL PL. Якщо у вас є готові збережені процедури або якщо вашу аналітичну роботу можна спростити або поліпшити за допомогою збережених процедур, їх можна легко викликати з R-скрипта при посередництві RJDBC або RODBC.
У лістингу 9 збережена процедура GETMEDIAN викликається за допомогою функції sqlQuery (). У цьому сценарії повертаються дані представляють собою кадр даних, що містить єдине значення. Цікавий навчальний предмет передається в збережену процедуру як вхідний параметр. Якогось доступного механізму для вилучення декількох наборів результатів або вихідних параметрів з збереженої процедури DB2 на даний момент не існує.
Лістинг 9. RODBC - збережені процедури
# Виклик процедури, що для отримання середньої позначки (назва предмета передається у вхідній змінної subject) subject <- "MATH" median <- sqlQuery (con1, "CALL GETMEDIAN (subject)") print (median)Висновок
Мова R - це потужний інструмент з відкритим вихідним кодом для аналізу даних, який допомагає досліджувати дані і створювати прогнозують моделі. Коли обсяг ваших даних перевищить граничні можливості пам'яті R, ви зможете вдатися до такого способу, як завантаження даних в будь-якої сервер баз даних, наприклад, в IBM DB2 with BLU Acceleration або в IBM BLU Acceleration for Cloud. У цій статті ми досліджували переваги використання R з базами даних замість аналізу даних в текстових файлах з роздільниками. Крім того, ви познайомилися з використанням пакетів RJDBC і RODBC для аналізу великих даних, що зберігаються в DB2.
Ресурси для скачування
Схожі тими
- Оригінал статті: Using R with databases .
- IBM DB2 with BLU Acceleration Нова технологія обробки даних в пам'яті від IBM.
- Introduction to Data Analysis using R (Big Data University, безкоштовний онлайновий курс навчання, листопад 2013). Цей курс познайомить вас з базовими можливостями середовища R.
- Using R with Databases (Big Data University, безкоштовний онлайновий курс навчання, січень 2014 р.) Цей курс доповнює поточну статтю отримати детальнішу інформацію стосовно встановлення з'єднання з серверами баз даних, такими як DB2, і використанні даних.
- Візьміть участь в програмі відкритого бета-тестування продукту BLU Acceleration for Cloud Open Beta і переконайтеся в тому, наскільки він полегшує аналіз даних в хмарі при використанні R.
- DB2 with BLU: A rapid adoption guide (DeveloperWorks, 2013). Чудовий підручник для початківців по пріоритетами BLU і по реалізації можливостей BLU в середовищі DB2.
- Do I need to learn R? (DeveloperWorks, 2013). У цій статті описуються переваги використання R для аналізу даних. Крім того, розглядається аналіз даних "в русі" при використанні InfoSphere Streams спільно з R.
- " R і світ даних (DeveloperWorks, 2013). Стаття, що розповідає про основні можливості мови R.
- завантажте R з сайту CRAN (Comprehensive R Archive Network).
- Завантажте DB2 Express-C : Цю безкоштовну версію DB2 ви можете налаштувати і використовувати в якості власного сервера баз даних для роботи з наборами даних і з мовою R.
- Завантажте IBM Data Studio : Безкоштовна інтегрована модульна середовище для розробки і адміністрування баз даних DB2 for Linux, UNIX and Windows.
Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів
Що дає використання реляційної бази даних з мовою R?1.us_fuel_economy_august_2013 where mfr_name =?