Что такое Big SQL

Информация о SQL-технологии IBM для Hadoop в помощь пользователям СУРБД

Если вы специализируетесь на технологии управления СУРБД, то наверняка слышали о "больших данных" и проекте с открытым исходным кодом Apache Hadoop. Возможно, вы также слышали о новой технологии IBM Big SQL, которая позволяет пользователям InfoSphere® BigInsights™ обращаться к данным Hadoop, используя стандартный SQL. Интересно? Эта статья отвечает на многие вопросы о технологии IBM Big SQL, которые возникают у пользователей СУРБД.

Синтия M. Саракко (Cynthia M. Saracco), старший инженер-программист, IBM

C. M. Саракко (Cynthia M. Saracco) работает в исследовательской лаборатории компании IBM в Силиконовой долине, в объединении DB2 XML. Сфера ее служебных интересов – управление базами данных, XML, разработка веб-приложений и смежные темы.


developerWorks Master author
        level

Уттам Джайн, архитектор программного обеспечения, IBM

Уттам Джайн (Uttam Jain) – фотографияУттам Джайн (Uttam Jain) работает архитектором программного обеспечения в лаборатории IBM в Силиконовой долине. До прихода в проект Big SQL 12 лет занимался различными вопросами DB2 для Linux, UNIX и Windows (компилятор, среда времени исполнения, память/ядро). В сферу его интересов входят распределенные системы и оптимизация запросов.



29.10.2013

Большие данные – это большая проблема для ИТ-специалистов, занимающихся анализом данных и управлением информацией. В то же время многие специалисты очень хотят научиться работать с большими данными, потому что 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

Как показано в верхней части рисунка, 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
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), которые предоставили материалы для этой статьи или участвовали в ее рецензировании.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

  • Обсуждайте Big SQL и общайтесь с другими пользователями на форуме BigInsights.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=950670
ArticleTitle=Что такое Big SQL
publish-date=10292013