Bagikan melalui


Mengonfigurasi pemartisian kustom ke data penyimpanan analitik partisi

BERLAKU UNTUK: NoSQL MongoDB Gremlin

Pemartisian kustom memungkinkan Anda untuk mempartisi data penyimpanan analitik, pada bidang yang biasanya digunakan sebagai filter dalam kueri analitis, yang menghasilkan peningkatan performa kueri. Untuk mempelajari lebih lanjut tentang pemartisian, lihat artikel apa itu pemartisian kustom.

Untuk menggunakan pemartisian kustom, Anda harus mengaktifkan Azure Synapse Link di akun Azure Cosmos DB. Untuk mempelajari lebih lanjut, lihat cara mengonfigurasi Azure Synapse Link. Eksekusi partisi kustom dapat dipicu dari notebook Azure Synapse Spark menggunakan Azure Synapse Link untuk Azure Cosmos DB.

Catatan

Akun Azure Cosmos DB harus mengaktifkan Azure Synapse Link untuk memanfaatkan pemartisian kustom. Pemartisian kustom saat ini didukung untuk Azure Synapse Spark 2.0 saja.

Catatan

Synapse Link untuk Gremlin API sekarang dalam pratinjau. Anda dapat mengaktifkan Synapse Link di grafik baru atau yang sudah ada menggunakan Azure CLI. Untuk informasi selengkapnya tentang cara mengonfigurasinya, klik di sini.

Memicu pekerjaan pemartisian kustom

Pemartisian dapat dipicu dari buku catatan Azure Synapse Spark menggunakan Azure Synapse Link. Anda dapat menjadwalkannya untuk berjalan sebagai pekerjaan latar belakang, sekali atau dua kali sehari, atau dapat dieksekusi lebih sering jika diperlukan. Anda juga dapat memilih satu atau beberapa bidang dari himpunan data sebagai kunci simpan partisi .

Berikut ini adalah opsi konfigurasi wajib yang diperlukan untuk memicu eksekusi partisi kustom:

  • spark.cosmos.asns.execute.partitioning - Nilai Boolean yang memicu eksekusi partisi kustom. Nilai defaultnya adalah false.

  • spark.cosmos.asns.partition.keys - Kunci partisi menggunakan string yang diformat DDL. Misalnya: String ReadDate.

  • spark.cosmos.asns.basePath - Jalur dasar untuk penyimpanan yang dipartisi pada akun penyimpanan utama Synapse.

Catatan

Jika memilih beberapa kunci partisi, Anda dapat mengakses catatan ini dari penyimpanan partisi yang sama dengan basePath yang menunjukkan kunci.

Berikut ini adalah opsi konfigurasi opsional yang dapat Anda gunakan saat memicu eksekusi partisi kustom:

  • spark.cosmos.asns.merge.partitioned.files - Nilai Boolean yang memungkinkan untuk membuat satu file per nilai partisi per eksekusi. Nilai defaultnya adalah false.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - Jumlah maksimum catatan dalam file partisi tunggal di penyimpanan yang dipartisi. Jika konfigurasi ini dan spark.cosmos.asns.merge.partitioned.files ditentukan, maka file baru dibuat setelah jumlah catatan melebihi nilai maxRecordsPerFile. Konfigurasi ini biasanya diperlukan hanya untuk partisi awal untuk koleksi yang lebih besar. Nilai defaultnya adalah 1.000.000.

    Ketika Anda mengatur maxRecordsPerFile tetapi tidak mengkonfigurasi spark.cosmos.asns.merge.partitioned.files, catatan dapat terbagi di seluruh file sebelum mencapai maxRecordsPerFile. Pembagian file juga tergantung pada paralelisme yang tersedia di kumpulan.

  • spark.cosmos.asns.partitioning.shuffle.partitions - Ini mengontrol paralelisme selama menulis partisi ke penyimpanan yang dipartisi. Konfigurasi ini hanya diperlukan untuk partisi awal untuk koleksi yang lebih besar. Ini diatur ke jumlah core yang tersedia di kumpulan Spark. Nilai defaultnya adalah 200. Nilai yang lebih rendah dapat membuang sumber daya jika kumpulan tidak digunakan untuk beban kerja lain. Nilai yang lebih tinggi biasanya tidak menimbulkan masalah, karena beberapa tugas selesai lebih awal dan dapat memulai lebih banyak tugas saat yang lambat sedang mengeksekusi. Jika Anda ingin pekerjaan partisi selesai lebih cepat, praktik yang baik adalah meningkatkan ukuran kumpulan.

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

Eksekusi kueri dengan penyimpanan yang dipartisi

Dua konfigurasi berikut diperlukan untuk mengeksekusi kueri dengan dukungan penyimpanan yang dipartisi:

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

Contoh berikut menunjukkan cara menggunakan konfigurasi ini untuk mengkueri penyimpanan yang dipartisi di atas dan bagaimana pemfilteran menggunakan kunci partisi dapat memanfaatkan pemangkasan partisi. Penyimpanan yang dipartisi ini dipartisi menggunakan bidang "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))

Filter ReadDate = '01-11-2021' di atas akan menghilangkan data yang sesuai dengan nilai ReadDate selain 01-11-2021 dari pemindaian, selama eksekusi.

Catatan

Perbaikan kueri menggunakan penyimpanan yang dipartisi berlaku saat kueri dieksekusi pada hal berikut:

  • Spark Dataframes dibuat dari kontainer penyimpanan analitis Azure Cosmos DB dan
  • Tabel Spark menunjuk ke kontainer penyimpanan analitis Azure Cosmos DB.

Langkah berikutnya

Untuk mempelajari lebih lanjut, lihat dokumen berikut ini: