Konfigurera anpassad partitionering för partitionering av analyslagringsdata

GÄLLER FÖR: Nosql Mongodb Gremlin

Med anpassad partitionering kan du partitionera analyslagringsdata på fält som ofta används som filter i analysfrågor, vilket ger bättre frågeprestanda. Mer information om anpassad partitionering finns i artikeln om anpassad partitionering .

Om du vill använda anpassad partitionering måste du aktivera Azure Synapse Link på ditt Azure Cosmos DB-konto. Mer information finns i konfigurera Azure Synapse Link. Anpassad partitioneringskörning kan utlösas från Azure Synapse Spark-notebook-filen med hjälp av Azure Synapse Link för Azure Cosmos DB.

Kommentar

Azure Cosmos DB-konton bör ha Azure Synapse Link aktiverat för att dra nytta av anpassad partitionering. Anpassad partitionering stöds för närvarande endast för Azure Synapse Spark 2.0.

Kommentar

Synapse Link för Gremlin API är nu i förhandsversion. Du kan aktivera Synapse Link i dina nya eller befintliga diagram med hjälp av Azure CLI. Klicka här om du vill ha mer information om hur du konfigurerar det.

Utlösa ett anpassat partitioneringsjobb

Partitionering kan utlösas från en Azure Synapse Spark-notebook-fil med hjälp av Azure Synapse Link. Du kan schemalägga att det ska köras som ett bakgrundsjobb, en eller två gånger om dagen, eller så kan det köras oftare om det behövs. Du kan också välja ett eller flera fält från datauppsättningen som partitionsnyckel för analysarkivet.

Följande är obligatoriska konfigurationsalternativ som krävs för att utlösa anpassad partitioneringskörning:

  • spark.cosmos.asns.execute.partitioning – Booleskt värde som utlöser anpassad partitioneringskörning. Standardvärdet är "false".

  • spark.cosmos.asns.partition.keys – Partitionsnyckel/s med DDL-formaterad sträng. Till exempel: ReadDate String.

  • spark.cosmos.asns.basePath – Bassökvägen för det partitionerade arkivet på det primära Synapse-lagringskontot.

Kommentar

Om du väljer flera partitionsnycklar kan du komma åt dessa poster från samma partitionerade arkiv med basePath som anger nyckeln.

Följande är valfria konfigurationsalternativ som du kan använda när du utlöser anpassad partitioneringskörning:

  • spark.cosmos.asns.merge.partitioned.files – Booleskt värde som gör det möjligt att skapa en enda fil per partitionsvärde per körning. Standardvärdet är false.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile – Maximalt antal poster i en enskild partitionerad fil i det partitionerade arkivet. Om den här konfigurationen spark.cosmos.asns.merge.partitioned.files och anges skapas nya filer när antalet poster överskrider maxRecordsPerFile-värdet. Den här konfigurationen behövs vanligtvis endast för inledande partitionering för större samlingar. Standardvärdet är 1 000 000.

    När du anger maxRecordsPerFile men inte konfigurerar spark.cosmos.asns.merge.partitioned.fileskan posterna delas upp mellan filer innan de når maxRecordsPerFile. Fildelningen beror också på den tillgängliga parallelliteten i poolen.

  • spark.cosmos.asns.partitioning.shuffle.partitions – Den styr parallellitet under partitionerade skrivningar till det partitionerade arkivet. Den här konfigurationen behövs endast för inledande partitionering för större samlingar. Det är inställt på antalet tillgängliga kärnor i Spark-poolen. Standardvärdet är 200. Lägre värden kan slösa resurser om poolen inte används för andra arbetsbelastningar. Högre värde orsakar vanligtvis inte problem, eftersom vissa uppgifter slutförs tidigt och kan starta fler aktiviteter medan de långsamma körs. Om du vill att partitioneringsjobbet ska slutföras snabbare är det bra att öka poolstorleken.

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

Frågekörning med partitionerat arkiv

Följande två konfigurationer krävs för att köra frågor med stöd för partitionerat arkiv:

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

I följande exempel visas hur du använder dessa konfigurationer för att köra frågor mot det partitionerade arkivet ovan och hur filtrering med partitionsnyckeln kan använda partitionsrensningen. Det partitionerade arkivet partitioneras med hjälp av fältet "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))

Filtret ReadDate = '2021-11-01' ovan eliminerar data som motsvarar andra ReadDate-värden än 2021-11-01 från genomsökningen under körningen.

Kommentar

Frågeförbättringarna med partitionerat arkiv gäller när frågor körs på följande sätt:

  • Spark Dataframes som skapats från Azure Cosmos DB-analysarkivcontainern och
  • Spark-tabellerna som pekar på Azure Cosmos DB-analysarkivcontainern.

Nästa steg

Mer information finns i följande dokument: