- Загальне уявлення про Big SQL
- Малюнок 1. Архітектура Big SQL
- Робота з Big SQL
- Малюнок 2. Eclipse-плагін BigInsights підтримує розробку Big SQL
- Створення таблиць і завантаження даних
- Лістинг 1. Створення таблиці Big SQL і завантаження в неї даних з локального файлу
- InfoSphere BigInsights Quick Start Edition
- запит даних
- Лістинг 2. Приклад запиту з з'єднанням в Big SQL
- Лістинг 3. Робота з даними складних типів
- Лістинг 4. Вбудовування ради в запит
- Лістинг 5. Налаштування властивості завдання MapReduce
- Висновок
- Подякою
- Ресурси для скачування
Інформація про SQL-технології IBM для Hadoop в допомогу користувачам СУРБД
Великі дані - це велика проблема для ІТ-фахівців, що займаються аналізом даних і управлінням інформацією. У той же час багато фахівців дуже хочуть навчитися працювати з великими даними, тому що Apache Hadoop (одна з найпопулярніших платформ для роботи з великими даними) пропонує безліч нових технологій, в тому числі нових мов запитів і сценаріїв.
Саме тут на сцену виходить Big SQL - SQL-інтерфейс, розроблений IBM для Hadoop-платформи InfoSphere BigInsights. Технологія Big SQL покликана надати SQL-розробникам простий спосіб звернення до даних, керованим Hadoop. Вона дозволяє адміністраторам створювати нові таблиці для даних, що зберігаються в Hive, HBase або розподіленої файлової системи BigInsights. Крім того, команда LOAD дозволяє адміністраторам заповнювати таблиці Big SQL даними з різних джерел. JDBC- і ODBC-драйвери Big SQL уможливлюють використання наявних інструментів, які через Big SQL можуть звертатися до цих розподілених даних.
Однак Big SQL не включає дані Hadoop в одну велику розподілену реляційну базу даних. У даній статті ми розглянемо основи Big SQL, постараємося прояснити деякі поширені помилки і відповімо на багато питань про цю нову технологію, які виникають у користувачів СУРБД.
Загальне уявлення про Big SQL
Big SQL представляє собою програмний шар, який дозволяє ІТ-спеціалістам створювати таблиці і запити для даних BigInsights за допомогою звичних SQL-операторів. Програмісти можуть використовувати стандартний синтаксис SQL і, в деяких випадках, створені IBM розширення SQL, що спрощують роботу з певними Hadoop-технологіями. Про це піде мова пізніше.
Малюнок 1 ілюструє архітектуру інфраструктури Big SQL і її використання з платформою BigInsights Enterprise Edition 2.1. (Якщо ви не знайомі з BigInsights, перегляньте вступну статтю, посилання на яку наведено в розділі ресурси .)
Малюнок 1. Архітектура Big SQL
Як показано у верхній частині малюнка, Big SQL підтримує доступ JDBC- і ODBC-клієнтів з платформ Linux® і Windows®. Крім того, Big SQL-команда LOAD може безпосередньо читати дані з деяких СУРБД (IBM PureData ™ Systems for Analytics на технології Netezza, DB2® і Teradata), а також з файлів, що зберігаються локально або в розподіленої файлової системи BigInsights. BigInsights EE 2.1 можна налаштувати на підтримку файлових систем Hadoop Distributed File System (HDFS) або IBM General Parallel File System з оптимізатором File Placement Optimizer (GPFS-FPO).
Механізм SQL-запитів підтримує з'єднання, об'єднання, угруповання, узагальнені табличні вирази, віконні функції і інші звичні SQL-вирази. Крім того, на стратегію доступу до даних, яка визначається запитами, можна впливати за допомогою порад по оптимізації і конфігураційних параметрів. Залежно від характеру запиту, обсягів даних і інших чинників Big SQL може або звертатися до інфраструктури Hadoop MapReduce для паралельної обробки запитів, або виконувати запит локально на сервері Big SQL на одиничному вузлі.
Організації, що проявляють інтерес до Big SQL, часто мають значний досвід власної розробки на SQL, а також набір заснованих на SQL додатків бізнес-аналітики та інструментів створення запитів і побудови звітів. Ідея використання наявних напрацювань і інструментів (і, можливо, часткового повторного використання існуючих додатків) може зацікавити організації, які не знайомі з Hadoop. Більш того, деякі компанії, які мають великі сховища даних, побудовані на СУРБД, розглядають Hadoop-платформи як спосіб розвантаження "холодних" (рідко використовуваних) даних зі збереженням доступу до них. В інших випадках організації використовують Hadoop для аналізу і фільтрації нетрадиційних даних (наприклад, журналів, датчиків, соціальних медіа тощо), щоб потім передати увесь зміст в реляційні сховища, розширюючи тим самим своє уявлення про товари, клієнтів і послуги.
У подібних ситуаціях Big SQL може зіграти важливу роль. Тим не менш, не слід розглядати Big SQL як заміну технології СУРБД. Big SQL розроблялась як доповнення і посилення Hadoop-інфраструктури в BigInsights. Деякі особливості, властиві СУРБД, відсутні в Big SQL, а деякі можливості Big SQL відсутні в більшості СУРБД. Наприклад, Big SQL підтримує запити даних, але не підтримує SQL-оператори UPDATE і DELETE. Оператори INSERT підтримуються тільки для таблиць HBase. Таблиці Big SQL можуть містити стовпці даних складних типів, таких як struct (структура) і array (масив), на відміну від простих "плоских" рядків. Крім того, підтримується кілька основних механізмів зберігання, в тому числі:
- Файли з роздільником (наприклад, файли з поділом запитом), що зберігаються в HDFS або GPFS-FPO.
- Таблиці Hive в форматах SequenceFile, RCFile і т.д. (Hive - це реалізація сховища даних для Hadoop).
- Таблиці HBase (HBase - це сховище даних для Hadoop на базі стовпців і пар ключ-значення).
Розглянемо Big SQL докладніше, щоб отримати більш повне уявлення про її можливості.
Робота з Big SQL
У BigInsights є кілька інструментів і інтерфейсів для Big SQL, які багато в чому схожі на інструменти і інтерфейси більшості СУРБД. Як вже говорилося, Big SQL надає розробникам додатків на Java ™, C і C ++ підтримку JDBC і ODBC за допомогою драйвера JDBC Type 4 і 32- або 64-розрядної драйвера ODBC. Ці драйвери підтримують такі популярні можливості, як підготовлені оператори, API метаданих бази даних і скасування виконуються операторів.
Крім того, Eclipse-плагін BigInsights дозволяє Java-розробникам створювати, тестувати і уточнювати запити і додатки Big SQL. Малюнок 2 ілюструє деякі аспекти цього плагіна, в тому числі JDBC-з'єднання Big SQL з сервером (на передньому плані) і результати виконання тестування Big SQL (на нижній правій панелі).
Малюнок 2. Eclipse-плагін BigInsights підтримує розробку Big SQL
Для інтерактивного виклику Big SQL-запитів BigInsights пропонує інтерфейс командного рядка (оболонку JSqsh) і Web-інтерфейс (доступний з Web-консолі BigInsights). Ці інструменти використовуються для виконання сценаріїв і створення прототипів.
Для роботи з Big SQL також можна налаштувати різноманітне ПО IBM і сторонніх розробників, яке підтримує джерела даних JDBC і ODBC. Наприклад, Cognos Business Intelligence використовує JDBC-інтерфейс Big SQL для запитів даних, створення звітів і виконання аналітичних функцій.
Як і багато інших компонентів BigInsights, Big SQL є сервісом, який адміністратори запускають (або зупиняють) в міру необхідності з Web-консолі або командного рядка.
Створення таблиць і завантаження даних
Зрозуміло, що при роботі з Big SQL потрібно створювати таблиці і заповнювати їх даними. Для цього в Big SQL використовуються оператор CREATE TABLE і команда LOAD. Хоча синтаксис операторів створення таблиць і завантаження даних виглядає звично, в ньому є деякі тонкощі. Це пов'язано з тим, що вони призначені для використання певних Hadoop-технологій.
Розглянемо лістинг 1. (Таблиця в лістингу 1 є спрощеною версією однієї з таблиць бази даних сховища GOSALES, що поставляється з Cognos Business Intelligence 10.2. У розділі ресурси наведені посилання на детальну інформацію про приклади баз даних Cognos.)
Лістинг 1. Створення таблиці Big SQL і завантаження в неї даних з локального файлу
create table mygosales.product_brand_lookup (product_brand_code int, product_brand_en varchar (180)) row format delimited fields terminated by '\ t'; load hive data local inpath '/home/user1/data/product.tsv' overwrite into table mygosales.product_brand_lookup;
Оператор CREATE TABLE створює таблицю Hive, що складається з двох стовпців: перший призначений для запису цифрового ідентифікатора бренду продукту, а другий - для опису бренду англійською мовою. В останньому рядку цього оператора вказується, що вихідні дані будуть зберігатися (і очікуються) у вигляді рядка з поділом полів за допомогою символу табуляції. (До речі, Big SQL має спільні з Hive каталог і визначення таблиць. Тому, кажучи "таблиця Hive", ми маємо на увазі таблицю Big SQL. За деякими винятками до таблиць, створеним в Big SQL, можна звертатися з Hive і навпаки.)
лістинг 1 ілюструє тільки один з можливих варіантів зберігання таблиць Big SQL. Наприклад, можна створити керовану ззовні таблицю Hive, дані якої будуть знаходитися в розподіленої файлової системи за межами бази даних Hive. Тому, при видаленні такої таблиці з Big SQL будуть видалені тільки метадані, а не фізичні дані. При використанні HBase в якості основного менеджера зберігання в операторі CREATE TABLE необхідно вказати відповідність між SQL-стовпцями і HBase-стовпцями, включаючи сімейства стовпців і ключ рядки. Якщо ви не знайомі з Hive і HBase, зверніться до розділу ресурси .
Розглянемо оператор LOAD в лістингу 1 . Тут ми наводимо повний шлях до файлу в локальній файловій системі, який хочемо завантажити в таблицю. Згідно з визначенням таблиці, кожен запис в цьому файлі повинна містити два поля (ціле число і рядок), розділені символом \ t (табуляція). Оператор OVERWRITE вказує Big SQL замінити вміст таблиці даними, що містяться в файлі. Хоча це і не відображено в лістингу 1 , Завантажувати в таблицю дані, які вже є в розподіленої файлової системи BigInsights, не обов'язково. Для цього просто створіть зовнішню таблицю за допомогою оператора LOCATION, в якому вкажіть місце розташування існуючих даних.
Крім того, існує ряд опцій для створення таблиць і завантаження даних, які впливають на структуру бази даних і використання додатків. Наприклад, Hadoop-системи часто використовуються для зберігання частково структурованих даних різних типів, таких як дані JSON. Розробники, що працюють безпосередньо з Hive, зазвичай покладаються на спеціальні серіалізатор / десеріалізатори (SerDes) для читання і запису таких даних. Тому Big SQL також підтримує спеціальний SerDes і дозволяє вказати потрібне ім'я класу SerDes при створенні таблиці.
InfoSphere BigInsights Quick Start Edition
InfoSphere BigInsights - це розроблене IBM програмне забезпечення для роботи з великими даними, засноване на проекті з відкритим вихідним кодом Apache Hadoop. Воно включає в себе ядро Hadoop (розподілена файлова система HDFS і MapReduce) і ряд інших проектів екосистеми Hadoop, таких як Pig, Hive, HBase і ZooKeeper. Крім того, BigInsights містить безліч технологій IBM (які збільшують область застосування цієї платформи), включаючи розширені аналітичні функції, прискорювачі додатків, засоби розробки, вдосконалення платформи і інтеграцію корпоративного ПО. Багато з цих можливостей доступні у версії Quick Start Edition, яку можна безкоштовно завантажити для некомерційного використання. Отримайте додаткову інформацію і завантажте пробну версію .
Big SQL підтримує багато типів СУРБД-даних, включаючи деякі типи даних, які не підтримуються безпосередньо Hive або HBase. Типи даних Big SQL включають в себе різні числові типи (цілі, десяткові, з плаваючою точкою, подвійний точності), рядки (CHAR (довжина), VARCHAR (довжина) і STRING), а також TIMESTAMP. Інші види даних дати і часу слід зберігати як TIMESTAMP або як рядки. Типи LOB і VARGRAPHIC не підтримуються.
Уявлення і визначені користувачем обмеження, типові для реляційних баз даних, в поточній версії не підтримуються. Обмеження посилальної цілісності і предметно-орієнтовані обмеження повинні забезпечуватися на рівні додатків. Замість використання операторів GRANT і REVOKE для обмеження доступу до даних використовуються стандартні команди Hadoop, що задають права доступу файлової системи для даних Hive. Це означає, що необхідно думати про права на рівні таблиці, а не на рівні рядка або стовпця.
Що ж все це означає для досвідченого адміністратор або розробника реляційної бази даних? Якщо ви хочете створити просту тестову базу в Hadoop, це досить легко зробити за допомогою Big SQL. Більш того, BigInsights Quick Edition містить сценарії і покрокове керівництво по створенню бази даних сховища GOSALES (див. Розділ ресурси ). Однак створення в BigInsights робочої бази даних вимагає розуміння Hadoop-технологій, щоб реалізація дизайну відповідала цій платформі.
запит даних
Маючи хоча б одну таблицю Big SQL, до неї можна звернутися, використовуючи синтаксис, що відповідає стандарту SQL. Big SQL підтримує оператор SELECT для проектування, обмеження, з'єднання, об'єднання, сортування і угрупування даних. Також підтримуються підзапити і узагальнені табличні вирази (запити, які починаються з оператора WITH). Передбачені десятки вбудованих функцій, в тому числі спеціально для сумісності з Hive. Також підтримуються віконні функції. При необхідності SQL-програмісти можуть обмежувати число рядків, що повертаються конкретним запитом.
У лістингу 2 наведено запит, який з'єднує дані чотирьох таблиць Big SQL, що дає результуючий набір з трьома стовпцями і обмеженням числа повертаються рядків до 50.
Лістинг 2. Приклад запиту з з'єднанням в Big SQL
SELECT pnumb.product_name, sales.quantity, meth.order_method_en FROM gosalesdw.sls_sales_fact sales, gosalesdw.sls_product_dim prod, gosalesdw.sls_product_lookup pnumb, gosalesdw.sls_order_method_dim meth WHERE pnumb.product_language = 'EN' AND sales.product_key = prod.product_key AND prod .product_number = pnumb.product_number AND meth.order_method_key = sales.order_method_key LIMIT 50;
Як вже говорилося, Big SQL підтримує складні типи даних, а саме array і struct. Можливо, вам буде цікаво дізнатися, як звертатися до таблиць, що містить стовпці з даними цих типів. Розглянемо приклад в лістингу 3.
Спочатку створюється таблиця EMPLOYEES, що складається з трьох стовпців, два з яких призначені для даних складних типів. У стовпці PHONE зберігається масив телефонів, а в стовпці ADDRESS зберігається структура, яка містить чотири поля для поштової адреси в США: вулиця, місто, штат і поштовий індекс. Елементи стовпців PHONE і ADDRESS розділяє двокрапка (:).
Завантаживши приклад даних (коментарі в лістингу), користувачі Big SQL можуть виконати запит даних за допомогою простих операцій над масивом для даних стовпця PHONE і path-виразів для даних стовпця ADDRESS. Підсумкове вираз в лістингу 3 витягує ім'я, перший номер телефону і поштовий індекс всіх співробітників.
Лістинг 3. Робота з даними складних типів
CREATE TABLE employees (name VARCHAR (100), phones ARRAY <VARCHAR (12)>, address STRUCT <street: VARCHAR (100), city: VARCHAR (100), state: VARCHAR (2), zip: VARCHAR (5)> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':'; / * Дані для таблиці: Uttam, 408-111-1111: 408-222-2222,555 Bailey Ave: San Jose: CA: 95141 Cindy, 408-333-3333: 408-444-4444,555 Bailey Ave: San Jose : CA: 95141 * / LOAD ...; SELECT name, phones [1], address.zip FROM employees;
Зрозуміло, що описати тут всі можливості запитів Big SQL неможливо. Додаткову інформацію можна знайти в інформаційному центрі BigInsights (див. Розділ ресурси ). Однак одну тему, що стосується рад по оптимізації запитів, ми все-таки обговоримо.
Давайте на час відступимо на крок назад і розглянемо інші аспекти Big SQL. Як вже говорилося, SQL-оператори UPDATE і DELETE в BigInsights 2.1 не підтримуються, а оператори INSERT підтримуються тільки для таблиць HBase. Дані в таблиці Big SQL можна завантажувати безпосередньо з підтримуваних СУРБД або з файлів. Крім того, нові таблиці можна створювати на підставі результатів запиту Big SQL за допомогою виразу CREATE TABLE AS ... SELECT FROM ....
Традиційне управління транзакціями в екосистемі Hadoop відсутня, тому Big SQL не керує транзакціями або блокуваннями. Це означає, що фіксація і відкат операцій не підтримуються, тому паралельні операції можуть призвести до помилки програми або запиту. (Наприклад, якщо виконати команду LOAD ... OVERWRITE для таблиці, яка в даний момент активно використовується, виникне виняткова ситуація.)
Оскільки продуктивність часто є проблемою при роботі з системами управління інформацією, ми коротко обговоримо деякі міркування щодо продуктивності Big SQL. Big SQL ділить виконання запиту на частини, такі як з'єднання, угруповання і т.д. Залежно від запиту, кількості даних, налаштування та інших факторів Big SQL може виконувати ці частини послідовно або паралельно. Паралелізм досягається за рахунок використання інфраструктури Hadoop MapReduce. Природно, один запит може породжувати кілька завдань MapReduce. Інфраструктура MapReduce виконує кожне завдання паралельно, використовуючи кілька завдань mapper або reducer. Це може бути дуже корисно для складних запитів до великих наборів даних.
Однак запуск завдань MapReduce пов'язаний з певними накладними витратами на обробку. Ці накладні витрати можуть переважити переваги паралельної обробки для деяких запитів, наприклад, таких, які виконуються до невеликих наборів даних або витягають дані, пов'язані з конкретним ключем рядки HBase. В такому випадку краще виконувати запит послідовно на одиничному вузлі. Іноді це доповнення до MapReduce-паралелізму називають "локальним" виконанням запиту.
Комерційні СУРБД Використовують СКЛАДНІ, засновані на оцінці витрат оптімізаторі, что дозволяють вібрато ефективна стратегію доступу до Даних, спіраючісь на велику статистику Розмірів таблиць, перекосів Даних и т.д. Оптимізатор Запитів Big SQL такоже вікорістовує статистичні дані для визначення ефектівної стратегії доступу до Даних. Однак в Деяк випадка необхідна для Big SQL статистика может буті відсутнім - например, коли базовий джерело Даних НЕ может надаті таку інформацію. У подібніх випадка програмістам слід вбудовуваті поради относительно оптімізації в свои запиті, что дозволити Big SQL згенеруваті кращий план Виконання. Поради можуть стосуватися режиму виконання запиту (локальний або паралельний), методу з'єднання, використання індексів і т.д. В Big SQL поради в запитах мають такий вигляд: / * + ім'я = значення [, ім'я = значення ..] + * /.
У лістингу 4 наведено запит, який з'єднує таблицю фактів (FACT) і таблицю вимірювань (DIM). Зверніть увагу на обмеження числа цікавлять нас рядків в таблиці вимірювань. З огляду на, що таблиці вимірювань, як правило, набагато менше таблиць фактів, і що наш запит стосується тільки підмножини рядків в таблиці вимірювань, розумно додати в нього рада small (маленька) для таблиці вимірювань. Ця рада слід відразу після посилання на таблицю в операторі FROM. Він допомагає Big SQL вибрати для запиту відповідну методику з'єднання, відповідно до якої відібрані рядки будуть з'єднані з даними з таблиці фактів.
Лістинг 4. Вбудовування ради в запит
select * from fact, dim / * + tablesize = 'small' + * / where dim.dim_id = fact.dim_id and dim.id <100;
Як було обіцяно раніше, коротко розглянемо індекси. Big SQL дозволяє створювати вторинні індекси для HBase за допомогою оператора CREATE INDEX. Як можна здогадатися, індекси дозволяють поліпшити продуктивність запитів, що виконують фільтрацію по індексованих стовпцях. Індекси HBase можуть бути засновані на єдиному або складеному ключі, і використання Big SQL для вставки даних або завантаження даних з файлу в таблицю HBase автоматично призведе до оновлення її індексів. Однак в BigInsights 2.1 завантаження даних з віддаленою реляційної бази даних в таблицю HBase не приведе до автоматичного оновлення її вторинних індексів. Адміністратор повинен видалити і повторно створити необхідні індекси.
У Hadoop програмісти або адміністратори часто змінюють властивості завдання для настройки продуктивності під час виконання. Незважаючи на те, що Big SQL намагається вибрати оптимальні властивості, їх можна, при необхідності, перевизначити на рівні сервера або запиту. Наприклад, перший оператор в лістингу 5 змінює властивість завдання MapReduce для конкретного з'єднання запиту. Він вказує, що кожний наступний запит буде використовувати одну задачу reducer на 100 МБ табличних даних. Потім цей параметр переопределяется, вказуючи, що наступні запити в цьому з'єднанні будуть використовувати одну задачу reducer на 200 МБ табличних даних.
Лістинг 5. Налаштування властивості завдання MapReduce
SET bigsql.reducers.byte.per.reducer = 104857600; - Всі завдання MapReduce, породжені усіма майбутніми запитами в цьому - з'єднанні, використовуватимуть 1 задачу reducer на 100 МБ табличних даних SELECT .... ; SET bigsql.reducers.byte.per.reducer = 209715200; - Тепер всі завдання MapReduce, породжені усіма майбутніми запитами в цьому - з'єднанні, використовуватимуть 1 задачу reducer на 200 МБ табличних даних SELECT .... ;
Висновок
Технологія Big SQL додає стандартний інтерфейс запитів до Hadoop-платформі IBM InfoSphere BigInsights. Хоча Big SQL робить BigInsights реляційної базою даних, вона надає користувачам SQL звичний спосіб взаємодії з цією набирає популярність середовищем для аналізу і зберігання великих даних.
У статті були описані основи Big SQL і висвітлені деякі відмінності між BigInsights (з його підтримкою Big SQL) і традиційними СУРБД. Щоб дізнатися більше, завантажте BigInsights Quick Start Edition і дотримуйтесь керівництву "Розробка запитів Big SQL для аналізу великих даних", що міститься в довідковій системі по продукту, або виберіть керівництво з колекції InfoSphere BigInsights (див. Розділ ресурси ).
Подякою
Автори дякують (в алфавітному порядку) Брюса Брауна (Bruce Brown), Сілін Чун (Seeling Cheung), Скотта Грея (Scott Gray), Марка Хаґера (Mark Hager), Еллен Паттерсон (Ellen Patterson) і Берта ван дер Ліндена (Bert Van der Linden), які надали матеріали для цієї статті або брали участь в її рецензуванні.
Ресурси для скачування
Схожі теми
Підпишіть мене на повідомлення до коментарів
Що ж все це означає для досвідченого адміністратор або розробника реляційної бази даних?