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