Gürültü yerleştirme

Gürültü yerleştirme, veritabanlarına sorgu gönderirken kullanıcı gizliliğini korumak amacıyla kullanılan bir tekniktir. Bu teknik, sorguların toplayıcı SELECT ifadesine rastgele gürültü ekleme yöntemini kullanır. Bu gürültü, makul derecede doğru sonuçlar sunarken kullanıcı gizliliğini korur. Bu sayede, farklılık kontrollerine olan ihtiyacı ortadan kaldırır ve çıktı için gereken toplam eşiğini düşürür. Mevcut çoğu sorgu, bazı kısıtlamalara tabi olarak gürültü modunda yürütülebilir.

Gürültü yerleştirmeyi kullanmanın avantajları hakkında bilgi edinme

Farklılık kontrolleri uygulanmaz: Sorgular gürültü yerleştirme tekniğiyle çalıştırıldığında, Ads Data Hub satırları önceki sonuç kümeleriyle benzerlik nedeniyle filtrelemez. Bu sayede, kullanıcı gizliliğini korurken verilerinize dair bütünsel bir görünüm elde etmeye devam edebilirsiniz.

Sorun giderme işlemleri artık daha kolay: Satırlar yalnızca toplama şartları nedeniyle atlanır. Böylece, sorun giderme ve sorguları uyarlama işlemleri daha kolay olur.

Öğrenilmesi gereken yeni söz dizimleri yoktur: Farklılık kontrolleri yerine gürültüyü kullanmak için yeni sorgu söz dizimleri öğrenmeniz ya da çeşitli gizlilik konseptleri hakkında bilgi edinmeniz gerekmez.

Sonuç doğruluğu bildirilir: Sorgu başarıyla çalıştırıldığında gürültüden etkilenmiş olabilecek verilerin toplam oranı gösterilir.

Gürültünün gizlilik şartlarını nasıl etkileyeceği hakkında bilgi edinme

Farklılık kontrolleri: Gürültü yerleştirme, Ads Data Hub'daki mevcut farklılık kontrollerine bağlı değildir. Gürültü yerleştirme tekniğini kullandığınızda farklılık kontrolleri devre dışı bırakılır.

Toplama şartı: Gürültü yerleştirme, yaklaşık 20 veya daha fazla tekil kullanıcıyla temsil edilen gösterim verileri ve yaklaşık 10 ya da daha fazla tekil kullanıcıyla temsil edilen tıklama veya dönüşüm verileri sunar.

Statik denetlemeler: Etkisi yoktur.

Bütçeler ve sorgu sınırları: Gürültü kullanılarak yürütülen sorgular, farklılık kontrolleriyle kullanılan veri erişim limitlerini paylaşır. Farklılık kontrollerinde olduğu gibi, aynı sorguyu aynı veri kümesi üzerinde çok kez çalıştırırsanız veri kümesindeki sıklıkla sorgu gönderilen tarihlere erişiminizi kaybedebilirsiniz. Bu durum, değişken zaman aralığı sorguları çalıştırdığınızda veya aynı isteği birçok kez gönderdiğinizde ortaya çıkabilir.

Gürültü modu, sorgular içindeki veya genelindeki aynı toplu sonuçların yeniden hesaplanmasıyla ilgili daha katı ek sınırlar uygular. Veri erişim limitinde olduğu gibi, veri kümesinde sıklıkla sorgu gönderilen tarihlere erişimi kaybedebilirsiniz. Ancak aynı toplu sonuçların yeniden hesaplanmasına bağlı sınırlamalar yalnızca gürültü modundaki sorguları kısıtlar ve farklılık kontrolü modundaki sorguları kısıtlamaz. Daha fazla bilgi için Tekrarlanan sonuçlar bölümüne bakın.

Gizlilik kontrolleri hakkında daha fazla bilgi edinin.

Gürültü yerleştirmenin sonuçları nasıl etkileyeceğini anlama

Ads Data Hub, verilerin ifşa olması riskini azaltmak amacıyla gürültü yerleştirir. Bu risk, kullanıcı hakkındaki bilgilerin başkaları tarafından öğrenilmesi olarak tanımlanabilir. Gizlilikle kullanışlılık arasında denge kurar.

Ads Data Hub'daki gürültü yerleştirme tekniği, sorgu sonuçlarını şu şekilde dönüştürür:

  • Aykırı kullanıcıların toplu sonuçlara olan etkisini sınırlar. Her kullanıcının her toplama işlemine olan katkısını özetler ve her katkıyı minimum ile maksimum kısıtlama aralığıyla sınırlar.
  • Sınırlama uygulanan kullanıcı katkılarını toplar.
  • Her toplama sonucuna gürültü ekler. Bunlar, her satırda bulunan toplama işlevi çağrısının sonucudur. Bu rastgele gürültünün ölçeği, kısıtlama sınırlarıyla doğru orantılıdır.
  • Her satır için gürültü uygulanmış bir kullanıcı sayısı hesaplar ve kullanıcı sayısı çok az olan satırları çıkarır. Bu, farklılık kontrolü modundaki k-anonimliğe benzer ancak gürültü nedeniyle aynı veri kümesinde çalıştırılan işler farklı satırlar bırakabilir. Ayrıca gürültü modu, toplama şartının daha düşük olması nedeniyle daha az satır bırakır (yaklaşık 20 ve tam olarak 50).

