تكوين التقسيم المخصص لتقسيم بيانات المخزن التحليلي

ينطبق على: NoSQL MongoDB العفريت

تقسيم مخصص تمكنك من تقسيم بيانات مخزن التحليلية، على الحقول التي تستخدم عادة كعوامل تصفية في الاستعلامات التحليلية، ما أدى إلى تحسين أداء الاستعلام. لمعرفة المزيد حول التقسيم المخصص، راجع مقالة ما هو التقسيم المخصص.

لاستخدام التقسيم المخصص، يجب تمكين ارتباط Azure Synapse على حساب Azure Cosmos DB. لمعرفة المزيد، راجع كيفية تكوين ارتباط Azure Synapse. يمكن تشغيل تنفيذ التقسيم المخصص من دفتر ملاحظات Azure Synapse Spark باستخدام Azure Synapse Link ل Azure Cosmos DB.

إشعار

يجب أن يكون لدى حسابات Azure Cosmos DB ارتباط Azure Synapse تمكين للاستفادة من التقسيم المخصص. التقسيم المخصص معتمد حالياً ل Azure Synapse Spark 2.0 فقط.

إشعار

رابط Synapse لواجهة برمجة تطبيقات Gremlin قيد المعاينة الآن. يمكنك تمكين Synapse Link في الرسوم البيانية الجديدة أو الموجودة باستخدام Azure CLI. لمزيد من المعلومات حول كيفية تكوينه، انقر هنا.

تشغيل مهمة تقسيم مخصص

يمكن تشغيل التقسيم من دفتر ملاحظات Azure Synapse Spark باستخدام Azure Synapse Link. يمكنك جدولة تشغيله كوظيفة في الخلفية مرة أو مرتين في اليوم، أو يمكن تنفيذه في كثير من الأحيان عند الضرورة. يمكنك أيضاً اختيار حقل واحد أو أكثر من مجموعة البيانات كمفتاح قسم مخزن تحليلي.

فيما يلي خيارات التكوين الإلزامية، المطلوبة لتشغيل تنفيذ التقسيم المخصص:

  • spark.cosmos.asns.execute.partitioning - القيمة المنطقية التي تؤدي إلى تنفيذ التقسيم المخصص. القيمة الافتراضية هي false.

  • spark.cosmos.asns.partition.keys - مفتاح/مفاتيح التقسيم، باستخدام سلسلة لغة تعريف البيانات (DDL) المنسقة. مثال: ReadDate String.

  • spark.cosmos.asns.basePath - المسار الأساسي للمخزن المقسم على حساب تخزين Synapse الأساسي.

إشعار

إذا اخترت مفاتيح أقسام متعددة، يمكنك الوصول إلى هذه السجلات من نفس المخزن المقسم، باستخدام basePath الذي يشير إلى المفتاح.

فيما يلي خيارات التكوين الاختيارية التي يمكنك استخدامها عند تشغيل عملية تنفيذ التقسيم المخصص:

  • spark.cosmos.asns.merge.partitioned.files - القيمة المنطقية التي تمكن إنشاء ملف واحد لكل قيمة قسم، لكل تنفيذ. القيمة الافتراضية هي خطأ.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - الحد الأقصى لعدد السجلات في ملف ذي قسم واحد، في المخزن المقسم. إذا تم تحديد هذا التكوين ثم spark.cosmos.asns.merge.partitioned.files، يتم إنشاء ملفات جديدة بمجرد تجاوز عدد السجلات قيمة maxRecordsPerFile. هذا التكوين مطلوب عادةً فقط في عملية التقسيم الأولية للمجموعات الكبيرة. تبلغ القيمة الافتراضية 1,000,000.

    عندما تقوم بتعيين maxRecordsPerFile، ولكنك لا تكوّن spark.cosmos.asns.merge.partitioned.files، فقد تنقسم السجلات عبر الملفات، قبل بلوغ maxRecordsPerFile. يعتمد انقسام الملف أيضاً على التوازي المتاح في المجموعة.

  • spark.cosmos.asns.partitioning.shuffle.partitions - يتحكم في التوازي أثناء الكتابات المقسمة على المخزن المقسم. هذا التكوين مطلوب فقط للتقسيم الأولي للمجموعات الكبيرة. يتم تعيينه إلى عدد الذاﻜرات الأساسية المتاحة على مجموعة Spark. تبلغ القيمة الافتراضية 200. قد تهدر القيم الأقل الموارد إذا لم يتم استخدام التجمع لأحمال العمل الأخرى. لا تتسبب القيمة الأعلى عادةً في حدوث مشكلات، لأن بعض المهام تكتمل مبكراً، ويمكن الشروع في المزيد من المهام أثناء تنفيذ المهام البطيئة. إذا كنت تريد تقسيم المهمة لإكمالها أسرع، فإن زيادة حجم المجموعة تُعد ممارسة جيدة.

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

تنفيذ الاستعلام باستخدام المخزن المقسم

التكوينان التاليان مطلوبان لتنفيذ الاستعلامات بدعم المخزن المقسم:

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

يوضح المثال التالي كيفية استخدام هذه التكوينات للاستعلام عن المخزن المقسم أعلاه، وكيف تستخدم التصفية مفتاح التقسيم، للاستفادة من تنقيح القسم. يتم تقسيم هذا المخزن المقسم باستخدام حقل "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))

يقوم عامل التصفية ReadDate = '2021-11-01' أعلاه، باستبعاد البيانات المطابقة لقيم ReadDate الأخرى غير 2021-11-01 من المسح الضوئي، أثناء التنفيذ.

إشعار

يتم تطبيق تحسينات الاستعلام باستخدام المخزن المقسم، عند تنفيذ الاستعلامات على ما يلي:

  • Spark Dataframes التي تم إنشاؤها من حاوية مخزن تحليلات Azure Cosmos DB، بالإضافة إلى
  • جداول Spark التي تشير إلى حاوية مخزن تحليلات Azure Cosmos DB.

الخطوات التالية

لمعرفة المزيد، راجع المستندات التالية: