ทำความเข้าใจ Apache Hive Table สำหรับการทำ Big Data Analytic กันสักหน่อย

Posted on Posted in Big Data, Hive

“ทำความเข้าใจ Apache Hive Table สำหรับการทำ Big Data Analytic กันสักหน่อย”

      เราผ่านการทดลองเล่นข้อมูลกับ Hive กันมาบ้างแล้วทั้งจากบทความก่อนหน้านี้ หรือ บางคนอาจจะเคยลองเล่นตามบทความของต่างประเทศ  สำหรับการสร้าง Hive DB การโหลดข้อมูลเข้า Hive Table หรือ การทดลองเรียกข้อมูลด้วย HQL  เรามาบันทึกคุณสมบัติของ Hive Table เพื่อสรุปความเข้าใจใน Hive Table สำหรับการใช้งานด้าน Big Data Analytic กันสักหน่อย

 

การสร้าง Table ของ Hive คืออะไร ?

การสร้าง Table ของ Hive DB นั้นทำได้เช่นเดียวกันกับ Table ของ RDBMS และจำเป็นต้องกำหนด Scheme ของ Table ซึ่งบอกรายละเอียดของ Column ข้อมูล และ Data Type ที่กำหนดประเภทของข้อมูลที่จะเก็บใน Column นั้นๆ 

การสร้าง Table ใน Hive DB คือการสร้าง Metadata สำหรับอธิบายโครงสร้าง Table และ Data Type ที่เก็บรายละเอียดของ Table ไว้ใน Metastore DB  และ สร้าง Directory ที่เก็บไฟล์ข้อมูลของ Table ที่ควบคุมการทำงานผ่าน HDFS ของ Hadoop เอง

a1

เราต้องคิดถึงสิ่งใดบ้างถ้าจะสร้าง Table ?

การสร้าง Hive Table ขึ้นมาสำหรับเก็บข้อมูลนั้นสิ่งที่ต้องหาคำตอบก่อนจะสร้าง Table ก็คือ

  • ลักษณะข้อมูลที่เราจะเก็บใน Table เป็นแบบไหน หรือ แยกออกเป็นคอลัมน์ๆแล้วข้อมูลอยู่ในรูปแบบใด ระหว่างข้อมูลเดียวๆ หรือ ข้อมูลแบบโครงสร้าง เพื่อจะเลือก Data Type ได้อย่างเหมาะสมระหว่าง Primitive Data , Structure Data หรือ Key , Value Date หรือ List  ( ดูรายละเอียด Data Type เพิ่มเติมได้ที่บทความ “สรุป Data Type ของ Hive” )
  • ข้อมูลที่จะนำเข้าระหว่างคอลัมน์ข้อมูลมีอักขระใดเป็นตัวคั่นแยกข้อมูลระหว่างข้อมูล เช่น , หรือ |
  • ข้อมูลที่อยู่ในรูปแบบ Collection จะแยกระหว่างรายการข้อมูลด้วยอักขระใด เช่น ,
  • ข้อมูลที่อยู่ในรูปแบบ Key , Value จะแยกด้วยอะไรด้วยอักขระใด เช่น :
  • ปริมาณข้อมูลที่จะเก็บในระบบมีมากเพียงใด เพื่อพิจารณาเรื่องความเร็วในการเข้าถึงข้อมูลมาก ที่จะเป็นตัวกำหนดการเลือกใช้คุณสมบัติ Partition Table หรือ Bucket Cluster Data และ  ประเภท Data File ของ Hive ที่จะเก็บข้อมูล เช่น Text File , Sequence File , RFCFILE , ORC , PARQUET หรือ Avro เป็นต้น

 

Hive Table มี Column Data Type อะไรให้ใช้งานเพิ่มเติมมากว่า ANSI SQL บ้าง ?

เราสรุปสั้นๆ Data Type กันสักนิดหน่อย  ตัว Data Type ที่ใช้งานได้ของ Hive แบ่งเป็น 2 กลุ่ม คือ Primitive Data Type และ Complex Data Type  โดยที่กลุ่ม Complex Data Type เป็น Data Type ที่ Hive กำหนดมาใช้งานเพิ่มเติม

แบบ Primitive Data Type ประกอบด้วย TINYINT , SMALLINT , INT , BIGINT , FLOAT , DOUBLE , DECIMAL , BINARY , BOOLEAN , STRING , CHAR , VARCHAR , DATE , TIMESTAMP  โดยที่ขนาดข้อมูล หรือ การแทนความหมายประเภทข้อมูลเป็นมาตรฐานเดียวกับ ANSI SQL ทั่วไป

แบบ Complex Data Type ประกอบด้วย ARRAY , MAP , STRUCT , NAMEDSTRUCT , ตัวอย่างแต่ละ Type อยู่ในรูปแบบดังนี้

ARRAY : การแทนข้อมูลอยู่ในลักษณะของ List ของตัวข้อมูลที่คั่นด้วย ,(Comma)และ การเข้าถึงด้วย Index ที่เป็นลำดับข้อมูล  ตัวอย่างเช่น Column Name คือ myArray ที่แทนข้อมูลเป็น ['apple','orange','mango']  และ การเข้าถึงข้อมูลคือ myArray[0] = ‘apple’

MAP: การแทนข้อมูลอยู่ในลักษณะของรายการของ Key : Value ที่คั้นแต่ละข้อมูลด้วย , ( Comma ) และ การเข้าถึงอ้างอิงด้วยชื่อ Key  ตัวอย่างเช่น Column Name คือ myMap ที่แทนข้อมูลด้วย {1: "apple",2: "orange"} และ การเข้าถึงข้อมูลคือ myMap[1]= ‘apple’

STRUCT: การแทนข้อมูลจะเป็นโครงสร้างที่กำหนดเองโดยผู้ใช้ ที่อยู่ในเครื่องหมายปีกกาและแบ่งรายการข้อมูลด้วย , (Comma)  โดยที่ Structure field name จะเป็น colX ซึ่ง X เป็นลำดับตำแหน่งข้อมูล  ตัวอย่างเช่น Column Name คือ myStruct ที่แทนข้อมูลด้วย  {1, "apple"} และ การเข้าถึงข้อมูลคือ myStruct.col1=1 , myStruct.col2= ‘apple’

NAMEDSTRUCT: แบบนี้จะเหมือนกับ STRUCT แต่กำหนดตำแหน่งข้อมูลด้วยชื่อ ได้ ตัวอย่างเช่น Column Name คือ myNamedStruct ที่แทนข้อมูลด้วย {"apple":"gala","weightkg":1} และ การเข้าถึงข้อมูลคือ myNamedStruct.apple=‘gala’

 

การใช้งาน Hive Table มีประเภท Table ให้เลือกใช้งานกี่แบบ ?

การจะใช้งาน Hive Table นั้น Hive มีประเภทของ Table  ให้เลือกใช้งาน 2 แบบ คือ Internal  และ External  เรามาทำความรู้จักคุณสมบัติของ Table แต่ละแบบ  เพื่อการเลือกใช้งานได้อย่างเหมาะสมกัน

1). Internal Table ซึ่งTable หรือ Directory ของ Table จะอยู่ภายใต้  /user/hive/warehouse  ซึ่งการควบคุม Data Life Cycle อยู่ภายใต้การจัดการของ Hive Engine โดยตรง  เมื่อทำการ Drop Table ข้อมูลทั้งหมดจะถูกลบออกไปทั้ง Metadata ใน Metastore DB และ ตัวข้อมูลของ Table  การสร้าง Table จะไม่ต้องระบุ Keyword  location

2). External Table ซึ่ง Table หรือ Directory ของ Table จะอยู่ที่กำหนดไว้ใน keyword  ที่ location ‘ ….. ’  การควบคุมการลบข้อมูลผ่าน HDFS ดังนั้นการ Drop Table ตัว Hive จะทำการลบ Metadata ใน Metastore DB เท่านั้น ส่วนตัวข้อมูลใน Table จะยังคงอยู่ไม่หายออกไปจากระบบ

สำหรับในทางปฏิบัติเพื่อการใช้งานที่เต็มประสิทธิภาพของ Hive DB จะใช้งาน Table แบบ Internal เป็นหลัก

 

การใช้งาน Hive Table มีประเภท File Format ให้เลือกใช้งานกี่แบบ ?

การเก็บข้อมูลของ Table ใน Hive จะเก็บข้อมูลแบบไฟล์ข้อมูลที่ควบคุมการทำงานผ่าน HDFS   ลักษณะของข้อมูลที่เราเห็นเป็นโครงสร้างตารางในแนว Row และ Column นั้น ตัว Hive Engine มีการแทนข้อมูลและอ่านข้อมูลเป็น File Format  2 แบบ คือ Row Major หรือ Column Major เรามาสรุปสั้นๆกันไว้หน่อยเพื่อตอนไปสร้าง Table จะได้พอมีภาพเข้าใจ

Row Major

การแทนข้อมูลของ Record หนึ่งๆจำนวน Record ข้อมูลทั้งหมด จะวางเรียงต่อเนื่องแนวบรรทัด และ กระบวนเข้าถึงข้อมูลของ Record หนึ่งๆ แม้ว่าจะต้องการข้อมูลแค่ 1 Column ตัว MapReduce ก็จะต้องอ่านข้อมูลเต็มบรรทัดขึ้นมา ซึ่งมีผลต่อความเร็วในการเข้าถึงข้อมูลสำหรับการทำงานแบบ Concurrent เพราะจะมี I/O Wait เกิดขึ้นหาก แต่ละ Process ต้องการเข้าถึงข้อมูล Record เดียวกันด้วย

  • TEXTFILE
  • SEQUENCEFILE

Column Major

การแทนข้อมูลของ Record หนึ่งๆจำนวน Record ข้อมูลทั้งหมด จะถูกแบ่งเป็นก้อนข้อมูลตามคอลัมน์ หรือ ตัดไฟล์ข้อมูลตามแนวคอลัมน์ โดยที่จะมีสร้างตัวชี้ข้อมูลที่จะนำก้อนชิ้นส่วนข้อมูลมาประกอบรวมกัน  ดังนั้นการเข้าถึงข้อมูลที่ต้องการข้อมูลบางคอลัมน์ Hive Engine หรือ MapReduce จะเข้าอ่านข้อมูลเฉพาะไฟล์ของคอลัมน์ทีต้องการเท่านั้น ซึ่งส่งผลให้ลด I/O Wait ทำให้เริ่มความเร็วในการประมวลผลข้อมูลด้วย

  • RFCFILE
  • ORC
  • PARQUET

 

การใช้งาน Hive Table เพื่อความเร็วในการค้นหาข้อมูลต้องกำหนดคุณสมบัติเพิ่มเติมอะไร ?

            ปัจจัยที่มีผลต่อการทำให้ผลการค้นหาข้อมูลใช้เวลานานจากการเข้าถึงข้อมูลของ Table ที่ในระดับ Low Level เก็บข้อมูลแบบไฟล์ คือการกระจายตัวของข้อมูลหรือTransaction ไปอยู่ตามไฟล์ต่างๆ และ ปริมาณไฟล์ข้อมูลที่ต้องเข้าไปอ่านข้อมูลทั้งหมดที่เป็นจำนวนมาก

            การแก้ปัญหาเพื่อเพิ่มความเร็วในการค้นหาข้อมูลจำเป็นต้องลดจำนวนของไฟล์ข้อมูลที่จะทำการค้นหาข้อมูล หรือ การให้ข้อมูลที่อ้างอิงเดียวกัน เช่น ข้อมูลลูกค้าเดียวกัน , ข้อมูลของเดือนเดียวกัน หรือ ข้อมูลของภาคเดียวกันถูกสร้างให้กองรวมอยู่ในไฟล์เดียวกัน เป็นต้น

            เทคนิคการเพิ่มประสิทธิภาพการค้นหาข้อมูลของ Hive Table ทำได้ 2 แบบ คือ Partition Table และ Buckets Table

Partition Table คืออะไร

โดยปกติเวลาที่ทำการ Query ข้อมูลจาก Table ธรรมดา Hive จะทำการ Scan file ทั้งหมดใน Directory ของ Table ดังนั้นถ้าข้อมูลเป็น Table ขนาดใหญ่ หรือ ไฟล์มากๆ จะส่งผลต่อประสิทธิภาพด้านความเร็วมาก ดังนั้นเทคนิค Partition Table คือ Hive จาก Sub-Directory ตาม Field ที่กำหนดให้ทำการ Partition ผลก็คือ Search Space ก็จะน้อยลงทำให้ค้นหาข้อมูลได้เร็วขึ้น เรากำหนดด้วย Keyword ชื่อ Partition By ( [Col-Name1 DataType] ,..., [Col-Name2 DataType] )

Buckets Table คืออะไร

โดยปกติแล้วข้อมูลที่เก็บใน Table หรือ Directory จะเป็นไฟล์ข้อมูลแยกเป็นๆไฟล์หลายๆไฟล์ และ ข้อมูลที่โหลดเข้าระบบด้วยเทคนิคต่างๆตามรอบการทำงานก็จะกระจายไปอยู่ในไฟล์ต่างๆตามลำดับการเกิดของข้อมูล เช่น Transaction Data ของเหตุการณ์หนึ่งๆ ซึ่งใน Record Transaction อาจจะมี Customer ID อยู่ในนั้นด้วย  ดั้งนั้นข้อมูล Transaction ของ Customer ID เดียวกันก็จะกระจายออกไปตามเวลาเกิดข้อมูล  

ดังนั้นหากเราต้องการให้ Transaction ของ Customer ID เดียวกันอยู่ติดกันเป็นพื้นข้อมูลเดียวกัน   เทคนิคของการทำ Buckets Table ถูกนำเข้ามาช่วยเพื่อจัดกลุ่มให้ข้อมูลใน Column ที่กำหนดให้จัดกลุ่ม Buckets อยู่ในไฟล์ข้อมูลเดียวกัน เพื่อความเร็วในการ Query ในการประมวลข้อมูลที่ระบบไม่ต้องไป Scan อ่านข้อมูลจากไฟล์ทั้งหมด

 

ตัวอย่างรูปแบบคำสั่งสร้าง Table ที่กำหนดคุณสมบัติ Table แต่ละแบบ

            เราได้ทำการสรุปเรื่องราวต่างที่เกี่ยวกับการสร้าง Table ของ Hive เพื่อทำความเข้าใจกับ Hive Table แล้ว เราลองมาดูตัวอย่าง Table ของ Hive แต่ละแบบกันเล็กน้อย

a). การสร้าง Table แบบ Internal ที่มีการใช้ Column Data Type แบบ STRUCT , MAP และ ใช้ตัวคั่นระหว่าง Column ด้วย ‘|’  และ ตัวคั้นข้อมูลที่เป็นแบบ Collection หรือ STRUCT ด้วย ‘,’ และ ตัวคั้นข้อมูลแบบ MAP ระหว่าง Key/Value ด้วย ‘:’  ตัวอย่างแสดงตามรูปที่ 1  และ ตัวอย่างข้อมูลที่จะเก็บใน Table ตามรูปที่ 2

1

รูปที่ 1

2

รูปที่ 2

b). การสร้าง Table แบบ External ที่อ้างอิง Directory เก็บ Data file ที่ LOCATION '/user/dayongd/employee' ที่อยู่ใน HDFS ตัวอย่างแสดงตามรูปที่ 3

3

รูปที่ 3

c). การสร้าง Table แบบ Internal ที่เป็นแบบ Partition  Table ที่ PARTITIONED BY (Year INT, Month INT) ที่กำหนดให้ Column  Year , Month ของ Data เป็นตัวจัด Partition ตัวอย่างแสดงตามรูปที่ 4

4

รูปที่ 4

d). การสร้าง Table แบบ Internal ที่เป็นแบบ Bucket Table ที่ CLUSTERED BY (employee_id) INTO 2 BUCKETS ที่กำหนดให้ Column  employee_id ของ Data เป็นตัวจัดกลุ่มข้อมูลของ Employee_Id เดียวกันอยู่ใน Data file เดียวกัน   ตัวอย่างแสดงตามรูปที่ 5

5

รูปที่ 5

สุดท้ายในความเข้าใจ Hive Table

            หลังจากจุดนี้แล้ว Data Scientist มือใหม่ น่าจะได้ประโยชน์จากการเลือกกำหนดคุณสมบัติของ Table ที่ถูกต้อง ที่จะส่งผลให้การทำ Data Processing จาก Data Set ที่นำมาใช้งาน ให้ผลลัพธ์ได้รวดเร็วยิ่งๆขึ้นนะครับ  ลองเอาไปทดลองดูกันครับ

About Author

อวยชัย ภิรมย์รื่น

ทำงานมาแล้วในทุกตำแหน่งของทีมพัฒนาซอฟต์แวร์ มีประสบการณ์การวิเคราะห์และออกแบบระบบ Accounting&Warehouse , e-Payment , Freight forwarder , Logistic และ เคยดูงานด้านเทคนิคของระบบ Fraud Banking ที่ทำงานกับข้อมูลกว่า 7 ล้านรายการด้วยเข้าใจ Operation ของทุกระบบงานของธนาคารอย่างดี และ ถนัดเรื่องการบริหารจัดการโครงการพัฒนาระบบสารสนเทศ

| ปัจจุบันทำงานด้าน Big Data Solution Engineer โดยเอา Big Data Technology มาเพิ่มประสิทธิภาพการปฏิบัติงานของ Business and IT Operation

[  e-mail: p.auoychai@gmail.com , Tel. 086-813-5354 ]

Our Services

Big Data Engineering

ติดตั้ง Cloudera Enterprise Hadoop , อิมพลีเมนท์การเอาข้อมูลเข้า HDFS , Hive , HBase , Elasticsearch ผ่าน Talend  ETL Tool และ Custom Programming admin

Software&Solution

พัฒนา Smart Software Application ( Web , Mobile ) และ เชื่อมต่อกับอุปกรณ์ IoT  , พัฒนาระบบ Dashboard ทำ Visualize ข้อมูล , การพัฒนา API&Micro-Service , การเชื่อมต่อและประมวลผลข้อมูลบน Big Data Store ด้วยเทคนิค Machine Learning admin

IT Operation

อิมพลีเมนท์ระบบ IT  Monitoring สำหรับการเฝ้าระวังและแจ้งเตือนสภาพการทำงานของ Server , Application Server และ IoT Device ต่างๆ , การบริหารจัดการ Service & Application Log. admin

Leave a Reply

Your email address will not be published. Required fields are marked *