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, x và y |
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