Обзор эластичных запросов к базе данных SQL Azure (предварительная версия)
Применимо к: База данных SQL Azure
Функция эластичных запросов (предварительная версия) дает возможность выполнять запросы Transact-SQL, охватывающие сразу несколько баз данных в Базе данных SQL Azure. Эта возможность позволяет создавать межбазовые запросы для доступа к удаленным таблицам. Также вы можете подключать средства Майкрософт и сторонних производителей (Excel, PowerBI, Tableau и т. д.) для выполнения запросов на разных уровнях данных со множеством баз данных. С помощью этой функции можно горизонтально увеличивать масштаб запросов до уровней большого объема данных и визуализировать результаты в отчетах по бизнес-аналитике (BI).
Почему рекомендуется использовать эластичные запросы
База данных SQL Azure
В службе "База данных SQL Azure" можно выполнять запросы к базам данных полностью на языке T-SQ. Это позволяет выполнять запросы к удаленным базам данных в режиме только для чтения, а также дает возможность текущим пользователям сервера SQL Server перемещать приложения в Базу данных SQL, применяя имена, состоящие из трех или четырех частей, либо связанный сервер.
Доступно на всех уровнях служб
Эластичный запрос поддерживается на всех уровнях служб Базы данных SQL Azure. Сведения об ограничениях производительности для нижних уровней служб см. в разделе "Ограничения предварительной версии" ниже.
Отправка параметров в удаленные базы данных
Эластичные запросы к удаленным базам данных теперь могут отправлять параметры SQL для выполнения.
Выполнение хранимой процедуры
Выполнить вызовы удаленных хранимых процедур или удаленных функций можно с помощью процедуры sp_execute _remote.
Гибкость
Функция эластичных запросов позволяет внешним таблицам ссылаться на удаленные таблицы с разными именами схем или таблиц.
Сценарии применения эластичных запросов
Основная задача лежит в области упрощения сценариев запросов, когда строки, предоставленные несколькими базами данных, объединяются в один общий набор результатов. Запрос может быть создан либо напрямую пользователем или приложением, либо косвенно — с помощью средств, которые подключены к базе данных. Это особенно полезно при создании отчетов с помощью коммерческих средств бизнес-аналитики, интеграции данных или любого приложения, которое нельзя изменить. Функция эластичных запросов позволяет выполнять межбазовые запросы с использованием уже знакомой процедуры подключения к SQL Server в таких средствах, как Excel, Power BI, Tableau или Cognos. Кроме того, эластичный запрос не только обеспечивает доступ ко всей коллекции баз данных через запросы, выданные SQL Server Management Studio или Visual Studio, но и упрощает обработку межбазовых запросов из Entity Framework или других сред ORM. На рисунке 1 показан сценарий, в котором существующее облачное приложение (использующее клиентскую библиотеку эластичной базы данных) основывается на уровне масштабируемых данных, а функция эластичных запросов используется для создания межбазовых отчетов.
Рисунок 1. Эластичный запрос на уровне масштабируемых данных
Пользовательские сценарии эластичных запросов могут характеризоваться следующими топологиями:
- Вертикальное секционирование — межбазовые запросы (топология 1): вертикальное разделение данных между несколькими базами данных в рамках одного уровня. Как правило, разные наборы таблиц расположены в разных базах данных. Это означает, что схемы разных баз данных различаются. Например, все таблицы, связанные с данными инвентаризации, хранятся в одной базе данных, а таблицы, связанные с учетом, — в другой. Использование подобной топологии предполагает использование первой базы данных для выполнения запросов или создания отчетов по таблицам в нескольких базах данных.
- Горизонтальное секционирование — сегментирование (топология 2): горизонтальное разделение данных для распределения строк в рамках масштабируемого уровня данных. При таком подходе схемы всех включенных баз данных являются идентичными. Такой подход также называется сегментированием. Сегментирование может выполняться с помощью (1) библиотеки средств эластичной базы данных или (2) как самостоятельное сегментирование. Эластичные запросы используются для создания запросов или построения отчетов на основе нескольких сегментов. Сегменты обычно являются базами данных в эластичном пуле. Эластичные запросы предлагают эффективный способ одновременного обращения ко всем базам данных эластичного пула, если они совместно используют общую схему.
Примечание.
Эластичные запросы лучше всего подходят для создания отчетов, где большую часть обработки (фильтрацию, агрегирование) можно выполнить на стороне внешнего источника. Они не подходят для операций ETL, в ходе которых большой объем данных передается из удаленных баз данных. Для сценариев, предусматривающих значительные рабочие нагрузки для подготовки отчетности или хранения данных с выполнением более сложных запросов, вы можете использовать Azure Synapse Analytics.
Вертикальное секционирование — межбазовые запросы
Сведения о том, как начать писать код, см. в статье Приступая к работе с межбазовыми запросами (вертикальное секционирование) (предварительная версия).
Эластичные запросы можно использовать для предоставления доступа к данным, находящимся в одной из баз данных Базы данных SQL, другим базам данных из этой службы. Это позволяет добавлять в запросы из одной базы данных ссылки на таблицы в любой другой удаленной базе данных, подключенной к Базе данных SQL. Первым этапом является определение внешнего источника данных для каждой удаленной базы данных. Внешний источник данных определяется в локальной базе данных, из которой необходимо получить доступ к таблицам, расположенным в удаленной базе данных. Вносить изменения в удаленную базу данных не нужно. В стандартных сценариях вертикального секционирования, когда с разными базами данных используются разные схемы, эластичные запросы позволяют решать такие стандартные задачи, как доступ к ссылочным данным и создание межбазовых запросов.
Внимание
Требуется наличие разрешения ALTER ANY EXTERNAL DATA SOURCE. Это разрешение включено в разрешение ALTER DATABASE. Для обращения к базовому источнику данных необходимы разрешения ALTER ANY EXTERNAL DATA SOURCE.
Ссылочные данные: топология используется для управления ссылочными данными. На приведенном ниже рисунке две таблицы (T1 и T2) со ссылочными данными хранятся в выделенной базе данных. Как показано на рисунке, используя эластичный запрос, вы можете получить удаленный доступ к таблицам T1 и T2 из других баз данных. Топологию 1 рекомендуется использовать, если ссылочные таблицы имеют небольшой размер или если в удаленных запросах к таким таблицам используются предикаты селекции.
Рисунок 2. Вертикальное секционирование — использование эластичных запросов для обращения к ссылочным данным
Перекрестные запросы: эластичные запросы позволяют реализовывать сценарии, требующие выполнения запросов по нескольким базам данных SQL. На рисунке 3 показаны четыре разных базы данных: "Управление отношениями с клиентами", "Инвентарные данные", "Управление персоналом" и "Продукты". Запросам, выполняемым в одной из этих баз данных, требуется доступ к одной или всем базам данным. Используя эластичные запросы, вы можете настроить свою базу, выполнив несколько простых инструкций DDL в каждой из этих четырех баз данных. После однократной настройки доступ к удаленной таблице будет предоставятся в виде ссылки на локальную таблицу в запросах T-SQL или используемых средствах бизнес-аналитики. Этот подход рекомендуется применять, когда удаленные запросы не возвращают большие объемы.
Рисунок 3. Вертикальное секционирование — использование эластичных запросов для межбазовых запросов
Далее описана настройка эластичных запросов к базе данных при вертикальном секционировании с необходимостью доступа к таблице, хранящейся в удаленной базе данных в Базе данных SQL с такой же схемой.
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource of type RDBMS
- CREATE/DROP EXTERNAL TABLE mytable
Выполнив эти инструкции DDL, вы получите доступ к удаленной таблице mytable как к локальной таблице. База данных SQL Azure автоматически открывает подключение к удаленной базе данных, обрабатывает запрос к удаленной базе данных и возвращает результаты.
Горизонтальное секционирование (сегментирование)
Чтобы использовать эластичные запросы для выполнения задач отчетности на уровне горизонтально секционированных (сегментированных) данных, базы данных на этом уровне должны быть представлены с помощью карты сегментов эластичной базы данных. Как правило, в этом сценарии используется только одна карта сегментов, а роль точки входа для запросов отчетности выполняет выделенная база данных с поддержкой эластичных запросов (головной узел). Доступ к карте сегментов требуется только для этой выделенной базы данных. На рисунке 4 показана топология, конфигурация которой включает базу данных эластичных запросов и карту сегментов. Дополнительные сведения о клиентской библиотеке эластичной базы данных и о создании карт сегментов см. в статье Развертывание баз данных с использованием диспетчера карты сегментов.
Рисунок 4. Горизонтальное секционирование — использование эластичных запросов для создания отчетности по уровням сегментированных данных
Примечание.
База данных с поддержкой эластичных запросов (головной узел) может быть отдельной базой или базой данных, на которой размещена карта сегментов. Независимо от выбранной конфигурации убедитесь, что уровень служб и объем вычислительных ресурсов базы данных достаточно высок для обработки ожидаемого количества запросов и запросов на вход.
Ниже описана поэтапная настройка эластичных запросов к базе данных при горизонтальном секционировании, требующем доступа к набору таблиц, которые находятся (как правило) в нескольких удаленных базах данных в службе "База данных SQL".
- CREATE MASTER KEY mymasterkey
- CREATE DATABASE SCOPED CREDENTIAL mycredential
- Создание карты сегментов для представления уровня данных с помощью клиентской библиотеки эластичной базы данных.
- CREATE/DROP EXTERNAL DATA SOURCE mydatasource of type SHARD_MAP_MANAGER
- CREATE/DROP EXTERNAL TABLE mytable
Выполнив эти шаги, вы получите доступ к горизонтально секционированной таблице mytable как к локальной таблице. База данных SQL Azure автоматически открывает несколько параллельных подключений к удаленным базам данных, хранящим таблицы, обрабатывает запросы к удаленным базам данных и возвращает результаты. Дополнительные сведения о действиях, требуемых при горизонтальном секционировании, см. в статье Отчеты по масштабируемым облачным базам данных (предварительная версия).
Начальные сведения для написания кода см. в статье Отчеты по масштабируемым облачным базам данных (предварительная версия).
Внимание
Успешное выполнение эластичного запроса к большому набору баз данных во многом зависит от доступности каждой из баз во время выполнения запроса. Если одна из ни х недоступна, весь запрос завершится ошибкой. Если вы планируете запрашивать сотни или тысячи баз данных одновременно, убедитесь, что клиентское приложение имеет встроенную логику повторных попыток или рассмотрите возможность использования эластичных заданий и запроса небольших подмножеств баз данных, консолидации результатов каждого запроса в одном месте назначения.
Запросы T-SQL
Определив внешние источники данных и внешние таблицы, вы можете использовать уже обычные строки подключения к SQL Server для соединения с базами данных, в которых определены внешние таблицы. Затем через это подключение можно выполнить инструкции T-SQL применимо к внешним таблицам. При этом будут действовать описанные ниже ограничения. Дополнительные сведения о запросах T-SQL и их примеры можно найти в разделах документации по горизонтальному и вертикальному секционированию.
Подключение для инструментов
Используйте обычные строки подключения к SQL Server, чтобы подключить приложения, а также средства бизнес-аналитики и интеграции данных к базам данных, содержащих внешние таблицы. Убедитесь, что в качестве источника данных для вашего инструмента поддерживается SQL Server. После подключения обратитесь к базе данных эластичных запросов и внешним таблицам в этой базе данных, как при подключении к любой другой базе данных SQL Server с помощью какого-либо средства.
Внимание
Эластичные запросы поддерживаются только при подключении с проверкой подлинности SQL.
Себестоимость
Функция эластичных запросов включена в стоимость Базы данных SQL Azure. Обратите внимание: несмотря на поддержку топологий, в которых удаленные базы данных и конечная точка эластичного запроса находятся в разных центрах обработки данных, стоимость вывода данных из удаленных баз данных рассчитывается по обычным тарифам Azure.
Ограничения предварительной версии
- Выполнение первого эластичного запроса может занять несколько минут для небольших ресурсов уровня служб "Стандартный" и "Общего назначения". Это время требуется для загрузки функций, связанных с эластичными запросами. На более высоких уровнях служб и с большим объемом вычислительных ресурсов скорость загрузки будет выше.
- Сценарии для внешних источников данных или внешних таблиц из SSMS или SSDT в настоящее время не поддерживаются.
- Функции импорта и экспорта Базы данных SQL сейчас не поддерживают внешние источники данных и внешние таблицы. Если вам нужно использовать функции импорта и экспорта, удалите эти объекты перед экспортом и создайте их заново после импорта.
- Сейчас эластичные запросы поддерживает доступ только для чтения к внешним таблицам. Тем не менее вы можете использовать полный набор функций Transact-SQL при работе с базой данных, в которой определена внешняя таблица. Это может быть полезно для сохранения временных результатов (например, с помощью инструкции SELECT <список_столбцов> INTO <локальная_таблица>) или для определения хранимых процедур в базе данных эластичных запросов со ссылками на внешние таблицы.
- Определения внешних таблиц не поддерживают типы LOB (в том числе пространственные типы), за исключением nvarchar(max). Обойти это ограничение можно, создав представление в удаленной базе данных с преобразованием типа LOB в тип nvarchar(max). Затем нужно определить внешнюю таблицу применимо к этому представлению (а не базовой таблице) и выполнить обратное преобразование в исходный тип LOB для запросов.
- Столбцы типа данных nvarchar(max) в результирующем наборе отключают расширенные методы пакетной обработки, используемые в реализации эластичных запросов и могут повлиять на производительность запроса для порядка величины или даже два порядка величины в случаях, когда в результате запроса передается большое количество нерегламентированных данных.
- Статистика по столбцам для внешних таблиц в настоящее время не поддерживается. Статистика по таблицам поддерживается, но она создается вручную.
- В Базе данных SQL Azure не поддерживаются курсоры для внешних таблиц.
- Эластичные запросы поддерживает только База данных SQL Azure. Нельзя выполнять их к экземпляру SQL Server.
- Приватные каналы сейчас не поддерживают эластичные запросы для тех баз данных, которые являются целевыми объектами внешних источников данных.
Поделитесь своим мнением
Оставьте свой отзыв об эластичных запросах на форумах MSDN или сайте Stack Overflow. Мы будем признательны за любые отзывы о нашем сервисе, в том числе за сообщения о недостатках, недоработках и недостающих функциях.
Следующие шаги
- Руководств по вертикальному секционированию см. в статье Приступая к работе с межбазовыми запросами (вертикальное секционирование) (предварительная версия).
- Описание синтаксиса и примеры запросов вертикально секционированных данных см. в разделе Запрос к нескольким облачным базам данных с разными схемами (предварительная версия).
- Руководство по горизонтальному секционированию (сегментированию) см. в статье Отчеты по масштабируемым облачным базам данных (предварительная версия).
- Описание синтаксиса и примеры запросов горизонтально секционированных данных см. в разделе Отчеты по масштабируемым облачным базам данных (предварительная версия).
- В описании sp_execute _remote приведена хранимая процедура, которая выполняет инструкцию Transact-SQL для отдельной удаленной базы данных SQL Azure или набора баз данных, выступающих в качестве сегментов в схеме горизонтального секционирования.