Apache Presto - Hướng dẫn nhanh

Phân tích dữ liệu là quá trình phân tích dữ liệu thô để thu thập thông tin liên quan nhằm đưa ra quyết định tốt hơn. Nó chủ yếu được sử dụng trong nhiều tổ chức để đưa ra quyết định kinh doanh. Chà, phân tích dữ liệu lớn liên quan đến một lượng lớn dữ liệu và quá trình này khá phức tạp, do đó các công ty sử dụng các chiến lược khác nhau.

Ví dụ, Facebook là một trong những công ty cung cấp dữ liệu hàng đầu và có kho dữ liệu lớn nhất trên thế giới. Dữ liệu kho của Facebook được lưu trữ trong Hadoop để tính toán quy mô lớn. Sau đó, khi dữ liệu kho tăng lên đến petabyte, họ quyết định phát triển một hệ thống mới với độ trễ thấp. Vào năm 2012, các thành viên trong nhóm Facebook đã thiết kế“Presto” để phân tích truy vấn tương tác sẽ hoạt động nhanh chóng ngay cả với petabyte dữ liệu.

Apache Presto là gì?

Apache Presto là một công cụ thực thi truy vấn song song phân tán, được tối ưu hóa cho độ trễ thấp và phân tích truy vấn tương tác. Presto chạy các truy vấn một cách dễ dàng và mở rộng quy mô mà không mất thời gian ngay cả từ gigabyte đến petabyte.

Một truy vấn Presto duy nhất có thể xử lý dữ liệu từ nhiều nguồn như HDFS, MySQL, Cassandra, Hive và nhiều nguồn dữ liệu khác. Presto được xây dựng bằng Java và dễ dàng tích hợp với các thành phần cơ sở hạ tầng dữ liệu khác. Presto rất mạnh mẽ và các công ty hàng đầu như Airbnb, DropBox, Groupon, Netflix đang áp dụng nó.

Presto - Tính năng

Presto chứa các tính năng sau:

  • Kiến trúc đơn giản và có thể mở rộng.
  • Các đầu nối có thể cắm được - Presto hỗ trợ trình kết nối có thể cắm được để cung cấp siêu dữ liệu và dữ liệu cho các truy vấn.
  • Thực thi theo đường ống - Tránh chi phí độ trễ I / O không cần thiết.
  • Các chức năng do người dùng xác định - Người phân tích có thể tạo các chức năng tùy chỉnh do người dùng xác định để di chuyển dễ dàng.
  • Xử lý cột được vector hóa.

Presto - Lợi ích

Dưới đây là danh sách các lợi ích mà Apache Presto cung cấp:

  • Các phép toán SQL chuyên dụng
  • Dễ dàng cài đặt và gỡ lỗi
  • Trừu tượng lưu trữ đơn giản
  • Nhanh chóng chia tỷ lệ dữ liệu petabyte với độ trễ thấp

Presto - Ứng dụng

Presto hỗ trợ hầu hết các ứng dụng công nghiệp tốt nhất hiện nay. Hãy cùng điểm qua một số ứng dụng đáng chú ý.

  • Facebook- Facebook xây dựng Presto cho nhu cầu phân tích dữ liệu. Presto dễ dàng mở rộng tốc độ lớn của dữ liệu.

  • Teradata- Teradata cung cấp các giải pháp end-to-end trong phân tích Dữ liệu lớn và lưu trữ dữ liệu. Đóng góp của Teradata cho Presto giúp nhiều công ty có thể đáp ứng mọi nhu cầu phân tích dễ dàng hơn.

  • Airbnb- Presto là một phần không thể thiếu của cơ sở hạ tầng dữ liệu Airbnb. Hàng trăm nhân viên đang thực hiện các truy vấn mỗi ngày với công nghệ này.

Tại sao Presto?

Presto hỗ trợ ANSI SQL tiêu chuẩn giúp các nhà phân tích và phát triển dữ liệu rất dễ dàng. Mặc dù nó được xây dựng bằng Java, nó tránh được các vấn đề điển hình của mã Java liên quan đến cấp phát bộ nhớ và thu gom rác. Presto có kiến ​​trúc trình kết nối thân thiện với Hadoop. Nó cho phép dễ dàng cắm vào các hệ thống tập tin.

Presto chạy trên nhiều bản phân phối Hadoop. Ngoài ra, Presto có thể tiếp cận từ nền tảng Hadoop để truy vấn Cassandra, cơ sở dữ liệu quan hệ hoặc các kho dữ liệu khác. Khả năng phân tích đa nền tảng này cho phép người dùng Presto trích xuất giá trị kinh doanh tối đa từ gigabyte đến petabyte dữ liệu.

Kiến trúc của Presto gần giống với kiến ​​trúc DBMS MPP (xử lý song song hàng loạt) cổ điển. Sơ đồ sau minh họa kiến ​​trúc của Presto.

Sơ đồ trên bao gồm các thành phần khác nhau. Bảng sau mô tả chi tiết từng thành phần.

S.Không Thành phần & Mô tả
1.

Client

Máy khách (Presto CLI) gửi các câu lệnh SQL cho một điều phối viên để nhận kết quả.

2.

Coordinator

Điều phối viên là một daemon chính. Điều phối viên ban đầu phân tích cú pháp các truy vấn SQL sau đó phân tích và lập kế hoạch cho việc thực thi truy vấn. Bộ lập lịch thực hiện thực thi đường ống, giao công việc cho nút gần nhất và giám sát tiến độ.

3.

Connector

Các plugin lưu trữ được gọi là trình kết nối. Hive, HBase, MySQL, Cassandra và nhiều hơn nữa hoạt động như một trình kết nối; nếu không, bạn cũng có thể triển khai một tùy chỉnh. Trình kết nối cung cấp siêu dữ liệu và dữ liệu cho các truy vấn. Người điều phối sử dụng trình kết nối để lấy siêu dữ liệu nhằm xây dựng kế hoạch truy vấn.

4.

Worker

Điều phối viên giao nhiệm vụ cho các nút công nhân. Công nhân lấy dữ liệu thực tế từ trình kết nối. Cuối cùng, nút công nhân cung cấp kết quả cho máy khách.

Presto - Quy trình làm việc

Presto là một hệ thống phân tán chạy trên một cụm các nút. Công cụ truy vấn phân tán của Presto được tối ưu hóa để phân tích tương tác và hỗ trợ ANSI SQL tiêu chuẩn, bao gồm các truy vấn phức tạp, tổng hợp, liên kết và các hàm cửa sổ. Kiến trúc Presto đơn giản và có thể mở rộng. Ứng dụng khách Presto (CLI) gửi các câu lệnh SQL tới bộ điều phối daemon chính.

Bộ lập lịch kết nối thông qua đường ống thực thi. Bộ lập lịch chỉ định công việc cho các nút gần nhất với dữ liệu và giám sát tiến độ. Điều phối viên giao nhiệm vụ cho nhiều nút công nhân và cuối cùng nút công nhân gửi lại kết quả cho máy khách. Máy khách lấy dữ liệu từ quá trình đầu ra. Khả năng mở rộng là thiết kế quan trọng. Các trình kết nối phù hợp như Hive, HBase, MySQL, v.v., cung cấp siêu dữ liệu và dữ liệu cho các truy vấn. Presto được thiết kế với “sự trừu tượng hóa lưu trữ đơn giản” giúp dễ dàng cung cấp khả năng truy vấn SQL chống lại các loại nguồn dữ liệu khác nhau này.

Mô hình thực thi

Presto hỗ trợ công cụ thực thi và truy vấn tùy chỉnh với các toán tử được thiết kế để hỗ trợ ngữ nghĩa SQL. Ngoài việc lập lịch được cải thiện, tất cả quá trình xử lý đều nằm trong bộ nhớ và được kết nối trên mạng giữa các giai đoạn khác nhau. Điều này tránh chi phí độ trễ I / O không cần thiết.

Chương này sẽ giải thích cách cài đặt Presto trên máy tính của bạn. Hãy xem qua các yêu cầu cơ bản của Presto,

  • Linux hoặc Mac OS
  • Phiên bản Java 8

Bây giờ, chúng ta hãy tiếp tục các bước sau để cài đặt Presto trên máy của bạn.

Xác minh cài đặt Java

Hy vọng rằng bạn đã cài đặt Java phiên bản 8 trên máy của mình ngay bây giờ, vì vậy bạn chỉ cần xác minh nó bằng cách sử dụng lệnh sau.

$ java -version

Nếu Java được cài đặt thành công trên máy của bạn, bạn có thể thấy phiên bản Java đã cài đặt. Nếu Java chưa được cài đặt, hãy làm theo các bước tiếp theo để cài đặt Java 8 trên máy của bạn.

Tải xuống JDK. Tải xuống phiên bản mới nhất của JDK bằng cách truy cập liên kết sau.

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

Phiên bản mới nhất là JDK 8u 92 và tệp là “jdk-8u92-linux-x64.tar.gz”. Vui lòng tải xuống tệp trên máy của bạn.

Sau đó, giải nén các tệp và chuyển đến thư mục cụ thể.

Sau đó đặt các lựa chọn thay thế Java. Cuối cùng Java sẽ được cài đặt trên máy của bạn.

Cài đặt Apache Presto

Tải xuống phiên bản Presto mới nhất bằng cách truy cập liên kết sau,

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

Giờ đây, phiên bản mới nhất của “presto-server-0.149.tar.gz” sẽ được tải xuống máy của bạn.

Giải nén tệp tar

Trích xuất tar tập tin bằng lệnh sau:

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

Thiết lập cấu hình

Tạo thư mục "dữ liệu"

Tạo thư mục dữ liệu bên ngoài thư mục cài đặt, thư mục này sẽ được sử dụng để lưu trữ nhật ký, siêu dữ liệu, v.v., để dễ dàng bảo quản khi nâng cấp Presto. Nó được định nghĩa bằng đoạn mã sau:

$ cd  
$ mkdir data

Để xem đường dẫn nơi nó nằm, hãy sử dụng lệnh “pwd”. Vị trí này sẽ được chỉ định trong tệp node.properties tiếp theo.

Tạo thư mục "vv"

Tạo thư mục etc bên trong thư mục cài đặt Presto bằng đoạn mã sau:

$ cd presto-server-0.149 
$ mkdir etc

Thư mục này sẽ chứa các tệp cấu hình. Hãy tạo từng tệp một.

Thuộc tính nút

Tệp thuộc tính nút Presto chứa cấu hình môi trường cụ thể cho từng nút. Nó được tạo bên trong thư mục etc (etc / node.properties) bằng cách sử dụng mã sau:

$ cd etc 
$ vi node.properties  

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

Sau khi thực hiện tất cả các thay đổi, hãy lưu tệp và thoát khỏi thiết bị đầu cuối. Đâynode.data là đường dẫn vị trí của thư mục dữ liệu đã tạo ở trên. node.id đại diện cho định danh duy nhất cho mỗi nút.

Cấu hình JVM

Tạo một tệp “jvm.config” bên trong thư mục etc (etc / jvm.config). Tệp này chứa danh sách các tùy chọn dòng lệnh được sử dụng để khởi chạy Máy ảo Java.

$ cd etc 
$ vi jvm.config  

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

Sau khi thực hiện tất cả các thay đổi, hãy lưu tệp và thoát khỏi thiết bị đầu cuối.

Thuộc tính cấu hình

Tạo một tệp “config.properties” bên trong thư mục etc (etc / config.properties). Tệp này chứa cấu hình của máy chủ Presto. Nếu bạn đang thiết lập một máy duy nhất để thử nghiệm, máy chủ Presto chỉ có thể hoạt động như một quá trình điều phối như được xác định bằng cách sử dụng mã sau:

$ 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

Đây,

  • coordinator - nút chính.

  • node-scheduler.include-coordinator - Cho phép lập lịch làm việc trên bộ điều phối.

  • http-server.http.port - Chỉ định cổng cho máy chủ HTTP.

  • query.max-memory=5GB - Dung lượng bộ nhớ được phân phối tối đa.

  • query.max-memory-per-node=1GB - Dung lượng bộ nhớ tối đa trên mỗi nút.

  • discovery-server.enabled - Presto sử dụng dịch vụ Discovery để tìm tất cả các nút trong cụm.

  • discovery.uri - anh ấy URI cho máy chủ Khám phá.

Nếu bạn đang thiết lập máy chủ Presto nhiều máy, Presto sẽ hoạt động như cả quá trình điều phối và công nhân. Sử dụng cài đặt cấu hình này để kiểm tra máy chủ Presto trên nhiều máy.

Cấu hình cho Điều phối viên

$ 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

Cấu hình cho Công nhân

$ 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

Thuộc tính nhật ký

Tạo một tệp “log.properties” bên trong thư mục etc (etc / log.properties). Tệp này chứa cấp độ nhật ký tối thiểu cho cấu trúc phân cấp trình ghi nhật ký được đặt tên. Nó được định nghĩa bằng đoạn mã sau:

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

Lưu tệp và thoát khỏi thiết bị đầu cuối. Ở đây, bốn cấp độ nhật ký được sử dụng như GỠ LỖI, THÔNG TIN, CẢNH BÁO và LỖI. Mức nhật ký mặc định là INFO.

Thuộc tính danh mục

Tạo một thư mục “danh mục” bên trong thư mục vv (etc / catalog). Điều này sẽ được sử dụng để gắn dữ liệu. Ví dụ, tạoetc/catalog/jmx.properties với các nội dung sau để gắn kết jmx connector như danh mục jmx -

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

Bắt đầu Presto

Presto có thể được bắt đầu bằng lệnh sau,

$ bin/launcher start

Sau đó, bạn sẽ thấy phản hồi tương tự như thế này,

Started as 840

Chạy Presto

Để khởi chạy máy chủ Presto, hãy sử dụng lệnh sau:

$ bin/launcher run

Sau khi khởi chạy thành công máy chủ Presto, bạn có thể tìm thấy các tệp nhật ký trong thư mục “var / log”.

  • launcher.log - Nhật ký này được tạo bởi trình khởi chạy và được kết nối với các luồng stdout và stderr của máy chủ.

  • server.log - Đây là tệp nhật ký chính được Presto sử dụng.

  • http-request.log - Yêu cầu HTTP do máy chủ nhận được.

Như bây giờ, bạn đã cài đặt thành công cài đặt cấu hình Presto trên máy của mình. Hãy tiếp tục các bước cài đặt Presto CLI.

Cài đặt Presto CLI

Presto CLI cung cấp một trình bao tương tác dựa trên thiết bị đầu cuối để chạy các truy vấn.

Tải xuống Presto CLI bằng cách truy cập liên kết sau,

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

Bây giờ “presto-cli-0.149-execute.jar” sẽ được cài đặt trên máy của bạn.

Chạy CLI

Sau khi tải xuống presto-cli, hãy sao chép nó vào vị trí mà bạn muốn chạy nó. Vị trí này có thể là bất kỳ nút nào có quyền truy cập mạng vào bộ điều phối. Đầu tiên, đổi tên của tệp Jar thành Presto. Sau đó, làm cho nó thực thi vớichmod + x lệnh sử dụng mã sau:

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

Bây giờ thực thi CLI bằng lệnh sau,

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

Bạn sẽ thấy phản hồi sau,

presto:default>

Bây giờ gõ lệnh “jps” trên thiết bị đầu cuối của bạn và bạn sẽ thấy các trình duyệt đang chạy.

Dừng Presto

Sau khi thực hiện tất cả các lần thực thi, bạn có thể dừng máy chủ presto bằng lệnh sau:

$ bin/launcher stop

Chương này sẽ thảo luận về cài đặt cấu hình cho Presto.

Presto Verifier

Presto Verifier có thể được sử dụng để kiểm tra Presto với cơ sở dữ liệu khác (chẳng hạn như MySQL) hoặc để kiểm tra hai cụm Presto với nhau.

Tạo cơ sở dữ liệu trong MySQL

Mở máy chủ MySQL và tạo cơ sở dữ liệu bằng lệnh sau.

