Konfigurieren der benutzerdefinierten Partitionierung zum Partitionieren der Analysespeicherdaten

GILT FÜR: NoSQL MongoDB Gremlin

Mit der benutzerdefinierten Partitionierung können Sie Daten des Analysespeichers in Feldern partitionieren, die häufig als Filter in Analyseabfragen verwendet werden, um die Abfrageleistung zu verbessern. Weitere Informationen zur benutzerdefinierten Partitionierung finden Sie im Artikel Was ist benutzerdefinierte Partitionierung.

Um die benutzerdefinierte Partitionierung verwenden zu können, müssen Sie Azure Synapse Link in Ihrem Azure Cosmos DB-Konto aktivieren. Weitere Informationen finden Sie unter Konfigurieren von Azure Synapse Link. Die Ausführung der benutzerdefinierten Partitionierung kann mithilfe von Azure Synapse Link für Azure Cosmos DB über Azure Synapse Spark-Notebooks ausgelöst werden.

Hinweis

Azure Synapse Link sollte für Azure Cosmos DB-Konten aktiviert sein, um die Vorteile der benutzerdefinierten Partitionierung nutzen zu können. Die benutzerdefinierte Partitionierung wird derzeit nur für Azure Synapse Spark 2.0 unterstützt.

Hinweis

Synapse Link für die Gremlin-API ist jetzt in der Vorschau. Sie können Synapse Link in Ihrem neuen oder vorhandenen Graphen mithilfe der Azure CLI aktivieren. Weitere Informationen zum Konfigurieren finden Sie hier.

Auslösen eines benutzerdefinierten Partitionierungsauftrags

Sie können die Partitionierung von einem Azure Synapse Spark-Notebook mithilfe von Azure Synapse Link auslösen. Sie können sie als Hintergrundauftrag planen, der ein- oder zweimal täglich oder bei Bedarf auch häufiger ausgeführt wird. Sie können auch ein oder mehrere Felder aus dem Dataset als Partitionsschlüssel für den Analysespeicher auswählen.

Es folgen obligatorische Konfigurationsoptionen, die erforderlich sind, um die Ausführung der benutzerdefinierten Partitionierung auszulösen:

  • spark.cosmos.asns.execute.partitioning: Boolescher Wert, der die Ausführung der benutzerdefinierten Partitionierung auslöst. Der Standardwert ist „FALSE“.

  • spark.cosmos.asns.partition.keys: Partitionsschlüssel mit DDL-formatierter Zeichenfolge. Beispiel: ReadDate-Zeichenfolge.

  • spark.cosmos.asns.basePath: Der Basispfad für den partitionierten Speicher im primären Synapse-Speicherkonto.

Hinweis

Wenn Sie mehrere Partitionsschlüssel auswählen, können Sie auf diese Datensätze aus demselben partitionierten Speicher mit dem basePath zugreifen, der den Schlüssel angibt.

Im Folgenden finden Sie optionale Konfigurationsoptionen, die Sie beim Auslösen der Ausführung der benutzerdefinierten Partitionierung verwenden können:

  • spark.cosmos.asns.merge.partitioned.files: Boolescher Wert, der das Erstellen einer einzelnen Datei pro Partitionswert pro Ausführung ermöglicht. Der Standardwert ist „false“.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile: Maximale Anzahl von Datensätzen in einer Datei mit nur einer Partition im partitionierten Speicher. Wenn diese Konfiguration und spark.cosmos.asns.merge.partitioned.files angegeben werden, werden neue Dateien erstellt, sobald die Anzahl der Datensätze den maxRecordsPerFile-Wert überschreitet. Diese Konfiguration wird in der Regel nur für die anfängliche Partitionierung für größere Sammlungen benötigt. Der Standardwert ist 1.000.000.

    Wenn Sie maxRecordsPerFile festlegen, aber spark.cosmos.asns.merge.partitioned.files nicht konfigurieren, können die Datensätze auf Dateien aufgeteilt werden, bevor sie den maxRecordsPerFile-Wert erreichen. Die Dateiaufteilung hängt auch von der verfügbaren Parallelität im Pool ab.

  • spark.cosmos.asns.partitioning.shuffle.partitions: Hiermit wird die Parallelität während der partitionierten Schreibvorgängen in den partitionierten Speicher gesteuert. Diese Konfiguration wird nur für die anfängliche Partitionierung für größere Sammlungen benötigt. Sie wird auf die Anzahl der verfügbaren Kerne im Spark-Pool festgelegt. Der Standardwert ist 200. Niedrigere Werte könnten Ressourcen verschwenden, wenn der Pool nicht für andere Workloads verwendet wird. Ein höherer Wert verursacht in der Regel keine Probleme, da einige Tasks frühzeitig abgeschlossen werden und mehr Aufgaben starten können, während die langsamen Aufgaben ausgeführt werden. Wenn der Partitionierungsauftrag schneller abgeschlossen werden soll, besteht eine bewährte Methode darin, die Poolgröße zu erhöhen.

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

Abfrageausführung mit partitioniertem Speicher

Die folgenden beiden Konfigurationen sind erforderlich, um Abfragen mit Partitionierungsspeicherunterstützung auszuführen:

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

Das folgende Beispiel zeigt, wie Sie diese Konfigurationen verwenden können, um den oben genannten partitionierten Speicher abzufragen, und wie die Filterung mithilfe des Partitionsschlüssels die Partitionsbereinigung verwenden kann. Dieser partitionierte Speicher wird mithilfe des Felds „ReadDate“ partitioniert.

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

Der obige Filter ReadDate = '2021-11-01' entfernt während der Ausführung die Daten aus der Überprüfung, die anderen ReadDate-Werten als 2021-11-01 entsprechen.

Hinweis

Die Abfrageverbesserungen mit partitioniertem Speicher sind anwendbar, wenn Abfragen für Folgendes ausgeführt werden:

  • Spark-Datenrahmen, die aus dem Azure Cosmos DB-Analysespeichercontainer erstellt wurden
  • Spark-Tabellen, die auf den Azure Cosmos DB-Analysespeichercontainer verweisen

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Dokumenten: