Настройка настраиваемого секционирования для секционирования аналитических данных хранилища
Область применения: Nosql Mongodb Гремлин
Пользовательское секционирование позволяет разделить данные аналитического хранилища по полям, которые часто используются в качестве фильтров в аналитических запросах, что приводит к повышению производительности запросов. Дополнительные информацию о пользовательском секционировании см. в статье о том, что такое пользовательское секционирование.
Чтобы использовать пользовательское секционирование, необходимо включить Azure Synapse Link в учетной записи Azure Cosmos DB. Подробнее см. в статье о том, как настроить Azure Synapse Link. Пользовательское выполнение секционирования можно активировать из записной книжки Azure Synapse Spark с помощью Azure Synapse Link для Azure Cosmos DB.
Примечание.
Чтобы воспользоваться преимуществами пользовательского секционирования, в учетных записях Azure Cosmos DB должен быть включен Azure Synapse Link. В настоящее время пользовательское секционирование поддерживается только для Azure Synapse Spark версии 2.0.
Примечание.
Synapse Link для API Gremlin теперь находится в предварительной версии. Вы можете включить Synapse Link в новых или существующих графах с помощью Azure CLI. Дополнительные сведения о настройке см . здесь.
Запуск задания пользовательского секционирования
Секционирование можно запустить из записной книжки Azure Synapse Spark с помощью Azure Synapse Link. Вы можете запланировать его выполнение в качестве фонового задания один или два раза в день или при необходимости выполнять его чаще. Вы также можете выбрать одно или несколько полей из набора данных в качестве ключа раздела аналитического хранилища.
Ниже приведены обязательные параметры конфигурации, необходимые для запуска пользовательского секционирования.
spark.cosmos.asns.execute.partitioning
- логическое значение, которое активирует пользовательское секционирование. По умолчанию используется значение false.spark.cosmos.asns.partition.keys
- ключи раздела с использованием форматированной строки языка DDL. Например: ReadDate String.spark.cosmos.asns.basePath
- базовый путь к хранилищу на основной учетной записи хранения Synapes, для которого нужно выполнить секционирование.
Примечание.
Выбрав несколько ключей раздела, вы сможете получить доступ к этим записям из того же секционированного хранилища с помощью basePath, указав ключ.
При запуске пользовательского секционирования можно использовать перечисленные ниже необязательные параметры конфигурации.
spark.cosmos.asns.merge.partitioned.files
— логическое значение, которое позволяет создавать по одному файлу для каждого значения раздела в каждом выполнении. По умолчанию используется значение false.spark.cosmos.asns.partitioning.maxRecordsPerFile
— максимальное количество записей в файле с одним разделом в секционированном хранилище. Если указана эта конфигурация иspark.cosmos.asns.merge.partitioned.files
, новые файлы создаются после того, как количество записей превышает значение maxRecordsPerFile. Эта конфигурация обычно необходима только для первоначального секционирования больших коллекций. Значение по умолчанию — 1 000 000.Если установить значение maxRecordsPerFile, но не настроить
spark.cosmos.asns.merge.partitioned.files
, записи могут быть разделены на несколько файлов, прежде чем будет достигнуто значение maxRecordsPerFile. Разделение файлов также зависит от доступного параллелизма в пуле.spark.cosmos.asns.partitioning.shuffle.partitions
— управляет параллелизмом во время записи разделов в секционированное хранилище. Эта конфигурация необходима только для первоначального секционирования для больших коллекций. Задается значение, равное количеству доступных ядер в пуле Spark. Значение по умолчанию — 200. Более низкие значения могут тратить ресурсы, если пул не используется для других рабочих нагрузок. Как правило, более высокое значение не вызывает проблем, так как некоторые задачи выполняются заранее и возможен запуск большего числа задач, пока выполняются медленные. Если вы хотите, чтобы задание секционирования завершалось быстрее, лучше увеличить размер пула.
spark.read\
.format("cosmos.olap") \
.option("spark.synapse.linkedService", "<enter linked service name>") \
.option("spark.cosmos.container", "<enter container name>") \
.option("spark.cosmos.asns.execute.partitioning", "true") \
.option("spark.cosmos.asns.partition.keys", "readDate String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
.option("spark.cosmos.asns.merge.partitioned.files", "true") \
.option("spark.cosmos.asns.partitioning.maxRecordsPerFile", "2000000") \
.option("spark.cosmos.asns.partitioning.shuffle.partitions", "400") \
.load()
Выполнение запросов в секционированном хранилище
Для выполнения запросов с поддержкой секционированного хранилища необходимы следующие две конфигурации:
spark.cosmos.asns.partition.keys
spark.cosmos.asns.basePath
В следующем примере показано, как использовать эти конфигурации для отправки запроса к вышеуказанному секционированному хранилищу и как фильтрация с помощью ключа раздела может использовать удаление лишнего в разделе. Секционирование этого хранилище выполняется с помощью поля ReadDate.
df = spark.read\
.format("cosmos.olap") \
.option("spark.synapse.linkedService", "<enter linked service name>") \
.option("spark.cosmos.container", "<enter container name>") \
.option("spark.cosmos.asns.partition.keys", "readDate String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
.load()
df_filtered = df.filter("readDate='2020-11-01 00:00:00.000'")
display(df_filtered.limit(10))
При выполнении приведенного выше фильтра ReadDate = '2021-11-01' из сканирования будут исключены данные, соответствующие значениям ReadDate, отличным от 2021-11-01.
Примечание.
Улучшения запросов с использованием секционированного хранилища применимы при выполнении запросов относительно следующих данных:
- кадры данных Spark, созданные из контейнера аналитического хранилища Azure Cosmos DB;
- таблицы Spark, указывающие на контейнер аналитического хранилища Azure Cosmos DB.
Следующие шаги
Дополнительные сведения см. в следующих документах:
- Что такое пользовательское секционирование в Azure Synapse Link для Azure Cosmos DB?
- Сведения об Azure Synapse Link для Azure Cosmos DB
- Общие сведения об аналитическом хранилище Azure Cosmos DB (предварительная версия)
- Начало работы с Azure Synapse Link для Azure Cosmos DB
- Часто задаваемые вопросы об Azure Synapse Link для Azure Cosmos DB