Apache Presto - Hızlı Kılavuz
Veri analitiği, daha iyi karar vermek için ilgili bilgileri toplamak üzere ham verileri analiz etme sürecidir. Öncelikle birçok organizasyonda iş kararları vermek için kullanılır. Büyük veri analitiği büyük miktarda veri içerir ve bu süreç oldukça karmaşıktır, bu nedenle şirketler farklı stratejiler kullanır.
Örneğin Facebook, dünyanın önde gelen veri odaklı ve en büyük veri ambarı şirketlerinden biridir. Facebook ambar verileri, büyük ölçekli hesaplama için Hadoop'ta saklanır. Daha sonra, depo verileri petabaytlara ulaştığında, düşük gecikmeli yeni bir sistem geliştirmeye karar verdiler. 2012 yılında Facebook ekip üyeleri,“Presto” petabaytlarca veriyle bile hızlı çalışacak etkileşimli sorgu analizi için.
Apache Presto nedir?
Apache Presto, düşük gecikme süresi ve etkileşimli sorgu analizi için optimize edilmiş dağıtılmış bir paralel sorgu yürütme motorudur. Presto, sorguları kolayca çalıştırır ve gigabayttan petabaytlara kadar bile kesinti olmadan ölçeklenir.
Tek bir Presto sorgusu, HDFS, MySQL, Cassandra, Hive ve daha birçok veri kaynağı gibi birden çok kaynaktan gelen verileri işleyebilir. Presto, Java'da yerleşiktir ve diğer veri altyapısı bileşenleriyle entegrasyonu kolaydır. Presto güçlüdür ve Airbnb, DropBox, Groupon, Netflix gibi önde gelen şirketler bunu benimsiyor.
Presto - Özellikler
Presto aşağıdaki özellikleri içerir -
- Basit ve genişletilebilir mimari.
- Takılabilir konektörler - Presto, sorgular için meta veri ve veri sağlamak için takılabilir konektörü destekler.
- Ardışık düzenlenmiş yürütmeler - Gereksiz G / Ç gecikmesi ek yükünü önler.
- Kullanıcı tanımlı işlevler - Analistler, kolayca geçiş yapmak için özel kullanıcı tanımlı işlevler oluşturabilir.
- Vektörize sütunlu işleme.
Presto - Avantajlar
İşte Apache Presto'nun sunduğu avantajların bir listesi:
- Uzmanlaşmış SQL işlemleri
- Kurulumu ve hata ayıklaması kolay
- Basit depolama soyutlaması
- Düşük gecikme süresiyle petabaytlık verileri hızla ölçeklendirir
Presto - Uygulamalar
Presto, günümüzün en iyi endüstriyel uygulamalarının çoğunu destekler. Bazı önemli uygulamalara bir göz atalım.
Facebook- Facebook, veri analizi ihtiyaçları için Presto'yu kurdu. Presto, büyük veri hızlarını kolayca ölçeklendirir.
Teradata- Teradata, Büyük Veri analizi ve veri ambarlamada uçtan uca çözümler sunar. Teradata'nın Presto'ya katkısı, daha fazla şirketin tüm analitik ihtiyaçlarını karşılamasını kolaylaştırır.
Airbnb- Presto, Airbnb veri altyapısının ayrılmaz bir parçasıdır. Her gün yüzlerce çalışan teknolojiyle ilgili sorgulama yapıyor.
Neden Presto?
Presto, veri analistleri ve geliştiricileri için işi çok kolaylaştıran standart ANSI SQL'i destekler. Java'da yerleşik olmasına rağmen, bellek ayırma ve çöp toplama ile ilgili tipik Java kodu sorunlarını önler. Presto, Hadoop dostu bir bağlayıcı mimarisine sahiptir. Dosya sistemlerini kolayca takmaya izin verir.
Presto, birden çok Hadoop dağıtımında çalışır. Ek olarak, Presto, Cassandra'yı, ilişkisel veritabanlarını veya diğer veri depolarını sorgulamak için bir Hadoop platformundan ulaşabilir. Bu çapraz platform analitik özelliği, Presto kullanıcılarının gigabayttan petabaytlarca veriye kadar maksimum iş değerini elde etmesine olanak tanır.
Presto'nun mimarisi, klasik MPP (büyük ölçüde paralel işleme) DBMS mimarisine neredeyse benzer. Aşağıdaki şema Presto'nun mimarisini göstermektedir.
Yukarıdaki şema farklı bileşenlerden oluşmaktadır. Aşağıdaki tablo her bir bileşeni ayrıntılı olarak açıklamaktadır.
S.No | Bileşen Açıklaması |
---|---|
1. | Client İstemci (Presto CLI), sonucu almak için SQL ifadelerini bir koordinatöre gönderir. |
2. | Coordinator Koordinatör, usta bir arka plan programıdır. Koordinatör önce SQL sorgularını ayrıştırır, ardından sorgu yürütme için analiz eder ve planlar. Zamanlayıcı, boru hattı yürütmesini gerçekleştirir, işi en yakın düğüme atar ve ilerlemeyi izler. |
3. | Connector Depolama eklentilerine bağlayıcılar denir. Hive, HBase, MySQL, Cassandra ve daha pek çoğu bir bağlayıcı görevi görür; aksi takdirde özel bir tane de uygulayabilirsiniz. Bağlayıcı, sorgular için meta veriler ve veriler sağlar. Koordinatör, bir sorgu planı oluşturmak için meta verileri almak üzere bağlayıcıyı kullanır. |
4. | Worker Koordinatör, çalışan düğümlere görev atar. Çalışanlar konektörden gerçek verileri alır. Son olarak, çalışan düğümü istemciye sonuç verir. |
Presto - İş Akışı
Presto, bir düğüm kümesi üzerinde çalışan dağıtılmış bir sistemdir. Presto'nun dağıtılmış sorgu motoru, etkileşimli analiz için optimize edilmiştir ve karmaşık sorgular, toplamalar, birleştirmeler ve pencere işlevleri dahil olmak üzere standart ANSI SQL'i destekler. Presto mimarisi basit ve genişletilebilir. Presto istemcisi (CLI), SQL ifadelerini bir ana daemon koordinatörüne gönderir.
Planlayıcı, yürütme hattı üzerinden bağlanır. Programlayıcı, verilere en yakın olan düğümlere iş atar ve ilerlemeyi izler. Koordinatör, görevi birden çok çalışan düğümüne atar ve son olarak çalışan düğümü sonucu istemciye geri gönderir. İstemci, verileri çıktı işleminden alır. Genişletilebilirlik anahtar tasarımdır. Hive, HBase, MySQL vb. Gibi takılabilir konektörler sorgular için meta veri ve veri sağlar. Presto, bu farklı türdeki veri kaynaklarına karşı SQL sorgu yeteneği sağlamayı kolaylaştıran "basit bir depolama soyutlaması" ile tasarlanmıştır.
Yürütme Modeli
Presto, SQL semantiğini desteklemek için tasarlanmış operatörlerle özel sorgu ve yürütme motorunu destekler. İyileştirilmiş programlamaya ek olarak, tüm işlemler bellekte ve ağda farklı aşamalar arasında ardışık düzenlenmiştir. Bu, gereksiz G / Ç gecikmesi ek yükünü önler.
Bu bölüm, Presto'nun makinenize nasıl kurulacağını açıklayacaktır. Presto'nun temel gereksinimlerini inceleyelim,
- Linux veya Mac OS
- Java sürüm 8
Şimdi Presto'yu makinenize kurmak için aşağıdaki adımlara devam edelim.
Java yüklemesini doğrulama
Umarım şu anda makinenize Java sürüm 8'i yüklemişsinizdir, bu nedenle aşağıdaki komutu kullanarak bunu doğrulamanız yeterlidir.
$ java -version
Java, makinenize başarıyla yüklendiyse, yüklü Java sürümünü görebilirsiniz. Java yüklü değilse, makinenize Java 8 yüklemek için sonraki adımları izleyin.
JDK'yı indirin. Aşağıdaki bağlantıyı ziyaret ederek JDK'nın en son sürümünü indirin.
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
En son sürüm JDK 8u 92 ve dosya "jdk-8u92-linux-x64.tar.gz" dir. Lütfen dosyayı makinenize indirin.
Bundan sonra, dosyaları çıkarın ve belirli bir dizine gidin.
Ardından Java alternatiflerini ayarlayın. Sonunda Java makinenize yüklenecek.
Apache Presto Kurulumu
Aşağıdaki bağlantıyı ziyaret ederek Presto'nun en son sürümünü indirin,
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/
Şimdi "presto-server-0.149.tar.gz" nin son sürümü makinenize indirilecektir.
Tar Dosyalarını Çıkarın
Ayıkla tar aşağıdaki komutu kullanarak dosya -
$ tar -zxf presto-server-0.149.tar.gz
$ cd presto-server-0.149
Yapılandırma ayarları
"Veri" dizini oluşturun
Kurulum dizininin dışında, günlükleri, meta verileri vb. Depolamak için kullanılacak bir veri dizini oluşturun, böylece Presto'yu yükseltirken kolayca korunacaktır. Aşağıdaki kod kullanılarak tanımlanır -
$ cd
$ mkdir data
Bulunduğu yolu görüntülemek için "pwd" komutunu kullanın. Bu konum sonraki node.properties dosyasında atanacaktır.
"Etc" dizini oluşturun
Aşağıdaki kodu kullanarak Presto kurulum dizini içinde bir etc dizini oluşturun -
$ cd presto-server-0.149
$ mkdir etc
Bu dizin yapılandırma dosyalarını tutacaktır. Her dosyayı tek tek oluşturalım.
Düğüm Özellikleri
Presto düğüm özellikleri dosyası, her düğüme özgü ortam yapılandırmasını içerir. Aşağıdaki kod kullanılarak etc dizininde (etc / node.properties) oluşturulur -
$ cd etc
$ vi node.properties
node.environment = production
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir = /Users/../workspace/Presto
Tüm değişiklikleri yaptıktan sonra dosyayı kaydedin ve terminalden çıkın. Burayanode.data yukarıda oluşturulan veri dizininin konum yoludur. node.id her düğüm için benzersiz tanımlayıcıyı temsil eder.
JVM Yapılandırması
Etc dizini (etc / jvm.config) içinde bir “jvm.config” dosyası oluşturun. Bu dosya, Java Sanal Makinesi'ni başlatmak için kullanılan komut satırı seçeneklerinin bir listesini içerir.
$ cd etc
$ vi jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize = 32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError = kill -9 %p
Tüm değişiklikleri yaptıktan sonra dosyayı kaydedin ve terminalden çıkın.
Yapılandırma Özellikleri
Etc dizini (etc / config.properties) içinde bir "config.properties" dosyası oluşturun. Bu dosya, Presto sunucusunun yapılandırmasını içerir. Test için tek bir makine kuruyorsanız, Presto sunucusu yalnızca aşağıdaki kod kullanılarak tanımlanan koordinasyon süreci olarak işlev görebilir -
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = true
http-server.http.port = 8080
query.max-memory = 5GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
Buraya,
coordinator - ana düğüm.
node-scheduler.include-coordinator - Koordinatör üzerinde zamanlama çalışması sağlar.
http-server.http.port - HTTP sunucusu için bağlantı noktasını belirtir.
query.max-memory=5GB - Maksimum dağıtılmış bellek miktarı.
query.max-memory-per-node=1GB - Düğüm başına maksimum bellek miktarı.
discovery-server.enabled - Presto, kümedeki tüm düğümleri bulmak için Keşif hizmetini kullanır.
discovery.uri - Discovery sunucusuna URI.
Birden fazla makine Presto sunucusu kuruyorsanız, Presto hem koordinasyon hem de çalışan süreç olarak işlev görür. Presto sunucusunu birden fazla makinede test etmek için bu yapılandırma ayarını kullanın.
Koordinatör için Yapılandırma
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
İşçi için Yapılandırma
$ cd etc
$ vi config.properties
coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery.uri = http://localhost:8080
Günlük Özellikleri
Etc dizini (etc / log.properties) içinde bir “log.properties” dosyası oluşturun. Bu dosya, adlandırılmış günlükçü hiyerarşileri için minimum günlük seviyesini içerir. Aşağıdaki kod kullanılarak tanımlanır -
$ cd etc
$ vi log.properties
com.facebook.presto = INFO
Dosyayı kaydedin ve terminalden çıkın. Burada DEBUG, INFO, WARN ve ERROR gibi dört günlük seviyesi kullanılır. Varsayılan günlük düzeyi BİLGİ'dir.
Katalog Özellikleri
Etc dizini (etc / catalog) içinde bir "katalog" dizini oluşturun. Bu, verileri bağlamak için kullanılacaktır. Örneğin, oluşturunetc/catalog/jmx.properties aşağıdaki içeriklerle jmx connector jmx kataloğu olarak -
$ cd etc
$ mkdir catalog $ cd catalog
$ vi jmx.properties
connector.name = jmx
Presto'yu Başlat
Presto, aşağıdaki komut kullanılarak başlatılabilir,
$ bin/launcher start
Sonra buna benzer bir yanıt göreceksiniz,
Started as 840
Presto'yu çalıştır
Presto sunucusunu başlatmak için aşağıdaki komutu kullanın -
$ bin/launcher run
Presto sunucusunu başarıyla başlattıktan sonra, günlük dosyalarını “var / log” dizininde bulabilirsiniz.
launcher.log - Bu günlük, başlatıcı tarafından oluşturulur ve sunucunun stdout ve stderr akışlarına bağlanır.
server.log - Bu, Presto tarafından kullanılan ana günlük dosyasıdır.
http-request.log - Sunucu tarafından alınan HTTP isteği.
Şu an itibariyle, Presto konfigürasyon ayarlarını makinenize başarıyla yüklediniz. Presto CLI kurulum adımlarına devam edelim.
Presto CLI'yi yükleyin
Presto CLI, sorguları çalıştırmak için terminal tabanlı etkileşimli bir kabuk sağlar.
Aşağıdaki bağlantıyı ziyaret ederek Presto CLI'yi indirin,
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/
Şimdi “presto-cli-0.149-execable.jar” makinenize yüklenecek.
CLI'yi çalıştır
Presto-cli'yi indirdikten sonra, onu çalıştırmak istediğiniz konuma kopyalayın. Bu konum, koordinatöre ağ erişimi olan herhangi bir düğüm olabilir. Önce Jar dosyasının adını Presto olarak değiştirin. Sonra onu çalıştırılabilir hale getirinchmod + x aşağıdaki kodu kullanarak komut -
$ mv presto-cli-0.149-executable.jar presto
$ chmod +x presto
Şimdi aşağıdaki komutu kullanarak CLI'yi çalıştırın,
./presto --server localhost:8080 --catalog jmx --schema default
Here jmx(Java Management Extension) refers to catalog and default referes to schema.
Aşağıdaki yanıtı göreceksiniz,
presto:default>
Şimdi terminalinize "jps" komutunu yazın ve çalışan arka plan programlarını göreceksiniz.
Presto'yu durdur
Tüm yürütmeleri gerçekleştirdikten sonra, aşağıdaki komutu kullanarak presto sunucusunu durdurabilirsiniz -
$ bin/launcher stop
Bu bölümde, Presto için yapılandırma ayarları anlatılacaktır.
Presto Doğrulayıcı
Presto Verifier, Presto'yu başka bir veritabanına (MySQL gibi) karşı test etmek veya iki Presto kümesini birbirine karşı test etmek için kullanılabilir.
MySQL'de Veritabanı Oluşturun
MySQL sunucusunu açın ve aşağıdaki komutu kullanarak bir veritabanı oluşturun.
create database test
Artık sunucuda "test" veritabanı oluşturdunuz. Tabloyu oluşturun ve aşağıdaki sorgu ile yükleyin.
CREATE TABLE verifier_queries(
id INT NOT NULL AUTO_INCREMENT,
suite VARCHAR(256) NOT NULL,
name VARCHAR(256),
test_catalog VARCHAR(256) NOT NULL,
test_schema VARCHAR(256) NOT NULL,
test_prequeries TEXT,
test_query TEXT NOT NULL,
test_postqueries TEXT,
test_username VARCHAR(256) NOT NULL default 'verifier-test',
test_password VARCHAR(256),
control_catalog VARCHAR(256) NOT NULL,
control_schema VARCHAR(256) NOT NULL,
control_prequeries TEXT,
control_query TEXT NOT NULL,
control_postqueries TEXT,
control_username VARCHAR(256) NOT NULL default 'verifier-test',
control_password VARCHAR(256),
session_properties_json TEXT,
PRIMARY KEY (id)
);
Yapılandırma Ayarları Ekle
Doğrulayıcıyı yapılandırmak için bir özellikler dosyası oluşturun -
$ vi config.properties
suite = mysuite
query-database = jdbc:mysql://localhost:3306/tutorials?user=root&password=pwd
control.gateway = jdbc:presto://localhost:8080
test.gateway = jdbc:presto://localhost:8080
thread-count = 1
Burada, query-database alanına aşağıdaki ayrıntıları girin - mysql veritabanı adı, kullanıcı adı ve şifre.
JAR Dosyasını İndir
Aşağıdaki bağlantıyı ziyaret ederek Presto-doğrulayıcı jar dosyasını indirin,
https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/
Şimdi versiyon “presto-verifier-0.149-executable.jar” makinenize indirilir.
JAR'ı yürüt
Aşağıdaki komutu kullanarak JAR dosyasını çalıştırın,
$ mv presto-verifier-0.149-executable.jar verifier
$ chmod+x verifier
Doğrulayıcıyı Çalıştır
Doğrulayıcıyı aşağıdaki komutu kullanarak çalıştırın,
$ ./verifier config.properties
Tablo Oluştur
Şimdi basit bir tablo oluşturalım “test” veritabanı aşağıdaki sorguyu kullanarak.
create table product(id int not null, name varchar(50))
Tablo Ekle
Bir tablo oluşturduktan sonra, aşağıdaki sorguyu kullanarak iki kayıt ekleyin,
insert into product values(1,’Phone')
insert into product values(2,’Television’)
Doğrulayıcı Sorgusunu Çalıştır
Doğrulayıcı sonucunu kontrol etmek için doğrulayıcı uçbiriminde (./verifier config.proplaces) aşağıdaki örnek sorguyu yürütün.
Örnek Sorgu
insert into verifier_queries (suite, test_catalog, test_schema, test_query,
control_catalog, control_schema, control_query) values
('mysuite', 'mysql', 'default', 'select * from mysql.test.product',
'mysql', 'default', 'select * from mysql.test.product');
Buraya, select * from mysql.test.product sorgu mysql kataloğunu ifade eder, test veritabanı adı ve producttablo adıdır. Bu şekilde, Presto sunucusunu kullanarak mysql konektörüne erişebilirsiniz.
Burada, performansı görmek için iki aynı seçme sorgusu birbirine karşı test edilir. Benzer şekilde, performans sonuçlarını test etmek için başka sorgular da çalıştırabilirsiniz. Ayrıca performans sonuçlarını kontrol etmek için iki Presto kümesi de bağlayabilirsiniz.
Bu bölümde, Presto'da kullanılan yönetim araçlarını tartışacağız. Presto'nun Web Arayüzü ile başlayalım.
Web Arayüzü
Presto, sorguları izlemek ve yönetmek için bir web arayüzü sağlar. Koordinatör Config Properties'de belirtilen port numarasından erişilebilir.
Presto sunucusunu ve Presto CLI'yi başlatın. Ardından aşağıdaki url'den web arayüzüne erişebilirsiniz -http://localhost:8080/
Çıktı yukarıdaki ekrana benzer olacaktır.
Burada ana sayfada, benzersiz sorgu kimliği, sorgu metni, sorgu durumu, tamamlanma yüzdesi, kullanıcı adı ve bu sorgunun oluşturulduğu kaynak gibi bilgilerle birlikte bir sorgu listesi bulunur. En son sorgular önce çalıştırılır, ardından tamamlanan veya tamamlanmayan sorgular alt kısımda görüntülenir.
Presto'da Performansı Ayarlama
Presto kümesinde performansla ilgili sorunlar varsa, varsayılan yapılandırma ayarlarınızı aşağıdaki ayarlarla değiştirin.
Yapılandırma Özellikleri
task. info -refresh-max-wait - Koordinatör iş yükünü azaltır.
task.max-worker-threads - Süreci böler ve her bir çalışan düğümüne atar.
distributed-joins-enabled - Karma tabanlı dağıtılmış birleştirmeler.
node-scheduler.network-topology - Ağ topolojisini planlayıcıya ayarlar.
JVM Ayarları
Varsayılan JVM ayarlarınızı aşağıdaki ayarlarla değiştirin. Bu, çöp toplama sorunlarını tanılamak için yardımcı olacaktır.
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCCause
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintReferenceGC
-XX:+PrintClassHistogramAfterFullGC
-XX:+PrintClassHistogramBeforeFullGC
-XX:PrintFLSStatistics = 2
-XX:+PrintAdaptiveSizePolicy
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount = 1
Bu bölümde, Presto'da nasıl sorgu oluşturup yürüteceğimizi tartışacağız. Presto destekli temel veri türlerini inceleyelim.
Temel Veri Türleri
Aşağıdaki tablo, Presto'nun temel veri tiplerini açıklamaktadır.
S.No | Veri türü ve Açıklama |
---|---|
1. | VARCHAR Değişken uzunlukta karakter verileri |
2. | BIGINT 64 bitlik işaretli tamsayı |
3. | DOUBLE 64 bitlik kayan noktalı çift kesinlik değeri |
4. | DECIMAL Sabit hassas ondalık sayı. Örneğin DECIMAL (10,3) - 10 kesinliktir, yani toplam basamak sayısı ve 3, kesirli nokta olarak gösterilen ölçek değeridir. Ölçek isteğe bağlıdır ve varsayılan değer 0'dır |
5. | BOOLEAN Boole değerleri true ve false |
6. | VARBINARY Değişken uzunluklu ikili veri |
7. | JSON JSON verileri |
8. | DATE Yıl-ay-gün olarak temsil edilen tarih veri türü |
9. | TIME, TIMESTAMP, TIMESTAMP with TIME ZONE TIME - Günün saati (saat-dakika-saniye-milisaniye) TIMESTAMP - Günün tarihi ve saati TIME ZONE ile TIMESTAMP - Değerden saat dilimi ile günün tarihi ve saati |
10. | INTERVAL Tarih ve saat veri türlerini uzatın veya genişletin |
11. | ARRAY Verilen bileşen türünün dizisi. Örneğin, ARRAY [5,7] |
12. | MAP Verilen bileşen türleri arasında eşleme yapın. Örneğin, HARİTA (ARRAY ['bir', 'iki'], ARRAY [5,7]) |
13. | ROW Adlandırılmış alanlardan oluşan satır yapısı |
Presto - Operatörler
Presto operatörleri aşağıdaki tabloda listelenmiştir.
S.No | Operatör ve Açıklama |
---|---|
1. | Aritmetik operatör Presto, +, -, *, /,% gibi aritmetik operatörleri destekler |
2. | İlişkisel operatör <,>, <=,> =, =, <> |
3. | Mantıksal operatör VE, VEYA, DEĞİL |
4. | Menzil operatörü Aralık operatörü, belirli bir aralıktaki değeri test etmek için kullanılır. Presto, ARASI, BOŞ, BOŞ DEĞİL, EN BÜYÜK ve EN AZ |
5. | Ondalık operatör İkili aritmetik ondalık operatör, ondalık tür için ikili aritmetik işlem gerçekleştirir Tekli ondalık operatör - - operator olumsuzluk yapar |
6. | Dize operatörü ‘||’ operator dize birleştirme gerçekleştirir |
7. | Tarih ve saat operatörü Tarih ve saat veri türlerinde aritmetik toplama ve çıkarma işlemleri gerçekleştirir |
8. | Dizi operatörü Alt simge operatörü [] - bir dizinin bir öğesine erişir Birleştirme operatörü || - bir diziyi bir dizi veya aynı türden bir öğe ile bitiştirmek |
9. | Harita operatörü Harita alt simge operatörü [] - belirli bir anahtara karşılık gelen değeri bir haritadan alır |
Şu an itibariyle Presto'da bazı basit temel sorgular çalıştırmayı tartışıyorduk. Bu bölümde önemli SQL işlevleri tartışılacaktır.
Matematik Fonksiyonları
Matematik fonksiyonları matematiksel formüllerle çalışır. Aşağıdaki tablo, işlevlerin listesini ayrıntılı olarak açıklamaktadır.
S.No. | İşlev ve Açıklama |
---|---|
1. | abs (x) Mutlak değerini verir x |
2. | cbrt (x) Küp kökünü verir x |
3. | tavan (x) Döndürür x en yakın tam sayıya yuvarlanan değer |
4. | ceil(x) Tavan takma adı (x) |
5. | derece (x) Derece değerini verir x |
6. | e (x) Euler sayısının çift değerini verir |
7. | exp(x) Euler sayısının üs değerini verir |
8. | kat (x) İadeler x en yakın tam sayıya yuvarlanır |
9. | from_base(string,radix) Taban taban sayısı olarak yorumlanan dizenin değerini verir |
10. | ln(x) Doğal logaritmasını verir x |
11. | log2 (x) 2 tabanındaki logaritmayı verir x |
12. | log10(x) 10 tabanındaki logaritmayı verir x |
13. | log(x,y) Tabanı verir y logaritması x |
14. | mod (n, m) Modülünü (kalan) verir n bölü m |
15. | pi() Pi değerini döndürür. Sonuç çift değer olarak döndürülecektir |
16. | güç (x, p) Değerin gücünü verir ‘p’ için x değer |
17. | pow(x,p) Güç takma adı (x, p) |
18. | radyan (x) açıyı dönüştürür x derece radyan cinsinden |
19. | rand() Radyan takma adı () |
20. | rastgele () Sözde rastgele değeri verir |
21. | rand(n) Random () için takma ad |
22. | yuvarlak (x) X için yuvarlanmış değeri verir |
23. | round(x,d) x için yuvarlanan değer ‘d’ ondalık |
24. | sign(x) X'in işaret işlevini verir, yani, Bağımsız değişken 0 ise 0 1 bağımsız değişken 0'dan büyükse Bağımsız değişken 0'dan küçükse -1 Çift bağımsız değişkenler için işlev ayrıca şunu döndürür - NaN, eğer argüman NaN ise 1 eğer argüman + Infinity ise Bağımsız değişken -Infinity ise -1 |
25. | sqrt (x) Karekökünü verir x |
26. | to_base (x, radix) Dönüş türü okçudur. Sonuç, için temel taban olarak döndürülürx |
27. | kesik (x) Değerini kısaltır x |
28. | width_bucket (x, bound1, bound2, n) Bin sayısını verir x belirtilen bound1 ve bound2 sınırları ve n sayıda paket |
29. | width_bucket (x, bölmeler) Bin sayısını verir x dizi bölmeleri tarafından belirtilen bölmelere göre |
Trigonometrik fonksiyonlar
Trigonometrik fonksiyonlar argümanları radyan () olarak temsil edilir. Aşağıdaki tablo işlevleri listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | acos (x) Ters kosinüs değerini (x) verir |
2. | asin(x) Ters sinüs değerini (x) verir |
3. | atan(x) Ters tanjant değerini (x) verir |
4. | atan2 (y, x) Ters teğet değerini verir (y / x) |
5. | cos(x) Kosinüs değerini (x) verir |
6. | cosh (x) Hiperbolik kosinüs değerini (x) verir |
7. | günah (x) Sinüs değerini (x) verir |
8. | tan(x) Teğet değeri (x) verir |
9. | tanh(x) Hiperbolik tanjant değerini (x) verir |
Bitsel İşlevler
Aşağıdaki tablo Bitwise işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | bit_count (x, bit) Bit sayısını sayın |
2. | bitsel_ve (x, y) İki bit için bitsel AND işlemini gerçekleştirin, x ve y |
3. | bitwise_or (x, y) İki bit arasında bit tabanlı VEYA işlemi x, y |
4. | bitwise_not (x) Bit için Bitsel Değil işlemi x |
5. | bitwise_xor (x, y) Bitler için XOR işlemi x, y |
String Fonksiyonları
Aşağıdaki tablo String işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | concat (dize1, ..., dizeN) Verilen dizeleri birleştirin |
2. | uzunluk (dize) Verilen dizenin uzunluğunu verir |
3. | alt (dize) Dize için küçük harf biçimini verir |
4. | üst (dize) Verilen dizge için büyük harf biçimini döndürür |
5. | lpad (string, size, padstring) Verilen dize için sol dolgu |
6. | ltrim (dize) Dizeden baştaki beyaz boşluğu kaldırır |
7. | değiştir (dize, ara, değiştir) Dize değerini değiştirir |
8. | ters (dize) Dizi için gerçekleştirilen işlemi tersine çevirir |
9. | rpad (dize, boyut, padstring) Verilen dize için sağ dolgu |
10. | rtrim (dize) Dizeden sondaki beyaz boşluğu kaldırır |
11. | bölme (dize, sınırlayıcı) Sınırlayıcıdaki dizeyi böler ve en sınırda bir boyut dizisi döndürür |
12. | split_part (dize, sınırlayıcı, dizin) Sınırlayıcıdaki dizeyi böler ve alan dizinini döndürür |
13. | strpos (dize, alt dize) Dizedeki alt dizenin başlangıç konumunu verir |
14. | substr (dize, başlangıç) Verilen dizenin alt dizesini döndürür |
15. | substr (dize, başlangıç, uzunluk) Belirli uzunluktaki belirli bir dizenin alt dizesini döndürür |
16. | trim (dize) Dizeden baştaki ve sondaki beyaz boşluğu kaldırır |
Tarih ve Saat İşlevleri
Aşağıdaki tablo Tarih ve Saat işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | Geçerli tarih Geçerli tarihi verir |
2. | şimdiki zaman Geçerli saati verir |
3. | Geçerli zaman dalgası Geçerli zaman damgasını verir |
4. | current_timezone () Mevcut saat dilimini verir |
5. | şimdi () Saat dilimi ile güncel tarihi, zaman damgasını verir |
6. | Yerel zaman Yerel saati verir |
7. | localtimestamp Yerel zaman damgasını verir |
Normal İfade İşlevleri
Aşağıdaki tablo Normal İfade işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | regexp_extract_all (dize, kalıp) Kalıp için normal ifade ile eşleşen dizeyi verir |
2. | regexp_extract_all (dize, kalıp, grup) Kalıp ve grup için normal ifadeyle eşleşen dizeyi verir |
3. | regexp_extract (dize, desen) Desen için normal ifadeyle eşleşen ilk alt dizeyi verir |
4. | regexp_extract (dize, desen, grup) Desen ve grup için normal ifadeyle eşleşen ilk alt dizeyi verir |
5. | regexp_like (dize, kalıp) Kalıp için dize eşleşmelerini döndürür. Dize döndürülürse, değer doğru olacaktır, aksi takdirde yanlış |
6. | regexp_replace (dize, desen) İfade için eşleşen dizenin örneğini desenle değiştirir |
7. | regexp_replace (dize, kalıp, değiştirme) İfade için eşleşen dizenin örneğini desen ve değiştirme ile değiştirin |
8. | regexp_split (dize, kalıp) Verilen desen için normal ifadeyi böler |
JSON İşlevleri
Aşağıdaki tablo JSON işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | json_array_contains (json, değer) Değerin bir json dizisinde olup olmadığını kontrol edin. Değer mevcutsa true, aksi takdirde false döndürür |
2. | json_array_get (json_array, dizin) Json dizisindeki dizin için öğeyi alın |
3. | json_array_length (json) Json dizisindeki uzunluğu verir |
4. | json_format (json) Json yapı biçimini döndürür |
5. | json_parse (dize) Dizeyi json olarak ayrıştırır |
6. | json_size (json, json_path) Değerin boyutunu verir |
URL İşlevleri
Aşağıdaki tablo, URL işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | url_extract_host (url) URL'nin barındırıcısını döndürür |
2. | url_extract_path (url) URL'nin yolunu verir |
3. | url_extract_port (url) URL'nin bağlantı noktasını döndürür |
4. | url_extract_protocol (url) URL'nin protokolünü döndürür |
5. | url_extract_query (url) URL'nin sorgu dizesini döndürür |
Toplama İşlevleri
Aşağıdaki tablo, Toplama işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | avg(x) Verilen değer için ortalamayı verir |
2. | min (x, n) İki değerden minimum değeri verir |
3. | maks (x, n) İki değerden maksimum değeri verir |
4. | toplam (x) Değerin toplamını verir |
5. | Miktar(*) Giriş satırlarının sayısını verir |
6. | sayım (x) Giriş değerlerinin sayısını verir |
7. | sağlama toplamı (x) Sağlama toplamını verir x |
8. | keyfi (x) İçin rasgele değeri verir x |
Renk Fonksiyonları
Aşağıdaki tablo Renk işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | çubuk (x, genişlik) Rgb low_color ve high_color kullanarak tek bir çubuk oluşturur |
2. | çubuk (x, genişlik, düşük_renk, yüksek_renk) Belirtilen genişlik için tek bir çubuk oluşturur |
3. | renk (dizi) Girilen dizenin renk değerini verir |
4. | render (x, renk) ANSI renk kodlarını kullanarak belirli bir rengi kullanarak x değerini oluşturur |
5. | render (b) Boole değeri b'yi kabul eder ve ANSI renk kodlarını kullanarak yeşili doğru veya kırmızıyı yanlış hale getirir |
6. | rgb(red, green, blue) 0-255 arasında int parametreleri olarak sağlanan üç bileşen renk değerinin RGB değerini yakalayan bir renk değeri döndürür |
Dizi İşlevleri
Aşağıdaki tablo, Dizi işlevlerini listeler.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | dizi_max (x) Bir dizideki maksimum elemanı bulur |
2. | dizi_min (x) Bir dizideki min elemanı bulur |
3. | dizi_sırası (x) Bir dizideki öğeleri sıralar |
4. | array_remove (x, eleman) Belirli bir öğeyi bir diziden kaldırır |
5. | concat (x, y) İki diziyi birleştirir |
6. | içerir (x, eleman) Bir dizide verilen elemanları bulur. Varsa true döndürülür, aksi takdirde false |
7. | dizi_konumu (x, eleman) Verilen elemanın bir dizideki konumunu bulun |
8. | array_intersect (x, y) İki dizi arasında bir kesişim gerçekleştirir |
9. | element_at (dizi, dizin) Dizi öğesi konumunu verir |
10. | dilim (x, başlangıç, uzunluk) Dizi öğelerini belirli uzunlukta dilimler |
Teradata İşlevleri
Aşağıdaki tablo Teradata işlevlerini listelemektedir.
S.No | Fonksiyonlar ve Açıklama |
---|---|
1. | dizin (dize, alt dize) Verilen alt dizeyle dizenin dizinini verir |
2. | alt dize (dize, başlangıç) Verilen dizenin alt dizesini döndürür. Başlangıç dizinini burada belirtebilirsiniz |
3. | alt dize (dize, başlangıç, uzunluk) Dizenin belirli başlangıç dizini ve uzunluğu için verilen dizenin alt dizesini döndürür |
MySQL bağlayıcısı, harici bir MySQL veritabanını sorgulamak için kullanılır.
Önkoşullar
MySQL sunucu kurulumu.
Yapılandırma ayarları
Umarım makinenize mysql sunucusu kurmuşsunuzdur. Presto sunucusunda mysql özelliklerini etkinleştirmek için bir dosya oluşturmanız gerekir“mysql.properties” içinde “etc/catalog”dizin. Bir mysql.properties dosyası oluşturmak için aşağıdaki komutu çalıştırın.
$ cd etc $ cd catalog
$ vi mysql.properties
connector.name = mysql
connection-url = jdbc:mysql://localhost:3306
connection-user = root
connection-password = pwd
Dosyayı kaydedin ve terminalden çıkın. Yukarıdaki dosyada mysql şifrenizi bağlantı-şifre alanına girmelisiniz.
MySQL Sunucusunda Veritabanı Oluşturun
MySQL sunucusunu açın ve aşağıdaki komutu kullanarak bir veritabanı oluşturun.
create database tutorials
Artık sunucuda "öğreticiler" veritabanı oluşturdunuz. Veritabanı türünü etkinleştirmek için, sorgu penceresinde "öğreticileri kullan" komutunu kullanın.
Tablo Oluştur
"Öğreticiler" veritabanı üzerinde basit bir tablo oluşturalım.
create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))
Tablo Ekle
Bir tablo oluşturduktan sonra, aşağıdaki sorguyu kullanarak üç kayıt ekleyin.
insert into author values(1,'Doug Cutting','Hadoop')
insert into author values(2,’James Gosling','java')
insert into author values(3,'Dennis Ritchie’,'C')
Kayıtları Seçin
Tüm kayıtları almak için aşağıdaki sorguyu yazın.
Sorgu
select * from author
Sonuç
auth_id auth_name topic
1 Doug Cutting Hadoop
2 James Gosling java
3 Dennis Ritchie C
Şu an itibariyle, MySQL sunucusunu kullanarak verileri sorguladınız. Mysql depolama eklentisini Presto sunucusuna bağlayalım.
Presto CLI'yi bağlayın
MySql eklentisini Presto CLI'ye bağlamak için aşağıdaki komutu yazın.
./presto --server localhost:8080 --catalog mysql --schema tutorials
Aşağıdaki yanıtı alacaksınız.
presto:tutorials>
Buraya “tutorials” mysql sunucusundaki şemayı ifade eder.
Şemaları Listele
Mysql'deki tüm şemaları listelemek için Presto sunucusuna aşağıdaki sorguyu yazın.
Sorgu
presto:tutorials> show schemas from mysql;
Sonuç
Schema
--------------------
information_schema
performance_schema
sys
tutorials
Bu sonuçtan, ilk üç şemayı önceden tanımlanmış ve sonuncusu kendi oluşturduğunuz şekilde sonuçlandırabiliriz.
Şemadan Tabloları Listeleme
Aşağıdaki sorgu öğreticiler şemasındaki tüm tabloları listeler.
Sorgu
presto:tutorials> show tables from mysql.tutorials;
Sonuç
Table
--------
author
Bu şemada sadece bir tablo oluşturduk. Birden çok tablo oluşturduysanız, tüm tabloları listeler.
Tabloyu Açıklayın
Tablo alanlarını tanımlamak için aşağıdaki sorguyu yazın.
Sorgu
presto:tutorials> describe mysql.tutorials.author;
Sonuç
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Tablodaki Sütunları Göster
Sorgu
presto:tutorials> show columns from mysql.tutorials.author;
Sonuç
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Tablo Kayıtlarına Erişim
Tüm kayıtları mysql tablosundan almak için aşağıdaki sorguyu çalıştırın.
Sorgu
presto:tutorials> select * from mysql.tutorials.author;
Sonuç
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Bu sonuçtan, Presto'da mysql sunucu kayıtlarını alabilirsiniz.
Komut Olarak Kullanarak Tablo Oluşturun
Mysql bağlayıcısı, tablo oluşturma sorgusunu desteklemez, ancak komut olarak kullanarak bir tablo oluşturabilirsiniz.
Sorgu
presto:tutorials> create table mysql.tutorials.sample as
select * from mysql.tutorials.author;
Sonuç
CREATE TABLE: 3 rows
Doğrudan satır ekleyemezsiniz çünkü bu bağlayıcının bazı sınırlamaları vardır. Aşağıdaki sorguları destekleyemez -
- create
- insert
- update
- delete
- drop
Yeni oluşturulan tablodaki kayıtları görüntülemek için aşağıdaki sorguyu yazın.
Sorgu
presto:tutorials> select * from mysql.tutorials.sample;
Sonuç
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Java Yönetim Uzantıları (JMX), Java Sanal Makinesi ve JVM içinde çalışan yazılım hakkında bilgi verir. JMX konektörü, Presto sunucusunda JMX bilgilerini sorgulamak için kullanılır.
Zaten etkinleştirdiğimiz gibi “jmx.properties” altında dosya “etc/catalog”dizin. Şimdi JMX eklentisini etkinleştirmek için Perst CLI'yi bağlayın.
Presto CLI
Sorgu
$ ./presto --server localhost:8080 --catalog jmx --schema jmx
Sonuç
Aşağıdaki yanıtı alacaksınız.
presto:jmx>
JMX Şeması
Tüm şemaları "jmx" de listelemek için aşağıdaki sorguyu yazın.
Sorgu
presto:jmx> show schemas from jmx;
Sonuç
Schema
--------------------
information_schema
current
Tabloları Göster
Tabloları "mevcut" şemada görüntülemek için aşağıdaki komutu kullanın.
Sorgu 1
presto:jmx> show tables from jmx.current;
Sonuç
Table
------------------------------------------------------------------------------
com.facebook.presto.execution.scheduler:name = nodescheduler
com.facebook.presto.execution:name = queryexecution
com.facebook.presto.execution:name = querymanager
com.facebook.presto.execution:name = remotetaskfactory
com.facebook.presto.execution:name = taskexecutor
com.facebook.presto.execution:name = taskmanager
com.facebook.presto.execution:type = queryqueue,name = global,expansion = global
………………
……………….
Sorgu 2
presto:jmx> select * from jmx.current.”java.lang:type = compilation";
Sonuç
node | compilationtimemonitoringsupported | name | objectname | totalcompilationti
--------------------------------------+------------------------------------+--------------------------------+----------------------------+-------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation | 1276
Sorgu 3
presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";
Sonuç
node | readfromoutputbuffertime.alltime.count
| readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer
--------------------------------------+---------------------------------------+--------------------------------------+---------------------------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | 92.0 | 1.009106149 |
Hive bağlayıcı, bir Hive veri ambarında depolanan verilerin sorgulanmasına olanak tanır.
Önkoşullar
- Hadoop
- Hive
Umarım makinenize Hadoop ve Hive'ı kurmuşsunuzdur. Yeni terminalde tüm hizmetleri tek tek başlatın. Ardından, aşağıdaki komutu kullanarak kovan meta deposunu başlatın,
hive --service metastore
Presto, kovan tablosunun ayrıntılarını almak için Hive metastore hizmetini kullanır.
Yapılandırma ayarları
Bir dosya oluştur “hive.properties” altında “etc/catalog”dizin. Aşağıdaki komutu kullanın.
$ cd etc $ cd catalog
$ vi hive.properties
connector.name = hive-cdh4
hive.metastore.uri = thrift://localhost:9083
Tüm değişiklikleri yaptıktan sonra dosyayı kaydedin ve terminalden çıkın.
Veritabanı yarat
Aşağıdaki sorguyu kullanarak Hive'da bir veritabanı oluşturun -
Sorgu
hive> CREATE SCHEMA tutorials;
Veritabanı oluşturulduktan sonra, bunu kullanarak doğrulayabilirsiniz. “show databases” komut.
Tablo Oluştur
Tablo Oluştur, Hive'da bir tablo oluşturmak için kullanılan bir ifadedir. Örneğin, aşağıdaki sorguyu kullanın.
hive> create table author(auth_id int, auth_name varchar(50),
topic varchar(100) STORED AS SEQUENCEFILE;
Tablo Ekle
Aşağıdaki sorgu, kovan tablosuna kayıt eklemek için kullanılır.
hive> insert into table author values (1,’ Doug Cutting’,Hadoop),
(2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);
Presto CLI'yi başlat
Aşağıdaki komutu kullanarak Hive depolama eklentisini bağlamak için Presto CLI'yi başlatabilirsiniz.
$ ./presto --server localhost:8080 --catalog hive —schema tutorials;
Aşağıdaki yanıtı alacaksınız.
presto:tutorials >
Şemaları Listele
Hive bağlayıcısındaki tüm şemaları listelemek için aşağıdaki komutu yazın.
Sorgu
presto:tutorials > show schemas from hive;
Sonuç
default
tutorials
Tabloları Listele
“Öğreticiler” şemasındaki tüm tabloları listelemek için aşağıdaki sorguyu kullanın.
Sorgu
presto:tutorials > show tables from hive.tutorials;
Sonuç
author
Tabloyu Getir
Aşağıdaki sorgu, kovan tablosundaki tüm kayıtları almak için kullanılır.
Sorgu
presto:tutorials > select * from hive.tutorials.author;
Sonuç
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Presto için Kafka Bağlayıcısı, Presto kullanarak Apache Kafka'daki verilere erişim sağlar.
Önkoşullar
Aşağıdaki Apache projelerinin en son sürümünü indirin ve kurun.
- Apache ZooKeeper
- Apache Kafka
ZooKeeper'ı başlatın
Start ZooKeeper server using the following command.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
Now, ZooKeeper starts port on 2181.
Start Kafka
Start Kafka in another terminal using the following command.
$ bin/kafka-server-start.sh config/server.properties
After kafka starts, it uses the port number 9092.
TPCH Data
Download tpch-kafka
$ curl -o kafka-tpch
https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_
0811-1.0.sh
Now you have downloaded the loader from Maven central using the above command. You will get a similar response as the following.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
5 21.6M 5 1279k 0 0 83898 0 0:04:30 0:00:15 0:04:15 129k
6 21.6M 6 1407k 0 0 86656 0 0:04:21 0:00:16 0:04:05 131k
24 21.6M 24 5439k 0 0 124k 0 0:02:57 0:00:43 0:02:14 175k
24 21.6M 24 5439k 0 0 124k 0 0:02:58 0:00:43 0:02:15 160k
25 21.6M 25 5736k 0 0 128k 0 0:02:52 0:00:44 0:02:08 181k
………………………..
Then, make it executable using the following command,
$ chmod 755 kafka-tpch
Run tpch-kafka
Run the kafka-tpch program to preload a number of topics with tpch data using the following command.
Query
$ ./kafka-tpch load --brokers localhost:9092 --prefix tpch. --tpch-type tiny
Sonuç
2016-07-13T16:15:52.083+0530 INFO main io.airlift.log.Logging Logging
to stderr
2016-07-13T16:15:52.124+0530 INFO main de.softwareforge.kafka.LoadCommand
Processing tables: [customer, orders, lineitem, part, partsupp, supplier,
nation, region]
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-1
de.softwareforge.kafka.LoadCommand Loading table 'customer' into topic 'tpch.customer'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-2
de.softwareforge.kafka.LoadCommand Loading table 'orders' into topic 'tpch.orders'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-3
de.softwareforge.kafka.LoadCommand Loading table 'lineitem' into topic 'tpch.lineitem'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-4
de.softwareforge.kafka.LoadCommand Loading table 'part' into topic 'tpch.part'...
………………………
……………………….
Artık Kafka masaları müşterileri, siparişleri, tedarikçileri vb. Tpch kullanılarak yükleniyor.
Yapılandırma Ayarları Ekle
Presto sunucusuna aşağıdaki Kafka bağlayıcı yapılandırma ayarlarını ekleyelim.
connector.name = kafka
kafka.nodes = localhost:9092
kafka.table-names = tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp,
tpch.supplier,tpch.nation,tpch.region
kafka.hide-internal-columns = false
Yukarıdaki konfigürasyonda Kafka tabloları Kafka-tpch programı kullanılarak yüklenir.
Presto CLI'yi başlat
Aşağıdaki komutu kullanarak Presto CLI'yi başlatın,
$ ./presto --server localhost:8080 --catalog kafka —schema tpch;
Buraya “tpch" Kafka bağlayıcısı için bir şemadır ve aşağıdaki gibi bir yanıt alacaksınız.
presto:tpch>
Tabloları Listele
Aşağıdaki sorgu içindeki tüm tabloları listeler “tpch” şema.
Sorgu
presto:tpch> show tables;
Sonuç
Table
----------
customer
lineitem
nation
orders
part
partsupp
region
supplier
Müşteri Tablosunu Tanımlayın
Aşağıdaki sorgu tanımları “customer” tablo.
Sorgu
presto:tpch> describe customer;
Sonuç
Column | Type | Comment
-------------------+---------+---------------------------------------------
_partition_id | bigint | Partition Id
_partition_offset | bigint | Offset for the message within the partition
_segment_start | bigint | Segment start offset
_segment_end | bigint | Segment end offset
_segment_count | bigint | Running message count per segment
_key | varchar | Key text
_key_corrupt | boolean | Key data is corrupt
_key_length | bigint | Total number of key bytes
_message | varchar | Message text
_message_corrupt | boolean | Message data is corrupt
_message_length | bigint | Total number of message bytes
Presto'nun JDBC arayüzü Java uygulamasına erişmek için kullanılır.
Önkoşullar
Presto-jdbc-0.150.jar'ı yükleyin
JDBC jar dosyasını aşağıdaki bağlantıyı ziyaret ederek indirebilirsiniz,
https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/
Jar dosyası indirildikten sonra, onu Java uygulamanızın sınıf yoluna ekleyin.
Basit Bir Uygulama Oluşturun
JDBC arayüzünü kullanarak basit bir java uygulaması oluşturalım.
Kodlama - PrestoJdbcSample.java
import java.sql.*;
import com.facebook.presto.jdbc.PrestoDriver;
//import presto jdbc driver packages here.
public class PrestoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("com.facebook.presto.jdbc.PrestoDriver");
connection = DriverManager.getConnection(
"jdbc:presto://localhost:8080/mysql/tutorials", "tutorials", “");
//connect mysql server tutorials database here
statement = connection.createStatement();
String sql;
sql = "select auth_id, auth_name from mysql.tutorials.author”;
//select mysql table author table two columns
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("auth_id");
String name = resultSet.getString(“auth_name");
System.out.print("ID: " + id + ";\nName: " + name + "\n");
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException sqlException){
sqlException.printStackTrace();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
Dosyayı kaydedin ve uygulamadan çıkın. Şimdi, Presto sunucusunu bir terminalde başlatın ve sonucu derlemek ve yürütmek için yeni bir terminal açın. Adımlar aşağıdadır -
Derleme
~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar PrestoJdbcSample.java
Yürütme
~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar PrestoJdbcSample
Çıktı
INFO: Logging initialized @146ms
ID: 1;
Name: Doug Cutting
ID: 2;
Name: James Gosling
ID: 3;
Name: Dennis Ritchie
Presto özel işlevini geliştirmek için bir Maven projesi oluşturun.
SimpleFunctionsFactory.java
FunctionFactory arabirimini uygulamak için SimpleFunctionsFactory sınıfı oluşturun.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.metadata.FunctionListBuilder;
import com.facebook.presto.metadata.SqlFunction;
import com.facebook.presto.spi.type.TypeManager;
import java.util.List;
public class SimpleFunctionFactory implements FunctionFactory {
private final TypeManager typeManager;
public SimpleFunctionFactory(TypeManager typeManager) {
this.typeManager = typeManager;
}
@Override
public List<SqlFunction> listFunctions() {
return new FunctionListBuilder(typeManager)
.scalar(SimpleFunctions.class)
.getFunctions();
}
}
SimpleFunctionsPlugin.java
Eklenti arayüzünü uygulamak için bir SimpleFunctionsPlugin sınıfı oluşturun.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.type.TypeManager;
import com.google.common.collect.ImmutableList;
import javax.inject.Inject;
import java.util.List;
import static java.util.Objects.requireNonNull;
public class SimpleFunctionsPlugin implements Plugin {
private TypeManager typeManager;
@Inject
public void setTypeManager(TypeManager typeManager) {
this.typeManager = requireNonNull(typeManager, "typeManager is null”);
//Inject TypeManager class here
}
@Override
public <T> List<T> getServices(Class<T> type){
if (type == FunctionFactory.class) {
return ImmutableList.of(type.cast(new SimpleFunctionFactory(typeManager)));
}
return ImmutableList.of();
}
}
Kaynak Dosyası Ekle
Uygulama paketinde belirtilen bir kaynak dosyası oluşturun.
(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)
Şimdi kaynak dosya konumuna @ / yol / / kaynak / konumuna gidin.
Sonra değişiklikleri ekleyin,
com.facebook.presto.spi.Plugin
pom.xml
Aşağıdaki bağımlılıkları pom.xml dosyasına ekleyin.
<?xml version = "1.0"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.simple.functions</groupId>
<artifactId>presto-simple-functions</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>presto-simple-functions</name>
<description>Simple test functions for Presto</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-spi</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-main</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
<build>
<finalName>presto-simple-functions</finalName>
<plugins>
<!-- Make this jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
SimpleFunctions.java
Presto niteliklerini kullanarak SimpleFunctions sınıfı oluşturun.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.operator.Description;
import com.facebook.presto.operator.scalar.ScalarFunction;
import com.facebook.presto.operator.scalar.StringFunctions;
import com.facebook.presto.spi.type.StandardTypes;
import com.facebook.presto.type.LiteralParameters;
import com.facebook.presto.type.SqlType;
public final class SimpleFunctions {
private SimpleFunctions() {
}
@Description("Returns summation of two numbers")
@ScalarFunction(“mysum")
//function name
@SqlType(StandardTypes.BIGINT)
public static long sum(@SqlType(StandardTypes.BIGINT) long num1,
@SqlType(StandardTypes.BIGINT) long num2) {
return num1 + num2;
}
}
Uygulama oluşturulduktan sonra uygulamayı derleyin ve çalıştırın. JAR dosyasını üretecektir. Dosyayı kopyalayın ve JAR dosyasını hedef Presto sunucusu eklenti dizinine taşıyın.
Derleme
mvn compile
Yürütme
mvn package
Şimdi Presto sunucusunu yeniden başlatın ve Presto istemcisini bağlayın. Ardından, aşağıda açıklandığı gibi özel işlev uygulamasını çalıştırın,
$ ./presto --catalog mysql --schema default
Sorgu
presto:default> select mysum(10,10);
Sonuç
_col0
-------
20