Aracılığıyla paylaş


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

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 failureolduğ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 OtherDbaş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 OtherDbaş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ı eklentilerin bag_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 tablenametemel 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 OtherDbtablosal 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 OtherDbtablosal işlev.

.create function GetDataPivot() { T | evaluate pivot(PivotColumn) }  

Varsayılan veritabanında tablosal işlev.

cluster("OtherCluster").database("OtherDb").GetDataPivot()