Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: База данных SQL Azure
Сегментированные базы данных распределяют строки по масштабируемому уровню данных. Во всех базах данных секционирования используется одна и та же схема — это называется горизонтальным секционированием. Используя эластичный запрос, можно создавать отчеты, охватывающие все базы данных в сегментированной базе данных.
Для быстрого начала ознакомьтесь с разделом Отчет для масштабируемых облачных баз данных (предварительная версия).
Подробнее о недробленных базах данных см. в статье "Запрос между облачными базами данных с различными схемами (предварительная версия)".
Необходимые компоненты
- Создайте карту сегментов с помощью клиентской библиотеки эластичной базы данных. см. статью "Горизонтальное масштабирование баз данных" с помощью диспетчера карт сегментов. Или используйте пример приложения в начале работы с средствами эластичной базы данных.
- Кроме того, см. статью "Миграция существующих баз данных для горизонтального масштабирования".
- Пользователь должен иметь разрешение ALTER ANY EXTERNAL DATA SOURCE. Это разрешение включено в разрешение ALTER DATABASE.
- Для обращения к базовому источнику данных необходимы разрешения ALTER ANY EXTERNAL DATA SOURCE.
Обзор
Эти инструкции позволяют представлять метаданные уровня сегментированных данных через запрос к эластичной базе данных.
- СОЗДАНИЕ ГЛАВНОГО КЛЮЧА
- СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ В ПРЕДЕЛАХ БАЗЫ ДАННЫХ
- СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ
- СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ
1.1. Создание главного ключа и учетных данных для конкретной базы данных
Учетные данные используются эластичным запросом для подключения к удаленным базам данных.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Примечание.
Убедитесь, что значение "<username>" не содержит суффикс "@servername".
1.2. Создание внешних источников данных
Синтаксис
<External_Data_Source> ::=
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
(TYPE = SHARD_MAP_MANAGER,
LOCATION = '<fully_qualified_server_name>',
DATABASE_NAME = '<shardmap_database_name>',
CREDENTIAL = <credential_name>,
SHARD_MAP_NAME = '<shardmapname>'
) [;]
Пример
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap'
);
Получение списка актуальных внешних источников данных:
select * from sys.external_data_sources;
Внешний источник данных ссылается на вашу карту сегментов. Затем эластичный запрос использует внешний источник данных и соответствующую карту сегментов для перебора баз данных, входящих в уровень данных.
Когда обрабатывается эластичный запрос, для чтения карты сегментов и доступа к данным в сегментах используются одни и те же учетные данные.
1.3. Создание внешних таблиц
Синтаксис
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name
( { <column_definition> } [ ,...n ])
{ WITH ( <sharded_external_table_options> ) }
) [;]
<sharded_external_table_options> ::=
DATA_SOURCE = <External_Data_Source>,
[ SCHEMA_NAME = N'nonescaped_schema_name',]
[ OBJECT_NAME = N'nonescaped_object_name',]
DISTRIBUTION = SHARDED(<sharding_column_name>) | REPLICATED |ROUND_ROBIN
Пример
CREATE EXTERNAL TABLE [dbo].[order_line](
[ol_o_id] int NOT NULL,
[ol_d_id] tinyint NOT NULL,
[ol_w_id] int NOT NULL,
[ol_number] tinyint NOT NULL,
[ol_i_id] int NOT NULL,
[ol_delivery_d] datetime NOT NULL,
[ol_amount] smallmoney NOT NULL,
[ol_supply_w_id] int NOT NULL,
[ol_quantity] smallint NOT NULL,
[ol_dist_info] char(24) NOT NULL
)
WITH
(
DATA_SOURCE = MyExtSrc,
SCHEMA_NAME = 'orders',
OBJECT_NAME = 'order_details',
DISTRIBUTION=SHARDED(ol_w_id)
);
Получение списка внешних таблиц из текущей базы данных:
SELECT * from sys.external_tables;
Удаление внешних таблиц:
DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]
Замечания
Предложение DATA_SOURCE
определяет внешний источник данных (карта сегментов), используемый для внешней таблицы.
SCHEMA_NAME
и OBJECT_NAME
пункты сопоставляют определение внешней таблицы с таблицей в другой схеме. Если опущено, предполагается, что схема удаленного объекта должна быть dbo
идентична заданному имени внешней таблицы. Это особенно необходимо, если имя удаленной таблицы уже занято в базе данных, где создается внешняя таблица. Например, вы хотите определить внешнюю таблицу для получения общего представления из представлений каталогов или динамических административных представлений, которые находятся на вашем развернутом уровне данных. Так как представления каталогов и динамические административные представления уже существуют локально, их имена нельзя использовать для определения внешней таблицы. Вместо этого используйте другое имя и используйте имя представления каталога или имя DMV в SCHEMA_NAME
и/или OBJECT_NAME
предложениях. (См. пример позже.)
Предложение DISTRIBUTION
указывает распределение данных, используемое для этой таблицы. Обработчик запросов использует сведения, предоставленные в DISTRIBUTION
предложении, для создания наиболее эффективных планов запросов.
-
SHARDED
означает, что данные горизонтально секционируются по базам данных. Ключ секционирования для распределения данных указывается в параметре<sharding_column_name>
. -
REPLICATED
означает, что идентичные копии таблицы присутствуют в каждой базе данных. Вы должны самостоятельно позаботиться о соответствии реплик во всех базах данных. -
ROUND_ROBIN
означает, что таблица горизонтально разделена с помощью метода распределения, зависящего от приложения.
Ссылка на уровень данных: язык DDL внешней таблицы ссылается на внешний источник данных. Во внешнем источнике данных указывается карта сегментов, в которой есть внешняя таблица, содержащая сведения, необходимые для поиска всех баз данных на вашем уровне данных.
Вопросы безопасности
Пользователи, имеющие доступ к внешней таблице, автоматически получают доступ к базовой удаленной таблице с учетными данными, указанными в определении внешнего источника данных. Старайтесь избегать нежелательного повышения прав с использованием учетных данных для внешнего источника данных. Методы GRANT или REVOKE применяются к внешней таблице так же, как и к обычной.
Определив внешний источник данных и внешние таблицы, вы можете использовать все возможности T-SQL для создания запросов к внешним таблицам.
Пример: запрос баз данных с горизонтальным секционированием
С помощью следующего запроса устанавливается трехстороннее соединение между хранилищами, заказами и строками заказов, при этом используется несколько статистических выражений и выборочный фильтр. Здесь предполагается, что используется (1) горизонтальное секционирование (сегментирование) и (2) что сегментирование хранилищ, заказов и строк заказов выполняется по столбцу с идентификатором хранилища. В этом случае эластичный запрос может выровнять соединения в сегментах и параллельно обработать ресурсоемкую часть запроса в сегментах.
select
w_id as warehouse,
o_c_id as customer,
count(*) as cnt_orderline,
max(ol_quantity) as max_quantity,
avg(ol_amount) as avg_amount,
min(ol_delivery_d) as min_deliv_date
from warehouse
join orders
on w_id = o_w_id
join order_line
on o_id = ol_o_id and o_w_id = ol_w_id
where w_id > 100 and w_id < 200
group by w_id, o_c_id
Хранимая процедура для удаленного выполнения T-SQL: sp_execute_remote
С функцией эластичных запросов вам становится доступна хранимая процедура, которая обеспечивает прямой доступ к сегментам. Хранимая процедура называется sp_execute_remote и может использоваться для выполнения удаленных хранимых процедур или кода T-SQL в удаленных базах данных. Она принимает следующие параметры.
- Имя источника данных (nvarchar): имя внешнего источника данных типа RDBMS.
- Запрос (nvarchar): запрос T-SQL, выполняемый на каждом сегменте.
- Объявление параметров (nvarchar) — необязательно. Строка с определениями типов данных для параметров, используемых в параметре запроса (например,
sp_executesql)
- Список значений параметров — необязательный: разделенный запятыми список значений параметров (например
sp_executesql
)
Использует sp_execute_remote
внешний источник данных, указанный в параметрах вызова, для выполнения заданной инструкции T-SQL в удаленных базах данных. Она использует учетные данные внешнего источника данных для подключения к базе данных диспетчера ShardMap и удаленным базам данных.
Пример:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Подключение для инструментов
Используйте обычные строки подключения SQL Server для подключения вашего приложения, инструментов бизнес-аналитики и интеграции данных к базе данных с определениями внешних таблиц. Убедитесь, что в качестве источника данных для вашего инструмента поддерживается SQL Server. Затем добавьте ссылку на запрос к эластичной базе данных, как к любой другой базе данных SQL Server, подключенной к приложению. После этого из своего инструмента или приложения вы сможете использовать внешние таблицы так, как если бы они были локальными таблицами.
Рекомендации
- Убедитесь, что брандмауэры баз данных SQL обеспечивают конечной базе данных с эластичными запросами доступ к базе данных карты сегментов и всем сегментам.
- Эластичный запрос не предполагает проверку или распределение данных в соответствии с внешней таблицей. Если фактическое распределение данных отличается от распределения, указанного в определении таблицы, запросы могут привести к непредвиденным результатам.
- Функция эластичных запросов в настоящее время не позволяет исключать сегменты, когда предикаты для ключа сегментирования безопасно исключают определенные сегменты из процесса обработки.
- Эластичные запросы оптимальны, когда основная часть вычислений может быть выполнена в сегментах. Обычно наиболее эффективны запросы с предикатами выборочных фильтров, дающие возможность вычисления в сегментах или соединениях путем секционирования ключей с выравниванием по секциям для всех сегментов. Другим шаблонам запросов может потребоваться загрузить большие объемы данных из сегментов в головной узел и работать плохо.
Связанный контент
- обзор эластичных запросов базы данных SQL Azure (предварительная версия)
- Начало работы с запросами между базами данных (вертикальное секционирование) (предварительная версия)
- Запрос среди облачных баз данных с различными схемами (предварительная версия)
- отчет по масштабируемым облачным базам данных (предварительная версия)