BigQuery'de Bölümlendirme ve Kümeleme

1. Giriş

BigQuery, analiz için tümüyle yönetilen, petabayt ölçekli ve düşük maliyetli bir kurumsal veri ambarıdır. BigQuery sunucusuzdur. Kümeleri ayarlamanız ve yönetmeniz gerekmez.

BigQuery veri kümesi bir GCP projesinde bulunur ve bir veya daha fazla tablo içerir. Bu veri kümelerini SQL ile sorgulayabilirsiniz.

Bu codelab'de, BigQuery'deki bölümlendirme ve kümelemeyi anlamak için GCP Console'daki BigQuery web kullanıcı arayüzünü kullanacaksınız. BigQuery'nin tablo bölümlendirme ve kümeleme özellikleri, verilerinizi yaygın veri erişim kalıplarına uyacak şekilde yapılandırmanıza yardımcı olur. Belirli bir veri aralığında sorgulama yaparken BigQuery performansını ve maliyetini tam olarak en üst düzeye çıkarmak için bölümleme ve kümeleme çok önemlidir. Bu sayede sorgu başına daha az veri taranır ve budama, sorgu başlangıç zamanından önce belirlenir.

BigQuery hakkında daha fazla bilgi için BigQuery belgelerine bakın.

Neler öğreneceksiniz?

  • Bölümlendirilmiş ve kümelenmiş tablolar oluşturma ve sorgulama
  • Sorgu performansını bölümlendirilmiş ve kümelenmiş tablolarla karşılaştırma

Gerekenler

Bu laboratuvarı tamamlamak için şunlar gerekir:

  • Google Chrome'un en son sürümü
  • Google Cloud Platform faturalandırma hesabı

2. Hazırlanma

BigQuery ile çalışmak için bir GCP projesi oluşturmanız veya mevcut bir projeyi seçmeniz gerekir.

Proje oluşturma

Yeni bir proje oluşturmak için aşağıdaki adımları uygulayın:

  1. Henüz bir Google Hesabınız (Gmail veya Google Apps) yoksa oluşturun.
  2. Google Cloud Platform Console'da ( console.cloud.google.com) oturum açın ve yeni bir proje oluşturun.
  3. Projeniz yoksa proje oluştur düğmesini tıklayın:

870a3cbd6541ee86.png

Aksi takdirde, proje seçimi menüsünden yeni bir proje oluşturun:

f6dff3437a20cf2.png

  1. Bir proje adı girin ve Oluştur'u seçin. Proje kimliğinin, tüm Google Cloud projelerinde benzersiz bir ad olduğunu unutmayın.

1884405a64ce5765.png

3. Herkese açık veri kümeleriyle çalışma

BigQuery, BBC News, GitHub depoları, Stack Overflow ve ABD Ulusal Okyanus ve Atmosfer İdaresi (NOAA) veri kümeleri gibi herkese açık veri kümeleriyle çalışmanıza olanak tanır. Bu veri kümelerini BigQuery'ye yüklemeniz gerekmez. BigQuery'de veri kümelerine göz atmak ve bunları sorgulamak için açmanız yeterlidir. Bu codelab'de Stack Overflow herkese açık veri kümesiyle çalışacaksınız.

Stack Overflow veri kümesine göz atma

Stack Overflow veri kümesi; yayınlar, etiketler, rozetler, yorumlar, kullanıcılar ve daha fazlası hakkında bilgiler içerir. BigQuery web arayüzünde Stack Overflow veri kümesine göz atmak için aşağıdaki adımları uygulayın:

  1. Stack Overflow veri kümesini açın. BigQuery web kullanıcı arayüzü, GCP Console'da açılır ve Stackoverflow veri kümesiyle ilgili bilgileri gösterir.
  2. Gezinme panelinde bigquery-public-data'yı seçin. Menü, herkese açık veri kümelerini listeleyecek şekilde genişler. Her veri kümesi bir veya daha fazla tablodan oluşur.
  3. Aşağı kaydırıp stackoverflow'u seçin. Menü genişleyerek Stack Overflow veri kümesindeki tabloları listeler.
  4. Rozetler tablosunun şemasını görmek için rozetler'i seçin. Tablodaki alanların adlarını not edin.
  5. Rozetler tablosuyla ilgili örnek verileri görmek için Alan adlarının üzerinde Önizleme'yi tıklayın.

BigQuery'de bulunan tüm herkese açık veri kümeleri hakkında daha fazla bilgi için Google BigQuery Herkese Açık Veri Kümeleri başlıklı makaleyi inceleyin.

Stackoverflow veri kümesini sorgulama

Veri kümesine göz atmak, üzerinde çalıştığınız verileri anlamak için iyi bir yöntemdir ancak BigQuery'nin gerçek gücü veri kümelerini sorgularken ortaya çıkar. Bu bölümde, BigQuery sorgularını nasıl çalıştıracağınız açıklanmaktadır. Bu noktada SQL bilmeniz gerekmez. Aşağıdaki sorguları kopyalayıp yapıştırabilirsiniz.

Sorgu çalıştırmak için aşağıdaki adımları tamamlayın:

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.
  2. Sorgu düzenleyici metin alanına aşağıdaki SQL sorgusunu kopyalayıp yapıştırın. BigQuery, sorguyu doğrular ve web kullanıcı arayüzü, söz diziminin geçerli olduğunu belirtmek için metin alanının altında yeşil bir onay işareti gösterir.
SELECT
  EXTRACT(YEAR FROM creation_date) AS creation_year,
  COUNT(*) AS total_posts
FROM `bigquery-public-data.stackoverflow.posts_questions`
GROUP BY creation_year
ORDER BY total_posts DESC
LIMIT 10
  1. Çalıştır'ı seçin. Sorgu, her yıl yayınlanan Stack Overflow gönderilerinin veya sorularının sayısını döndürür.

4. Yeni tablo oluşturma

Önceki bölümde, BigQuery'nin kullanımınıza sunduğu herkese açık veri kümelerini sorguladınız. Bu bölümde, mevcut bir tablodan BigQuery'de yeni bir tablo oluşturacaksınız. Stack Overflow ortak veri kümesi posts_questions tablosundan örneklenen verileri içeren yeni bir tablo oluşturacak ve ardından tabloyu sorgulayacaksınız.

Yeni veri kümesi oluşturma

Tablo verilerini oluşturup BigQuery'ye yüklemek için önce aşağıdaki adımları uygulayarak verileri tutacak bir BigQuery veri kümesi oluşturun:

  1. GCP Console gezinme panelinde, kurulumun bir parçası olarak oluşturulan proje adını seçin.
  2. Sağ taraftaki ayrıntılar panelinde Veri kümesi oluştur'u seçin.

acc6378c49622323.png

  1. Veri kümesi oluştur iletişim kutusunda Veri kümesi kimliği için stackoverflow yazın. Diğer varsayılan ayarları değiştirmeden Tamam'ı tıklayın.

7a2dfd8bcb8f259a.png

2018 StackOverflow Yayınlarını İçeren Yeni Bir Tablo Oluşturma

BigQuery veri kümesi oluşturduğunuza göre BigQuery'de yeni bir tablo oluşturabilirsiniz. Mevcut bir tablodaki verileri kullanarak tablo oluşturmak için aşağıdaki adımları tamamlayarak 2018 Stack Overflow gönderileri veri kümesini sorgulayıp sonuçları yeni bir tabloya yazacaksınız:

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.

9ca55f544e8da8bd.png

  1. Sorgu düzenleyici metin alanında, yeni bir tablo oluşturmak için aşağıdaki SQL sorgusunu kopyalayıp yapıştırın. Bu sorgu bir DDL ifadesidir.
CREATE OR REPLACE TABLE `stackoverflow.questions_2018` AS
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE creation_date BETWEEN '2018-01-01' AND '2019-01-01';
  1. Çalıştır'ı seçin. Sorgu, projenizdeki stackoverflow veri kümesinde, BigQuery Stack Overflow veri kümesinde bigquery-public-data.stackoverflow.posts_questions sorgu çalıştırmanın sonucu olan verileri içeren yeni bir tablo questions_2018 oluşturur.

2018 Stack Overflow Gönderileriyle Yeni Tabloya Sorgu Uygulama

BigQuery tablosu oluşturduğunuza göre artık soru ve başlıkların yanı sıra yanıt, yorum, görüntüleme ve favori sayısı gibi birkaç istatistikle birlikte Stack Overflow yayınlarını döndüren bir sorgu çalıştırabiliriz. Aşağıdaki adımları tamamlayın:

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.
  2. Sorgu düzenleyici metin alanına aşağıdaki SQL sorgusunu kopyalayıp yapıştırın.
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count 
FROM  `stackoverflow.questions_2018` 
WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01'
AND tags = 'android';
  1. Çalıştır'ı seçin. Sorgu, 2018 yılının Ocak ayında oluşturulan ve android olarak etiketlenen Stack Overflow sorularını, soru ve birkaç istatistikle birlikte döndürür.
  2. BigQuery, varsayılan olarak sorgu sonuçlarını önbelleğe alır. Aynı sorguyu çalıştırdığınızda BigQuery'nin sonuçları önbellekten döndürdüğü için sonuçları döndürmek için çok daha az zaman harcadığını görürsünüz.
  3. Aynı sorguyu tekrar çalıştırın ancak bu kez BigQuery önbelleğe alma özelliği devre dışı bırakılmış olsun. Bölümlenmiş ve kümelenmiş tablolarla performans karşılaştırmasında adil olmak için laboratuvarın geri kalanında önbelleği devre dışı bırakacağız. Bu tablolar sonraki bölümlerde çalıştırılacaktır. Sorgu düzenleyicisinde Diğer'i tıklayın ve Sorgu ayarları'nı seçin. Sorgu ayarları
  4. Önbellek tercihi bölümünde Önbelleğe alınmış sonuçları kullan'ın işaretini kaldırın. Önbelleğe alınmış sonuçlar seçeneği
  5. Sorgu sonuçlarında, sorgunun tamamlanması için geçen süre ve sonuçları elde etmek üzere işlenen veri hacmi gösterilir.

f197b022b4276338.png

5. Bölümlendirilmiş Tablo Oluşturma ve Sorgulama

Önceki bölümde, Stack Overflow herkese açık veri kümesini kullanarak posts_questions tablosundaki verilerle BigQuery'de yeni bir tablo oluşturmuştunuz. Bu veri kümesini, önbelleğe alma devre dışı bırakılmış şekilde sorguladık ve sorgu performansını gözlemledik. Bu bölümde, aynı Stack Overflow herkese açık veri kümesinin posts_questions tablosundan yeni bir bölümlendirilmiş tablo oluşturacak ve sorgu performansını gözlemleyeceksiniz.

Bölümlendirilmiş tablo, verilerinizi yönetmeyi ve sorgulamayı kolaylaştıran bölümler adı verilen segmentlere ayrılmış özel bir tablodur. Genellikle büyük tabloları, veri kullanımı süresini, TIMESTAMP/DATE sütununu veya INTEGER sütununu kullanarak daha küçük bölümlere ayırabilirsiniz. DATE ile bölümlendirilmiş bir tablo oluşturacağız.

Bölümlendirilmiş tablolar hakkında daha fazla bilgiyi burada bulabilirsiniz.

2018 StackOverflow Gönderileriyle Yeni Bir Bölümlendirilmiş Tablo Oluşturma

Mevcut bir tablodaki veya sorgudaki verilerle bölümlendirilmiş bir tablo oluşturmak için 2018 Stackoverflow gönderileri veri kümesini sorgulayıp sonuçları yeni bir tabloya yazacaksınız. Bunun için aşağıdaki adımları tamamlayın:

b9d0ca4df0881f58.png

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.

9ca55f544e8da8bd.png

  1. Sorgu düzenleyici metin alanında, yeni bir tablo oluşturmak için aşağıdaki SQL sorgusunu kopyalayıp yapıştırın. Bu sorgu bir DDL ifadesidir.
CREATE OR REPLACE TABLE `stackoverflow.questions_2018_partitioned` 
PARTITION BY DATE(creation_date) AS
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags
FROM `bigquery-public-data.stackoverflow.posts_questions`
WHERE creation_date BETWEEN '2018-01-01' AND '2019-01-01';
  1. Çalıştır'ı seçin. Sorgu, projenizdeki stackoverflow veri kümesinde questions_2018_partitioned adlı yeni bir tablo oluşturur. Bu tablo, BigQuery Stack Overflow veri kümesinde bigquery-public-data.stackoverflow.posts_questions sorgu çalıştırmanın sonucu olan verileri içerir.

2018 Stack Overflow Gönderileriyle Bölümlendirilmiş Tabloyu Sorgulama

BigQuery bölümleme tablosunu oluşturduğunuza göre, bu kez bölümleme tablosunda aynı sorguyu çalıştırarak Stack Overflow yayınlarını soru ve başlıklarla birlikte yanıt, yorum, görüntüleme ve favori sayısı gibi birkaç istatistikle döndürelim. Aşağıdaki adımları tamamlayın:

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.
  2. Sorgu düzenleyici metin alanına aşağıdaki SQL sorgusunu kopyalayıp yapıştırın.
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count 
FROM  `stackoverflow.questions_2018_partitioned` 
WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01'
AND tags = 'android';
  1. BigQuery önbelleği devre dışı bırakılmışken Çalıştır'ı seçin (BigQuery önbelleğini devre dışı bırakma hakkında bilgi için önceki bölüme bakın). Sorgu, 2018 yılının Ocak ayında oluşturulan ve android olarak etiketlenen Stack Overflow sorularını, soru ve birkaç istatistikle birlikte döndürür.
  2. Sorgu sonuçlarında, sorgunun tamamlanması için geçen süre ve sonuçları elde etmek üzere işlenen veri hacmi gösterilir.

ef01144374069823.png

BigQuery, bölümleri temizlediği (yani yalnızca gerekli bölümleri taradığı) için bölümlendirilmiş tablo içeren sorgunun performansının, bölümlendirilmemiş tablo içeren sorgunun performansından daha iyi olduğunu göreceksiniz. Bu sayede daha az veri işlenir ve sorgu daha hızlı çalışır. Bu, sorgu maliyetlerini ve sorgu performansını optimize eder.

6. Kümelenmiş Tablo Oluşturma ve Sorgulama

Önceki bölümde, Stack Overflow herkese açık veri kümesindeki posts_questions tablosundan alınan verilerle BigQuery'de bölümlendirilmiş bir tablo oluşturmuştunuz. Bu tabloyu önbelleğe alma devre dışı bırakılmış şekilde sorguladık ve sorgu performansını hem bölümlendirilmemiş hem de bölümlendirilmiş tablolarla gözlemledik. Bu bölümde, aynı Stack Overflow herkese açık veri kümesinin posts_questions tablosundan yeni bir kümelenmiş tablo oluşturacak ve sorgu performansını gözlemleyeceksiniz.

BigQuery'de bir tablo kümelendiğinde tablo verileri, tablonun şemasındaki bir veya daha fazla sütunun içeriğine göre otomatik olarak düzenlenir. Belirttiğiniz sütunlar, ilgili verileri birlikte yerleştirmek için kullanılır. Veriler kümelenmiş bir tabloya yazıldığında BigQuery, verileri kümeleme sütunlarındaki değerleri kullanarak sıralar. Bu değerler, verileri BigQuery depolama alanında birden fazla blok halinde düzenlemek için kullanılır. Kümelenmiş sütunların sırası, verilerin sıralama düzenini belirler. Bir tabloya veya belirli bir bölüme yeni veriler eklendiğinde BigQuery, tablonun veya bölümün sıralama özelliğini geri yüklemek için arka planda otomatik olarak yeniden kümeleme gerçekleştirir.

Kümelenmiş tablolarla çalışma hakkında daha fazla bilgiyi burada bulabilirsiniz.

2018 Stack Overflow Gönderileriyle Yeni Bir Kümelenmiş Tablo Oluşturma

Bu bölümde, sorgu erişim kalıbına göre creation_date üzerinde bölümlendirilmiş ve tags sütununda kümelenmiş yeni bir tablo oluşturacaksınız. Mevcut bir tablodaki veya sorgudaki verilerle kümelenmiş bir tablo oluşturmak için aşağıdaki adımları uygulayarak 2018 Stack Overflow gönderileri tablosunu sorgulayıp sonuçları yeni bir tabloya yazacaksınız:

e7d9acc0dc3b9d79.png

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.

9ca55f544e8da8bd.png

  1. Sorgu düzenleyici metin alanında, yeni bir tablo oluşturmak için aşağıdaki SQL sorgusunu kopyalayıp yapıştırın. Bu sorgu bir DDL ifadesidir.
#standardSQL
CREATE OR REPLACE TABLE `stackoverflow.questions_2018_clustered`
PARTITION BY
  DATE(creation_date)
CLUSTER BY
  tags AS
SELECT
  id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags
FROM
  `bigquery-public-data.stackoverflow.posts_questions`
WHERE
  creation_date BETWEEN '2018-01-01' AND '2019-01-01';
  1. Çalıştır'ı seçin. Sorgu, projenizdeki stackoverflow veri kümesinde questions_2018_clustered adlı yeni bir tablo oluşturur. Bu tablo, BigQuery Stack Overflow tablosunda bigquery-public-data.stackoverflow.posts_questions sorgu çalıştırılmasıyla elde edilen verileri içerir. Yeni tablo, creation_date üzerinde bölümlendirilmiş ve etiketler sütununda kümelenmiştir.

2018 Stack Overflow Yayınlarını İçeren Kümelenmiş Tabloyu Sorgulama

BigQuery kümelenmiş bir tablo oluşturduğunuza göre, bu kez bölümleme ve kümeleme uygulanmış tabloda aynı sorguyu tekrar çalıştırarak Stack Overflow'daki soruları ve başlıkları içeren gönderileri, yanıt sayısı, yorum sayısı, görüntüleme sayısı ve favori sayısı gibi diğer bazı istatistiklerle birlikte döndürelim. Aşağıdaki adımları tamamlayın:

  1. GCP Console'un sağ üst tarafına yakın yerde bulunan Yeni sorgu oluştur'u seçin.
  2. Sorgu düzenleyici metin alanına aşağıdaki SQL sorgusunu kopyalayıp yapıştırın.
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count 
FROM  `stackoverflow.questions_2018_clustered` 
WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01'
AND tags = 'android';
  1. BigQuery önbelleği devre dışı bırakılmışken Çalıştır'ı seçin (BigQuery önbelleğini devre dışı bırakma hakkında bilgi için önceki bölüme bakın). Sorgu, 2018 yılının Ocak ayında oluşturulan ve android olarak etiketlenen Stack Overflow sorularını, soru ve birkaç istatistikle birlikte döndürür.
  2. Sorgu sonuçlarında, sorgunun tamamlanması için geçen süre ve sonuçları elde etmek üzere işlenen veri hacmi gösterilir.

85e3c30d6fb3d547.png

Bölümlendirilmiş ve kümelenmiş bir tabloda sorgu, bölümlendirilmiş bir tabloya veya bölümlendirilmemiş bir tabloya kıyasla daha az veri taradı. Verilerin bölümlendirme ve kümeleme ile düzenlenme şekli, yuva çalışanları tarafından taranan veri miktarını en aza indirerek sorgu performansını artırır ve maliyetleri optimize eder.

7. Temizleme

stackoverflow veri kümenizle çalışmaya devam etmeyi planlamıyorsanız bu veri kümesini ve bu codelab için oluşturduğunuz projeyi silmeniz gerekir.

BigQuery veri kümesini silme

BigQuery veri kümesini silmek için aşağıdaki adımları uygulayın:

  1. BigQuery'deki sol gezinme panelinden stackoverflow veri kümesini seçin .
  2. Ayrıntılar panelinde Veri kümesini sil'i seçin. 67b0f5cb740cb2ec.png
  3. Veri kümesini sil iletişim kutusunda stackoverflow yazın ve veri kümesini silmek istediğinizi onaylamak için Sil'i seçin.

Projeyi silme

Bu codelab için oluşturduğunuz GCP projesini silmek üzere aşağıdaki adımları uygulayın:

  1. GCP gezinme menüsünde IAM & Admin'i (IAM ve Yönetici) seçin.
  2. Gezinme panelinde Ayarlar'ı seçin.
  3. Ayrıntılar panelinde, mevcut projenizin bu codelab için oluşturduğunuz proje olduğunu onaylayın ve Kapat'ı seçin.
  4. Projeyi kapat iletişim kutusunda projenizin proje kimliğini (proje adı değil) girin ve onaylamak için Kapat'ı seçin.

Tebrikler! Bu videoda

  • Mevcut tablolardan yeni bir tablo oluşturmak için BigQuery web kullanıcı arayüzünü kullanma
  • Bölümlendirilmiş ve kümelenmiş tablolar oluşturma ve sorgulama
  • Bölümlendirme ve kümeleme, sorgu performansını ve maliyetleri nasıl optimize eder?

Veri kümeleriyle çalışmak için kümeleri ayarlamanız veya yönetmeniz gerekmediğini unutmayın.