การใช้ BigQuery กับ Node.js

1. ภาพรวม

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

ในโค้ดแล็บนี้ คุณจะได้ใช้คลังไคลเอ็นต์ Google Cloud BigQuery เพื่อค้นหาชุดข้อมูลสาธารณะของ BigQuery ด้วย Node.js

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Cloud Shell
  • วิธีเปิดใช้ BigQuery API
  • วิธีตรวจสอบสิทธิ์คำขอ API
  • วิธีติดตั้งไลบรารีของไคลเอ็นต์ BigQuery สำหรับ Node.js
  • วิธีค้นหาผลงานของเชกสเปียร์
  • วิธีค้นหาชุดข้อมูล GitHub
  • วิธีปรับสถิติการแคชและการแสดงผล

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud Platform
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • คุ้นเคยกับการใช้ Node.js

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Node.js เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud Platform เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

H_hgylo4zxOllHaAbPKJ7VyqCKPDUnDhkr-BsBIFBsrB6TYSisg6LX-uqmMhh4sXUy_hoa2Qv87C2nFmkg-QAcCiZZp0qtpf6VPaNEEfP_iqt29KVLD-gklBWugQVeOWsFnJmNjHDw

dcCPqfBIwNO4R-0fNQLUC4aYXOOZhKhjUnakFLZJGeziw2ikOxGjGkCHDwN5x5kCbPFB8fiOzZnX-GfuzQ8Ox-UU15BwHirkVPR_0RJwl0oXrhqZmMIvZMa_uwHugBJIdx5-bZ6Z8Q

jgLzVCxk93d6E2bbonzATKA4jFZReoQ-fORxZZLEi5C3D-ubnv6nL-eP-iyh7qAsWyq_nyzzuEoPFD1wFOFZOe4FWhPBJjUDncnTxTImT3Ts9TM54f4nPpsAp52O0y3Cb19IceAEgQ

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าเครื่องมือบรรทัดคำสั่ง Cloud SDK จะใช้งานจากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell dnDTxS9j60RcXdTjea12HLB9paS9Gzf7PfFLE9RW8g0Qx1bz7nmCzyCu4rjluX3bOEwavOpDwioXEkzOf6xtZp6-ZbJa08jwJqtmeeW8jZ1tYfi2lyXqvW3WFHP0eAxDkQDfpO9Ljw

yzBQBp2RC1EFvSSLYVkMA2m6LHqGsp22O81rUS5tGb9Y1FqlVhoRj_ka8V_uEjtpcirZRULMy1IjNr848uYvb9mC9RcGGqeayaLcXFfRwUGeXWChZPtWkHzUshTcqx_wJHis0X8viA

หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้

VgsaqGbKPRiqK24CqAKjSXjepuJT96PmiDqQMcySmWKx8QyW5F3G2D8JH2d08ek-YM77wWKxPvggpOFER8Hbq3aaZipTDU2o0il7A0kS3FXY_NzuujjEqDF1nsbDKkNMThrqcdMGtQ

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

