1. بررسی اجمالی
BigQuery انبار داده های تجزیه و تحلیلی کم هزینه و کاملاً مدیریت شده گوگل است. BigQuery NoOps است—هیچ زیرساختی برای مدیریت وجود ندارد و شما نیازی به مدیر پایگاه داده ندارید—بنابراین می توانید برای یافتن بینش های معنادار، بر تجزیه و تحلیل داده ها تمرکز کنید، از SQL آشنا استفاده کنید و از مدل پرداخت به موقع ما استفاده کنید.
در این لبه کد، از Google Cloud BigQuery Client Library برای پرس و جو از مجموعه داده های عمومی BigQuery با Node.js استفاده خواهید کرد.
چیزی که یاد خواهید گرفت
- نحوه استفاده از پوسته ابری
- نحوه فعال کردن BigQuery API
- نحوه احراز هویت درخواست های API
- نحوه نصب کتابخانه مشتری BigQuery برای Node.js
- چگونه آثار شکسپیر را جویا شویم
- چگونه مجموعه داده GitHub را پرس و جو کنیم
- نحوه تنظیم کش و نمایش آمار
آنچه شما نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با Node.js چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از سرویسهای پلتفرم ابری Google چگونه ارزیابی میکنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که ابزار خط فرمان Cloud SDK می تواند از راه دور از لپ تاپ شما کار کند، در این کد لبه از Google Cloud Shell استفاده می کنید، یک محیط خط فرمان که در فضای ابری اجرا می شود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده میشود که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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 برای درخواست های 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"
میتوانید درباره احراز هویت BigQuery API بیشتر بخوانید.
5. راه اندازی کنترل دسترسی
BigQuery از مدیریت هویت و دسترسی (IAM) برای مدیریت دسترسی به منابع استفاده می کند. BigQuery دارای تعدادی نقش از پیش تعریف شده (user، 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 باز کنید:
یک فایل 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 را پرس و جو کنید
برای آشنایی بیشتر با BigQuery، اکنون یک پرس و جو علیه مجموعه داده عمومی GitHub صادر خواهید کرد. متداول ترین پیام های commit را در GitHub پیدا خواهید کرد. همچنین از رابط کاربری وب BigQuery برای پیش نمایش و اجرای پرس و جوهای موقت استفاده خواهید کرد.
برای مشاهده داده ها، مجموعه داده GitHub را در رابط کاربری وب BigQuery باز کنید:
https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table
برای دریافت پیشنمایش سریع از نحوه ظاهر دادهها، روی تب Preview کلیک کنید:
فایل 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();
یک یا دو دقیقه وقت بگذارید و کد را مطالعه کنید و ببینید که چگونه جدول برای رایج ترین پیام های commit پرس و جو می شود.
به Cloud Shell برگردید، برنامه را اجرا کنید:
node queryGitHub.js
شما باید لیستی از پیام های commit و وقوع آنها را ببینید:
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
غیرفعال می شود. دوم، شما به آمار مربوط به پرس و جو از شی job دسترسی پیدا کردید.
به Cloud Shell برگردید، برنامه را اجرا کنید:
node queryShakespeare.js
شما باید لیستی از پیام های commit و وقوع آنها را ببینید. علاوه بر این، باید برخی از آمارهای مربوط به پرس و جو را نیز مشاهده کنید:
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.
برای تأیید اینکه مجموعه داده ایجاد شده است، می توانید به رابط کاربری وب BigQuery بروید. باید یک مجموعه داده جدید و یک جدول ببینید. اگر به برگه پیشنمایش جدول بروید، میتوانید دادههای واقعی را ببینید:
11. تبریک!
شما یاد گرفتید که چگونه از BigQuery با استفاده از Node.js استفاده کنید!
پاک کن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud Platform برای منابع استفاده شده در این شروع سریع:
- به کنسول Cloud Platform بروید.
- پروژهای را که میخواهید تعطیل کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: با این کار، پروژه برای حذف برنامهریزی میشود.
بیشتر بدانید
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Node.js در Google Cloud Platform: https://cloud.google.com/nodejs/
- کتابخانه مشتری Google BigQuery Node.js: https://github.com/googleapis/nodejs-bigquery
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.