1. Genel Bakış
BigQuery, Google'ın tümüyle yönetilen, petabayt ölçekli, düşük maliyetli analiz veri ambarıdır. BigQuery NoOps'tur; yönetilecek altyapı yoktur ve veritabanı yöneticisine ihtiyaç duyulmaz. Bu sayede anlamlı analizler bulmak için veri analizine odaklanabilir, bildiğiniz SQL'leri kullanabilir ve kullandıkça öde modelimizden yararlanabilirsiniz.
Bu codelab'de, Node.js ile BigQuery herkese açık veri kümelerini sorgulamak için Google Cloud BigQuery İstemci Kitaplığı'nı kullanacaksınız.
Neler öğreneceksiniz?
- Cloud Shell'i kullanma
- BigQuery API'yi etkinleştirme
- API isteklerinin kimliğini doğrulama
- Node.js için BigQuery istemci kitaplığını yükleme
- Shakespeare'in eserlerini sorgulama
- GitHub veri kümesini sorgulama
- Önbelleğe alma ve görüntüleme istatistiklerini ayarlama
Gerekenler
- Bir Google Cloud Platform Projesi
- Chrome veya Firefox gibi bir tarayıcı
- Node.js kullanımı hakkında bilgi
Anket
Bu eğiticiden nasıl yararlanacaksınız?
Node.js deneyiminizi nasıl değerlendirirsiniz?
Google Cloud Platform hizmetlerinin kullanımıyla ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID
olarak adlandırılacaktır.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud SDK komut satırı aracı, dizüstü bilgisayarınızdan uzaktan kullanılabilir. Ancak bu codelab'de, bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
İhtiyaç duyduğunuz tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. BigQuery API'yi etkinleştirme
BigQuery API, tüm Google Cloud projelerinde varsayılan olarak etkinleştirilmelidir. Bunun doğru olup olmadığını Cloud Shell'de aşağıdaki komutla kontrol edebilirsiniz:
gcloud services list
BigQuery aşağıdaki listede gösterilir:
NAME TITLE
bigquery-json.googleapis.com BigQuery API
...
BigQuery API etkinleştirilmemişse Cloud Shell'de aşağıdaki komutu kullanarak API'yi etkinleştirebilirsiniz:
gcloud services enable bigquery-json.googleapis.com
4. API isteklerinin kimliğini doğrulama
BigQuery API'ye istek göndermek için Hizmet Hesabı kullanmanız gerekir. Hizmet Hesabı projenize aittir ve Google BigQuery Node.js istemci kitaplığı tarafından BigQuery API istekleri yapmak için kullanılır. Diğer tüm kullanıcı hesapları gibi hizmet hesabı da e-posta adresiyle temsil edilir. Bu bölümde Google Cloud SDK'yı kullanarak bir hizmet hesabı oluşturacaksınız. Ardından, hizmet hesabı olarak kimliğinizi doğrulamak için gereken kimlik bilgilerini oluşturacaksınız.
Öncelikle, bu codelab boyunca kullanacağınız PROJECT_ID'nizle bir ortam değişkeni ayarlayın:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Ardından aşağıdakileri kullanarak BigQuery API'ye erişmek için yeni bir hizmet hesabı oluşturun:
gcloud iam service-accounts create my-bigquery-sa --display-name "my bigquery codelab service account"
Ardından, Node.js kodunuzun yeni hizmet hesabınız olarak giriş yapmak için kullanacağı kimlik bilgilerini oluşturun. Bu kimlik bilgilerini oluşturun ve "~/key.json" JSON dosyası olarak kaydedin kullanabilirsiniz:
gcloud iam service-accounts keys create ~/key.json --iam-account my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Son olarak, kimlik bilgilerinizi bulmak için bir sonraki adımda ele alınan, BigQuery API C# kitaplığı tarafından kullanılan GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın. Ortam değişkeni, oluşturduğunuz kimlik bilgileri JSON dosyasının tam yoluna ayarlanmalıdır. Aşağıdaki komutu kullanarak ortam değişkenini ayarlayın:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
BigQuery API'nin kimliğini doğrulama hakkında daha fazla bilgi edinebilirsiniz.
5. Erişim Denetimini Kur
BigQuery, kaynaklara erişimi yönetmek için Identity and Access Management (IAM) kullanır. BigQuery'de, önceki adımda oluşturduğunuz hizmet hesabınıza atayabileceğiniz önceden tanımlanmış çeşitli roller (user, dataOwner, dataViewer vb.) bulunur. Erişim Denetimi hakkında daha fazla bilgiyi BigQuery belgelerinde bulabilirsiniz.
Herkese açık veri kümelerini sorgulamadan önce, hizmet hesabının en azından bigquery.user rolüne sahip olduğundan emin olmanız gerekir. Cloud Shell'de bigquery.user rolünü hizmet hesabına atamak için aşağıdaki komutu çalıştırın:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member "serviceAccount:my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" --role "roles/bigquery.user"
Hizmet hesabına kullanıcı rolünün atandığını doğrulamak için aşağıdaki komutu çalıştırabilirsiniz:
gcloud projects get-iam-policy $GOOGLE_CLOUD_PROJECT
6. Node.js için BigQuery istemci kitaplığını yükleme
İlk olarak bir BigQueryDemo
klasörü oluşturun ve bu klasöre gidin:
mkdir BigQueryDemo
cd BigQueryDemo
Ardından, BigQuery istemci kitaplığı örneklerini çalıştırmak için kullanacağınız bir Node.js projesi oluşturun:
npm init -y
Node.js projesinin oluşturulduğunu görürsünüz:
{
"name": "BigQueryDemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
BigQuery istemci kitaplığını yükleyin:
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
Artık BigQuery Node.js istemci kitaplığını kullanmaya hazırsınız.
7. Shakespeare'in eserlerini sorgulayın
Herkese açık veri kümesi, BigQuery'de depolanan ve herkesin kullanımına sunulan herhangi bir veri kümesidir. Sorgulayabileceğiniz çok sayıda herkese açık veri kümesi vardır. Bunların bazıları da Google tarafından barındırılsa da birçoğu üçüncü taraflarca barındırılır. Herkese Açık Veri Kümeleri sayfasında daha fazla bilgi edinebilirsiniz.
BigQuery, herkese açık veri kümelerine ek olarak sorgulayabileceğiniz sınırlı sayıda örnek tablo sunar. Bu tablolar bigquery-public-data:samples dataset
altında yer alır. Bu tablolardan birinin adı shakespeare.
. Shakespeare'in eserlerine ait kelime dizinini içerir ve her kelimenin her toplulukta kaç kez geçtiğini gösterir.
Bu adımda shakespeare tablosunu sorgulayacaksınız.
İlk olarak Cloud Shell'in sağ üst tarafından kod düzenleyiciyi açın:
BigQueryDemo
klasörü içinde bir queryShakespeare.js
dosyası oluşturun :
touch queryShakespeare.js
queryShakespeare.js
dosyasına gidin ve aşağıdaki kodu ekleyin:
'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();
Kodu incelemek ve tablonun nasıl sorgulandığını görmek için bir iki dakikanızı ayırın.
Cloud Shell'e dönüp uygulamayı çalıştırın:
node queryShakespeare.js
Kelimelerin ve geçtiği yerlerin listesini göreceksiniz:
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 veri kümesini sorgulama
BigQuery hakkında daha fazla bilgi edinmek için şimdi GitHub herkese açık veri kümesi ile ilgili bir sorgu yayınlamanız gerekir. En yaygın kayıt mesajlarını GitHub'da bulabilirsiniz. Ayrıca BigQuery'nin web kullanıcı arayüzünü kullanarak anlık sorguları önizleyebilir ve çalıştırabilirsiniz.
Verileri görüntülemek için BigQuery web kullanıcı arayüzünde GitHub veri kümesini açın:
Verilerin nasıl göründüğünü hızlı bir şekilde önizlemek için Önizleme sekmesini tıklayın:
queryGitHub.js
dosyasını BigQueryDemo
klasöründe oluşturun:
touch queryGitHub.js
queryGitHub.js
dosyasına gidin ve aşağıdaki kodu ekleyin:
'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();
Kodu incelemek ve tablonun en yaygın kaydetme mesajları için nasıl sorgulandığını görmek için bir iki dakikanızı ayırın.
Cloud Shell'e dönüp uygulamayı çalıştırın:
node queryGitHub.js
Kaydetme mesajlarının ve geçtiği yerlerin listesini görürsünüz:
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. Önbelleğe alma ve istatistikler
Sorgu çalıştırdığınızda BigQuery sonuçları önbelleğe alır. Bunun sonucunda, birbirinin aynısı olan bir sonraki sorgu çok daha kısa sürer. Sorgu seçeneklerini kullanarak önbelleğe almayı devre dışı bırakmak mümkündür. BigQuery; oluşturma zamanı, bitiş zamanı ve işlenen toplam bayt sayısı gibi sorgularla ilgili bazı istatistikleri de izler.
Bu adımda, önbelleğe almayı devre dışı bırakır ve sorgularla ilgili bazı istatistikleri görüntülersiniz.
BigQueryDemo
klasörünün içindeki queryShakespeare.js
dosyasına gidin ve kodu aşağıdakiyle değiştirin:
'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();
Kodla ilgili dikkat edilmesi gereken birkaç nokta: Öncelikle, options
nesnesinde UseQueryCache
, false
olarak ayarlanarak önbelleğe alma devre dışı bırakılır. İkinci olarak, sorguyla ilgili istatistiklere iş nesnesinden eriştiniz.
Cloud Shell'e dönüp uygulamayı çalıştırın:
node queryShakespeare.js
Kaydetme mesajlarının ve bunların oluşumlarının listesini görürsünüz. Ayrıca, sorguyla ilgili bazı istatistikler de göreceksiniz:
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'ye veri yükleme
Kendi verilerinizi sorgulamak istiyorsanız önce verilerinizi BigQuery'ye yüklemeniz gerekir. BigQuery; Google Cloud Storage, diğer Google hizmetleri veya yerel, okunabilir bir kaynak gibi birçok kaynaktan veri yüklemeyi destekler. Hatta verilerinizi de akışa ekleyebilirsiniz. BigQuery'ye Veri Yükleme sayfasından daha fazla bilgi edinebilirsiniz.
Bu adımda, Google Cloud Storage'da depolanan bir JSON dosyasını bir BigQuery tablosuna yükleyeceksiniz. JSON dosyası şu konumdadır: gs://cloud-samples-data/bigquery/us-states/us-states.json
JSON dosyasının içeriğini merak ediyorsanız gsutil
komut satırı aracını kullanarak dosyayı Cloud Shell'e indirebilirsiniz:
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.
ABD eyaletlerinin listesini içerdiğini ve her eyaletin ayrı bir satırda bir JSON nesnesi olduğunu görebilirsiniz:
less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
Bu JSON dosyasını BigQuery'ye yüklemek için BigQueryDemo
klasöründe bir createDataset.js
dosyası ve bir loadBigQueryJSON.js
dosyası oluşturun:
touch createDataset.js
touch loadBigQueryJSON.js
Google Cloud Storage Node.js istemci kitaplığını yükleyin:
npm install --save @google-cloud/storage
createDataset.js
dosyasına gidin ve aşağıdaki kodu ekleyin:
'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();
Ardından loadBigQueryJSON.js
dosyasına gidin ve aşağıdaki kodu ekleyin:
'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();
Kodun JSON dosyasını nasıl yüklediğini ve bir veri kümesinde tablo (şema ile) nasıl oluşturduğunu incelemek için birkaç dakikanızı ayırın.
Cloud Shell'e dönüp uygulamayı çalıştırın:
node createDataset.js
node loadBigQueryJSON.js
BigQuery'de bir veri kümesi ve tablo oluşturulur:
Table my_states_table created.
Job [JOB ID] completed.
Veri kümesinin oluşturulduğunu doğrulamak için BigQuery web kullanıcı arayüzüne gidebilirsiniz. Yeni bir veri kümesi ve tablo göreceksiniz. Tablonun Önizleme sekmesine geçerseniz gerçek verileri görebilirsiniz:
11. Tebrikler!
Node.js ile BigQuery'yi kullanmayı öğrendiniz.
Temizleme
Bu hızlı başlangıçta kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirmesini önlemek amacıyla:
- Cloud Platform Console'a gidin.
- Kapatmak istediğiniz projeyi seçin, ardından "Sil"i tıklayın üstte üstte yer alır: Bu işlem, projeyi silinmek üzere programlar.
Daha Fazla Bilgi
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Google Cloud Platform'da Node.js: https://cloud.google.com/nodejs/
- Google BigQuery Node.js istemci kitaplığı: https://github.com/googleapis/nodejs-bigquery
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.