#1
This guide shows how to build a simple ETL pipeline using Spring Boot and SAP HANA Express to extract, transform, and load data.

1. Create Target Table in SAP HANA

CREATE COLUMN TABLE CLEANED_ORDERS (
    ID INTEGER PRIMARY KEY,
    PRODUCT NVARCHAR(100),
    QUANTITY INT,
    REGION NVARCHAR(50)
);

2. Add Dependencies

In pom.xml:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
  <groupId>com.sap.cloud.db.jdbc</groupId>
  <artifactId>ngdbc</artifactId>
  <version>2.18.14</version>
</dependency>

3. Configure application.properties

spring.datasource.url=jdbc:sap://localhost:39015/?databaseName=HXE
spring.datasource.username=SYSTEM
spring.datasource.password=YourPassword
spring.datasource.driver-class-name=com.sap.db.jdbc.Driver

4. Define Entity

import jakarta.persistence.*;

@Entity
public class CleanedOrder {
    @Id
    private int id;
    private String product;
    private int quantity;
    private String region;

    // getters and setters
}

5. Repository

import org.springframework.data.jpa.repository.JpaRepository;

public interface CleanedOrderRepository extends JpaRepository<CleanedOrder, Integer> {
}

6. ETL Service

import org.springframework.stereotype.Service;
import java.util.*;

@Service
public class ETLService {
    private final CleanedOrderRepository repo;

    public ETLService(CleanedOrderRepository repo) {
        this.repo = repo;
    }

    public void runETL() {
        // Extract: mock raw data
        List<Map<String, Object>> raw = List.of(
            Map.of("id", 1, "product", " Laptop ", "quantity", 2, "region", "US "),
            Map.of("id", 2, "product", "Phone", "quantity", 5, "region", " EU")
        );

        // Transform: trim and clean
        List<CleanedOrder> cleaned = raw.stream().map(r -> {
            CleanedOrder o = new CleanedOrder();
            o.setId((int) r.get("id"));
            o.setProduct(r.get("product").toString().trim());
            o.setQuantity((int) r.get("quantity"));
            o.setRegion(r.get("region").toString().trim().toUpperCase());
            return o;
        }).toList();

        // Load: save to SAP HANA
        repo.saveAll(cleaned);
    }
}

7. Run Pipeline via REST

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/etl")
public class ETLController {
    private final ETLService service;

    public ETLController(ETLService service) {
        this.service = service;
    }

    @PostMapping("/run")
    public String runPipeline() {
        service.runETL();
        return "ETL completed!";
    }
}

Test

Run app and call:
POST /etl/run
Data will be cleaned and inserted into CLEANED_ORDERS in SAP HANA.

image quote pre code