7RuYr-LCKzdiE1veTFmL_lYrVxsMZ6-xDoxAnfwPPc5uFA0utmFGejvu81jGmTdbqnqxrytW3KcHT6xrMIRc3bskctnDZC5nJdpqw-LRxu3r35hL4A0BSBTtbtirfh3PKv-eOKt8Rg

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

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว

  1. เรียกใช้คำสั่งต่อไปนี้ใน 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`
gcloud config list project

เอาต์พุตของคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตของคำสั่ง

Updated property [core/project].

3. เปิดใช้ BigQuery API

ควรเปิดใช้ BigQuery API โดยค่าเริ่มต้นในโปรเจ็กต์ Google Cloud ทั้งหมด คุณตรวจสอบได้ว่าข้อความนี้เป็นจริงหรือไม่ด้วยคำสั่งต่อไปนี้ใน Cloud Shell

gcloud services list

คุณควรเห็น BigQuery แสดงอยู่

NAME                              TITLE
bigquery-json.googleapis.com      BigQuery API
...

หากไม่ได้เปิดใช้ BigQuery API คุณสามารถใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ได้

gcloud services enable bigquery-json.googleapis.com

4. ตรวจสอบสิทธิ์คำขอ API

หากต้องการส่งคำขอไปยัง BigQuery API คุณต้องใช้บัญชีบริการ บัญชีบริการเป็นของโปรเจ็กต์ของคุณ และใช้โดยไลบรารีไคลเอ็นต์ Node.js ของ Google BigQuery เพื่อส่งคำขอ BigQuery API บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นสร้างข้อมูลเข้าสู่ระบบที่คุณจะต้องใช้เพื่อตรวจสอบสิทธิ์ในฐานะบัญชีบริการ

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

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

จากนั้นสร้างบัญชีบริการใหม่เพื่อเข้าถึง BigQuery API โดยใช้ข้อมูลต่อไปนี้

gcloud iam service-accounts create my-bigquery-sa --display-name "my bigquery codelab service account"

จากนั้นสร้างข้อมูลเข้าสู่ระบบที่โค้ด Node.js จะใช้เพื่อเข้าสู่ระบบในฐานะบัญชีบริการใหม่ สร้างข้อมูลเข้าสู่ระบบเหล่านี้และบันทึกเป็นไฟล์ JSON "~/key.json" โดยใช้คำสั่งต่อไปนี้

gcloud iam service-accounts keys create ~/key.json --iam-account  my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

สุดท้าย ให้ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ซึ่งไลบรารี C# ของ BigQuery API ใช้ (จะกล่าวถึงในขั้นตอนถัดไป) เพื่อค้นหาข้อมูลเข้าสู่ระบบ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้น ตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้คำสั่งต่อไปนี้

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

คุณอ่านข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ BigQuery API ได้

5. ตั้งค่าการควบคุมการเข้าถึง

BigQuery ใช้ Identity and Access Management (IAM) เพื่อจัดการการเข้าถึงทรัพยากร BigQuery มีบทบาทที่กำหนดไว้ล่วงหน้าหลายบทบาท (ผู้ใช้, dataOwner, dataViewer ฯลฯ) ที่คุณสามารถกำหนดให้กับบัญชีบริการที่สร้างในขั้นตอนก่อนหน้า ดูข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึงได้ในเอกสารประกอบของ BigQuery

ก่อนที่จะค้นหาชุดข้อมูลสาธารณะได้ คุณต้องตรวจสอบว่าบัญชีบริการมีบทบาท bigquery.user อย่างน้อย ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อมอบหมายบทบาท bigquery.user ให้กับบัญชีบริการ

gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member "serviceAccount:my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" --role "roles/bigquery.user"

คุณเรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันว่าบัญชีบริการได้รับมอบหมายบทบาทผู้ใช้แล้ว

gcloud projects get-iam-policy $GOOGLE_CLOUD_PROJECT

6. ติดตั้งไลบรารีของไคลเอ็นต์ BigQuery สำหรับ Node.js

ก่อนอื่น ให้สร้างBigQueryDemoโฟลเดอร์และไปที่โฟลเดอร์นั้นโดยทำดังนี้

mkdir BigQueryDemo
cd BigQueryDemo

จากนั้นสร้างโปรเจ็กต์ Node.js ที่จะใช้เรียกใช้ตัวอย่างไลบรารีของไคลเอ็นต์ BigQuery โดยทำดังนี้

npm init -y

คุณควรเห็นโปรเจ็กต์ Node.js ที่สร้างขึ้น

{
  "name": "BigQueryDemo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

ติดตั้งไลบรารีของไคลเอ็นต์ BigQuery

 npm install --save @google-cloud/bigquery
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN BigQueryDemo@1.0.0 No description
npm WARN BigQueryDemo@1.0.0 No repository field.
+ @google-cloud/bigquery@2.1.0
added 69 packages from 105 contributors and audited 147 packages in 4.679s
found 0 vulnerabilities

ตอนนี้คุณก็พร้อมใช้ไลบรารีของไคลเอ็นต์ BigQuery Node.js แล้ว

7. ค้นหางานของเชกสเปียร์

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

นอกจากชุดข้อมูลสาธารณะแล้ว BigQuery ยังมีตารางตัวอย่างจำนวนจำกัดที่คุณค้นหาได้ ตารางเหล่านี้อยู่ใน bigquery-public-data:samples dataset ตารางหนึ่งในนั้นเรียกว่า shakespeare. ซึ่งมีดัชนีคำของผลงานของเชกสเปียร์ โดยระบุจำนวนครั้งที่แต่ละคำปรากฏในแต่ละคลัง

ในขั้นตอนนี้ คุณจะค้นหาตาราง shakespeare

ก่อนอื่น ให้เปิดเครื่องมือแก้ไขโค้ดจากด้านขวาบนของ Cloud Shell โดยทำดังนี้

9b8f365ab5ec7f71.png

สร้างไฟล์ queryShakespeare.js ในโฟลเดอร์ BigQueryDemo โดยทำดังนี้

 touch queryShakespeare.js

ไปที่ไฟล์ queryShakespeare.js แล้วแทรกโค้ดต่อไปนี้

'use strict';

function main() {

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');

    async function queryShakespeare() {
    // Queries a public Shakespeare dataset.

        // Create a client
        const bigqueryClient = new BigQuery();

        // The SQL query to run
        const sqlQuery = `SELECT word, word_count
            FROM \`bigquery-public-data.samples.shakespeare\`
            WHERE corpus = @corpus
            AND word_count >= @min_word_count
            ORDER BY word_count DESC`;

        const options = {
        query: sqlQuery,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        params: {corpus: 'romeoandjuliet', min_word_count: 250},
        };

        // Run the query
        const [rows] = await bigqueryClient.query(options);

        console.log('Rows:');
        rows.forEach(row => console.log(row));
    }

    queryShakespeare();
  }

main();

ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูวิธีค้นหาตาราง

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

node queryShakespeare.js

คุณจะเห็นรายการคำและจำนวนครั้งที่คำนั้นๆ ปรากฏ ดังนี้

Rows:
{ word: 'the', word_count: 614 }
{ word: 'I', word_count: 577 }
{ word: 'and', word_count: 490 }
{ word: 'to', word_count: 486 }
{ word: 'a', word_count: 407 }
{ word: 'of', word_count: 367 }
{ word: 'my', word_count: 314 }
{ word: 'is', word_count: 307 }
...

8. ค้นหาชุดข้อมูล GitHub

ตอนนี้คุณจะออกการค้นหากับชุดข้อมูลสาธารณะของ GitHub เพื่อทำความคุ้นเคยกับ BigQuery มากขึ้น คุณจะเห็นข้อความคอมมิตที่พบบ่อยที่สุดใน GitHub นอกจากนี้ คุณยังใช้เว็บ UI ของ BigQuery เพื่อแสดงตัวอย่างและเรียกใช้การค้นหาเฉพาะกิจได้ด้วย

หากต้องการดูข้อมูล ให้เปิดชุดข้อมูล GitHub ในเว็บ UI ของ BigQuery โดยทำดังนี้

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table

หากต้องการดูตัวอย่างลักษณะของข้อมูลอย่างรวดเร็ว ให้คลิกแท็บแสดงตัวอย่าง

d3f0dc7400fbe678.png

สร้างไฟล์ queryGitHub.js ในโฟลเดอร์ BigQueryDemo โดยทำดังนี้

 touch queryGitHub.js

ไปที่ไฟล์ queryGitHub.js แล้วแทรกโค้ดต่อไปนี้

'use strict';

function main() {

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');


    async function queryGitHub() {
        // Queries a public GitHub dataset.

        // Create a client
        const bigqueryClient = new BigQuery();

        // The SQL query to run
        const sqlQuery = `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`;

        const options = {
        query: sqlQuery,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        };

        // Run the query
        const [rows] = await bigqueryClient.query(options);

        console.log('Rows:');
        rows.forEach(row => console.log(`${row.subject}: ${row.num_duplicates}`));
    }
    
    queryGitHub();
}

main();

โปรดใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูวิธีค้นหาข้อความคอมมิตที่พบบ่อยที่สุดในตาราง

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

node queryGitHub.js

คุณควรเห็นรายการข้อความคอมมิตและเหตุการณ์ที่เกิดขึ้นดังนี้

Rows:
Update README.md: 2572220
: 1985733
Initial commit: 1940228
Mirroring from Micro.blog.: 646772
update: 592520
Update data.json: 548730
Update data.js: 548354
...

9. การแคชและสถิติ

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

ในขั้นตอนนี้ คุณจะปิดใช้การแคชและแสดงสถิติบางอย่างเกี่ยวกับคำค้นหา

ไปที่ไฟล์ queryShakespeare.js ในโฟลเดอร์ BigQueryDemo แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้

'use strict';

function main() {

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');

    async function queryShakespeareDisableCache() {
        // Queries the Shakespeare dataset with the cache disabled.

        // Create a client
        const bigqueryClient = new BigQuery();

        const sqlQuery = `SELECT word, word_count
            FROM \`bigquery-public-data.samples.shakespeare\`
            WHERE corpus = @corpus
            AND word_count >= @min_word_count
            ORDER BY word_count DESC`;

        const options = {
            query: sqlQuery,
            // Location must match that of the dataset(s) referenced in the query.
            location: 'US',
            params: {corpus: 'romeoandjuliet', min_word_count: 250},
            useQueryCache: false,
        };

        // Run the query as a job
        const [job] = await bigqueryClient.createQueryJob(options);
        console.log(`Job ${job.id} started.`);

        // Wait for the query to finish
        const [rows] = await job.getQueryResults();

        // Print the results
        console.log('Rows:');
        rows.forEach(row => console.log(row));

        // Print job statistics
        console.log('JOB STATISTICS:')
        console.log(`Status: ${job.metadata.status.state}`);
        console.log(`Creation time: ${job.metadata.statistics.creationTime}`);
        console.log(`Start time: ${job.metadata.statistics.startTime}`);
        console.log(`Statement type: ${job.metadata.statistics.query.statementType}`);
    }
    queryShakespeareDisableCache();
}

main();

ข้อควรทราบเกี่ยวกับโค้ดมีดังนี้ ก่อนอื่น ให้ปิดใช้การแคชโดยตั้งค่า UseQueryCache เป็น false ภายในออบเจ็กต์ options ประการที่ 2 คุณเข้าถึงสถิติเกี่ยวกับคำค้นหาจากออบเจ็กต์งาน

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

node queryShakespeare.js

คุณควรเห็นรายการข้อความคอมมิตและเหตุการณ์ที่เกิดขึ้น นอกจากนี้ คุณควรเห็นสถิติบางอย่างเกี่ยวกับคำค้นหาด้วย

Rows:
{ word: 'the', word_count: 614 }
{ word: 'I', word_count: 577 }
{ word: 'and', word_count: 490 }
{ word: 'to', word_count: 486 }
{ word: 'a', word_count: 407 }
{ word: 'of', word_count: 367 }
{ word: 'my', word_count: 314 }
{ word: 'is', word_count: 307 }
{ word: 'in', word_count: 291 }
{ word: 'you', word_count: 271 }
{ word: 'that', word_count: 270 }
{ word: 'me', word_count: 263 }
JOB STATISTICS:
Status: RUNNING
Creation time: 1554309220660
Start time: 1554309220793
Statement type: SELECT

10. การโหลดข้อมูลลงใน BigQuery

หากต้องการค้นหาข้อมูลของคุณเอง คุณต้องโหลดข้อมูลลงใน BigQuery ก่อน BigQuery รองรับการโหลดข้อมูลจากแหล่งที่มาต่างๆ เช่น Google Cloud Storage, บริการอื่นๆ ของ Google หรือแหล่งที่มาในเครื่องที่อ่านได้ คุณยังสตรีมข้อมูลได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่หน้าการโหลดข้อมูลลงใน BigQuery

ในขั้นตอนนี้ คุณจะโหลดไฟล์ JSON ที่จัดเก็บไว้ใน Google 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 .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][  2.0 KiB/  2.0 KiB]                                                
Operation completed over 1 objects/2.0 KiB.

คุณจะเห็นว่ามีรายการรัฐในสหรัฐอเมริกา และแต่ละรัฐเป็นออบเจ็กต์ JSON ในบรรทัดแยกกัน

less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

หากต้องการโหลดไฟล์ JSON นี้ลงใน BigQuery ให้สร้างไฟล์ createDataset.js และไฟล์ loadBigQueryJSON.js ภายในโฟลเดอร์ BigQueryDemo

touch createDataset.js 
touch loadBigQueryJSON.js

ติดตั้งไลบรารีของไคลเอ็นต์ Node.js สำหรับ Google Cloud Storage โดยใช้คำสั่งต่อไปนี้

 npm install --save @google-cloud/storage

ไปที่ไฟล์ createDataset.js แล้วแทรกโค้ดต่อไปนี้

'use strict';

function main() {
    // Import the Google Cloud client libraries
    const {BigQuery} = require('@google-cloud/bigquery');

    async function createDataset() {
        const datasetId = "my_states_dataset3";

        const bigqueryClient = new BigQuery();

        // Specify the geographic location where the dataset should reside
        const options = {
        location: 'US',
        };

        // Create a new dataset
        const [dataset] = await bigqueryClient.createDataset(datasetId, options);
        console.log(`Dataset ${dataset.id} created.`);
    }

    createDataset();
}

main();

จากนั้นไปที่ไฟล์ loadBigQueryJSON.js แล้วแทรกโค้ดต่อไปนี้

'use strict';

function main() {
    // Import the Google Cloud client libraries
    const {BigQuery} = require('@google-cloud/bigquery');
    const {Storage} = require('@google-cloud/storage');

    const datasetId = "my_states_dataset3";
    const tableId = "my_states_table";


    async function createTable(datasetId, tableId) {
        // Creates a new table

        // Create a client
        const bigqueryClient = new BigQuery();

        const options = {
            location: 'US',
            };

        // Create a new table in the dataset
        const [table] = await bigqueryClient
        .dataset(datasetId)
        .createTable(tableId, options);

        console.log(`Table ${table.id} created.`);
    }

    async function loadJSONFromGCS(datasetId, tableId) {
        // Import a GCS file into a table with manually defined schema.

        // Instantiate clients
        const bigqueryClient = new BigQuery();
        const storageClient = new Storage();

        const bucketName = 'cloud-samples-data';
        const filename = 'bigquery/us-states/us-states.json';

        // Configure the load job.
        const metadata = {
        sourceFormat: 'NEWLINE_DELIMITED_JSON',
        schema: {
            fields: [
            {name: 'name', type: 'STRING'},
            {name: 'post_abbr', type: 'STRING'},
            ],
        },
        location: 'US',
        };

        // Load data from a Google Cloud Storage file into the table
        const [job] = await bigqueryClient
        .dataset(datasetId)
        .table(tableId)
        .load(storageClient.bucket(bucketName).file(filename), metadata);

        // load() waits for the job to finish
        console.log(`Job ${job.id} completed.`);

        // Check the job's status for errors
        const errors = job.status.errors;
        if (errors && errors.length > 0) {
        throw errors;
        }
    }

    // createDataset(datasetId);
    createTable(datasetId, tableId);
    loadJSONFromGCS(datasetId, tableId);
}

main();

ใช้เวลาสักครู่เพื่อศึกษาว่าโค้ดโหลดไฟล์ JSON และสร้างตาราง (ที่มีสคีมา) ในชุดข้อมูลอย่างไร

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

node createDataset.js
node loadBigQueryJSON.js

ระบบจะสร้างชุดข้อมูลและตารางใน BigQuery ดังนี้

Table my_states_table created.
Job [JOB ID] completed.

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

4fb7296ae901e8fd.png

11. ยินดีด้วย

คุณได้เรียนรู้วิธีใช้ BigQuery โดยใช้ Node.js แล้ว

ล้างข้อมูล

เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้

  • ไปที่คอนโซล Cloud Platform
  • เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป