Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Lakeflow Designer için bileşik faizi hesaplayan bir Python UDF işleci oluşturacaksınız. Tek tek değerleri veya sütunları dönüştüren işleç oluşturmanın temellerini öğrenmek için bu örneği kullanın. Daha fazla bilgi edinmek için bkz. Lakeflow Designer'da kullanıcı tanımlı işleçler.
Overview
Bu öğretici, Python UDF kullanarak kullanıcı tanımlı bir işleç oluşturma işleminde size yol gösterir. işleci, bileşik faiz formülünü A = P × (1 + r/n)^(n×t)kullanarak yatırımın gelecekteki değerini hesaplar. Burada:
- P = Asıl (başlangıç miktarı)
- r = Yıllık faiz oranı (ondalık olarak)
- n = Yıl başına bileşik dönem sayısı
- t = Yıl içindeki süre
1. Adım: Python işlevini yazma ve test edin
İlk olarak, hesaplamayı gerçekleştiren çekirdek Python işlevini tanımlayın. Düzgün çalıştığından emin olmak için not defteri hücresinde test edin.
def compound_amount(principal: float,
annual_rate: float,
compounds_per_year: int,
years: float) -> float:
"""
Compute compound interest future value.
A = P * (1 + r/n)^(n*t)
principal: starting amount (P)
annual_rate: annual nominal rate as decimal (r), e.g. 0.05
compounds_per_year: compounding periods per year (n), e.g. 12
years: time in years (t), can be fractional
"""
import math
if principal is None or annual_rate is None or compounds_per_year is None or years is None:
return None
if compounds_per_year <= 0:
raise ValueError("compounds_per_year must be > 0")
return principal * math.pow(1.0 + annual_rate / compounds_per_year,
compounds_per_year * years)
İşlevi aşağıdaki kodla test edebilirsiniz:
# $1,000 invested at 5% annual rate, compounded monthly for 10 years
compound_amount(1000, 0.05, 12, 10)
# Expected result: ~1647.01
2. Adım: İşleç için YAML oluşturma
YAML yapılandırması, işlecin Lakeflow Designer'da nasıl görüneceğini tanımlar. Bu işleç için:
-
Principal, kullanıcıların verilerinden bir sütun seçebilmesi için bir
expressionpencere öğesi kullanır -
Yıllık oran, Yıllık bileşikler ve Yıllar varsayılanlar ve kısıtlamalar içeren pencere öğeleri kullanır
number - işleci, ifade parametresi için sütun verileri sağlayan bir giriş bağlantı noktasına sahiptir
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Compound Amount
id: finance.compound_amount
version: '1.0.0'
description: >
Computes the future value of an investment using compound interest.
Formula: A = P * (1 + r/n)^(n*t)
config:
type: object
properties:
principal:
type: string
format: expression
title: Principal
examples:
- 'Select principal column or expression'
x-ui:
widget: expression
port: in
annual_rate:
type: number
title: Annual rate (decimal)
default: 0.05
minimum: 0
examples:
- 'e.g. 0.05 for 5%'
x-ui:
widget: number
compounds_per_year:
type: number
title: Compounds per year
default: 12
minimum: 1
examples:
- 'e.g. 12 for monthly'
x-ui:
widget: number
years:
type: number
title: Years
default: 10
minimum: 0
examples:
- 'Time in years (t)'
x-ui:
widget: number
required:
- principal
- annual_rate
- compounds_per_year
- years
additionalProperties: false
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
Tüm kullanılabilir özelliklere, veri türlerine, pencere öğelerine ve seçeneklere yönelik kapsamlı bir kılavuz için bkz. Kullanıcı tanımlı işleç YAML başvurusu .
3. Adım: Unity Kataloğu işlevini oluşturma
YAML şemasını ve Python işlevini tek bir CREATE FUNCTION deyiminde birleştirin. YAML yapılandırması, fonksiyon gövdesinin başındaki docstring içinde yer alır.
CREATE OR REPLACE FUNCTION main.my_schema.compound_amount(
principal DOUBLE,
annual_rate DOUBLE,
compounds_per_year INT,
years FLOAT)
RETURNS DOUBLE
LANGUAGE PYTHON
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Compound Amount
id: finance.compound_amount
version: "1.0.0"
description: >
Computes the future value of an investment using compound interest.
Formula: A = P * (1 + r/n)^(n*t)
config:
type: object
properties:
principal:
type: string
format: expression
title: Principal
examples:
- "Select principal column or expression"
x-ui:
widget: expression
port: in
annual_rate:
type: number
title: Annual rate (decimal)
default: 0.05
minimum: 0
examples:
- "e.g. 0.05 for 5%"
x-ui:
widget: number
compounds_per_year:
type: number
title: Compounds per year
default: 12
minimum: 1
examples:
- "e.g. 12 for monthly"
x-ui:
widget: number
years:
type: number
title: Years
default: 10
minimum: 0
examples:
- "Time in years (t)"
x-ui:
widget: number
required:
- principal
- annual_rate
- compounds_per_year
- years
additionalProperties: false
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
"""
def compound_amount(principal: float,
annual_rate: float,
compounds_per_year: int,
years: float) -> float:
import math
if principal is None or annual_rate is None or compounds_per_year is None or years is None:
return None
if compounds_per_year <= 0:
raise ValueError("compounds_per_year must be > 0")
return principal * math.pow(1.0 + annual_rate / compounds_per_year,
compounds_per_year * years)
return compound_amount(principal, annual_rate, compounds_per_year, years)
$$
4. Adım: İşlevi test edin
UC işlevini doğrudan SQL ile test edin:
-- Test 1: $1,000 at 5% compounded monthly for 10 years
SELECT main.my_schema.compound_amount(1000, 0.05, 12, 10)
-- Expected: ~1647.01
-- Test 2: $1,000 at 5% compounded annually for 1 year
SELECT main.my_schema.compound_amount(1000, 0.05, 1, 1)
-- Expected: 1050.00
-- Test 3: $1,000 at 15% compounded monthly for 1 year
SELECT main.my_schema.compound_amount(1000, 0.15, 12, 1)
-- Expected: ~1160.75
5. Adım: İşleci kaydetme
İşleci .user_defined_operators.yaml dosyanıza ekleyin:
operators:
- catalog: main
schema: my_schema
functionName: compound_amount
Note
Bu dosyayı kullanıcı klasörünüzde tanımlarsanız, yalnızca sizin için görünür. Daha fazla bilgi için bkz. Operatörünüzü bulunabilir hale getirme.
6. Adım: İzinleri ayarlama
Bu işleci kullanması gereken kullanıcılara erişim izni verin:
GRANT USE SCHEMA ON SCHEMA main.my_schema TO `<user>`;
GRANT EXECUTE ON FUNCTION main.my_schema.compound_amount TO `<user>`;
Lakeflow Designer'da operatörü kullanın
İşleç kaydedildikten sonra Lakeflow Designer'da şu şekilde görünür:
- Giriş verilerinizden asıl sütunu seçmek için açılan menü
- Hız, bileşik sıklık ve yıllar için sayı girişleri (mantıklı varsayılanlarla)
Kullanıcılar, yatırım verilerinin tüm sütunları için gelecekteki değerleri hesaplamak için bu işleci uygulayabilir.