เชื่อมต่อ BigQuery ด้วย Python ใน 3 ขั้นตอน

เชื่อมต่อ BigQuery ด้วย Python ใน 3 ขั้นตอน

22 สิงหาคม 2565

ปัจจุบันโลกของเราหมุนไปอย่างรวดเร็วทำให้เกิดเทคโนโลยีต่าง ๆ ขึ้นมามากมาย ไม่ว่าจะเป็นเทคโนโลยีทางด้านการแพทย์ การขนส่ง การเกษตร การศึกษา หรือแม้กระทั่งนวัตกรรมต่าง ๆ ล้วนหลีกเลี่ยงไม่ได้ที่จะต้องเผชิญกับข้อมูลที่มีขนาดใหญ่มหาศาล โดยเมื่อก่อนนั้นเราอาจจะเคยเก็บข้อมูลขนาดเล็ก หรือขนาดกลางลงในฐานข้อมูลเชิงสัมพันธ์ (Relational Database) เช่น PostgreSQL, MySQL เป็นต้น ซึ่งฐานข้อมูลเหล่านี้สามารถรองรับปริมาณข้อมูล และการประมวลผลได้โดยไม่มีปัญหา

อย่างไรก็ตาม ข้อมูลที่ถูกเก็บสะสมมาเป็นระยะเวลานาน ปริมาณข้อมูลจึงมีขนาดใหญ่โตขึ้นมาก เทคโนโลยีทางด้านข้อมูลจึงจำเป็นต้องถูกพัฒนาควบคู่กันไป เพื่อให้สามารถรองรับข้อมูลจำนวนมหาศาลได้ด้วยเช่นกัน

ด้วยความต้องการนี้เอง บริษัท Google จึงได้พัฒนาเทคโนโลยีที่ชื่อว่า BigQuery ขึ้นมา เพื่อให้บริการทางด้านฐานข้อมูลขนาดใหญ่ โดยเทคโนโลยี BigQuery นี้เป็นบริการตัวหนึ่งของ Google Cloud platform ซึ่งทำหน้าที่เป็นคลังข้อมูล (Data Warehouse) ที่สามารถจัดเก็บข้อมูลขนาดใหญ่ และมีความสามารถในการปรับขนาดได้ (Scalable) ที่สำคัญ คือคุณสมบัติในการประมวลผล และวิเคราะห์ข้อมูลที่มีขนาดใหญ่ โดยผู้ใช้งานสามารถใช้ความรู้พื้นฐาน SQL ในการเรียกข้อมูลได้ นอกจากนี้ยังสามารถเขียน Python Script เชื่อมต่อไปยังฐานข้อมูล BigQuery เพื่อจัดการประมวลผลและวิเคราะห์ข้อมูล โดยอาศัย Python Library อย่างเช่น Pandas ที่เป็นเครื่องมือในการจัดการ, วิเคราะห์ข้อมูลที่มีความยืดหยุ่น และใช้งานง่าย หากท่านทำงานสาย Data Science อยู่แล้ว ทางผู้เขียนขอแนะนำให้ท่านทำความรู้จักกับ Pandas ไว้ได้เลยนะคะ เชื่อว่าจะมีโอกาสได้ใช้ประโยชน์ในอนาคตอย่างแน่นอน โดยบทความนี้จะพาท่านมาทดลองเชื่อมต่อ BigQuery ด้วย Python ง่าย ๆ เพียง 3 ขั้นตอน ดังรูปที่ 1 ไปดูกันเลยดีกว่า ว่าแต่ละขั้นตอนมีรายละเอียดอย่างไรบ้าง

รูปที่ 1 แสดงขั้นตอนการทำงานสำหรับการเขียน Python Script เพื่อเชื่อมต่อไปยังฐานข้อมูล BigQuery

ขั้นตอนที่ 1 กำหนดโครงสร้างของตาราง

