Pemodelan Dimensi dan ETL di Redshift

9

Saya telah meneliti basis data Redshift Amazon sebagai kemungkinan pengganti di masa depan untuk gudang data kami. Pengalaman saya selalu menggunakan pemodelan dimensi dan metode Ralph Kimball, jadi agak aneh melihat Redshift tidak mendukung fitur seperti tipe data serial untuk kolom penambahan otomatis.

Namun, ada posting blog terbaru dari AWS Big Data blog tentang cara mengoptimalkan Redshift untuk skema bintang: https://blogs.aws.amazon.com/bigdata/post/Tx1WZP38ERPGK5K/Optimizing-for-Star-Schemas -dan-Interleaved-Sorting-on-Amazon-Redshift

Pertanyaan saya adalah tentang apa praktik terbaik untuk memuat skema bintang di Redshift? Saya tidak dapat menemukan jawaban ini di dokumentasi Redshift mana pun.

Saya condong ke arah mengimpor file saya dari S3 ke dalam tabel panggung dan kemudian menggunakan SQL untuk melakukan transformasi seperti pencarian dan menghasilkan kunci pengganti sebelum memasukkan ke tabel tujuan.

Apakah ini yang sedang dilakukan orang lain? Apakah ada alat ETL yang bernilai uang untuk membuatnya lebih mudah?

njkroes
sumber

Jawaban:

9

Anda pasti berada di jalur yang benar dengan Kimball dan bukan inmon untuk Redshift.

Ada sejumlah pola untuk ini, saya telah menggunakan semuanya dalam berbagai kasus penggunaan

  1. Pola "ELT" - Memuat tabel sumber ke pergeseran merah sepenuhnya, jangan lakukan transformasi signifikan hingga data dimuat. Untuk ini, Anda dapat memuat ke s3, kemudian menggunakan perintah salin redshift atau saya akan merekomendasikan menggunakan "layanan migrasi data AWS", yang dapat menyinkronkan sumber (egmysql atau postgres) ke target (mis. Pergeseran merah) Kemudian, secara teratur jalankan sql proses dalam pergeseran merah untuk mengisi redup lalu fakta. Anda dapat menggunakan alat berbasis cloud bagian ketiga untuk "menyederhanakan" proses ini jika Anda ingin - seperti Matillion (saya tidak merekomendasikan menggunakan alat pihak ketiga)
  2. "Pola ETL" - Mengubah data dalam penerbangan, menggunakan percikan apache. dan memuat redup dan fakta ke redshift spark-> s3-> redshift. Saya telah menggunakan ESDM untuk ini yang bagus. ini juga merupakan pendekatan yang diambil jika Anda menggunakan AWS Glue
  3. Jangan bertransformasi! - mirip dengan 1) tetapi cukup gunakan tabel yang telah dimuat.

Perhatikan bahwa Redshift kadang-kadang bekerja LEBIH BAIK jika Anda memiliki tabel lebar dengan nilai berulang daripada fakta dan dimensi. Alasan untuk ini adalah bahwa pendekatan kolom memungkinkan Redshift memampatkan nilai-nilai yang berbeda ke tingkat yang cukup efisien. Saya tidak memiliki rumus kapan harus menggunakan banyak Dimensi vs tabel lebar datar, satu-satunya cara adalah mencobanya dan lihat!

Beberapa tautan

AWS DMS untuk taret Redshift

Lem AWS

Jon Scott
sumber
1
Setuju dengan komentar tentang menggunakan tabel lebar daripada skema bintang, jika dimensi Anda cukup sederhana (beberapa atribut), pertimbangkan untuk hanya menggabungkan semua data menjadi satu tabel. Ini kontra-intuitif bagi kebanyakan orang yang datang dari platform database tradisional seperti SQL Server dan Oracle, tetapi itu mulai masuk akal ketika Anda berpikir tentang bagaimana database MPP berbentuk kolom seperti Redshift sebenarnya bekerja.
Nathan Griffiths
Saya setuju dengan penilaian ini atas dampak kinerja dan kesederhanaan kueri, tetapi jika dimensi cenderung berubah waktu saya membaginya menjadi tabel dimensi dapat mengurangi hasil yang membingungkan.
Merlin
2

Untuk ETL ada Lem AWS. Ini adalah layanan ETL serverless yang dikelola yang memuat ke Redshift (antara lain).

https://aws.amazon.com/glue/

Joshua Guttman
sumber
Saya akan mengatakan membaca dengan sangat hati-hati tentang batasan apa yang berlaku untuk Lem. Misalnya jika Anda ingin menggunakan skrip Python, maka Pandas dan Numpy tidak tersedia. Juga skrip Anda tidak dapat dengan mudah dipicu dari suatu peristiwa, jadi jika Anda ingin menjalankan sistem tipe streaming ETL, Anda juga akan memerlukan lambdas untuk memicu skrip untuk menjalankan dll.
PizzaTheHut
2

