Aangepaste partitionering configureren voor het partitioneren van analytische opslaggegevens

VAN TOEPASSING OP: Nosql MongoDB Gremlin

Met aangepaste partitionering kunt u analytische opslaggegevens partitioneren op velden die vaak worden gebruikt als filters in analytische query's, wat resulteert in verbeterde queryprestaties. Zie het artikel over aangepaste partitionering voor meer informatie over aangepaste partitionering .

Als u aangepaste partitionering wilt gebruiken, moet u Azure Synapse Link inschakelen in uw Azure Cosmos DB-account. Zie voor meer informatie hoe u Azure Synapse Link configureert. De uitvoering van aangepaste partitionering kan worden geactiveerd vanuit Azure Synapse Spark-notebook met behulp van Azure Synapse Link voor Azure Cosmos DB.

Notitie

Voor Azure Cosmos DB-accounts moet Azure Synapse Link zijn ingeschakeld om te kunnen profiteren van aangepaste partitionering. Aangepaste partitionering wordt momenteel alleen ondersteund voor Azure Synapse Spark 2.0.

Notitie

Synapse Link voor Gremlin-API is nu in preview. U kunt Synapse Link inschakelen in uw nieuwe of bestaande grafieken met behulp van Azure CLI. Klik hier voor meer informatie over het configureren ervan.

Een aangepaste partitioneringstaak activeren

Partitionering kan worden geactiveerd vanuit een Azure Synapse Spark-notebook met behulp van Azure Synapse Link. U kunt plannen dat deze wordt uitgevoerd als een achtergrondtaak, één of twee keer per dag, of het kan vaker worden uitgevoerd als dat nodig is. U kunt ook een of meer velden uit de gegevensset kiezen als de partitiesleutel van de analytische opslag.

Hier volgen verplichte configuratieopties die vereist zijn om de uitvoering van aangepaste partitionering te activeren:

  • spark.cosmos.asns.execute.partitioning - Booleaanse waarde die de uitvoering van aangepaste partitionering activeert. De standaardwaarde is false.

  • spark.cosmos.asns.partition.keys - Partitiesleutel/s met behulp van DDL-opgemaakte tekenreeks. Bijvoorbeeld: ReadDate String.

  • spark.cosmos.asns.basePath - Het basispad voor het gepartitioneerde archief in het primaire Synapse-opslagaccount.

Notitie

Als u meerdere partitiesleutels kiest, hebt u toegang tot deze records in hetzelfde gepartitioneerde archief met het basePath dat de sleutel aangeeft.

Hieronder vindt u optionele configuratieopties die u kunt gebruiken bij het activeren van de uitvoering van aangepaste partitionering:

  • spark.cosmos.asns.merge.partitioned.files - Booleaanse waarde waarmee één bestand per partitiewaarde per uitvoering kan worden gemaakt. De standaardwaarde is Onwaar.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - Maximum aantal records in een bestand met één partitie in het gepartitioneerde archief. Als deze configuratie en de spark.cosmos.asns.merge.partitioned.files configuratie zijn opgegeven, worden nieuwe bestanden gemaakt zodra het aantal records de waarde maxRecordsPerFile overschrijdt. Deze configuratie is doorgaans alleen nodig voor initiële partitionering voor grotere verzamelingen. De standaardwaarde is 1.000.000.

    Wanneer u maxRecordsPerFile instelt, maar niet configureert spark.cosmos.asns.merge.partitioned.files, kunnen de records worden gesplitst over bestanden voordat ze het maximumRecordsPerFile bereiken. De bestandssplitsing is ook afhankelijk van de beschikbare parallelle uitvoering van de pool.

  • spark.cosmos.asns.partitioning.shuffle.partitions - Het beheert parallellisme tijdens gepartitioneerde schrijfbewerkingen naar het gepartitioneerde archief. Deze configuratie is alleen nodig voor initiële partitionering voor grotere verzamelingen. Deze is ingesteld op het aantal beschikbare kernen in de Spark-pool. De standaardwaarde is 200. Lagere waarden kunnen resources verspillen als de pool niet wordt gebruikt voor andere workloads. Een hogere waarde veroorzaakt meestal geen problemen, omdat sommige taken vroeg worden voltooid en meer taken kunnen starten terwijl de trage taken worden uitgevoerd. Als u wilt dat de partitioneringstaak sneller wordt voltooid, is het een goede gewoonte om de poolgrootte te vergroten.

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()

Query uitvoeren met gepartitioneerd archief

De volgende twee configuraties zijn vereist voor het uitvoeren van query's met ondersteuning voor gepartitioneerde winkels:

  • spark.cosmos.asns.partition.keys
  • spark.cosmos.asns.basePath

In het volgende voorbeeld ziet u hoe u deze configuraties gebruikt om een query uit te voeren op het bovenstaande gepartitioneerde archief en hoe filteren met behulp van de partitiesleutel gebruik kan maken van het verwijderen van partities. Dit gepartitioneerde archief wordt gepartitioneerd met behulp van het veld 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))

Het bovenstaande ReadDate = '2021-11-01' filter elimineert de gegevens die overeenkomen met readDate-waarden die niet overeenkomen met 2021-11-01 tijdens het scannen, tijdens de uitvoering.

Notitie

De queryverbeteringen met behulp van een gepartitioneerd archief zijn van toepassing wanneer query's worden uitgevoerd op het volgende:

  • De Spark Dataframes die zijn gemaakt op basis van de analytische opslagcontainer van Azure Cosmos DB en
  • De Spark-tabellen die verwijzen naar de analytische opslagcontainer van Azure Cosmos DB.

Volgende stappen

Zie de volgende documenten voor meer informatie: