Kümeler arası ve veritabanları arası sorgular
Sorgular , bağlam içinde veritabanı olarak belirlenen belirli bir veritabanıyla çalışır. Bu veritabanı, izin denetimi için varsayılan olarak hareket eder. Bir sorguda küme veya veritabanı belirtilmeden bir varlığa başvurulursa, bu veritabanında çözümlenir.
Bu makalede, geçerli bağlam veritabanının dışında bulunan varlıkları içeren sorguların nasıl yürütüldüğünü açıklanmaktadır.
Önkoşullar
- Kümeler farklı kiracılardaysa, Kiracılar arası sorgulara ve komutlara izin verme başlığındaki yönergeleri izleyin.
Bağlam içinde kümeyi ve veritabanını tanımlama
Aşağıdaki tabloda sorgu ortamına göre bağlam içinde veritabanının nasıl tanımladığı açıklanmaktadır.
Ortam | Bağlam içinde veritabanı |
---|---|
Kusto Gezgini | Varsayılan veritabanı bağlantılar panelinde seçilen veritabanıdır ve geçerli küme de bu veritabanını içeren kümedir. |
Azure Veri Gezgini web kullanıcı arabirimi | Varsayılan veritabanı , bağlantı bölmesinde seçilen veritabanıdır ve geçerli küme de bu veritabanını içeren kümedir. |
İstemci kitaplıkları | Varsayılan veritabanı ve küme Kusto bağlantı dizelerinin ve Initial Catalog özellikleri tarafından Data Source belirtilir. |
Kümeler arası veya veritabanları arası sorgular gerçekleştirme
Bağlam içinde veritabanının dışındaki varlıklara erişmek için cluster () ve database() işlevlerini kullanarak varlık adını niteleyin.
Aynı küme içindeki farklı bir veritabanındaki bir tablo için:
database("<DatabaseName>").<TableName>
Uzak kümedeki bir tablo için:
cluster("<ClusterName>").database("<DatabaseName>").<TableName>
Not
Sorguyu yürütmek için varsayılan veritabanı ve sorguda başvurulan diğer tüm veritabanları için görüntüleyici izniniz olmalıdır. Daha fazla bilgi için bkz . Kusto rol tabanlı erişim denetimi.
İpucu
Bir sorgudan döndürülen kayıt sayısı, işlecin belirli bir kullanımı take
olmasa bile varsayılan olarak sınırlıdır. Bu sınırı kaldırmak için istemci isteği seçeneğini kullanın notruncation
. Daha fazla bilgi için bkz. Sorgu sınırları.
Nitelenmiş adlar ve birleşim işleci
Birleşim işlecinin işleneni olarak nitelenmiş bir ad göründüğünde, birden çok tablo ve birden çok veritabanı belirtmek için joker karakterler kullanılabilir. Küme adlarında joker karakterlere izin verilmez.
union withsource=TableName *, database("OtherDb*").*Table, cluster("OtherCluster").database("*").*
Not
Varsayılan veritabanının adı da olası bir eşleşmedir, bu nedenle database("*")
varsayılan da dahil olmak üzere tüm veritabanlarının tüm tablolarını belirtir.
Nitelenmiş adlar ve erişim deyimlerini kısıtlama
Tam adlar veya desenler , restrict access deyimine de eklenebilir. Küme adlarındaki joker karakterlere izin verilmez.
Aşağıdaki sorgu, sorgu erişimini aşağıdaki varlıklarla kısıtlar:
- Varsayılan veritabanında my... ile başlayan herhangi bir varlık adı.
- Geçerli kümenin MyOther... adlı tüm veritabanlarındaki herhangi bir tablo.
- Kümedeki my2... adlı tüm veritabanlarındaki herhangi bir tablo OtherCluster.kusto.windows.net.
restrict access to (my*, database("MyOther*").*, cluster("OtherCluster").database("my2*").*);
Uzak varlıkların şema değişikliklerini işleme
Kümeler arası sorguyu işlemek için, ilk sorgu yorumlamasını gerçekleştiren kümenin uzak kümelerde başvuruda bulunan varlıkların şemasına sahip olması gerekir. Bu bilgileri almak için şemaları almak için bir komut gönderilir ve bu komut daha sonra bir önbellekte depolanır.
Uzak kümede bir şema değişikliği olması durumunda, önbelleğe alınmış bir şemanın tarihi geçmiş olabilir. Bu, yeni veya silinen sütunların neden Partial query failure
olduğu senaryolar da dahil olmak üzere istenmeyen etkilere yol açabilir. Bu tür sorunları çözmek için .clear cache remote-schema komutuyla şemayı el ile yenileyin.
İşlevler ve görünümler
İşlevler ve görünümler (kalıcı ve satır içi olarak oluşturulan), veritabanı ve küme sınırları genelinde tablolara başvurabilir. Aşağıdaki kod geçerlidir.
let MyView = Table1 join database("OtherDb").Table2 on Key | join cluster("OtherCluster").database("SomeDb").Table3 on Key;
MyView | where ...
Kalıcı işlevlere ve görünümlere aynı kümedeki başka bir veritabanından erişilebilir.
Örneğin, veritabanında OtherDb
aşağıdaki tablosal işlevi (görünüm) oluşturduğunuzu varsayalım:
.create function MyView(v:string) { Table1 | where Column1 has v ... }
Ardından, veritabanında OtherDb
aşağıdaki skaler işlevi oluşturursunuz:
.create function MyCalc(a:double, b:double, c:double) { (a + b) / c }
Varsayılan veritabanında bu varlıklara aşağıdaki gibi başvurulabilir:
database("OtherDb").MyView("exception") | extend CalCol=database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10
Kümeler arası işlev çağrılarının sınırlamaları
Tablosal işlevlere veya görünümlere kümeler arasında başvurulabilir. Aşağıdaki sınırlamalar geçerlidir:
- Uzak işlevlerin tablo şeması döndürmesi gerekir. Skaler işlevlere yalnızca aynı kümede erişilebilir.
- Uzak işlevler yalnızca skaler bağımsız değişkenleri kabul edebilir. Bir veya daha fazla tablo bağımsız değişkeni alan işlevlere yalnızca aynı kümede erişilebilir.
- Uzak işlevlerin sonuç şeması düzeltilmelidir (sorgunun bölümlerini yürütmeden önceden bilinir).
Bu, eklenti gibi
pivot
sorgu yapılarının kullanımını önler. (Eklenti gibi bazı eklentilerinbag_unpack
sonuç şemasını statik olarak göstermenin bir yolunu desteklediğini ve bu biçimde bunun kümeler arası işlev çağrılarında kullanılabileceğini unutmayın.) - Performans nedenleriyle, uzak varlıkların şeması ilk çağrıdan sonra çağıran küme tarafından önbelleğe alınır. Bu nedenle, uzak varlıkta yapılan değişiklikler önbelleğe alınmış şema bilgileriyle uyuşmazlığa neden olabilir ve sorgu hatalarına yol açabilir. Daha fazla bilgi için bkz. Kümeler arası sorgular ve şema değişiklikleri.
Örnekler
Aşağıdaki kümeler arası çağrı geçerlidir.
cluster("OtherCluster").database("SomeDb").MyView("exception") | count
Aşağıdaki sorgu bir uzak skaler işlevi MyCalc
çağırır.
Bu çağrı 1. kuralı ihlal eder, bu nedenle geçerli değildir.
MyTable | extend CalCol=cluster("OtherCluster").database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10
Aşağıdaki sorgu uzak işlevi MyCalc
çağırır ve tablosal bir parametre sağlar.
Bu çağrı 2. kuralı ihlal eder, bu nedenle geçerli değildir.
cluster("OtherCluster").database("OtherDb").MyCalc(datatable(x:string, y:string)["x","y"] )
Aşağıdaki sorgu, parametresini tablename
temel alan değişken şema çıkışına sahip uzak işlevi SomeTable
çağırır.
Bu çağrı 3. kuralı ihlal eder, bu nedenle geçerli değildir.
içinde OtherDb
tablosal işlev.
.create function SomeTable(tablename:string) { table(tablename) }
Varsayılan veritabanında.
cluster("OtherCluster").database("OtherDb").SomeTable("MyTable")
Aşağıdaki sorgu, verileri temel alan değişken şema çıkışına sahip uzak işlevi GetDataPivot
çağırır (pivot() eklentisinin dinamik çıkışı vardır).
Bu çağrı 3. kuralı ihlal eder, bu nedenle geçerli değildir.
içinde OtherDb
tablosal işlev.
.create function GetDataPivot() { T | evaluate pivot(PivotColumn) }
Varsayılan veritabanında tablosal işlev.
cluster("OtherCluster").database("OtherDb").GetDataPivot()
İlgili içerik
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin