เล่นไปเขียนไปกับ Dataprep

Sunday Half
Nov 6 · 3 min read

จะลองใช้ Google Dataprep ในการเตรียม database item สำหรับเกมเกมหนึ่ง

ไฟล์ที่เรามี

  • items.csv — ที่เก็บข้อมูลหลักๆ ของ item ไม่ว่าจะเป็น ชื่อ ID และรายละเอียดอื่นๆ
  • trial card list.csv — สำหรับเก็บเฉพาะ item ID ของเช่า ซึ่งเป็น branch ออกมาจาก items.csv อีกที
  • ff_loc-th.xml — ไฟล์แปลภาษาไทย ประกอบด้วย Key และคำแปลภาษาไทย
  • ff_loc-en.xml — ไฟล์แปลภาษาอังกฤษ ประกอบด้วย Key และคำแปลภาษาอังกฤษ

สิ่งที่เราต้องการ

  • รวมทุกไฟล์เข้าด้วยกัน โดยต้องมี Item ID จาก items.csv รวมกับ trial card list.csv
  • เพิ่มชื่อภาษาไทยและภาษาอังกฤษของแต่ละไอเท็ม

เริ่มกันเลยดีกว่า

โยนไฟล์ที่เราจะทำ Dataprep เข้า GCP Storage ..จะเป็นแบบ coldline ก็ได้ ไม่เกี่ยง
จากตัวอย่างข้างต้น ข้าพเจ้าก็โยนไฟล์ทั้ง 4 ลงไป

เปิด Dataprep ขึ้นมา สร้าง flow ใหม่ แล้ว Add Datasets จาก GCS ลงไป ..เจ้าสี่ไฟล์นั่นแหละ

อย่างแรกที่เราต้องทำก็คือ งอกตัวจัดการไฟล์ออกมาก่อน

งอก

เมื่องอกมาแล้ว สามารถปรับไฟล์ได้ตามใจชอบ ไม่ว่าจะเป็น เพิ่ม cell, ลบ column, replace คำ หรือแม้กระทั่ง JOIN table! ซึ่งสิ่งที่เราทำไปทั้งหมดจะเรียกว่า Recipe

ให้กดเข้าไป Edit Recipe แล้วละเลงได้เลย

ผมต้องการเอา Row 2 ออก เพราะมันเป็น header ภาษาจีน

คลิกที่จุดหน้า Row แล้วระบบอัจฉริยะจะปรากฏด้านข้าง ให้เราเลือก Action ที่เราจะทำ ซึ่งก็คือ Delete rows นั่นเอง

นอกจากนี้ยังสามารถ filter หา type ที่ไม่ชอบ แล้วลบออกทั้ง row ได้อีกด้วย (จะเห็นได้จากข้อ 4 ใน Recipe) เมื่อปรับแต่งจนพอใจก็ได้ Recipe มาดังนี้

ทีนี้เราไปทำงานกับไฟล์ XML ต่อ
ซึ่งระบบมันไม่ได้อ่านไฟล์ได้เป็นตารางแบบไฟล์ CSV
ดังนั้น ข้าพเจ้าจึงเลือกที่จะปรับไฟล์โดยใช้ Regular Expression

โดยเราต้องการที่จะ Extract text จากใน string name และ text ที่อยู่ระหว่าง tag string นั่น

สามารถป้ายเม้าส์เลือกได้ตามภาพ เมนูอัจฉริยะด้านข้างก็จะขึ้นมา แต่ในภาษาที่ค่อนข้างจะไม่รู้เรื่อง แต่เอาเป็นว่าเราเลือก Extract ที่เราต้องการก็แล้วกัน

เราใช้ Column1 มา extract โดยครอบ / / เพื่อให้ข้อความข้างในเป็น Regular Expression ดูตัวอย่างตามภาพได้เลย

แยกมันออกมาเป็น 2 column เอาไว้ไป Join กับ ItemID ที่ทำไว้ข้างต้น

การ Join นั้นไม่ยาก เหมือน SQL เลย แต่ทำได้ใน spreadsheet เพียงแค่จิ้มตรงนี้
เลือก recipe หรือ dataset ที่จะเอาไปรวมด้วย ไม่ต้องเลือกไฟล์ตั้งต้น

แล้วเมนูอัจฉริยะ ก็จะเลือกมาให้เองว่าจะ Join กันที่ Column ไหน — เหนือชั้นจริงๆ
โดยมีบอกด้วยว่า match กี่ %
และค่าตั้งต้นที่มันให้มานั้นเป็น inner join ซึ่งเราสามารถปรับเปลี่ยนได้ตามใจชอบ
รวมถึงถ้า column ที่มันแนะนำมายังไม่ใช่ ก็ยังปรับเองได้

เมื่อกด Next ก็ยังสามารถเลือกต่อได้ว่าจะเอา column อะไรไว้ หรือจะไม่เอา ซึ่ง interface เข้าใจง่ายโพดๆ


เรื่องควรระวัง

คือตอนทำ output นี่แหละ
ค่าตั้งต้นของมันจะเป็นการสร้างไฟล์ขึ้นมาแบบ Multiple แต่โดยปกติแล้วเราจะทำงานไฟล์เดียว หรือ Single

ซึ่งต้องเข้าไปปรับด้านในเป็นประมาณนี้

ให้มัน Append เข้าไฟล์เดิม
ให้มันมี header ด้วย ไม่งั้นจะมาแบบโล้นๆ
แล้วก็ให้มันเป็น Single File

แค่นี้ก็เรียบร้อยแล้ว สั่ง Run Job ตาม Region ที่ท่านต้องการ
ซักพักงานก็จะออกมา (แต่การเอางานไว้ใน coldline มันก็จะช้าๆ หน่อย)

นี่เป็นการใช้ Dataprep 101 สามารถเอาไปทำ ETL ต่อได้อย่างสบายๆ หรืองานที่ต้องใช้เวลาทำอย่าง Report / Routine job ต่างๆ ก็ใช้เจ้านี่จัดการได้อย่างว่องไว

Sunday Half

Written by

เราจะไปตามหาเรื่องคลาสสิกอะไรอีกดี..?

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade