Adakah yang bisa menunjukkan kepada saya contoh yang baik tentang keunggulan MDX dibandingkan SQL biasa ketika melakukan kueri analitik? Saya ingin membandingkan kueri MDX dengan kueri SQL yang memberikan hasil serupa.
Meskipun dimungkinkan untuk menerjemahkan beberapa dari ini ke dalam SQL tradisional, seringkali akan memerlukan sintesis ekspresi SQL yang canggung bahkan untuk ekspresi MDX yang sangat sederhana.
Tetapi tidak ada kutipan atau contoh. Saya sepenuhnya sadar bahwa data yang mendasarinya harus diatur secara berbeda, dan OLAP akan membutuhkan lebih banyak pemrosesan dan penyimpanan per sisipan. (Proposal saya adalah pindah dari Oracle RDBMS ke Apache Kylin + Hadoop )
Konteks: Saya mencoba meyakinkan perusahaan saya bahwa kita harus menanyakan database OLAP daripada database OLTP. Sebagian besar permintaan SIEM banyak menggunakan pengelompokan berdasarkan kelompok, jenis, dan agregasi. Selain peningkatan kinerja, saya pikir permintaan OLAP (MDX) akan lebih ringkas dan lebih mudah untuk membaca / menulis daripada OLTP SQL yang setara. Contoh konkret akan mengarahkan poin, tapi saya bukan ahli SQL, apalagi MDX ...
Jika ini membantu, berikut adalah contoh kueri SQL terkait SIEM untuk peristiwa firewall yang terjadi dalam seminggu terakhir:
SELECT 'Seoul Average' AS term,
Substr(To_char(idate, 'HH24:MI'), 0, 4)
|| '0' AS event_time ,
Round(Avg(tot_accept)) AS cnt
FROM (
SELECT *
FROM st_event_100_#yyyymm-1m#
WHERE idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query#
UNION ALL
SELECT *
FROM st_event_100_#yyyymm#
WHERE idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query# ) pm
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0'
UNION ALL
SELECT 'today' AS term ,
substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0' AS event_time ,
round(avg(tot_accept)) AS cnt
FROM st_event_100_#yyyymm# cm
WHERE idate >= trunc(sysdate) #stat_monitor_group_query#
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0'
ORDER BY term DESC,
event_time ASC
OLAP Cubes / database memiliki karakteristik sebagai berikut:
MDX versus SQL:
MDX dibuat untuk menavigasi basis data multidimensi dan untuk menentukan kueri pada semua objeknya (dimensi, hierarki, level, anggota, dan sel) untuk mendapatkan (cukup) representasi tabel pivot.
MDX menggunakan banyak identik sebagai kata kunci SQL, seperti
SELECT
,FROM
,WHERE
. Perbedaannya adalah bahwa SQL menghasilkan pandangan relasional sedangkan MDX menghasilkan pandangan data multidimensi .Perbedaannya juga terlihat dalam struktur umum kedua bahasa:
SQL query:
SELECT column1, column2, ..., column FROM table
MDX query:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
menentukan sumber data:Di SQL: satu atau lebih tabel
Di MDX: a cube
SELECT
menunjukkan hasil yang diinginkan untuk dipulihkan oleh kueri:Dalam SQL:
Dalam MDX:
Contoh permintaan MDX:
Ukuran : Harga Satuan, Jumlah, Diskon, PenjualanJumlah,
Dimensi Pengiriman :
Hirarki waktu : Tahun> Kuartal> Bulan> dengan anggota:
Tahun: 2010, 2011, 2012, 2013, 2014
Kuartal: Q1, Q2, Q3, Q4
Bulan: Januari, Februari, Maret, ...
Dimensi :
Hirarki pelanggan : Benua> Negara> Negara Bagian> Kota dengan anggota:
Kota: Paris, Lyon, Berlin, Köln, Marseille, Nantes…
Negara: Loire atlantique, Bouches du Rhône, Bas Rhin, Torino…
Negara: Austria, Belgia, Danmark, Prancis, ...
Tingkat benua: Eropa, Amerika Utara, Amerika Selatan, Asia
Dimensi :
Hirarki produk : Kategori> Subkategori> produk dengan anggota:
sumber
pembaruan : Contoh ini lebih baik:
Sasaran kueri: Dapatkan jumlah penjualan dan jumlah unit (pada kolom) semua keluarga produk (pada baris) yang dijual di California selama Q1 2010
MDX
SQL
sumber: Catatan penggunaan untuk Modrian (yang menerjemahkan pertanyaan MDX untuk digunakan pada basis data relasional)
Saya menemukan contoh yang layak, meskipun SQL tidak jauh lebih kompleks (dibandingkan dengan SaasBase, bukan MDX):
sumber: "OLAP" waktu-nyata untuk Data Besar (+ kasus penggunaan) - bigdata.ro 2013
sumber