Join işlemi iki farklı başlık altında ele alınabilir
Stream-to-Batch Join
Kafka ve JDBC tabloları arasındaki join
Batch-to-Batch Join
JDBC tabloları arasındaki join
1. Stream-to-Batch Join
Apache Calcite bir şekilde JDBC tarafında kullanılacak indeksleri bulamıyor. hazelcast-sql modülündeki JetJoinInfo sınıfının hem leftEquiJoinIndices hem de rightEquiJoinIndices dizisi boş geliyor. Yani JDBC tarafında hangi sütunlar için WHERE koşulu çalıştırılacağını bulamıyoruz. Bu yüzden JDBC tablosu için
SELECT column1, column2 FROM mytable;
şeklinde bir sorgu çalıştırılıyor.
- SELECT bölümündeki çekilecek sütunlar listesi List<RexNode> projection değişkeninden geliyor. Aslında SELECT * yapılsa da olurdu
- Tüm JDBC tablosu üzerinde yürüyerek sol taraftaki satır ile sağ taraftaki satırın belirtilen koşula uyup uymadığı kontrol ediliyor. Yani aslında FullScan yapılıyor.
2. Batch-to-Batch Join
Apache Calcite bir şekilde sağ taraftaki JDBC tablosunda kullanılacak indeksleri buluyor. JetJoinInfo sınıfının rightEquiJoinIndices dizisi dolu geliyor. Bu durumda sağ tabloda hangi sütunlar için WHERE koşulu çalıştırılacağını bulabiliyoruz. Bu yüzden JDBC tablosu için
SELECT colum1, colum2 FROM mytable WHERE colum1 = ? AND column2 = ?;
şeklinde bir sorgu çalıştırılıyor.
- SELECT bölümündeki çekilecek sütunlar listesi List<RexNode> projection değişkeninden geliyor.
- WHERE bölümündeki değişkenler listesi rightEquiJoinIndices değişkeninden geliyor.
- Satırları sorgulama aşamasında yani PreparedStatement ile sorgularken soru işaretlerinin yerine de sol taraftan gelen satırdaki değerler bağlanıyor. Yani bir anlamda IndexScan yapılıyor.
Hiç yorum yok:
Yorum Gönder