Müştəri Məlumat Platformaları

BigQuery-nin Boru Sintaksisi: SQL-i daha asan, daha sürətli və daha oxunaqlı etmək

Kiminlə işləyibsə SQL onunla gələn sevgi-nifrət münasibətini bilir. SQL güclü, standartlaşdırılmış və ifadəlidir, lakin eyni zamanda miqyasda oxumaq və saxlamaq üçün ən qeyri-intuitiv dillərdən biridir. Sorğunuz nə qədər dərin olarsa, əslində nə baş verdiyini və hansı ardıcıllıqla baş verdiyini anlamaq bir o qədər çətinləşir.

Bunun səbəbi SQL-in düşündüyünüz ardıcıllıqla axmamasıdır. Yazmaqla başlayırsınız SELECT, lakin verilənlər bazası əslində bunu ilk dəfə emal etmir. Mühərrik ilə başlayır FROM bəndinə daxil olur, sonra verilənlərə qoşulur, onu süzür, ümumiləşdirir və yalnız sonra çeşidləmə və proyeksiya tətbiq edir. Nəticə yazılmış bir sorğudur geri icra üsuluna nisbətən.

Sintaksis və icra arasındakı bu uyğunsuzluq SQL-i həm idrak baxımından ağır, həm də hesablama baxımından bahalı edir. Analitiklər çox vaxt alt sorğulara və ya Ümumi Cədvəl İfadələrinə (CTE-lər) lazımsız mürəkkəblik və artıqlıq əlavə edərək yuxarıdan aşağıya axını simulyasiya etmək. Hətta təcrübəli istifadəçilər həll etdikləri problemə diqqət yetirmək əvəzinə məntiqin iç-içə bloklarını düzəldirlər.

Bunu həll etmək üçün BigQuery supports1s oxunduqları ardıcıllıqla yerinə yetirilir. Məntiqi içəridən yazmaq əvəzinə, onu addım-addım, məsələn, məlumat kəməri kimi yazırsınız - hər bir sətir fərqli bir transformasiyanı təmsil edir. Nəticə daha asan başa düşülən, sazlanması daha asan və müasir verilənlərin təhlili üçün daha intuitiv olan SQL-dir.

google boru sintaksisi 1
Mənbə: google

Yuxarıdakı şəkil boru sintaksisinin həll etdiyi əsas problemi göstərir. Ənənəvi SQL-də sintaktik sıra (sorğunu necə yazırsınız) ilə səhv uyğunlaşdırılıb semantik sıra (verilənlər bazası əslində onu necə emal edir). Məsələn, SELECT yuxarıda görünür, lakin qoşulma, filtrləmə, qruplaşdırma və çeşidləmə tamamlanana qədər mühərrik onu qiymətləndirmir.

Bu ardıcıllıq BigQuery boru sorğusunun məntiqi və sintaktik axınını - yuxarıdan aşağıya, soldan sağa - verilənlər bazasının məlumatları necə emal etdiyini əks etdirir.

  • FROM: İstənilən boru sorğusunun başlanğıc nöqtəsi. Məlumatların axdığı ilkin cədvəli və ya alt sorğunu müəyyən edir. Boru sintaksisində, FROM etibarlı sorğu kimi tək dayana bilər və ardıcıl boru xəttinə giriş kimi çıxış edir.
  • QOŞULUN: Cari cədvəli başqa cədvəldən və ya alt sorğudan əlavə sütun və sətirlərlə genişləndirir. Ardıcıl olaraq bir neçə dəfə istifadə edilə bilər (|> JOIN table USING (key)), sol-dərin birləşmə ağaclarını iç içə alt sorğular olmadan oxunaqlı etmək.
  • Dəst: Mövcud sütun dəyərlərini yerində yeniləyir (|> SET column = expression). kimi funksiyalar SELECT * REPLACE(...) standart SQL-də, lakin boru kəməri addımı kimi istifadə edildikdə daha oxunaqlı və moduldur.
  • UZATIN: Mövcud verilənlər bazasına hesablanmış sütunlar əlavə edir (|> EXTEND expression AS new_column). SELECT * kimi, standart SQL-də new_column, lakin birləşmələr və filtrlər kimi digər əməliyyatlar arasında əldə edilmiş sahələrin artımlı yaradılmasına imkan verir.
  • DAMCI: Cari verilənlər dəstindən bir və ya bir neçə sütunu silir (|> DROP column_name). bərabərdir SELECT * EXCEPT(column) standart SQL-də və tez-tez çıxışı sadələşdirmək və ya aralıq məlumat ölçüsünü azaltmaq üçün istifadə olunur.
  • Harada olursunuzsa olun: Şərti təmin edən sətirləri filtrləyir (|> WHERE condition). HAVING və QUALFY kimi müxtəlif açar sözlərə ehtiyacı aradan qaldıraraq, birləşmədən əvvəl və ya sonra boru kəmərinin istənilən yerində görünə bilər.
  • QREQƏT: Tam cədvəl və ya qruplaşdırılmış toplamaları yerinə yetirir (|> AGGREGATE SUM(column) AS total GROUP BY category). SELECT daxilində GROUP BY və aqreqasiya funksiyalarını əvəz edir, sintaksisi sadələşdirir və onu əməliyyatların məntiqi sırasına uyğunlaşdırır.
  • SİFARİŞ: Sətirləri artan və ya azalan qaydada çeşidləyir (|> ORDER BY column DESC). kimi operatorlar tərəfindən izlənilə bilən sifarişli nəticə cədvəli yaradır LIMIT.
  • LIMIT: Nəticədə sətirlərin sayını məhdudlaşdırır (|> LIMIT 10). Sonra işləyir ORDER BY və ya süzgəclərin və aqreqasiyaların təbii ardıcıllığını qoruyaraq sıralanmamış cədvəllərdə.
  • ZƏNG: Cari cədvəldən giriş kimi istifadə edərək cədvəl dəyərli funksiyanı və ya maşın öyrənmə modelini icra edir (|> CALL ML.PREDICT(MODEL project.model_name)). Xətti və oxuna bilən iş axını yaradaraq, daxili funksiya çağırışlarına ehtiyacı aradan qaldırır.
  • SEÇİM: Çıxışa daxil ediləcək sütunların son proyeksiyasını müəyyən edir (|> SELECT column1, column2). Sona bənzər bir boru kəmərində bağlanma əməliyyatı kimi xidmət edir SELECT standart SQL sorğusunda.

Aşağıda boru sintaksisinin SQL məntiqini sadələşdirdiyi, sorğuları daha təmiz və işləməyi sürətləndirdiyi ən ümumi ssenarilər verilmişdir.

Alt sorğular olmadan məlumatların toplanması

Aqreqasiyalar SQL-in içəridə hiss etməyə başladığı yerdir. Əgər nəyisə saymaq istəyirsənsə, o sayları say, birdən mötərizədə cəhənnəmin içində olursan.

SQL

SELECT c_count, COUNT(*) AS custdist
FROM (
  SELECT c_custkey, COUNT(o_orderkey) AS c_count
  FROM customer
  JOIN orders ON c_custkey = o_custkey
  WHERE o_comment NOT LIKE '%unusual%packages%'
  GROUP BY c_custkey
)
GROUP BY c_count
ORDER BY custdist DESC;

Boru sintaksisi

FROM customer
|> JOIN orders ON c_custkey = o_custkey
   AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) AS c_count GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist GROUP BY c_count
|> ORDER BY custdist DESC;

Artıq yuvalama və ya ikiqat qruplaşma yoxdur. Hər bir addım məntiqi şəkildə axır və bütün sorğunu yenidən yazmadan müstəqil şəkildə dəyişdirilə bilər.

Sütunların Addım-addım təmizlənməsi və dəyişdirilməsi

Mətni kiçik hərflərlə yazmaq, ümumiləri hesablamaq və əlavə sütunları buraxmaq lazım olduqda, standart SQL sizi birdən çox mətni yenidən yazmağa məcbur edir. SELECT bəyanatlar. Boru sintaksisi təqdim edir SET, EXTENDDROP operatorları istifadə edərək, dəyişiklikləri ardıcıllıqla tətbiq edə bilərsiniz.

SQL

SELECT o_custkey, ROUND(o_totalprice) AS total_price
FROM (
  SELECT
    o_custkey,
    o_totalprice,
    LOWER(o_orderstatus) AS o_orderstatus
  FROM orders
)
WHERE total_price > 1000;

Boru sintaksisi

FROM orders
|> SET o_orderstatus = LOWER(o_orderstatus)
|> EXTEND ROUND(o_totalprice) AS total_price
|> WHERE total_price > 1000
|> SELECT o_custkey, total_price;

Hər bir əməliyyat əvvəlki əməliyyat üzərində qurulur, bu da transformasiyaları izləməyi və məntiqdən təkrar istifadə etməyi asanlaşdırır.

Toplamadan sonra "VAR" ı xatırlamadan filtrləmə

SQL-in qəribəliklərindən biri filtrlərin vaxtının bənddən asılı olaraq dəyişməsidir. istifadə edirsən WHERE qruplaşdırmadan əvvəl və HAVING sonra, lakin əslində, hər ikisi sadəcə sətirləri süzür. Boru sintaksisi istifadə etməyə imkan verir WHERE ardıcıl olaraq, harada yerləşdirməyinizdən asılı olmayaraq.

SQL

SELECT department, COUNT(*) AS emp_count
FROM employees
WHERE active = TRUE
GROUP BY department
HAVING COUNT(*) > 5;

Boru sintaksisi

FROM employees
|> WHERE active = TRUE
|> AGGREGATE COUNT(*) AS emp_count GROUP BY department
|> WHERE emp_count > 5;

İndi siz onlar haqqında düşündüyünüz ardıcıllıqla filtrləri yaza bilərsiniz: əvvəlcə məlumatları süzün, sonra qruplaşdırın, sonra nəticələr üzrə yenidən filtrləyin.

Müvəqqəti Cədvəllər Olmadan Sorğuların Sazlanması

Standart SQL-də aralıq nəticənin yoxlanılması ya müvəqqəti cədvəlin yaradılmasını, ya da kodun çoxsaylı CTE-lərə sarılmasını tələb edir. Boru sintaksisi ilə siz sorğunu boru kəmərinin istənilən nöqtəsinə qədər icra edə bilərsiniz.

SQL

WITH filtered AS (
  SELECT * FROM orders WHERE o_totalprice > 500
),
summed AS (
  SELECT o_custkey, SUM(o_totalprice) AS total
  FROM filtered GROUP BY o_custkey
)
SELECT * FROM summed WHERE total > 10000;

Boru sintaksisi

FROM orders
|> WHERE o_totalprice > 500
|> AGGREGATE SUM(o_totalprice) AS total GROUP BY o_custkey
|> WHERE total > 10000;

Sorğunun hər bir prefiksi öz-özünə yerinə yetirilə bilər, yəni siz istənilən mərhələdə məlumatlara “baxa bilərsiniz”. Bu, sazlamaq və təkrarlamaq üçün daha təmiz, daha interaktiv bir yoldur.

Yuvalamadan Zəncirləmə Modelləri və Funksiyaları

Cədvəllə qiymətləndirilən funksiyalar və ya BigQuery ML modelləri ilə işləyərkən yuvalama tez oxunmaz ola bilər. Boru sintaksisi bu yuvalanmış zəngləri CALL istifadə edərək xətti zəncirləmə ilə əvəz edir.

SQL

SELECT *
FROM ML.PREDICT(
  MODEL `project.sentiment_model`,
  (SELECT text FROM reviews)
);

Boru sintaksisi

SELECT text FROM reviews
|> CALL ML.PREDICT(MODEL `project.sentiment_model`);

Birdən çox model və ya transformasiya tətbiq etsəniz, sadəcə olaraq əlavə ZƏNG sətirləri yığırsınız - mötərizə tələb olunmur.

İçəri daxil edilmiş seçimlər olmadan məlumatların fırlanması

Məlumatların döndərilməsi həmişə yorucu proses olub, çox vaxt alt sorğuların təbəqələrini tələb edir. Boru sintaksisi onu bir axan ardıcıllıqla sadələşdirir.

SQL

SELECT *
FROM (
  SELECT n_name, c_acctbal, c_mktsegment
  FROM customer JOIN nation USING (n_nationkey)
)
PIVOT(SUM(c_acctbal) FOR n_name IN ('PERU', 'KENYA', 'JAPAN'));

Boru sintaksisi

FROM customer
|> JOIN nation USING (n_nationkey)
|> SELECT n_name, c_acctbal, c_mktsegment
|> PIVOT(SUM(c_acctbal) FOR n_name IN ('PERU', 'KENYA', 'JAPAN'));

Sorğu indi hekayə kimi oxunur: məlumatlarınızla başlayın, ona qoşulun, lazım olanı seçin, sonra döndərin.

Niyə Boru Sintaksisi Oyun Dəyişdiricidir

Boru sintaksisi SQL-i yenidən kəşf etmir - onu aydınlaşdırır. O, SQL-in deklarativ strukturu ilə bağlı güclü olan hər şeyi qoruyur, lakin məntiqi geriyə yazmaq üçün koqnitiv yükü aradan qaldırır.

Məlumat alimləri, analitiklər və mühəndislər üçün bu o deməkdir:

  • Sorğuları oxumaq, yazmaq və sazlamaq daha asandır
  • Sadə tapşırıqlar üçün alt sorğular və ya CTE ilə hoqqalara daha çox ehtiyac yoxdur
  • Əslində necə düşündüyünüzü əks etdirən sadələşdirilmiş məntiq
  • Daha yaxşı performans və daha az lazımsız əməliyyatlar

BigQuery-nin boru sintaksisi müasir verilənlər dövrü üçün SQL-dir - xətti, intuitiv və real dünya analitikası üçün optimallaşdırılmışdır.

William Karr

Bill OpenINSIGHTS-də Baş Məlumat Elmidir və pərakəndə müştərilər üçün məlumat elmi əməliyyatlarını idarə edir. Onun elmlər namizədi var. Urbana-Champaign İllinoys Universitetində Riyaziyyat və hesablama elmləri və mühəndislik üzrə magistr sertifikatı. Onun dövründə… Ətraflı »
Başa dön düyməsini basın
yaxın

Adblock Aşkarlandı

Biz saxlamaq üçün reklamlara və sponsorluqlara etibar edirik Martech Zone pulsuz. Lütfən, reklam blokerinizi deaktiv edin və ya sərfəli, reklamsız illik üzvlüklə (10 ABŞ dolları) bizə dəstək olun:

İllik Üzvlük üçün Qeydiyyatdan Keçin