۱. مرور کلی
بیگکوئری، انبار داده تحلیلی کمهزینه، کاملاً مدیریتشده و در مقیاس پتابایتی گوگل است. بیگکوئری بدون نیاز به عملیات (NoOps) است - هیچ زیرساختی برای مدیریت وجود ندارد و به مدیر پایگاه داده نیاز ندارید - بنابراین میتوانید بر تجزیه و تحلیل دادهها برای یافتن بینشهای معنادار تمرکز کنید، از SQL آشنا استفاده کنید و از مدل پرداخت به ازای استفاده ما بهرهمند شوید.
در این آزمایشگاه کد، شما از کتابخانه کلاینت BigQuery گوگل کلود برای کوئری گرفتن از مجموعه دادههای عمومی BigQuery با Node.js استفاده خواهید کرد.
آنچه یاد خواهید گرفت
- نحوه استفاده از پوسته ابری
- نحوه فعال کردن API بیگکوئری
- نحوه احراز هویت درخواستهای API
- نحوه نصب کتابخانه کلاینت BigQuery برای Node.js
- چگونه آثار شکسپیر را جستجو کنیم
- نحوه پرس و جو از مجموعه داده GitHub
- نحوه تنظیم حافظه پنهان و نمایش آمار
آنچه نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با Node.js چگونه ارزیابی میکنید؟
تجربه خود را در استفاده از خدمات پلتفرم ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه ابزار خط فرمان Cloud SDK را میتوان از راه دور و از طریق لپتاپ خود اجرا کرد، در این آزمایشگاه کد از Google Cloud Shell ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.
اگر قبلاً Cloud Shell را شروع نکردهاید، یک صفحه میانی (در پایین صفحه) به شما نمایش داده میشود که توضیح میدهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:
آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما پر شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان به سادگی با یک مرورگر یا کرومبوک انجام داد.
پس از اتصال به 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`
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر اینطور نیست، میتوانید با این دستور آن را تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی دستور
Updated property [core/project].
۳. فعال کردن API بیگکوئری
رابط برنامهنویسی کاربردی BigQuery باید به طور پیشفرض در تمام پروژههای Google Cloud فعال باشد. میتوانید با دستور زیر در Cloud Shell بررسی کنید که آیا این موضوع صحت دارد یا خیر:
gcloud services list
شما باید BigQuery را در لیست ببینید:
NAME TITLE
bigquery-json.googleapis.com BigQuery API
...
اگر API مربوط به BigQuery فعال نیست، میتوانید از دستور زیر در Cloud Shell برای فعال کردن آن استفاده کنید:
gcloud services enable bigquery-json.googleapis.com
۴. درخواستهای API را تأیید اعتبار کنید
برای ارسال درخواست به BigQuery API، باید از یک حساب کاربری سرویس (Service Account ) استفاده کنید. یک حساب کاربری سرویس متعلق به پروژه شماست و توسط کتابخانه کلاینت Google BigQuery Node.js برای ارسال درخواستهای 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 را که توسط کتابخانه BigQuery API C# که در مرحله بعدی به آن پرداخته میشود، برای یافتن اعتبارنامههای شما استفاده میشود، تنظیم کنید. متغیر محیطی باید روی مسیر کامل فایل JSON اعتبارنامههایی که ایجاد کردهاید تنظیم شود. متغیر محیطی را با استفاده از دستور زیر تنظیم کنید:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
میتوانید درباره احراز هویت API بیگکوئری بیشتر بخوانید.
۵. تنظیم کنترل دسترسی
BigQuery از مدیریت هویت و دسترسی (IAM) برای مدیریت دسترسی به منابع استفاده میکند. BigQuery تعدادی نقش از پیش تعریف شده (کاربر، مالک داده، مشاهدهگر داده و غیره) دارد که میتوانید آنها را به حساب سرویس خود که در مرحله قبل ایجاد کردهاید، اختصاص دهید. میتوانید اطلاعات بیشتر در مورد کنترل دسترسی را در مستندات 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
۶. کتابخانه کلاینت 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 هستید!
۷. آثار شکسپیر را بررسی کنید
مجموعه داده عمومی، هر مجموعه دادهای است که در BigQuery ذخیره شده و در دسترس عموم قرار میگیرد. مجموعه دادههای عمومی دیگری نیز برای جستجو در دسترس شما هستند که برخی از آنها نیز توسط گوگل میزبانی میشوند، اما بسیاری دیگر توسط اشخاص ثالث میزبانی میشوند. میتوانید اطلاعات بیشتر را در صفحه مجموعه دادههای عمومی مطالعه کنید.
علاوه بر مجموعه دادههای عمومی، BigQuery تعداد محدودی جدول نمونه ارائه میدهد که میتوانید از آنها پرسوجو کنید. این جداول در bigquery-public-data:samples dataset قرار دارند. یکی از این جداول shakespeare. این جدول شامل فهرست کلمات آثار شکسپیر است که تعداد دفعاتی که هر کلمه در هر مجموعه ظاهر میشود را نشان میدهد.
در این مرحله، جدول شکسپیر را جستجو خواهید کرد.
ابتدا، ویرایشگر کد را از سمت راست بالای Cloud Shell باز کنید:

یک فایل 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 }
...
۸. کوئری گرفتن از مجموعه دادههای گیتهاب
برای آشنایی بیشتر با BigQuery، اکنون یک کوئری در مجموعه دادههای عمومی GitHub اجرا خواهید کرد. رایجترین پیامهای commit را در GitHub خواهید یافت. همچنین از رابط کاربری وب BigQuery برای پیشنمایش و اجرای کوئریهای ad-hoc استفاده خواهید کرد.
برای مشاهده دادهها، مجموعه داده GitHub را در رابط کاربری وب BigQuery باز کنید:
https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table
برای دریافت پیشنمایش سریع از نحوه نمایش دادهها، روی برگه پیشنمایش کلیک کنید:

فایل 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
...
۹. ذخیرهسازی و آمار
وقتی یک کوئری اجرا میکنید، 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 ، ذخیره سازی غیرفعال میشود. دوم اینکه، شما به آمار مربوط به پرس و جو از شیء job دسترسی پیدا کردهاید.
دوباره به 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
۱۰. بارگذاری دادهها در 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 مربوط به فضای ذخیرهسازی ابری گوگل را نصب کنید:
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.
برای تأیید ایجاد مجموعه داده، میتوانید به رابط کاربری وب BigQuery بروید. باید یک مجموعه داده جدید و یک جدول را ببینید. اگر به برگه پیشنمایش جدول بروید، میتوانید دادههای واقعی را مشاهده کنید:

۱۱. تبریک میگویم!
شما یاد گرفتید که چگونه از BigQuery با استفاده از Node.js استفاده کنید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این راهنمای سریع:
- به کنسول پلتفرم ابری بروید.
- پروژهای را که میخواهید خاموش کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: این کار پروژه را برای حذف زمانبندی میکند.
اطلاعات بیشتر
- گوگل بیگکوئری: https://cloud.google.com/bigquery/docs/
- Node.js روی پلتفرم ابری گوگل: https://cloud.google.com/nodejs/
- کتابخانه کلاینت Node.js گوگل بیگکوئری: https://github.com/googleapis/nodejs-bigquery
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.