Eğitim: Bileşik faiz hesaplayıcı işleci

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)

Fonksiyonu örnek bir yatırımla test edin: 10 yıl için, yıllık %5 faiz oranıyla ve aylık bileşiklenen $1,000. Sonuç yaklaşık 1647.01olarak olmalıdır.

compound_amount(1000, 0.05, 12, 10)

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 expression pencere öğ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.

Örnek, işlevi main.example_output içinde oluşturur. Eğer şema yoksa, önce onu oluşturun:

CREATE SCHEMA IF NOT EXISTS main.example_output
CREATE OR REPLACE FUNCTION main.example_output.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 fonksiyonunu doğrudan SQL ile test edin. Bu sorgular üç senaryoyu kontrol eder:

  • 10 yıl boyunca aylık bileşik %5 faizle 1.000 ABD doları, yaklaşık olarak 1647.01 getiri sağlar
  • 1 yıl için yıllık %5 bileşik faizle 1.000 ABD doları, bu da 1050.00 getiri sağlar
  • 15% 1000 dolar aylık 1 yıl boyunca yaklaşık olarak getiri getirmektedir 1160.75
SELECT main.example_output.compound_amount(1000, 0.05, 12, 10);
SELECT main.example_output.compound_amount(1000, 0.05, 1, 1);
SELECT main.example_output.compound_amount(1000, 0.15, 12, 1);

5. Adım: İşleci kaydetme

İşleci .user_defined_operators.yaml dosyanıza ekleyin:

operators:
  - catalog: main
    schema: example_output
    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.example_output TO `<user>`;
GRANT EXECUTE ON FUNCTION main.example_output.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.