คุณมีปัญหากับการวิเคราะห์ข้อมูลขนาดใหญ่ใช่ไหม? — ลองมาใช้ BigQuery ดูสิ
0) เกริ่นนำ
หากคุณเป็นคนที่ทำงานในสายงาน Data Science หรือใกล้เคียง คุณอาจจะเคยได้ยินคนพูดถึง BigQuery มาบ้าง
สรุปแบบสั้นๆเลยคือ BigQuery เป็น Fully-managed Enterprise Data Warehouse จาก Google Cloud Platform ที่สามารถทำการค้นหาข้อมูลผ่าน SQL (หรืออื่นๆ) กับข้อมูลขนาดหลาย TB ได้ในเวลาอันสั้นครับ
บทความนี้เป็นส่วนที่ 2 ของซีรีส์แนะนำ BigQuery โดยบริษัท Cleverse ซึ่งในบทความชุดแรกเราได้อธิบายถึงสรรพคุณแบบคร่าวๆ ของ BigQuery ไปแล้ว หากสนใจศึกษาเพิ่มเติมสามารถตามไปอ่านได้ที่นี่ครับ
บทความนี้จะพาคุณไปลอง “เล่น” (ใช้งาน) ฟีเจอร์หลักๆของ BigQuery กันครับ : )
สำหรับในบทความส่วนที่สองนี้จะเน้นไปที่การแนะนำ BigQuery ผ่านการใช้งานคร่าวๆ ดังนี้ครับ
- Interacting with BigQuery: จากข้อมูลดิบสู่ผลวิเคราะห์
- Loading
- Querying
- Exporting & Visualization
- BigQuery: Query Example — เล่นกับ BigQuery บน Stackoverflow Dataset
- Q1: ใน Stackoverflow ต้องรอกี่วัน ถึงจะมีคนมาตอบ ?
- Q2: ในประเทศไทย ใครตอบคำถามมากสุด ?
- Q3: User จากประเทศไทย สงสัยเรื่องอะไรบ้างในช่วง 10 ปี ?
- BigQuery: Data Visualization — แสดงข้อมูลจาก BigQuery บน Google Data Studio
1) Interacting with BigQuery
— จากข้อมูลดิบสู่ผลวิเคราะห์
การทำงานกับ BigQuery สามารถทำได้ผ่าน Web UI, Command-line tool, BigQuery Client Library และ REST API ครับ : )
ในส่วนนี้จะขออธิบายรูปแบบการใช้งาน BigQuery คร่าวๆ เพื่อให้ผู้อ่านได้เห็นภาพรวมๆของการใช้งาน Google BigQuery ตั้งแต่จากการนำเข้าข้อมูล จนถึงการนำเอาผลลัพธ์ไปแสดงนะครับ
Step 1: Loading data
เริ่มต้นจากการนำข้อมูลที่เราต้องการวิเคราะห์เข้ามาในระบบ BigQuery ก่อน ซึ่งตัวระบบมีการรองรับข้อมูลได้ค่อนข้างหลากหลาย ดังนี้ครับ
- Local File : รองรับ CSV, JSON จากบนเครื่อง
- Streaming Data : รองรับการนำเข้าข้อมูลโดย Streaming Insert ผ่าน API
- Google Cloud Storage : รองรับการนำเข้าข้อมูลจากไฟล์ที่เก็บอยู่บน Google Cloud Storage
- DML Statement: เช่น INSERT, UPDATE, DELETE Statement
- รองรับการนำเข้าข้อมูลจากระบบอื่นๆที่สนับสนุน เช่น Google DoubleClick, AdWords, YouTube ผ่าน Google data transfer service
สำหรับในบทความนี้เราจะไม่ขอเน้นในส่วนนี้ หากผู้อ่านสนใจสามารถดูตัวอย่างการนำเข้าข้อมูลได้จากบทความดังนี้ครับ
- การนำข้อมูล CSV เข้าโดยใช้ Web UI
- การนำข้อมูล CSV เข้าโดยใช้ Command-line Tool:
- การนำข้อมูลเข้าโดย Streaming Insert โดยใช้ BigQuery API
นอกจากนี้ BigQuery ยังสนับสนุน Nested+repeated data type ด้วย ทำให้สามารถเก็บข้อมูลที่เป็น JSON Object หรือ Array ลงไปได้เลยครับ
Step 2: Querying
เมื่อเอาข้อมูลเข้า BigQuery ได้สำเร็จแล้ว ต่อจะเป็นการเอาข้อมูลมาใช้งาน (Query) โดย BigQuery จะใช้ BigQuery Standard SQL เป็นหลักในการดึงข้อมูล ซึ่งอ้างอิงตามมาตรฐาน SQL2011 ซึ่งใกล้เคียงกับ SQL ที่เราใช้กันอยู่บนฐานข้อมูลทั่วไป เช่น MySQL, MSSQL, หรือ Oracle
สำหรับ Syntax ของ Standard SQL สามารถอ่านเพิ่มเติมได้จาก Standard SQL Documentation ครับ
ที่เพิ่มเติมมาคือ Standard SQL มีระบบ User-Defined Functions (UDFs) ทำให้เราสามารถสร้างฟังก์ชันโดยใช้ SQL หรือภาษาอื่น (เช่น Javascript) มาประมวลผลข้อมูลขณะ Query ได้ด้วย ตามตัวอย่างด้านล่างครับ
สำหรับ Data Scientist เราขอแนะนำตัวอย่างการ Query ผ่าน R และ Query ผ่าน Web UI สำหรับการใช้งานโดยทั่วไปครับ
Step 3+: Exporting and Visualization
หลังจาก Query ข้อมูลเสร็จแล้ว เราสามารถส่งออกผลลัพธ์ออกมาได้ทั้งแบบ CSV, JSON หรือไม่ก็สร้างเป็นตารางใหม่ และยังสามารถนำไปแสดงผลบน BI Tools เช่น Tableau, QlikSense, Google Data Studio ต่อได้เลย
ในส่วนสุดท้ายของบทความนี้เราจะแสดงตัวอย่างการนำข้อมูลไปแสดงบน Google Data Studio ให้ดูครับ
2) BigQuery: Query Example
— ลองเล่นกับ BigQuery บน Stackoverflow Dataset
ทาง Google มี Free Tier ให้บุคคลทั่วไปสามารถใช้งานได้ฟรี (1TB แรกสำหรับ Query ข้อมูลและ 10GB แรกสำหรับการเก็บข้อมูล ต่อเดือน) และมี Public Dataset ทั้งจาก World Blank, Baseball League และอีกมากมาย ให้นำไปทดลองใช้งานหรือใช้งานจริงได้ทันทีโดยไม่ต้องเสียเงิน (แต่เสียค่า Query ข้อมูลตามปกตินะ!)
หนึ่งในนั้นคือ stackoverflow dataset ที่มีข้อมูลคำถามคำตอบ รวมไปถึงข้อมูลผู้ใช้งาน เช่น ชื่อ, อายุ และข้อมูลอื่นๆ
- ใน Dataset นี้มีข้อมูลตั้งแต่ กรกฏาคม 2008 (ช่วง private-beta)
ถึง มีนาคม 2018 (เปิดมาแล้วเกือบ 10 ปี) - มีคำถาม 15ล้าน หรือประมาณ 40% ของกระทู้ทั้งหมดในพันทิพ
- มี User ประมาณ 3 ล้าน หรือเกือบเท่ากับประชากรในโคราช
หมายเหตุ: ผู้เขียนเอาเลขไปเทียบกับอะไรบางอย่างให้ดูตื่นเต้น เพราะถ้าแสดงเลขเปล่าๆจะดูธรรมดาไป -w-+
Query stackoverflow data ผ่าน Web UI
หลังจากที่เรามีบัญชี Google Cloud แล้ว เราสามารถใช้งาน Google Bigquery บน Dataset ต่างๆ ผ่าน BigQuery Web UI ได้ โดยทำตามขั้นตอนด้านล่างนี้
- ไปที่ web UI ของ BigQuery แล้วค้นหาว่า stackoverflow จากนั้นคลิกที่ตาราง posts_questions แล้วคลิกที่ปุ่ม Query Table ด้านขวา
- ต่อมาคลิกที่ปุ่ม Show Options จะเปิดหน้า Config ขึ้นมา จากนั้นเอาเช็คตรงคำว่า Use Legacy SQL ออก
- ในช่อง New Query ใส่ SQL ที่ต้องการ
- กด RUN QUERY ได้ผลลัพธ์ออกมา
เพื่อทดสอบความแรง เร็ว และความยากง่ายในการใช้งาน BigQuery — เราจะลองมาใช้ BigQuery ค้นหาคำตอบของคำถามเหล่านี้บน stackoverflow dataset กันครับ
- ต้องรอกี่วัน ถึงจะมีคนมาตอบ ?
- ในประเทศไทย ใครตอบคำถามมากสุด ?
- ในไทย สงสัยเรื่องอะไรกัน ? ในช่วง 10 ปี
Q1: ใน Stackoverflow ต้องรอกี่วัน ถึงจะมีคนมาตอบ ?
สำหรับตัวอย่างนี้เราจะใช้ Window Function + Sub Query มาช่วยคำนวนครับ
เมื่อนำมา Query จะได้ผลลัพธ์ดังนี้
(ใช้เวลา Query ประมาณ 40 วิ และ จากที่ทดลอง คำสั่ง Window Function เทียบกับ Group By ได้ผลว่า Window Function ไม่ได้ Query เร็วกว่า Group By เหมือนที่เป็น Database แบบอื่นๆ)
จากตารางจะได้ว่า
- ปีที่แล้ว (2017) ค่า Median ของเวลา Waiting Time คือ 38 นาที
- ในช่วงปีหลัง (2016 เป็นต้นมา) รอนานกว่าปีแรกๆ (ก่อนปี 2009) เกือบ 4 เท่า
- จำนวนคำถาม (c_ques) ในช่วงหลังตั้งแต่ปี 2016 ไม่เพิ่มขึ้น มีแนวโน้มทรงตัว
Q2: ในประเทศไทย ใครตอบคำถามมากสุด ?
สำหรับตัวอย่างนี้เราจะใช้ Javascript มาช่วยคำนวนผ่าน UDFs (บรรทัดที่ 4–7) ครับ
เมื่อนำมา Query จะได้ผลลัพธ์ดังนี้
(ใช้เวลาประมาณ 11 วิ)
จากตารางจะได้ว่า
- มีคนไทยเคยมาตอบทั้งสิ้น 1,232 คน และ top 5 อันแรกเป็นชาวต่างชาติทั้งหมด
Q3: User จากประเทศไทย สงสัยเรื่องอะไรบ้างในช่วง 10 ปี ?
สำหรับตัวอย่างนี้เราจะใช้ Sub Query (WITH Clause) มาช่วยในการ Query
เมื่อนำมา Query จะได้ผลลัพธ์ดังนี้
เนื่องจากการแสดงข้อมูลเป็นตารางแบบนี้เข้าใจได้ยาก สำหรับคำถามข้อนี้เราจะขอนำ Data Studio — Tools เพิ่มเติม มาช่วยแสดงข้อมูลนี้แทนครับ
3) BigQuery: Data Visualization
— Visualize จาก BigQuery บน Google Data Studio
Data Studio คือ BI Tool บนเว็บ เหมาะสำหรับคนอยากทำ Chart ที่ไม่ซับซ้อนมาก และมี Filter ข้อมูลแบบง่ายๆให้ใช้ (และสามารถแชร์ report เป็น link ได้) ในขณะนี้ Data Studio ยังใช้งานได้ฟรี แบบไม่มี limit จำนวน report
Data Studio มีข้อจำกัดคือ ยังไม่สามารถเอา Chart ไปแสดงบนเว็บภายนอกได้ และไม่สามารถ filter ข้อมูลเวลาเมื่อคลิกบน chart ได้
วิธีการใช้ Data Studio คู่กับ BigQuery สำหรับข้อมูลใหญ่ มี 2 ส่วนที่ต้องทำคือ Save ข้อมูลจาก Query ลงในตารางใหม่ ก่อนจะนำไป แสดงข้อมูลลง Data Studio
Save ข้อมูลจาก Query ลงในตารางใหม่
- ไปที่หน้า BigQuery จากนั้นไปที่แท็บด้านซ้าย แล้วกดลูกศรสีฟ้า แล้วกด Create new dataset
- ตั้งชื่อเป็น eda_stackoverflow
- กลับมาที่ผลลัพธ์ กด Save as Table (ข้อมูลจาก Query ด้านบน ) และตั้งชื่อ trend_stackoverflow
- เราก็จะได้ ตารางใหม่ขึ้นมา
แสดงข้อมูลลง Data Studio
- เมื่อเข้ามาหน้าแรก https://datastudio.google.comให้คลิกปุ่ม + สีฟ้าด้านล่างขวา จากนั้นกด CREATE NEW DATA SOURCE
- เลือกเป็น BigQuery แล้วกด Select
- ที่แท็บด้านซ้าย กด MY PROJECTS > เลือก Project และ ตาราง ที่สร้างไว้> กด ADD TO REPORT
- เมื่อมาถึงหน้าสร้าง Dashboard เลือก Time Series Chart
- ผูกข้อมูลเข้ากับ Chart ตามด้านล่าง
- เราจะได้ Chart สวยงาม หน้าตาประมาณนี้
จาก Q3: User จากประเทศไทย สงสัยเรื่องอะไรบ้างในช่วง 10 ปี ? เรานำมามาแสดงผลเป็นกราฟผ่าน Data Studio และสรุปผลได้ดังนี้ครับ
- ก่อนปี 2010 ภาษายอดนิยมคือ… c#, php
- ต่อมา 2011–2014 เป็นช่วงรุ่งเรืองของ… Objective-C, iOS, iPhone
- จนปี 2015 กลายเป็น Javascript
- และในปี 2018 ภาษาที่มาแรงสุดในปีนี้ได้แก่ Python
ในส่วนของบทความพาร์ทถัดไป (Part 3/3) เราจะมาเล่าถึงข้อจำกัด การใช้งาน และตัวอย่างการเอาไปประยุกต์ใช้ และแนวทางการลดค่าใช้จ่าย เพื่อให้ BigQuery พร้อมไปใช้จริงบน Production ครับ รอติดตามชมได้ในไม่ช้า (*คาดว่า)
ไว้เจอกันใหม่ในบทความหน้าครับ -w-/
บทความ, ภาพประกอบ โดย Sarin Achawaranont, เขียนร่วมกับ Teppakorn Thanuthanad
หากมีเขียนผิดพลาดหรือข้อเสนอแนะใดๆทักแชทมาได้ที่ Cleverse Facebook Page ได้เลยครับ /กราบ