Apache Presto - Panduan Cepat

Analisis data adalah proses menganalisis data mentah untuk mengumpulkan informasi yang relevan untuk pengambilan keputusan yang lebih baik. Ini terutama digunakan di banyak organisasi untuk membuat keputusan bisnis. Nah, analitik data besar melibatkan sejumlah besar data dan proses ini cukup kompleks, karenanya perusahaan menggunakan strategi yang berbeda.

Misalnya, Facebook adalah salah satu perusahaan data warehouse terdepan dan terbesar di dunia. Data gudang Facebook disimpan di Hadoop untuk komputasi skala besar. Kemudian, ketika data gudang bertambah menjadi petabyte, mereka memutuskan untuk mengembangkan sistem baru dengan latensi rendah. Di tahun 2012, anggota tim Facebook merancang“Presto” untuk analisis kueri interaktif yang akan beroperasi dengan cepat bahkan dengan data berukuran petabyte.

Apa itu Apache Presto?

Apache Presto adalah mesin eksekusi kueri paralel terdistribusi, dioptimalkan untuk latensi rendah dan analisis kueri interaktif. Presto menjalankan kueri dengan mudah dan menskalakan tanpa waktu henti bahkan dari gigabyte hingga petabyte.

Kueri Presto tunggal dapat memproses data dari berbagai sumber seperti HDFS, MySQL, Cassandra, Hive, dan banyak lagi sumber data. Presto dibangun di Java dan mudah diintegrasikan dengan komponen infrastruktur data lainnya. Presto sangat kuat, dan perusahaan terkemuka seperti Airbnb, DropBox, Groupon, Netflix mengadopsinya.

Presto - Fitur

Presto berisi beberapa fitur berikut -

  • Arsitektur sederhana dan dapat diperluas.
  • Konektor yang dapat dicolok - Presto mendukung konektor yang dapat dicolokkan untuk menyediakan metadata dan data untuk kueri.
  • Eksekusi pipelined - Menghindari overhead latensi I / O yang tidak perlu.
  • Fungsi yang ditentukan pengguna - Analis dapat membuat fungsi yang ditentukan pengguna khusus untuk bermigrasi dengan mudah.
  • Pemrosesan kolumnar vektor.

Presto - Manfaat

Berikut adalah daftar manfaat yang ditawarkan Apache Presto -

  • Operasi SQL khusus
  • Mudah dipasang dan di-debug
  • Abstraksi penyimpanan sederhana
  • Menskalakan data petabyte dengan cepat dengan latensi rendah

Presto - Aplikasi

Presto mendukung sebagian besar aplikasi industri terbaik saat ini. Mari kita lihat beberapa aplikasi penting.

  • Facebook- Facebook membangun Presto untuk kebutuhan analitik data. Presto dengan mudah mengukur kecepatan data yang besar.

  • Teradata- Teradata menyediakan solusi ujung ke ujung dalam analitik Big Data dan pergudangan data. Kontribusi teradata ke Presto mempermudah lebih banyak perusahaan untuk mengaktifkan semua kebutuhan analitis.

  • Airbnb- Presto adalah bagian integral dari infrastruktur data Airbnb. Ratusan karyawan menjalankan kueri setiap hari dengan teknologi tersebut.

Mengapa Presto?

Presto mendukung ANSI SQL standar yang membuatnya sangat mudah bagi analis data dan pengembang. Meskipun dibuat di Java, ia menghindari masalah umum kode Java yang terkait dengan alokasi memori dan pengumpulan sampah. Presto memiliki arsitektur konektor yang ramah Hadoop. Ini memungkinkan untuk dengan mudah mencolokkan sistem file.

Presto berjalan di beberapa distribusi Hadoop. Selain itu, Presto dapat menjangkau dari platform Hadoop untuk meminta Cassandra, database relasional, atau penyimpanan data lainnya. Kemampuan analitik lintas platform ini memungkinkan pengguna Presto mengekstrak nilai bisnis maksimum dari gigabyte hingga petabyte data.

Arsitektur Presto hampir mirip dengan arsitektur DBMS MPP (massively parallel processing) klasik. Diagram berikut menggambarkan arsitektur Presto.

Diagram di atas terdiri dari berbagai komponen. Tabel berikut menjelaskan setiap komponen secara rinci.

S.No Deskripsi komponen
1.

Client

Klien (Presto CLI) mengirimkan pernyataan SQL ke koordinator untuk mendapatkan hasilnya.

2.

Coordinator

Koordinator adalah daemon master. Koordinator awalnya mengurai kueri SQL lalu menganalisis dan merencanakan eksekusi kueri. Scheduler melakukan eksekusi pipeline, memberikan pekerjaan ke node terdekat dan memantau kemajuan.

3.

Connector

Plugin penyimpanan disebut sebagai konektor. Hive, HBase, MySQL, Cassandra dan banyak lagi bertindak sebagai penghubung; jika tidak, Anda juga dapat menerapkan yang khusus. Konektor menyediakan metadata dan data untuk kueri. Koordinator menggunakan konektor untuk mendapatkan metadata untuk membuat rencana kueri.

4.

Worker

Koordinator memberikan tugas ke node pekerja. Pekerja mendapatkan data aktual dari konektor. Akhirnya, simpul pekerja memberikan hasil ke klien.

Presto - Alur Kerja

Presto adalah sistem terdistribusi yang berjalan pada sekumpulan node. Mesin kueri terdistribusi Presto dioptimalkan untuk analisis interaktif dan mendukung ANSI SQL standar, termasuk kueri kompleks, agregasi, gabungan, dan fungsi jendela. Arsitektur presto sederhana dan dapat diperluas. Klien Presto (CLI) mengirimkan pernyataan SQL ke koordinator daemon master.

Penjadwal terhubung melalui pipa eksekusi. Penjadwal memberikan pekerjaan ke node yang paling dekat dengan data dan memantau kemajuan. Koordinator memberikan tugas ke beberapa node pekerja dan akhirnya node pekerja mengirimkan hasilnya kembali ke klien. Klien menarik data dari proses keluaran. Ekstensibilitas adalah desain kuncinya. Konektor yang dapat dicolokkan seperti Hive, HBase, MySQL, dll., Menyediakan metadata dan data untuk kueri. Presto dirancang dengan "abstraksi penyimpanan sederhana" yang membuatnya mudah untuk memberikan kemampuan kueri SQL terhadap berbagai jenis sumber data ini.

Model Eksekusi

Presto mendukung kueri khusus dan mesin eksekusi dengan operator yang dirancang untuk mendukung semantik SQL. Selain penjadwalan yang ditingkatkan, semua pemrosesan ada dalam memori dan disalurkan ke seluruh jaringan di antara tahapan yang berbeda. Ini menghindari overhead latensi I / O yang tidak perlu.

Bab ini akan menjelaskan cara menginstal Presto di mesin Anda. Mari kita bahas persyaratan dasar Presto,

  • Linux atau Mac OS
  • Versi Java 8

Sekarang, mari lanjutkan langkah-langkah berikut untuk menginstal Presto di komputer Anda.

Memverifikasi instalasi Java

Mudah-mudahan, Anda sudah menginstal Java versi 8 di komputer Anda sekarang, jadi Anda cukup memverifikasinya menggunakan perintah berikut.

$ java -version

Jika Java berhasil diinstal pada mesin Anda, Anda dapat melihat versi Java yang diinstal. Jika Java belum diinstal, ikuti langkah-langkah selanjutnya untuk menginstal Java 8 di komputer Anda.

Unduh JDK. Unduh versi terbaru JDK dengan mengunjungi tautan berikut.

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Versi terbaru adalah JDK 8u 92 dan filenya adalah "jdk-8u92-linux-x64.tar.gz". Silakan unduh file di mesin Anda.

Setelah itu, ekstrak file dan pindahkan ke direktori tertentu.

Kemudian atur alternatif Java. Akhirnya Java akan diinstal di mesin Anda.

Instalasi Apache Presto

Unduh Presto versi terbaru dengan mengunjungi tautan berikut,

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/

Sekarang versi terbaru dari "presto-server-0.149.tar.gz" akan diunduh di komputer Anda.

Ekstrak File tar

Ekstrak file tar file menggunakan perintah berikut -

$ tar  -zxf  presto-server-0.149.tar.gz 
$ cd presto-server-0.149

Pengaturan konfigurasi

Buat direktori "data"

Buat direktori data di luar direktori penginstalan, yang akan digunakan untuk menyimpan log, metadata, dll., Agar mudah disimpan saat mengupgrade Presto. Itu didefinisikan menggunakan kode berikut -

$ cd  
$ mkdir data

Untuk melihat lokasi lokasinya, gunakan perintah “pwd”. Lokasi ini akan ditetapkan di file node.properties berikutnya.

Buat direktori "etc"

Buat direktori etc di dalam direktori instalasi Presto menggunakan kode berikut -

$ cd presto-server-0.149 
$ mkdir etc

Direktori ini akan menampung file konfigurasi. Mari buat setiap file satu per satu.

Properti Node

File properti node presto berisi konfigurasi lingkungan khusus untuk setiap node. Itu dibuat di dalam direktori etc (etc / node.properties) menggunakan kode berikut -

$ cd etc 
$ vi node.properties  

node.environment = production 
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff 
node.data-dir = /Users/../workspace/Presto

Setelah melakukan semua perubahan, simpan file, dan keluar dari terminal. Sininode.data adalah jalur lokasi dari direktori data yang dibuat di atas. node.id mewakili pengenal unik untuk setiap node.

Konfigurasi JVM

Buat file “jvm.config” di dalam direktori etc (etc / jvm.config). File ini berisi daftar opsi baris perintah yang digunakan untuk meluncurkan Java Virtual Machine.

$ cd etc 
$ vi jvm.config  

-server 
-Xmx16G 
-XX:+UseG1GC 
-XX:G1HeapRegionSize = 32M 
-XX:+UseGCOverheadLimit 
-XX:+ExplicitGCInvokesConcurrent 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:OnOutOfMemoryError = kill -9 %p

Setelah melakukan semua perubahan, simpan file, dan keluar dari terminal.

Properti Config

Buat file "config.properties" di dalam direktori etc (etc / config.properties). File ini berisi konfigurasi server Presto. Jika Anda menyiapkan satu mesin untuk pengujian, server Presto hanya dapat berfungsi sebagai proses koordinasi seperti yang ditentukan menggunakan kode berikut -

$ 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

Sini,

  • coordinator - simpul induk.

  • node-scheduler.include-coordinator - Memungkinkan pekerjaan penjadwalan pada koordinator.

  • http-server.http.port - Menentukan port untuk server HTTP.

  • query.max-memory=5GB - Jumlah maksimum memori terdistribusi.

  • query.max-memory-per-node=1GB - Jumlah maksimum memori per node.

  • discovery-server.enabled - Presto menggunakan layanan Discovery untuk menemukan semua node di cluster.

  • discovery.uri - dia URI ke server Discovery.

Jika Anda menyiapkan beberapa server Presto mesin, Presto akan berfungsi sebagai proses koordinasi dan pekerja. Gunakan pengaturan konfigurasi ini untuk menguji server Presto di beberapa mesin.

Konfigurasi untuk Koordinator

$ 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

Konfigurasi untuk Pekerja

$ 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

Properti Log

Buat file “log.properties” di dalam direktori etc (etc / log.properties). File ini berisi level log minimum untuk hierarki logger bernama. Itu didefinisikan menggunakan kode berikut -

$ cd etc 
$ vi log.properties  
com.facebook.presto = INFO

Simpan file dan keluar dari terminal. Di sini, empat level log digunakan seperti DEBUG, INFO, WARN, dan ERROR. Tingkat log default adalah INFO.

Properti Katalog

Buat direktori “katalog” di dalam direktori etc (etc / catalog). Ini akan digunakan untuk memasang data. Misalnya, buatetc/catalog/jmx.properties dengan konten berikut untuk memasang jmx connector sebagai katalog jmx -

$ cd etc 
$ mkdir catalog $ cd catalog 
$ vi jmx.properties  
connector.name = jmx

Mulai Presto

Presto dapat dimulai menggunakan perintah berikut,

$ bin/launcher start

Kemudian Anda akan melihat respon yang mirip dengan ini,

Started as 840

Jalankan Presto

Untuk meluncurkan server Presto, gunakan perintah berikut -

$ bin/launcher run

Setelah berhasil meluncurkan server Presto, Anda dapat menemukan file log di direktori “var / log”.

  • launcher.log - Log ini dibuat oleh peluncur dan terhubung ke aliran stdout dan stderr server.

  • server.log - Ini adalah file log utama yang digunakan oleh Presto.

  • http-request.log - Permintaan HTTP diterima oleh server.

Sampai sekarang, Anda telah berhasil menginstal pengaturan konfigurasi Presto di mesin Anda. Mari lanjutkan langkah install Presto CLI.

Instal Presto CLI

CLI Presto menyediakan shell interaktif berbasis terminal untuk menjalankan kueri.

Unduh CLI Presto dengan mengunjungi tautan berikut,

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/

Sekarang "presto-cli-0.149-executable.jar" akan diinstal pada mesin Anda.

Jalankan CLI

Setelah mengunduh presto-cli, salin ke lokasi tempat Anda ingin menjalankannya. Lokasi ini dapat berupa node mana pun yang memiliki akses jaringan ke koordinator. Pertama ubah nama file Jar menjadi Presto. Kemudian buat itu dapat dieksekusi denganchmod + x perintah menggunakan kode berikut -

$ mv presto-cli-0.149-executable.jar presto  
$ chmod +x presto

Sekarang jalankan CLI menggunakan perintah berikut,

./presto --server localhost:8080 --catalog jmx --schema default  
Here jmx(Java Management Extension) refers to catalog and default referes to schema.

Anda akan melihat respon berikut,

presto:default>

Sekarang ketik perintah "jps" pada terminal Anda dan Anda akan melihat daemon yang sedang berjalan.

Hentikan Presto

Setelah melakukan semua eksekusi, Anda dapat menghentikan server presto menggunakan perintah berikut -

$ bin/launcher stop

Bab ini akan membahas pengaturan konfigurasi untuk Presto.

Pemverifikasi Presto

Pemverifikasi Presto dapat digunakan untuk menguji Presto terhadap database lain (seperti MySQL), atau untuk menguji dua cluster Presto satu sama lain.

Buat Database di MySQL

Buka server MySQL dan buat database menggunakan perintah berikut.

create database test

Sekarang Anda telah membuat database "test" di server. Buat tabel dan muat dengan kueri berikut.

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) 
);

Tambahkan Pengaturan Config

Buat file properti untuk mengonfigurasi pemverifikasi -

$ 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

Di sini, di query-database , masukkan detail berikut - nama database mysql, nama pengguna, dan kata sandi.

Unduh File JAR

Unduh file jar pemverifikasi Presto dengan mengunjungi tautan berikut,

https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/

Sekarang versinya “presto-verifier-0.149-executable.jar” diunduh ke komputer Anda.

Jalankan JAR

Jalankan file JAR menggunakan perintah berikut,

$ mv presto-verifier-0.149-executable.jar verifier  
$ chmod+x verifier

Jalankan Verifier

Jalankan verifier menggunakan perintah berikut,

$ ./verifier config.properties

Buat tabel

Mari buat tabel sederhana di “test” database menggunakan query berikut.

create table product(id int not null, name varchar(50))

Sisipkan Tabel

Setelah membuat tabel, masukkan dua record menggunakan query berikut,

insert into product values(1,’Phone') 
insert into product values(2,’Television’)

Jalankan Verifier Query

Jalankan kueri sampel berikut di terminal verifier (./verifier config.propeties) untuk memeriksa hasil verifier.

Contoh Query

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');

Sini, select * from mysql.test.product kueri mengacu pada katalog mysql, test adalah nama database dan productadalah nama tabel. Dengan cara ini, Anda dapat mengakses konektor mysql menggunakan server Presto.

Di sini, dua kueri pemilihan yang sama diuji satu sama lain untuk melihat kinerjanya. Demikian pula, Anda dapat menjalankan kueri lain untuk menguji hasil kinerja. Anda juga dapat menghubungkan dua cluster Presto untuk memeriksa hasil kinerja.

Pada bab ini, kita akan membahas alat administrasi yang digunakan di Presto. Mari kita mulai dengan Antarmuka Web Presto.

Antarmuka Web

Presto menyediakan antarmuka web untuk memantau dan mengelola kueri. Ini dapat diakses dari nomor port yang ditentukan di Koordinator Config Properties.

Mulai server Presto dan Presto CLI. Kemudian Anda dapat mengakses antarmuka web dari url berikut -http://localhost:8080/

Outputnya akan mirip dengan layar di atas.

Di sini, halaman utama memiliki daftar kueri bersama dengan informasi seperti ID kueri unik, teks kueri, status kueri, persentase selesai, nama pengguna dan sumber dari mana kueri ini berasal. Kueri terbaru dijalankan terlebih dahulu, lalu kueri selesai atau belum selesai ditampilkan di bagian bawah.

Menyetel Performa di Presto

Jika cluster Presto mengalami masalah terkait kinerja, ubah pengaturan konfigurasi default Anda ke pengaturan berikut.

Properti Config

  • task. info -refresh-max-wait - Mengurangi beban kerja koordinator.

  • task.max-worker-threads - Membagi proses dan menetapkan ke setiap node pekerja.

  • distributed-joins-enabled - Gabungan terdistribusi berbasis hash.

  • node-scheduler.network-topology - Mengatur topologi jaringan ke penjadwal.

Pengaturan JVM

Ubah pengaturan JVM default Anda ke pengaturan berikut. Ini akan berguna untuk mendiagnosis masalah pengumpulan sampah.

-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

Pada bab ini, kita akan membahas cara membuat dan mengeksekusi query di Presto. Mari kita lihat tipe data dasar yang didukung Presto.

Tipe Data Dasar

Tabel berikut menjelaskan tipe data dasar dari Presto.

S.No Tipe & Deskripsi Data
1.

VARCHAR

Data karakter panjang variabel

2.

BIGINT

Integer bertanda tangan 64-bit

3.

DOUBLE

Nilai presisi ganda floating point 64-bit

4.

DECIMAL

Angka desimal presisi tetap. Misalnya DECIMAL (10,3) - 10 adalah presisi, yaitu jumlah digit dan 3 adalah nilai skala yang direpresentasikan sebagai titik pecahan. Skala bersifat opsional dan nilai default adalah 0

5.

BOOLEAN

Nilai Boolean benar dan salah

6.

VARBINARY

Data biner panjang variabel

7.

JSON

Data JSON

8.

DATE

Jenis data tanggal direpresentasikan sebagai tahun-bulan-hari

9.

TIME, TIMESTAMP, TIMESTAMP with TIME ZONE

WAKTU - Waktu dalam sehari (jam-menit-detik-milidetik)

TIMESTAMP - Tanggal dan waktu hari ini

TIMESTAMP dengan ZONA WAKTU - Tanggal dan waktu hari dengan zona waktu dari nilai

10.

INTERVAL

Memperluas atau memperpanjang tipe data tanggal dan waktu

11.

ARRAY

Array dari tipe komponen yang diberikan. Misalnya, ARRAY [5,7]

12.

MAP

Memetakan di antara tipe komponen yang diberikan. Misalnya, MAP (ARRAY ['one', 'two'], ARRAY [5,7])

13.

ROW

Struktur baris terdiri dari bidang bernama

Presto - Operator

Operator presto tercantum dalam tabel berikut.

S.No Operator & Deskripsi
1. Operator aritmatika

Presto mendukung operator aritmatika seperti +, -, *, /,%

2. Operator relasional

<,>, <=,> =, =, <>

3. Operator logika

DAN, ATAU, TIDAK

4. Operator jangkauan

Operator jarak digunakan untuk menguji nilai dalam kisaran tertentu. Presto mendukung BETWEEN, IS NULL, IS NOT NULL, GREATEST and LEAST

5. Operator desimal

Operator desimal aritmatika biner melakukan operasi aritmatika biner untuk jenis desimal Operator desimal uner - The - operator melakukan negasi

6. Operator string

Itu ‘||’ operator melakukan penggabungan string

7. Operator tanggal dan waktu

Melakukan operasi penambahan dan pengurangan aritmatika pada tipe data tanggal dan waktu

8. Operator array

Operator subskrip [] - mengakses elemen array

Operator penggabungan || - menggabungkan array dengan array atau elemen dengan tipe yang sama

9. Operator peta

Operator subskrip peta [] - mengambil nilai yang sesuai dengan kunci yang diberikan dari peta

Sampai sekarang kami sedang mendiskusikan menjalankan beberapa kueri dasar sederhana di Presto. Bab ini akan membahas fungsi-fungsi SQL yang penting.

Fungsi Matematika

Fungsi matematika beroperasi pada rumus matematika. Tabel berikut menjelaskan daftar fungsi secara detail.

S.No. Deskripsi fungsi
1. abs (x)

Mengembalikan nilai absolut dari x

2. cbrt (x)

Mengembalikan akar pangkat tiga dari x

3. langit-langit (x)

Mengembalikan x nilai dibulatkan ke bilangan bulat terdekat

4.

ceil(x)

Alias ​​untuk langit-langit (x)

5. derajat (x)

Mengembalikan nilai derajat untuk x

6. ex)

Mengembalikan nilai ganda untuk bilangan Euler

7.

exp(x)

Mengembalikan nilai eksponen untuk bilangan Euler

8. lantai (x)

Kembali x dibulatkan ke bawah ke bilangan bulat terdekat

9.

from_base(string,radix)

Mengembalikan nilai string yang diinterpretasikan sebagai bilangan basis-radix

10.

ln(x)

Mengembalikan logaritma natural dari x

11. log2 (x)

Mengembalikan logaritma basis 2 dari x

12.

log10(x)

Mengembalikan logaritma basis 10 dari x

13.

log(x,y)

Mengembalikan basis y logaritma dari x

14. mod (n, m)

Mengembalikan modulus (sisa) dari n dibagi dengan m

15.

pi()

Mengembalikan nilai pi. Hasilnya akan dikembalikan sebagai nilai ganda

16. daya (x, p)

Mengembalikan kekuatan nilai ‘p’ ke x nilai

17.

pow(x,p)

Alias ​​untuk kekuasaan (x, p)

18. radian (x)

mengubah sudut x dalam radian derajat

19.

rand()

Alias ​​untuk radian ()

20. acak()

Mengembalikan nilai pseudo-random

21.

rand(n)

Alias ​​untuk random ()

22. bulat (x)

Mengembalikan nilai dibulatkan untuk x

23.

round(x,d)

x nilai dibulatkan untuk ‘d’ tempat desimal

24.

sign(x)

Mengembalikan fungsi signum dari x, yaitu

0 jika argumennya 0

1 jika argumen lebih besar dari 0

-1 jika argumennya kurang dari 0

Untuk argumen ganda, fungsi tersebut juga mengembalikan -

NaN jika argumennya adalah NaN

1 jika argumennya adalah + Infinity

-1 jika argumennya adalah -Infinity

25. sqrt (x)

Mengembalikan akar kuadrat dari x

26. to_base (x, radix)

Jenis pengembalian adalah pemanah. Hasilnya dikembalikan sebagai radix dasar untukx

27. memotong (x)

Memotong nilai untuk x

28. width_bucket (x, terikat1, terikat2, n)

Mengembalikan nomor bin x menentukan batas1 dan batas2 batas dan n jumlah keranjang

29. width_bucket (x, bins)

Mengembalikan nomor bin x sesuai dengan nampan yang ditentukan oleh nampan array

Fungsi trigonometri

Argumen fungsi trigonometri direpresentasikan sebagai radian (). Tabel berikut mencantumkan fungsinya.

S.No Fungsi & Deskripsi
1. acos (x)

Mengembalikan nilai kosinus terbalik (x)

2.

asin(x)

Mengembalikan nilai sinus terbalik (x)

3.

atan(x)

Mengembalikan nilai tangen terbalik (x)

4. atan2 (y, x)

Mengembalikan nilai tangen terbalik (y / x)

5.

cos(x)

Mengembalikan nilai cosinus (x)

6. cosh (x)

Mengembalikan nilai kosinus hiperbolik (x)

7. sin (x)

Mengembalikan nilai sinus (x)

8.

tan(x)

Mengembalikan nilai tangen (x)

9.

tanh(x)

Mengembalikan nilai tangen hiperbolik (x)

Fungsi Bitwise

Tabel berikut mencantumkan fungsi Bitwise.

S.No Fungsi & Deskripsi
1. bit_count (x, bit)

Hitung jumlah bit

2. bitwise_and (x, y)

Lakukan operasi DAN bitwise untuk dua bit, x dan y

3. bitwise_or (x, y)

Operasi bitwise OR antara dua bit x, y

4. bitwise_not (x)

Bitwise Tidak beroperasi sedikit pun x

5. bitwise_xor (x, y)

Operasi XOR untuk bit x, y

Fungsi String

Tabel berikut mencantumkan fungsi String.

S.No Fungsi & Deskripsi
1. concat (string1, ..., stringN)

Gabungkan string yang diberikan

2. panjang (string)

Mengembalikan panjang string yang diberikan

3. lebih rendah (string)

Mengembalikan format huruf kecil untuk string

4. atas (string)

Mengembalikan format huruf besar untuk string yang diberikan

5. lpad (string, ukuran, padstring)

Padding kiri untuk string yang diberikan

6. ltrim (string)

Menghapus spasi di depan dari string

7. ganti (string, cari, ganti)

Mengganti nilai string

8. mundur (string)

Membalikkan operasi yang dilakukan untuk string

9. rpad (string, ukuran, padstring)

Padding yang tepat untuk string yang diberikan

10. rtrim (string)

Menghapus spasi kosong dari string

11. split (string, pembatas)

Memisahkan string pada pembatas dan mengembalikan larik berukuran paling banyak

12. split_part (string, pembatas, indeks)

Memisahkan string pada pembatas dan mengembalikan indeks bidang

13. strpos (string, substring)

Mengembalikan posisi awal substring dalam string

14. substr (string, mulai)

Mengembalikan substring untuk string yang diberikan

15. substr (string, mulai, panjang)

Mengembalikan substring untuk string tertentu dengan panjang tertentu

16. trim (string)

Menghapus spasi di depan dan di belakangnya dari string

Fungsi Tanggal dan Waktu

Tabel berikut mencantumkan fungsi Tanggal dan Waktu.

S.No Fungsi & Deskripsi
1. tanggal sekarang

Mengembalikan tanggal sekarang

2. waktu saat ini

Mengembalikan waktu saat ini

3. current_timestamp

Mengembalikan stempel waktu saat ini

4. current_timezone ()

Mengembalikan zona waktu saat ini

5. sekarang()

Mengembalikan tanggal saat ini, stempel waktu dengan zona waktu

6. waktu lokal

Mengembalikan waktu setempat

7. cap waktu lokal

Mengembalikan stempel waktu lokal

Fungsi Ekspresi Reguler

Tabel berikut mencantumkan fungsi Ekspresi Reguler.

S.No Fungsi & Deskripsi
1. regexp_extract_all (string, pola)

Mengembalikan string yang cocok dengan ekspresi reguler untuk pola tersebut

2. regexp_extract_all (string, pola, grup)

Mengembalikan string yang cocok dengan ekspresi reguler untuk pola dan grup

3. regexp_extract (string, pola)

Mengembalikan substring pertama yang cocok dengan ekspresi reguler untuk pola tersebut

4. regexp_extract (string, pola, grup)

Mengembalikan substring pertama yang cocok dengan ekspresi reguler untuk pola dan grup

5. regexp_like (string, pola)

Mengembalikan kecocokan string untuk pola. Jika string dikembalikan, nilainya akan menjadi benar jika tidak salah

6. regexp_replace (string, pola)

Mengganti contoh string yang cocok untuk ekspresi dengan pola

7. regexp_replace (string, pola, penggantian)

Ganti contoh string yang cocok untuk ekspresi dengan pola dan penggantinya

8. regexp_split (string, pola)

Memisahkan ekspresi reguler untuk pola yang diberikan

Fungsi JSON

Tabel berikut mencantumkan fungsi JSON.

S.No Fungsi & Deskripsi
1. json_array_contains (json, nilai)

Periksa nilai yang ada dalam array json. Jika nilainya ada, itu akan mengembalikan true, jika tidak salah

2. json_array_get (json_array, indeks)

Dapatkan elemen untuk indeks dalam array json

3. json_array_length (json)

Mengembalikan panjang dalam larik json

4. json_format (json)

Mengembalikan format struktur json

5. json_parse (string)

Mengurai string sebagai json

6. json_size (json, json_path)

Mengembalikan ukuran nilai

Fungsi URL

Tabel berikut mencantumkan fungsi URL.

S.No Fungsi & Deskripsi
1. url_extract_host (url)

Menampilkan inang URL

2. url_extract_path (url)

Menampilkan jalur URL

3. url_extract_port (url)

Mengembalikan port URL

4. url_extract_protocol (url)

Menampilkan protokol URL

5. url_extract_query (url)

Mengembalikan string kueri URL

Fungsi Agregat

Tabel berikut mencantumkan fungsi Agregat.

S.No Fungsi & Deskripsi
1.

avg(x)

Mengembalikan rata-rata untuk nilai yang diberikan

2. min (x, n)

Mengembalikan nilai minimum dari dua nilai

3. maks (x, n)

Mengembalikan nilai maksimum dari dua nilai

4. jumlah (x)

Mengembalikan jumlah nilai

5. menghitung(*)

Mengembalikan jumlah baris masukan

6. hitung (x)

Mengembalikan hitungan nilai input

7. checksum (x)

Mengembalikan checksum untuk x

8. sewenang-wenang (x)

Menampilkan nilai arbitrer untuk x

Fungsi Warna

Tabel berikut mencantumkan fungsi Warna.

S.No Fungsi & Deskripsi
1. batang (x, lebar)

Merender satu batang menggunakan rgb low_color dan high_color

2. batang (x, lebar, warna_rendah, warna_tinggi)

Merender satu batang untuk lebar yang ditentukan

3. warna (string)

Mengembalikan nilai warna untuk string yang dimasukkan

4. render (x, warna)

Merender nilai x menggunakan warna tertentu menggunakan kode warna ANSI

5. memberikan (b)

Menerima nilai boolean b dan membuat hijau benar atau salah merah menggunakan kode warna ANSI

6.

rgb(red, green, blue)

Mengembalikan nilai warna yang menangkap nilai RGB dari tiga nilai warna komponen yang disediakan sebagai parameter int mulai dari 0 hingga 255

Fungsi Array

Tabel berikut mencantumkan fungsi Array.

S.No Fungsi & Deskripsi
1. array_max (x)

Menemukan elemen maks dalam sebuah larik

2. larik_min (x)

Menemukan elemen min dalam sebuah larik

3. urutan_larik (x)

Mengurutkan elemen dalam array

4. larik_hapus (x, elemen)

Menghapus elemen tertentu dari array

5. concat (x, y)

Menggabungkan dua larik

6. berisi (x, elemen)

Menemukan elemen yang diberikan dalam larik. True akan dikembalikan jika ada, jika tidak salah

7. array_position (x, elemen)

Temukan posisi elemen yang diberikan dalam sebuah array

8. perpotongan_larik (x, y)

Melakukan perpotongan antara dua larik

9. element_at (larik, indeks)

Mengembalikan posisi elemen larik

10. irisan (x, awal, panjang)

Mengiris elemen array dengan panjang tertentu

Fungsi Teradata

Tabel berikut mencantumkan fungsi Teradata.

S.No Fungsi & Deskripsi
1. indeks (string, substring)

Mengembalikan indeks string dengan substring yang diberikan

2. substring (string, mulai)

Mengembalikan substring dari string yang diberikan. Anda dapat menentukan indeks awal di sini

3. substring (string, mulai, panjang)

Mengembalikan substring dari string yang diberikan untuk indeks awal dan panjang string tertentu

Konektor MySQL digunakan untuk membuat kueri database MySQL eksternal.

Prasyarat

Instalasi server MySQL.

Pengaturan konfigurasi

Semoga Anda telah menginstal server mysql di komputer Anda. Untuk mengaktifkan properti mysql di server Presto, Anda harus membuat file“mysql.properties” di “etc/catalog”direktori. Keluarkan perintah berikut untuk membuat file mysql.properties.

$ cd etc $ cd catalog 
$ vi mysql.properties   

connector.name = mysql 
connection-url = jdbc:mysql://localhost:3306 
connection-user = root 
connection-password = pwd

Simpan file dan keluar dari terminal. Pada file di atas, Anda harus memasukkan kata sandi mysql Anda di bidang kata sandi koneksi.

Buat Database di Server MySQL

Buka server MySQL dan buat database menggunakan perintah berikut.

create database tutorials

Sekarang Anda telah membuat database "tutorial" di server. Untuk mengaktifkan tipe database, gunakan perintah "gunakan tutorial" di jendela kueri.

Buat tabel

Mari kita buat tabel sederhana di database "tutorial".

create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))

Sisipkan Tabel

Setelah membuat tabel, masukkan tiga rekaman menggunakan kueri berikut ini.

insert into author values(1,'Doug Cutting','Hadoop') 
insert into author values(2,’James Gosling','java') 
insert into author values(3,'Dennis Ritchie’,'C')

Pilih Rekaman

Untuk mengambil semua catatan, ketikkan kueri berikut ini.

Pertanyaan

select * from author

Hasil

auth_id    auth_name      topic  
1        Doug Cutting     Hadoop 
2        James Gosling    java 
3        Dennis Ritchie     C

Sampai sekarang, Anda telah menanyakan data menggunakan server MySQL. Mari hubungkan plugin penyimpanan Mysql ke server Presto.

Hubungkan Presto CLI

Ketik perintah berikut untuk menghubungkan plugin MySql di Presto CLI.

./presto --server localhost:8080 --catalog mysql --schema tutorials

Anda akan menerima tanggapan berikut.

presto:tutorials>

Sini “tutorials” mengacu pada skema di server mysql.

Daftar Skema

Untuk mencantumkan semua skema di mysql, ketik kueri berikut di server Presto.

Pertanyaan

presto:tutorials> show schemas from mysql;

Hasil

Schema 
-------------------- 
 information_schema 
 performance_schema 
 sys 
 tutorials

Dari hasil ini, kita dapat menyimpulkan tiga skema pertama sebagai yang telah ditentukan dan yang terakhir sebagai dibuat sendiri.

Daftar Tabel dari Skema

Kueri berikut mencantumkan semua tabel dalam skema tutorial.

Pertanyaan

presto:tutorials> show tables from mysql.tutorials;

Hasil

Table 
-------- 
 author

Kami hanya membuat satu tabel dalam skema ini. Jika Anda telah membuat banyak tabel, itu akan mencantumkan semua tabel.

Jelaskan Tabel

Untuk mendeskripsikan bidang tabel, ketikkan kueri berikut ini.

Pertanyaan

presto:tutorials> describe mysql.tutorials.author;

Hasil

Column   |     Type     | Comment 
-----------+--------------+--------- 
 auth_id   | integer      | 
 auth_name | varchar(50)  | 
 topic     | varchar(100) |

Perlihatkan Kolom dari Tabel

Pertanyaan

presto:tutorials> show columns from mysql.tutorials.author;

Hasil

Column    |     Type     | Comment 
-----------+--------------+--------- 
 auth_id   | integer      | 
 auth_name | varchar(50)  | 
 topic     | varchar(100) |

Mengakses Catatan Tabel

Untuk mengambil semua record dari tabel mysql, keluarkan query berikut.

Pertanyaan

presto:tutorials> select * from mysql.tutorials.author;

Hasil

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

Dari hasil ini, Anda dapat mengambil record server mysql di Presto.

Buat Tabel Menggunakan sebagai Perintah

Konektor mysql tidak mendukung buat kueri tabel tetapi Anda dapat membuat tabel menggunakan as perintah.

Pertanyaan

presto:tutorials> create table mysql.tutorials.sample as 
select * from mysql.tutorials.author;

Hasil

CREATE TABLE: 3 rows

Anda tidak dapat memasukkan baris secara langsung karena konektor ini memiliki beberapa batasan. Itu tidak dapat mendukung kueri berikut -

  • create
  • insert
  • update
  • delete
  • drop

Untuk melihat rekaman dalam tabel yang baru dibuat, ketikkan kueri berikut ini.

Pertanyaan

presto:tutorials> select * from mysql.tutorials.sample;

Hasil

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

Java Management Extensions (JMX) memberikan informasi tentang Java Virtual Machine dan perangkat lunak yang berjalan di dalam JVM. Konektor JMX digunakan untuk meminta informasi JMX di server Presto.

Seperti yang telah kami aktifkan “jmx.properties” file di bawah “etc/catalog”direktori. Sekarang hubungkan Perst CLI untuk mengaktifkan plugin JMX.

Presto CLI

Pertanyaan

$ ./presto --server localhost:8080 --catalog jmx --schema jmx

Hasil

Anda akan menerima tanggapan berikut.

presto:jmx>

Skema JMX

Untuk mencantumkan semua skema di "jmx", ketik kueri berikut.

Pertanyaan

presto:jmx> show schemas from jmx;

Hasil

Schema 
-------------------- 
 information_schema  
 current

Tampilkan Tabel

Untuk melihat tabel dalam skema "saat ini", gunakan perintah berikut.

Pertanyaan 1

presto:jmx> show tables from jmx.current;

Hasil

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
 ………………
 ……………….

Pertanyaan 2

presto:jmx> select * from jmx.current.”java.lang:type = compilation";

Hasil

node               | compilationtimemonitoringsupported |      name   |         objectname         | totalcompilationti
--------------------------------------+------------------------------------+--------------------------------+----------------------------+-------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation |       1276

Pertanyaan 3

presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";

Hasil

node                 | readfromoutputbuffertime.alltime.count 
 | readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer
 --------------------------------------+---------------------------------------+--------------------------------------+--------------------------------------- 
 ffffffff-ffff-ffff-ffff-ffffffffffff |                                   92.0 |                          1.009106149 |

Konektor Hive memungkinkan pembuatan kueri data yang disimpan di gudang data Hive.

Prasyarat

  • Hadoop
  • Hive

Semoga Anda telah menginstal Hadoop dan Hive di komputer Anda. Mulai semua layanan satu per satu di terminal baru. Kemudian, mulai sarang metastore menggunakan perintah berikut,

hive --service metastore

Presto menggunakan layanan metastore sarang untuk mendapatkan detail tabel sarang.

Pengaturan konfigurasi

Buat file “hive.properties” dibawah “etc/catalog”direktori. Gunakan perintah berikut.

$ cd etc $ cd catalog 
$ vi hive.properties  

connector.name = hive-cdh4 
hive.metastore.uri = thrift://localhost:9083

Setelah melakukan semua perubahan, simpan file dan keluar dari terminal.

Buat Database

Buat database di Hive menggunakan kueri berikut -

Pertanyaan

hive> CREATE SCHEMA tutorials;

Setelah database dibuat, Anda dapat memverifikasinya menggunakan “show databases” perintah.

Buat tabel

Buat Tabel adalah pernyataan yang digunakan untuk membuat tabel di Hive. Misalnya, gunakan kueri berikut.

hive> create table author(auth_id int, auth_name varchar(50), 
topic varchar(100) STORED AS SEQUENCEFILE;

Sisipkan Tabel

Kueri berikut digunakan untuk menyisipkan rekaman dalam tabel sarang.

hive> insert into table author values (1,’ Doug Cutting’,Hadoop),
(2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);

Mulai Presto CLI

Anda dapat memulai Presto CLI untuk menghubungkan plugin penyimpanan Hive menggunakan perintah berikut.

$ ./presto --server localhost:8080 --catalog hive —schema tutorials;

Anda akan menerima tanggapan berikut.

presto:tutorials >

Daftar Skema

Untuk mencantumkan semua skema di konektor Hive, ketik perintah berikut.

Pertanyaan

presto:tutorials > show schemas from hive;

Hasil

default  

tutorials

Tabel Daftar

Untuk mencantumkan semua tabel dalam skema "tutorial", gunakan kueri berikut.

Pertanyaan

presto:tutorials > show tables from hive.tutorials;

Hasil

author

Ambil Tabel

Kueri berikut digunakan untuk mengambil semua catatan dari tabel sarang.

Pertanyaan

presto:tutorials > select * from hive.tutorials.author;

Hasil

auth_id  |   auth_name    | topic 
---------+----------------+-------- 
       1 | Doug Cutting   | Hadoop 
       2 | James Gosling  | java 
       3 | Dennis Ritchie | C

Konektor Kafka untuk Presto memungkinkan untuk mengakses data dari Apache Kafka menggunakan Presto.

Prasyarat

Unduh dan instal versi terbaru dari proyek Apache berikut.

  • Penjaga kebun binatang Apache
  • Apache Kafka

Mulai ZooKeeper

Mulai server Zookeeper menggunakan perintah berikut.

$ bin/zookeeper-server-start.sh config/zookeeper.properties

Sekarang, ZooKeeper memulai port pada 2181.

Mulai Kafka

Mulai Kafka di terminal lain menggunakan perintah berikut.

$ bin/kafka-server-start.sh config/server.properties

Setelah kafka dimulai, ia menggunakan nomor port 9092.

Data TPCH

Unduh tpch-kafka

$  curl -o kafka-tpch 
https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_ 
0811-1.0.sh

Sekarang Anda telah mengunduh loader dari pusat Maven menggunakan perintah di atas. Anda akan mendapatkan tanggapan serupa sebagai berikut.

% 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

Hasil

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'...
………………………
……………………….

Sekarang, pelanggan tabel Kafka, pesanan, pemasok, dll., Dimuat menggunakan tpch.

Tambahkan Pengaturan Config

Mari tambahkan pengaturan konfigurasi konektor Kafka berikut di server Presto.

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

Dalam konfigurasi di atas, tabel Kafka dimuat menggunakan program Kafka-tpch.

Mulai Presto CLI

Mulai Presto CLI menggunakan perintah berikut,

$ ./presto --server localhost:8080 --catalog kafka —schema tpch;

Sini “tpch" adalah skema untuk konektor Kafka dan Anda akan menerima respons sebagai berikut.

presto:tpch>

Tabel Daftar

Kueri berikut mencantumkan semua tabel di “tpch” skema.

Pertanyaan

presto:tpch> show tables;

Hasil

Table 
---------- 
 customer 
 lineitem 
 nation 
 orders
 part 
 partsupp 
 region 
 supplier

Jelaskan Tabel Pelanggan

Pertanyaan berikut menjelaskan “customer” meja.

Pertanyaan

presto:tpch> describe customer;

Hasil

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

Antarmuka JDBC Presto digunakan untuk mengakses aplikasi Java.

Prasyarat

Instal presto-jdbc-0.150.jar

Anda dapat mendownload file jar JDBC dengan mengunjungi link berikut,

https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/

Setelah file jar diunduh, tambahkan ke jalur kelas aplikasi Java Anda.

Buat Aplikasi Sederhana

Mari buat aplikasi java sederhana menggunakan antarmuka JDBC.

Coding - 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(); 
      } 
   } 
}

Simpan file dan keluar dari aplikasi. Sekarang, mulai server Presto di satu terminal dan buka terminal baru untuk mengkompilasi dan mengeksekusi hasilnya. Berikut langkah-langkahnya -

Kompilasi

~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar  PrestoJdbcSample.java

Eksekusi

~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar  PrestoJdbcSample

Keluaran

INFO: Logging initialized @146ms  
ID: 1; 
Name: Doug Cutting 
ID: 2; 
Name: James Gosling 
ID: 3; 
Name: Dennis Ritchie

Buat proyek Maven untuk mengembangkan fungsi kustom Presto.

SimpleFunctionsFactory.java

Buat kelas SimpleFunctionsFactory untuk mengimplementasikan antarmuka FunctionFactory.

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

Buat kelas SimpleFunctionsPlugin untuk mengimplementasikan antarmuka Plugin.

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(); 
   } 
}

Tambahkan File Sumber Daya

Buat file sumber daya yang ditentukan dalam paket implementasi.

(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)

Sekarang pindah ke lokasi file sumber daya @ / path / ke / resource /

Kemudian tambahkan perubahannya,

com.facebook.presto.spi.Plugin

pom.xml

Tambahkan dependensi berikut ke file pom.xml.

<?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

Buat kelas SimpleFunctions menggunakan atribut Presto.

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; 
   } 
}

Setelah aplikasi dibuat, kompilasi dan jalankan aplikasi. Ini akan menghasilkan file JAR. Salin file dan pindahkan file JAR ke direktori plugin server Presto target.

Kompilasi

mvn compile

Eksekusi

mvn package

Sekarang restart server Presto dan hubungkan klien Presto. Kemudian jalankan aplikasi fungsi kustom seperti yang dijelaskan di bawah ini,

$ ./presto --catalog mysql --schema default

Pertanyaan

presto:default> select mysum(10,10);

Hasil

_col0  
------- 
  20