create database test

Bây giờ bạn đã tạo cơ sở dữ liệu "thử nghiệm" trong máy chủ. Tạo bảng và tải nó bằng truy vấn sau.

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

Thêm cài đặt cấu hình

Tạo tệp thuộc tính để định cấu hình trình xác minh -

$ 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

Đây, trong query-database , nhập các chi tiết sau - tên cơ sở dữ liệu mysql, tên người dùng và mật khẩu.

Tải xuống tệp JAR

Tải xuống tệp jar Presto-Verifier bằng cách truy cập liên kết sau,

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

Bây giờ là phiên bản “presto-verifier-0.149-executable.jar” được tải xuống trên máy của bạn.

Thực thi JAR

Thực thi tệp JAR bằng lệnh sau,

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

Chạy Trình xác minh

Chạy trình xác minh bằng lệnh sau,

$ ./verifier config.properties

Tạo bảng

Hãy tạo một bảng đơn giản trong “test” cơ sở dữ liệu bằng cách sử dụng truy vấn sau.

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

Chèn bảng

Sau khi tạo bảng, hãy chèn hai bản ghi bằng truy vấn sau,

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

Chạy truy vấn trình xác minh

Thực hiện truy vấn mẫu sau trong thiết bị đầu cuối trình xác minh (./verifier config.propeties) để kiểm tra kết quả trình xác minh.

Truy vấn mẫu

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

Đây, select * from mysql.test.product truy vấn đề cập đến danh mục mysql, test là tên cơ sở dữ liệu và productlà tên bảng. Bằng cách này, bạn có thể truy cập trình kết nối mysql bằng máy chủ Presto.

Ở đây, hai truy vấn chọn giống nhau được kiểm tra với nhau để xem hiệu suất. Tương tự, bạn có thể chạy các truy vấn khác để kiểm tra kết quả hoạt động. Bạn cũng có thể kết nối hai cụm Presto để kiểm tra kết quả hoạt động.

Trong chương này, chúng ta sẽ thảo luận về các công cụ quản trị được sử dụng trong Presto. Hãy bắt đầu với Giao diện Web của Presto.

Giao diện web

Presto cung cấp giao diện web để theo dõi và quản lý các truy vấn. Nó có thể được truy cập từ số cổng được chỉ định trong Thuộc tính cấu hình của bộ điều phối.

Khởi động máy chủ Presto và Presto CLI. Sau đó, bạn có thể truy cập giao diện web từ url sau:http://localhost:8080/

Kết quả sẽ tương tự như màn hình trên.

Tại đây, trang chính có danh sách các truy vấn cùng với thông tin như ID truy vấn duy nhất, văn bản truy vấn, trạng thái truy vấn, tỷ lệ phần trăm đã hoàn thành, tên người dùng và nguồn mà truy vấn này được khởi tạo. Các truy vấn mới nhất đang chạy trước, sau đó các truy vấn đã hoàn thành hoặc chưa hoàn thành được hiển thị ở dưới cùng.

Điều chỉnh hiệu suất trên Presto

Nếu cụm Presto đang gặp bất kỳ sự cố nào liên quan đến hiệu suất, hãy thay đổi cài đặt cấu hình mặc định của bạn thành cài đặt sau.

Thuộc tính cấu hình

  • task. info -refresh-max-wait - Giảm tải công việc của điều phối viên.

  • task.max-worker-threads - Tách quy trình và gán cho từng nút công nhân.

  • distributed-joins-enabled - Các phép nối phân tán dựa trên băm.

  • node-scheduler.network-topology - Đặt cấu trúc liên kết mạng cho bộ lập lịch.

Cài đặt JVM

Thay đổi cài đặt JVM mặc định của bạn thành cài đặt sau. Điều này sẽ hữu ích cho việc chẩn đoán các vấn đề thu gom rác.

-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

Trong chương này, chúng ta sẽ thảo luận về cách tạo và thực thi các truy vấn trên Presto. Hãy để chúng tôi xem qua các loại dữ liệu cơ bản được hỗ trợ Presto.

Các kiểu dữ liệu cơ bản

Bảng sau đây mô tả các kiểu dữ liệu cơ bản của Presto.

S.Không Kiểu dữ liệu & Mô tả
1.

VARCHAR

Dữ liệu ký tự có độ dài thay đổi

2.

BIGINT

Số nguyên có dấu 64 bit

3.

DOUBLE

Giá trị chính xác kép dấu chấm động 64 bit

4.

DECIMAL

Một số thập phân chính xác cố định. Ví dụ DECIMAL (10,3) - 10 là độ chính xác, tức là tổng số chữ số và 3 là giá trị tỷ lệ được biểu thị dưới dạng điểm phân số. Tỷ lệ là tùy chọn và giá trị mặc định là 0

5.

BOOLEAN

Boolean giá trị true và false

6.

VARBINARY

Dữ liệu nhị phân có độ dài thay đổi

7.

JSON

Dữ liệu JSON

số 8.

DATE

Kiểu dữ liệu ngày được biểu thị dưới dạng năm-tháng-ngày

9.

TIME, TIMESTAMP, TIMESTAMP with TIME ZONE

TIME - Thời gian trong ngày (giờ-phút-giây-mili giây)

TIMESTAMP - Ngày và giờ trong ngày

TIMESTAMP với TIME ZONE - Ngày và giờ trong ngày với múi giờ từ giá trị

10.

INTERVAL

