Giriş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.