Code entwickeln

Als erstes muss der fachliche Code der Transformation entwickelt werden, was normalerweise außerhalb von datasqill mit dem Entwicklungstool der Wahl passiert. Zweitens müssen die Zieltabellen definiert und angelegt werden, falls sie noch nicht existieren.

Die erste Abfrage würde Daten für eine Dimensionstabelle aufbereiten.

SELECT p_partkey AS part_key
     , p_name AS part_name
     , p_type AS part_type
     , p_size AS part_size
     , p_retailprice AS part_price
     , SUM(ps_availqty) AS availqty
     , AVG(ps_supplycost) AS avg_supplycost
  FROM stage.part
     , stage.partsupp
WHERE p_partkey = ps_partkey
GROUP BY p_partkey
     , p_name
     , p_type
     , p_size
     , p_retailprice

Dabei kann die Dimensionstabelle so aussehen.

CREATE TABLE data_mart.d_part (
    part_key NUMERIC UNIQUE NOT NULL
  , part_name VARCHAR
  , part_type VARCHAR
  , part_size NUMERIC
  , part_price NUMERIC
  , availqty NUMERIC
  , avg_supplycost NUMERIC
);

Die zweite Abfrage wird die Daten für eine Faktentabelle aufbereiten.

SELECT EXTRACT(year from o_orderdate) AS order_year
     , customer_key
     , part_key
     , SUM(l_extendedprice * (1 - l_discount)) AS revenue
     , SUM(l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity) AS profit
  FROM stage.lineitem
     , stage.partsupp
     , stage.orders
     , data_mart.d_part
     , data_mart.d_supplier
     , data_mart.d_customer
 WHERE l_orderkey = o_orderkey
   AND o_custkey = customer_key
   AND l_suppkey = supplier_key
   AND l_partkey = part_key
   AND l_suppkey = ps_suppkey
   AND l_partkey = ps_partkey
 GROUP BY 1, 2, 3

Die Zieltabelle wäre dann.

CREATE TABLE data_mart.f_profit (
    order_year NUMERIC
  , customer_key NUMERIC
  , part_key NUMERIC
  , revenue NUMERIC
  , profit NUMERIC
);

Die Zieltabellen müssen in der Datenbank angelegt werden. Wichtig ist zu beachten, dass der User (der von datasqill für die Verbindung verwendet wird) auch die Schreibrechte auf die Tabellen hat oder über Grants bekommt.