GSP240

Genel Bakış
Veri bilimcilerin büyük verileri analiz etmek için kullanabileceği pek çok araç mevcuttur. Fakat bu araçlardan hangisi yönetime ve paydaşlara analizin açıklamasını yapıp gerekçesini sunmanıza yardımcı olabilir? Kağıt üzerindeki veya veritabanındaki işlenmemiş sayılar size istediğiniz sonucu veremez. Bu Google Apps Komut Dosyası laboratuvarı, iki Google geliştirici platformunu, yani Workspace ve Google Cloud'u kullanarak son aşamayı tamamlamanıza yardımcı olabilir.
Google Cloud geliştirici araçlarıyla verileri toplayıp analiz edebilirsiniz. Bu verilerden slayt ile e-tablo sunusu oluşturarak hazırladığınız muhteşem analizleriniz ve ayrıntılı çıkarımlarınızla hem yönetim hem paydaşlardan tam not alacaksınız.
Bu laboratuvarda, Google E-Tablolar ve Google Slaytlar için Google Cloud BigQuery API (Apps Komut Dosyası gelişmiş hizmeti olarak) ile yerleşik Apps Komut Dosyası hizmetleri açıklanmaktadır.
Laboratuvarda, gerçek hayatta karşılaşma ihtimalinizin yüksek olduğu senaryolar da verilmektedir. Kullanılan uygulamayla Google Cloud genelindeki özellikler ve API'ler sunulmuştur. Laboratuvarın hedefi, kuruluşunuz veya müşterilerinizin karşılaşabileceği zorlukların üstesinden gelmek için hem Google Cloud hem Workspace'ten nasıl yararlanabileceğinizi göstermektir.
Neler öğreneceksiniz?
- Birden fazla Google hizmetiyle Google Apps Komut Dosyası'nı kullanma
- Büyük veri analizi yapmak için BigQuery'yi kullanma
- Google E-Tablosu oluşturup bu dosyaya verileri girmenin yanı sıra e-tablo verileriyle grafik oluşturma
- E-tablodaki grafik ve verileri, Google Slaytlar sunusunun farklı slaytlarına aktarma
Kurulum
Laboratuvarı Başlat düğmesini tıklamadan önce
Buradaki talimatları okuyun. Laboratuvarlar süreli olduğundan duraklatılamaz. Start Lab'i (Laboratuvarı başlat) tıkladığınızda başlayan zamanlayıcı, Google Cloud kaynaklarının ne süreyle kullanımınıza açık durumda kalacağını gösterir.
Bu uygulamalı laboratuvarı kullanarak, laboratuvar etkinliklerini simülasyon veya demo ortamı yerine gerçek bir bulut ortamında gerçekleştirebilirsiniz. Bunu yapabilmeniz için size yeni, geçici kimlik bilgileri verilir. Bu kimlik bilgilerini laboratuvar süresince Google Cloud'da oturum açmak ve Google Cloud'a erişmek için kullanabilirsiniz.
Bu laboratuvarı tamamlamak için gerekenler:
- Standart bir internet tarayıcısına erişim (Chrome Tarayıcı önerilir)
Not: Bu laboratuvarı çalıştırmak için tarayıcıyı gizli modda (önerilen) veya gizli tarama penceresinde açın. Aksi takdirde, kişisel hesabınızla öğrenci hesabınız arasında oluşabilecek çakışmalar nedeniyle kişisel hesabınızdan ek ücret alınabilir.
- Laboratuvarı tamamlamak için yeterli süre (Laboratuvarlar başlatıldıktan sonra duraklatılamaz.)
Not: Bu laboratuvar için yalnızca öğrenci hesabını kullanın. Farklı bir Google Cloud hesabı kullanırsanız bu hesaptan ödeme alınabilir.
Giriş
Google Apps Komut Dosyası ve BigQuery
Google Apps Komut Dosyası, Google REST API'lerin kullanımına kıyasla daha yüksek düzeyde çalışan bir Workspace geliştirme platformudur. Pek çok farklı beceri düzeyindeki geliştirici tarafından kullanılabilen sunucusuz bir geliştirme ve uygulama barındırma ortamıdır. Tek bir cümle halinde özetlemek gerekirse "Apps Komut Dosyası; Workspace'in otomasyonu, kapsamının genişletilmesi ve entegrasyonu için kullanılan sunucusuz bir JavaScript çalışma zamanıdır."
Node.js'ye benzer şekilde sunucu tarafı bir JavaScript'tir. Ancak hızlı, eşzamansız ve etkinliğe dayalı uygulama barındırma yerine Workspace ve diğer Google hizmetleriyle sıkı entegrasyon elde etmeye odaklanır. Üstelik sunduğu geliştirme ortamı, alışkın olduğunuz ortamdan tamamen farklı olabilir. Apps Komut Dosyası size şu olanakları tanır:
- Tarayıcı tabanlı bir kod düzenleyicide geliştirme yapabilirsiniz. Apps Komut Dosyası için kullanılan komut satırı dağıtım aracı clasp'i kullanıyorsanız yerel olarak da geliştirme işlemleri gerçekleştirebilirsiniz.
- Workspace'e ve başka Google hizmetlerine veya harici hizmetlere erişmek için (Apps Komut Dosyası, URLfetch ya da Jdbc hizmetleri üzerinden) özelleştirilen bir JavaScript sürümünde kodlama yapabilirsiniz.
- Yetkilendirme kodu yazmanız zorunlu değildir. Apps Komut Dosyası bu işlemi sizin için yapar.
- Uygulamanızı barındırmamayı tercih edebilirsiniz. Uygulamanız, buluttaki Google sunucularında barındırılır ve çalışır.
Not: Apps Komut Dosyası hakkında daha fazla bilgi için resmi belgeleri inceleyin. Bu belgelerde hızlı başlangıç kılavuzlarının bulunduğu bir genel bakış bölümü, eğitimler ve videolar da yer almaktadır.
Apps Komut Dosyası, diğer Google teknolojileriyle arayüz oluşturmak için iki yöntemden yararlanır:
- Yerleşik hizmet
- Gelişmiş hizmet
Yerleşik hizmet, Workspace veya Google ürün verilerine ya da diğer faydalı yardımcı program yöntemlerine erişmek için kullanabileceğiniz üst düzey yöntemler sunar. Gelişmiş hizmet, yalnızca Workspace veya Google REST API için ince bir sarmalayıcıdır. Gelişmiş hizmetler, REST API için eksiksiz kapsam sunar. Genellikle yerleşik hizmetlerden daha fazlasını gerçekleştirebilse de bu hizmetler daha karmaşık kodların kullanılması gerekli kılar (Yine de REST API'yi kullanmaktan daha kolaydır).
Ayrıca gelişmiş hizmetlerin kullanılmadan önce komut dosyası projesi için etkinleştirilmiş olması gerekir. Daha kolay kullanılabilmesi ve gelişmiş hizmetlere göre daha ağır işleri yapabilmesi nedeniyle, mümkünse yerleşik hizmet tercih edilir. Ancak bazı Google API'lerinin yerleşik hizmetleri yoktur. Bu nedenle bazı durumlarda tek seçenek, gelişmiş hizmeti kullanmak olabilir. BigQuery bu duruma örnek olarak gösterilebilir. Yerleşik hizmet sunulmaz ancak BigQuery gelişmiş hizmeti mevcuttur. (Hizmet sunulmamasından iyidir, değil mi?)
Not: Bu alana yeni giriş yapanlar için açıklamak gerekirse BigQuery, çok büyük veri topluluklarında basit (veya karmaşık) sorgular gerçekleştirmek için kullanılan bir Google Cloud hizmeti olarak tanımlanabilir. Birkaç terabayta kadar ulaşabilen veri topluluklarında bile saatler veya günler yerine saniyeler içinde sonuç alınır.
Apps Komut Dosyası'ndan Google E-Tablolar ve Slaytlar'a erişme
BigQuery yalnızca Apps Komut Dosyası'nın gelişmiş hizmeti olarak kullanılabilir. Ancak hem Google E-Tablolar hem Slaytlar, yerleşik Apps Komut Dosyası hizmetlerinin yanı sıra gelişmiş hizmetleri de sunar. Yalnızca API'de bulunan ve yerleşik olmayan özelliklere erişmek için kullanılan gelişmiş hizmetler buna örnek olarak gösterilebilir. Yerleşik hizmet, geliştirme sürecini basitleştiren daha yüksek düzey yapılar ve erişimi kolay olan çağrılar sunar. Bu nedenle, mümkün olduğu durumlarda gelişmiş hizmet yerine yerleşik hizmet kullanmayı tercih edin.
Not: Kodlama kısmına geçmeden önce bilgileri gözden geçirmek için E-Tablolar hizmeti ve Slaytlar hizmeti bölümünü inceleyin.
1. görev: BigQuery'yi sorgulama ve sonuçları e-tabloya girme
İlk göreviniz, bu laboratuvarın büyük bir kısmını oluşturuyor. Bu bölümü bitirdiğinizde laboratuvarın neredeyse yarısını tamamlamış olacaksınız.
Bu bölümde şunları gerçekleştireceksiniz:
- Yeni bir Google Apps Komut Dosyası projesi oluşturma
- BigQuery gelişmiş hizmetine erişimi etkinleştirme
- Geliştirme düzenleyicisine gitme ve uygulama kaynak kodunu girme
- Uygulama yetkilendirme sürecini (OAuth2) tamamlama
- BigQuery'ye istek gönderen uygulamayı çalıştırma
- BigQuery'deki sonuçlarla oluşturulan yepyeni bir Google E-Tablosunu görüntüleme
Yeni bir Apps Komut Dosyası projesi oluşturma
-
script.google.com adresine giderek yeni bir Apps Komut Dosyası projesi oluşturun. Bu laboratuvar için Apps Komut Dosyası oluştur bağlantısını tıklayın.

-
Apps Komut Dosyası kod düzenleyici açılır:

-
En üstteki proje adını tıklayıp projenize bir ad verin (yukarıdaki resimde "Untitled project" olarak görünür).
-
Projeyi Yeniden Adlandırın iletişim kutusunda, projeye tercih ettiğiniz adı verin (örneğin "BigQuery", "E-Tablolar", "Slaytlar demo" vs.) ve Yeniden adlandır'ı tıklayın.
BigQuery gelişmiş hizmetini etkinleştirme
Yeni projeniz için BigQuery gelişmiş hizmetini ve BigQuery API'yi etkinleştirin.
-
Hizmetler'in yanındaki Hizmet ekle simgesini tıklayın.

-
Hizmet ekle iletişim kutusunda ilgili hizmetleri ve API'leri seçin.

- Cloud Console'a giderek gezinme menüsü > API'ler ve Hizmetler > Kitaplık'ı seçin.

- Arama kutusuna BigQuery API yazın veya bu ifadeyi yapıştırın, ardından BigQuery API'yi seçin.

- Gerekliyse BigQuery API'yi etkinleştirmek için Etkinleştir'i tıklayın.

-
Projenize dönün. Hizmet ekle iletişim kutusu açık durumda olacaktır.
-
İletişim kutusunu kapatmak için BigQuery API'yi seçip Ekle'yi tıklayın.

Uygulama kodunuzu girip çalıştırma
Artık uygulama kodunu girmeye, yetkilendirme sürecini tamamlamaya ve bu uygulamayı çalıştırmak için ilk adımları atmaya hazırsınız.
- Aşağıdaki kutuda yer alan kodu kopyalayıp kod düzenleyicideki tüm içeriğin üzerine yapıştırın:
/**
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '<YOUR_PROJECT_ID>';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BQ job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the new results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}
-
Yeni oluşturduğunuz dosyayı kaydetmek için menü çubuğundaki Projeyi kaydet simgesini tıklayın veya Ctrl + S tuşlarına basın.
-
Dosya adının yanındaki üç nokta işaretini, ardından Yeniden adlandır'ı tıklayarak dosyayı yeniden adlandırabilirsiniz.

- Dosya adını bq-sheets-slides.gs olarak değiştirin ve Enter'a basın.
Bu kod ne işe yarar? BigQuery'yi sorguladığını ve sonuçları yeni bir Google E-Tablosuna yazdığını zaten biliyorsunuz. Peki bu sorgunun işlevi nedir?
-
runQuery()
işlevindeki sorgu kodunu inceleyin:
SELECT
LOWER(word) AS word,
SUM(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word
ORDER BY count
DESC LIMIT 10
Bu sorgu, Shakespeare'in eserleri (BigQuery'nin herkese açık veri kümesinin bir parçasıdır) içinde arama yapar ve eserlerin tümünde en sık kullanılmış olan 10 kelimeyi, kullanım sayısına göre sıralayarak gösterir. Söz konusu işlemi elle yapmanın ne kadar zor olacağını tahmin edebilirsiniz. Bu örneğin, size BigQuery'nin ne kadar yararlı olduğu hakkında bir ipucu vereceğini düşünüyoruz.
Çok az kaldı. PROJECT_ID
değişkenini bq-sheets-slides.gs
'nin üzerine ayarlamak için geçerli bir proje kimliği gerekir.
-
<YOUR_PROJECT_ID>
kısmını sol paneldeki Proje Kimliğinizle değiştirin.
Aşağıda, örnek proje kimliğinin yer aldığı bir kod örneği verilmiştir. Gerçek PROJECT_ID değeriniz bu örnektekinden farklıdır.
Örnek kod:
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '<YOUR_PROJECT_ID>';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
Not: Bu kod snippet'indeki if
ifadesi, proje kimliği kullanılmadığı zaman uygulamada daha fazla ilerleme kaydedilmemesi amacıyla eklenir.
Not: Menü seçicisi hareketsiz ve çalışamaz hale gelirse sayfayı yeniden yükleyin.
-
Dosyayı kaydedin ve menü çubuğundaki Çalıştır seçeneğini tıklayıp kodunuzu çalıştırın.
-
Ardından, İzinleri İncele'yi tıklayın.
Not: İstisna: BigQuery API Apps Komut Dosyası tarafından yönetilen…
şeklinde bir hata alırsanız BigQuery API hizmetini kaldırıp yeniden ekleyin.
- Qwiklabs.net'ten bir hesap seçin iletişim kutusundan kullanıcı adınızı, ardından İzin ver'i tıklayın.
Not: Uygulamayı yetkilendirdikten sonra bu işlemi her yürütmede tekrarlamanız gerekmez. Söz konusu iletişim kutusunu, bu laboratuvarın ilerleyen aşamalarındaki "Sonuç verilerini bir slayt kümesine ekleme" bölümüne gelene kadar bir daha görmezsiniz. Burada, Google Slaytlar sunularını oluşturmak ve yönetmek için kullanıcı izni istenir.
- İşlev çalıştırıldığı zaman üst tarafta küçük bir mesaj kutusu açılır.

İşlev tamamlandığı zaman mesaj kutusu kaybolur. Mesaj kutusunu görmemeniz, işlevin tamamlandığı anlamına gelebilir.
-
Google Drive'ınıza gidip Most common words in all of Shakespeare's works (Shakespeare'in eserlerinde en sık kullanılan kelimeler) başlıklı veya
QUERY_NAME
değişkenine atadığınız ada sahip olan yeni Google E-Tablosu'nu bulun.

- E-tabloyu açın. En sık kullanılan kelimeler, kullanım sayısına göre çoktan aza doğru sıralanacak şekilde 10 satırda gösterilir.

Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
BigQuery'yi sorgulama ve sonuçları E-Tabloya girme
Özet
Tüm bu işlemlerle neler elde ettiniz? Shakespeare'in tüm eserlerini sorgulayan bir kod çalıştırdınız. Sorgulanan verilerin miktarı ÇOK yüksek olmasa da yazarın tüm oyunlarındaki kelimeleri kendi başınıza incelemenin, kelimelerin sayısını tutmanın ve bunları kullanım sıklığına göre çoktan aza doğru sıralamanın pek de kolay bir görev olduğu söylenemez. Bu görevi sizin için tamamlaması amacıyla BigQuery'yi kullanmakla kalmayıp Google E-Tablolar için Apps Komut Dosyası'ndaki yerleşik hizmetten de yararlandınız. Bu hizmet, elinizdeki verileri kolayca kullanılabilecek şekilde düzenledi.
Sorguyu Apps Komut Dosyası'nda çalıştırmadan önce her zaman BigQuery konsolunda test edebilirsiniz. BigQuery'nin kullanıcı arayüzü, geliştiriciler tarafından kullanılabilir.
- Cloud Console'a gidin ve gezinme menüsü > BigQuery'yi seçin.

- Cloud Console iletişim kutusundaki BigQuery'ye Hoş Geldiniz bölümünden BİTTİ'yi tıklayın.
BigQuery konsolu açılır.
- Sorgu düzenleyiciye kodunuzu girin ve Çalıştır'ı tıklayın:
SELECT LOWER(word) AS word, sum(word_count) AS count
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY word ORDER BY count DESC LIMIT 10

2. görev: Google E-Tablolar'da bir grafik oluşturma
Komut Dosyası Düzenleyicisi'ne dönün. Şimdiye kadar Shakespeare'in eserlerini sorgulayan, bunları sıralayan ve sonuçları E-Tablolar'da sunan bir uygulama kodladınız. Bu kodda runQuery()
işlevi, BigQuery ile iletişim kurup sonuçlarını E-Tablolar'a gönderir. Şimdi de verileri grafik halinde gösterecek bir kod ekleyeceksiniz. Bu bölümde, verileri grafik halinde göstermek için E-Tablolar'ın newChart()
yöntemini kullanan, createColumnChart()
adında yeni bir işlev oluşturacaksınız.
createColumnChart()
işlevi, verilerin bulunduğu sayfayı alıp tüm verileri içeren bir sütunsal grafik isteğinde bulunur. İlk satırda veriler yerine sütun başlıkları bulunduğundan veri aralığı A2 hücresinden başlar.
- Grafiği oluşturun:
createColumnChart()
işlevini runQuery()
'den hemen sonra (son kod satırından sonra) bq-sheets-slides.gs
'ye ekleyin.
/**
* Uses spreadsheet data to create columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) Sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in Sheet is from cell A2 to B11
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the Sheet using above params.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
-
E-tabloyu döndürün: Yukarıdaki kodda createColumnChart()
için bir e-tablo nesnesinin kullanılması gerekir. Bu nedenle uygulamanın spreadsheet
nesnesini createColumnChart()
'a iletebilmesi için uygulamada, nesneyi döndürecek şekilde ince ayar yapın. Google E-Tablosu'nun oluşturulmasını kaydettikten sonra nesneyi, runQuery()
'nin sonunda döndürün.
-
Son satırı (Logger.log ile başlar.) şununla değiştirin:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// Return the spreadsheet object for later use.
return spreadsheet;
}
-
createBigQueryPresentation()
işlevini çalıştırın: BigQuery ve grafik oluşturma işlevini mantıksal olarak ayırmak önemli ölçüde işinize yarar. Uygulamayı çalıştırmak ve createColumnChart()
'ı çağırmak için createBigQueryPresentation()
işlevini oluşturun. Eklediğiniz kod şu şekilde görünmelidir:
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- Bu kod bloğunun hemen ardından
createBigQueryPresentation()
işlevini ekleyin:
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '<YOUR_PROJECT_ID>';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
- Kodun farklı yerlerde yeniden kullanılabilmesini sağlayın: Yukarıda, e-tablo nesnesini döndürerek ve çalışma işlevini oluşturarak iki önemli adımı tamamladınız. İş arkadaşınızın, URL kaydedilmeden
runQuery()
işlevini tekrar kullanmak istediğini varsayalım.
runQuery()
işlevini genel kullanıma daha uygun hale getirmek için bu günlük satırını taşıyın. Günlük satırını taşıyabileceğiniz en uygun yer neresidir? En uygun yerincreateBigQueryPresentation()
olduğunu düşündüyseniz soruyu doğru yanıtladınız.
Günlük satırı taşındıktan sonra şu şekilde görünmelidir:
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Yukarıdaki değişiklikleri yaptıktan sonra bq-sheets-slides.js
şu şekilde görünmelidir (PROJECT_ID
kısmı hariç):
/**
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '<YOUR_PROJECT_ID>';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BQ job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the new results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) Sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in Sheet is from cell A2 to B11
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the Sheet using above params.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
}
-
Dosyayı kaydedin.
-
Ardından menü çubuğunda runQuery'yi tıklayıp açılır listeden createBigQueryPresentation'ı seçin.
-
Ardından Çalıştır'ı tıklayın.
İşlevi çalıştırdıktan sonra Google Drive'ınıza başka bir Google E-Tablosu eklenir ancak bu sefer e-tabloda, verilerin yanında bir grafik de yer alır:

3. görev: Sonuç verilerini bir slayt kümesine ekleme
Laboratuvarın son aşamasında, yeni bir Google Slaytlar sunusu oluşturma, başlık slaytındaki başlığı ve alt başlığı doldurma, ardından biri her veri hücresi, diğeri ise grafik için olmak üzere 2 yeni slayt ekleme konuları ele alınmaktadır.
- Slayt kümesini oluşturun: Öncelikle yeni bir slayt kümesi oluşturun, ardından tüm yeni sunularda bulunan varsayılan başlık slaytına bir başlık ve alt başlık ekleyin. Slayt kümesindeki tüm çalışmalar,
createSlidePresentation()
işlevinde gerçekleşir.
Bu işlev, createColumnChart()
işlev kodunun hemen ardından gelen bq-sheets-slides.gs
kısmına eklenir:
/**
* Create presentation with spreadsheet data & chart
* @param {Spreadsheet} Spreadsheet with results data
* @param {EmbeddedChart} Sheets chart to embed on slide
* @returns {Presentation} Slide deck with results
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the new presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
- Veri tablosu ekleyin:
createSlidePresentation()
kodu için sonraki adım, hücredeki verileri Google E-Tablosu'ndan yeni slayt kümesine aktarmaktır. Aşağıdaki kod snippet'ini createSlidePresentation()
işlevine ekleyin:
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it of
// the dimensions of the data range; fails if Sheet empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
- Grafiği içe aktarın:
createSlidePresentation()
için son adım, başka bir slayt ekleyip grafiği e-tablodan içe aktararak Presentation
nesnesini döndürmektir. İşleve son olarak aşağıdaki snippet'i ekleyin:
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
- Grafiği döndürün: Son işlevin tamamlanmasının ardından imzasını tekrar inceleyin. Evet,
createSlidePresentation()
için hem e-tablo hem grafik nesnesi gerekir. runQuery()
'yi zaten Spreadsheet
nesnesini döndürecek şekilde düzenlemiştiniz. Şimdiyse grafik (EmbeddedChart
) nesnesini döndürmesi için createColumnChart()
'ta benzer bir değişiklik yapmanız gerekiyor. Bu işlemi gerçekleştirmek için uygulamanıza dönün ve createColumnChart()
'ın ardına son bir satır daha ekleyin:
// Return chart object for later use
return chart;
}
-
createBigQueryPresentation()
'ı güncelleyin: createColumnChart()
, grafiği döndürdüğü için bu grafiği değişkene kaydetmeniz, ardından hem e-tabloyu hem grafiği createSlidePresentation()
'a iletmeniz gerekir. Yeni oluşturulan e-tabloya kaydettiğiniz için URL'yi yeni slayt sunusuna da kaydedebilirsiniz. Şu kod bloğunu silin:
/**
* Runs a BigQuery query, adds data and a chart in a Sheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Yerine aşağıdaki kod bloğunu yapıştırın:
/**
* Runs a BigQuery query, adds data and a chart in a Sheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet);
var deck = createSlidePresentation(spreadsheet, chart);
Logger.log('Results slide deck created: %s', deck.getUrl());
}
Bu güncellemeleri yaptıktan sonra bq-sheets-slides.gs
şu şekilde görünmelidir (PROJECT_ID
kısmı hariç):
bq-sheets-slides.gs - final version
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud API project ID
var PROJECT_ID = '<YOUR_PROJECT_ID>';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BQ job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the new results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
// Return the spreadsheet object for later use.
return spreadsheet;
}
/**
* Uses spreadsheet data to create columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} visualizing the results
* @see http://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first and only) Sheet.
var sheet = spreadsheet.getSheets()[0];
// Data range in Sheet is from cell A2 to B11
var START_CELL = 'A2'; // skip header row
var END_CELL = 'B11';
// Place chart on Sheet starting on cell E5.
var START_ROW = 5; // row 5
var START_COL = 5; // col E
var OFFSET = 0;
// Create & place chart on the Sheet using above params.
var chart = sheet.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(sheet.getRange(START_CELL + ':' + END_CELL))
.setPosition(START_ROW, START_COL, OFFSET, OFFSET)
.build();
sheet.insertChart(chart);
// Return the chart object for later use.
return chart;
}
/**
* Create presentation with spreadsheet data & chart
* @param {Spreadsheet} Spreadsheet with results data
* @param {EmbeddedChart} Sheets chart to embed on slide
* @returns {Presentation} Returns a slide deck with results
* @see http://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the new presentation.
var deck = SlidesApp.create(QUERY_NAME);
// Populate the title slide.
var [title, subtitle] = deck.getSlides()[0].getPageElements();
title.asShape().getText().setText(QUERY_NAME);
subtitle.asShape().getText().setText('via GCP and G Suite APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
// Data range to copy is from cell A1 to B11
var START_CELL = 'A1'; // include header row
var END_CELL = 'B11';
// Add the table slide and insert an empty table on it of
// the dimensions of the data range; fails if Sheet empty.
var tableSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
var sheetValues = spreadsheet.getSheets()[0].getRange(
START_CELL + ':' + END_CELL).getValues();
var table = tableSlide.insertTable(sheetValues.length, sheetValues[0].length);
// Populate the table with spreadsheet data.
for (var i = 0; i < sheetValues.length; i++) {
for (var j = 0; j < sheetValues[0].length; j++) {
table.getCell(i, j).getText().setText(String(sheetValues[i][j]));
}
}
// Add a chart slide and insert the chart on it.
var chartSlide = deck.appendSlide(SlidesApp.PredefinedLayout.BLANK);
chartSlide.insertSheetsChart(chart);
// Return the presentation object for later use.
return deck;
}
/**
* Runs a BigQuery query, adds data and a chart in a Sheet,
* and adds the data and chart to a new slide presentation.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
var chart = createColumnChart(spreadsheet);
var deck = createSlidePresentation(spreadsheet, chart);
Logger.log('Results slide deck created: %s', deck.getUrl());
}
-
createBigQueryPresentation()
'ı kaydedip yeniden çalıştırın. Bu işlem yürütülmeden önce Google Slaytlar sunularınızı görüntülemek ve yönetmek için bir grup izin daha vermeniz istenir.
- Drive'ım bölümüne gidin. Burada, oluşturulan e-tabloya ek olarak aşağıda gösterilen şekilde 3 slayt (başlık, veri tablosu, veri grafiği) içeren yeni bir Slaytlar sunusunu da görürsünüz:



Tebrikler!
BigQuery'nin herkese açık veri kümelerinden birini sorgulayan, sonuçları depolamak için yeni bir Google E-Tablosu oluşturan, alınan verilere göre hazırlanmış bir grafik ekleyen ve hem sonuçların hem e-tablodaki grafiğin yer aldığı bir Google Slaytlar sunusu oluşturan bir Google BigQuery isteği gerçekleştirerek Google Cloud'un iki yönünden de yararlanan bir uygulama oluşturdunuz.
Teknik olarak bu işlemleri gerçekleştirdiniz. Daha kapsamlı bir açıklama yapmak gerekirse büyük veri analizinden yola çıkıp paydaşlara sunabileceğiniz bir sonuç elde ettiniz. Üstelik bunların hepsini kodlama yaparak tamamen otomatik şekilde gerçekleştirdiniz. Şimdi bu laboratuvarda öğrendiklerinizi, kendi projelerinize uyacak şekilde özelleştirebilirsiniz.
Sonraki adımlar / Daha fazla bilgi
Bu laboratuvarda gösterilen kodlar GitHub'da da bulunabilir. Laboratuvar, kod deposuyla olabildiğince uyumlu hale getirilmiştir. Bu laboratuvarda ele alınan materyalleri daha yakından incelemenize ve Google geliştirici araçlarına programatik şekilde erişmenin diğer yöntemlerini keşfetmenize yardımcı olacak ek kaynaklar aşağıda verilmiştir.
Belgeler
Benzer ve genel amaçlı videolar
- Google (Apps) ile ilgili bir sır daha (Apps Komut Dosyası'nın tanıtım videosu)
- Google Haritalar'a e-tablolardan erişme (video)
- Google Apps Komut Dosyası hakkında diğer içerikler: video kitaplığı
- Launchpad Online: video serisi
- G Suite Geliştirici Şovu: video serisi
Benzer ve genel amaçlı haberler ile güncellemeler
Kılavuzun Son Güncellenme Tarihi: 4 Kasım 2024
Laboratuvarın Son Test Edilme Tarihi: 4 Kasım 2024
Telif Hakkı 2025 Google LLC. Tüm hakları saklıdır. Google ve Google logosu, Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markaları olabilir.