Ana Google BigQuery özelliklerine genel bakış — pazarlama analizi için istek yazma alıştırması yapın

Yayınlanan: 2022-04-12

Bir işletme ne kadar çok bilgi biriktirirse, nerede saklanacağı sorusu o kadar keskin olur. Kendi sunucularınızın bakımını yapma yeteneğiniz veya isteğiniz yoksa, Google BigQuery (GBQ) size yardımcı olabilir. BigQuery, büyük verilerle çalışmak için hızlı, uygun maliyetli ve ölçeklenebilir depolama sağlar ve SQL benzeri sözdiziminin yanı sıra standart ve kullanıcı tanımlı işlevleri kullanarak sorgular yazmanıza olanak tanır.

Bu makalede, BigQuery'nin ana işlevlerine bakıyoruz ve belirli örnekler kullanarak olanaklarını gösteriyoruz. Temel sorguları nasıl yazacağınızı ve bunları demo verilerinde nasıl test edeceğinizi öğreneceksiniz.

Teknik eğitim veya SQL bilgisi olmadan GBQ verileriyle ilgili raporlar oluşturun.

Reklam kampanyaları hakkında düzenli olarak raporlara ihtiyacınız var, ancak SQL çalışmak veya analistlerinizden yanıt beklemek için zamanınız yok mu? OWOX BI ile verilerinizin nasıl yapılandırıldığını anlamanıza gerek kalmadan raporlar oluşturabilirsiniz. Akıllı Veri raporunuzda görmek istediğiniz parametreleri ve metrikleri seçmeniz yeterlidir. OWOX BI Smart Data, verilerinizi anlayabileceğiniz şekilde anında görselleştirecektir.

OWOX BI'YI ÜCRETSİZ DENEYİN

İçindekiler

  • SQL nedir ve BigQuery hangi lehçeleri destekler?
  • nereden başlamalı
  • Google BigQuery özellikleri
  • Toplama işlevleri
  • Tarih fonksiyonları
  • dize işlevleri
  • Pencere fonksiyonları
  • Sonuçlar

SQL nedir ve BigQuery hangi lehçeleri destekler?

Yapılandırılmış Sorgu Dili (SQL), büyük dizilerdeki verileri almanıza, bunlara veri eklemenize ve bu dizilerdeki verileri değiştirmenize olanak tanır. Google BigQuery, iki SQL lehçesini destekler: Standart SQL ve güncelliğini yitirmiş Eski SQL.

Hangi lehçeyi seçeceğiniz tercihlerinize bağlıdır, ancak Google, şu avantajlar için Standart SQL kullanmanızı önerir:

  • İç içe geçmiş ve yinelenen alanlar için esneklik ve işlevsellik
  • Tablolardaki verileri değiştirmenize ve GBQ'daki tabloları ve görünümleri yönetmenize olanak tanıyan DML ve DDL dilleri için destek
  • Eski SQL'e kıyasla büyük miktarda verinin daha hızlı işlenmesi
  • Gelecekteki tüm BigQuery güncellemeleri için destek

BigQuery belgelerinde lehçe farklılıkları hakkında daha fazla bilgi edinebilirsiniz.

Ayrıca bkz: Google BigQuery'nin yeni Standart SQL lehçesinin Eski SQL'e göre avantajları nelerdir ve bununla hangi iş görevlerini çözebilirsiniz?

MAKALEYİ OKU

Varsayılan olarak, Google BigQuery sorguları Eski SQL üzerinde çalışır.

Standart SQL'e birkaç şekilde geçebilirsiniz:

  1. BigQuery arayüzünde, sorgu düzenleme penceresinde, Seçenekleri Göster'i seçin ve Eski SQL Kullan seçeneğinin yanındaki onay işaretini kaldırın:
BigQuery arayüzü
  1. Sorgulamadan önce #standartSQL satırını ekleyin ve sorgunuzu yeni bir satırla başlatın:
#standartSQL satırını ekleyin

nereden başlamalı

Bizimle pratik yapıp sorguları çalıştırabilmeniz için, demo verileri içeren bir tablo hazırladık. Aşağıdaki formu doldurun, size e-posta ile gönderelim.

okuyucular için bonus

SQL sorguları uygulaması için demo verileri

Şimdi indir

Başlamak için demo veri tablonuzu indirin ve Google BigQuery projenize yükleyin. Bunu yapmanın en kolay yolu OWOX BI BigQuery Reports eklentisidir.

  1. Google E-Tablolar'ı açın ve OWOX BI BigQuery Reports eklentisini yükleyin.
  2. İndirdiğiniz, demo verilerini içeren tabloyu açın ve OWOX BI BigQuery Raporları -> Verileri BigQuery'ye Yükle'yi seçin:
OWOX BI BigQuery Raporları
  1. Açılan pencerede, bir veri seti olan Google BigQuery projenizi seçin ve yüklenen verilerin depolanacağı tablo için bir isim düşünün.
  2. Yüklenen veriler için bir biçim belirtin (ekran görüntüsünde gösterildiği gibi):
demo tablo

Google BigQuery'de bir projeniz yoksa bir tane oluşturun. Bunu yapmak için Google Cloud Platform'da etkin bir faturalandırma hesabına ihtiyacınız olacak. Bir banka kartı bağlamanız gerekmesi sizi korkutmasın: Bilginiz dışında sizden herhangi bir ücret alınmayacaktır. Ayrıca, kayıt olduğunuzda, 12 ay boyunca veri depolama ve işleme için harcayabileceğiniz 300$ alacaksınız.

OWOX BI, farklı sistemlerden gelen verileri BigQuery'de birleştirmenize yardımcı olur: web sitenizdeki kullanıcı eylemleri, aramalar, CRM'nizden gelen siparişler, e-postalar, reklam maliyetleri hakkındaki veriler. Gelişmiş analitiği özelleştirmek ve her türlü karmaşıklığa ilişkin raporları otomatikleştirmek için OWOX BI'ı kullanabilirsiniz.

DEMO ALIN

Google BigQuery özelliklerinden bahsetmeden önce, hem Eski SQL hem de Standart SQL lehçelerinde temel sorguların nasıl göründüğünü hatırlayalım:

Sorgu Eski SQL standart SQL
Tablodan alanları seçin SEÇ alan​1, alan2 SEÇ alan​1, alan2
Alanların seçileceği bir tablo seçin [proje kimliği:dataSet.tableName] "projectID.dataSet.tableName"den
Değerlerin filtreleneceği parametreyi seçin NEREDE alan 1=değer NEREDE alan 1​=değer
Sonuçların gruplanacağı alanları seçin GROUP BY alan​1, alan2 GROUP BY alan​1, alan2
Sonuçların nasıl sipariş edileceğini seçin SİPARİŞ BY alan1 ASC (artan) veya DESC (azalan) SİPARİŞ BY alan1 ASC (artan) veya DESC (azalan)

Google BigQuery özellikleri

Sorgular oluştururken en sık olarak toplama , tarih, dize ve pencere işlevlerini kullanırsınız. Bu işlev gruplarının her birine daha yakından bakalım.

Ayrıca bkz.: Bulut depolama ile çalışmaya nasıl başlanır — bir veri kümesi ve tablolar oluşturun ve verilerin Google BigQuery'ye aktarılmasını yapılandırın.

MAKALEYİ OKU

Toplama işlevleri

Toplama işlevleri, tüm tablo için özet değerler sağlar. Örneğin, ortalama çek boyutunu veya aylık toplam geliri hesaplamak için bunları kullanabilir veya maksimum sayıda satın alma gerçekleştiren kullanıcı segmentini seçmek için kullanabilirsiniz.

Bunlar en popüler toplama işlevleridir:

Eski SQL standart SQL fonksiyon ne işe yarar
AVG(alan) AVG([DISTINCT] (alan)) Alan sütununun ortalama değerini döndürür. Standart SQL'de, bir DISTINCT koşulu eklediğinizde, yalnızca alan sütununda benzersiz (tekrarlanmayan) değerlere sahip satırlar için ortalama dikkate alınır.
MAKS(alan) MAKS(alan) Alan sütunundan maksimum değeri döndürür.
MIN(alan) MIN(alan) Alan sütunundaki minimum değeri döndürür.
TOPLA(alan) TOPLA(alan) Alan sütunundaki değerlerin toplamını döndürür.
COUNT(alan) COUNT(alan) Alan sütunundaki satır sayısını döndürür.
EXACT_COUNT_DISTINCT(alan) COUNT([DISTINCT] (alan)) Alan sütunundaki benzersiz satırların sayısını döndürür.

Tüm toplu işlevlerin listesi için Eski SQL ve Standart SQL belgelerine bakın.

Bu işlevlerin nasıl çalıştığını görmek için demo verilerine bakalım. İşlemler için ortalama geliri, en yüksek ve en düşük tutarlar için satın almaları, toplam geliri, toplam işlemleri ve benzersiz işlem sayısını (satın almaların tekrarlanıp tekrarlanmadığını kontrol etmek için) hesaplayabiliriz. Bunun için Google BigQuery projemizin adını, veri setini ve tabloyu belirttiğimiz bir sorgu yazacağız.

#eski SQL

    SELECT AVG(revenue) as average_revenue, MAX(revenue) as max_revenue, MIN(revenue) as min_revenue, SUM(revenue) as whole_revenue, COUNT(transactionId) as transactions, EXACT_COUNT_DISTINCT(transactionId) as unique_transactions FROM [owox-analytics:t_kravchenko.Demo_data]
SELECT AVG(revenue) as average_revenue, MAX(revenue) as max_revenue, MIN(revenue) as min_revenue, SUM(revenue) as whole_revenue, COUNT(transactionId) as transactions, EXACT_COUNT_DISTINCT(transactionId) as unique_transactions FROM [owox-analytics:t_kravchenko.Demo_data]

#standart SQL

    SELECT AVG(revenue) as average_revenue, MAX(revenue) as max_revenue, MIN(revenue) as min_revenue, SUM(revenue) as whole_revenue, COUNT(transactionId) as transactions, COUNT(DISTINCT(transactionId)) as unique_transactions FROM `owox-analytics.t_kravchenko.Demo_data`
SELECT AVG(revenue) as average_revenue, MAX(revenue) as max_revenue, MIN(revenue) as min_revenue, SUM(revenue) as whole_revenue, COUNT(transactionId) as transactions, COUNT(DISTINCT(transactionId)) as unique_transactions FROM `owox-analytics.t_kravchenko.Demo_data`

Sonuç olarak, aşağıdakileri alacağız:

Sonuçlar

Bu hesaplamaların sonuçlarını, standart Google E-Tablolar işlevlerini (SUM, AVG ve diğerleri) veya özet tabloları kullanarak demo verileriyle orijinal tabloda kontrol edebilirsiniz.

Yukarıdaki ekran görüntüsünden de görebileceğiniz gibi, işlem sayısı ve benzersiz işlem sayısı farklıdır. Bu, tablomuzda aynı işlem kimliğine sahip iki işlem olduğunu gösterir:

İşlem Kimliği

Benzersiz işlemlerle ilgileniyorsanız, benzersiz dizeleri sayan bir işlev kullanın. Alternatif olarak, toplama işlevini uygulamadan önce yinelenenlerden kurtulmak için GROUP BY işlevini kullanarak verileri gruplayabilirsiniz.

okuyucular için bonus

SQL sorguları uygulaması için demo verileri

Şimdi indir

Tarih fonksiyonları

Bu işlevler, tarihleri ​​işlemenize olanak tanır: biçimlerini değiştirin, gerekli alanı seçin (gün, ay veya yıl) veya tarihi belirli bir aralıkta kaydırın.

Şu durumlarda faydalı olabilirler:

  • gelişmiş analitik kurmak için farklı kaynaklardan tarihleri ​​ve saatleri tek bir biçime dönüştürmek
  • otomatik olarak güncellenen raporlar oluşturmak veya postaları tetiklemek (örneğin, son iki saat, hafta veya ay için verilere ihtiyacınız olduğunda)
  • günler, haftalar veya aylar için veri elde etmenin gerekli olduğu kohort raporları oluşturmak

Bunlar en sık kullanılan tarih işlevleridir:

Eski SQL standart SQL İşlev açıklaması
GEÇERLİ TARİH() GEÇERLİ TARİH() Geçerli tarihi % YYYY -% MM-% DD biçiminde döndürür.
DATE(zaman damgası) DATE(zaman damgası) Tarihi % YYYY -% MM-% DD% H:% M:% C.'den % YYYY -% MM-% DD biçimine dönüştürür.
DATE_ADD(zaman damgası, aralık, aralık_birimleri) DATE_ADD(zaman damgası, ARALIK aralığı aralık_birimleri) Belirtilen aralık aralığı kadar artırarak zaman damgası tarihini döndürür.interval_units.Eski SQL'de YIL, AY, GÜN, SAAT, DAKİKA ve SECOND değerlerini alabilir ve Standart SQL'de YIL, ÇEYREK, AY, HAFTA ve GÜN.
DATE_ADD(zaman damgası, - aralık, aralık_birimleri) DATE_SUB(zaman damgası, ARALIK aralığı aralık_birimleri) Belirtilen aralığa göre azaltarak zaman damgası tarihini döndürür.
DATEDIFF(zaman damgası1, zaman damgası2) DATE_DIFF(zaman damgası1, zaman damgası2, tarih_bölümü) Zaman damgası1 ve zaman damgası2 tarihleri ​​arasındaki farkı döndürür. Eski SQL'de farkı gün olarak, Standart SQL'de ise belirtilen tarih_bölümü değerine (gün, hafta, ay, çeyrek, yıl) bağlı olarak farkı döndürür.
GÜN(zaman damgası) ÖZET(zaman damgasından BAŞLANGIÇ GÜNÜ) Zaman damgası tarihinden itibaren günü döndürür. 1'den 31'e kadar değerler alır.
MONTH(zaman damgası) ÖZET(zaman damgasından AY) Zaman damgası tarihinden itibaren ay sıra numarasını döndürür. 1'den 12'ye kadar değerler alır.
YIL(zaman damgası) ÖZET(zaman damgasından itibaren YIL) Zaman damgası tarihinden itibaren yılı döndürür.

Tüm tarih işlevlerinin listesi için Eski SQL ve Standart SQL belgelerine bakın.

Bu işlevlerin her birinin nasıl çalıştığını görmek için demo verilerimize bir göz atalım. Örneğin, geçerli tarihi alacağız, orijinal tablodaki tarihi % YYYY -% MM-% GG formatına çevireceğiz, alıp bir gün ekleyeceğiz. Ardından, kaynak tablodan geçerli tarih ile tarih arasındaki farkı hesaplayacağız ve geçerli tarihi ayrı yıl, ay ve gün alanlarına böleceğiz. Bunu yapmak için aşağıdaki örnek sorguları kopyalayabilir ve proje adını, veri kümesini ve veri tablosunu kendi sorgunuzla değiştirebilirsiniz.

#eski SQL

    SELECT CURRENT_DATE() AS today, DATE( date_UTC ) AS date_UTC_in_YYYYMMDD, DATE_ADD( date_UTC,1, 'DAY') AS date_UTC_plus_one_day, DATE_ADD( date_UTC,-1, 'DAY') AS date_UTC_minus_one_day, DATEDIFF(CURRENT_DATE(), date_UTC ) AS difference_between_date, DAY( CURRENT_DATE() ) AS the_day, MONTH( CURRENT_DATE()) AS the_month, YEAR( CURRENT_DATE()) AS the_year FROM [owox-analytics:t_kravchenko.Demo_data]
SELECT CURRENT_DATE() AS today, DATE( date_UTC ) AS date_UTC_in_YYYYMMDD, DATE_ADD( date_UTC,1, 'DAY') AS date_UTC_plus_one_day, DATE_ADD( date_UTC,-1, 'DAY') AS date_UTC_minus_one_day, DATEDIFF(CURRENT_DATE(), date_UTC ) AS difference_between_date, DAY( CURRENT_DATE() ) AS the_day, MONTH( CURRENT_DATE()) AS the_month, YEAR( CURRENT_DATE()) AS the_year FROM [owox-analytics:t_kravchenko.Demo_data]

#standart SQL

    SELECT today, date_UTC_in_YYYYMMDD, DATE_ADD( date_UTC_in_YYYYMMDD, INTERVAL 1 DAY) AS date_UTC_plus_one_day, DATE_SUB( date_UTC_in_YYYYMMDD,INTERVAL 1 DAY) AS date_UTC_minus_one_day, DATE_DIFF(today, date_UTC_in_YYYYMMDD, DAY) AS difference_between_date, EXTRACT(DAY FROM today ) AS the_day, EXTRACT(MONTH FROM today ) AS the_month, EXTRACT(YEAR FROM today ) AS the_year FROM ( SELECT CURRENT_DATE() AS today, DATE( date_UTC ) AS date_UTC_in_YYYYMMDD FROM `owox-analytics.t_kravchenko.Demo_data`)
SELECT today, date_UTC_in_YYYYMMDD, DATE_ADD( date_UTC_in_YYYYMMDD, INTERVAL 1 DAY) AS date_UTC_plus_one_day, DATE_SUB( date_UTC_in_YYYYMMDD,INTERVAL 1 DAY) AS date_UTC_minus_one_day, DATE_DIFF(today, date_UTC_in_YYYYMMDD, DAY) AS difference_between_date, EXTRACT(DAY FROM today ) AS the_day, EXTRACT(MONTH FROM today ) AS the_month, EXTRACT(YEAR FROM today ) AS the_year FROM ( SELECT CURRENT_DATE() AS today, DATE( date_UTC ) AS date_UTC_in_YYYYMMDD FROM `owox-analytics.t_kravchenko.Demo_data`)

Sorguyu çalıştırdıktan sonra şu raporu alacaksınız:

rapor

Ayrıca bkz.: Google BigQuery'deki veriler üzerinde SQL sorguları kullanılarak oluşturulabilecek rapor örnekleri ve Google Analytics verilerini OWOX BI ile tamamlayabileceğiniz benzersiz metrikler.

MAKALEYİ OKU

dize işlevleri

Dize işlevleri, bir dize oluşturmanıza, alt dizeleri seçip değiştirmenize ve orijinal dizedeki bir dizenin uzunluğunu ve alt dizenin dizin dizisini hesaplamanıza olanak tanır. Örneğin, dize işlevleriyle şunları yapabilirsiniz:

  • sayfa URL'sine iletilen UTM etiketleriyle bir raporu filtreleyin
  • kaynak ve kampanya adları farklı kayıtlarda yazılmışsa verileri tek bir formata getirin
  • bir rapordaki yanlış verileri değiştirin (örneğin, kampanya adı yanlış basılmışsa)

Dizelerle çalışmak için en popüler işlevler şunlardır:

Eski SQL standart SQL İşlev açıklaması
CONCAT('str1', 'str2') veya 'str1'+ 'str2' BİRLEŞTİR('str1', 'str2') 'str1' ve 'str2'yi tek bir dizgede birleştirir.
'str1' 'str2' İÇERİR REGEXP_CONTAINS('str1', 'str2') veya 'str1' GİBİ '%str2%' 'str1' dizesi 'str2' dizesini içeriyorsa true döndürür.' Standart SQL'de, 'str2' dizesi re2 kitaplığı kullanılarak normal bir ifade olarak yazılabilir.
UZUNLUK('str' ) CHAR_LENGTH('str' )veya CHARACTER_LENGTH('str' ) 'str' dizesinin uzunluğunu (karakter sayısı) döndürür.
SUBSTR('str', dizin [, max_len]) SUBSTR('str', dizin [, max_len]) 'str' dizesinden bir dizin karakteriyle başlayan max_len uzunluğunda bir alt dize döndürür.
LOWER('str') LOWER('str') 'str' dizesindeki tüm karakterleri küçük harfe dönüştürür.
ÜST(str) ÜST(str) 'str' dizesindeki tüm karakterleri büyük harfe dönüştürür.
INSTR('str1', 'str2') STRPOS('str1', 'str2') 'str2' dizesinin ilk oluşumunun dizinini 'str1' dizesine döndürür; aksi halde 0 döndürür.
DEĞİŞTİR('str1', 'str2', 'str3') DEĞİŞTİR('str1', 'str2', 'str3') 'str1'i 'str2' ile 'str3' ile değiştirir.

Eski SQL ve Standart SQL belgelerinde tüm dize işlevleri hakkında daha fazla bilgi edinebilirsiniz.

Açıklanan işlevlerin nasıl kullanılacağını görmek için demo verilerine bakalım. Gün, ay ve yıl değerlerini içeren üç ayrı sütunumuz olduğunu varsayalım:

demo tablo

Bu biçimde bir tarihle çalışmak pek uygun değildir, bu nedenle değerleri tek bir sütunda birleştirebiliriz. Bunu yapmak için aşağıdaki SQL sorgularını kullanın ve projenizin, veri kümenizin ve tablonuzun adını Google BigQuery'de değiştirmeyi unutmayın.

#eski SQL

    SELECT CONCAT(the_day,'-',the_month,'-',the_year) AS mix_string1 FROM ( SELECT 31 AS the_day, 12 AS the_month, 2018 AS the_year FROM [owox-analytics:t_kravchenko.Demo_data]) GROUP BY mix_string1
SELECT CONCAT(the_day,'-',the_month,'-',the_year) AS mix_string1 FROM ( SELECT 31 AS the_day, 12 AS the_month, 2018 AS the_year FROM [owox-analytics:t_kravchenko.Demo_data]) GROUP BY mix_string1

#standart SQL

    SELECT CONCAT(the_day,'-',the_month,'-',the_year) AS mix_string1 FROM ( SELECT 31 AS the_day, 12 AS the_month, 2018 AS the_year FROM owox-analytics.t_kravchenko.Demo_data) GROUP BY mix_string1
SELECT CONCAT(the_day,'-',the_month,'-',the_year) AS mix_string1 FROM ( SELECT 31 AS the_day, 12 AS the_month, 2018 AS the_year FROM owox-analytics.t_kravchenko.Demo_data) GROUP BY mix_string1

Sorguyu çalıştırdıktan sonra tarihi bir sütunda alırız:

demo tablo

Genellikle, bir web sitesinde bir sayfa indirdiğinizde, URL, kullanıcının seçtiği değişkenlerin değerlerini kaydeder. Bu bir ödeme veya teslimat yöntemi, işlem numarası, alıcının ürünü almak istediği fiziksel mağazanın indeksi vb. olabilir. Bir SQL sorgusu kullanarak bu parametreleri sayfa adresinden seçebilirsiniz. Bunu nasıl ve neden yapabileceğinize dair iki örnek düşünün.

Örnek 1 . Kullanıcıların fiziksel mağazalardan mal aldığı satın alma sayısını bilmek istediğimizi varsayalım. Bunu yapmak için, URL'deki shop_id alt dizesini (fiziksel bir mağaza için bir dizin) içeren sayfalardan gönderilen işlemlerin sayısını hesaplamamız gerekir. Bunu aşağıdaki sorgularla yapabiliriz:

#eski SQL

    SELECT COUNT(transactionId) AS transactions, check FROM ( SELECT transactionId, page CONTAINS 'shop_id' AS check FROM [owox-analytics:t_kravchenko.Demo_data]) GROUP BY check
SELECT COUNT(transactionId) AS transactions, check FROM ( SELECT transactionId, page CONTAINS 'shop_id' AS check FROM [owox-analytics:t_kravchenko.Demo_data]) GROUP BY check

#standart SQL

    SELECT COUNT(transactionId) AS transactions, check1, check2 FROM ( SELECT transactionId, REGEXP_CONTAINS( page, 'shop_id') AS check1, page LIKE '%shop_id%' AS check2 FROM `owox-analytics.t_kravchenko.Demo_data`) GROUP BY check1, check2
SELECT COUNT(transactionId) AS transactions, check1, check2 FROM ( SELECT transactionId, REGEXP_CONTAINS( page, 'shop_id') AS check1, page LIKE '%shop_id%' AS check2 FROM `owox-analytics.t_kravchenko.Demo_data`) GROUP BY check1, check2

Ortaya çıkan tablodan, shop_id içeren sayfalardan 5502 işlemin (check = true) gönderildiğini görüyoruz:

demo tablo

Örnek 2 . Her teslimat yöntemine bir teslimat_kimliği atadınız ve bu parametrenin değerini sayfa URL'sinde belirttiniz. Kullanıcının hangi teslimat yöntemini seçtiğini öğrenmek için ayrı bir sütunda teslimat_kimliğini seçmeniz gerekir.

Bunun için aşağıdaki sorguları kullanabiliriz:

#eski SQL

    SELECT page_lower_case, page_length, index_of_delivery_id, selected_delivery_id, REPLACE(selected_delivery_id, 'selected_delivery_id=', '') as delivery_id FROM ( SELECT page_lower_case, page_length, index_of_delivery_id, SUBSTR(page_lower_case, index_of_delivery_id) AS selected_delivery_id FROM ( SELECT page_lower_case, LENGTH(page_lower_case) AS page_length, INSTR(page_lower_case, 'selected_delivery_id') AS index_of_delivery_id FROM ( SELECT LOWER( page) AS page_lower_case, UPPER( page) AS page_upper_case FROM [owox-analytics:t_kravchenko.Demo_data]))) ORDER BY page_lower_case ASC
SELECT page_lower_case, page_length, index_of_delivery_id, selected_delivery_id, REPLACE(selected_delivery_id, 'selected_delivery_id=', '') as delivery_id FROM ( SELECT page_lower_case, page_length, index_of_delivery_id, SUBSTR(page_lower_case, index_of_delivery_id) AS selected_delivery_id FROM ( SELECT page_lower_case, LENGTH(page_lower_case) AS page_length, INSTR(page_lower_case, 'selected_delivery_id') AS index_of_delivery_id FROM ( SELECT LOWER( page) AS page_lower_case, UPPER( page) AS page_upper_case FROM [owox-analytics:t_kravchenko.Demo_data]))) ORDER BY page_lower_case ASC

#standart SQL

    SELECT page_lower_case, page_length, index_of_delivery_id, selected_delivery_id, REPLACE(selected_delivery_id, 'selected_delivery_id=', '') AS delivery_id FROM ( SELECT page_lower_case, page_length, index_of_delivery_id, SUBSTR(page_lower_case, index_of_delivery_id) AS selected_delivery_id FROM ( SELECT page_lower_case, CHAR_LENGTH(page_lower_case) AS page_length, STRPOS(page_lower_case, 'selected_delivery_id') AS index_of_delivery_id FROM ( SELECT LOWER( page) AS page_lower_case, UPPER( page) AS page_upper_case FROM `owox-analytics.t_kravchenko.Demo_data`))) ORDER BY page_lower_case ASC
SELECT page_lower_case, page_length, index_of_delivery_id, selected_delivery_id, REPLACE(selected_delivery_id, 'selected_delivery_id=', '') AS delivery_id FROM ( SELECT page_lower_case, page_length, index_of_delivery_id, SUBSTR(page_lower_case, index_of_delivery_id) AS selected_delivery_id FROM ( SELECT page_lower_case, CHAR_LENGTH(page_lower_case) AS page_length, STRPOS(page_lower_case, 'selected_delivery_id') AS index_of_delivery_id FROM ( SELECT LOWER( page) AS page_lower_case, UPPER( page) AS page_upper_case FROM `owox-analytics.t_kravchenko.Demo_data`))) ORDER BY page_lower_case ASC

Sonuç olarak, Google BigQuery'de şöyle bir tablo elde ederiz:

demo tablo
okuyucular için bonus

SQL sorguları uygulaması için demo verileri

Şimdi indir

Pencere fonksiyonları

Bu işlevler, yukarıda tartıştığımız toplu işlevlere benzer. Temel fark, pencere işlevlerinin, sorgu kullanılarak seçilen tüm veri kümesi üzerinde hesaplamalar yapmaması, ancak bu verilerin yalnızca bir kısmı üzerinde (bir alt küme veya pencere ) hesaplama yapmasıdır.

Pencere işlevlerini kullanarak, birden çok sorguyu birleştirmek için JOIN işlevini kullanmadan verileri bir grup bölümünde toplayabilirsiniz. Örneğin, reklam kampanyası başına ortalama geliri veya cihaz başına işlem sayısını hesaplayabilirsiniz. Rapora bir alan daha ekleyerek, örneğin Kara Cuma günü bir reklam kampanyasından elde edilen gelirin payını veya bir mobil uygulamadan yapılan işlemlerin payını kolayca öğrenebilirsiniz.

Sorgudaki her işlevle birlikte, pencere sınırlarını tanımlayan OVER ifadesini hecelemelisiniz. OVER, birlikte çalışabileceğiniz üç bileşen içerir:

  • BÖLÜM BY — Orijinal verileri clientId veya DayTime gibi alt kümelere böldüğünüz özelliği tanımlar.
  • ORDER BY — Saat DESC gibi bir alt kümedeki satırların sırasını tanımlar
  • PENCERE ÇERÇEVESİ — Belirli bir özelliğin alt kümesindeki satırları işlemenize olanak tanır (örneğin, geçerli satırdan yalnızca beş satır önce)

Bu tabloda, en sık kullanılan pencere işlevlerini topladık:

Eski SQL standart SQL İşlev açıklaması
AVG(alan)
COUNT(alan)
COUNT(FARKLI alan)
MAKS()
MIN()
TOPLA()
AVG([DISTINCT] (alan))
COUNT(alan)
COUNT([DISTINCT] (alan))
MAKS(alan)
MIN(alan)
TOPLA(alan)
Seçili altküme içindeki alan sütunundan ortalama, sayı, maksimum, minimum ve toplam değeri döndürür.DISTINCT, yalnızca benzersiz (tekrarlanmayan) değerleri hesaplamak için kullanılır.
DENSE_RANK() DENSE_RANK() Bir alt küme içindeki satır numarasını döndürür.
FIRST_VALUE(alan) FIRST_VALUE (alan[{SAYGI | IGNORE} NULLS]) Bir alt küme içindeki alan sütunundan ilk satırın değerini döndürür. Varsayılan olarak, alan sütunundaki boş değerlere sahip satırlar hesaplamaya dahil edilir. RESPECT veya IGNORE NULLS, NULL dizelerin dahil edilip edilmeyeceğini belirtir.
LAST_VALUE(alan) LAST_VALUE (alan [{SAYGI | IGNORE} NULLS]) Alan sütunundaki bir alt küme içindeki son satırın değerini döndürür.Varsayılan olarak, alan sütununda boş değerlere sahip satırlar hesaplamaya dahil edilir. RESPECT veya IGNORE NULLS, NULL dizelerin dahil edilip edilmeyeceğini belirtir.
GECİKME(alan) LAG (alan[, offset [, default_expression]]) Alt küme içindeki geçerli alan sütununa göre önceki satırın değerini döndürür.Offset, geçerli satırdan aşağı kaydırılacak satır sayısını belirten bir tamsayıdır.Varsayılan_ifade, gerekli değilse işlevin döndüreceği değerdir. alt küme içindeki dize.
KURŞUN(alan) KURŞUN (alan[, offset [, default_expression]]) Alt küme içindeki geçerli alan sütununa göre sonraki satırın değerini döndürür. Ofset, geçerli satıra göre yukarı taşımak istediğiniz satır sayısını tanımlayan bir tamsayıdır.Varsayılan_ifade, geçerli altkümede gerekli bir dize yoksa işlevin döndüreceği değerdir.

Eski SQL ve Standart SQL belgelerinde tüm toplu analitik işlevlerin ve gezinme işlevlerinin bir listesini görebilirsiniz.

Örnek 1 . Diyelim ki müşterilerin mesai saatleri ve mesai saatleri dışındaki aktivitelerini analiz etmek istiyoruz. Bunu yapmak için işlemleri iki gruba ayırmamız ve ilgilenilen metrikleri hesaplamamız gerekiyor:

  • Grup 1 — Çalışma saatleri içinde 9:00 - 18:00 arası satın almalar
  • 2. Grup — 00:00 - 9:00 ve 18:00 - 23:59 saatleri arasındaki satın almalar

Çalışma ve çalışma dışı saatlere ek olarak, bir pencere oluşturmak için başka bir değişken de clientId'dir. Yani, her kullanıcı için iki penceremiz olacak:

pencere Müşteri Kimliği Gündüz
pencere 1 müşteri kimliği 1 çalışma saatleri
pencere 2 müşteri kimliği 2 çalışma dışı saatler
pencere 3 müşteri kimliği 3 çalışma saatleri
pencere 4 müşteri kimliği 4 çalışma dışı saatler
N penceresi müşteri kimliği N çalışma saatleri
pencere N+1 müşteri kimliği N+1 çalışma dışı saatler

Çalışma ve çalışma saatleri dışında ortalama, maksimum, minimum ve toplam geliri, toplam işlem sayısını ve kullanıcı başına benzersiz işlem sayısını hesaplamak için demo verilerini kullanalım. Aşağıdaki istekler bunu yapmamıza yardımcı olacaktır.

#eski SQL

    SELECT date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions FROM ( SELECT date, clientId, DayTime, AVG(revenue) OVER (PARTITION BY date, clientId, DayTime) AS avg_revenue, MAX(revenue) OVER (PARTITION BY date, clientId, DayTime) AS max_revenue, MIN(revenue) OVER (PARTITION BY date, clientId, DayTime) AS min_revenue, SUM(revenue) OVER (PARTITION BY date, clientId, DayTime) AS sum_revenue, COUNT(transactionId) OVER (PARTITION BY date, clientId, DayTime) AS transactions, COUNT(DISTINCT(transactionId)) OVER (PARTITION BY date, clientId, DayTime) AS unique_transactions FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM [owox-analytics:t_kravchenko.Demo_data])) GROUP BY date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions ORDER BY transactions DESC
SELECT date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions FROM ( SELECT date, clientId, DayTime, AVG(revenue) OVER (PARTITION BY date, clientId, DayTime) AS avg_revenue, MAX(revenue) OVER (PARTITION BY date, clientId, DayTime) AS max_revenue, MIN(revenue) OVER (PARTITION BY date, clientId, DayTime) AS min_revenue, SUM(revenue) OVER (PARTITION BY date, clientId, DayTime) AS sum_revenue, COUNT(transactionId) OVER (PARTITION BY date, clientId, DayTime) AS transactions, COUNT(DISTINCT(transactionId)) OVER (PARTITION BY date, clientId, DayTime) AS unique_transactions FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM [owox-analytics:t_kravchenko.Demo_data])) GROUP BY date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions ORDER BY transactions DESC

#standart SQL

    #standardSQL SELECT date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions FROM ( SELECT date, clientId, DayTime, AVG(revenue) OVER (PARTITION BY date, clientId, DayTime) AS avg_revenue, MAX(revenue) OVER (PARTITION BY date, clientId, DayTime) AS max_revenue, MIN(revenue) OVER (PARTITION BY date, clientId, DayTime) AS min_revenue, SUM(revenue) OVER (PARTITION BY date, clientId, DayTime) AS sum_revenue, COUNT(transactionId) OVER (PARTITION BY date, clientId, DayTime) AS transactions, COUNT(DISTINCT(transactionId)) OVER (PARTITION BY date, clientId, DayTime) AS unique_transactions FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM `owox-analytics.t_kravchenko.Demo_data`)) GROUP BY date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions ORDER BY transactions DESC
#standardSQL SELECT date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions FROM ( SELECT date, clientId, DayTime, AVG(revenue) OVER (PARTITION BY date, clientId, DayTime) AS avg_revenue, MAX(revenue) OVER (PARTITION BY date, clientId, DayTime) AS max_revenue, MIN(revenue) OVER (PARTITION BY date, clientId, DayTime) AS min_revenue, SUM(revenue) OVER (PARTITION BY date, clientId, DayTime) AS sum_revenue, COUNT(transactionId) OVER (PARTITION BY date, clientId, DayTime) AS transactions, COUNT(DISTINCT(transactionId)) OVER (PARTITION BY date, clientId, DayTime) AS unique_transactions FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM `owox-analytics.t_kravchenko.Demo_data`)) GROUP BY date, clientId, DayTime, avg_revenue, max_revenue, min_revenue, sum_revenue, transactions, unique_transactions ORDER BY transactions DESC

ClientId 102041117.1428132012 ile kullanıcı örneğini kullanarak sonuç olarak ne olduğunu görelim. Bu kullanıcının orijinal tablosunda aşağıdaki verilere sahibiz:

demo tablo

Sorguyu çalıştırarak, bu kullanıcıdan elde edilen ortalama, minimum, maksimum ve toplam gelirin yanı sıra kullanıcının toplam işlem sayısını içeren bir rapor alırız. Aşağıdaki ekran görüntüsünde de görebileceğiniz gibi her iki işlem de kullanıcı tarafından mesai saatleri içerisinde yapılmıştır:

demo tablo

Örnek 2 . Şimdi daha karmaşık bir görev için:

  • Yürütme zamanına bağlı olarak tüm işlemler için sıra numaralarını pencereye koyun. Pencereyi kullanıcı ve çalışma/çalışmayan zaman dilimlerine göre tanımladığımızı hatırlayın.
  • Pencerede sonraki/önceki işlemin (geçerli olana göre) gelirini rapor edin.
  • Pencerede ilk ve son işlemlerin gelirini görüntüleyin.

Bunu yapmak için aşağıdaki sorguları kullanacağız:

#eski SQL

    SELECT date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour FROM ( SELECT date, clientId, DayTime, hour, DENSE_RANK() OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS rank, revenue, LEAD( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lead_revenue, LAG( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lag_revenue, FIRST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS first_revenue_by_hour, LAST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS last_revenue_by_hour FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM [owox-analytics:t_kravchenko.Demo_data])) GROUP BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour ORDER BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour
SELECT date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour FROM ( SELECT date, clientId, DayTime, hour, DENSE_RANK() OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS rank, revenue, LEAD( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lead_revenue, LAG( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lag_revenue, FIRST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS first_revenue_by_hour, LAST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS last_revenue_by_hour FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM [owox-analytics:t_kravchenko.Demo_data])) GROUP BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour ORDER BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour

#standart SQL

    SELECT date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour FROM ( SELECT date, clientId, DayTime, hour, DENSE_RANK() OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS rank, revenue, LEAD( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lead_revenue, LAG( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lag_revenue, FIRST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS first_revenue_by_hour, LAST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS last_revenue_by_hour FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM `owox-analytics.t_kravchenko.Demo_data`)) GROUP BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour ORDER BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour
SELECT date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour FROM ( SELECT date, clientId, DayTime, hour, DENSE_RANK() OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS rank, revenue, LEAD( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lead_revenue, LAG( revenue, 1) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS lag_revenue, FIRST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS first_revenue_by_hour, LAST_VALUE(revenue) OVER (PARTITION BY date, clientId, DayTime ORDER BY hour) AS last_revenue_by_hour FROM ( SELECT date, date_UTC, clientId, transactionId, revenue, page, hour, CASE WHEN hour>=9 AND hour<=18 THEN 'working hours' ELSE 'non-working hours' END AS DayTime FROM `owox-analytics.t_kravchenko.Demo_data`)) GROUP BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour ORDER BY date, clientId, DayTime, hour, rank, revenue, lead_revenue, lag_revenue, first_revenue_by_hour, last_revenue_by_hour

Hesaplamaların sonuçlarını zaten bildiğimiz bir kullanıcı örneğini kullanarak kontrol edebiliriz: clientId 102041117.1428132012:

demo tablo

Yukarıdaki ekran görüntüsünden şunu görebiliriz:

  • ilk işlem saat 15:00'te ikinci işlem 16:00'da yapıldı.
  • 15:00'teki işlemden sonra, 16:00'da 25066 gelirli bir işlem gerçekleşti (sütun lead_revenue)
  • 16:00'daki işlemden önce, saat 15:00'te 3699 gelirli bir işlem vardı (sütun gecikme_geliri)
  • pencere içindeki ilk işlem saat 15:00'teydi ve bu işlem için gelir 3699'du (ilk_revenue_by_hour sütunu)
  • sorgu, verileri satır satır işler, bu nedenle söz konusu işlem için penceredeki son işlemin kendisi olacak ve last_revenue_by_hour sütunlarındaki değerler ve gelir aynı olacaktır.

Google BigQuery hakkında faydalı makaleler:

  • En İyi 6 BigQuery Görselleştirme Aracı
  • Google BigQuery'ye Nasıl Veri Yüklenir?
  • Google Ads'den Google BigQuery'ye Ham Veri Nasıl Yüklenir
  • Google BigQuery Google E-Tablolar Bağlayıcı
  • Google BigQuery'den Verileri Kullanarak Google E-Tablolardaki Raporları Otomatikleştirin
  • Google BigQuery'den Alınan Verilere Dayalı Google Data Studio'daki raporları otomatikleştirin

Google BigQuery'de web sitenizden örneklenmemiş veriler toplamak istiyorsanız ancak nereden başlayacağınızı bilmiyorsanız, bir demo rezervasyonu yapın. BigQuery ve OWOX BI ile elde edebileceğiniz tüm olasılıkları size anlatacağız.

Müşterilerimiz
büyümek %22 daha hızlı

Pazarlamanızda en çok neyin işe yaradığını ölçerek daha hızlı büyüyün

Pazarlama verimliliğinizi analiz edin, büyüme alanlarını bulun, yatırım getirisini artırın

Demo alın

Sonuçlar

Bu makalede, en popüler işlev gruplarına baktık: toplama, tarih, dize ve pencere. Ancak, Google BigQuery'nin aşağıdakiler de dahil olmak üzere daha birçok yararlı işlevi vardır:

  • verileri belirli bir biçime dönüştürmenize izin veren döküm işlevleri
  • bir veri kümesindeki birden çok tabloya erişmenizi sağlayan tablo joker işlevleri
  • bir arama sorgusunun tam değerini değil modelini tanımlamanıza izin veren normal ifade işlevleri

Bu işlevler hakkında kesinlikle blogumuzda yazacağız. Bu arada, demo verilerimizi kullanarak bu makalede açıklanan tüm işlevleri deneyebilirsiniz.

okuyucular için bonus

SQL sorguları uygulaması için demo verileri

Şimdi indir