1. บทนำ

เวิร์กโฟลว์เป็นบริการจัดระเบียบที่มีการจัดการเต็มรูปแบบซึ่งเรียกใช้บริการของ Google Cloud หรือบริการภายนอกตามลำดับที่คุณกำหนด
BigQuery เป็นคลังข้อมูลองค์กรที่มีการจัดการอย่างเต็มรูปแบบซึ่งช่วยคุณจัดการและวิเคราะห์ข้อมูลหลายเทราไบต์ด้วยฟีเจอร์ที่มีมาให้ในตัว เช่น แมชชีนเลิร์นนิง การวิเคราะห์พื้นที่ภูมิศาสตร์ และ Business Intelligence
ในโค้ดแล็บนี้ คุณจะเรียกใช้การค้นหา 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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก Google Cloud Console ให้คลิกไอคอน 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. กำหนดเวิร์กโฟลว์เพื่อเรียกใช้การค้นหาหลายรายการ
การเรียกใช้การค้นหาในตารางเดียวเป็นเรื่องง่าย อย่างไรก็ตาม การเรียกใช้การค้นหาหลายรายการกับหลายตารางและการรวบรวมผลลัพธ์อาจเป็นเรื่องที่น่าเบื่อ เวิร์กโฟลว์มีไวยากรณ์การวนซ้ำที่จะช่วยคุณในเรื่องนี้
สร้างไฟล์ workflow-serial.yaml ใน Cloud Shell เพื่อสร้างเวิร์กโฟลว์ที่จะเรียกใช้การค้นหาหลายรายการกับหลายตาราง
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
คุณต้องตรวจสอบว่าได้เปิดใช้ 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 อย่างเพื่อเปลี่ยนขั้นตอนแบบอนุกรมเป็นขั้นตอนแบบขนาน
ในworkflow-parallel.yamlไฟล์ ให้เปลี่ยนขั้นตอนrunQueries ก่อนอื่นให้เพิ่มparallelคีย์เวิร์ด ซึ่งจะช่วยให้การวนซ้ำแต่ละครั้งของลูป for ทำงานแบบขนานได้ ประการที่ 2 ประกาศตัวแปร results เป็นตัวแปร shared ซึ่งจะช่วยให้สาขาเขียนตัวแปรได้ เราจะต่อท้ายผลลัพธ์แต่ละรายการกับตัวแปรนี้
- 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 เท่า