Dalam tutorial ini, anda akan belajar-
- Sertailah pertanyaan
- Jenis gabungan yang berbeza
- Sub pertanyaan
- Menyematkan skrip tersuai
- UDF (Fungsi Menentukan Pengguna)
Sertailah pertanyaan:
Pertanyaan penyertaan boleh dilakukan pada dua jadual yang terdapat di Hive. Untuk memahami Gabung Konsep dengan jelas di sini kami membuat dua jadual di sini,
- Sampel_jodin (Berkaitan dengan Butiran Pelanggan)
- Sample_joins1 (Berkaitan dengan perincian pesanan yang dilakukan oleh Pekerja)
Langkah 1) Pembentukan jadual "sample_joins" dengan nama lajur ID, Nama, Umur, alamat dan gaji pekerja
Langkah 2) Memuat dan Memaparkan Data
Dari tangkapan skrin di atas
- Memuatkan data ke dalam sample_joins dari Customers.txt
- Memaparkan isi jadual sample_joins
Langkah 3) Pembuatan sample_joins1 jadual dan memuatkan, memaparkan data
Dari tangkapan skrin di atas, kita dapat melihat perkara berikut
- Pembuatan sample_joins1 jadual dengan lajur Orderid, Date1, Id, Amount
- Memuatkan data ke sample_joins1 dari orders.txt
- Memaparkan rekod yang terdapat dalam sample_joins1
Melangkah ke hadapan kita akan melihat pelbagai jenis gabungan yang dapat dilakukan di atas meja yang telah kita buat tetapi sebelum itu anda harus mempertimbangkan perkara berikut untuk bergabung.
Beberapa perkara yang perlu diperhatikan dalam Bergabung:
- Hanya penyertaan yang dibenarkan dibenarkan dalam Gabungan
- Lebih daripada dua jadual boleh disatukan dalam pertanyaan yang sama
- GABUNGAN KIRI, KANAN, FULL OUTER wujud untuk memberi lebih banyak kawalan ke atas Fasal ON yang tidak sesuai
- Bergabung bukan Komutatif
- Bergabung dengan rakan kongsi tanpa mengira sama ada mereka bergabung KIRI atau KANAN
Jenis gabungan yang berbeza
Bergabung dengan 4 jenis, ini adalah
- Inner join
- Bahagian luar kiri Bergabung
- Kanan Luar Bergabung
- Sertai Luar Sepenuhnya
Penyertaan dalaman:
Rekod biasa untuk kedua-dua jadual akan diambil oleh Penyertaan Dalam ini.
Dari tangkapan skrin di atas, kita dapat melihat perkara berikut
- Di sini kita melakukan pertanyaan bergabung menggunakan kata kunci JOIN antara jadual sample_joins dan sample_joins1 dengan keadaan yang sepadan sebagai (c.Id = o.Id).
- Output yang memaparkan rekod biasa yang terdapat di kedua-dua jadual dengan memeriksa keadaan yang disebutkan dalam pertanyaan
Pertanyaan:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
Siri Luar Kiri:
- Bahasa pertanyaan Hive LEFT OUTER JOIN mengembalikan semua baris dari meja kiri walaupun tidak ada padanan di meja kanan
- Sekiranya Klausa ON sepadan dengan catatan sifar di jadual yang betul, yang bergabung tetap mengembalikan rekod dalam hasil dengan NULL di setiap lajur dari jadual yang betul
Dari tangkapan skrin di atas, kita dapat melihat perkara berikut
- Di sini kami melakukan pertanyaan bergabung menggunakan kata kunci "LEFT OUTER JOIN" antara jadual sample_joins dan sample_joins1 dengan keadaan yang sepadan sebagai (c.Id = o.Id).
Contohnya di sini kita menggunakan id pekerja sebagai rujukan, ia memeriksa sama ada id itu biasa di sebelah kanan dan juga di kiri meja atau tidak. Ia berfungsi sebagai keadaan yang sepadan.
- Output yang memaparkan rekod biasa yang terdapat di kedua-dua jadual dengan memeriksa keadaan yang disebutkan dalam pertanyaan.
Nilai NULL dalam output di atas adalah lajur tanpa nilai dari Jadual kanan yang merupakan sample_joins1
Pertanyaan:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Sambungan luar kanan:
- Hive query language RIGHT OUTER JOIN mengembalikan semua baris dari jadual Kanan walaupun tidak ada padanan di meja kiri
- Sekiranya Klausa ON sepadan dengan catatan sifar di jadual kiri, bergabung masih mengembalikan rekod dalam hasil dengan NULL di setiap lajur dari jadual kiri
- Gabungan KANAN selalu mengembalikan rekod dari jadual Kanan dan catatan yang dipadankan dari meja kiri. Sekiranya jadual kiri tidak mempunyai nilai yang sesuai dengan lajur, ia akan mengembalikan nilai NULL di tempat itu.
Dari tangkapan skrin di atas, kita dapat melihat perkara berikut
- Di sini kami melakukan pertanyaan bergabung menggunakan kata kunci "RIGHT OUTER JOIN" antara jadual sample_joins dan sample_joins1 dengan keadaan yang sepadan sebagai (c.Id = o.Id).
- Output yang memaparkan rekod biasa yang terdapat di kedua-dua jadual dengan memeriksa keadaan yang disebutkan dalam pertanyaan
Pertanyaan :
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Gabungan luar penuh:
Ia menggabungkan rekod kedua-dua jadual sample_joins dan sample_joins1 berdasarkan JOIN Condition yang diberikan dalam pertanyaan.
Ia mengembalikan semua rekod dari kedua-dua jadual dan mengisi Nilai NULL untuk lajur nilai yang hilang dipadankan di kedua sisi.
Dari tangkapan skrin di atas, kita dapat melihat perkara berikut:
- Di sini kami melakukan pertanyaan bergabung menggunakan kata kunci "FULL OUTER JOIN" antara jadual sample_joins dan sample_joins1 dengan keadaan yang sepadan sebagai (c.Id = o.Id).
- Output yang memaparkan semua catatan yang ada di kedua-dua jadual dengan memeriksa keadaan yang disebutkan dalam pertanyaan. Nilai kosong dalam output menunjukkan nilai yang hilang dari lajur kedua-dua jadual.
Pertanyaan
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Sub pertanyaan:
Permintaan yang terdapat dalam Query dikenali sebagai sub query. Pertanyaan utama akan bergantung pada nilai yang dikembalikan oleh subkueri.
Subkueri boleh dikelaskan kepada dua jenis
- Pertanyaan dalam klausa FROM
- Pertanyaan dalam klausa WHERE
Bila hendak digunakan:
- Untuk mendapatkan nilai tertentu digabungkan dari dua nilai lajur dari jadual yang berbeza
- Ketergantungan nilai satu jadual pada jadual lain
- Pemeriksaan perbandingan nilai satu lajur dari jadual lain
Sintaks:
Subquery in FROM clauseSELECTFrom (SubQuery) Subquery in WHERE clauseSELECT From WHERE col1 IN (SubQuery);
Contoh:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
Di sini t1 dan t2 adalah nama jadual. Yang berwarna adalah Subkueri yang dilakukan pada jadual t1. Di sini a dan b adalah lajur yang ditambahkan dalam subkueri dan ditugaskan ke col1. Col1 adalah nilai lajur yang terdapat dalam Jadual utama. Lajur "col1" yang terdapat dalam subkueri adalah setara dengan pertanyaan jadual utama di lajur col1.
Menyematkan skrip tersuai:
Hive menyediakan kelayakan menulis skrip khusus pengguna untuk keperluan pelanggan. Pengguna dapat menulis peta mereka sendiri dan mengurangkan skrip untuk keperluan. Ini dipanggil skrip Custom Embedded. Logik pengekodan didefinisikan dalam skrip khusus dan kami dapat menggunakan skrip tersebut pada waktu ETL.
Bila hendak memilih Skrip Terbenam:
- Dalam keperluan khusus pelanggan, pemaju harus menulis dan menyebarkan skrip di Hive
- Di mana fungsi Hive inbuilt tidak berfungsi untuk keperluan domain tertentu
Untuk ini di Hive ia menggunakan klausa TRANSFORM untuk membenamkan skrip peta dan pengurang.
Dalam skrip tersuai ini, kita harus memperhatikan perkara berikut
- Lajur akan diubah menjadi rentetan dan dibatasi oleh TAB sebelum memberikannya kepada skrip pengguna
- Output standard skrip pengguna akan dianggap sebagai lajur rentetan yang dipisahkan oleh TAB
Contoh Skrip Terbenam,
FROM (FROM pv_usersMAP pv_users.userid, pv_users.dateUSING 'map_script'AS dt, uidCLUSTER BY dt) map_outputINSERT OVERWRITE TABLE pv_users_reducedREDUCE map_output.dt, map_output.uidUSING 'reduce_script'AS date, count;
Dari skrip di atas, kita dapat melihat yang berikut
Ini hanya contoh skrip untuk difahami
- pv_users adalah tabel pengguna yang memiliki bidang seperti userid dan tarikh seperti yang disebutkan dalam map_script
- Skrip pengurang ditentukan pada tarikh dan bilangan jadual pv_users