Поделиться через


Соединитель сегментированного 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.