Kéo dài hoặc mở rộng các loại dữ liệu ngày và giờ

11.

ARRAY

Mảng của kiểu thành phần đã cho. Ví dụ: ARRAY [5,7]

12.

MAP

Ánh xạ giữa các loại thành phần đã cho. Ví dụ: MAP (ARRAY ['một', 'hai'], ARRAY [5,7])

13.

ROW

Cấu trúc hàng được tạo thành từ các trường được đặt tên

Presto - Nhà khai thác

Các toán tử Presto được liệt kê trong bảng sau.

S.Không Nhà điều hành & Mô tả
1. Toán tử số học

Presto hỗ trợ các toán tử số học như +, -, *, /,%

2. Toán tử quan hệ

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

3. Toán tử logic

VÀ, HOẶC, KHÔNG

4. Toán tử phạm vi

Toán tử phạm vi được sử dụng để kiểm tra giá trị trong một phạm vi cụ thể. Presto hỗ trợ GIỮA, KHÔNG ĐỦ, KHÔNG ĐẦY ĐỦ, TUYỆT VỜI NHẤT và ÍT NHẤT

5. Toán tử thập phân

Toán tử thập phân số học nhị phân thực hiện phép toán số học nhị phân cho kiểu thập phân Toán tử thập phân số một - The - operator thực hiện phủ định

6. Toán tử chuỗi

Các ‘||’ operator thực hiện nối chuỗi

7. Toán tử ngày và giờ

Thực hiện các phép tính cộng và trừ số học trên các kiểu dữ liệu ngày và giờ

số 8. Toán tử mảng

Toán tử chỉ số con [] - truy cập một phần tử của một mảng

Toán tử nối || - nối một mảng với một mảng hoặc một phần tử cùng kiểu

9. Toán tử bản đồ

Toán tử chỉ số bản đồ [] - truy xuất giá trị tương ứng với một khóa nhất định từ bản đồ

Hiện tại, chúng tôi đang thảo luận về việc chạy một số truy vấn cơ bản đơn giản trên Presto. Chương này sẽ thảo luận về các hàm SQL quan trọng.

Các hàm toán học

Các hàm toán học hoạt động dựa trên các công thức toán học. Bảng sau mô tả chi tiết danh sách các chức năng.

Không. Mô tả chức năng
1. abs (x)

Trả về giá trị tuyệt đối của x

2. cbrt (x)

Trả về gốc khối lập phương của x

3. trần (x)

Trả về x giá trị làm tròn đến số nguyên gần nhất

4.

ceil(x)

Bí danh cho trần (x)

5. độ (x)

Trả về giá trị độ cho x

6. Ví dụ)

Trả về giá trị kép cho số của Euler

7.

exp(x)

Trả về giá trị lũy thừa cho số Euler

số 8. tầng (x)

Lợi nhuận x làm tròn xuống số nguyên gần nhất

9.

from_base(string,radix)

Trả về giá trị của chuỗi được hiểu là một số cơ số

10.

ln(x)

Trả về lôgarit tự nhiên của x

11. log2 (x)

Trả về logarit cơ số 2 của x

12.

log10(x)

Trả về lôgarit cơ số 10 của x

13.

log(x,y)

Trả về cơ sở y lôgarit của x

14. mod (n, m)

Trả về mô-đun (phần còn lại) của n chia m

15.

pi()

Trả về giá trị pi. Kết quả sẽ được trả về dưới dạng giá trị kép

16. lũy thừa (x, p)

Trả về sức mạnh của giá trị ‘p’ đến x giá trị

17.

pow(x,p)

Bí danh cho quyền lực (x, p)

18. radian (x)

chuyển đổi góc x theo độ radian

19.

rand()

Bí danh cho radian ()

20 ngẫu nhiên ()

Trả về giá trị giả ngẫu nhiên

21.

rand(n)

Bí danh cho ngẫu nhiên ()

22. vòng (x)

Trả về giá trị làm tròn cho x

23.

round(x,d)

x giá trị làm tròn cho ‘d’ vị trí thập phân

24.

sign(x)

Trả về hàm dấu hiệu của x, tức là,

0 nếu đối số là 0

1 nếu đối số lớn hơn 0

-1 nếu đối số nhỏ hơn 0

Đối với các đối số kép, hàm cũng trả về:

NaN nếu đối số là NaN

1 nếu đối số là + Vô cực

-1 nếu đối số là -Infinity

25. sqrt (x)

Trả về căn bậc hai của x

26. to_base (x, cơ số)

Loại trả lại là cung thủ. Kết quả được trả về làm cơ số chox

27. cắt ngắn (x)

Cắt bớt giá trị cho x

28. width_bucket (x, bind1, bind2, n)

Trả về số thùng của x giới hạn giới hạn nhất định 1 và giới hạn giới hạn2 và số nhóm n

29. width_bucket (x, thùng)

Trả về số thùng của x theo các thùng được chỉ định bởi các thùng mảng

Hàm lượng giác

Các đối số của hàm lượng giác được biểu diễn dưới dạng radian (). Bảng sau liệt kê các chức năng.

S.Không Chức năng & Mô tả
1. acos (x)

Trả về giá trị cosine nghịch đảo (x)

2.

asin(x)

Trả về giá trị sin nghịch đảo (x)

3.

atan(x)

Trả về giá trị tiếp tuyến nghịch đảo (x)

4. atan2 (y, x)

Trả về giá trị tiếp tuyến nghịch đảo (y / x)

5.

cos(x)

Trả về giá trị cosine (x)

6. cosh (x)

Trả về giá trị cosin hyperbol (x)

7. sin (x)

Trả về giá trị sin (x)

số 8.

tan(x)

Trả về giá trị tiếp tuyến (x)

9.

tanh(x)

Trả về giá trị tiếp tuyến hyperbol (x)

Chức năng Bitwise

Bảng sau liệt kê các chức năng Bitwise.

S.Không Chức năng & Mô tả
1. bit_count (x, bit)

Đếm số bit

2. bitwise_and (x, y)

Thực hiện thao tác bitwise AND cho hai bit, xy

3. bitwise_or (x, y)

Phép toán theo chiều bit OR giữa hai bit x, y

4. bitwise_not (x)

Bitwise Không hoạt động cho bit x

5. bitwise_xor (x, y)

Hoạt động XOR cho các bit x, y

Hàm chuỗi

Bảng sau liệt kê các hàm Chuỗi.

S.Không Chức năng & Mô tả
1. concat (string1, ..., stringN)

Nối các chuỗi đã cho

2. chiều dài (chuỗi)

Trả về độ dài của chuỗi đã cho

3. thấp hơn (chuỗi)

Trả về định dạng chữ thường cho chuỗi

4. trên (chuỗi)

Trả về định dạng chữ hoa cho chuỗi đã cho

5. lpad (chuỗi, kích thước, chuỗi đệm)

Phần đệm bên trái cho chuỗi đã cho

6. ltrim (chuỗi)

Loại bỏ khoảng trắng đầu chuỗi khỏi chuỗi

7. thay thế (chuỗi, tìm kiếm, thay thế)

Thay thế giá trị chuỗi

số 8. đảo ngược (chuỗi)

Đảo ngược hoạt động được thực hiện cho chuỗi

9. rpad (chuỗi, kích thước, chuỗi đệm)

Khoảng đệm bên phải cho chuỗi đã cho

10. rtrim (chuỗi)

Loại bỏ khoảng trắng ở cuối chuỗi khỏi chuỗi

11. tách (chuỗi, dấu phân cách)

Tách chuỗi trên dấu phân cách và trả về một mảng có kích thước ở giới hạn lớn nhất

12. split_part (chuỗi, dấu phân cách, chỉ mục)

Tách chuỗi trên dấu phân cách và trả về chỉ mục trường

13. strpos (chuỗi, chuỗi con)

Trả về vị trí bắt đầu của chuỗi con trong chuỗi

14. substr (chuỗi, bắt đầu)

Trả về chuỗi con cho chuỗi đã cho

15. substr (chuỗi, bắt đầu, độ dài)

Trả về chuỗi con cho chuỗi đã cho với độ dài cụ thể

16. trim (chuỗi)

Loại bỏ khoảng trắng ở đầu và cuối khỏi chuỗi

Chức năng ngày và giờ

Bảng sau liệt kê các chức năng Ngày và Giờ.

S.Không Chức năng & Mô tả
1. ngay hiện tại

Trả về ngày hiện tại

2. thời điểm hiện tại

Trả về thời gian hiện tại

3. Dấu thời gian hiện tại

Trả về dấu thời gian hiện tại

4. current_timezone ()

Trả về múi giờ hiện tại

5. hiện nay()

Trả về ngày hiện tại, dấu thời gian với múi giờ

6. giờ địa phương

Trả về giờ địa phương

7. dấu địa phương

Trả về dấu thời gian cục bộ

Hàm biểu thức chính quy

Bảng sau liệt kê các hàm Biểu thức chính quy.

S.Không Chức năng & Mô tả
1. regexp_extract_all (chuỗi, mẫu)

Trả về chuỗi được so khớp bởi biểu thức chính quy cho mẫu

2. regexp_extract_all (chuỗi, mẫu, nhóm)

Trả về chuỗi được so khớp bởi biểu thức chính quy cho mẫu và nhóm

3. regexp_extract (chuỗi, mẫu)

Trả về chuỗi con đầu tiên được so khớp bởi biểu thức chính quy cho mẫu

4. regexp_extract (chuỗi, mẫu, nhóm)

Trả về chuỗi con đầu tiên được so khớp bởi biểu thức chính quy cho mẫu và nhóm

5. regexp_like (chuỗi, mẫu)

Trả về các kết quả phù hợp với chuỗi cho mẫu. Nếu chuỗi được trả về, giá trị sẽ là true, ngược lại là false

6. regexp_replace (chuỗi, mẫu)

Thay thế phiên bản của chuỗi được so khớp cho biểu thức bằng mẫu

7. regexp_replace (chuỗi, mẫu, thay thế)

Thay thế phiên bản của chuỗi được so khớp cho biểu thức bằng mẫu và thay thế

số 8. regexp_split (chuỗi, mẫu)

Tách biểu thức chính quy cho mẫu đã cho

Các hàm JSON

Bảng sau liệt kê các hàm JSON.

S.Không Chức năng & Mô tả
1. json_array_contains (json, giá trị)

Kiểm tra giá trị tồn tại trong một mảng json. Nếu giá trị tồn tại, nó sẽ trả về true, ngược lại là false

2. json_array_get (json_array, chỉ mục)

Lấy phần tử cho chỉ mục trong mảng json

3. json_array_length (json)

Trả về độ dài trong mảng json

4. json_format (json)

Trả về định dạng cấu trúc json

5. json_parse (chuỗi)

Phân tích cú pháp chuỗi dưới dạng json

6. json_size (json, json_path)

Trả về kích thước của giá trị

Chức năng URL

Bảng sau đây liệt kê các chức năng URL.

S.Không Chức năng & Mô tả
1. url_extract_host (url)

Trả về máy chủ của URL

2. url_extract_path (url)

Trả về đường dẫn của URL

3. url_extract_port (url)

Trả về cổng của URL

4. url_extract_protocol (url)

Trả về giao thức của URL

5. url_extract_query (url)

Trả về chuỗi truy vấn của URL

Chức năng tổng hợp

Bảng sau liệt kê các hàm Aggregate.

S.Không Chức năng & Mô tả
1.

avg(x)

Trả về giá trị trung bình cho giá trị đã cho

2. tối thiểu (x, n)

Trả về giá trị nhỏ nhất từ ​​hai giá trị

3. tối đa (x, n)

Trả về giá trị lớn nhất từ ​​hai giá trị

4. sum (x)

Trả về tổng giá trị

5. đếm(*)

Trả về số hàng đầu vào

6. đếm (x)

Trả về số lượng giá trị đầu vào

7. tổng kiểm tra (x)

Trả về tổng kiểm tra cho x

số 8. tùy ý (x)

Trả về giá trị tùy ý cho x

Chức năng màu

Bảng sau liệt kê các chức năng Màu.

S.Không Chức năng & Mô tả
1. thanh (x, chiều rộng)

Hiển thị một thanh đơn bằng cách sử dụng rgb low_color và high_color

2. thanh (x, width, low_color, high_color)

Hiển thị một thanh đơn cho chiều rộng được chỉ định

3. màu (chuỗi)

Trả về giá trị màu cho chuỗi đã nhập

4. kết xuất (x, màu)

Hiển thị giá trị x bằng màu cụ thể bằng mã màu ANSI

5. kết xuất (b)

Chấp nhận giá trị boolean b và hiển thị màu xanh lá cây đúng hoặc màu đỏ sai bằng cách sử dụng mã màu ANSI

6.

rgb(red, green, blue)

Trả về giá trị màu ghi lại giá trị RGB của ba giá trị màu thành phần được cung cấp dưới dạng tham số int từ 0 đến 255

Array Functions

The following table lists out the Array functions.

S.No Functions & Description
1. array_max(x)

Finds the max element in an array

2. array_min(x)

Finds the min element in an array

3. array_sort(x)

Sorts the elements in an array

4. array_remove(x,element)

Removes the specific element from an array

5. concat(x,y)

Concatenates two arrays

6. contains(x,element)

Finds the given elements in an array. True will be returned if it is present, otherwise false

7. array_position(x,element)

Find the position of the given element in an array

8. array_intersect(x,y)

Performs an intersection between two arrays

9. element_at(array,index)

Returns the array element position

10. slice(x,start,length)

Slices the array elements with the specific length

Teradata Functions

The following table lists out Teradata functions.

S.No Functions & Description
1. index(string,substring)

Returns the index of the string with the given substring

2. substring(string,start)

Returns the substring of the given string. You can specify the start index here

3. substring(string,start,length)

Returns the substring of the given string for the specific start index and length of the string

The MySQL connector is used to query an external MySQL database.

Prerequisites

MySQL server installation.

Configuration Settings

Hopefully you have installed mysql server on your machine. To enable mysql properties on Presto server, you must create a file “mysql.properties” in “etc/catalog” directory. Issue the following command to create a mysql.properties file.

$ cd etc $ cd catalog 
$ vi mysql.properties   

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

Save the file and quit the terminal. In the above file, you must enter your mysql password in connection-password field.

Create Database in MySQL Server

Open MySQL server and create a database using the following command.

create database tutorials

Now you have created “tutorials” database in the server. To enable database type, use the command “use tutorials” in the query window.

Create Table

Let’s create a simple table on “tutorials” database.

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

Insert Table

After creating a table, insert three records using the following query.

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

Select Records

To retrieve all the records, type the following query.

Query

select * from author

Result

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

As of now, you have queried data using MySQL server. Let’s connect Mysql storage plugin to Presto server.

Connect Presto CLI

Type the following command to connect MySql plugin on Presto CLI.

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

You will receive the following response.

presto:tutorials>

Here “tutorials” refers to schema in mysql server.

List Schemas

To list out all the schemas in mysql, type the following query in Presto server.

Query

presto:tutorials> show schemas from mysql;

Result

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

From this result, we can conclude the first three schemas as predefined and the last one as created by yourself.

List Tables from Schema

Following query lists out all the tables in tutorials schema.

Query

presto:tutorials> show tables from mysql.tutorials;

Result

Table 
-------- 
 author

We have created only one table in this schema. If you have created multiple tables, it will list out all the tables.

Describe Table

To describe the table fields, type the following query.

Query

presto:tutorials> describe mysql.tutorials.author;

Result

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

Show Columns from Table

Query

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

Result

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

Access Table Records

To fetch all the records from mysql table, issue the following query.

Query

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

Result

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

From this result, you can retrieve mysql server records in Presto.

Create Table Using as Command

Mysql connector doesn’t support create table query but you can create a table using as command.

Query

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

Result

CREATE TABLE: 3 rows

You can’t insert rows directly because this connector has some limitations. It cannot support the following queries −

  • create
  • insert
  • update
  • delete
  • drop

To view the records in the newly created table, type the following query.

Query

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

Result

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

Java Management Extensions (JMX) gives information about the Java Virtual Machine and software running inside JVM. The JMX connector is used to query JMX information in Presto server.

As we have already enabled “jmx.properties” file under “etc/catalog” directory. Now connect Prest CLI to enable JMX plugin.

Presto CLI

Query

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

Result

You will receive the following response.

presto:jmx>

JMX Schema

To list out all the schemas in “jmx”, type the following query.

Query

presto:jmx> show schemas from jmx;

Result

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

Show Tables

To view the tables in the “current” schema, use the following command.

Query 1

presto:jmx> show tables from jmx.current;

Result

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

Query 2

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

Result

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

Query 3

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

Result

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

The Hive connector allows querying data stored in a Hive data warehouse.

Prerequisites

  • Hadoop
  • Hive

Hopefully you have installed Hadoop and Hive on your machine. Start all the services one by one in the new terminal. Then, start hive metastore using the following command,

hive --service metastore

Presto uses Hive metastore service to get the hive table’s details.

Configuration Settings

Create a file “hive.properties” under “etc/catalog” directory. Use the following command.

$ cd etc $ cd catalog 
$ vi hive.properties  

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

After making all the changes, save the file and quit the terminal.

Create Database

Create a database in Hive using the following query −

Query

hive> CREATE SCHEMA tutorials;

After the database is created, you can verify it using the “show databases” command.

Create Table

Create Table is a statement used to create a table in Hive. For example, use the following query.

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

Insert Table

Following query is used to insert records in hive’s table.

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

Start Presto CLI

You can start Presto CLI to connect Hive storage plugin using the following command.

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

You will receive the following response.

presto:tutorials >

List Schemas

To list out all the schemas in Hive connector, type the following command.

Query

presto:tutorials > show schemas from hive;

Result

default  

tutorials

List Tables

To list out all the tables in “tutorials” schema, use the following query.

Query

presto:tutorials > show tables from hive.tutorials;

Result

author

Fetch Table

Following query is used to fetch all the records from hive’s table.

Query

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

Result

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

The Kafka Connector for Presto allows to access data from Apache Kafka using Presto.

Prerequisites

Download and install the latest version of the following Apache projects.

  • Apache ZooKeeper
  • Apache Kafka

Start ZooKeeper

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

Kết quả

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

Giờ đây, khách hàng, đơn đặt hàng, nhà cung cấp, v.v. của Kafka được tải bằng tpch.

Thêm cài đặt cấu hình

Hãy thêm cài đặt cấu hình trình kết nối Kafka sau trên máy chủ 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

Trong cấu hình trên, các bảng Kafka được tải bằng chương trình Kafka-tpch.

Bắt đầu Presto CLI

Khởi động Presto CLI bằng lệnh sau,

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

Đây “tpch" là một lược đồ cho trình kết nối Kafka và bạn sẽ nhận được phản hồi như sau.

presto:tpch>

Bảng liệt kê

Truy vấn sau liệt kê tất cả các bảng trong “tpch” lược đồ.

Truy vấn

presto:tpch> show tables;

Kết quả

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

Mô tả bảng khách hàng

Truy vấn sau đây mô tả “customer” bàn.

Truy vấn

presto:tpch> describe customer;

Kết quả

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

Giao diện JDBC của Presto được sử dụng để truy cập ứng dụng Java.

Điều kiện tiên quyết

Cài đặt presto-jdbc-0.150.jar

Bạn có thể tải xuống tệp jar JDBC bằng cách truy cập liên kết sau,

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

Sau khi tệp jar được tải xuống, hãy thêm tệp đó vào đường dẫn lớp của ứng dụng Java của bạn.

Tạo một ứng dụng đơn giản

Hãy tạo một ứng dụng java đơn giản bằng giao diện JDBC.

Mã hóa - 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(); 
      } 
   } 
}

Lưu tệp và thoát khỏi ứng dụng. Bây giờ, khởi động máy chủ Presto trong một thiết bị đầu cuối và mở một thiết bị đầu cuối mới để biên dịch và thực thi kết quả. Sau đây là các bước -

Tổng hợp

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

Chấp hành

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

Đầu ra

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

Tạo một dự án Maven để phát triển chức năng tùy chỉnh Presto.

SimpleFunctionsFactory.java

Tạo lớp SimpleFunctionsFactory để triển khai giao diện 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

Tạo một lớp SimpleFunctionsPlugin để triển khai giao diện 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(); 
   } 
}

Thêm tệp tài nguyên

Tạo một tệp tài nguyên được chỉ định trong gói triển khai.

(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)

Bây giờ di chuyển đến vị trí tệp tài nguyên @ / path / to / resource /

Sau đó, thêm các thay đổi,

com.facebook.presto.spi.Plugin

pom.xml

Thêm các phần phụ thuộc sau vào tệp 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

Tạo lớp SimpleFunctions sử dụng thuộc tính 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; 
   } 
}

Sau khi ứng dụng được tạo, hãy biên dịch và thực thi ứng dụng. Nó sẽ tạo ra tệp JAR. Sao chép tệp và di chuyển tệp JAR vào thư mục plugin máy chủ Presto đích.

Tổng hợp

mvn compile

Chấp hành

mvn package

Bây giờ khởi động lại máy chủ Presto và kết nối máy khách Presto. Sau đó thực thi ứng dụng chức năng tùy chỉnh như được giải thích bên dưới,

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

Truy vấn

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

Kết quả

_col0  
------- 
  20