Saat ini saya sedang berurusan dengan tugas yang sama. Ini untuk membangun proses ETL dan merancang model dimensi. Saya telah meneliti banyak cara terbaik untuk menghadapinya dan menemukan sumber teknik luar biasa yang sangat membantu yang harus kita terapkan ketika bekerja dengan MPP.

Untuk menjawab pertanyaan itu

Pertanyaan saya adalah tentang apa praktik terbaik untuk memuat skema bintang di Redshift?

pastikan untuk melihat sumber ini . Saya yakin Anda akan menemukannya sangat membantu. Ini adalah dokumen ~ 35 halaman dengan teknik yang kuat untuk meningkatkan penggunaan toko kolom MPP. Ini mendukung komentar yang Anda suka

Perhatikan bahwa Redshift kadang-kadang bekerja LEBIH BAIK jika Anda memiliki tabel lebar dengan nilai berulang daripada fakta dan dimensi. Alasan untuk ini adalah bahwa pendekatan kolom memungkinkan Redshift memampatkan nilai-nilai yang berbeda ke tingkat yang cukup efisien. Saya tidak memiliki rumus kapan harus menggunakan banyak Dimensi vs tabel lebar datar, satu-satunya cara adalah mencobanya dan lihat!

komentar oleh Jon Scott

Semoga Anda menemukan itu berguna seperti yang saya lakukan

Joao Caxias
sumber
1

Saya pikir memuat dari S3 adalah pola umum.

Kami perlu menegakkan batasan keunikan sehingga kami memilih untuk menulis ke Postgres dan kemudian mereplikasi data baru ke pergeseran merah setiap 10 menit.

Kami menggunakan https://github.com/uswitch/blueshift untuk memuat ke Redshift.

Sam
sumber
1

Karena Redshift adalah basis data kolom, penyimpanan dan kinerja kueri akan berbeda dari model RDBMS. Mengoptimalkan untuk basis data kolom juga berbeda. Karena biasanya ada lebih sedikit disk I / O dan lebih sedikit data yang dimuat dari disk maka permintaan lebih cepat.

Dalam hal posting blog AWS yang Anda rujuk, saya kira Anda telah melihat rekomendasi itu dan mempertimbangkan opsi mana yang paling cocok untuk data Anda untuk distribusi, kunci, kursor, manajemen beban kerja, dll. Dan setidaknya memiliki ide bagus tentang pendekatan tersebut Anda akan menggunakan. Saya merasa lebih mudah untuk bekerja dengan representasi visual, Anda mungkin mempertimbangkan diagram DB cepat dan kotor yang menunjukkan bagaimana tabel Anda yang ada akan bermigrasi ke Redshift. Menutupi yang utama untuk merasakan berapa banyak data yang pergi ke mana. Dan saya pasti akan menggunakan driver ODBC / JDBC dari Amazon, memuat data dalam jumlah besar dapat merepotkan dalam hal apa pun, apalagi pindah ke tipe DB yang berbeda.

Sejauh ETL / ELT, ada Lem AWS seperti yang disebutkan poster lainnya. Dan ya, ada sejumlah alat, beberapa di antaranya gratis. Amazon memang memiliki Panduan Praktik Terbaik DB , yang mungkin membantu Anda juga. Salah satu tip yang saya lihat di forum lain adalah memuat data Anda sealami mungkin dan melakukan transformasi di Redshift. Itu akan membawa Anda ke proses ELT. Dengan begitu banyak pilihan, mungkin melihat perbandingan kedua metode itu akan membantu. Ini a artikel blog dari Panopoly yang menjelaskan perbedaannya, mungkin bisa membantu Anda memutuskan jalan.

Ben Schmeltzer
sumber
1

Amazon baru-baru ini menerbitkan beberapa praktik terbaik untuk ETL di Redshift

https://aws.amazon.com/blogs/big-data/top-8-best-practices-for-high-performance-etl-processing-using-amazon-redshift/

Dalam presentasi tentang topik ini Tony Gibbs, AWS Solution Architect merekomendasikan pola berikut untuk pemuatan gaya UPSERT:

  1. Memuat data CSV (dari S3) dalam tabel staging
  2. Hapus baris yang cocok dari tabel prd
  3. Masukkan data dari panggung

    BEGIN;
    CREATE TEMP TABLE staging(LIKE …);  copies dist keys
    copy staging from s3://… COMPUTE OFF;
    DELETE deep_dive d
    USING staging s WHERE d.aid = s.aid;
    INSERT INTO deep_dive SELECT * FROM staging
    DROP table staging;
    COMMIT;

Bila mungkin lebih suka DROP TABLE atau TRUNCATE ke DELETE untuk menghindari baris hantu

Lihat video ceramahnya dan slide .

Di tim kami, kami biasanya memuat data ke Redshift langsung dari S3 menggunakan pernyataan SQL COPY .

Dan kelola semua ETL kami menggunakan alat Apache Airflow yang sangat baik .

Kami juga menggunakan layanan integrasi seperti Stich yang menulis langsung ke Redshift, dan kemudian menggunakan CREATE TABLE LIKE dan SELECT INTO untuk memindahkan data ke skema lain.

mthorley
sumber