Apa itu Hive Query Language? HiveQL Operatorso
⚡ Ringkasan Cerdas
Hive Query Language menyediakan operator yang menggerakkan setiap ekspresi HiveQL, grupping ke dalam keluarga relasional, aritmatika, logis, tipe kompleks, dan konstruktor yang secara bersama-sama mencakup perbandingan, perhitungan, dan akses ke data bersarang.
Apa itu Bahasa Kueri Hive (HiveQL)?
Hive Query Language (HiveQL) adalah bahasa kueri Sarang Apache untuk memproses dan menganalisis data terstruktur. Ini memisahkan pengguna dari kompleksitas pemrograman MapReduce. Ia menggunakan kembali konsep umum dari basis data relasional, seperti tabel, baris, kolom, dan skema, untuk memudahkan pembelajaran. Hive menyediakan CLI untuk penulisan kueri Hive menggunakan Bahasa Kueri Hive (HiveQL).
Sebagian besar interaksi cenderung terjadi melalui antarmuka baris perintah (CLI). Secara umum, sintaks HiveQL mirip dengan SQL Sintaks yang paling dikenal oleh sebagian besar analis data. Empat format file yang disebutkan dalam dokumentasi Hive asli adalah TEXTFILE, SEQUENCEFILE, ORC, dan RCFILE (Record Columnar File); rilis saat ini juga membaca dan menulis Parquet dan Avro, dan ORC adalah format yang diasumsikan oleh sebagian besar panduan penyetelan.
Hive menggunakan basis data Derby terintegrasi untuk penyimpanan metadata pengguna tunggal. Untuk penerapan metastore multi-pengguna atau bersama, Hive menggunakan MySQL atau menggunakan basis data relasional eksternal lainnya, karena Derby hanya mengizinkan satu sesi dalam satu waktu.
HiveQL Bawaan Operatorso
Hive menyediakan operator bawaan untuk operasi data yang dijalankan terhadap tabel yang tersimpan di gudang data Hive.
Operator-operator ini bertindak pada operan di dalam sebuah ekspresi dan mengembalikan nilai sesuai dengan logika yang diterapkan, baik itu berupa perbandingan, perhitungan, atau pencarian ke dalam kolom bersarang.
Berikut adalah jenis-jenis operator bawaan utama di HiveQL:
- Operator relasional
- Operator aritmatika
- operator logika
- Operators pada tipe kompleks
- Konstruktor tipe kompleks
Setiap famili dibahas dalam bagiannya masing-masing di bawah ini, beserta tabel operator lengkap untuk famili tersebut.
Relasional Operators di HiveQL
Kami menggunakan operator relasional untuk perbandingan hubungan antara dua operan.
- Operakata-kata seperti sama dengan, tidak sama dengan, kurang dari, dan lebih besar dari.
- Tipe operand dalam operator ini semuanya berupa tipe primitif, dan operator pencocokan pola hanya menerima string.
Setiap operator relasional mengembalikan nilai BOOLEAN, itulah sebabnya operator-operator ini menjadi dasar pembentukan klausa WHERE, kondisi JOIN, dan cabang CASE WHEN. Tabel berikut memberikan detail tentang operator relasional dan penggunaannya di HiveQL:
| Built-in Operator | Deskripsi | Operand |
|---|---|---|
| X = Y | TRUE jika ekspresi X setara dengan ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X != Y | TRUE jika ekspresi X tidak setara dengan ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X < Y | TRUE jika ekspresi X kurang dari ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X <= Y | TRUE jika ekspresi X kurang dari atau sama dengan ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X > Y | TRUE jika ekspresi X lebih besar dari ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X >= Y | TRUE jika ekspresi X lebih besar dari atau sama dengan ekspresi Y. Jika tidak, FALSE. | Dibutuhkan semua tipe primitif |
| X ADALAH BATAL | TRUE jika ekspresi X bernilai NULL, jika tidak FALSE. | Dibutuhkan semua jenis |
| X BUKAN NULL | SALAH jika ekspresi X bernilai NULL, jika tidak, BENAR. | Dibutuhkan semua jenis |
| X SEPERTI Y | TRUE jika pola string X cocok dengan Y, jika tidak FALSE. | Hanya membutuhkan String |
| X SUKA Y | NULL jika X atau Y adalah NULL, TRUE jika ada substring dari X yang cocok dengan Java ekspresi reguler Y, jika tidak, SALAH. | Hanya membutuhkan String |
| X REGEXP Y | Sama seperti RLIKE. | Hanya membutuhkan String |
Perhatikan bahwa perbandingan terhadap NULL tidak pernah mengembalikan TRUE atau FALSE. Itulah alasan mengapa tabel tersebut mencantumkan IS NULL dan IS NOT NULL sebagai operator terpisah, bukan mengharapkan X = NULL untuk berfungsi.
Aritmatika HiveQL Operatorso
Kita menggunakan operator aritmatika untuk melakukan operasi aritmatika pada operan.
- Operasi aritmatika seperti penjumlahan, pengurangantracOperasi perkalian dan pembagian antar operan menggunakan operator-operator ini.
- Tipe operand dalam operator ini semuanya berupa tipe angka.
Contoh:
2 + 3 hasilnya 5.
Dalam contoh ini, '+' adalah operator, 2 dan 3 adalah operan, dan nilai kembaliannya adalah 5.
Tabel berikut memberikan detail tentang operator aritmatika dalam Bahasa Kueri Hive:
| Built-in Operator | Deskripsi | Operand |
|---|---|---|
| X+Y | Ini akan mengembalikan output penambahan nilai X dan Y. | Dibutuhkan semua jenis angka |
| X – Y | Ini akan mengembalikan output dari subtracMenghitung Y dari nilai X. | Dibutuhkan semua jenis angka |
| X * Y | Ini akan mengembalikan output perkalian nilai X dan Y. | Dibutuhkan semua jenis angka |
| X / Y | Ini akan mengembalikan output pembagian Y dari X. | Dibutuhkan semua jenis angka |
| X % Y | Ini akan mengembalikan sisa hasil pembagian X dengan Y. | Dibutuhkan semua jenis angka |
| X & Y | Ini akan mengembalikan output bitwise AND dari X dan Y. | Dibutuhkan semua jenis angka |
| X | kamu | Ini akan mengembalikan output bitwise OR dari X dan Y. | Dibutuhkan semua jenis angka |
| X^Y | Ini akan mengembalikan output bitwise XOR dari X dan Y. | Dibutuhkan semua jenis angka |
| ~X | Ini akan mengembalikan output bitwise NOT dari X. | Dibutuhkan semua jenis angka |
Empat baris terakhir menggunakan operasi bitwise, bukan aritmatika biasa: operasi tersebut beroperasi pada representasi biner dari operan bilangan bulat, sehingga &, | dan ^ tidak sama dengan operasi logika AND, OR dan NOT yang akan dibahas di bagian selanjutnya.
Logika HiveQL Operatorso
Kita menggunakan operator logika untuk melakukan operasi logika pada operan.
- Operasi logika seperti AND, OR, dan NOT antara operan menggunakan operator-operator ini.
- Tipe operand pada operator ini semuanya bertipe BOOLEAN.
Tabel berikut memberikan detail tentang operator logika di HiveQL:
| Operatorso | Deskripsi | Operands |
|---|---|---|
| X DAN Y | BENAR jika X dan Y keduanya BENAR, jika tidak SALAH. | Tipe Boolean saja |
| X && Y | Sama seperti X DAN Y, tetapi di sini kita menggunakan simbol &&. | Tipe Boolean saja |
| X ATAU Y | BENAR jika X atau Y atau keduanya BENAR, jika tidak, SALAH. | Tipe Boolean saja |
| X || kamu | Sama seperti X ATAU Y, tetapi di sini kita menggunakan simbol ||. | Tipe Boolean saja |
| BUKAN X | BENAR jika X SALAH, jika tidak SALAH. | Tipe Boolean saja |
| !X | Sama seperti NOT X, tetapi di sini kita menggunakan simbol !. | Tipe Boolean saja |
Karena operator relasional mengembalikan nilai BOOLEAN, operator logika adalah yang menggabungkannya: sebuah predikat seperti salary > 50000 AND dept = 'Sales' menghubungkan satu keluarga ke keluarga lainnya.
Operators pada Tipe Kompleks
Operator relasional, aritmatika, dan logika semuanya bekerja pada nilai skalar tunggal. Hive juga menyimpan kolom array, map, dan struct, dan kolom-kolom tersebut membutuhkan mekanisme yang berbeda untuk mengakses elemen di dalamnya. Tabel berikut memberikan detail tentang operator tipe kompleks, yang menyediakan mekanisme tersebut:
| Operatorso | Operands | Deskripsi |
|---|---|---|
| Sebuah] | A adalah Array dan n adalah tipe integer | Fungsi ini akan mengembalikan elemen ke-n dalam array A. Elemen pertama memiliki indeks 0. |
| M[kunci] | M adalah Peta dan kuncinya bertipe K | Fungsi ini akan mengembalikan nilai yang sesuai dengan kunci dalam peta tersebut. |
Kedua bentuk tersebut merupakan ekspresi biasa, sehingga dapat muncul dalam daftar SELECT, klausa WHERE, atau GROUP BY, dan field struct diakses dengan notasi titik seperti S.field, bukan tanda kurung.
Konstruktor Tipe Kompleks
Operator di atas membaca kolom kompleks yang sudah ada, sedangkan konstruktor membangun kolom baru. Tabel berikut memberikan detail tentang konstruktor tipe kompleks, yang membuat instance dari tipe data kompleks — Array, Map, dan Struct — di Hive.
Pada bagian ini, kita akan melihat operasi yang dilakukan pada konstruktor tipe kompleks.
| Operatorso | Operands | Deskripsi |
|---|---|---|
| susunan | (val1, val2,…) | Ini akan membuat array dengan elemen-elemen yang diberikan seperti yang disebutkan, misalnya val1, val2. |
| buat_gabungan | (tanda, val1, val2,…) | Ini akan membuat tipe gabungan dengan nilai yang dirujuk oleh parameter tag. |
| peta | (kunci1, nilai1, kunci2, nilai2,…) | Fungsi ini akan membuat peta dengan pasangan kunci/nilai yang diberikan seperti yang disebutkan dalam operand. |
| struktur bernama | (nama1, val1, nama2, val2,…) | Fungsi ini akan membuat Struct dengan nama field dan nilai yang disebutkan dalam operand. |
| struktur | (val1, val2, val3,…) | Membuat Struct dengan nilai field yang diberikan. Nama field Struct akan berupa col1, col2, dan seterusnya. |
Konstruktor paling sering digunakan dalam perintah INSERT yang mengisi kolom kompleks, atau dalam perintah SELECT yang menggabungkan beberapa kolom skalar ke dalam satu struktur sebelum menulis hasilnya ke tabel lain.
Fungsi Bawaan HiveQL
OperaTor mencakup perbandingan, perhitungan, dan akses elemen, tetapi tidak membulatkan angka, memangkas string, atau melakukan substitusi.tracdua tanggal. Pekerjaan itu termasuk dalam fungsi bawaan Hive, yang dipanggil berdasarkan nama di dalam ekspresi yang sama tempat operator muncul. Tabel di bawah ini mengelompokkan keluarga fungsi yang pertama kali ditemui oleh pemula.
| Keluarga fungsi | Anggota tipikal | Apa kegunaanya? |
|---|---|---|
| Matematis | round(), floor(), ceil(), abs(), pow(), sqrt(), rand() | Pembulatan, pangkat, dan perhitungan numerik lainnya pada nilai kolom tunggal. |
| String | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Pembersihan, pemangkasan, dan pembentukan ulangping teks sebelum dibandingkan atau dikelompokkan. |
| Tanggal | tanggal_saat_ini, tahun(), bulan(), selisih_tanggal(), tambah_tanggal(), stempel_waktu_unix() | ExtracMenentukan bagian-bagian tanggal dan mengukur interval antara dua tanggal. |
| Bersyarat | jika(), KASUS KETIKA, koalesensi(), nvl(), tidak null() | Memilih nilai pada tingkat baris dan mengganti NULL dengan nilai cadangan. |
| Koleksi | ukuran(), kunci_peta(), nilai_peta(), isi_array(), urutkan_array() | Memeriksa kolom array, map, dan struct yang dijangkau oleh operator tipe kompleks. |
| Jenis konversi | cast(), binary() | Memaksa kolom agar memiliki tipe data yang diharapkan oleh operator. |
| Agregat (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Menggabungkan banyak baris menjadi satu nilai, biasanya bersamaan dengan GROUP BY. |
Daftar fungsi bergantung pada rilis Hive, jadi ada baiknya membacanya dari sesi itu sendiri daripada dari halaman statis. Dua pernyataan dapat melakukan hal itu:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS mencantumkan setiap nama yang terdaftar, DESCRIBE FUNCTION mencetak tanda tangan satu baris, dan bentuk EXTENDED menambahkan contoh penggunaan di mana kelas yang mengimplementasikannya menyediakannya. Jika tidak ada fungsi bawaan yang sesuai, Hive menerima sebuah fungsi yang ditentukan pengguna ditulis dalam Java.
HiveQL vs SQL: Perbedaan Utama
HiveQL sengaja meminjam sintaks SQL, dan tabel operator di atas akan tampak familiar bagi siapa pun yang pernah menulis SQL. Namun, model eksekusi di baliknya tidak sama, dan perbedaannya akan terlihat segera setelah kueri melampaui perintah SELECT sederhana.
| Perilaku | sarang QL | SQL Tradisional (RDBMS) |
|---|---|---|
| Penanganan skema | Skema saat dibaca — skema diterapkan saat file diakses. | Skema saat penulisan — skema diterapkan saat baris dimasukkan. |
| Pembaruan dan penghapusan tingkat baris | Hanya didukung pada tabel ACID; tabel terkelola secara default berjenis ACID sejak Hive 3.0. | Didukung di setiap tabel secara default. |
| Indeks | Dukungan indeks dihapus di Hive 3.0 (HIVE-18448); indeks tingkat file ORC atau Parquet dan tampilan materialisasi menggantikannya. | B-tree dan indeks sekunder lainnya merupakan fitur inti. |
| Eksekusi dan latensi | Mengkompilasi ke pekerjaan batch pada Tez, MapReduce atau Spark, jadi bahkan pertanyaan kecil pun memerlukan biaya awal pekerjaan. | Eksekusi interaktif, biasanya dalam milidetik |
| Tujuan desain | Throughput pada file berukuran sangat besar di HDFS atau penyimpanan objek. | Pembacaan dan penulisan dengan latensi rendah pada satu server atau klaster. |
Konsekuensi praktis bagi penulisan ekspresif memang kecil, tetapi nyata. OperaOperator berperilaku seperti yang diharapkan, namun predikat yang akan dijawab dari indeks dalam basis data relasional dijawab di Hive dengan memindai file, sehingga penyaringan pada kolom partisi biasanya jauh lebih berharga daripada menyetel operator itu sendiri.

