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

1. ภาพรวม

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

ใน Codelab นี้ คุณจะใช้ไลบรารีของไคลเอ็นต์ 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 ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

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

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

เริ่มต้น Cloud Shell

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

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

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

yzBQBp2RC1EFvSSLYVkMA2m6LHqGsp22O81rUS5tGb9Y1FqlVhoRj_ka8V_uEjtpcirZRULMy1IjNr848uYvb9mC9RcGGqeayaLcXFfRwUGeXWChZPtWkHzUshTcqx_wJHis0X8viA

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

VgsaqGbKPRiqK24CqAKjSXjepuJT96PmiDqQMcySmWKx8QyW5F3G2D8JH2d08ek-YM77wWKxPvggpOFER8Hbq3aaZipTDU2o0il7A0kS3FXY_NzuujjEqDF1nsbDKkNMThrqcdMGtQ

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

7RuYr-LCKzdiE1veTFmL_lYrVxsMZ6-xDoxAnfwPPc5uFA0utmFGejvu81jGmTdbqnqxrytW3KcHT6xrMIRc3bskctnDZC5nJdpqw-LRxu3r35hL4A0BSBTtbtirfh3PKv-eOKt8Rg

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ 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 บัญชีบริการเป็นของโปรเจ็กต์และไลบรารีไคลเอ็นต์ Google BigQuery Node.js จะใช้บัญชีนี้เพื่อสร้างคำขอ API ของ BigQuery บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นจึงสร้างข้อมูลเข้าสู่ระบบที่จะใช้ตรวจสอบสิทธิ์ว่าเป็นบัญชีบริการ

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

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 ที่ไลบรารี BigQuery API C# จะใช้ ซึ่งจะกล่าวถึงในขั้นตอนถัดไปเพื่อค้นหาข้อมูลเข้าสู่ระบบของคุณ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ 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. โดยมีดัชนีคำจากผลงานต่างๆ ของเชกสเปียร์ ทำให้จำนวนครั้งที่แต่ละคำปรากฏในคอร์ปัส

ในขั้นตอนนี้ คุณจะค้นหาตารางเชคสเปียร์

ก่อนอื่น ให้เปิดตัวแก้ไขโค้ดจากมุมขวาบนของ 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&amp;d=github_repos&amp;t=commits&amp;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 ขั้นที่สอง คุณเข้าถึงสถิติเกี่ยวกับการค้นหาจากออบเจ็กต์งาน

กลับไปที่ 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

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

 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
  • เลือกโครงการที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน: การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0