6 puan yazan xguru 2025-07-01 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Farklı veritabanları ile analiz ve sorgu motorları arasında yapısal veri işleme işlemlerinin (ilişkisel cebir, sorgu planları vb.) serileştirilerek değiş tokuş edilebilmesi için tasarlanmış açık kaynaklı bir format ve arayüz
  • DuckDB, Spark, DataFusion, Sirius gibi çeşitli DB, dağıtık işleme ve sorgu motorlarında farklı sistemler arasında sorgu/yürütme planı değişimi ve uyumluluk sağlama amacıyla benimseniyor ve kullanıma alınıyor
  • SQL, DataFrame, Pandas gibi farklı sorgu dilleri veya motorlarının yürütme planlarını tarafsız/standartlaştırılmış formatlarda (Protocol Buffers, YAML, JSON vb.) ifade ederek eklenti, üçüncü taraf motor entegrasyonu ve donanım hızlandırıcı bağlantısını basitleştiriyor

Substrait nedir?

  • Veri analizi/işleme sistemlerinin "sorgu planını (Logical/Physical Plan)" standart bir formatta tanımlayan açık kaynaklı bir proje
    • SQL, DataFrame, LINQ gibi çeşitli dillerin sorgu yapısını (ör. SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter vb.) standart bir şemaya serileştirip geri açabilir
  • Veritabanı ve motorların her birinde sorgu çözücüleri ve yürütme planları farklı olduğundan, birlikte çalışabilirlik ve donanım hızlandırıcı kullanımında sınırlamalar oluşur → bunları ortak bir standartla (ara gösterim) soyutlar
  • SQL, DataFrame, Pandas gibi farklı sorgu dilleri ve çerçevelerin yürütme planları Substrait formatına dönüştürülerek paylaşılabilir

Substrait'in başlıca özellikleri

  • Tarafsız sorgu gösterimi: Hem mantıksal (logical operators) hem fiziksel (execution operators) sorgu planlarını ifade edebilir
  • Protocol Buffers tabanlı serileştirme (çoğunlukla .proto şemaları kullanılır) sayesinde farklı diller ve sistemler arasında verimli veri alışverişi sağlar
  • Motor/eklenti genişletilebilirliği: Yeni fonksiyonlar, operatörler ve tipler de eklenti yaklaşımıyla genişletilebilir
  • Donanım hızlandırıcı entegrasyonu: GPU/FPGA/özel hızlandırıcı motorlarıyla sorgu planı düzeyinde kolay entegrasyon sağlar (Sirius, Velox, NVIDIA RAPIDS vb.)
  • Platformlar arası birlikte çalışma: Veri gölü, dağıtık işleme ve yerel analiz gibi farklı motorlar aynı sorgu planını kabul edip çalıştırabilir

Substrait neden önemli?

  • Her motorun ayrı özel arayüzler geliştirmesi gerekmeden, yalnızca Substrait desteğiyle ekosistem entegrasyonu anında mümkün olur
  • Veri motorları ve platformları arasında "sorgu/analiz yürütme planlarının ortak dili" işlevini görür
    • Veritabanında sorgu → Substrait planı → GPU/dağıtık motor veya ayrı hızlandırıcıya aktarım ve yürütme
    • Sorguyu dönüştürmeye veya yeniden yazmaya gerek kalmadan, "yürütme planı düzeyinde" motorlar arasında bağlantı kurar
  • Yeni bir sorgu motoru ortaya çıktığında bile kolayca "eklenti" olarak değiştirilebilir veya birleştirilebilir (motor değiştirme esnekliği)
  • SQL/Python/dağıtık sorgular gibi farklı sorgu dilleri ve ortamlarını birleştirir
  • Küme/dağıtık ortamlarda farklı motorların birlikte çalıştırılmasını mümkün kılar (heterojen ortam desteği)
  • Metin sürümü sunması sayesinde sorgu planları kolayca analiz edilebilir veya görselleştirme araçlarıyla entegre edilebilir

Gerçek kullanım örnekleri

  • SQL ayrıştırıcısı ile yürütme motoru arasında sorgu planı değişimi (Calcite → Arrow, DuckDB → Sirius vb.)
    • DuckDB: Dahili sorgu planını Substrait olarak dışa aktarma (export), dışarıdan Substrait sorgusu içe alma (import) desteği sunar
    • Sirius: DuckDB tarafından oluşturulan Substrait sorgu planını olduğu gibi alıp GPU üzerinde SQL çalıştırabilir; sorgu ayrıştırma/değiştirme gerekmez
  • Veri çerçevesi işlemlerini (Pandas vb.) harici veritabanlarında çalıştırma
  • Üçüncü taraf sorgu planı görselleştirme araçları (D3, Web vb.) geliştirme
  • Velox, Spark, DataFusion vb.: Kendi sorgu planlarını Substrait olarak dışa aktararak çeşitli analiz ve hızlandırma motorlarıyla entegre olur

Teknik olarak nasıl bir yapısı var?

  • Substrait planları çoğunlukla Protocol Buffers (.proto) tabanlı olarak tanımlanır
    • LogicalPlan, PhysicalPlan, Rel, Expression, Function gibi bileşenlerden oluşur
    • Filter, Join, Aggregate, Project, Sort gibi operatörler için açık şemalar içerir
  • Genişletilebilir fonksiyon/tip kataloğu ve UDF (User-Defined Function) desteğiyle genişletilebilir

Sonuç

  • Substrait, veritabanı ve analiz platformu ekosisteminde "sorgu yürütme planı standardı" olarak, motorlar arası birlikte çalışabilirlik, donanım hızlandırma ve veri ekosistemi ölçeklenebilirliğinin temelini oluşturur
  • Donanım hızlandırıcı entegrasyonunu ve sorgu motoru birleşimini basitleştiren temel bir standart haline geliyor; karmaşık sorgu ayrıştırma/dönüştürme süreçleri olmadan yüksek performanslı analiz altyapıları kurmayı kolaylaştırıyor

Henüz yorum yok.

Henüz yorum yok.