ความแตกต่างเพียงประการเดียวในพฤติกรรม (ไม่ใช่การใช้งานที่ตั้งใจไว้) จากการวิจัยและการทดสอบที่ จำกัด ของฉันจนถึงตอนนี้ (โดยใช้ Hive 1.1.0 -cdh5.12.0) ดูเหมือนว่าเมื่อตารางหลุด
- ข้อมูลของตารางภายใน (จัดการ) จะถูกลบออกจากระบบไฟล์ HDFS
- ในขณะที่ข้อมูลของตารางภายนอกไม่ถูกลบออกจากระบบไฟล์ HDFS
(หมายเหตุ: ดูส่วน 'ตารางที่มีการจัดการและภายนอก' ใน https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDLซึ่งแสดงรายการความแตกต่างอื่น ๆ ที่ฉันไม่เข้าใจอย่างสมบูรณ์)
ฉันเชื่อว่าไฮฟ์เลือกตำแหน่งที่ต้องการสร้างตารางโดยยึดตามลำดับความสำคัญต่อไปนี้จากบนลงล่าง
- ตำแหน่งที่กำหนดในระหว่างการสร้างตาราง
- ตำแหน่งที่กำหนดไว้ในการสร้างฐานข้อมูล / สคีมาที่สร้างตาราง
- ดีฟอลต์ Hive Warehouse Directory (คุณสมบัติ hive.metastore.warehouse.dir ใน hive.site.xml)
เมื่อไม่ได้ใช้ตัวเลือก "ตำแหน่ง" ในระหว่าง "การสร้างตารางรัง" ระบบจะใช้กฎลำดับความสำคัญข้างต้น สิ่งนี้ใช้ได้กับทั้งตารางภายในและภายนอก ซึ่งหมายความว่าตารางภายในไม่จำเป็นต้องอยู่ในไดเร็กทอรี Warehouse และสามารถอยู่ที่อื่นได้
หมายเหตุ: ฉันอาจพลาดบางสถานการณ์ไป แต่จากการสำรวจที่ จำกัด ของฉันพฤติกรรมของทั้งตารางภายในและภายนอกดูเหมือนจะเหมือนกันยกเว้นความแตกต่างเดียว (การลบข้อมูล) ที่อธิบายไว้ข้างต้น ฉันลองสถานการณ์ต่อไปนี้สำหรับทั้งตารางภายในและภายนอก
- การสร้างตารางที่มีและไม่มีตัวเลือกตำแหน่ง
- การสร้างตารางที่มีและไม่มี Partition Option
- การเพิ่มข้อมูลใหม่โดยใช้ Hive Load and Insert Statements
- การเพิ่มไฟล์ข้อมูลไปยังตำแหน่ง Table นอก Hive (โดยใช้คำสั่ง HDFS) และรีเฟรชตารางโดยใช้คำสั่ง "MSCK REPAIR TABLE
- วางตาราง