Соединитель сегментированного SQL
Важный
Azure HDInsight на AKS вышел из эксплуатации 31 января 2025 г. Дополнительные сведения из этого объявления.
Необходимо перенести рабочие нагрузки в Microsoft Fabric или эквивалентный продукт Azure, чтобы избежать резкого завершения рабочих нагрузок.
Важный
Эта функция сейчас доступна в предварительной версии. Дополнительные условия использования для предварительных версий Microsoft Azure включают дополнительные юридические термины, применимые к функциям Azure, которые находятся в бета-версии, в предварительной версии или в противном случае еще не выпущены в общую доступность. Сведения об этой конкретной предварительной версии см. в Azure HDInsight в предварительной версии AKS. Для вопросов или предложений функций отправьте запрос на AskHDInsight с подробными сведениями и следите за нашими обновлениями в Azure HDInsight Community.
Соединитель сегментированного SQL позволяет выполнять запросы по данным, распределенным по любому количеству серверов SQL.
Необходимые условия
Чтобы подключиться к сегментированных серверам SQL, вам потребуется:
- SQL Server 2012 или более поздней версии или База данных SQL Azure.
- Сетевой доступ от координатора и работников Trino к SQL Server. Порт 1433 — порт по умолчанию.
Общая конфигурация
Соединитель может запрашивать несколько серверов SQL в качестве одного источника данных. Создайте файл свойств каталога и используйте connector.name=sharded-sql
для использования сегментированного соединителя SQL.
Пример конфигурации:
connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
Свойство | Описание |
---|---|
connector.name | Имя соединителя для сегментированного SQL, которое должно быть sharded_sqlserver |
пользователь соединения | Имя пользователя в SQL Server |
пароль подключения | Пароль пользователя в SQL Server |
Сегментированные кластеры | Необходимо задать значение TRUE для соединителя sharded-sql |
местоположение-конфигурации-шарда | расположение конфигурации, определяющей схему сегментирования |
Проверка подлинности источника данных
Соединитель использует проверку подлинности с помощью пользовательского пароля для запроса серверов SQL. Ожидается, что тот же пользователь, указанный в конфигурации, будет проходить проверку подлинности на всех серверах SQL.
Определение схемы
Соединитель предполагает 2D разделение/разбитое на сегменты распределение физических данных на серверах SQL. Определение схемы описывает этот макет. В настоящее время поддерживается только определение схемы сегментирования на основе файлов.
Расположение json схемы сегментирования можно указать в свойствах каталога, таких как shard-config-location=etc/shard-schema.json
.
Настройте JSON-схему шардирования с нужными свойствами, чтобы указать структуру.
Следующий JSON-файл описывает конфигурацию шардированного SQL-соединителя Trino. Ниже приведена разбивка структуры:
таблицы: массив объектов, каждый из которых представляет таблицу в базе данных. Каждый объект таблицы содержит следующее:
- схема: имя схемы таблицы, которая соответствует базе данных на сервере SQL.
- имя: название таблицы.
-
sharding_schema: имя схемы сегментирования, связанной с таблицей, которая выступает в качестве ссылки на
sharding_schema
, описанную в следующих шагах.
sharding_schema: массив объектов, каждый из которых представляет схему сегментирования. Каждый объект схемы сегментирования содержит следующее:
- имя: имя схемы сегментирования.
- partitioned_by: массив, содержащий один или несколько столбцов, по которым секционируется схема сегментирования.
- bucket_count(необязательно): целое число, представляющее общее количество сегментов, количество которых по умолчанию равно 1.
- bucketed_by(необязательно): массив, содержащий один или несколько столбцов, по которым данные сегментированы, обратите внимание, что секционирование и сегментирование являются иерархическими, что означает, что каждая секция сегментирована.
-
partition_map: массив объектов, каждый из которых представляет секцию в схеме сегментирования. Каждый объект раздела содержит следующее:
-
раздела: значение раздела, указанное в форме
partition-key=partitionvalue
-
сегменты: массив объектов, каждый из которых представляет сегмент в секции, каждый элемент массива представляет реплику, трино запрашивает любой из них случайным образом, чтобы получить данные для секции или контейнеров. Каждый объект шарда содержит:
- connectionUrl: URL-адрес подключения JDBC к базе данных шарда.
-
раздела: значение раздела, указанное в форме
Например, если вы хотите запросить две таблицы lineitem
и part
с помощью этого соединителя, их можно указать следующим образом.
"tables": [
{
"schema": "dbo",
"name": "lineitem",
"sharding_schema": "schema1"
},
{
"schema": "dbo",
"name": "part",
"sharding_schema": "schema2"
}
]
Заметка
Соединитель ожидает, что все таблицы будут присутствовать в SQL Server, указанном в схеме для таблицы, если это не так, запросы к этой таблице не выполнятся.
В предыдущем примере можно указать макет таблицы lineitem
следующим образом:
"sharding_schema": [
{
"name": "schema1",
"partitioned_by": [
"shipmode"
],
"bucketed_by": [
"partkey"
],
"bucket_count": 10,
"partition_map": [
{
"partition": "shipmode='AIR'",
"buckets": 1-7,
"shards": [
{
"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test1"
}
]
},
{
"partition": "shipmode='AIR'",
"buckets": 8-10,
"shards": [
{
"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test2"
}
]
}
]
}
]
В этом примере описано:
- Данные для элемента строки таблицы, разделённые по
shipmode
. - Каждая секция содержит 10 контейнеров.
- Каждая секция разбивается на части согласно столбцу bucketed_by
partkey
. - Баки
1-7
для значения партицииAIR
находятся в базе данныхtest1
. - Бакеты
8-10
для значения разделаAIR
расположены в базе данныхtest2
. - Шарды — это массив
connectionUrl
. Каждый элемент массива представляет набор реплик. Во время выполнения запроса Trino выбирает сегмент случайным образом из массива для запроса данных.
Очистка секций и контейнеров
Соединитель оценивает ограничения запросов во время планирования и действует на основе предоставленных предикатов запроса. Это помогает ускорить производительность запросов и позволяет соединителю запрашивать большие объемы данных.
Формула сегментирования для определения назначений с помощью реализации хэш-функции murmur, которая описывается здесь .
Сопоставление типов
Коннектор Sharded SQL поддерживает те же сопоставления типов, что и коннектор SQL Server сопоставления типов.
Pushdown
Поддерживаются следующие pushdown-оптимизации:
- Ограничение pushdown
- Агрегаты распределения
- Упрощение операции соединения
JOIN
операцию можно отправить на сервер только в том случае, если соединитель определяет, что данные колокируются для таблиц сборки и проверки. Соединитель определяет, что данные коллокируются, когда схема шардинга для таблицы left
и таблицы right
одинаковая.
— условия соединения — это супермножество ключей секционирования и сегментации.
Чтобы использовать оптимизацию JOIN
pushdown, свойство каталога join-pushdown.strategy
должно иметь значение EAGER
AGGREGATE
pushdown для этого коннектора может быть выполнен только для дистрибутивных агрегатов. Для включения этой оптимизации необходимо установить параметр конфигурации оптимизатора optimizer.partial-aggregate-pushdown-enabled
на значение true
.