Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SCD Tipe 3

Data dimensi yang berubah secara perlahan atau tidak terduga ditangkap dalam analisis Dimensi yang Berubah Perlahan (SCD). Dalam lingkungan data warehouse, tabel dimensi memiliki kunci utama yang secara unik mengidentifikasi setiap record dan bagian informasi lainnya yang dikenal sebagai data dimensional.

Semua metode pembaruan untuk jenis SCD yang berbeda dapat dilakukan dengan menggunakan program SortCL di IRI CoSort. Di IRI Voracity ada wizard untuk membantu membuat skrip pekerjaan SCD yang digunakan saat menjalankan program SortCL. Sebagian besar variasi menggunakan gabungan luar penuh untuk mencocokkan catatan dari sumber data master asli dengan catatan di sumber yang diperbarui berdasarkan menyamakan kunci dari masing-masing. Catatan dengan kecocokan perlu diperbarui di master. Catatan di sumber pembaruan yang tidak memiliki kecocokan perlu ditambahkan ke master.

Berikut adalah ikhtisar tentang cara memperbarui file dimensi menggunakan SCD Tipe 3 di mana saya mempertahankan biaya produk. Pembaruan dilakukan dengan bergabung sehubungan dengan bidang ProductCode .

Ketik 3 SCD

Dengan model Tipe 3, data saat ini dan data historis dibawa dalam catatan yang sama. Salah satu hal utama yang harus diputuskan adalah berapa banyak sejarah yang harus disimpan. Dengan contoh kita, saya akan menyimpan biaya untuk tiga tanggal mulai. Tanggal akhir adalah tanggal ketika biaya dalam catatan tidak lagi efektif. Jika biaya masih efektif, maka EndDate1 field akan diset ke 99991231. Hal ini untuk menghindari nilai kosong pada field ini. Berikut adalah nilai yang terkandung dalam sumber master awal (master3.dat):

Kode Produk Biaya1 StartDate1 TanggalAkhir1 Biaya2 StartDate2 TanggalAkhir2 Biaya3 StartDate3 TanggalAkhir3
C123 125,50 20110228 99991231
F112 2365.00 20120101 99991231
G101 19,25 20110930 99991231 21,25 20110501 20110930
J245 450,50 20110430 99991231 425,25 20101001 20110430 385,25 20100215 20101001
S022 98,75 20110515 99991231

Semua catatan pembaruan memiliki StartDate yang sama. Sumber update.dat berisi nilai bidang berikut untuk catatan:

Kode Produk Biaya Tanggal Mulai
F112 2425.00 20120701
J245 550,50 20120701
M447 101.75 20120701
S022 101.75 20120701

Di bawah ini adalah data yang diperbarui. Untuk setiap catatan yang diperbarui, setiap biaya, tanggal mulai, dan tanggal akhir dipindahkan ke kanan satu set. Di grup lama saat ini sebagai catatan, tanggal akhir diubah menjadi tanggal mulai untuk kumpulan baru yang diperbarui saat ini. Nilai apa pun untuk set ketiga yang lama dibuang.

Kode Produk Biaya1 StartDate1 TanggalAkhir1 Biaya2 StartDate2 TanggalAkhir2 Biaya3 StartDate3 TanggalAkhir3
C123 125,50 20110228 9991231
F112 2425.00 20120701 9991231 2365.00 20120101 20120701
G101 19,25 20110930 9991231 21,25 20110501 20110930
J245 550,50 20120701 9991231 450,50 20110430 20120701 425,25 20101001 20110430
M447 101.75 20120701 9991231
S022 101.75 20120701 9991231 98,75 20110515 20120701

Di IRI Workbench, ada wizard Voracity untuk membantu pembuatan skrip untuk memperbarui file dan tabel Dimensi. Wizard ini terletak di dropdown Voracity di bilah navigasi. Pertama Anda memilih jenis SCD. Kemudian jendela tempat Anda memilih file yang digunakan untuk memproses pembaruan akan ditampilkan.

Di tabel atas di layar berikutnya, Anda menentukan bagaimana data yang diperbarui dipetakan ke master. Di pengelompokan tengah pada layar, pilih bidang yang memberikan nilai status untuk catatan yang sedang diperbarui.

Di tarik-turun di bawah Saat Ini dan Kumpulan Bidang Historis , kumpulan pertama yang Anda tentukan, memberikan nama bidang untuk nilai saat ini. Bidang Nilai adalah nilai dimensi yang sedang diperbarui. Bidang Mulai adalah bidang yang menentukan kapan Bidang Nilai menjadi aktif dan Akhiri Bidang menentukan kapan itu tidak lagi valid. Kemudian tentukan set sebanyak yang Anda butuhkan untuk jumlah nilai historis yang disimpan.

Berikut adalah skrip pekerjaan yang akan memperbarui file master:

/INFILE=master3.dat
    /PROCESS=DELIMITED
    /ALIAS=master3
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
/INFILE=update.dat
    /PROCESS=DELIMITED
    /ALIAS=update
    /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
    /FIELD=(COST, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME='\"')
    /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')

/JOIN FULL_OUTER master3 update WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master3.dat
# Include only records that are to be updated
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
    /INCLUDE WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE

/OUTFILE=master3.dat
# Include only records that are not to be updated
    /PROCESS=DELIMITED
    /FIELD=(MASTER3.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(MASTER3.COST1, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE1, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(MASTER3.ENDDATE1, TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /FIELD=(MASTER3.COST2, TYPE=NUMERIC, POSITION=5, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE2, TYPE=ASCII, POSITION=6, SEPARATOR=",")
    /FIELD=(MASTER3.ENDDATE2, TYPE=ASCII, POSITION=7, SEPARATOR=",")
    /FIELD=(MASTER3.COST3, TYPE=NUMERIC, POSITION=8, SEPARATOR=",")
    /FIELD=(MASTER3.STARTDATE3, TYPE=ASCII, POSITION=9, SEPARATOR=",")
    /FIELD=(MASTER3.ENDATE3, TYPE=ASCII, POSITION=10, SEPARATOR=",")
    /OMIT WHERE MASTER3.PRODUCTCODE == UPDATE.PRODUCTCODE
    /OMIT WHERE MASTER3.PRODUCTCODE EQ ""
/OUTFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD3/master3.dat
# Add new records
    /PROCESS=DELIMITED
    /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",")
    /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(ENDDATE1_NEW="99991231", TYPE=ASCII, POSITION=4, SEPARATOR=",")
    /INCLUDE WHERE MASTER3.PRODUCTCODE EQ "" AND UPDATE.PRODUCTCODE NE ""

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengelola Peran dan Status dalam Sistem

  2. Pengantar Statistik Tunggu

  3. Rahasia Kotor dari Ekspresi KASUS

  4. Tabel Pemecahan Masalah Tidak Ditemukan Kesalahan

  5. Cara menghapus data dari Elastisearch