1. Büyük veri analizinden slayt sunumuna
Veri bilimcilerin büyük veri analizleri gerçekleştirmek için kullanabileceği pek çok araç vardır ancak nihayetinde analistlerin sonuçları yönetime gerekçelendirmeleri gerekir. Kağıt üzerindeki veya veritabanındaki çok sayıda rakam, kilit paydaşlara pek açık şekilde gösterilmez. Bu orta düzey Google Apps Komut Dosyası codelab'inde, son aşamayı otomatikleştirmenize yardımcı olmak için 2 Google geliştirici platformu (Google Workspace ve Google Cloud Console) kullanılır.
Google Cloud'un geliştirici araçları, derin veri analizi yapmanızı sağlar. Daha sonra sonuçları alabilir, bir e-tabloya ekleyebilir ve verileri içeren bir slayt sunumu oluşturabilirsiniz. Bu, verileri yönetime iletmek için daha uygun bir yöntem sunar. Bu codelab'de Google E-Tablolar ve Google Slaytlar için Cloud Console BigQuery API (Apps Komut Dosyası gelişmiş hizmeti olarak) ile yerleşik Apps Komut Dosyası hizmetleri açıklanmaktadır.
Motivasyon
Bu codelab'deki örnek uygulamaya aşağıdaki kod örneklerinden esinlenilmiştir:
- GitHub'da açık kaynaklı Google Apps Komut Dosyası BigQuery Hizmeti örnek uygulaması.
- E-tablo verilerinden slayt oluşturma adlı geliştirici videosunda bahsedilen ve bu blog yayınında yayınlanan örnek uygulama.
- Google Slaytlar API codelab'inde sunulan örnek uygulama.
Slaytlar API'si codelab örnek uygulaması BigQuery ve Slaytlar'ı da içerir ancak bu codelab'in örnek uygulamasından birkaç açıdan farklıdır:
- Node.js uygulamaları ile Apps Komut Dosyası uygulamalarımızın karşılaştırması.
- Apps Komut Dosyası hizmetlerini kullandığımızda REST API'lerden yararlanıyoruz.
- Google Drive'ı değil Google E-Tablolar'ı kullanıyorlar. Bu uygulamada ise E-Tablolar kullanılıyor ancak Drive kullanılmıyor.
Bu codelab için birden fazla teknolojiyi tek bir uygulamada bir araya getirmek ve aynı zamanda Google Cloud genelindeki özellikleri ve API'leri, gerçek hayattaki bir kullanım alanına benzer bir şekilde sergilemek istiyorduk. Hayal gücünüzü kullanma konusunda size ilham vermeyi ve kuruluşunuz ve müşterilerinizin karşılaşabileceği zorlukların üstesinden gelmek için hem Cloud Console hem de Google Workspace'i kullanmayı düşünmeyi amaçlıyoruz.
Neler öğreneceksiniz?
- Birden fazla Google hizmetiyle Google Apps Komut Dosyası'nı kullanma
- Büyük verileri analiz etmek için Google BigQuery'yi kullanma
- Google E-Tablosu oluşturma ve bu e-tabloya veri ekleme
- E-Tablolar'da grafik oluşturma
- E-Tablolar'dan Google Slaytlar sunularına veri ve grafik aktarma
Gerekenler
- İnternete erişimi olan bir web tarayıcısı
- Google Hesabı (Google Workspace hesapları için yönetici onayı gerekebilir)
- Google E-Tablolar ile ilgili temel düzeyde bilgi
- E-Tablolar'ı okuma özelliği A1 notasyonu
- Temel JavaScript becerileri
- Apps Komut Dosyası geliştirme konusunda bilgi sahibi olmanız faydalıdır ancak zorunlu değildir
2. Anket
Bu codelab'i/eğitimi nasıl kullanacaksınız?
Google Workspace geliştirici araçları ve API'ler mi?
Apps Komut Dosyası deneyiminizi özellikle nasıl değerlendirirsiniz?
Cloud Console geliştirici araçları ve API'ler mi?
3. Genel Bakış
Bu codelab'in ne hakkında olduğunu öğrendiğinize göre şunları yapacaksınız:
- Mevcut bir Apps Komut Dosyası-BigQuery örneğini alıp çalıştırın.
- Örnekten, BigQuery'ye nasıl sorgu göndereceğinizi ve sonuçları nasıl alacağınızı öğrenin.
- Bir Google E-Tablosu oluşturup BigQuery'deki sonuçları bu e-tabloya ekleyin.
- Kodu, döndürülen ve E-Tabloya eklenen verileri biraz değiştirecek şekilde değiştirin.
- BigQuery verileri için grafik oluşturmak üzere Apps Komut Dosyası'nda E-Tablolar hizmetini kullanın.
- Google Slaytlar sunusu oluşturmak için Slaytlar hizmetini kullanın.
- Varsayılan başlık slaytına bir başlık ve alt başlık ekleyin.
- Veri tablosu içeren bir slayt oluşturup sayfadaki veri hücrelerini tabloya aktarın.
- Başka bir slayt oluşturun ve e-tablo grafiğini bu slayta ekleyin.
Apps Komut Dosyası, BigQuery, E-Tablolar ve Slaytlar hakkında bazı arka plan bilgileriyle başlayalım.
Google Apps Komut Dosyası ve BigQuery
Google Apps Komut Dosyası, Google REST API'lerinden daha yüksek düzeyde çalışan bir Google Workspace geliştirme platformudur. Her seviyeden geliştiriciye hitap eden sunucusuz bir geliştirme ve uygulama barındırma ortamıdır. Apps Komut Dosyası, temelde Google 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ı JavaScript kullanır. Ancak hızlı, eşzamansız ve etkinliğe dayalı uygulama barındırma yerine Google 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 farklı olabilir. Apps Komut Dosyası size şu olanakları tanır:
- Tarayıcı tabanlı bir kod düzenleyici kullanarak komut dosyaları geliştirin. Ancak Apps Komut Dosyası için kullanılan komut satırı dağıtım aracı
clasp
'i kullanırken yerel olarak da geliştirebilirsiniz. - Google Workspace'e ve diğer Google hizmetlerine veya harici hizmetlere erişmek için (Apps Komut Dosyası'nın
URL Fetch
veyaJDBC
hizmetlerini kullanarak) özelleştirilmiş bir JavaScript sürümüne kod yazın. - Apps Komut Dosyası bu işlemi sizin için yaptığından yetkilendirme kodu yazmaktan kaçınabilirsiniz.
- Uygulamanızı barındırmanız gerekmez. Uygulamanız, Google'ın buluttaki sunucularında barındırılır ve çalışır.
Apps Komut Dosyası, diğer Google teknolojileriyle arayüz oluşturmak için 2 farklı yöntem kullanır:
- Yerleşik bir hizmet olarak
- Gelişmiş bir hizmet olarak
Yerleşik hizmet, kullanıcı verileri, diğer Google sistemleri ve harici sistemlerle etkileşim kurmak için üst düzey yöntemlere sahiptir. Gelişmiş hizmet, esasen Google Workspace API veya Google REST API için ince bir sarmalayıcıdır. Gelişmiş hizmetler, REST API'yi tam olarak kapsar ve genellikle yerleşik hizmetlerden daha fazlasını yapabilir ancak daha fazla kod karmaşıklığı gerektirir (ancak kullanımı tam REST API'ye göre daha kolaydır). Ayrıca gelişmiş hizmetlerin kullanılmadan önce komut dosyası projesi için etkinleştirilmesi gerekir.
Mümkün olduğunda geliştiriciler yerleşik bir hizmet kullanmalıdır çünkü kullanımı daha kolay olduğundan ve gelişmiş hizmetlerden daha fazlasını yaparlar. Ancak bazı Google API'lerinin yerleşik hizmetleri yoktur. Bu nedenle bazı durumlarda tek seçenek, gelişmiş hizmeti kullanmak olabilir. Örneğin, Google BigQuery'de yerleşik hizmet yoktur ancak BigQuery Hizmeti mevcuttur. BigQuery hizmeti, büyük veri topluluklarında (ör. birden fazla terabayt) sorgu yürütmek için Google BigQuery API'yi kullanmanıza olanak tanıyan bir Cloud Console hizmetidir. Buna rağmen sonuçları saniyeler içinde verebilir.
E-Tablolar'a ve Apps Komut Dosyası'ndaki Slaytlar
BigQuery'nin aksine hem E-Tablolar hem de Slaytlar'da yerleşik hizmetler bulunur. Ayrıca, yalnızca API'de bulunan özelliklere erişmek için gelişmiş hizmetlere de sahiptirler. Koda geçmeden önce yerleşik E-Tablolar ve Slaytlar hizmetleriyle ilgili dokümanları inceleyin. Hem E-Tablolar'ın hem de Slaytlar'ın gelişmiş hizmetleri için dokümanlar da bulunduğunu unutmayın.
4. 1. Görev: BigQuery'yi çalıştırma ve sonuçları E-Tablolar'a kaydetme
Giriş
İlk görevimiz codelab'in büyük bir bölümünü oluşturuyor. Etkinliği bitirdikten sonra codelab'in neredeyse yarısını tamamlamış olacaksınız. Birkaç alt bölüme ayrıldığınızda:
- Hem Google Apps Komut Dosyası hem de Cloud Console projesi oluşturun.
- BigQuery gelişmiş hizmetine erişimi etkinleştirin.
- Komut dosyası düzenleyiciyi açın ve uygulama kaynak kodunu girin.
- Uygulama yetkilendirme işlemine (OAuth2) gidin.
- BigQuery'ye istek gönderen uygulamayı çalıştırın.
- BigQuery sonuçları kullanılarak oluşturulan yeni Google E-Tablosunu inceleyin.
Kurulum
- Apps Komut Dosyası projesi oluşturmak için
script.google.com
sayfasına gidin ve Yeni proje'yi tıklayın. - Apps Komut Dosyası projenizi yeniden adlandırmak için Adsız proje'yi tıklayın, projeniz için bir başlık girin ve Yeniden adlandır'ı tıklayın.
Ardından, BigQuery'de veri sorgulamak için bir Cloud Console projesi oluşturmanız gerekir.
- Cloud Console projesi oluşturmak için bu kısayol bağlantısını kullanarak proje oluşturun, projeye bir ad verin ve Oluştur'u tıklayın.
- Proje oluşturma işlemi tamamlandığında sayfada bir bildirim görünür. Sayfanın üst kısmındaki projeler listesinde yeni projenizin seçili olduğundan emin olun.
- Menü'yü tıklayın ve API'ler ve Hizmetler > OAuth izin ekranı (doğrudan bağlantı).
- Dahili > Oluştur'u tıklayın.
- App name (Uygulama adı) alanına "Big Data Codelab" yazın.
- Kullanıcı desteği ve Geliştirici iletişim bilgileri alanlarına iletişim e-posta adreslerini girin.
- Kaydet ve devam et > Kaydet ve devam et'i tıklayın.
- Gezinme çubuğunda Diğer'i tıklayın ve Proje ayarları'nı (doğrudan bağlantı) seçin.
- Proje numarası altında listelenen değeri kopyalayın. (Codelab'in ilerleyen bölümlerinde ayrı bir Proje Kimliği alanı kullanılacaktır.)
Şimdi Apps Komut Dosyası projenizi Cloud Console projesine bağlayacaksınız.
- App Komut Dosyası düzenleyicisine geçin ve Proje Ayarları 'nı tıklayın.
- Google Cloud Platform (GCP) Projesi altında Projeyi değiştir'i tıklayın.
- Proje numarasını girin ve Proje ayarla'yı tıklayın.
- Ardından, BigQuery gelişmiş hizmetini eklemeye başlamak için Düzenleyici 'yi tıklayın.
- Hizmetler'in yanında, Hizmet ekle'yi tıklayın.
- Hizmet ekle iletişim kutusunda BigQuery API'yi seçip Ekle'yi tıklayın.
Son adım, Cloud Console'da BigQuery API'yi etkinleştirmektir.
- Bunu yapmak için Cloud Console'a geçin ve API'ler ve Hizmetler > Kontrol Paneli. (Hâlâ 3. Adım'da oluşturduğunuz projede olduğunuzdan emin olun.)
- API'leri ve Hizmetleri Etkinleştir'i tıklayın.
- "Büyük sorgu" ifadesini arayın, BigQuery API'yi seçin (BigQuery Data Transfer API'yi değil) ve etkinleştirmek için Etkinleştir'i tıklayın.
Artık uygulama kodunu girmeye, yetkilendirme sürecini tamamlamaya ve bu uygulamanın ilk yinelemesini çalıştırmaya hazırsınız.
Uygulamayı yükleyip çalıştırma
- Komut dosyası düzenleyicide, varsayılan
myFunction()
kod bloğunu aşağıdaki kodla değiştirin:
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a Sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://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 BigQuery 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 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());
}
- Kaydet'i tıklayın.
Code.gs
seçeneğinin yanında, Diğer'i > tıklayın. Yeniden adlandır.Code.gs
olan başlığıbq-sheets-slides.js
olarak değiştirin.- Şimdi, BigQuery'yi sorgulayan ve sonuçları bir Google E-Tablosu'na yazan kodu inceleyelim. Bunu
runQuery()
ekranının üst kısmına yakın bir yerde görüntüleyebilirsiniz:
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 eserlerini (BigQuery'nin herkese açık veri kümesinin bir parçasıdır) içinde arar ve eserlerin tümünde en sık kullanılan 10 kelimeyi, kullanım sayısına göre sıralayarak gösterir. Bu derlemeyi elle yapmanın ne kadar iş olacağını düşündüğünüzde BigQuery'nin ne kadar yararlı olabileceğine dair bir fikir ediniyorsunuz.
İşlev, geçerli bir Cloud Console proje kimliği gerektiren bir PROJECT_ID
değişkeni de bildirir. Değişkenin altındaki if
ifadesi, uygulamanın proje kimliği olmadan devam etmesini önlemek için bulunur.
- Cloud Console projenize geçin, gezinme çubuğunda Diğer'i tıklayın ve Proje ayarları'nı seçin.
- Proje Kimliği altında listelenen değeri kopyalayın.
- App Komut Dosyası düzenleyicisine geri dönün,
bq-sheets-slides.js
içindekiPROJECT_ID
değişkenini bulun ve değeri ekleyin. - Kaydet 'i tıklayın > Çalıştırın.
- Devam etmek için İzinleri incele'yi tıklayın.
- Komut dosyası çalışmaya başladığında, yerleşik yürütme günlüğü açılır ve komut dosyası işlemlerini gerçek zamanlı olarak günlüğe kaydeder.
- Yürütme günlüğünde "Yürütme tamamlandı" yazdıktan sonra Google Drive'ınıza (
drive.google.com
) gidin ve "En yaygın sözcükler Shakespeare'in eserlerinde en sık kullanılan kelimeler" adlı Google E-Tablosunu bulun. (veya güncellediysenizQUERY_NAME
değişkenine atadığınız ad): - En yaygın 10 kelimeyi ve bunların toplam sayılarını azalan düzende sıralanmış şekilde görüntülemek için e-tabloyu açın:
Görev 1 özeti
Özetlemek gerekirse, Shakespeare'in tüm eserlerini sorgulayan bir kod çalıştırdınız ve her oyundaki her kelimeyi incelediniz. Sistem, kelimeleri saydı ve azalan düzende sıraladı. Bu verileri görüntülemek için Google E-Tablolar'ın yerleşik Apps Komut Dosyası hizmetini de kullandınız.
bq-sheets-slides.js
için kullandığınız kodu github.com/googlecodelabs/bigquery-sheets-slides adresindeki bu codelab'in GitHub deposundaki step1
klasöründe de bulabilirsiniz. Kod, Shakespeare'in kullandığı 10 veya daha fazla karakter içeren en popüler kelimeleri almak üzere biraz farklı bir sorgu çalıştıran BigQuery gelişmiş hizmetler sayfasındaki bu orijinal örnekten esinlenmiştir. GitHub deposunda bununla ilgili bir örnek de bulabilirsiniz.
Shakespeare'in eserleriyle oluşturabileceğiniz diğer sorguları veya diğer herkese açık veri tablolarını incelemek istiyorsanız BigQuery Örnek Tablolarını Sorgulama sayfasını ve bu GitHub kod deposunu inceleyin.
Sorguları Apps Komut Dosyası'nda çalıştırmadan önce Cloud Console'daki BigQuery sayfasını kullanarak da çalıştırabilirsiniz. Bulmak için Menü'yü tıklayıp BigQuery Kullanıcı Arayüzü > SQL çalışma alanı (doğrudan bağlantı). Örneğin, sorgumuzun BigQuery grafik arayüzünde nasıl göründüğü aşağıda gösterilmektedir:
5. 2. Görev: Google E-Tablolar'da bir grafik oluşturma
runQuery()
'nin amacı BigQuery'yi kullanmak ve veri sonuçlarını bir Google E-Tablosu'na göndermektir. Sonra, verileri kullanarak bir grafik oluşturmalıyız. E-Tablolar'ı çağıran createColumnChart()
adında yeni bir işlev oluşturalım. newChart()
yöntemini çağırın.
- Apps Komut Dosyası düzenleyicisinde,
createColumnChart()
işlevinirunQuery()
ifadesinden sonrabq-sheets-slides.js
öğesine ekleyin. Kod, sayfayı alır ve tüm verileri içeren bir sütunsal grafik ister. İlk satırda sütun başlıkları bulunduğundan veri aralığı A2 hücresinden başlar.
/**
* Uses spreadsheet data to create a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) 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 values.
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);
}
createColumnChart()
işlevi, bir e-tablo nesne parametresi gerektirir. Bu yüzden,createColumnChart()
öğesine iletebileceğimiz birspreadsheet
nesnesini döndürmek içinrunQuery()
öğesini güncellememiz gerekir.runQuery()
öğesinin sonunda, e-tablonun başarıyla oluşturulmasını günlüğe kaydettikten sonraspreadsheet
nesnesini döndürün:
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
// NEW: Return the spreadsheet object for later use.
return spreadsheet;
}
- Hem
runQuery()
hem decreateColumnChart()
çağrısı yapmak için bircreateBigQueryPresentation()
işlevi oluşturun. BigQuery ve grafik oluşturma işlevini mantıksal olarak ayırmak en iyi uygulamadır:
/**
* Runs the query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
createColumnChart(spreadsheet);
}
- Yukarıda 2 önemli adım uyguladınız: e-tablo nesnesini döndürme ve giriş işlevini oluşturma.
runQuery()
öğesini daha kullanılabilir hale getirmek içinrunQuery()
olan günlük satırınıcreateBigQueryPresentation()
değerine taşımamız gerekir. Yönteminiz artık aşağıdaki gibi görünecektir:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl()); // MOVED HERE
createColumnChart(spreadsheet);
}
Yukarıdaki değişikliklerle (PROJECT_ID
hariç) bq-sheets-slides.js
aşağıdaki gibi görünecektir. Bu kod GitHub deposunun step2
bölümünde de bulunur.
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a sheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://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 BigQuery 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 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 a columnar chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) 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 values.
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);
}
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet.
*/
function createBigQueryPresentation() {
var spreadsheet = runQuery();
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
createColumnChart(spreadsheet);
}
Komut dosyası düzenleyicide, komut dosyası projenizi kaydedin. Ardından, işlev listesinden createBigQueryPresentation
öğesini seçin ve Çalıştır'ı tıklayın. İşlem tamamlandıktan sonra, Google Drive'ınızda başka bir e-tablo oluşturulur ancak bu sefer e-tabloda, verilerin yanına bir grafik eklenir:
6. 3. Görev: Sonuç verilerini bir slayt kümesine ekleme
Codelab'in son aşamasında, Google Slaytlar sunusu oluşturma, başlık slaytına başlık ve alt başlık ekleme, ardından veri hücreleri ve grafik için slaytlar oluşturma yer alır.
- Apps Komut Dosyası düzenleyicisinde,
createSlidePresentation()
işlevinicreateColumnChart()
ifadesinden sonrabq-sheets-slides.js
öğesine ekleyin. Slayt kümesindeki tüm çalışmalar bu fonksiyonda gerçekleştirilir. Slayt kümesi oluşturarak başlayalım ve ardından varsayılan başlık slaytına bir başlık ve alt başlık ekleyelim.
/**
* Create presentation with spreadsheet data and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the 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('using Google Cloud Console and Google Workspace APIs:\n' +
'Google Apps Script, BigQuery, Sheets, Slides');
createSlidePresentation()
dokümanındaki bir sonraki adım, hücre verilerini Google E-Tablosu'ndan yeni slayt sunumuza aktarmaktır. İşleve aşağıdaki kod snippet'ini 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 with
// the dimensions of the data range; fails if the sheet is 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]));
}
}
createSlidePresentation()
dersinin son adımı, bir slayt daha eklemek, grafiği e-tablodan içe aktarmak vePresentation
nesnesini döndürmektir. İşleve aşağıdaki kod snippet'ini 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;
}
- İşlevimizi tamamladığına göre imzasına tekrar bakın.
createSlidePresentation()
için hem e-tablo hem de grafik nesnesi parametreleri gerekir.runQuery()
öğesini zatenSpreadsheet
nesnesini döndürecek şekilde düzenledik ancakcreateColumnChart()
nesnesinin bir grafik nesnesi (EmbeddedChart
) döndürmesi için benzer bir değişiklik yapmamız gerekiyor.createColumnChart()
işlevine dönün ve işlevin sonuna aşağıdaki kod snippet'ini ekleyin:
// NEW: Return the chart object for later use.
return chart;
}
createColumnChart()
artık bir grafik nesnesi döndürdüğünden, grafiği bir değişkene kaydetmemiz gerekir. Daha sonra, e-tablo ve grafik değişkenlerinin her ikisini decreateSlidePresentation()
öğesine iletiriz. Ayrıca, yeni oluşturulan e-tablonun URL'sini günlüğe kaydettiğimizden, yeni slayt sunumunun URL'sini de günlüğe kaydedelim.createBigQueryPresentation()
öğenizi şu şekilde görünecek şekilde güncelleyin:
/**
* Runs a BigQuery query, adds data and a chart to a spreadsheet,
* 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); // UPDATED
var deck = createSlidePresentation(spreadsheet, chart); // NEW
Logger.log('Results slide deck created: %s', deck.getUrl()); // NEW
}
- Kaydedin ve
createBigQueryPresentation()
komutunu tekrar çalıştırın. Yine de yürütülmeden önce uygulamanızın, Google Slaytlar sunularını görüntülemek ve yönetmek için kullanıcınızdan bir grup izin daha alması gerekir. Bu izinleri inceleyip izin verdiğinizde izin önceki gibi çalışır. - Artık, oluşturulan e-tablonun yanı sıra aşağıda gösterildiği gibi 3 slayt (başlık, veri tablosu, veri grafiği) içeren yeni bir Slaytlar sunusu da almanız gerekir:
7. Sonuç
Tebrikler, Google Cloud'un her iki tarafını da kullanan bir uygulama oluşturdunuz. Google BigQuery isteğini yerine getirerek, herkese açık veri kümelerinden birini sorgulayan, sonuçları depolamak için bir Google E-Tablolar e-tablosu oluşturan, verilere dayalı bir grafik ekleyen ve son olarak da e-tablodaki verileri ve grafik sonuçlarını içeren bir Google Slaytlar sunusu oluşturan bir Google BigQuery isteğini yerine getirir.
Bu adımlar teknik olarak sizin tarafınızdan gerçekleştirilmiştir. Daha kapsamlı bir açıklama yapmak gerekirse büyük veri analizinden yola çıkıp paydaşlara sunabileceğiniz bir sonuç elde ettiniz. Üstelik tüm bunları kod kullanarak otomatik olarak gerçekleştirdiniz. Bu örneğin, kendi projeleriniz için özelleştirme konusunda size ilham verdiğini umuyoruz. Bu codelab'in sonunda, bu örnek uygulamayı nasıl daha fazla geliştirebileceğiniz konusunda bazı öneriler sunacağız.
Son görevdeki değişikliklerle (PROJECT_ID
hariç) bq-sheets-slides.js
şu şekilde görünmelidir:
/**
* 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.
*/
// File name for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
// Replace this value with your Google Cloud Console Project ID
var PROJECT_ID = '';
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into a spreadsheet. You must turn on
* the BigQuery advanced service before you can run this code.
* @see https://developers.google.com/apps-script/advanced/bigquery#run_query
* @see https://github.com/googleworkspace/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see https://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 BigQuery 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 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 a column chart.
* @param {Spreadsheet} Spreadsheet containing results data
* @returns {EmbeddedChart} Visualizes the results
* @see https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
*/
function createColumnChart(spreadsheet) {
// Retrieve the populated (first) 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 values.
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 and a chart
* @param {Spreadsheet} Spreadsheet containing results data
* @param {EmbeddedChart} Sheets chart to embed on a slide
* @returns {Presentation} Slide deck with the results
* @see https://developers.google.com/apps-script/reference/slides/presentation
*/
function createSlidePresentation(spreadsheet, chart) {
// Create the 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('using Google Cloud Console and Google Workspace 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 with
// the dimensions of the data range; fails if the sheet is 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 to a spreadsheet,
* 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 kod örneğini GitHub deposundaki final
klasöründe bulabilirsiniz.
8. Ek kaynaklar
Bu codelab'de 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 diğer kaynakları aşağıda bulabilirsiniz.
Bu uygulama için kaynaklar
Belgeler
- Google Apps Komut Dosyası belgelerinin yer aldığı site
- Apps Komut Dosyası: E-tablo Hizmeti
- Apps Komut Dosyası: Slaytlar hizmeti
- Apps Komut Dosyası: BigQuery gelişmiş hizmeti
Videolar
- Diğer bir Google Apps Komut Dosyası gizli anahtarı
- Google Haritalar'a e-tablodan erişme
- Tamamen Organik
- Google Workspace Developer Show
Haberler ve güncellemeleri
- Google Cloud Platform blogu
- Google Cloud Veri Analizi blogu
- Google Developers blogu
- Twitter: Google Developers (@googledevs)
- Google Workspace Developers blogu
- Twitter: Google Workspace Geliştiricileri (@workspacedevs)
Diğer codelab'ler
Giriş
- [Google E-Tablolar] Google E-Tablolar ile Apps Komut Dosyası Hakkında Temel Bilgiler
- [REST API'ler] Google Workspace ve Dosyalara erişmek için Google API'leri Google Drive'ınızdaki klasörler
Orta düzey
- [Apps Komut Dosyası] CLASP Apps Komut Dosyası komut satırı aracı
- [Apps Komut Dosyası] Gmail için Google Workspace Eklentileri
- [Apps Komut Dosyası] Hangouts Chat için özel bot'lar
- [REST API'ler] Google E-Tablolar'ı uygulamanızın raporlama aracı olarak kullanma
- [REST API'ler] BigQuery API'yi kullanarak Google Slaytlar sunuları oluşturma
9. Sonraki adım: kod doğrulamaları
Bu codelab'de oluşturduğumuz örneği geliştirmenin veya geliştirmenin farklı yöntemleri aşağıda listelenmiştir. Bu liste tam kapsamlı değildir ancak bir sonraki adımı nasıl atabileceğinize dair ilham verici fikirler içerir.
- Uygulama: Yalnızca JavaScript kullanma veya Apps Komut Dosyası tarafından getirilen kısıtlamalarla sınırlı olmak istemiyor musunuz? Bu uygulamayı; Google BigQuery, E-Tablolar ve Slaytlar için REST API'leri kullanan favori programlama dilinize taşıyın.
- BigQuery İlginizi çeken Shakespeare veri kümesi için farklı bir sorguyla denemeler yapın. Orijinal Apps Komut Dosyası BigQuery örnek uygulamasında başka bir örnek sorgu bulabilirsiniz.
- BigQuery BigQuery'nin diğer herkese açık veri kümelerinden bazılarıyla denemeler yaparak sizin için daha anlamlı olan bir veri kümesi bulun.
- BigQuery Daha önce, Shakespeare'in eserleri veya diğer herkese açık veri tablolarıyla oluşturabileceğiniz diğer sorgulardan bahsetmiştik. Bunları bu web sayfasında ve bu GitHub kod deposunda bulabilirsiniz.
- E-Tablolar: Grafik Galerisi'nde diğer grafik türleriyle denemeler yapın.
- E-Tablolar ve BigQuery: Kendi büyük e-tablo veri kümenizi kullanın. 2016'da BigQuery ekibi, geliştiricilerin veri kaynağı olarak e-tablo kullanmalarına olanak tanıyan bir özelliği kullanıma sundu. Daha fazla bilgi için (Google BigQuery, Google Drive ile entegre olur) başlıklı makaleyi inceleyin.
- Slaytlar: Oluşturulan sunuya büyük veri analizinize bağlı resimler veya diğer öğeler gibi başka slaytlar ekleyin. Slaytlar yerleşik hizmeti ile ilgili referans dokümanları burada bulabilirsiniz.
- Google Workspace: Apps Komut Dosyası'ndaki diğer Google Workspace veya Google yerleşik hizmetlerini kullanabilirsiniz. Örneğin, Gmail, Takvim, Dokümanlar, Drive, Haritalar, Analytics, YouTube vb. ve diğer gelişmiş hizmetler. Daha fazla bilgi edinmek için hem yerleşik hem de gelişmiş hizmetlerin referansa genel bakış bölümünü inceleyin.