設定自訂資料分割以分割分析存放區資料

適用於:NoSQL MongoDB Gremlin

自訂資料分割可讓您依照欄位來分割分析存放區資料,這些欄位通常會在分析查詢中用來作為篩選條件,進而改善查詢效能。 若要深入了解自訂資料分割,請參閱什麼是自訂資料分割一文。

若要使用自訂資料分割,您必須在 Azure Cosmos DB 帳戶上啟用 Azure Synapse Link。 若要深入了解,請參閱如何設定 Azure Synapse Link。 您可以使用適用於 Azure Cosmos DB 的 Azure Synapse Link,從 Azure Synapse Spark 筆記本觸發自訂資料分割執行。

注意

Azure Cosmos DB 帳戶應已啟用 Azure Synapse Link,才能利用自訂資料分割。 目前僅 Azure Synapse Spark 2.0 支援自訂資料分割。

注意

Synapse Link for Gremlin API 目前是預覽版。 您可以使用 Azure CLI,在新的或現有圖表中啟用 Synapse Link。 如需如何設定此功能的詳細資訊,請按一下這裡

觸發自訂資料分割作業

您可以使用 Azure Synapse Link,從 Azure Synapse Spark 筆記本觸發資料分割。 您可以將其排程為以背景作業執行 (一天一次或兩次),也可以視需要更頻繁地執行。 您也可以從資料集選擇一或多個欄位,作為分析存放區的分割區索引鍵。

以下是觸發自訂資料分割執行所需的必要設定選項:

  • spark.cosmos.asns.execute.partitioning:觸發自訂資料分割執行的布林值。 預設值為 false。

  • spark.cosmos.asns.partition.keys:使用 DDL 格式化字串的分割區索引鍵。 例如:ReadDate 字串

  • spark.cosmos.asns.basePath:Synapse 主要儲存體帳戶上資料分割存放區的基底路徑。

注意

如果您選擇多個分割區索引鍵,就可以使用指出金鑰的 basePath,從相同的資料分割存放區中存取這些記錄。

以下是您可以在觸發自訂資料分割執行時使用的選擇性設定選項:

  • spark.cosmos.asns.merge.partitioned.files:布林值,能夠在每次執行時,為每個資料分割值建立單一檔案。 預設值為 False。

  • 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' 篩選條件會在執行期間,從掃描中排除與 2021-11-01 以外之 ReadDate 值對應的資料。

注意

針對下列情況執行查詢時,適合使用資料分割存放區的查詢改進:

  • 從 Azure Cosmos DB 分析存放區容器建立的 Spark Dataframe,以及
  • 指向 Azure Cosmos DB 分析存放區容器的 Spark 資料表。

下一步

若要深入了解,請參閱下列文件: