Udostępnij za pośrednictwem


Konfigurowanie partycjonowania niestandardowego w celu partycjonowania danych magazynu analitycznego

DOTYCZY: NoSQL MongoDB Gremlin

Partycjonowanie niestandardowe umożliwia partycjonowanie danych magazynu analitycznego na polach, które są często używane jako filtry w zapytaniach analitycznych, co zwiększa wydajność zapytań. Aby dowiedzieć się więcej na temat partycjonowania niestandardowego, zobacz artykuł dotyczący partycjonowania niestandardowego.

Aby korzystać z partycjonowania niestandardowego, musisz włączyć usługę Azure Synapse Link na koncie usługi Azure Cosmos DB. Aby dowiedzieć się więcej, zobacz jak skonfigurować usługę Azure Synapse Link. Wykonywanie partycjonowania niestandardowego można wyzwolić z notesu platformy Azure Synapse Spark przy użyciu usługi Azure Synapse Link dla usługi Azure Cosmos DB.

Uwaga

Aby móc korzystać z partycjonowania niestandardowego, konta usługi Azure Cosmos DB powinny mieć włączoną usługę Azure Synapse Link. Partycjonowanie niestandardowe jest obecnie obsługiwane tylko w przypadku platformy Azure Synapse Spark 2.0.

Uwaga

Usługa Synapse Link dla interfejsu API języka Gremlin jest teraz dostępna w wersji zapoznawczej. Możesz włączyć usługę Synapse Link w nowych lub istniejących grafach przy użyciu interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji na temat sposobu jej konfigurowania, kliknij tutaj.

Wyzwalanie niestandardowego zadania partycjonowania

Partycjonowanie można wyzwolić z notesu usługi Azure Synapse Spark przy użyciu usługi Azure Synapse Link. Można zaplanować jego uruchamianie jako zadanie w tle, raz lub dwa razy dziennie lub częściej można je wykonać w razie potrzeby. Możesz również wybrać jedno lub więcej pól z zestawu danych jako klucz partycji magazynu analitycznego.

Poniżej przedstawiono obowiązkowe opcje konfiguracji, które są wymagane do wyzwolenia niestandardowego wykonywania partycjonowania:

  • spark.cosmos.asns.execute.partitioning - Wartość logiczna, która wyzwala niestandardowe wykonywanie partycjonowania. Wartość domyślna to false.

  • spark.cosmos.asns.partition.keys - Klucz partycji/s przy użyciu ciągu sformatowanego DDL. Na przykład: ReadDate String.

  • spark.cosmos.asns.basePath — ścieżka podstawowa magazynu partycjonowanego na podstawowym koncie magazynu usługi Synapse.

Uwaga

Jeśli wybierzesz wiele kluczy partycji, możesz uzyskać dostęp do tych rekordów z tego samego magazynu podzielonego na partycje przy użyciu ścieżki basePath wskazującej klucz.

Poniżej przedstawiono opcjonalne opcje konfiguracji, których można użyć podczas wyzwalania wykonywania partycjonowania niestandardowego:

  • spark.cosmos.asns.merge.partitioned.files - Wartość logiczna, która umożliwia utworzenie pojedynczego pliku na wartość partycji na wykonanie. Wartość domyślna to false.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile — Maksymalna liczba rekordów w pliku z jedną partycją w magazynie partycjonowany. Jeśli ta konfiguracja i spark.cosmos.asns.merge.partitioned.files parametr są określone, nowe pliki są tworzone, gdy liczba rekordów przekroczy wartość maxRecordsPerFile. Ta konfiguracja jest zwykle wymagana tylko do początkowego partycjonowania dla większych kolekcji. Wartość domyślna to 1000 000.

    Podczas ustawiania parametru maxRecordsPerFile, ale nie konfigurujesz spark.cosmos.asns.merge.partitioned.files, rekordy mogą być dzielone między pliki przed osiągnięciem wartości maxRecordsPerFile. Podział pliku zależy również od dostępnego równoległości w puli.

  • spark.cosmos.asns.partitioning.shuffle.partitions — Steruje równoległością podczas partycjonowanych zapisów w magazynie podzielonym na partycje. Ta konfiguracja jest wymagana tylko do początkowego partycjonowania dla większych kolekcji. Jest ona ustawiona na liczbę dostępnych rdzeni w puli Platformy Spark. Wartość domyślna to 200. Niższe wartości mogą zmarnować zasoby, jeśli pula nie jest używana dla innych obciążeń. Wyższa wartość zwykle nie powoduje problemów, ponieważ niektóre zadania są wykonywane wcześnie i mogą uruchamiać więcej zadań podczas wykonywania wolnych zadań. Jeśli chcesz, aby zadanie partycjonowania zostało ukończone szybciej, dobrym rozwiązaniem jest zwiększenie rozmiaru puli.

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

Wykonywanie zapytań za pomocą magazynu partycjonowanego

Do wykonywania zapytań z obsługą magazynu partycjonowanego wymagane są następujące dwie konfiguracje:

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

W poniższym przykładzie pokazano, jak używać tych konfiguracji do wykonywania zapytań względem powyższego magazynu podzielonego na partycje oraz jak filtrowanie przy użyciu klucza partycji może korzystać z oczyszczania partycji. Ten podzielony na partycje magazyn jest partycjonowany przy użyciu pola "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))

Powyższy filtr ReadDate = "2021-11-01" spowoduje wyeliminowanie danych odpowiadających wartościom ReadDate innym niż 2021-11-01 podczas skanowania.

Uwaga

Ulepszenia zapytań korzystające z magazynu partycjonowanego mają zastosowanie w przypadku wykonywania zapytań w następujących przypadkach:

  • Ramki danych platformy Spark utworzone na podstawie kontenera magazynu analitycznego usługi Azure Cosmos DB i
  • Tabele platformy Spark wskazujące kontener magazynu analitycznego usługi Azure Cosmos DB.

Następne kroki

Aby dowiedzieć się więcej, zobacz następujące dokumenty: