MaxCompute, iş gereksinimlerinizi karşılamak için çeşitli yerleşik işlevler sunar. MaxCompute'ün yerleşik işlevleri iş ihtiyaçlarınızı karşılamıyorsa, bu konuda açıklanan geliştirme sürecini ve örnekleri temel alarak kod yazıp kullanıcı tanımlı işlevler (UDF) oluşturabilirsiniz.
Arka Plan Bilgileri
Geniş anlamda kullanıcı tanımlı işlevler üç türden oluşur: kullanıcı tanımlı skaler işlev (UDF), kullanıcı tanımlı tablo değerli işlev (UDTF) ve kullanıcı tanımlı toplam işlevi (UDAF). Dar anlamda UDF'ler yalnızca kullanıcı tanımlı skaler işlevleri ifade eder. Aşağıdaki tabloda MaxCompute'ün desteklediği UDF türleri açıklanmaktadır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yukarıda belirtilen UDF'lere ek olarak MaxCompute, özel senaryolar için aşağıdaki UDF'leri de sunar.
|
|
|
|
|
|
|
|
|
|
|
Sınırlamalar
-
UDF'ler aracılığıyla İnternet'e erişim
Varsayılan olarak MaxCompute, UDF'ler kullanarak İnternet'e erişmenize izin vermez. UDF'ler aracılığıyla İnternet'e erişmek istiyorsanız iş gereksinimlerinize göre ağ bağlantısı başvuru formunu doldurun ve başvuruyu gönderin. MaxCompute teknik destek ekibi ağ bağlantısını etkinleştirmek için sizinle hızlı bir şekilde iletişime geçecektir. Ağ bağlantısı başvuru formunun nasıl doldurulacağı hakkında daha fazla bilgi için bkz. Ağ bağlantısı süreci.
-
UDF'ler aracılığıyla VPC'ye erişim
Varsayılan olarak MaxCompute, UDF'ler kullanarak VPC'lerdeki kaynaklara erişmenize izin vermez. UDF'ler aracılığıyla bir VPC'deki kaynaklara erişmek için MaxCompute ile VPC arasında bir ağ bağlantısı kurmanız gerekir. İlgili işlemler hakkında daha fazla bilgi için bkz. Bir UDF'den VPC kaynaklarına erişim.
-
UDF'ler, UDAF'ler veya UDTF'ler kullanarak tablo verilerini okuma
UDF'ler, UDAF'ler veya UDTF'ler kullanarak aşağıdaki tablo türlerinden veri okuyamazsınız:
Şema evriminin uygulandığı tablo
Karmaşık veri türleri içeren tablo
JSON veri türleri içeren tablo
İşlemsel tablo
Dikkat Edilmesi Gerekenler
UDF'leri kullanmadan önce aşağıdaki hususlara dikkat edin:
UDF'ler performans açısından yerleşik işlevlerle rekabet edemez. İş mantığınızı uygulamak için öncelikli olarak yerleşik işlevleri kullanmanızı öneririz.
SQL deyimlerinde bir UDF kullanırken, büyük miktarda veri işlendiğinde ve veri eğriliği meydana geldiğinde bir hesaplama işinin bellek kullanımı varsayılan olarak ayrılan bellek boyutunu aşabilir. Bu durumda sorunu çözmek için oturum düzeyinde
set odps.sql.udf.joiner.jvm.memory=xxxx;komutunu çalıştırabilirsiniz. UDF'ler hakkında daha fazla bilgi için bkz. MaxCompute UDF'leri hakkında SSS.Bir UDF'nin adı yerleşik bir işlevin adıyla aynıysa UDF öncelikli olarak çağrılır. Örneğin, MaxCompute'de hem CONCAT UDF'si hem de CONCAT yerleşik işlevi varsa sistem otomatik olarak yerleşik CONCAT işlevi yerine CONCAT UDF'sini çağırır. Yerleşik işlevi çağırmak istiyorsanız yerleşik işlevin önüne
::sembolünü eklemeniz gerekir. Örneğin,select ::concat('ab', 'c');kullanabilirsiniz.
UDF Geliştirme: Desteklenen Araçlar ve Genel Süreç
Bu bölümde bir UDF, UDTF veya UDAF'in nasıl geliştirileceği açıklanmaktadır.
Kod Gömülü UDF'ler, UDF'ler (SQL kullanıcı tanımlı işlevleri) ve Coğrafi Mekansal UDF'ler geliştirme süreci farklıdır. Daha fazla bilgi için ilgili belgelere bakın.
UDF Geliştirmek İçin Java Kullanma
Aşağıdaki şekil, Java'da bir MaxCompute UDF'in nasıl geliştirileceğini göstermektedir.

Prosedür | Açıklama | Platform | Dikkat Edilmesi Gerekenler veya Referanslar | |
1 | İsteğe Bağlı | Maven kullanarak kod yazabilmeniz için kodun derlenebilmesini sağlamak üzere ilgili SDK bağımlılıklarını POM dosyasına eklemeniz gerekir. Aşağıdaki SDK bağımlılığı bir örnek göstermektedir: SDK bağımlılığının sürümünü almak için |
| Yok. |
2 | Zorunlu | İş gereksinimlerinize göre UDF kodu yazın. |
| Java kullanarak UDF geliştirirken Java UDF geliştirme spesifikasyonlarının gerekliliklerinin karşılandığından emin olun. Daha fazla bilgi için bkz. UDF geliştirme spesifikasyonları ve genel süreç (Java). |
3 | Zorunlu | Sonucun beklentileri karşılayıp karşılamadığını kontrol etmek için UDF'i yerel makinenizde çalıştırarak veya birim testi yaparak hata ayıklayın. | ||
4 | Zorunlu | Kodun yerel makinenizde başarıyla çalıştırıldıktan sonra bir JAR dosyasına paketlendiğinden emin olmak için UDF kodunda hata ayıklayın. | ||
5 | Zorunlu | JAR dosyasını bir kaynak olarak MaxCompute projenize yükleyin. | Kaynakları yüklemek ve işlevleri kaydetmek için aşağıdaki üç yöntemi kullanabilirsiniz:
| |
6 | Zorunlu | Yüklediğiniz JAR dosyasını temel alarak bir UDF oluşturun. | ||
7 | İsteğe Bağlı | Sorgu verisi kodunda UDF'i çağırın. | Yok. | |
UDF Geliştirmek İçin Python Kullanma
Aşağıdaki şekil, Python'da bir MaxCompute UDF'in nasıl geliştirileceğini göstermektedir.
Prosedür | Açıklama | Platform | Dikkat Edilmesi Gerekenler veya Referanslar | |
1 | Zorunlu | İş gereksinimlerinize göre bir UDF yazın. | Python kullanarak UDF geliştirirken Python UDF geliştirme spesifikasyonlarının gerekliliklerinin karşılandığından emin olun. Daha fazla bilgi için bkz. UDF geliştirme spesifikasyonları ve genel süreç (Python 3) veya UDF geliştirme spesifikasyonları ve genel süreç (Python 2). | |
2 | Zorunlu | Sonucun beklentileri karşılayıp karşılamadığını kontrol etmek için UDF'i yerel makinenizde çalıştırarak veya birim testi yaparak hata ayıklayın. | ||
3 | Zorunlu | Python dosyalarını veya dosya kaynakları, tablo kaynakları ve üçüncü taraf paketler gibi gerekli kaynakları bir MaxCompute projesine yükleyin. | Kaynakları yüklemek ve işlevleri kaydetmek için aşağıdaki üç yöntemi kullanabilirsiniz:
| |
4 | Zorunlu | Yüklenen Python dosyalarını veya gerekli kaynakları temel alarak bir UDF oluşturun. | ||
5 | İsteğe Bağlı | Sorgu verisi kodunda UDF'i çağırın. | Yok. | |
Geliştirme Referansı: MaxCompute SDK
Aşağıdaki tabloda MaxCompute tarafından sağlanan SDK'ler açıklanmaktadır. Her bir SDK'de yer alan paketler ve paketlerdeki sınıflar hakkında daha fazla bilgi için bkz. MaxCompute SDK.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bir UDF Çağırma
Bir UDF geliştirdikten ve UDF'i MaxCompute'de kaydettikten sonra sonraki iş geliştirme sürecinde UDF'i kullanabilirsiniz. Bir UDF'i çağırmak için aşağıdaki yöntemleri kullanın:
Bir MaxCompute projesinde UDF kullanma: Yöntem, yerleşik işlevleri kullanmaya benzer. Bir kullanıcı tanımlı işlevi, yerleşik bir işlevi kullandığınız şekilde kullanabilirsiniz.
Projeler arası UDF kullanma: B Projesindeki bir UDF'i A Projesinde kullanma. Aşağıdaki deyim bir örnek göstermektedir:
select B:udf_in_other_project(arg0, arg1) as res from table_t;. Projeler arası paylaşım hakkında daha fazla bilgi için bkz. Paketlere dayalı projeler arası kaynak erişimi.