使用 Apache Spark 將數據從 Azure Cosmos DB 複製到專用 SQL 集區
適用於 Azure Cosmos DB 的 Azure Synapse Link 可讓使用者對 Azure Cosmos DB 中的作業數據執行近乎即時的分析。 不過,有時候有些數據需要匯總和擴充,才能為數據倉儲使用者提供服務。 您可以只使用筆記本中的幾個數據格來策劃和匯出 Azure Synapse Link 數據。
必要條件
- 使用 :
- 使用具有數據的 HTAP 容器布建 Azure Cosmos DB 帳戶
- 將 Azure Cosmos DB HTAP 容器連線到工作區
- 有正確的設定可從 Spark 將數據匯入專用 SQL 集區
步驟
在本教學課程中,您將連線到分析存放區,因此不會對交易存放區造成任何影響(它不會取用任何要求單位)。 我們將逐步執行下列步驟:
- 將 Azure Cosmos DB HTAP 容器讀入 Spark 數據框架
- 在新的數據框架中匯總結果
- 將數據內嵌至專用 SQL 集區
資料
在此範例中,我們使用名為 RetailSales 的 HTAP 容器。 它是名為 ConnectedData 的連結服務的一部分,且具有下列架構:
- _rid:string (可為 Null = true)
- _ts: long (可為 Null = true)
- logQuantity: double (可為 Null = true)
- productCode:string (可為 Null = true)
- quantity: long (可為 Null = true)
- price: long (nullable = true)
- id:string (可為 Null = true)
- 廣告: long (可為 Null = true)
- storeId: long (可為 Null = true)
- weekStarting: long (nullable = true)
- _etag:string (可為 Null = true)
我們將依 productCode 和 weekStarting 匯總銷售量(數量、收益 x 數量和價格 x 數量),以取得報告目的。 最後,我們會將數據匯出至稱為 dbo.productsales
的專用 SQL 集區數據表。
設定 Spark Notebook
使用 Scala 作為 Spark (Scala) 作為主要語言來建立 Spark 筆記本。 我們會針對會話使用筆記本的預設設定。
讀取 Spark 中的數據
使用 Spark 將 Azure Cosmos DB HTAP 容器讀入第一個數據格中的數據框架。
val df_olap = spark.read.format("cosmos.olap").
option("spark.synapse.linkedService", "ConnectedData").
option("spark.cosmos.container", "RetailSales").
load()
在新的數據框架中匯總結果
在第二個數據格中,我們會先執行新數據框架所需的轉換和匯總,再將它載入專用SQL集區資料庫。
// Select relevant columns and create revenue
val df_olap_step1 = df_olap.select("productCode","weekStarting","quantity","price").withColumn("revenue",col("quantity")*col("price"))
//Aggregate revenue, quantity sold and avg. price by week and product ID
val df_olap_aggr = df_olap_step1.groupBy("productCode","weekStarting").agg(sum("quantity") as "Sum_quantity",sum("revenue") as "Sum_revenue").
withColumn("AvgPrice",col("Sum_revenue")/col("Sum_quantity"))
將結果載入專用 SQL 集區
第三個數據格中,我們會將數據載入專用 SQL 集區。 它會自動建立暫存的外部數據表、外部數據源和外部檔格式,一旦作業完成,就會刪除該格式。
df_olap_aggr.write.sqlanalytics("userpool.dbo.productsales", Constants.INTERNAL)
使用 SQL 查詢結果
您可以使用簡單的 SQL 查詢來查詢結果,例如下列 SQL 文稿:
SELECT [productCode]
,[weekStarting]
,[Sum_quantity]
,[Sum_revenue]
,[AvgPrice]
FROM [dbo].[productsales]