Adakah yang bisa memberi tahu saya perbedaan antara tabel eksternal Hive dan tabel internal. Saya tahu perbedaannya muncul saat menjatuhkan meja. Saya tidak mengerti apa yang Anda maksud dengan data dan metadata dihapus di internal dan hanya metadata yang dihapus di tabel eksternal. Adakah yang bisa menjelaskan saya dalam hal node tolong.
110
Tabel sarang dapat dibuat sebagai EKSTERNAL atau INTERNAL. Ini adalah pilihan yang memengaruhi cara data dimuat, dikontrol, dan dikelola.
Gunakan tabel EKSTERNAL ketika:
Gunakan tabel INTERNAL ketika:
sumber
Untuk menjawab pertanyaan Anda:
Untuk Tabel Eksternal, Hive menyimpan data di LOKASI yang ditentukan selama pembuatan tabel (umumnya tidak di direktori gudang). Jika tabel eksternal dihapus, maka metadata tabel dihapus tetapi datanya tidak.
Untuk tabel Internal, Hive menyimpan data ke direktori gudang nya. Jika tabel dihapus maka metadata tabel dan datanya akan dihapus.
Untuk referensi Anda,
Perbedaan antara tabel Internal & Eksternal:
Hive mungkin memiliki tabel internal atau eksternal, ini adalah pilihan yang memengaruhi cara data dimuat, dikontrol, dan dikelola.
Gunakan tabel EKSTERNAL ketika:
Gunakan tabel INTERNAL ketika:
Sumber:
HDInsight: Perkenalan Tabel Internal dan Eksternal Sarang
Tabel internal & eksternal di Hadoop- HIVE
sumber
Data tabel internal disimpan di folder gudang, sedangkan data tabel eksternal disimpan di lokasi yang Anda sebutkan dalam pembuatan tabel.
Jadi ketika Anda menghapus tabel internal, itu menghapus skema serta data di bawah folder gudang, tetapi untuk tabel eksternal itu hanya skema yang akan Anda lepas.
Jadi ketika Anda menginginkan tabel eksternal kembali lagi setelah Anda menghapusnya, dapat membuat tabel dengan skema yang sama lagi dan mengarahkannya ke lokasi data asli. Semoga sudah jelas sekarang.
sumber
Satu-satunya perbedaan dalam perilaku (bukan penggunaan yang dimaksudkan) berdasarkan penelitian dan pengujian terbatas saya sejauh ini (menggunakan Hive 1.1.0 -cdh5.12.0) tampaknya adalah ketika tabel dijatuhkan
(CATATAN: Lihat Bagian 'Tabel Terkelola dan Eksternal' di https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL yang mencantumkan beberapa perbedaan lain yang saya tidak sepenuhnya mengerti)
Saya yakin Hive memilih lokasi di mana ia perlu membuat tabel berdasarkan prioritas berikut dari atas ke bawah
Ketika opsi "Lokasi" tidak digunakan selama "pembuatan tabel sarang", aturan prioritas di atas digunakan. Ini berlaku untuk tabel Internal dan Eksternal. Ini berarti tabel Internal tidak harus berada di direktori Gudang dan dapat ditempatkan di tempat lain.
Catatan: Saya mungkin melewatkan beberapa skenario, tetapi berdasarkan eksplorasi saya yang terbatas, perilaku tabel Internal dan Ekstenal tampaknya sama kecuali untuk satu perbedaan (penghapusan data) yang dijelaskan di atas. Saya mencoba skenario berikut untuk tabel Internal dan Eksternal.
sumber
Di tabel eksternal, jika Anda menjatuhkannya, itu hanya menghapus skema tabel, data tabel ada di lokasi fisik. Jadi untuk menghapus datanya gunakan hadoop fs - rmr tablename. Sarang meja yang dikelola akan memiliki kontrol penuh atas meja. Di tabel eksternal, pengguna akan memiliki kendali atasnya.
sumber
Tabel internal berguna jika Anda ingin Hive mengelola seluruh siklus hidup data Anda termasuk penghapusan, sedangkan tabel eksternal berguna ketika file sedang digunakan di luar Hive.
sumber
External hive table memiliki kelebihan yaitu tidak menghapus file ketika kita drop tabel, kita dapat mengatur format baris dengan pengaturan yang berbeda, seperti serde .... delimited
sumber
Perlu diingat juga bahwa Hive adalah gudang data besar. Saat Anda ingin menjatuhkan tabel, Anda tidak ingin kehilangan Gigabyte atau Terabyte data. Menghasilkan, memindahkan, dan menyalin data pada skala itu dapat memakan waktu. Ketika Anda menjatuhkan sarang tabel 'Terkelola' juga akan membuang datanya. Ketika Anda menjatuhkan tabel 'Eksternal' hanya definisi skema dari penyimpanan meta sarang yang dihapus. Data di hdfs masih ada.
sumber
Pertimbangkan skenario ini yang paling sesuai untuk Tabel Eksternal:
Pekerjaan MapReduce (MR) memfilter file log yang sangat besar untuk mengeluarkan
n
file sub log (mis. Setiap file sub log berisi log jenis pesan tertentu) dan outputnya yaitun
file sub log disimpan dalam hdfs.File log ini akan dimuat ke dalam tabel Hive untuk melakukan analitik lebih lanjut, dalam skenario ini saya akan merekomendasikan Tabel Eksternal, karena file log sebenarnya dihasilkan dan dimiliki oleh proses eksternal yaitu pekerjaan MR selain itu Anda dapat menghindari langkah tambahan untuk memuat setiap file log yang dihasilkan ke tabel Hive masing-masing juga.
sumber
Kasus penggunaan terbaik untuk tabel eksternal di sarang adalah saat Anda ingin membuat tabel dari file baik CSV atau teks
sumber
sarang hanya menyimpan data meta di metastore dan data asli di luar sarang ketika kami menggunakan tabel eksternal kami dapat memberikan lokasi '' oleh ini data asli kami tidak akan berpengaruh ketika kami menjatuhkan tabel
sumber
Jika sudah ada data di HDFS, tabel Hive eksternal dapat dibuat untuk mendeskripsikan data. Ini disebut EKSTERNAL karena data di tabel eksternal ditentukan di properti LOKASI, bukan di direktori gudang default.
Saat menyimpan data di tabel internal, Hive sepenuhnya mengelola siklus hidup tabel dan data. Ini berarti data dihapus setelah tabel internal dijatuhkan. Jika tabel eksternal dijatuhkan, metadata tabel dihapus tetapi datanya disimpan. Seringkali, tabel eksternal lebih disukai untuk menghindari penghapusan data bersama dengan tabel secara tidak sengaja.
sumber
Untuk tabel terkelola, Hive mengontrol siklus hidup datanya. Hive menyimpan data untuk tabel terkelola dalam sub-direktori di bawah direktori yang ditentukan oleh hive.metastore.warehouse.dir secara default.
Saat kami menjatuhkan tabel terkelola, Hive menghapus data dalam tabel. Namun tabel terkelola kurang nyaman untuk dibagikan dengan alat lain. Sebagai contoh, katakanlah kita memiliki data yang dibuat dan digunakan terutama oleh Pig, tetapi kita ingin menjalankan beberapa kueri terhadapnya, tetapi tidak memberikan kepemilikan data kepada Hive.
Pada saat itu, tabel eksternal ditentukan yang menunjuk ke data tersebut, tetapi tidak mengambil kepemilikannya.
sumber
INTERNAL : Tabel dibuat Pertama dan Data dimuat kemudian
EKSTERNAL : data adalah hadir dan Table yang dibuat di atas itu.
sumber
Di Hive Kita juga bisa membuat tabel eksternal. Ini memberitahu Hive untuk merujuk ke data yang ada di lokasi yang ada di luar direktori gudang. Menghapus tabel Eksternal akan menghapus metadata tetapi tidak datanya.
sumber
Saya ingin menambahkan itu
sumber
Secara sederhana, ada dua hal:
Sarang dapat mengatur hal-hal di gudang yaitu tidak akan menghapus data dari gudang. Saat kami menghapus tabel:
1) Untuk tabel internal, data dikelola secara internal di gudang. Jadi akan dihapus.
2) Untuk tabel eksternal, data dikelola selamanya dari gudang. Jadi tidak bisa dihapus dan klien selain sarang juga bisa menggunakannya.
sumber