Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения:
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.keysspark.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