Python eklentisi
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini
Python eklentisi, Python betiği kullanarak kullanıcı tanımlı bir işlev (UDF) çalıştırır. Python betiği, girdi olarak tablosal verileri alır ve tablosal çıkış üretir. Eklentinin çalışma zamanı, kümenin düğümlerinde çalıştırılan korumalı alanlarda barındırılır.
Sözdizimi
T |
evaluate
[hint.distribution
=
(single
| per_node
)] [hint.remote
=
(auto
local
| )] python(
output_schema ,
betiği [ ,
script_parameters] [,
external_artifacts][,
spill_to_disk])
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
output_schema | string |
✔️ | type Python kodu tarafından döndürülen tablosal verilerin çıkış şemasını tanımlayan değişmez değer. Biçim: typeof( ColumnName: ColumnType[, ...]) . Örneğin, typeof(col1:string, col2:long) . Giriş şemasını genişletmek için aşağıdaki söz dizimini kullanın: typeof(*, col1:string, col2:long) . |
betik | string |
✔️ | Yürütülecek geçerli Python betiği. Çok satırlı dizeler oluşturmak için bkz . Kullanım ipuçları. |
script_parameters | dynamic |
Python betiğine ayrılmış kargs sözlük olarak geçirilecek ad değeri çiftlerinin özellik paketi. Daha fazla bilgi için bkz . Ayrılmış Python değişkenleri. |
|
hint.distribution | string |
Eklentinin yürütülmesinin birden çok küme düğümüne dağıtılması için bir ipucu. Varsayılan değer şudur: single . single , betiğin tek bir örneğinin sorgu verilerinin tamamı üzerinde çalıştırılacağı anlamına gelir. per_node , Python bloğundan önceki sorgu dağıtılırsa betiğin bir örneğinin içerdiği verilerde her düğümde çalıştırılacağı anlamına gelir. |
|
hint.remote | string |
Bu ipucu yalnızca kümeler arası sorgular için geçerlidir. Varsayılan değer şudur: auto . auto , Python kodunun hangi kümede yürütüleceğine sunucunun otomatik olarak karar aldığı anlamına gelir. Değerini, yerel kümede Python kodunu yürütmeye zorlamak için local ayarlama. Python eklentisinin uzak kümede devre dışı bırakılması durumunda bu eklentiyi kullanın. |
|
external_artifacts | dynamic |
Bulut depolama alanından erişilebilen yapıtlar için ad ve URL çiftlerinden oluşan bir özellik paketi. Daha fazla bilgi için bkz. Dış yapıtları kullanma. | |
spill_to_disk | bool |
Giriş tablosunu Python korumalı alanında seri hale getirmek için alternatif bir yöntem belirtir. Büyük tabloları seri hale getirmek için serileştirmeyi hızlandırmak ve korumalı alan bellek tüketimini önemli ölçüde azaltmak için true olarak ayarlayın. Varsayılan true değeridir. |
Ayrılmış Python değişkenleri
Aşağıdaki değişkenler Kusto Sorgu Dili ile Python kodu arasındaki etkileşim için ayrılmıştır.
df
: DataFrame olarakpandas
giriş tablosal verileri (yukarıdakilerin değerleriT
).kargs
: python sözlüğü olarak script_parameters bağımsız değişkeninin değeri.result
pandas
: Python betiği tarafından oluşturulan ve değeri eklentiyi izleyen Kusto sorgu işlecine gönderilen tablosal veriler haline gelen DataFrame.
Eklentiyi etkinleştirme
Eklenti varsayılan olarak devre dışıdır. Başlamadan önce önkoşul listesini gözden geçirin. Eklentiyi etkinleştirmek ve Python görüntüsünün sürümünü seçmek için bkz . Kümenizde dil uzantılarını etkinleştirme.
Python korumalı alanı görüntüsü
Python görüntüsünün sürümünü farklı bir yönetilen görüntü veya özel görüntü olarak değiştirmek için bkz . Kümenizdeki Python dil uzantıları görüntüsünü değiştirme.
Farklı Python görüntülerine yönelik paketlerin listesini görmek için bkz . Python paket başvurusu.
Not
- Varsayılan olarak, eklenti numpy'yi np ve pandas'ı pd olarak içeri aktarır. İsteğe bağlı olarak, gerektiğinde diğer modülleri içeri aktarabilirsiniz.
- Bazı paketler, eklentinin çalıştırıldığı korumalı alan tarafından uygulanan sınırlamalarla uyumsuz olabilir.
Sorgu ve güncelleştirme ilkesinden alımı kullanma
- Eklentiyi şu sorgularda kullanın:
- Kaynak tablosu akışsız alma kullanılarak alınan güncelleştirme ilkesinin bir parçası olarak tanımlanır.
- gibi bir sorgudan alan bir komutun parçası olarak
.set-or-append
çalıştırın.
- Eklentiyi, kaynak tablosu akış alımı kullanılarak alınan güncelleştirme ilkesinin parçası olarak tanımlanan bir sorguda kullanamazsınız.
Örnekler
range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double), // Output schema: append a new fx column to original table
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters
)
| render linechart
print "This is an example for using 'external_artifacts'"
| evaluate python(
typeof(File:string, Size:string), ```if 1:
import os
result = pd.DataFrame(columns=['File','Size'])
sizes = []
path = '.\\\\Temp'
files = os.listdir(path)
result['File']=files
for file in files:
sizes.append(os.path.getsize(path + '\\\\' + file))
result['Size'] = sizes
```,
external_artifacts =
dynamic({"this_is_my_first_file":"https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r",
"this_is_a_script":"https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py"})
)
Dosya | Size |
---|---|
this_is_a_script | 120 |
this_is_my_first_file | 105 |
Performans ipuçları
- Eklentinin giriş veri kümesini gereken en düşük miktara (sütunlar/satırlar) düşürün.
- Mümkün olduğunda Kusto'nun sorgu diliyle kaynak veri kümesindeki filtreleri kullanın.
- Kaynak sütunların bir alt kümesinde hesaplama yapmak için eklentiyi çağırmadan önce yalnızca bu sütunları yansıtın.
- Betiğinizdeki mantık dağıtılabilir olduğunda kullanın
hint.distribution = per_node
.- Giriş veri kümesini bölümleme için bölüm işlecini de kullanabilirsiniz.
- Mümkün olduğunda Python betiğinizin mantığını uygulamak için Kusto'nun sorgu dilini kullanın.
Kullanım ipuçları
Sorgu düzenleyicinizde Python betiğini içeren çok satırlı dizeler oluşturmak için, sık kullandığınız Python düzenleyicisinden (Jupyter, Visual Studio Code, PyCharm vb.) Python betiğinizi kopyalayın, sorgu düzenleyicinize yapıştırın ve ardından tam betiği ardışık üç arka uç içeren satırlar arasına alın. Örneğin:
```
python code
```
Örnek
let script =
externaldata(script:string)
[h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
with(format = raw);
range x from 1 to 360 step 1
| evaluate python(
typeof(*, fx:double),
toscalar(script),
bag_pack('gain', 100, 'cycles', 4))
| render linechart
Dış Yapıtları Kullanma
Bulut depolamadan dış yapıtlar betik için kullanılabilir hale getirilebilir ve çalışma zamanında kullanılabilir.
Dış yapıtlar özelliği tarafından başvuruda bulunılan URL'ler şu şekilde olmalıdır:
- Kümenin belirtme çizgisi ilkesine eklenir.
- Genel kullanıma açık bir konumda veya depolama bağlantı dizesi açıklandığı gibi gerekli kimlik bilgilerini sağlayın.
Not
Yönetilen Kimlikler kullanarak dış yapıtların kimliğini doğrularken, kullanımın SandboxArtifacts
küme düzeyinde yönetilen kimlik ilkesinde tanımlanması gerekir.
Yapıtlar, betiğin yerel geçici dizininden .\Temp
tüketmesi için kullanılabilir hale getirilir. Özellik paketinde sağlanan adlar yerel dosya adları olarak kullanılır. Bkz. Örnekler.
Dış paketlere başvurma hakkında bilgi için bkz . Python eklentisi için paketleri yükleme.
Dış yapıt önbelleği yenileniyor
Sorgularda kullanılan dış yapıt dosyaları kümenizde önbelleğe alınır. Bulut depolamadaki dosyalarınızda güncelleştirmeler yapıyorsanız ve kümenizle anında eşitleme gerektiriyorsanız.clear cluster cache external-artifacts komutunu kullanabilirsiniz. Bu komut önbelleğe alınan dosyaları temizler ve sonraki sorguların yapıtların en son sürümüyle çalışmasını sağlar.
Python eklentisi için paketleri yükleme
Çoğu kullanım örneğinde özel görüntü oluşturmayı tercih edebilirsiniz.
Aşağıdaki nedenlerle paketleri kendiniz yüklemek isteyebilirsiniz:
- Özel görüntü oluşturma izniniz yok.
- Paket özeldir.
- Test için geçici bir paket yüklemesi oluşturmayı tercih eder ve özel görüntü oluşturma ek yükünü istemezsiniz.
Paketleri aşağıdaki gibi yükleyin:
Önkoşullar
Paketleri barındırmak için tercihen kümenizle aynı yerde bir blob kapsayıcısı oluşturun. Örneğin,
https://artifactswestus.blob.core.windows.net/python
kümenizin Batı ABD'de olduğunu varsayarsak.Bu konuma erişime izin vermek için kümenin belirtme çizgisi ilkesini değiştirin.
Bu değişiklik Için AllDatabasesAdmin izinleri gerekir.
Örneğin, içinde
https://artifactswestus.blob.core.windows.net/python
bulunan bir bloba erişimi etkinleştirmek için aşağıdaki komutu çalıştırın:
.alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.blob\\.core\\.windows\\.net/python/","CanCall": true } ]'
Paketleri yükleme
PyPi veya diğer kanallardaki genel paketler için paketi ve bağımlılıklarını indirin.
- Yerel Windows Python ortamınızdaki bir cmd penceresinde şunu çalıştırın:
pip wheel [-w download-dir] package-name.
Gerekli paketi ve bağımlılıklarını içeren bir ZIP dosyası oluşturun.
- Özel paketler için paketin klasörünü ve bağımlılıklarının klasörlerini sıkıştırın.
- Genel paketler için önceki adımda indirilen dosyaları sıkıştırın.
Not
- Python altyapısı ve korumalı alan çalışma zamanı platformuyla uyumlu paketi indirdiğinizden emin olun (şu anda Windows'ta 3.6.5)
- Dosyaların üst klasörlerini değil, kendilerinin
.whl
sıkıştırmasını sağlayın. - Temel korumalı alan görüntüsünde aynı sürüme sahip paketler için dosyaları atlayabilirsiniz
.whl
.
Sıkıştırılmış dosyayı yapıtlar konumundaki bir bloba yükleyin (1. adımda).
Eklentiyi çağırın
python
.- Parametreyi
external_artifacts
bir özellik paketi adı ve ZIP dosyasına (SAS belirteci de dahil olmak üzere blobUN URL'si) başvuruyla belirtin. - Satır içi python kodunuzda öğesini içeri aktarın
Zipackage
ve yöntemini ZIP dosyasının adıyla çağırıninstall()
.sandbox_utils
- Parametreyi
Örnek
Sahte veri oluşturan Faker paketini yükleyin.
range ID from 1 to 3 step 1
| extend Name=''
| evaluate python(typeof(*), ```if 1:
from sandbox_utils import Zipackage
Zipackage.install("Faker.zip")
from faker import Faker
fake = Faker()
result = df
for i in range(df.shape[0]):
result.loc[i, "Name"] = fake.name()
```,
external_artifacts=bag_pack('faker.zip', 'https://artifacts.blob.core.windows.net/Faker.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))
Kimlik | Veri Akışı Adı |
---|---|
1 | Gary Tapia |
2 | Emma Evans |
3 | Ashley Bowen |
İlgili içerik
Python eklentisini kullanan UDF işlevlerine daha fazla örnek için İşlevler kitaplığına bakın.
Python eklentisi, Python betiği kullanarak kullanıcı tanımlı bir işlev (UDF) çalıştırır. Python betiği, girdi olarak tablosal verileri alır ve tablosal çıkış üretir.
Sözdizimi
T evaluate
|
[hint.distribution
=
(single
| per_node
)] [hint.remote
=
(auto
local
| )] python(
output_schema ,
betiği [,
script_parameters] [,
spill_to_disk])
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
output_schema | string |
✔️ | type Python kodu tarafından döndürülen tablosal verilerin çıkış şemasını tanımlayan değişmez değer. Biçim: typeof( ColumnName: ColumnType[, ...]) . Örneğin, typeof(col1:string, col2:long) . Giriş şemasını genişletmek için aşağıdaki söz dizimini kullanın: typeof(*, col1:string, col2:long) . |
betik | string |
✔️ | Yürütülecek geçerli Python betiği. Çok satırlı dizeler oluşturmak için bkz . Kullanım ipuçları. |
script_parameters | dynamic |
Python betiğine ayrılmış kargs sözlük olarak geçirilecek ad değeri çiftlerinin özellik paketi. Daha fazla bilgi için bkz . Ayrılmış Python değişkenleri. |
|
hint.distribution | string |
Eklentinin yürütülmesinin birden çok küme düğümüne dağıtılması için bir ipucu. Varsayılan değer şudur: single . single , betiğin tek bir örneğinin sorgu verilerinin tamamı üzerinde çalıştırılacağı anlamına gelir. per_node , Python bloğundan önceki sorgu dağıtılırsa betiğin bir örneğinin içerdiği verilerde her düğümde çalıştırılacağı anlamına gelir. |
|
hint.remote | string |
Bu ipucu yalnızca kümeler arası sorgular için geçerlidir. Varsayılan değer şudur: auto . auto , Python kodunun hangi kümede yürütüleceğine sunucunun otomatik olarak karar aldığı anlamına gelir. Değerini, yerel kümede Python kodunu yürütmeye zorlamak için local ayarlama. Python eklentisinin uzak kümede devre dışı bırakılması durumunda bu eklentiyi kullanın. |
|
spill_to_disk | bool |
Giriş tablosunu Python korumalı alanında seri hale getirmek için alternatif bir yöntem belirtir. Büyük tabloları seri hale getirmek için serileştirmeyi hızlandırmak ve korumalı alan bellek tüketimini önemli ölçüde azaltmak için true olarak ayarlayın. Varsayılan true değeridir. |
Ayrılmış Python değişkenleri
Aşağıdaki değişkenler Kusto Sorgu Dili ile Python kodu arasındaki etkileşim için ayrılmıştır.
df
: DataFrame olarakpandas
giriş tablosal verileri (yukarıdakilerin değerleriT
).kargs
: python sözlüğü olarak script_parameters bağımsız değişkeninin değeri.result
pandas
: Python betiği tarafından oluşturulan ve değeri eklentiyi izleyen Kusto sorgu işlecine gönderilen tablosal veriler haline gelen DataFrame.
Eklentiyi etkinleştirme
Eklenti varsayılan olarak devre dışıdır. Başlamadan önce KQL veritabanınızda Python eklentisini etkinleştirin.
Python korumalı alanı görüntüsü
Farklı Python görüntülerine yönelik paketlerin listesini görmek için bkz . Python paket başvurusu.
Not
- Varsayılan olarak, eklenti numpy'yi np ve pandas'ı pd olarak içeri aktarır. İsteğe bağlı olarak, gerektiğinde diğer modülleri içeri aktarabilirsiniz.
- Bazı paketler, eklentinin çalıştırıldığı korumalı alan tarafından uygulanan sınırlamalarla uyumsuz olabilir.
Sorgu ve güncelleştirme ilkesinden alımı kullanma
- Eklentiyi şu sorgularda kullanın:
- Kaynak tablosu akışsız alma kullanılarak alınan güncelleştirme ilkesinin bir parçası olarak tanımlanır.
- gibi bir sorgudan alan bir komutun parçası olarak
.set-or-append
çalıştırın.
- Eklentiyi, kaynak tablosu akış alımı kullanılarak alınan güncelleştirme ilkesinin parçası olarak tanımlanan bir sorguda kullanamazsınız.
Örnekler
range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double), // Output schema: append a new fx column to original table
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters
)
| render linechart
Performans ipuçları
- Eklentinin giriş veri kümesini gereken en düşük miktara (sütunlar/satırlar) düşürün.
- Mümkün olduğunda Kusto'nun sorgu diliyle kaynak veri kümesindeki filtreleri kullanın.
- Kaynak sütunların bir alt kümesinde hesaplama yapmak için eklentiyi çağırmadan önce yalnızca bu sütunları yansıtın.
- Betiğinizdeki mantık dağıtılabilir olduğunda kullanın
hint.distribution = per_node
.- Giriş veri kümesini bölümleme için bölüm işlecini de kullanabilirsiniz.
- Mümkün olduğunda Python betiğinizin mantığını uygulamak için Kusto'nun sorgu dilini kullanın.
Kullanım ipuçları
Sorgu düzenleyicinizde Python betiğini içeren çok satırlı dizeler oluşturmak için, sık kullandığınız Python düzenleyicisinden (Jupyter, Visual Studio Code, PyCharm vb.) Python betiğinizi kopyalayın, sorgu düzenleyicinize yapıştırın ve ardından tam betiği ardışık üç arka uç içeren satırlar arasına alın. Örneğin:
```
python code
```
Örnek
let script =
externaldata(script:string)
[h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
with(format = raw);
range x from 1 to 360 step 1
| evaluate python(
typeof(*, fx:double),
toscalar(script),
bag_pack('gain', 100, 'cycles', 4))
| render linechart
İlgili içerik
Python eklentisini kullanan UDF işlevlerine daha fazla örnek için İşlevler kitaplığına bakın.