Konfigurace vlastního dělení na data analytického úložiště oddílů

PLATÍ PRO: NoSQL MongoDB Gremlin

Vlastní dělení umožňuje rozdělit data analytického úložiště na pole, která se běžně používají jako filtry v analytických dotazech, což vede k lepšímu výkonu dotazů. Další informace o vlastním dělení najdete v článku o vlastním dělení .

Pokud chcete použít vlastní dělení, musíte ve svém účtu služby Azure Cosmos DB povolit Azure Synapse Link. Další informace najdete v tématu konfigurace Azure Synapse Linku. Spuštění vlastního dělení je možné aktivovat z poznámkového bloku Azure Synapse Spark pomocí Azure Synapse Linku pro Azure Cosmos DB.

Poznámka:

Účty Služby Azure Cosmos DB by měly mít povolenou službu Azure Synapse Link, aby mohly využívat vlastní dělení. Vlastní dělení se v současné době podporuje jenom pro Azure Synapse Spark 2.0.

Poznámka:

Synapse Link pro rozhraní Gremlin API je teď ve verzi Preview. Synapse Link můžete povolit v nových nebo existujících grafech pomocí Azure CLI. Další informace o tom, jak ho nakonfigurovat, potřebujete kliknutím sem.

Aktivace vlastní úlohy dělení

Dělení je možné aktivovat z poznámkového bloku Azure Synapse Spark pomocí Azure Synapse Linku. Můžete naplánovat jeho spuštění jako úlohu na pozadí, jednou nebo dvakrát denně, nebo ji můžete v případě potřeby spustit častěji. Jako klíč oddílu analytického úložiště můžete také vybrat jedno nebo více polí z datové sady.

Následují povinné možnosti konfigurace, které jsou potřeba k aktivaci vlastního spuštění dělení:

  • spark.cosmos.asns.execute.partitioning – Logická hodnota, která aktivuje vlastní provádění dělení. Výchozí hodnota je false.

  • spark.cosmos.asns.partition.keys – Klíč oddílu /s pomocí řetězce formátovaného DDL. Příklad: ReadDate String.

  • spark.cosmos.asns.basePath – Základní cesta pro dělené úložiště v primárním účtu úložiště Synapse.

Poznámka:

Pokud zvolíte více klíčů oddílů, můžete k těmto záznamům přistupovat ze stejného rozděleného úložiště pomocí basePath označující klíč.

Následují volitelné možnosti konfigurace, které můžete použít při aktivaci vlastního spuštění dělení:

  • spark.cosmos.asns.merge.partitioned.files – Logická hodnota, která umožňuje vytvořit jeden soubor na hodnotu oddílu na spuštění. Výchozí hodnotou je false.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile – Maximální počet záznamů v souboru s jedním oddílem v děleném úložišti. Pokud je tato konfigurace a spark.cosmos.asns.merge.partitioned.files zadaná, vytvoří se nové soubory, jakmile počet záznamů překročí hodnotu maxRecordsPerFile. Tato konfigurace je obvykle nutná pouze pro počáteční dělení větších kolekcí. Výchozí hodnota je 1 000 000.

    Když nastavíte maxRecordsPerFile, ale nenakonfigurujete spark.cosmos.asns.merge.partitioned.files, záznamy se můžou před dosažením maxRecordsPerFile rozdělit mezi soubory. Rozdělení souboru také závisí na dostupném paralelismu fondu.

  • spark.cosmos.asns.partitioning.shuffle.partitions – Řídí paralelismus během dělených zápisů do děleného úložiště. Tato konfigurace je nutná pouze pro počáteční dělení větších kolekcí. Nastaví se na počet dostupných jader ve fondu Sparku. Výchozí hodnota je 200. Nižší hodnoty můžou ztrácet prostředky, pokud se fond nepoužívá pro jiné úlohy. Vyšší hodnota obvykle nezpůsobuje problémy, protože některé úkoly se dokončí brzy a můžou spustit více úkolů, zatímco pomalé úkoly se spouštějí. Pokud chcete, aby se úloha dělení dokončila rychleji, je vhodné zvětšit velikost fondu.

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

Provádění dotazů s děleným úložištěm

K provádění dotazů s podporou rozděleného úložiště jsou potřeba následující dvě konfigurace:

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

Následující příklad ukazuje, jak pomocí těchto konfigurací dotazovat výše rozdělené úložiště a jak filtrování pomocí klíče oddílu může využít vyřazení oddílu. Toto dělené úložiště je dělené pomocí pole 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))

Výše uvedený filtr ReadDate = 2021-11-01 eliminuje data odpovídající hodnotám ReadDate kromě 2021-11-01 z kontroly během provádění.

Poznámka:

Vylepšení dotazů pomocí rozděleného úložiště se dají použít při provádění dotazů v následujících případech:

  • Datové rámce Spark vytvořené z kontejneru analytického úložiště Azure Cosmos DB a
  • Tabulky Spark odkazující na kontejner analytického úložiště Azure Cosmos DB.

Další kroky

Další informace najdete v následujících dokumentech: