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 เท่า