Synapse SQL ile Cosmos DB sorgulama
Spark havuzu kullanmanın yanı sıra Azure Synapse Analytics'teki yerleşik sunucusuz SQL havuzunu kullanarak azure Cosmos DB analiz kapsayıcısını da sorgulayabilirsiniz. Bunu yapmak için SQL işlevini kullanarak OPENROWSET
Azure Cosmos DB veritabanınızın bağlı hizmetine bağlanabilirsiniz.
Kimlik doğrulama anahtarıyla OPENROWSET kullanma
Varsayılan olarak, bir Azure Cosmos DB hesabına erişimin kimliği bir kimlik doğrulama anahtarıyla doğrulanır. Aşağıdaki örnekte gösterildiği gibi, sql havuzundan bağlı bir hizmet üzerinden bağlanmak için bu anahtarı deyimindeki bir bağlantı dizesi OPENROWSET
parçası olarak kullanabilirsiniz:
SELECT *
FROM OPENROWSET(
'CosmosDB',
'Account=my-cosmos-db;Database=my-db;Key=abcd1234....==',
[my-container]) AS products_data
Bahşiş
Cosmos DB hesabınız için birincil ve ikincil anahtarı Azure portalındaki Anahtarlar sayfasında bulabilirsiniz.
Bu sorgunun sonuçları, Azure Cosmos DB kapsayıcısı içindeki öğelerden meta veriler ve uygulama tanımlı alanlar da dahil olmak üzere aşağıdakine benzer olabilir:
_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 analiz deposundan alınır ve sorgu işlem deposunu etkilemez.
Kimlik bilgileriyle OPENROWSET kullanma
OpenROWSET'e yapılan her çağrıya kimlik doğrulama anahtarını eklemek yerine Cosmos DB hesabınızın kimlik doğrulama bilgilerini kapsülleyen bir kimlik bilgisi tanımlayabilir ve sonraki sorgularda kimlik bilgilerini kullanabilirsiniz. Kimlik bilgisi oluşturmak için bu örnekte gösterildiği gibi deyimini CREATE CREDENTIAL
kullanın:
CREATE CREDENTIAL my_credential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'abcd1234....==';
Kimlik bilgileri yerinde olduğunda, bunu aşağıdaki gibi bir OPENROWSET
işlevde kullanabilirsiniz:
SELECT *
FROM OPENROWSET(PROVIDER = 'CosmosDB',
CONNECTION = 'Account=my-cosmos-db;Database=my-db',
OBJECT = 'my-container',
SERVER_CREDENTIAL = 'my_credential'
) AS products_data
Sonuçlar bir kez daha analiz deposundan meta verileri ve uygulama tanımlı alanları içerir:
_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-... |
... | ... | ... | ... | ... | ... |
Şema belirtme
Söz OPENROWSET
dizimi, sonuçta elde edilen satır kümesi için şema tanımlamak için kullanabileceğiniz bir yan tümce içerir WITH
. Aşağıdaki örnekte gösterildiği gibi tek tek alanları belirtmek ve veri türleri atamak için bunu kullanabilirsiniz:
SELECT *
FROM OPENROWSET(PROVIDER = 'CosmosDB',
CONNECTION = 'Account=my-cosmos-db;Database=my-db',
OBJECT = 'my-container',
SERVER_CREDENTIAL = 'my_credential'
)
WITH (
productID INT,
productName VARCHAR(20)
) AS products_data
Bu durumda analiz deposundaki alanların productID ve productName içerdiği varsayıldığında, sonuçta elde edilen satır kümesi aşağıdaki tabloya benzer:
productID | Productname |
---|---|
123 | Arabirim öğesi |
124 | Wotsit |
125 | Thingumy |
... | ... |
Yan tümcesinde SELECT
tek tek sütun adları belirtebilirsiniz (örneğin, SELECT productID, productName ...
), bu nedenle tek tek sütunları belirtme özelliği sınırlı kullanım gibi görünebilir. Ancak, aşağıdaki örnekte gösterildiği gibi işletimsel depoda depolanan kaynak JSON belgelerinin birden çok alan düzeyi içerdiği durumları göz önünde bulundurun:
{
"productID": 126,
"productName": "Sprocket",
"supplier": {
"supplierName": "Contoso",
"supplierPhone": "555-123-4567"
}
"id": "62588f072-11c3-42b1-a738-...",
"_rid": "mjMaAL...==",
...
}
WITH
yan tümcesi, açık JSON yollarının eklenmesini destekleyerek iç içe alanları işlemenize ve alan adlarına diğer ad atamanıza olanak tanır; bu örnekte gösterildiği gibi:
SELECT *
FROM OPENROWSET(PROVIDER = 'CosmosDB',
CONNECTION = 'Account=my-cosmos-db;Database=my-db',
OBJECT = 'my-container',
SERVER_CREDENTIAL = 'my_credential'
)
WITH (
ProductNo INT '$.productID',
ProductName VARCHAR(20) '$.productName',
Supplier VARCHAR(20) '$.supplier.supplierName',
SupplierPhoneNo VARCHAR(15) '$.supplier.supplierPhone'
) AS products_data
Bu sorgunun sonuçları, 126 ürünü için aşağıdaki satırı içerir:
ProductNo | ProductName | Supplier | Sağlayıcı Telefon No |
---|---|---|---|
126 | Sprocket | Contoso | 555-123-4567 |
Veritabanında görünüm oluşturma
Aynı verileri sık sık sorgulamanız veya işlevi içermeyen deyimleri kullanan SELECT
raporlama ve görselleştirme araçlarını kullanmanız gerekiyorsa, verileri soyutlama amacıyla bir görünüm kullanabilirsiniz.OPENROWSET
Bir görünüm oluşturmak için, aşağıdaki örnekte gösterildiği gibi bu veritabanını tanımlayacak yeni bir veritabanı oluşturmanız gerekir (ana veritabanındaki kullanıcı tanımlı görünümler desteklenmez):
CREATE DATABASE sales_db
COLLATE Latin1_General_100_BIN2_UTF8;
GO;
USE sales_db;
GO;
CREATE VIEW products
AS
SELECT *
FROM OPENROWSET(PROVIDER = 'CosmosDB',
CONNECTION = 'Account=my-cosmos-db;Database=my-db',
OBJECT = 'my-container',
SERVER_CREDENTIAL = 'my_credential'
)
WITH (
ProductNo INT '$.productID',
ProductName VARCHAR(20) '$.productName',
Supplier VARCHAR(20) '$.supplier.supplierName',
SupplierPhoneNo VARCHAR(15) '$.supplier.supplierPhone'
) AS products_data
GO
Bahşiş
Cosmos DB'deki verilere erişecek bir veritabanı oluştururken, Cosmos DB'deki dizelerle uyumluluğu sağlamak için UTF-8 tabanlı harmanlama kullanmak en iyisidir.
Görünüm oluşturulduktan sonra, kullanıcılar ve istemci uygulamaları bunu diğer SQL görünüm veya tabloları gibi sorgulayabilir:
SELECT * FROM products;
Sunucusuz SQL havuzları ve Azure Cosmos DB ile ilgili dikkat edilmesi gerekenler
Azure Cosmos DB analiz deposundaki verileri sorgulamak için sunucusuz SQL havuzu kullanmayı planlarken aşağıdaki en iyi yöntemleri göz önünde bulundurun:
Azure Cosmos DB analiz depolama alanınızı ve sunucusuz SQL havuzuyla aynı bölgede bulunan tüm istemci uygulamalarını (örneğin Microsoft Power BI) sağlayın.
Azure Cosmos DB kapsayıcıları birden çok bölgeye çoğaltılabilir. Çok bölgeli bir kapsayıcınız varsa, sorguların kapsayıcının belirli bir
region
bölgesel çoğaltmasına gönderilmesini sağlamak için OPENROWSET bağlantı dizesi bir parametre belirtebilirsiniz.Dize sütunlarıyla çalışırken open WITH yan tümcesi ile OPENROWSET işlevini kullanın ve dize verileri için uygun bir veri uzunluğu belirtin.