Nihai sonuçta, her satırda gürültü uygulanmış toplu sonuçların bulunduğu ve küçük grupların çıkarıldığı bir veri kümesi elde edilir. Bu yöntem, tek bir kullanıcıların döndürülen sonuçlar üzerindeki etkisini maskeler.

Toplama sınırlaması hakkında

Ads Data Hub'daki gürültü yerleştirme tekniği, aykırı kullanıcıların katkısını kısıtlamak için örtülü ve açık toplama sınırlama türünü kullanır. Kullanım alanınıza bağlı olarak hangi sınırlama türünün kullanılacağını seçebilirsiniz.

Örtülü sınırlama

Örtülü sınırlamayı kullanmak için özel bir SQL söz dizimi kullanmanız gerekmez. Bu sınırlama varsayılan olarak uygulanır. Örtülü sınırlar, verilerin kendisinden türetilir ve her toplama işlemi için belirlenir. Bazı toplamaların değer aralığı diğerlerinden daha genişse örtülü sınırlama, farklı toplamalar için uygun şekilde farklı sınırlar çıkarabilir. Bu durum genellikle daha az hataya yol açar. COUNT(DISTINCT user_id)'nın, 1 üst sınırı ile açık sınırlamayı otomatik olarak kullandığını unutmayın.

Açık sınırlama

Açık sınırlama, her kullanıcının toplam katkısını belirtilen bir aralıkla sınırlar. Açık sınırlar, tüm toplama işlemlerine eşit şekilde uygulanır ve değişmez değer olmalıdır. Sınırlar genellikle bilindiğinde açık sınırlama daha iyi sonuçlar sağlayabilir. Örneğin, yaşları 0 ile 100 arasında sınırlandırmak, çoğu insanın yaşı genellikle bu aralıkta olduğundan kamuya açık bilgileri yansıtır.

Ads Data Hub, açık sınırlama için ek ADH.ANON toplama işlevleri sağlar. Açık sınırlamayı kullanmak için desteklenen her toplama işlevine yönelik sınırları belirleyin. Bunun için alt sınırı ve üst sınırı temsil eden tamsayılar ekleyin. Örneğin:

SELECT
campaign_name,
-- Set lower and upper bounds to 0 and 1, respectively
ADH.ANON_COUNT(*, contribution_bounds_per_group => (0,1))
FROM data
GROUP BY 1

Gürültü yerleştirmeyi kullanarak sorgu çalıştırma

  1. Bir rapor açın.
  2. Gizlilik gürültüsü ayarları açma/kapatma düğmesini Gürültüyü kullan konumuna getirin.
  3. Sorguyu çalıştırın.
  4. Eklenen gürültünün etkisini inceleyin.
  5. İsteğe bağlı: Gürültünün etkisini azaltmak için sorguyu uyarlayın.

Gürültünün etkisini inceleme

Bir iş başarıyla tamamlandıktan sonra Ads Data Hub, gizlilik özetinde sonucun güvenilirliğini gösterir. Güvenilirlik, çıkıştaki gürültüden büyük ölçüde etkilenmiş olabilecek hücrelerin yüzdesine dayanır. Sonuç tablosundaki bir değere eklenen gürültünün ölçeği, hücredeki sonucun %5'inden fazlaysa gürültünün bu değere olan etkisi yüksek olarak değerlendirilir.

Etkilenen çıktı veri kümelerine yönelik gizlilik özetinde, en yüksek etkiden en düşük etkiye doğru olacak şekilde en çok gürültü uygulanan on sütun ve bunların gürültüye katkıları listelenir. Burada, gürültü etkisine dair etiketlerin dağılımı verilir.

Etkilenen sonuçların yüzdesi Gösterge rengi Etki
<%5 Yeşil Düşük etkili
%5-%15 Sarı Orta düzey etki
%15-%25 Orange Yüksek etkili
>%25 Kırmızı Çok yüksek etki

Ayrıca, Ana Sayfa'da son rapor işlerinin gizlilik özetini önizleyebilirsiniz. Belirli bir işin gizlilik ayarlarını önizlemek için Son etkinlik bölümündeki iş kartında imleci gizlilik ipucu simgesinin privacy_tip üzerine getirin.

Sorguları uyarlama

Sonuca az sayıda kullanıcı katkıda bulunduğunda toplama işlemlerinin gürültüden etkilenme olasılığı daha yüksektir. Bu durum, toplamalar küçük kullanıcı kümelerinden hesaplandığında veya bazı kullanıcılar sonuçları etkilemediğinde (örneğin, COUNTIF işlevi kullanıldığında) ortaya çıkabilir. Gürültü raporuna göre, etkilenen sonuçların yüzdesini azaltmak için sorgunuzu ayarlayabilirsiniz.

Genel kurallar şu şekildedir:

  • Tarih aralığını genişletin.
  • Daha az sayıda parametreye göre gruplandırma veya COUNTIF yerine COUNT değerini kullanma gibi yöntemlerle sorguyu verilerin ayrıntı düzeyini azaltacak şekilde yeniden yazın.
  • Gürültü uygulanmış sütunları kaldırın.
  • Makul sınırlar seçilebildiğinde açık sınırlamayı deneyin.

Desteklenen toplama işlevleri

Şu toplama işlevleri gürültüyle desteklenir:

  • SUM(...)
  • COUNT(*)
  • COUNT(...)
  • COUNTIF(...)
  • COUNT(DISTINCT user_id)
  • APPROX_COUNT_DISTINCT(user_id)
  • AVG(...)

DISTINCT anahtar kelimesi yalnızca COUNT işleviyle ve yalnızca bir Ads Data Hub tablosundan user_id sütununa verilen doğrudan referansla ya da COUNT(DISTINCT IF(..., user_id, NULL)) gibi user_id veya NULL döndüren bir ifadeyle birlikte kullanıldığında desteklenir.

Bu sınırlamaların yalnızca gürültü içeren toplamalar için geçerli olduğunu unutmayın. Gürültü, kullanıcılar arası toplamanın ilk düzeyidir. Kullanıcı düzeyinde toplamalar ve gürültü yerleştirme işleminden sonraki toplamalar sınırsızdır.

Ek toplama işlevleri

Ads Data Hub, normal toplama işlevlerini desteklemenin yanı sıra açık sınırlamayı destekleyen ek ADH.ANON toplama işlevlerini de kullanıma sunar. Bu toplayıcılar, BigQuery diferansiyel gizlilikli toplama işlevleriyle aynı söz dizimine sahiptir ancak WITH DIFFERENTIAL_PRIVACY ifadesini gerektirmez:

  • ADH.ANON_SUM( ..., [ contribution_bounds_per_group => (lower_bound, upper_bound) ] )

  • ADH.ANON_COUNT( *, [ contribution_bounds_per_group => (lower_bound, upper_bound) ] )

  • ADH.ANON_COUNT( ..., [ contribution_bounds_per_group => (lower_bound, upper_bound) ] )

  • ADH.ANON_AVG( ..., [ contribution_bounds_per_group => (lower_bound, upper_bound) ] )

  • ADH.ANON_PERCENTILE_CONT( ..., percentile, contribution_bounds_per_row => (lower_bound, upper_bound) )

ADH.ANON_SUM, ADH.ANON_COUNT ve ADH.ANON_AVG parametreleri:

  • contribution_bounds_per_group: Kullanıcı başına katkılar, GROUP BY anahtarlarıyla tanımlanan her bölüm için sınırlanır. Üst ve alt sınırlar, değerler kullanıcı başına toplandıktan sonra grup başına değerlere uygulanır.
  • lower_bound: Bir toplamaya dahil edilecek en küçük değeri temsil eden sayısal değişmez.
  • upper_bound: Bir toplamaya dahil edilecek en büyük değeri temsil eden sayısal değişmez.

ADH.ANON_PERCENTILE_CONT parametreleri:

  • percentile: Hesaplanacak yüzdelik dilim, [0, 1] aralığında bir değişmez.
  • contribution_bounds_per_row: Kullanıcı başına katkılar, satır (kayıt) bazında sınırlandırılır. Yüzdelik dilim için açık sınırlama sınırlarının gerekli olduğunu ve bu nedenle yalnızca ek bir işlev olarak desteklendiğini unutmayın.
  • lower_bound: Bir toplamaya dahil edilecek en küçük değeri temsil eden sayısal değişmez.
  • upper_bound: Bir toplamaya dahil edilecek en büyük değeri temsil eden sayısal değişmez.

MIN ve MAX değerlerini hesaplama

MIN ve MAX işlevleri, gürültü toplamalarında doğrudan desteklenmez ancak bu sonuçları hesaplamak için genellikle alternatif yöntemler vardır.

Gruplandırma anahtarı olarak kullanılabilecek bir MIN veya MAX değeriniz varsa (ör. etkinlik tarihi), önce bu değere göre GRUP oluşturabilir, ardından MIN/MAX işlemini yapabilirsiniz. Bu işlev, toplama eşiğini geçen minimum veya maksimum değeri döndürür.

Örnek:

WITH campaign_date_ranges AS (
  SELECT campaign_id, MIN(event_date) AS min_date, MAX(event_date) AS max_date
  FROM (
    # Aggregation thresholding will be applied here
    SELECT DISTINCT
      campaign_id,
      DATE(query_id.time_usec, @time_zone) AS event_date
    FROM adh.google_ads_impressions
  )
)
SELECT campaign_id, num_impressions, min_date, max_date
FROM (
  # Noise and aggregation thresholding will be applied here
  SELECT campaign_id, COUNT(*) AS num_impressions
  FROM adh.google_ads_impressions
)
JOIN campaign_date_ranges USING(campaign_id)

Alternatif olarak, bilinen sınırları olan ayrıntılı değerlerin MIN veya MAX'ı varsa yaklaşık bir sonuç için PERCENTILE_CONT işlevini açık sınırlar ile birlikte kullanabilirsiniz.

Örnek:

SELECT
  campaign_id,
  COUNT(*) AS num_impressions,
  ADH.ANON_PERCENTILE_CONT(
    query_id.time_usec, 0,
    contribution_bounds_per_row => (@min_timestamp, @max_timestamp))
    AS min_timestamp,
  ADH.ANON_PERCENTILE_CONT(
    query_id.time_usec, 1,
    contribution_bounds_per_row => (@min_timestamp, @max_timestamp))
    AS max_timestamp
FROM adh.google_ads_impressions

Tamsayı sonuçlar hakkında

Ads Data Hub bu toplama işlevleri için gürültü yerleştirme işlemini otomatik olarak yapsa da işlev imzaları değişmez. COUNT veya SUM gibi INT64 işlevleri INT64 değeri döndürdüğünden, gürültü uygulanan sonucun ondalık kısımları yuvarlanır. Yuvarlanan kısım genellikle sonucun ve gürültünün boyutuyla kıyaslandığında göz ardı edilebilir bir miktardır.

Sonuçlarınızda ondalık kısımları ayrıntılı olarak görmeniz gerekiyorsa INT64 değer döndüren işlevler yazmayın. (Örneğin girdisi FLOAT64 değere dönüştürülen SUM kullanarak.)

Negatif sonuçlar hakkında

Prensip olarak, çok küçük değerlere sahip gürültü, sorgu için anlamsal olarak imkansız olması gerektiği durumlarda bile negatif sayılara neden olabilir. Beklenen davranışı korumak için COUNT ve COUNTIF'nin tüm biçimleri otomatik olarak sıfırda sabitlenir. Bu nedenle, hiçbir zaman negatif sonuç vermezler. SUM gibi başka bir işlevde de aynı davranışı istiyorsanız GREATEST(0, SUM(...)) kullanarak sonuçları manuel olarak sınırlayabilirsiniz.

Bu değişiklik genellikle göz ardı edilebilir olsa da genel sonuçlara küçük bir pozitif önyargı getirir.

Herkese açık gruplar

GROUP BY ifadesiyle, bir sorgunun anonimleştirilmiş sonuçları gruplar halinde toplanır. Toplama eşiği, grupta yeterli sayıda kullanıcı olmasını sağlayarak bireysel kullanıcı verilerinin korunmasını sağlar. Hangi grupların yayınlanabileceğini belirleme sürecine "bölüm seçimi" adı verilir.

Çoğu durumda gruplar kamuya açık bilgiler olabilir. Örneğin, gruplandırma anahtarı değerleri önceden biliniyorsa tarayıcı sürümüne, haftanın gününe veya coğrafi bölgeye göre gruplandırma kullanıcı verilerine bağlı değildir. Bu durumda, çıkışta bir grubun bulunup bulunmaması kullanıcılar hakkında yeni bir bilgi sağlamadığından bölüm seçimi atlanabilir.

Ads Data Hub, herkese açık gruplar için uygun olan sorguları tanımlar ve bu sorgulara toplama eşiği uygulamaz. Bu, hiçbir çıkış satırının filtrelenmediği anlamına gelir. Az sayıda kullanıcıdan hesaplanan sonuçların gürültüden büyük ölçüde etkilenebileceğini unutmayın.

Herkese açık gruplara uygun olması için sorgunun, tüm gruplandırma anahtarlarının önceden bilinmesini sağlayacak şekilde yapılandırılması gerekir. Gruplandırma sütunları aşağıdaki koşulları karşılamalıdır:

  • Herkese açık bir tablodan (Ads Data Hub kullanıcı verisi içermeyen bir tablo veya SELECT ifadesi) gelir.
  • Benzersiz değerleri zorunlu kılmak için SELECT DISTINCT uygulanır.
  • Bunlar, sorguya tüm sütunlarda OUTER JOIN ile birleştirilir.

Herkese açık gruplar sorgularına örnekler:

SELECT age_group_id, COUNT(*) FROM adh.google_ads_impressions
RIGHT OUTER JOIN (SELECT DISTINCT age_group_id FROM adh.age_group)
ON demographics.age_group = age_group_id
GROUP BY age_group_id
SELECT age_group_id, COUNT(*) FROM adh.google_ads_impressions
RIGHT OUTER JOIN (SELECT DISTINCT * FROM UNNEST([1, 2, 3]) AS age_group_id)
ON demographics.age_group = age_group_id
GROUP BY age_group_id

İlk örnekte, korumalı adh.google_ads_impressions table, age_group_id sütununda kullanıcı verileri içermeyen adh.age_group tablosuyla birleştirilir. Aynı herkese açık tablo age_group_id sütunu, GROUP BY ifadesinde görünür.

Benzer şekilde, ikinci örnekte korumalı adh.google_ads_impressionstablo, açıkça UNNEST([1, 2, 3]) olarak sağlanan herkese açık tabloyla birleştirilir. Her iki örnekte de gruplandırma anahtarının age_group_id herkese açık tablodan geldiğini unutmayın.

Birden fazla gruplandırma öğesi de sağlanabilir. Örneğin:

SELECT campaign_id, COUNT(*) FROM adh.google_ads_impressions
RIGHT OUTER JOIN (SELECT DISTINCT campaign_id, customer_id FROM adh.google_ads_campaign)
USING (campaign_id, customer_id)
GROUP BY campaign_id, customer_id
SELECT p.campaign_id, p.browser, COUNT(*) FROM adh.google_ads_impressions AS i
RIGHT OUTER JOIN (
 SELECT DISTINCT * FROM UNNEST([1, 2]) AS campaign_id
 CROSS JOIN UNNEST(['Chrome', 'Other']) AS browser
) AS p
 ON i.campaign_id = p.campaign_id AND i.browser = p.browser
GROUP BY campaign_id, browser;

Herkese açık gruplardaki sorgularda filtrelemenin olmaması, yinelenen sorgular için faydalı olabilir. Çünkü çıkış her zaman aynı sabit gruplandırma anahtarı değerleri için döndürülür. Bu özellik, örneğin, belirli aralıklarla güncellenen kontrol panelleri oluşturmak için özellikle yararlı olabilir.

Bir uyarı: Herkese açık bir tablo çok sayıda gruplandırma anahtarı değeri sağlıyorsa az veri içeren veya hiç veri içermeyen birçok satır elde edebilirsiniz. Bu satırların tümü yüksek gürültü etkisine sahip olarak raporlanır. Bu durumda, yalnızca ilgilendiğiniz değerleri içeren daha küçük bir anahtar listesi sağlamayı düşünebilirsiniz.


Desteklenen sorgu kalıpları

Önemli: Ads Data Hub'ın standart en iyi uygulamalarının çoğu, gürültü yerleştirme tekniğini kullanan sorgular için hâlâ geçerlidir. Özellikle aynı verilere tekrar tekrar sorgu gönderme rehberini incelemenizi öneririz.

Bu bölümde, gürültü yerleştirme tekniğini kullanan sorgular çalıştırırken desteklenen sorgu kalıpları açıklanmaktadır.

Kullanıcı düzeyinde toplamalar

Kullanıcı düzeyindeki kısıtlamasız toplama işlemleri, farklılık kontrolü modundakiyle aynı şekilde desteklenir. Yalnızca birden çok kullanıcıdan edinilen verileri birleştiren toplama işlemlerine gürültü yerleştirilir. Açıkça user_id değerine göre gruplandırılan toplama işlemleri veya user_id değerine göre bölümlenen analiz işlevlerine gürültü eklenmez ve tüm işlevlere izin verilir. GROUP BY impression_id gibi açıkça user_id değerine göre gruplandırılmayan kullanıcı düzeyinde toplama işlemleri kullanıcılar arası toplama olarak değerlendirildiği için bu toplama işlemlerine gürültü eklenir.

external_cookie değerine göre gruplandırmak yeterli değildir. *_match tablolarını müşteriye ait tablolarla birleştirmek için external_cookie değeri kullanılabilir. Ancak tüm tek kullanıcılı toplama işlemleri yalnızca external_cookie sütununa göre değil, user_id sütununa göre de açıkça gruplandırılmalıdır.

Toplama işlevi örneği:

WITH user_paths AS (
  # Grouping by user_id, no noise needed, all functions allowed
  SELECT user_id, STRING_AGG(campaign_id, ">" ORDER BY query_id.time_usec) AS path
  FROM adh.google_ads_impressions
  GROUP BY 1
)
# Noise applied here to num_users
SELECT path, COUNT(*) AS num_users
FROM user_paths
GROUP BY 1;

Analiz işlevi örneği:

WITH events AS (
  # Partitioning by user_id, no noise needed, all functions allowed
  SELECT
    campaign_id,
    ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY query_id.time_usec) AS index
  FROM adh.google_ads_impressions
)
# Noise applied here to first_impressions
SELECT campaign_id, COUNT(*) AS first_impressions
FROM events
WHERE index = 1
GROUP BY 1;

Paralel toplamalar

Her kullanıcılar arası toplama işlemine ayrı ayrı gürültü eklenir. Bu türden birden çok toplama işlemini tek bir ifadede çalıştırabilir, sonuçları JOIN veya UNION kullanarak tek bir tabloda birleştirebilirsiniz.

Örnek:

WITH result_1 AS (
  # Noise applied here to num_impressions
  SELECT campaign_id, COUNT(*) AS num_impressions
  FROM adh.google_ads_impressions
  GROUP BY 1
), result_2 AS (
  # Noise applied here to num_clicks
  SELECT campaign_id, COUNT(*) AS num_clicks
  FROM adh.google_ads_creative_conversions
  GROUP BY 1
)
SELECT * FROM result_1 JOIN result_2 USING(campaign_id)

Bu örneğin destekleneceğini ancak farklılık kontrolü modunda kaçınılması gerektiğini unutmayın. Her paralel toplama işlemine ayrı ayrı gürültü uygulanıp filtrelendiğinden bu uygulama gürültü açısından soruna yol açmaz.

Birleştirilmemiş verilerle bir araya getirilmiş birleştirilmiş veriler

Ads Data Hub yalnızca user_id ile bölümlendirilen analiz aralıklarını desteklediğinden, bu sonuçları ayrı ayrı toplamak ve tekrar toplamadan önce kendi içinde birleştirmek sıklıkla uygulanan bir çözümdür. Bu sorgular, gürültü modunda desteklenir ve gizlilik şartlarının daha erken aşamalarda çözümlenmesi nedeniyle farklılık kontrolü moduna kıyasla çoğunlukla daha iyi performans gösterir.

Örnek:

WITH campaign_totals AS (
  # Noise applied here to campaign_imps
  SELECT campaign_id, COUNT(*) AS campaign_imps
  FROM adh.google_ads_impressions
  GROUP BY 1
)
# Noise applied here to imps
SELECT campaign_id, demographics, campaign_imps, COUNT(*) AS imps
FROM adh.google_ads_impressions JOIN campaign_totals USING(campaign_id)
GROUP BY 1,2,3

Gürültü modu, AVG(campaign_imps) gibi toplu sonuçların yeniden toplanmasını önermez.


Desteklenmeyen sorgu kalıpları

Bu bölümde, gürültü yerleştirmeyi kullanan sorgular çalıştırırken desteklenmeyen sorgu kalıpları açıklanmaktadır.

Geçerli tarihi içeren sorgular

Gürültü modu sorguları, geçerli tarihe ait verilere sorgu göndermeyi desteklemez. (Bu, farklılık kontrol modunda önerilmez.) Gürültü yerleştirme tekniğinin kullanıldığı sorgularda geçerli tarih seçilemez.

Tekrarlanan sonuçlar

Ads Data Hub, gürültü modunda aynı toplama işlemini tekrarlama sıklığını kısıtlar. Bu sınırlara ulaşırsanız gürültü modu sorgularınız, veri kümesinde sıklıkla sorgu gönderilen tarihlere erişimi kaybeder. Aşağıda bu durumun nasıl ortaya çıkabileceğiyle ilgili örnekler verilmiştir.

Sorgu tekrarı, aynı sorgu aynı veya çok benzer parametrelerle (çakışan tarih aralıkları gibi) birden çok kez çalıştırıldığında ortaya çıkar. BigQuery projenize aktarmış olduğunuz verileri kullanarak bu durumu önleyebilirsiniz.

Çakışan tarih aralıklarına iki iş sorgu gönderdiğinde, aynı kullanıcılar üzerinde aynı hesaplama işlemi yapılıyorsa bu işlerin tekrara neden olabileceğini unutmayın. Örneğin, çakışan tarih aralıkları üzerinde yürütülen aşağıdaki sorgu, tarihe göre bölümlendirme yaptığından tekrara neden olmaktadır.

SELECT DATE(TIMESTAMP_MICROS(event.event_time)) AS date,
COUNT(*) AS cnt
FROM adh.cm_dt_clicks
GROUP BY 1

Bu gibi durumlarda, sorguyu ayrı tarih segmentleri üzerinde çalıştırmanız gerekir.

Verilerin tarihten bağımsız olduğu durumlar da tekrara örnek verilebilir. Aşağıdaki sorgu, her iki işin kampanya süresinin tamamını kapsadığı çakışan tarihler üzerinde yürütüldüğünde tekrarlar oluşturuyor.

SELECT campaign_id, COUNT(*) AS cnt
FROM adh.google_ads_impressions
GROUP BY 1

Bu gibi durumlarda, sonuç değişmediği için bu sorguyu yalnızca bir kez çalıştırmanız gerekir.

Toplama tekrarı, aynı toplama işlemi bir sorgu içinde birden çok kez tekrarlandığında ortaya çıkar.

SELECT COUNT(*) AS cnt1, COUNT(*) AS cnt2
FROM table

Bu gibi durumlarda, tekrarlardan birini kaldırmanız gerekir.

Toplama işlemleri anlamsız biçimde farklıysa ancak aynı değeri hesaplıyorsa bunların tekrar olarak değerlendirileceğini unutmayın. Başka bir deyişle, condition1 ve condition2 değerleri, belirli bir key değeri olan tüm kullanıcılar için aynıysa aşağıdaki sorguda tekrar oluşur:

SELECT key, COUNTIF(condition1) AS cnt1, COUNTIF(condition2) AS cnt2
FROM table
GROUP BY key

Bazı kullanıcı grupları için son derece benzer koşullarınız varsa sorguyu yalnızca bir COUNT içerecek şekilde yeniden yazmanızı öneririz.

Satır yinelemesi, bir Ads Data Hub tablosu bir BigQuery tablosuyla birleştirilip Ads Data Hub tablosundaki her bir satır BigQuery tablosundaki birden çok satırla eşleştiğinde ortaya çıkar. Örneğin, aşağıdaki sorgu bq_table içinde aynı kampanya kimliğini içeren birden fazla satır olduğunda tekrar oluşturur:

SELECT r.campaign_id, COUNT(*) AS cnt
FROM adh_table
INNER JOIN bq_table ON l.campaign_id = r.campaign_id

Bu durumda, sorguyu bq_table tablosunda, her birleştirme anahtar/değeri (bu örnekte campaign_id) başına yalnızca bir satır olacak şekilde yeniden yapılandırmanız gerekir.

Ads Data Hub tablosundan bir dizi çıkarıldığında, çoğu kullanıcının aynı değer dizilerine sahip olması durumunda aynı etkinin oluşabileceğini unutmayın:

SELECT in_market_id, COUNT(*)
FROM adh.dv360_youtube_impressions,
UNNEST(in_market) AS in_market_id
GROUP BY 1

Sorgu ile ilgili diğer en iyi uygulamalar hakkında bilgi edinin.

Yeniden inceleme aralıkları hakkında

Bazı sorgu kalıpları, yeni sonuçları içerecek şekilde düzenli olarak yeniden oluşturularak geniş bir zaman aralığında raporlar oluşturur. Bu sorguların, gürültü modunda çalışabilmesi için ayarlanması gerekebilir. Çünkü önceki sonuçları yeniden hesaplarlarsa engellenirler. Bunun yerine, her iş yalnızca yeni sonuçlar oluşturmalıdır. Ardından, yeni sonuçlar tam bir rapor için önceki işlerin sonuçlarıyla birleştirilebilir.

Örneğin, günlük olarak yenilenen, tarihe göre metriklerin yer aldığı bir rapor oluşturuyorsanız:

SELECT
  campaign_id,
  DATE(TIMESTAMP_MICROS(query_id.time_usec), @time_zone) AS event_date,
  COUNT(*) AS impressions
FROM adh.google_ads_impressions
GROUP BY 1,2

Bu işlemi geniş bir tarih aralığıyla çalıştırmamalısınız. Aksi takdirde önceki günlerin sonuçları yeniden hesaplanır. Bunun yerine, her işi yalnızca yeni verilerin bulunduğu en son günde çalıştırmalı ve ardından önceki işlerin sonuçlarıyla birleştirmelisiniz.

Önceki bir sonucu yenilemeniz gerekiyorsa (ör. geç gelen verileri hesaba katmak için) tek bir sonucu 1 veya 2'den fazla kez yeniden hesaplamaktan kaçınmanız gerekir. Aksi takdirde, tekrarlanan sorgu denemeleri nedeniyle hatalar alabilirsiniz.

Doğrudan yeniden toplama

Gürültü, sorguda kullanıcılar arası toplamanın ilk katmanına uygulanır. Birden çok toplama katmanı olan sorgular, gürültülü sonuçları birleştirir. Bu nedenle, nihai toplama işlemlerinde çok daha yüksek bir gürültü olabilir. Bu sorgular doğrulama sırasında uyarı alır:

WITH layer_1 AS (
  # Noise applied here to partial_result
  SELECT campaign_id, demographics, location, COUNT(*) AS partial_result
  FROM adh.google_ads_impressions
  GROUP BY 1,2,3
  HAVING partial_result > 5
)
# Reaggregation of partial_result with no user-level data, will be rejected
SELECT campaign_id, SUM(partial_result) AS final_result
FROM layer_1
GROUP BY 1

Gürültüden en iyi sonuçları elde etmek için tüm kullanıcılar arası işlemleri tek bir toplamada hesaplayın. Örneğin, ara sayılara SUM işlemi uygulamak yerine, etkinliklere SUM işlevi uygulayın.

Çok katmanlı toplama kaçınılmazsa sonuçları doğrudan ilk katmandan aktararak uyarıyı çözebilirsiniz. Bunun için tek bir işte, komut dosyası sonuçlarını değiştirmeden OPTIONS(privacy_checked_export=true) söz dizimini kullanarak bir geçici tablo (veya BigQuery projenize aktarılmış bir tablo) oluşturun. Örneğin:

CREATE TEMP TABLE layer_1 OPTIONS(privacy_checked_export=true) AS (
  # Noise applied here to partial_result
  SELECT campaign_id, demographics, location, COUNT(*) AS partial_result
  FROM adh.google_ads_impressions
  GROUP BY 1,2,3
  HAVING partial_result > 5
);
# Reaggregation of privacy checked data, no noise needed
SELECT campaign_id, SUM(partial_result) AS final_result
FROM layer_1
GROUP BY 1

Geçici tablolar hakkında daha fazla bilgi edinin.

Toplamanın ilk katmanı gizlilik kontrolleri için fazla ayrıntılıysa sorguyu kullanıcı düzeyinde toplama kullanarak yeniden yazabilirsiniz. Bu mümkün değilse bu sorgu gürültü modunda desteklenmemektedir.

Birleştirilmemiş kullanıcı kimlikleri

Gürültü modundaki sorgular, gürültü ile toplama işlemi gerçekleştirilmediği sürece, ayrı kullanıcılardan gelen verileri tek bir satırda birleştirmemelidir. Sonuç olarak, toplanmamış Ads Data Hub verilerinin birleştirilmesi user_id sütununda açıkça birleştirilmelidir.

Bu sorgu, user_id sütununda açıkça birleştirme yapmaz. Bu durum, doğrulama uyarısına neden olur:

SELECT 
FROM adh.google_ads_impressions
JOIN adh.google_ads_creative_conversions USING(impression_id)

Bu tür birleştirmeler, yalnızca aynı user_id değerine sahip satırlar eşleşeceğinden beklendiği gibi çalışmayabilir. Hata, USING ifadesi user_id dahil edilecek şekilde ayarlanarak (örneğin USING(impression_id, user_id)) giderilebilir.

Bu kısıtlamanın yalnızca Ads Data Hub tabloları arasında (boyut tabloları hariç) yapılan birleştirme işlemleri için geçerli olduğunu unutmayın. Müşterilere ait tablolara uygulanmaz. Örneğin, şuna izin verilir:

SELECT 
FROM adh.google_ads_impressions
JOIN bigquery_project.dataset.table USING(any_column)

Ads Data Hub-BigQuery sağ birleştirme işlemleri

Müşteriye ait verilerle dış birleştirme işlemleri, satırlarda kullanıcı tanımlayıcıların eksik olmasına neden olabilir. Bu durum, gürültünün iyi performans göstermesini önler.

Bu iki sorgunun her ikisi de Ads Data Hub tarafında kullanıcı tanımlayıcılarının eksik olduğu eşleşmeyen satırlara izin verdiği için doğrulama uyarılarına neden olur:

SELECT 
FROM adh.google_ads_impressions
RIGHT JOIN bigquery_project.dataset.table USING(column)
SELECT 
FROM bigquery_project.dataset.table
LEFT JOIN adh.google_ads_impressions USING(column)

Tabloların sırası tersine çevrildiğinde iki birleştirme işleminin de çalışacağını unutmayın. Ayrıca, doğrudan device_id_md5 üzerinde birleştirilen RDID tabloları için de bir istisna vardır. Örneğin, aşağıdaki sorgu uyarı olmadan çalışır:

SELECT 
FROM bigquery_project.dataset.table
LEFT JOIN adh.google_ads_impressions_rdid USING(device_id_md5)

Filtrelenmiş Satır Özeti

Filtrelenmiş satır özeti, gürültü modunda desteklenmez. Bu özellik, düşük filtreleme hızları ve farklılık kontrollerindeki filtrelemenin eksik olması nedeniyle gürültüyle kullanımda çoğunlukla gereksizdir.

Gürültü sonuçlarında ciddi boyutlarda veri filtreleme olduğunu gözlemlerseniz birleştirilmiş veri miktarını artırın. Veri kümesinin tamamında paralel toplama işlemi yaparak toplam tahminini karşılaştırabilirsiniz. Örneğin:

SELECT campaign_name, COUNT(*)
FROM data
GROUP BY 1
UNION ALL
SELECT 'Total', COUNT(*)
FROM data
GROUP BY 1

Toplam sayıya ayrı ayrı gürültü uygulandığını ve toplam değerlerin uyuşmayabileceğini unutmayın. Ancak toplam sayı, genellikle gürültü uygulanan satırların toplamını alma işlemine kıyasla daha doğru sonuç verir.

Çapraz modda oluşturulan tablolar

Ads Data Hub'daki dışa aktarılmayan tablolar yalnızca oluşturuldukları gizlilik moduyla kullanılabilir. Tabloların önce BigQuery'ye aktarılması hariç olmak üzere, tabloları normal toplama modunda oluşturup gürültü modunda ya da gürültü modunda oluşturup normal toplama modunda kullanamazsınız.