1. ภาพรวม
BigQuery คือคลังเก็บข้อมูลการวิเคราะห์ต้นทุนต่ำที่มีความจุระดับเพทาไบต์ที่ Google จัดการอย่างเต็มรูปแบบ BigQuery คือ NoOps ไม่มีโครงสร้างพื้นฐานให้จัดการและคุณไม่จำเป็นต้องมีผู้ดูแลระบบฐานข้อมูล คุณจึงสามารถมุ่งเน้นไปที่การวิเคราะห์ข้อมูลเพื่อค้นหาข้อมูลเชิงลึกที่มีความหมาย ใช้ SQL ที่คุ้นเคย และใช้ประโยชน์จากโมเดลแบบจ่ายเมื่อใช้
ใน Codelab นี้ คุณจะใช้ไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ Python เพื่อค้นหาชุดข้อมูลสาธารณะของ BigQuery ด้วย Python
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Cloud Shell
- วิธีเปิดใช้ BigQuery API
- วิธีตรวจสอบสิทธิ์คำขอ API
- วิธีติดตั้งไลบรารีของไคลเอ็นต์ Python
- วิธีค้นหาผลงานของเชกสเปียร์
- วิธีค้นหาชุดข้อมูล GitHub
- วิธีปรับการแคชและการแสดงสถิติ
สิ่งที่คุณต้องมี
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python อย่างไร
คุณจะให้คะแนนความพึงพอใจในการใช้บริการ Google Cloud อย่างไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากคุณไม่เคยเริ่มต้นใช้งาน Cloud Shell มาก่อน คุณจะเห็นหน้าจอตรงกลาง (ครึ่งหน้าล่าง) ซึ่งอธิบายว่านี่คืออะไร หากเป็นเช่นนั้น ให้คลิกดำเนินการต่อ (คุณจะไม่เห็นการดำเนินการนี้อีก) หน้าจอแบบครั้งเดียวมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ Chromebook เท่านั้น
เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. เปิดใช้ API
ควรเปิดใช้ BigQuery API โดยค่าเริ่มต้นในโปรเจ็กต์ Google Cloud ทั้งหมด คุณตรวจสอบว่าเรื่องนี้เป็นจริงหรือไม่ได้ด้วยคำสั่งต่อไปนี้ใน Cloud Shell: คุณควรอยู่ในรายการ BigQuery
gcloud services list
คุณควรเห็น BigQuery แสดงอยู่
NAME TITLE bigquery.googleapis.com BigQuery API ...
ในกรณีที่ไม่ได้เปิดใช้ BigQuery API คุณจะใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ได้
gcloud services enable bigquery.googleapis.com
4. ตรวจสอบสิทธิ์คำขอ API
คุณต้องใช้บัญชีบริการเพื่อส่งคำขอไปยัง BigQuery API บัญชีบริการเป็นของโปรเจ็กต์และไลบรารีไคลเอ็นต์ Google Cloud Python จะใช้บัญชีนี้เพื่อสร้างคำขอ API ของ BigQuery บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นจึงสร้างข้อมูลเข้าสู่ระบบที่จะใช้ตรวจสอบสิทธิ์ว่าเป็นบัญชีบริการ
ก่อนอื่นให้ตั้งค่าตัวแปรสภาพแวดล้อม PROJECT_ID
ดังนี้
export PROJECT_ID=$(gcloud config get-value core/project)
ถัดไป ให้สร้างบัญชีบริการใหม่เพื่อเข้าถึง BigQuery API โดยใช้สิ่งต่อไปนี้
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
จากนั้น สร้างข้อมูลเข้าสู่ระบบที่โค้ด Python จะใช้เพื่อเข้าสู่ระบบเป็นบัญชีบริการใหม่ สร้างข้อมูลเข้าสู่ระบบเหล่านี้และบันทึกเป็นไฟล์ JSON ~/key.json
โดยใช้คำสั่งต่อไปนี้
gcloud iam service-accounts keys create ~/key.json \ --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com
สุดท้าย ให้ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS
ที่ไลบรารีของไคลเอ็นต์ BigQuery Python ใช้ ซึ่งจะกล่าวถึงในขั้นตอนถัดไปเพื่อค้นหาข้อมูลเข้าสู่ระบบ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ของข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้น โดยใช้สิ่งต่อไปนี้
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
อ่านเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ BigQuery API
5. ตั้งค่าการควบคุมการเข้าถึง
BigQuery ใช้ Identity and Access Management (IAM) เพื่อจัดการการเข้าถึงทรัพยากร BigQuery มีบทบาทที่กำหนดไว้ล่วงหน้าจำนวนหนึ่ง (ผู้ใช้, dataOwner, dataViewer เป็นต้น) ซึ่งคุณกําหนดให้กับบัญชีบริการที่คุณสร้างขึ้นในขั้นตอนก่อนหน้าได้ อ่านเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึงได้ในเอกสาร BigQuery
ก่อนที่จะค้นหาชุดข้อมูลสาธารณะได้ คุณต้องตรวจสอบว่าบัญชีบริการมีบทบาท roles/bigquery.user
เป็นอย่างน้อย เรียกใช้คำสั่งต่อไปนี้เพื่อมอบหมายบทบาทผู้ใช้ให้กับบัญชีบริการใน Cloud Shell
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/bigquery.user"
คุณเรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันว่าบัญชีบริการมีบทบาทของผู้ใช้ได้
gcloud projects get-iam-policy $PROJECT_ID
คุณควรจะเห็นสิ่งต่อไปนี้
bindings: - members: - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com role: roles/bigquery.user ...
6. ติดตั้งไลบรารีของไคลเอ็นต์
ติดตั้งไลบรารีไคลเอ็นต์ BigQuery Python ด้วยคำสั่งต่อไปนี้
pip3 install --user --upgrade google-cloud-bigquery
ตอนนี้คุณพร้อมที่จะเขียนโค้ดด้วย BigQuery API แล้ว
7. ค้นหาผลงานของเชกสเปียร์
ชุดข้อมูลสาธารณะคือชุดข้อมูลที่เก็บไว้ใน BigQuery และทำให้พร้อมใช้งานแบบสาธารณะ มีชุดข้อมูลสาธารณะอื่นๆ อีกมากมายให้คุณค้นหา แม้ว่าชุดข้อมูลบางส่วนจะโฮสต์โดย Google แต่ชุดข้อมูลส่วนใหญ่โฮสต์โดยบุคคลที่สาม ดูข้อมูลเพิ่มเติมได้ที่หน้าชุดข้อมูลสาธารณะ
นอกจากชุดข้อมูลสาธารณะแล้ว BigQuery ยังมีตารางตัวอย่างที่จำกัดซึ่งคุณค้นหาได้ ตารางเหล่านี้อยู่ในชุดข้อมูล bigquery-public-data:samples
ตาราง shakespeare
ในชุดข้อมูล samples
มีดัชนีคำผลงานของเชกสเปียร์ โดยให้จำนวนครั้งที่แต่ละคำปรากฏในคลังข้อมูลแต่ละรายการ
ในขั้นตอนนี้ คุณจะค้นหาตาราง shakespeare
ขั้นแรก ใน Cloud Shell ให้สร้างแอปพลิเคชัน Python อย่างง่ายที่คุณจะใช้เพื่อเรียกใช้ตัวอย่าง Translation API
mkdir bigquery-demo cd bigquery-demo touch app.py
เปิดตัวแก้ไขโค้ดจากด้านขวาบนของ Cloud Shell ดังนี้
ไปที่ไฟล์ app.py
ในโฟลเดอร์ bigquery-demo
และแทนที่โค้ดด้วยโค้ดต่อไปนี้
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
title = row['title']
unique_words = row['unique_words']
print(f'{title:<20} | {unique_words}')
ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าตารางมีการค้นหาอย่างไร
กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้
python3 app.py
คุณจะเห็นรายการคำและรายการต่างๆ ดังต่อไปนี้
hamlet | 5318 kinghenryv | 5104 cymbeline | 4875 troilusandcressida | 4795 kinglear | 4784 kingrichardiii | 4713 2kinghenryvi | 4683 coriolanus | 4653 2kinghenryiv | 4605 antonyandcleopatra | 4582
8. ค้นหาชุดข้อมูล GitHub
คุณจะต้องทำการค้นหาในชุดข้อมูลสาธารณะของ GitHub เพื่อให้คุ้นเคยกับ BigQuery มากขึ้น คุณจะพบข้อความคอมมิตที่พบบ่อยที่สุดใน GitHub โดยยังใช้เว็บคอนโซลของ BigQuery เพื่อดูตัวอย่างและเรียกใช้คำค้นหาเฉพาะกิจได้อีกด้วย
หากต้องการดูว่าข้อมูลมีลักษณะอย่างไร ให้เปิดชุดข้อมูล GitHub ใน UI ทางเว็บของ BigQuery โดยทำดังนี้
คลิกปุ่ม แสดงตัวอย่าง เพื่อดูว่าข้อมูลมีลักษณะเป็นอย่างไร:
ไปที่ไฟล์ app.py
ในโฟลเดอร์ bigquery_demo
และแทนที่โค้ดด้วยโค้ดต่อไปนี้
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าตารางมีการค้นหาข้อความคอมมิตที่พบบ่อยที่สุดอย่างไร
กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้
python3 app.py
คุณจะเห็นรายการข้อความคอมมิตและรายการต่างๆ ดังต่อไปนี้
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862
9. การแคชและสถิติ
BigQuery จะแคชผลการค้นหา ด้วยเหตุนี้ การค้นหาที่ตามมาจึงใช้เวลาน้อยลง คุณปิดใช้การแคชได้ด้วยตัวเลือกการค้นหา BigQuery ยังติดตามสถิติเกี่ยวกับคำค้นหาต่างๆ เช่น เวลาที่สร้าง เวลาสิ้นสุด และไบต์ทั้งหมดที่ประมวลผล
ในขั้นตอนนี้ คุณจะปิดการแคชและแสดงสถิติเกี่ยวกับข้อความค้นหา
ไปที่ไฟล์ app.py
ในโฟลเดอร์ bigquery_demo
และแทนที่โค้ดด้วยโค้ดต่อไปนี้
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
print('-'*60)
print(f'Created: {results.created}')
print(f'Ended: {results.ended}')
print(f'Bytes: {results.total_bytes_processed:,}')
ข้อควรทราบบางประการเกี่ยวกับโค้ด ขั้นแรก การแคชถูกปิดใช้โดยแนะนำ QueryJobConfig
และตั้งค่า use_query_cache
เป็น "เท็จ" ขั้นที่สอง คุณเข้าถึงสถิติเกี่ยวกับการค้นหาจากออบเจ็กต์งาน
กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้
python3 app.py
คุณจะเห็นรายการข้อความคอมมิตและรายการต่างๆ เช่นเดียวกับก่อนหน้านี้ นอกจากนี้ คุณควรจะเห็นสถิติบางอย่างเกี่ยวกับข้อความค้นหาในตอนท้าย:
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862 ------------------------------------------------------------ Created: 2020-04-03 13:30:08.801000+00:00 Ended: 2020-04-03 13:30:15.334000+00:00 Bytes: 2,868,251,894
10. กำลังโหลดข้อมูลลงใน BigQuery
หากต้องการค้นหาข้อมูลของคุณเอง คุณต้องโหลดข้อมูลลงใน BigQuery BigQuery รองรับการโหลดข้อมูลจากแหล่งที่มาหลายแห่ง ซึ่งรวมถึง Cloud Storage, บริการอื่นๆ ของ Google และแหล่งที่มาอื่นๆ ที่อ่านได้ นอกจากนี้ คุณยังสตรีมข้อมูลโดยใช้การแทรกแบบสตรีมมิงได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่หน้าการโหลดข้อมูลลงใน BigQuery
ในขั้นตอนนี้ คุณจะต้องโหลดไฟล์ JSON ที่จัดเก็บไว้ใน Cloud Storage ลงในตาราง BigQuery ไฟล์ JSON อยู่ที่ gs://cloud-samples-data/bigquery/us-states/us-states.json
หากมีข้อสงสัยเกี่ยวกับเนื้อหาในไฟล์ JSON ให้ใช้เครื่องมือบรรทัดคำสั่ง gsutil
เพื่อดาวน์โหลดใน Cloud Shell
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
คุณจะเห็นว่ามีรายชื่อรัฐในสหรัฐอเมริกา และแต่ละรัฐจะเป็นเอกสาร JSON แยกบรรทัดกัน ดังนี้
head us-states.json
{"name": "Alabama", "post_abbr": "AL"} {"name": "Alaska", "post_abbr": "AK"} ...
หากต้องการโหลดไฟล์ JSON นี้ลงใน BigQuery ให้ไปที่ไฟล์ app.py
ภายในโฟลเดอร์ bigquery_demo
และแทนที่โค้ดด้วยโค้ดต่อไปนี้
from google.cloud import bigquery
client = bigquery.Client()
gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')
job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)
print('JSON file loaded to BigQuery')
โปรดใช้เวลาสักครู่เพื่อศึกษาว่าโค้ดโหลดไฟล์ JSON และสร้างตารางที่มีสคีมาใต้ชุดข้อมูลอย่างไร
กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้
python3 app.py
ระบบจะสร้างชุดข้อมูลและตารางใน BigQuery
หากต้องการยืนยันว่าสร้างชุดข้อมูลแล้ว ให้ไปที่คอนโซล BigQuery คุณควรจะเห็นชุดข้อมูลและตารางใหม่ สลับไปที่แท็บแสดงตัวอย่างของตารางเพื่อดูข้อมูลของคุณ ดังนี้
11. ยินดีด้วย
คุณเรียนรู้วิธีใช้ BigQuery ด้วย Python แล้ว
ล้างข้อมูล
โปรดทำดังนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
- ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ของคุณ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Python บน Google Cloud: https://cloud.google.com/python/
- ไลบรารีไคลเอ็นต์ Cloud สำหรับ Python: https://googleapis.github.io/google-cloud-python/
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0