Spark ile Cosmos DB verilerini sorgulama
Analiz deponuzun etkinleştirildiği Azure Cosmos DB veritabanınız için bağlı bir hizmet ekledikten sonra, Azure Synapse Analytics çalışma alanınızda bir Spark havuzu kullanarak verileri sorgulamak için bu hizmeti kullanabilirsiniz.
Azure Cosmos DB analiz verilerini bir veri çerçevesine yükleme
Azure Cosmos DB bağlı hizmetinden verilerin ilk keşfi veya hızlı analizi için, pyspark (Spark'a özgü Python uygulaması) veya Scala (genellikle Spark'ta kullanılan Java tabanlı bir dil) gibi Spark destekli bir dil kullanarak kapsayıcıdan veri çerçevesine veri yüklemek genellikle en kolay yollardan biridir.
Örneğin, aşağıdaki PySpark kodu my_linked_service bağlı hizmetini kullanarak bağlı my-container kapsayıcısı içindeki verilerden df adlı bir veri çerçevesini yüklemek ve ilk 10 veri satırını görüntülemek için kullanılabilir:
df = spark.read
.format("cosmos.olap")\
.option("spark.synapse.linkedService", "my_linked_service")\
.option("spark.cosmos.container", "my-container")\
.load()
display(df.limit(10))
My-container kapsayıcısının aşağıdaki örneğe benzer öğeleri depolamak için kullanıldığını varsayalım:
{
"productID": 123,
"productName": "Widget",
"id": "7248f072-11c3-42b1-a368-...",
"_rid": "mjMaAL...==",
"_self": "dbs/mjM...==/colls/mjMaAL...=/docs/mjMaAL...==/",
"_etag": "\"54004b09-0000-2300-...\"",
"_attachments": "attachments/",
"_ts": 1655414791
}
PySpark kodundan elde edilen çıkış aşağıdaki tabloya benzer olacaktır:
_rid | _ts | productID | Productname | kimlik | _etag |
---|---|---|---|---|---|
mjMaAL...== | 1655414791 | 123 | Arabirim öğesi | 7248f072-11c3-42b1-a368-... | 54004b09-0000-2300-... |
mjMaAL...== | 1655414829 | 124 | Wotsit | dc33131c-65c7-421a-a0f7-... | 5400ca09-0000-2300-... |
mjMaAL...== | 1655414835 | 125 | Thingumy | ce22351d-78c7-428a-a1h5-... | 5400ca09-0000-2300-... |
... | ... | ... | ... | ... | ... |
Veriler işlem deposundan değil kapsayıcıdaki analiz deposundan yüklenir; operasyonel depoda sorgu ek yükü olmadığından emin olun. Analitik veri deposundaki alanlar, uygulama tanımlı alanları (bu örnekte productID ve productName) ve otomatik olarak oluşturulan meta veri alanlarını içerir.
Veri çerçevesini yükledikten sonra, verileri keşfetmek için yerel yöntemlerini kullanabilirsiniz. Örneğin aşağıdaki kod, productName tarafından sıralanmış yalnızca productID ve productName sütunlarını içeren yeni bir veri çerçevesi oluşturur:
products_df = df.select("productID", "productName").orderBy("productName")
display(products_df.limit(10))
Bu kodun çıktısı bu tabloya benzer olacaktır:
productID | Productname |
---|---|
125 | Thingumy |
123 | Arabirim öğesi |
124 | Wotsit |
... | ... |
Cosmos DB kapsayıcısına veri çerçevesi yazma
Çoğu HTAP senaryosunda analiz deposundan Spark'a veri okumak için bağlı hizmeti kullanmanız gerekir. Ancak, aşağıdaki örnekte gösterildiği gibi bir veri çerçevesinin içeriğini kapsayıcıya yazabilirsiniz:
mydf.write.format("cosmos.oltp")\
.option("spark.synapse.linkedService", "my_linked_service")\
.option("spark.cosmos.container", "my-container")\
.mode('append')\
.save()
Dekont
Kapsayıcıya veri çerçevesi yazmak işletimsel depoyu güncelleştirir ve performansı üzerinde bir etkisi olabilir. Değişiklikler daha sonra analiz deposuna eşitlenir.
Azure Cosmos DB analiz verilerini sorgulamak için Spark SQL kullanma
Spark SQL, bir Spark havuzunda SQL dil söz dizimi ve ilişkisel veritabanı semantiği sağlayan bir Spark API'dir. Sql kullanılarak sorgulanabilen tablolara yönelik meta verileri tanımlamak için Spark SQL'i kullanabilirsiniz.
Örneğin, aşağıdaki kod önceki örneklerde kullanılan varsayımsal kapsayıcıyı temel alarak Products adlı bir tablo oluşturur:
%%sql
-- Create a logical database in the Spark metastore
CREATE DATABASE mydb;
USE mydb;
-- Create a table from the Cosmos DB container
CREATE TABLE products using cosmos.olap options (
spark.synapse.linkedService 'my_linked_service',
spark.cosmos.container 'my-container'
);
-- Query the table
SELECT productID, productName
FROM products;
Bahşiş
Kodun %%sql
başındaki anahtar sözcük, Spark havuzuna kodu varsayılan dil (genellikle PySpark olarak ayarlanmıştır) yerine SQL olarak çalıştırmasını belirten bir büyüdür .
Bu yaklaşımı kullanarak Spark havuzunuzda, Azure Cosmos DB hesabınızdaki işletimsel depoyu etkilemeden veri analizini ve raporlama iş yüklerini desteklemek üzere Azure Cosmos DB'deki analitik verileri sorgulamak için kullanabileceğiniz bir mantıksal veritabanı oluşturabilirsiniz.