ในกรณีที่เราสร้างตารางขึ้นมาใหม่ หรือมีตารางอยู่แล้วในฐานข้อมูล หากเราต้องการเรียกใช้ข้อมูลที่อยู่ในตาราง เราจำเป็นจะต้องทราบว่าโครงสร้างของตารางประกอบไปด้วยคอลัมน์อะไรบ้าง และในแต่ละคอลัมน์นั้นมีความหมายว่าอย่างไร เพื่อให้สามารถเรียกใช้ข้อมูลได้อย่างถูกต้องตรงกับความต้องการ

ขั้นตอนที่ 2 การสร้าง BigQuery Keyfile

คือ ไฟล์กุญแจที่ถูกสร้างขึ้นเพื่อกำหนดสิทธิ์ในการเข้าถึงฐานข้อมูล BigQuery เราจะใช้ Keyfile นี้ ในขั้นตอนที่ 3 ที่เป็นการเขียน Python Script เพื่อเชื่อมต่อไปยังฐานข้อมูลนั่นเอง หากเราไม่มี Keyfile จะไม่สามารถเชื่อมต่อไปยังฐานข้อมูลได้

ขั้นตอนที่ 3 การเขียน Python Script

ในขั้นตอนนี้ เราจำเป็นจะต้องใช้ BigQuery Keyfile ในการเชื่อมต่อฐานข้อมูล ตัวอย่าง Python Script ที่นำเสนอเป็นการเชื่อมต่อไปยังฐานข้อมูลเพื่อดึงข้อมูลที่อยู่ในตารางทดสอบ และมีการแปลงผลลัพธ์ที่ได้จากการดึงข้อมูลให้อยู่ในรูปแบบของ DataFrame โดยใช้ Pandas เพื่อเตรียมพร้อมสำหรับการจัดการและการวิเคราะห์ข้อมูลต่อไป

หลังจากทราบขั้นตอนการทำงานคร่าว ๆ แล้ว เรามาเริ่มทดลองทำจริงพร้อมกันเลยดีกว่า

ขั้นตอนที่ 1 การกำหนดโครงสร้างตารางใน BigQuery

สามารถเข้าถึง BigQuery โดยไปที่ https://console.cloud.google.com และเลือก BigQuery ดังรูปที่ 2

รูปที่ 2 แสดงการเข้าถึงฐานข้อมูล BigQuery

โดยในขั้นตอนนี้ เราจะสร้างตารางที่ชื่อว่า movies เพื่อใช้ทดสอบ ซึ่งตารางนี้จะประกอบไปด้วย 4 คอลัมน์ ดังนี้

1.movie_id คือ รหัสภาพยนตร์ ชนิดข้อมูลเป็นจำนวนเต็ม
2.movie_title คือ ชื่อภาพยนตร์ ชนิดข้อมูลเป็นสตริง
3.production_year คือ ปีที่สร้าง ชนิดข้อมูลเป็นจำนวนเต็ม
4.rating คือ คะแนน ชนิดข้อมูลเป็นทศนิยม

สามารถสร้างตารางโดยใช้คำสั่ง

CREATE TABLE `project-name.dataset_name.movies`  (
    movie_id INT64,
    movie_title STRING,
    production_year INT64,
    rating FLOAT64
);

โครงสร้างข้อมูลของตาราง movies แสดงดังรูปที่ 3

รูปที่ 3 แสดงโครงสร้างข้อมูลตาราง movies

ต่อมาเป็นการเพิ่มข้อมูลรหัสภาพยนตร์ (movie_id) ชื่อภาพยนตร์ (movie_title) ปีที่สร้าง (production_year) และคะแนน (rating) โดยใช้คำสั่ง

INSERT INTO ` project-name.dataset_name.movies `
(movie_id, movie_title, production_year, rating) 
VALUES
(1, 'Star Wars', 1977, 8.6),
(2, 'The Lion King', 1994, 8.5),
(3, 'Gladiator', 2000, 8.5),
(4, 'Alien', 1979, 8.4),
(5, 'WALL E', 2008, 8.4);

ผลลัพธ์ข้อมูลในตาราง movies ดังรูปที่ 4

รูปที่ 4 แสดงรายการข้อมูลในตาราง movies

ขั้นตอนที่ 2 การสร้าง BigQuery Keyfile สำหรับใช้ในการเชื่อมต่อฐานข้อมูล

โดยสามารถสร้าง Keyfile ได้เพียงทำตามขั้นตอน ดังนี้

2.1 ล็อกอินไปยัง https://console.cloud.google.com และเลือกแถบ IAM & Admin จากนั้น เลือก Service Accounts ดังรูปที่ 5

รูปที่ 5 แสดงการเข้าถึงหน้า Service Accounts

2.2 ในหน้า Service Accounts คลิกปุ่ม Create Service Account และกรอกรายละเอียด Service Account Name, Service Account ID, Service Account Description ตามรูปที่ 6 จากนั้นคลิกปุ่ม CREATE AND CONTINUE

รูปที่ 6 แสดงรายละเอียดสำหรับการสร้าง Service Account

2.3 กำหนด Service Account Access โดยเลือก BigQuery และ BigQuery Admin ตามลำดับ จากนั้นคลิกปุ่ม DONE ดังรูปที่ 7

รูปที่ 7 แสดงการกำหนดสิทธิ์สำหรับการเข้าถึง BigQuery

2.4 คลิกเข้าไปในรายการ Service Account ที่เพิ่งสร้างเมื่อสักครู่ โดยเลือกเข้าไปที่แถบเมนู KEYS ที่อยู่ด้านบน จากนั้นกดปุ่ม ADD KEY และเลือก Create new key ดังรูปที่ 8

รูปที่ 8 แสดงการสร้าง BigQuery Keyfile

2.5 เลือกประเภท Key เป็น JSON และกดปุ่ม CREATE จะเริ่มดำเนินการดาวน์โหลด Key file ดังรูปที่ 9 เป็นอันเสร็จสิ้น

รูปที่ 9 แสดงการดาวน์โหลด Keyfile

ขั้นตอนที่ 3 การสร้าง Python Script สำหรับเชื่อมต่อไปยังฐานข้อมูล

เริ่มต้นจากการติดตั้ง Python Library สำหรับเชื่อมต่อไปยัง BigQuery ตามคำสั่งด้านล่าง

pip install --upgrade google-cloud-bigquery

สำหรับตัวอย่าง Script นี้มีการแปลงข้อมูลให้อยู่ในรูปแบบ DataFrame จึงมีการติดตั้ง Pandas DataFrame โดยใช้คำสั่ง

pip install pandas

ตัวอย่าง Script ในการเชื่อมต่อกับฐานข้อมูล BigQuery

from google.oauth2 import service_account
from google.cloud import bigquery
import pandas as pd


# BigQuery config
SCOPES = ['https://www.googleapis.com/auth/bigquery']
SERVICE_ACCOUNT_FILE = 'cred/gbdi-covid-7a8171131681.json'
BQ_PROJECT = 'gbdi-covid'
BQ_DATASET = 'dataset_test'
BQ_TABLE_NAME = 'movies'

credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# Construct a BigQuery client object.
client = bigquery.Client(credentials=credentials)

query = """
    SELECT movie_id, movie_title, production_year, rating
    FROM `%s.%s.%s` order by movie_id
""" %(BQ_PROJECT,BQ_DATASET,BQ_TABLE_NAME)
query_job = client.query(query)  # Make an API request.

result = []
for row in query_job:
    result.append({
        'movie_id': format(row[0]),
        'movie_title': format(row[1]),
        'production_year': format(row[2]),
        'rating': format(row[3])
    })

df = pd.DataFrame(result)
print ('dataframe: ',df)

สำหรับการทำงานของ Script ส่วนที่ 1 เป็นการ Import Python Library ที่ใช้ใน Script

from google.oauth2 import service_account
from google.cloud import bigquery
import pandas as pd

ส่วนที่ 2 เป็นการกำหนดการตั้งค่าสำหรับเชื่อมต่อกับ BigQuery โดยตัวแปร SERVICE_ACCOUNT_FILE คือ BigQuery Keyfile ที่ได้ทำการสร้างไว้แล้วในขั้นตอนก่อนหน้า ส่วนตัวแปร BQ_PROJECT, BQ_DATASET, BQ_TABLE_NAME คือ ชื่อโปรเจกต์, ชื่อชุดข้อมูล และชื่อตารางใน BigQuery ตามลำดับ

# BigQuery config
SCOPES = ['https://www.googleapis.com/auth/bigquery']
SERVICE_ACCOUNT_FILE = 'cred/gbdi-covid-7a8171131681.json'
BQ_PROJECT = 'gbdi-covid'
BQ_DATASET = 'dataset_test'
BQ_TABLE_NAME = 'movies'

ส่วนที่ 3 เป็นการสร้างการเชื่อมต่อไปยังฐานข้อมูล

credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# Construct a BigQuery client object.
client = bigquery.Client(credentials=credentials)

ส่วนที่ 4 เป็นการส่งคำขอเพื่อดึงข้อมูลในตาราง movies จากฐานข้อมูล และจัดเก็บผลลัพธ์ลงตัวแปร result เพื่อนำไปสร้าง DataFrame ต่อไป

query = """
    SELECT movie_id, movie_title, production_year, rating
    FROM `%s.%s.%s` order by movie_id
""" %(BQ_PROJECT,BQ_DATASET,BQ_TABLE_NAME)
query_job = client.query(query)  # Make an API request.

result = []
for row in query_job:
    result.append({
        'movie_id': format(row[0]),
        'movie_title': format(row[1]),
        'production_year': format(row[2]),
        'rating': format(row[3])
    })

และส่วนที่ 5 ซึ่งเป็นส่วนสุดท้าย เป็นการแปลงผลลัพธ์ที่ได้จากฐานข้อมูล ให้อยู่ในรูปแบบ DataFrame เพื่อให้พร้อมสำหรับการจัดการและวิเคราะห์ข้อมูลต่อไป

df = pd.DataFrame(result)
print ('dataframe: ',df)

ตัวอย่าง ผลลัพธ์ข้อมูลในรูปแบบ DataFrame ที่ได้จากการ Run Script ดังรูปที่ 10

รูปที่ 10 แสดงผลลัพธ์ข้อมูลในรูปแบบ DataFrame

จบไปแล้วนะคะ สำหรับการเชื่อมต่อ BigQuery ด้วย Python ง่าย ๆ เพียงแค่ 3 ขั้นตอน ทำตามได้ไม่ยากเลยใช่ไหมล่ะ ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่เริ่มต้นทำงานทางด้านการประมวลผล และวิเคราะห์ข้อมูลผ่าน BigQuery ไม่มากก็น้อย อีกนิดก่อนจากกันผู้เขียนขอแนะนำบทความที่เกี่ยวข้องกับฐานข้อมูลสำหรับผู้ที่สนใจ OLAP และ ฐานข้อมูลประเภทอื่น ๆ เผื่อจะเป็นประโยชน์กับเพื่อน ๆ ที่ทำงานสาย Data ค่ะ สำหรับ BigQuery นั้น ยังมีความสามารถที่ซ่อนอยู่อีกมากมายหลายอย่าง ไว้โอกาสหน้าจะมานำเสนอความสามารถต่าง ๆ เพิ่มเติมให้นะคะ ขอบคุณที่ติดตามอ่านกันมาจนจบค่ะ

เนื้อหาโดย ฐิติรัตน์ บุญช่วยชู
ตรวจทานและปรับปรุงโดย เมธิยาภาวิ์ ศรีมนตรินนท์

Data Engineer Manager/ Data Architecture Manager
Big Data Institute (Public Organization), BDI

แบ่งปันบทความ

กลุ่มเนื้อหา

แท็กยอดนิยม

แจ้งเรื่องที่อยากอ่าน

คุณสามารถแจ้งเรื่องที่อยากอ่านให้เราทราบได้ !
และเราจะนำไปพัฒนาบทความให้มีเนื้อหาที่น่าสนใจมากขึ้น

ไอคอน PDPA

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ “นโยบายคุ้กกี้” และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ “ตั้งค่า”

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่มีความจำเป็น (Strictly Necessary Cookies)
    เปิดใช้งานตลอด

    คุกกี้ประเภทนี้มีความจำเป็นต่อการให้บริการเว็บไซต์ของ สำนักงานคณะกรรมการคุ้มครองข้อมูลส่วนบุคคล เพื่อให้ท่านสามารถเข้าใช้งานในส่วนต่าง ๆ ของเว็บไซต์ได้ รวมถึงช่วยจดจำข้อมูลที่ท่านเคยให้ไว้ผ่านเว็บไซต์ การปิดการใช้งานคุกกี้ประเภทนี้จะส่งผลให้ท่านไม่สามารถใช้บริการในสาระสำคัญของ สำนักงานคณะกรรมการคุ้มครองข้อมูลส่วนบุคคล ซึ่งจำเป็นต้องเรียกใช้คุกกี้ได้
    รายละเอียดคุกกี้

  • คุกกี้เพื่อการวิเคราะห์และประเมินผลการใช้งาน (Performance Cookies)

    คุกกี้ประเภทนี้ช่วยให้ BDI ทราบถึงการปฏิสัมพันธ์ของผู้ใช้งานในการใช้บริการเว็บไซต์ของ BDI รวมถึงหน้าเพจหรือพื้นที่ใดของเว็บไซต์ที่ได้รับความนิยม ตลอดจนการวิเคราะห์ข้อมูลด้านอื่น ๆ BDI ยังใช้ข้อมูลนี้เพื่อการปรับปรุงการทำงานของเว็บไซต์ และเพื่อเข้าใจพฤติกรรมของผู้ใช้งานมากขึ้น ถึงแม้ว่า ข้อมูลที่คุกกี้นี้เก็บรวบรวมจะเป็นข้อมูลที่ไม่สามารถระบุตัวตนได้ และนำมาใช้วิเคราะห์ทางสถิติเท่านั้น การปิดการใช้งานคุกกี้ประเภทนี้จะส่งผลให้ BDI ไม่สามารถทราบปริมาณผู้เข้าเยี่ยมชมเว็บไซต์ และไม่สามารถประเมินคุณภาพการให้บริการได้

  • คุกกี้เพื่อการใช้งานเว็บไซต์ (Functional Cookies)

    คุกกี้ประเภทนี้จะช่วยให้เว็บไซต์ของ BDI จดจำตัวเลือกต่าง ๆ ที่ท่านได้ตั้งค่าไว้และช่วยให้เว็บไซต์ส่งมอบคุณสมบัติและเนื้อหาเพิ่มเติมให้ตรงกับการใช้งานของท่านได้ เช่น ช่วยจดจำชื่อบัญชีผู้ใช้งานของท่าน หรือจดจำการเปลี่ยนแปลงการตั้งค่าขนาดฟอนต์หรือการตั้งค่าต่าง ๆ ของหน้าเพจซึ่งท่านสามารถปรับแต่งได้ การปิดการใช้งานคุกกี้ประเภทนี้อาจส่งผลให้เว็บไซต์ไม่สามารถทำงานได้อย่างสมบูรณ์

  • คุกกี้เพื่อการโฆษณาไปยังกลุ่มเป้าหมาย (Targeting Cookies)

    คุกกี้ประเภทนี้เป็นคุกกี้ที่เกิดจากการเชื่อมโยงเว็บไซต์ของบุคคลที่สาม ซึ่งเก็บข้อมูลการเข้าใช้งานและเว็บไซต์ที่ท่านได้เข้าเยี่ยมชม เพื่อนำเสนอสินค้าหรือบริการบนเว็บไซต์อื่นที่ไม่ใช่เว็บไซต์ของ BDI ทั้งนี้ หากท่านปิดการใช้งานคุกกี้ประเภทนี้จะไม่ส่งผลต่อการใช้งานเว็บไซต์ของ BDI แต่จะส่งผลให้การนำเสนอสินค้าหรือบริการบนเว็บไซต์อื่น ๆ ไม่สอดคล้องกับความสนใจของท่าน

บันทึกการตั้งค่า
ไซต์นี้ลงทะเบียนกับ wpml.org ในฐานะไซต์พัฒนา สลับไปยังไซต์การผลิตโดยใช้รหัส remove this banner.