Analiz deposu verilerini bölümlendirmek için özel bölümleme yapılandırma

ŞUNLAR IÇIN GEÇERLIDIR: Nosql MongoDB Gremlin

Özel bölümleme, analiz sorgularında filtre olarak yaygın olarak kullanılan alanlarda analiz deposu verilerini bölümlemenize olanak tanır ve böylece sorgu performansı iyileştirilir. Özel bölümleme hakkında daha fazla bilgi edinmek için özel bölümleme makalesine bakın.

Özel bölümleme kullanmak için Azure Cosmos DB hesabınızda Azure Synapse Link'i etkinleştirmeniz gerekir. Daha fazla bilgi edinmek için bkz . Azure Synapse Link'i yapılandırma. Azure Cosmos DB için Azure Synapse Link kullanılarak Azure Synapse Spark not defterinden özel bölümleme yürütmesi tetiklenebilir.

Dekont

Azure Cosmos DB hesaplarında özel bölümlemeden yararlanmak için Azure Synapse Link etkinleştirilmelidir. Özel bölümleme şu anda yalnızca Azure Synapse Spark 2.0 için desteklenmektedir.

Dekont

Gremlin API için Synapse Link artık önizleme aşamasındadır. Synapse Link'i Azure CLI kullanarak yeni veya mevcut grafiklerinizde etkinleştirebilirsiniz. Yapılandırma hakkında daha fazla bilgi için buraya tıklayın.

Özel bölümleme işini tetikleme

Bölümleme, Azure Synapse Link kullanılarak bir Azure Synapse Spark not defterinden tetiklenebilir. Günde bir veya iki kez arka plan işi olarak çalışacak şekilde zamanlayabilir veya gerekirse daha sık yürütülebilir. Analiz deposu bölüm anahtarı olarak veri kümesinden bir veya daha fazla alan da seçebilirsiniz.

Aşağıda, özel bölümleme yürütmesini tetikleme için gereken zorunlu yapılandırma seçenekleri yer alır:

  • spark.cosmos.asns.execute.partitioning - Özel bölümleme yürütmesini tetikleyen Boole değeri. Varsayılan değer olarak yanlış kullanılır.

  • spark.cosmos.asns.partition.keys - DDL biçimli dizeyi kullanarak anahtar/sn bölümleme. Örneğin: ReadDate Dizesi.

  • spark.cosmos.asns.basePath - Synapse birincil depolama hesabındaki bölümlenmiş deponun temel yolu.

Dekont

Birden çok bölüm anahtarı seçerseniz, bu kayıtlara anahtarı gösteren basePath ile aynı bölümlenmiş depodan erişebilirsiniz.

Özel bölümleme yürütmesini tetiklerken kullanabileceğiniz isteğe bağlı yapılandırma seçenekleri şunlardır:

  • spark.cosmos.asns.merge.partitioned.files - Yürütme başına bölüm değeri başına tek bir dosya oluşturulmasını sağlayan Boole değeri. Varsayılan değer yanlış'tır.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - Bölümlenmiş depodaki tek bölümlü bir dosyadaki en fazla kayıt sayısı. Bu yapılandırma ve spark.cosmos.asns.merge.partitioned.files belirtilirse, kayıt sayısı maxRecordsPerFile değerini aştıktan sonra yeni dosyalar oluşturulur. Bu yapılandırma genellikle yalnızca büyük koleksiyonlar için ilk bölümleme için gereklidir. Varsayılan değer 1.000.000'dir.

    maxRecordsPerFile değerini ayarladığınızda ancak yapılandırmadığınızda spark.cosmos.asns.merge.partitioned.files, kayıtlar maxRecordsPerFile değerine ulaşmadan önce dosyalar arasında bölünebilir. Dosya bölme, havuzdaki kullanılabilir paralelliğe de bağlıdır.

  • spark.cosmos.asns.partitioning.shuffle.partitions - Bölümlenmiş depoya bölümlenmiş yazma işlemleri sırasında paralelliği denetler. Bu yapılandırma yalnızca daha büyük koleksiyonlar için ilk bölümleme için gereklidir. Spark havuzundaki kullanılabilir çekirdek sayısına ayarlanır. Varsayılan değer 200'dür. Havuz diğer iş yükleri için kullanılmıyorsa daha düşük değerler kaynakları boşa harcayabilir. Bazı görevler erken tamamlandığından ve yavaş görevler yürütülürken daha fazla görev başlatabildiğinden, yüksek değer genellikle sorunlara neden olmaz. Bölümleme işinin daha hızlı tamamlanmasını istiyorsanız havuz boyutunu artırmak iyi bir uygulamadır.

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

Bölümlenmiş depo ile sorgu yürütme

Bölümlenmiş depo desteğine sahip sorguları yürütmek için aşağıdaki iki yapılandırma gereklidir:

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

Aşağıdaki örnekte, yukarıdaki bölümlenmiş depoyu sorgulamak için bu yapılandırmaların nasıl kullanılacağı ve bölüm anahtarını kullanarak filtrelemenin bölüm ayıklamayı nasıl kullanabileceği gösterilmektedir. Bu bölümlenmiş depo "ReadDate" alanı kullanılarak bölümlenmiştir.

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

Yukarıdaki ReadDate = '2021-11-01' filtresi, yürütme sırasında 2021-11-01 dışındaki ReadDate değerlerine karşılık gelen verileri taramadan kaldırır.

Dekont

Bölümlenmiş depo kullanılarak yapılan sorgu geliştirmeleri, sorgular aşağıdakiler üzerinde yürütülürken uygulanabilir:

  • Azure Cosmos DB analiz deposu kapsayıcısından oluşturulan Spark Veri Çerçeveleri ve
  • Azure Cosmos DB analiz deposu kapsayıcısını işaret eden Spark tabloları.

Sonraki adımlar

Daha fazla bilgi edinmek için aşağıdaki belgelere bakın: