Ana içeriğe geç
Kesit SQL
Orta · BigQuery ve Bulut Veri Ambarları

BigQuery'de diziler ve iç içe veri: ARRAY, STRUCT, UNNEST

SPLIT, ARRAY_AGG, UNNEST, GENERATE_DATE_ARRAY ve GA4 tarzı iç içe tablolar.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Bir hücrede birden çok değer

BigQuery, bir sütunda dizi (ARRAY) ve yapı (STRUCT) saklayabilir. Bu, JOIN gerektirmeden ilişkili veriyi tek satırda tutmayı sağlar; Google Analytics 4 dışa aktarımındaki event_params bunun en bilinen örneğidir.

FonksiyonNe yapar?
SPLIT(metin, ',')Metni diziye böler
ARRAY_AGG(x)Grubun değerlerini diziye toplar
ARRAY_LENGTH(dizi)Eleman sayısı
dizi[OFFSET(0)]İlk eleman (0'dan sayar); [ORDINAL(1)] 1'den sayar, SAFE_OFFSET taşarsa NULL döner
UNNEST(dizi)Diziyi satırlara açar (FROM içinde)
ARRAY_TO_STRING(dizi, ', ')Diziyi metne çevirir
GENERATE_DATE_ARRAY(a, b)Tarih dizisi üretir

Metni bölüp satırlara açmak

WITH notlar AS (
  SELECT 1 AS siparis, 'kupon,hediye paketi' AS etiketler UNION ALL
  SELECT 2, 'hızlı kargo'
)
SELECT n.siparis, etiket
FROM notlar AS n, UNNEST(SPLIT(n.etiketler, ',')) AS etiket;

FROM tablo, UNNEST(tablo.dizi) AS x yazımı her satırı kendi dizisinin elemanlarıyla birleştirir (korelasyonlu çapraz birleştirme).

Satırları diziye toplamak

SELECT customer_id,
       ARRAY_LENGTH(ARRAY_AGG(order_id)) AS siparis_sayisi,
       ARRAY_TO_STRING(ARRAY_AGG(status ORDER BY order_date DESC), ' > ') AS durum_gecmisi
FROM orders
WHERE customer_id <= 3
GROUP BY customer_id;

Takvim üretmek

SELECT gun, COUNT(e.event_id) AS olay
FROM UNNEST(GENERATE_DATE_ARRAY('2024-11-24', '2024-11-30')) AS gun
LEFT JOIN web_events e ON DATE(e.event_time) = gun
GROUP BY gun
ORDER BY gun;

STRUCT ve GA4 verisi

-- GA4 dışa aktarımında her olay, parametrelerini bir STRUCT dizisinde taşır
SELECT event_date,
       event_name,
       (SELECT value.string_value
        FROM UNNEST(event_params)
        WHERE key = 'page_location') AS sayfa
FROM `proje.analytics_123456.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20241101' AND '20241130'
  AND event_name = 'page_view';
Bu uygulamadaDiziler ve UNNEST çalışır; STRUCT içeren sorgular yalnızca okunabilir örnek olarak gösterilir.
Alıştırmalara geç (3)