1. บทนำ

เวิร์กโฟลว์คือบริการจัดการเป็นกลุ่มที่มีการจัดการครบวงจรซึ่งเรียกใช้ Google Cloud หรือบริการภายนอกตามลำดับที่คุณกำหนด
BigQuery คือคลังข้อมูลขององค์กรที่มีการจัดการครบวงจร ซึ่งช่วยให้คุณจัดการและวิเคราะห์ข้อมูลหลายเทราไบต์ได้ด้วยฟีเจอร์ในตัว เช่น แมชชีนเลิร์นนิง การวิเคราะห์เชิงพื้นที่ และ Business Intelligence
ใน Codelab นี้ คุณจะเรียกใช้การค้นหา BigQuery บางส่วนกับชุดข้อมูล Wikipedia สาธารณะ จากนั้นคุณจะเห็นวิธีเรียกใช้การค้นหา BigQuery หลายรายการทีละรายการในแบบอนุกรม ซึ่งเป็นส่วนหนึ่งของกลุ่มเวิร์กโฟลว์เป็นกลุ่ม สุดท้าย คุณสามารถโหลดการค้นหาพร้อมกันได้โดยใช้ฟีเจอร์การทำซ้ำพร้อมกันของเวิร์กโฟลว์เพื่อเพิ่มความเร็วถึง 5 เท่า
สิ่งที่คุณจะได้เรียนรู้
- วิธีเรียกใช้การค้นหา BigQuery กับชุดข้อมูล Wikipedia
- วิธีเรียกใช้การค้นหาหลายรายการให้เป็นส่วนหนึ่งของการจัดกลุ่มเวิร์กโฟลว์เป็นกลุ่ม
- วิธีโหลดการค้นหาพร้อมกันโดยใช้เวิร์กโฟลว์ซ้ำๆ พร้อมกันเพื่อเพิ่มความเร็วสูงสุด 5 เท่า
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน ดังนี้

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

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Codelab นี้ทำได้ในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
3. สำรวจชุดข้อมูล Wikipedia
ขั้นแรก ให้สำรวจชุดข้อมูล Wikipedia ใน BigQuery
ไปที่ส่วน BigQuery ของ Google Cloud Console แล้วดำเนินการดังนี้

ใต้ bigquery-samples คุณจะเห็นชุดข้อมูลสาธารณะต่างๆ รวมถึงชุดข้อมูลที่เกี่ยวข้องกับ Wikipedia บางส่วน ดังนี้

ใต้ชุดข้อมูล wikipedia_pageviews คุณจะเห็นตารางต่างๆ สำหรับการดูหน้าเว็บจากปีต่างๆ ดังนี้

คุณสามารถเลือกตารางใดตารางหนึ่ง (เช่น 201207) และดูตัวอย่างข้อมูล โดยทำดังนี้

นอกจากนี้คุณยังเรียกใช้การค้นหาในตารางได้อีกด้วย เช่น คำค้นหานี้จะเลือกชื่อภาพยนตร์/รายการทีวี 100 อันดับแรกที่มียอดดูสูงสุด
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
เมื่อเรียกใช้การค้นหา การโหลดข้อมูลจะใช้เวลาประมาณ 20 วินาที

4. กำหนดเวิร์กโฟลว์เพื่อเรียกใช้การค้นหาหลายรายการ
การเรียกใช้ข้อความค้นหาในตารางเดียวสามารถทำได้อย่างง่ายดาย อย่างไรก็ตาม การเรียกใช้การค้นหาหลายข้อความในหลายตารางและจัดเรียงผลการค้นหาอาจเป็นเรื่องที่ค่อนข้างน่าเบื่อ เวิร์กโฟลว์จะช่วยเรื่องไวยากรณ์สำหรับการปรับปรุงได้ด้วย
ภายใน Cloud Shell ให้สร้างไฟล์ workflow-serial.yaml เพื่อสร้างเวิร์กโฟลว์เพื่อเรียกใช้คำค้นหาหลายรายการกับหลายตาราง ดังนี้
touch workflow-serial.yaml
จากนั้นคุณจะแก้ไขไฟล์ด้วยตัวแก้ไขใน Cloud Shell ได้โดยทำดังนี้

ภายในไฟล์ workflow-serial.yaml ขั้นตอนแรกของ init ให้สร้างแผนที่ results เพื่อติดตามการทำซ้ำแต่ละรายการที่ใช้ชื่อตาราง และกําหนดอาร์เรย์ tables ด้วยรายการตารางที่คุณต้องการเรียกใช้การค้นหา ในกรณีนี้ เราจะเลือก 5 ตารางดังนี้
main:
steps:
- init:
assign:
- results : {}
- tables:
- 201201h
- 201202h
- 201203h
- 201204h
- 201205h
ถัดไป ให้กำหนดขั้นตอน runQueries ขั้นตอนนี้จะปรับปรุงในแต่ละตาราง และใช้เวิร์กโฟลว์ เครื่องมือเชื่อมต่อ BigQuery เพื่อเรียกใช้การค้นหาเพื่อค้นหาชื่อหนังสือ 100 อันดับแรกที่มีการดูหน้าเว็บมากที่สุดในแต่ละตาราง จากนั้นจะบันทึกชื่อและมุมมองยอดนิยมจากแต่ละตารางในการแมปผลลัพธ์ ดังนี้
- runQueries:
for:
value: table
in: ${tables}
steps:
- runQuery:
call: googleapis.bigquery.v2.jobs.query
args:
projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
body:
useLegacySql: false
useQueryCache: false
timeoutMs: 30000
# Find the top 100 titles with most views on Wikipedia
query: ${
"SELECT TITLE, SUM(views)
FROM `bigquery-samples.wikipedia_pageviews." + table + "`
WHERE LENGTH(TITLE) > 10
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100"
}
result: queryResult
- returnResult:
assign:
# Return the top title from each table
- results[table]: {}
- results[table].title: ${queryResult.rows[0].f[0].v}
- results[table].views: ${queryResult.rows[0].f[1].v}
ในขั้นตอนสุดท้าย ให้แสดงแผนที่ results:
- returnResults:
return: ${results}
5. เรียกใช้การค้นหาหลายรายการด้วยเวิร์กโฟลว์
คุณต้องตรวจสอบว่าได้เปิดใช้ Workflows API แล้วก่อนที่จะทำให้ใช้งานได้และเรียกใช้เวิร์กโฟลว์ คุณเปิดใช้ได้จาก Google Cloud Console หรือใช้ gcloud ใน Cloud Shell ดังนี้
gcloud services enable workflows.googleapis.com
สร้างบัญชีบริการสำหรับเวิร์กโฟลว์ โดยทำดังนี้
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
ตรวจสอบว่าบัญชีบริการมีบทบาทในการบันทึกและเรียกใช้งาน BigQuery โดยทำดังนี้
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทำให้เวิร์กโฟลว์ใช้งานได้ด้วยบัญชีบริการ
gcloud workflows deploy bigquery-serial \
--source=workflow-serial.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ในที่สุดคุณพร้อมที่จะเรียกใช้เวิร์กโฟลว์แล้ว
ค้นหาเวิร์กโฟลว์ bigquery-serial ในส่วนเวิร์กโฟลว์ของ Cloud Console แล้วกดปุ่ม Execute:

หรือเรียกใช้เวิร์กโฟลว์ด้วย gcloud ใน Cloud Shell ก็ได้ โดยทำดังนี้
gcloud workflows run bigquery-serial
คุณควรเห็นการดำเนินการเวิร์กโฟลว์ใช้เวลาประมาณ 1 นาที (20 วินาทีสำหรับแต่ละตารางจากทั้ง 5 ตาราง)
ในตอนท้าย คุณจะเห็นเอาต์พุตจากแต่ละตารางพร้อมด้วยชื่อและมุมมองยอดนิยม ดังนี้


6. โหลดการค้นหาหลายรายการพร้อมกันโดยใช้ขั้นตอนคู่ขนาน
เวิร์กโฟลว์ในขั้นตอนก่อนหน้าใช้เวลาประมาณ 1 นาทีเนื่องจากเรียกใช้การค้นหา 5 รายการซึ่งใช้เวลาแต่ละรายการละ 20 วินาที เนื่องจากการค้นหาเหล่านี้เป็นการค้นหาอิสระ คุณจึงเรียกใช้พร้อมกันได้จริงๆ โดยใช้ฟีเจอร์การทำซ้ำแบบคู่ขนานของเวิร์กโฟลว์
คัดลอกไฟล์ workflow-serial.yaml ไปยังไฟล์ workflow-parallel.yaml ใหม่ คุณจะต้องทำการเปลี่ยนแปลง 2-3 รายการในไฟล์ใหม่เพื่อเปลี่ยนขั้นตอนอนุกรมเป็นขั้นตอนคู่ขนาน
เปลี่ยนขั้นตอน runQueries ในไฟล์ workflow-parallel.yaml ก่อนอื่นให้เพิ่มคีย์เวิร์ด parallel ซึ่งจะทำให้การทำซ้ำของ for Loop แต่ละครั้งทำงานขนานกัน ขั้นที่ 2 ประกาศตัวแปร results เป็นตัวแปร shared วิธีนี้จะช่วยให้ Branch เขียนตัวแปรได้ เราจะเพิ่มผลลัพธ์แต่ละรายการต่อท้ายตัวแปรนี้
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
ทำให้เวิร์กโฟลว์ที่ทำงานพร้อมกันใช้งานได้
gcloud workflows deploy bigquery-parallel \
--source=workflow-parallel.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
เรียกใช้เวิร์กโฟลว์ดังนี้
gcloud workflows run bigquery-parallel
คุณควรเห็นการดำเนินการเวิร์กโฟลว์ใช้เวลาประมาณ 20 วินาที ปัญหานี้เกิดจากการค้นหาทั้ง 5 รายการทำงานพร้อมกัน เพิ่มความเร็วสูงสุด 5 เท่าโดยเปลี่ยนโค้ดเพียงไม่กี่บรรทัด
ซึ่งท้ายที่สุดแล้ว คุณจะเห็นผลลัพธ์เดียวกันจากแต่ละตารางพร้อมด้วยชื่อและมุมมองยอดนิยม แต่ใช้เวลาดำเนินการน้อยกว่ามาก

7. ขอแสดงความยินดี
ยินดีด้วย คุณศึกษา Codelab จบแล้ว ดูข้อมูลเพิ่มเติมได้ในเอกสารเวิร์กโฟลว์ในขั้นตอนพร้อมกัน
สรุปประเด็นที่ได้พูดถึง
- วิธีเรียกใช้การค้นหา BigQuery กับชุดข้อมูล Wikipedia
- วิธีเรียกใช้การค้นหาหลายรายการให้เป็นส่วนหนึ่งของการจัดกลุ่มเวิร์กโฟลว์เป็นกลุ่ม
- วิธีโหลดการค้นหาพร้อมกันโดยใช้เวิร์กโฟลว์ซ้ำๆ พร้อมกันเพื่อเพิ่มความเร็วสูงสุด 5 เท่า