Hive ETL: กำลังโหลด JSON, XML, ตัวอย่างข้อมูลข้อความ

⚡ สรุปอย่างชาญฉลาด

Hive ETL แปลงไฟล์ข้อความ XML และ JSON ให้เป็นตารางที่สามารถสืบค้นได้ โดยการโหลดไฟล์เหล่านั้นเข้าไปใน Hive และดึงข้อมูลออกมาtracการดึงค่าด้วย xpath() และ get_json_object() ทำให้ผู้1วิเคราะห์สามารถเข้าถึงข้อมูล Hadoop กึ่งโครงสร้างผ่านทางอินเทอร์เฟซ SQL ได้

  • 🧱 แรงกระทำแบบมีโครงสร้าง: ไฟล์ข้อความที่คั่นด้วยตัวคั่นจะกลายเป็นตารางโดยใช้คำสั่ง ROW FORMAT DELIMITED บวกกับ FIELDS TERMINATED BY จากนั้นใช้คำสั่ง LOAD DATA LOCAL INPATH
  • 🏷️ XML เช่นtracชั่น: คอลัมน์ STRING เดียวจะเก็บเอกสาร XML แต่ละฉบับ และฟังก์ชัน xpath() จะดึงค่าออกมาจากแท็กที่มีชื่อ
  • 🔑 เจซอนtracชั่น: เมธอด get_json_object() จะอ่านนิพจน์ JSONPath หนึ่งรายการต่อการเรียกหนึ่งครั้ง ดังนั้นแต่ละฟิลด์จึงต้องมีการเรียกแยกกัน
  • 🪜 เพย์โหลดแบบซ้อนกัน: การโหลด JSON ที่ซับซ้อนจะทำในลักษณะเดียวกัน และการสำรวจลำดับชั้นจะทำโดยใช้การแสดงนิพจน์ JSONPath แบบจุด
  • 📍 กฎของเส้นทาง: คำสั่ง LOCAL จะอ่านข้อมูลจากระบบไฟล์ของ Linux ในขณะที่หากไม่ใช้คำสั่งนี้ ระบบจะระบุพาธบน HDFS
  • 🎯 มันพอดีตรงไหน: Hive เหมาะสำหรับงานจัดเก็บข้อมูลแบบกลุ่มและการประมวลผล ETL กึ่งโครงสร้าง มากกว่าการค้นหาข้อมูลที่มีความหน่วงต่ำ

Hive ETL: การโหลดข้อมูล JSON, XML และข้อความ

Hive เป็นเครื่องมือ ETL และคลังข้อมูลบนพื้นฐานของ... Hadoop ระบบนิเวศน์นี้มีฟังก์ชันการทำงานต่างๆ เช่น การสร้างแบบจำลองข้อมูล การจัดการข้อมูล การประมวลผลข้อมูล และการสอบถามข้อมูล ตัวอย่างข้อมูลtracการดำเนินการใน Hive หมายถึงการสร้างตารางใน Hive การโหลดข้อมูลที่มีโครงสร้างและกึ่งโครงสร้าง รวมถึงการสืบค้นข้อมูลตามความต้องการ

สำหรับการประมวลผลแบบกลุ่ม เราจะเขียนสคริปต์ที่กำหนดเองโดยใช้สคริปต์ map และ reduce ที่กำหนดเองในภาษาสคริปต์ ซึ่งจะช่วยให้... SQL เช่นสภาพแวดล้อมและการสนับสนุนเพื่อการสืบค้นที่ง่ายดาย

การทำงานกับข้อมูลที่มีโครงสร้างโดยใช้ Hive

ข้อมูลที่มีโครงสร้าง หมายความว่าข้อมูลนั้นอยู่ในรูปแบบที่ถูกต้อง คือมีแถวและคอลัมน์ ซึ่งคล้ายคลึงกับ... อาร์ดีบีเอ็มเอส ข้อมูลที่มีแถวและคอลัมน์ที่เหมาะสม

ต่อไปนี้เราจะทำการโหลดข้อมูลที่มีโครงสร้างซึ่งอยู่ในไฟล์ข้อความเข้าไปใน Hive

ขั้นตอน 1) ในขั้นตอนนี้ เรากำลังสร้างตาราง “employees_guru” พร้อมชื่อคอลัมน์ เช่น Id, Name, Age, Address, Salary และ Department ของพนักงานพร้อมประเภทข้อมูล

สร้างตาราง employees_guru และโหลดไฟล์ Employees.txt ลงใน Hive

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. การสร้างตาราง “employees_guru”
  2. กำลังโหลดข้อมูลจากไฟล์ Employees.txt ลงในตาราง “employees_guru”

ขั้นตอน 2) ในขั้นตอนนี้ เราจะแสดงเนื้อหาที่จัดเก็บไว้ในตารางนี้โดยใช้คำสั่ง “เลือก” (Select) เราสามารถดูเนื้อหาในตารางได้จากภาพหน้าจอต่อไปนี้

ผลลัพธ์จากคำสั่งเลือกแสดงแถวของตาราง employees_guru ใน Hive

ตัวอย่างโค้ด

แบบสอบถามที่จะดำเนินการ

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

การทำงานกับข้อมูลกึ่งโครงสร้างโดยใช้ Hive (XML, JSON)

Hive ทำหน้าที่ประมวลผลข้อมูล (ETL) ในระบบนิเวศของ Hadoop โดยทำหน้าที่เป็นตัวกลาง เครื่องมือ ETLการใช้งาน MapReduce ในแอปพลิเคชันบางประเภทอาจเป็นเรื่องยาก Hive สามารถลดความซับซ้อนนั้นและมอบโซลูชันที่ดีที่สุดสำหรับแอปพลิเคชันด้านไอทีในแง่ของภาคส่วนคลังข้อมูล

ข้อมูลกึ่งโครงสร้าง เช่น XML และ JSON สามารถประมวลผลได้ง่ายกว่าโดยใช้ Hive ขั้นแรก เราจะมาดูวิธีการใช้ Hive สำหรับ... XML.

แปลง XML เป็นตาราง Hive

ในที่นี้ เราจะโหลดข้อมูล XML ลงในตาราง Hive และเราจะดึงค่าที่เก็บไว้ในแท็ก XML

ขั้นตอน 1) สร้างตาราง “xmlsample_guru” โดยมีคอลัมน์ str ที่มีชนิดข้อมูลเป็นสตริง

สร้างตาราง xmlsample_guru และโหลดไฟล์ test.xml ลงใน Hive

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. การสร้างตาราง “xmlsample_guru”
  2. กำลังโหลดข้อมูลจากไฟล์ test.xml ลงในตาราง “xmlsample_guru”

ขั้นตอน 2) การใช้ XPath ด้วยเมธอด xpath() เราจะสามารถดึงข้อมูลที่จัดเก็บอยู่ภายในแท็ก XML ได้

การค้นหาด้วย xpath() จะส่งคืนค่า ename และ esal จากคอลัมน์ XML

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. เราใช้เมธอด xpath() เพื่อดึงค่าที่จัดเก็บไว้ภายใต้ /emp/esal/ และ /emp/ename/
  2. ค่าต่างๆ ที่อยู่ภายในแท็ก XML ในขั้นตอนนี้ เราจะแสดงค่าจริงที่จัดเก็บไว้ภายใต้แท็ก XML ในตาราง “xmlsample_guru”

โปรดทราบว่า xpath() จะส่งคืนอาร์เรย์ของสตริง ในขณะที่ xpath_string(), xpath_int() และ xpath_double() จะส่งคืนค่าประเภทเดียว

ขั้นตอน 3) ในขั้นตอนนี้ เราจะดึงและแสดงข้อมูล XML ดิบของตาราง “xmlsample_guru”

เอกสาร XML ดิบที่จัดเก็บไว้ในคอลัมน์ str ของ xmlsample_guru

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  • ข้อมูล XML จริงที่แสดงพร้อมกับแท็ก
  • หากเราพิจารณาแท็กเพียงแท็กเดียว จะพบว่ามี "emp" เป็นแท็กหลัก และมี "ename" กับ "esal" เป็นแท็กย่อย

Code ตัวอย่าง:

แบบสอบถามที่จะดำเนินการ

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

เจสัน (Javaสัญกรณ์วัตถุสคริปต์)

ข้อมูลจากโซเชียลมีเดียและเว็บไซต์มักถูกจัดเก็บในรูปแบบ JSON เมื่อใดก็ตามที่เราพยายามดึงข้อมูลจากเซิร์ฟเวอร์ออนไลน์ ระบบจะส่งคืนไฟล์ JSON โดยใช้ Hive เป็นที่เก็บข้อมูล เราสามารถโหลดข้อมูล JSON ลงในตาราง Hive ได้โดยการสร้างสคีมา

แปลง JSON เป็นตาราง Hive

ในส่วนนี้ เราจะโหลดข้อมูล JSON ลงในตาราง Hive และเราจะดึงค่าที่จัดเก็บไว้ในสคีมา JSON ออกมา

ขั้นตอน 1) ในขั้นตอนนี้ เราจะสร้างตาราง JSON ชื่อ “json_guru” เมื่อสร้างเสร็จแล้ว เราจะโหลดและแสดงเนื้อหาของสคีมาจริง

กำลังสร้าง json_guru โหลดไฟล์ test.json และแสดงโครงสร้าง JSON

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. การสร้างตาราง “json_guru”
  2. กำลังโหลดข้อมูลจากไฟล์ test.json ลงในตาราง “json_guru”
  3. แสดงโครงสร้างข้อมูลจริงของไฟล์ JSON ที่จัดเก็บอยู่ในตาราง json_guru

ขั้นตอน 2) เราสามารถดึงค่าข้อมูลที่จัดเก็บไว้ในโครงสร้างลำดับชั้น JSON ได้โดยใช้เมธอด get_json_object()

ผลลัพธ์จาก get_json_object() แสดงรายการ ecode, ename และ salary จาก json_guru

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. การใช้ get_json_object(str,'$.ecode') สามารถดึงค่า ecode จากตาราง json_guru ได้ ในทำนองเดียวกัน การใช้ get_json_object(str,'$.ename') และ get_json_object(str,'$.sal') จะดึงค่า ename และ sal จากตาราง json_guru
  2. ค่าที่จัดเก็บไว้ภายในลำดับชั้น JSON ใน json_guru

เนื่องจาก get_json_object() วิเคราะห์เอกสารเพียงครั้งเดียวต่อการเรียกใช้ json_tuple() จึงประหยัดกว่าเมื่อต้องการคีย์หลายตัว และ JSON SerDe จะแมปเอกสารไปยังคอลัมน์ที่มีประเภทข้อมูลเมื่อโหลดข้อมูล

Code ตัวอย่างข้อมูล

แบบสอบถามที่จะดำเนินการ

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

การแปลง JSON ที่ซับซ้อนเป็นตาราง Hive

ในส่วนนี้ เราจะโหลดข้อมูล JSON ที่ซับซ้อนลงในตาราง Hive และเราจะดึงค่าที่จัดเก็บไว้ในสคีมา JSON ออกมา

ขั้นตอน 1) สร้าง complexjson_guru โดยใช้ฟิลด์คอลัมน์เดียว

สร้าง complexjson_guru และโหลด emp.json ลงในตาราง Hive

จากภาพหน้าจอข้างต้น เราสามารถสังเกตได้ดังต่อไปนี้:

  1. การสร้างตาราง complexjson_guru โดยมีคอลัมน์เดียวเป็นชนิดข้อมูลสตริง
  2. กำลังโหลดข้อมูลลงใน complexjson_guru จากไฟล์ complex JSON ชื่อ emp.json

ขั้นตอน 2) โดยการใช้ get_json_object เราสามารถดึงเนื้อหาจริงที่จัดเก็บอยู่ภายในโครงสร้างลำดับชั้นของไฟล์ JSON ได้

จากภาพหน้าจอต่อไปนี้ เราจะเห็นผลลัพธ์ของข้อมูลที่จัดเก็บไว้ใน complexjson_guru

Extracการแยกอีโคดและค่าคีย์แบบซ้อนกันจากเอกสาร JSON ที่ซับซ้อน

ขั้นตอน 3) ในขั้นตอนนี้ เราสามารถใช้คำสั่ง “Select” เพื่อดูข้อมูล JSON ที่ซับซ้อนซึ่งจัดเก็บอยู่ในตาราง “complexjson_guru” ได้

เลือกเอาต์พุตที่แสดงแถว JSON ที่ซับซ้อนแบบดิบใน complexjson_guru

ตัวอย่างโค้ด

แบบสอบถามที่จะดำเนินการ

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

การใช้งาน Hive ในโครงการแบบเรียลไทม์ – ควรใช้เมื่อใดและที่ไหน

ควรใช้ Hive ในระบบนิเวศของ Hadoop เมื่อใดและที่ไหน:

เมื่อ

  • เมื่อทำงานกับฟังก์ชันทางสถิติที่แข็งแกร่งและทรงพลังในระบบนิเวศ Hadoop
  • เมื่อทำงานกับการประมวลผลข้อมูลที่มีโครงสร้างและกึ่งโครงสร้าง
  • ในฐานะเครื่องมือคลังข้อมูลด้วย Hadoop
  • การนำเข้าข้อมูลแบบเรียลไทม์ด้วย HBase ซึ่งสามารถใช้ Hive ได้

ที่ไหน

  • เพื่อความสะดวกในการใช้งานในฐานะเครื่องมือ ETL และคลังข้อมูล
  • เพื่อสร้างสภาพแวดล้อมแบบ SQL และสามารถเรียกดูข้อมูลได้เหมือน SQL โดยใช้ HiveQL
  • เพื่อใช้งานและปรับใช้สคริปต์แผนที่และตัวลดขนาดที่กำหนดเองสำหรับความต้องการเฉพาะของลูกค้า

คำถามที่พบบ่อย

คำสั่ง LOCAL จะคัดลอกไฟล์จากระบบไฟล์ของเครื่องไคลเอ็นต์ หากไม่มีคำสั่ง LOCAL นั้น Hive จะถือว่าพาธนั้นเป็น HDFS และย้ายไฟล์ ดังนั้นพาธสัมพัทธ์จะถูกแปลงไปอยู่ในโฮม HDFS ของผู้ใช้

โดยทั่วไปแล้ว `json_tuple()` จะเร็วกว่า เพราะมันจะแยกวิเคราะห์เอกสารเพียงครั้งเดียวและส่งคืนคีย์หลายตัวพร้อมกัน ในขณะที่ `get_json_object()` จะแยกวิเคราะห์สตริงใหม่สำหรับแต่ละฟิลด์ ควรใช้ `get_json_object()` สำหรับค่าเดียว

ไม่ คอลัมน์ STRING เดียวบวกกับฟังก์ชัน JSON ก็ใช้งานได้แล้ว SerDe เช่น org.apache.hive.hcatalog.data.JsonSerDe เหมาะสำหรับคำสั่งค้นหาและแมปข้อมูลที่ใช้งานซ้ำๆ ในระบบการผลิตping ป้อนข้อมูลลงในคอลัมน์ที่พิมพ์เพียงครั้งเดียว แทนที่จะป้อนทุกครั้งที่อ่าน

โดยปกติแล้วไฟล์จะถูกจัดรูปแบบอย่างสวยงาม: Hive คาดหวังว่าจะมีเอกสาร JSON ที่สมบูรณ์หนึ่งฉบับต่อบรรทัด ดังนั้นเอกสารที่ถูกแบ่งออกเป็นหลายบรรทัดจะกลายเป็นแถวที่ไม่ถูกต้อง การสะกดคีย์ผิดหรือการใช้ตัวพิมพ์ใหญ่-เล็กไม่ถูกต้องใน JSONPath ก็ให้ผลเช่นเดียวกัน

ฟังก์ชัน `xpath()` จะคืนค่าเป็นอาร์เรย์ของสตริงเสมอ ควรใช้ฟังก์ชันที่มีการกำหนดประเภทแทน เช่น `xpath_string(), `xpath_int(), `xpath_long(), `xpath_float(), `xpath_double()` หรือ `xpath_boolean()` แต่ละฟังก์ชันจะคืนค่าเป็นค่าเดี่ยวของประเภทนั้นๆ

การใช้งานภายนอกปลอดภัยกว่าสำหรับข้อมูลการลงจอดดิบ เนื่องจากอัตราการตกping ตารางประเภทนี้จะคงไฟล์ไว้ในตำแหน่งเดิม ในขณะที่ตารางแบบจัดการจะลบไดเร็กทอรีข้อมูลเมื่อกด DROP ซึ่งสะดวกสำหรับตารางชั่วคราว แต่เป็นการทำลายล้างสำหรับไฟล์ที่ใช้ร่วมกัน

เครื่องมือแมชชีนเลิร์นนิงจะวิเคราะห์ไฟล์ตัวอย่างเพื่ออนุมานประเภทข้อมูล ระบุคีย์ที่กระจัดกระจาย และเสนอคอลัมน์พาร์ติชันจากรูปแบบการค้นหา โปรดพิจารณาผลลัพธ์เป็นเพียงร่าง — ประเภทและพาร์ติชันยังคงต้องได้รับการตรวจสอบกับข้อมูลจริงอีกครั้ง

โปรแกรมนี้จะสร้างคำสั่ง CREATE TABLE, คำสั่ง LOAD DATA และนิพจน์ JSONPath จากข้อมูลตัวอย่างที่คัดลอกมาวางในโปรแกรมแก้ไข เนื่องจากโปรแกรมไม่สามารถมองเห็นคลัสเตอร์ได้ ดังนั้นจึงจำเป็นต้องตรวจสอบชื่อ เส้นทาง และการสะกดคำของคีย์ก่อน

สรุปโพสต์นี้ด้วย: