Apache Tajo - Hướng dẫn nhanh
Hệ thống kho dữ liệu phân tán
Kho dữ liệu là một cơ sở dữ liệu quan hệ được thiết kế để truy vấn và phân tích hơn là để xử lý giao dịch. Đây là một bộ sưu tập dữ liệu theo định hướng chủ đề, tích hợp, biến thể theo thời gian và không thay đổi. Dữ liệu này giúp các nhà phân tích đưa ra các quyết định sáng suốt trong một tổ chức nhưng khối lượng dữ liệu quan hệ được tăng lên từng ngày.
Để vượt qua những thách thức, hệ thống kho dữ liệu phân tán chia sẻ dữ liệu trên nhiều kho dữ liệu cho mục đích Xử lý Phân tích Trực tuyến (OLAP). Mỗi kho dữ liệu có thể thuộc về một hoặc nhiều tổ chức. Nó thực hiện cân bằng tải và khả năng mở rộng. Siêu dữ liệu được sao chép và phân phối tập trung.
Apache Tajo là một hệ thống kho dữ liệu phân tán sử dụng Hệ thống tệp phân tán Hadoop (HDFS) làm lớp lưu trữ và có công cụ thực thi truy vấn riêng thay vì khung MapReduce.
Tổng quan về SQL trên Hadoop
Hadoop là một khung công tác mã nguồn mở cho phép lưu trữ và xử lý dữ liệu lớn trong một môi trường phân tán. Nó cực kỳ nhanh và mạnh mẽ. Tuy nhiên, Hadoop có khả năng truy vấn hạn chế nên hiệu suất của nó có thể được cải thiện tốt hơn nữa với sự trợ giúp của SQL trên Hadoop. Điều này cho phép người dùng tương tác với Hadoop thông qua các lệnh SQL dễ dàng.
Một số ví dụ về ứng dụng SQL trên Hadoop là Hive, Impala, Drill, Presto, Spark, HAWQ và Apache Tajo.
Apache Tajo là gì
Apache Tajo là một khung xử lý dữ liệu quan hệ và phân tán. Nó được thiết kế để có độ trễ thấp và phân tích truy vấn đặc biệt có thể mở rộng.
Tajo hỗ trợ SQL tiêu chuẩn và các định dạng dữ liệu khác nhau. Hầu hết các truy vấn Tajo có thể được thực hiện mà không cần sửa đổi.
Tajo có fault-tolerance thông qua cơ chế khởi động lại cho các tác vụ không thành công và công cụ ghi lại truy vấn có thể mở rộng.
Tajo thực hiện những điều cần thiết ETL (Extract Transform and Load process)hoạt động để tóm tắt các tập dữ liệu lớn được lưu trữ trên HDFS. Nó là một lựa chọn thay thế cho Hive / Pig.
Phiên bản mới nhất của Tajo có khả năng kết nối cao hơn với các chương trình Java và cơ sở dữ liệu của bên thứ ba như Oracle và PostGreSQL.
Đặc điểm của Apache Tajo
Apache Tajo có các tính năng sau:
- Khả năng mở rộng vượt trội và hiệu suất tối ưu hóa
- Độ trễ thấp
- Các chức năng do người dùng xác định
- Khung xử lý lưu trữ hàng / cột.
- Khả năng tương thích với HiveQL và Hive MetaStore
- Luồng dữ liệu đơn giản và bảo trì dễ dàng.
Lợi ích của Apache Tajo
Apache Tajo mang lại những lợi ích sau:
- Dễ sử dụng
- Kiến trúc đơn giản
- Tối ưu hóa truy vấn dựa trên chi phí
- Kế hoạch thực thi truy vấn được vector hóa
- Chuyển phát nhanh
- Cơ chế I / O đơn giản và hỗ trợ nhiều loại lưu trữ.
- Khả năng chịu lỗi
Các trường hợp sử dụng của Apache Tajo
Sau đây là một số trường hợp sử dụng của Apache Tajo:
Lưu trữ và phân tích dữ liệu
Công ty SK Telecom của Hàn Quốc đã chạy Tajo dựa trên dữ liệu trị giá 1,7 terabyte và nhận thấy nó có thể hoàn thành các truy vấn với tốc độ cao hơn cả Hive hoặc Impala.
Khám phá dữ liệu
Dịch vụ phát trực tuyến nhạc Hàn Quốc Melon sử dụng Tajo để xử lý phân tích. Tajo thực hiện các công việc ETL (giải nén-chuyển đổi-tải) nhanh hơn từ 1,5 đến 10 lần so với Hive.
Phân tích nhật ký
Bluehole Studio, một công ty có trụ sở tại Hàn Quốc đã phát triển TERA - một trò chơi trực tuyến nhiều người chơi giả tưởng. Công ty sử dụng Tajo để phân tích nhật ký trò chơi và tìm ra nguyên nhân chính gây ra gián đoạn chất lượng dịch vụ.
Định dạng dữ liệu và lưu trữ
Apache Tajo hỗ trợ các định dạng dữ liệu sau:
- JSON
- Tệp văn bản (CSV)
- Parquet
- Tệp trình tự
- AVRO
- Bộ đệm giao thức
- Apache Orc
Tajo hỗ trợ các định dạng lưu trữ sau:
- HDFS
- JDBC
- Amazon S3
- Apache HBase
- Elasticsearch
Hình minh họa sau đây mô tả kiến trúc của Apache Tajo.
Bảng sau đây mô tả chi tiết từng thành phần.
Không. | Thành phần & Mô tả |
---|---|
1 | Client Client gửi câu lệnh SQL cho Tajo Master để nhận kết quả. |
2 | Master Master là daemon chính. Nó chịu trách nhiệm lập kế hoạch truy vấn và là người điều phối cho người lao động. |
3 | Catalog server Duy trì các mô tả bảng và chỉ mục. Nó được nhúng trong daemon Master. Máy chủ danh mục sử dụng Apache Derby làm lớp lưu trữ và kết nối qua máy khách JDBC. |
4 | Worker Nút chính giao nhiệm vụ cho các nút công nhân. TajoWorker xử lý dữ liệu. Khi số lượng TajoWorker tăng lên, khả năng xử lý cũng tăng tuyến tính. |
5 | Query Master Tajo master gán truy vấn cho Query Master. Query Master chịu trách nhiệm kiểm soát một kế hoạch thực thi phân tán. Nó khởi chạy TaskRunner và lên lịch các tác vụ cho TaskRunner. Vai trò chính của Query Master là giám sát các tác vụ đang chạy và báo cáo chúng cho nút Master. |
6 | Node Managers Quản lý tài nguyên của nút công nhân. Nó quyết định việc phân bổ các yêu cầu tới nút. |
7 | TaskRunner Hoạt động như một công cụ thực thi truy vấn cục bộ. Nó được sử dụng để chạy và giám sát quá trình truy vấn. TaskRunner xử lý từng tác vụ một. Nó có ba thuộc tính chính sau:
|
số 8 | Query Executor Nó được sử dụng để thực hiện một truy vấn. |
9 | Storage service Kết nối bộ lưu trữ dữ liệu cơ bản với Tajo. |
Quy trình làm việc
Tajo sử dụng Hệ thống tệp phân tán Hadoop (HDFS) làm lớp lưu trữ và có công cụ thực thi truy vấn riêng thay vì khung MapReduce. Một cụm Tajo bao gồm một nút chính và một số nhân công trên các nút cụm.
Người chủ chịu trách nhiệm chính về việc lập kế hoạch truy vấn và người điều phối cho người lao động. Master chia một truy vấn thành các nhiệm vụ nhỏ và giao cho các worker. Mỗi công nhân có một công cụ truy vấn cục bộ thực thi một đồ thị xoay chiều có hướng của các toán tử vật lý.
Ngoài ra, Tajo có thể kiểm soát luồng dữ liệu phân tán linh hoạt hơn so với MapReduce và hỗ trợ kỹ thuật lập chỉ mục.
Giao diện dựa trên web của Tajo có các khả năng sau:
- Tùy chọn để tìm cách lập kế hoạch cho các truy vấn đã gửi
- Tùy chọn để tìm cách phân phối các truy vấn trên các nút
- Tùy chọn để kiểm tra trạng thái của cụm và các nút
Để cài đặt Apache Tajo, bạn phải có phần mềm sau trên hệ thống của mình:
- Hadoop phiên bản 2.3 trở lên
- Java phiên bản 1.7 trở lên
- Linux hoặc Mac OS
Bây giờ chúng ta hãy tiếp tục với các bước sau để cài đặt Tajo.
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. Bây giờ, bạn chỉ cần tiếp tục bằng cách xác minh nó.
Để xác minh, hãy 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 hiện tại đã được cài đặt. Nếu Java chưa được cài đặt, hãy làm theo các bước sau để 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 và sau đó, tải xuống phiên bản mới nhất.
https://www.oracle.com
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 chúng vào một thư mục cụ thể. Bây giờ, hãy đặt các lựa chọn thay thế Java. Cuối cùng, Java đã được cài đặt trên máy của bạn.
Xác minh cài đặt Hadoop
Bạn đã cài đặt Hadooptrên hệ thống của bạn. Bây giờ, hãy xác minh nó bằng lệnh sau:
$ hadoop version
Nếu mọi thứ đều ổn với thiết lập của bạn, thì bạn có thể thấy phiên bản của Hadoop. Nếu Hadoop chưa được cài đặt, hãy tải xuống và cài đặt Hadoop bằng cách truy cập liên kết sau:https://www.apache.org
Cài đặt Apache Tajo
Apache Tajo cung cấp hai chế độ thực thi - chế độ cục bộ và chế độ phân tán hoàn toàn. Sau khi xác minh cài đặt Java và Hadoop, hãy tiến hành các bước sau để cài đặt cụm Tajo trên máy của bạn. Một phiên bản Tajo ở chế độ cục bộ yêu cầu cấu hình rất dễ dàng.
Tải xuống phiên bản mới nhất của Tajo bằng cách truy cập liên kết sau: https://www.apache.org/dyn/closer.cgi/tajo
Bây giờ bạn có thể tải xuống tệp “tajo-0.11.3.tar.gz” từ máy của bạn.
Giải nén tệp Tar
Giải nén tệp tar bằng cách sử dụng lệnh sau:
$ cd opt/ $ tar tajo-0.11.3.tar.gz
$ cd tajo-0.11.3
Đặt biến môi trường
Thêm các thay đổi sau vào “conf/tajo-env.sh” tập tin
$ cd tajo-0.11.3
$ vi conf/tajo-env.sh
# Hadoop home. Required
export HADOOP_HOME = /Users/path/to/Hadoop/hadoop-2.6.2
# The java implementation to use. Required.
export JAVA_HOME = /path/to/jdk1.8.0_92.jdk/
Ở đây, bạn phải chỉ định đường dẫn Hadoop và Java đến “tajo-env.sh”tập tin. Sau khi các thay đổi được thực hiện, hãy lưu tệp và thoát khỏi thiết bị đầu cuối.
Khởi động máy chủ Tajo
Để khởi chạy máy chủ Tajo, hãy thực hiện lệnh sau:
$ bin/start-tajo.sh
Bạn sẽ nhận được phản hồi tương tự như sau:
Starting single TajoMaster
starting master, logging to /Users/path/to/Tajo/tajo-0.11.3/bin/../
localhost: starting worker, logging to /Users/path/toe/Tajo/tajo-0.11.3/bin/../logs/
Tajo master web UI: http://local:26080
Tajo Client Service: local:26002
Bây giờ, gõ lệnh “jps” để xem các trình duyệt đang chạy.
$ jps
1010 TajoWorker
1140 Jps
933 TajoMaster
Khởi chạy Tajo Shell (Tsql)
Để khởi chạy ứng dụng khách Tajo shell, hãy sử dụng lệnh sau:
$ bin/tsql
Bạn sẽ nhận được kết quả sau:
welcome to
_____ ___ _____ ___
/_ _/ _ |/_ _/ /
/ // /_| |_/ // / /
/_//_/ /_/___/ \__/ 0.11.3
Try \? for help.
Thoát vỏ Tajo
Thực hiện lệnh sau để thoát khỏi Tsql -
default> \q
bye!
Ở đây, mặc định đề cập đến danh mục trong Tajo.
Giao diện người dùng web
Nhập URL sau để khởi chạy giao diện người dùng web Tajo - http://localhost:26080/
Bây giờ bạn sẽ thấy màn hình sau tương tự như tùy chọn ExecuteQuery.
Dừng Tajo
Để dừng máy chủ Tajo, hãy sử dụng lệnh sau:
$ bin/stop-tajo.sh
Bạn sẽ nhận được phản hồi sau:
localhost: stopping worker
stopping master
Cấu hình của Tajo dựa trên hệ thống cấu hình của Hadoop. Chương này giải thích chi tiết về cài đặt cấu hình Tajo.
Cài đặt cơ bản
Tajo sử dụng hai tệp cấu hình sau:
- catalog-site.xml - cấu hình cho máy chủ danh mục.
- tajo-site.xml - cấu hình cho các mô-đun Tajo khác.
Cấu hình chế độ phân tán
Thiết lập chế độ phân tán chạy trên Hệ thống tệp phân tán Hadoop (HDFS). Hãy làm theo các bước để cấu hình thiết lập chế độ phân tán Tajo.
tajo-site.xml
Tệp này có sẵn @ /path/to/tajo/confthư mục và hoạt động như cấu hình cho các mô-đun Tajo khác. Để truy cập Tajo ở chế độ phân tán, hãy áp dụng các thay đổi sau đối với“tajo-site.xml”.
<property>
<name>tajo.rootdir</name>
<value>hdfs://hostname:port/tajo</value>
</property>
<property>
<name>tajo.master.umbilical-rpc.address</name>
<value>hostname:26001</value>
</property>
<property>
<name>tajo.master.client-rpc.address</name>
<value>hostname:26002</value>
</property>
<property>
<name>tajo.catalog.client-rpc.address</name>
<value>hostname:26005</value>
</property>
Cấu hình nút chính
Tajo sử dụng HDFS làm loại lưu trữ chính. Cấu hình như sau và sẽ được thêm vào“tajo-site.xml”.
<property>
<name>tajo.rootdir</name>
<value>hdfs://namenode_hostname:port/path</value>
</property>
Cấu hình danh mục
Nếu bạn muốn tùy chỉnh dịch vụ danh mục, hãy sao chép $path/to/Tajo/conf/catalogsite.xml.template đến $path/to/Tajo/conf/catalog-site.xml và thêm bất kỳ cấu hình nào sau đây nếu cần.
Ví dụ, nếu bạn sử dụng “Hive catalog store” để truy cập Tajo, thì cấu hình phải như sau:
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.HCatalogStore</value>
</property>
Nếu bạn cần lưu trữ MySQL danh mục, sau đó áp dụng các thay đổi sau:
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.MySQLStore</value>
</property>
<property>
<name>tajo.catalog.jdbc.connection.id</name>
<value><mysql user name></value>
</property>
<property>
<name>tajo.catalog.jdbc.connection.password</name>
<value><mysql user password></value>
</property>
<property>
<name>tajo.catalog.jdbc.uri</name>
<value>jdbc:mysql://<mysql host name>:<mysql port>/<database name for tajo>
?createDatabaseIfNotExist = true</value>
</property>
Tương tự, bạn có thể đăng ký các danh mục hỗ trợ Tajo khác trong tệp cấu hình.
Cấu hình công nhân
Theo mặc định, TajoWorker lưu trữ dữ liệu tạm thời trên hệ thống tệp cục bộ. Nó được định nghĩa trong tệp “tajo-site.xml” như sau:
<property>
<name>tajo.worker.tmpdir.locations</name>
<value>/disk1/tmpdir,/disk2/tmpdir,/disk3/tmpdir</value>
</property>
Để tăng khả năng chạy các tác vụ của từng tài nguyên công nhân, hãy chọn cấu hình sau:
<property>
<name>tajo.worker.resource.cpu-cores</name>
<value>12</value>
</property>
<property>
<name>tajo.task.resource.min.memory-mb</name>
<value>2000</value>
</property>
<property>
<name>tajo.worker.resource.disks</name>
<value>4</value>
</property>
Để làm cho công nhân Tajo chạy ở chế độ chuyên dụng, hãy chọn cấu hình sau:
<property>
<name>tajo.worker.resource.dedicated</name>
<value>true</value>
</property>
Trong chương này, chúng ta sẽ hiểu chi tiết các lệnh của Tajo Shell.
Để thực hiện các lệnh của Tajo shell, bạn cần khởi động máy chủ Tajo và Tajo shell bằng các lệnh sau:
Khởi động máy chủ
$ bin/start-tajo.sh
Khởi động Shell
$ bin/tsql
Các lệnh trên đã sẵn sàng để thực thi.
Lệnh Meta
Bây giờ chúng ta hãy thảo luận về Meta Commands. Các lệnh meta Tsql bắt đầu bằng dấu gạch chéo ngược(‘\’).
Lệnh trợ giúp
“\?” Lệnh được sử dụng để hiển thị tùy chọn trợ giúp.
Query
default> \?
Result
Trên \?Lệnh liệt kê tất cả các tùy chọn sử dụng cơ bản trong Tajo. Bạn sẽ nhận được kết quả sau:
Cơ sở dữ liệu danh sách
Để liệt kê tất cả các cơ sở dữ liệu trong Tajo, hãy sử dụng lệnh sau:
Query
default> \l
Result
Bạn sẽ nhận được kết quả sau:
information_schema
default
Hiện tại, chúng tôi chưa tạo bất kỳ cơ sở dữ liệu nào nên nó hiển thị hai cơ sở dữ liệu được xây dựng trong Tajo.
Cơ sở dữ liệu hiện tại
\c tùy chọn được sử dụng để hiển thị tên cơ sở dữ liệu hiện tại.
Query
default> \c
Result
Bây giờ bạn được kết nối với cơ sở dữ liệu "mặc định" là "tên người dùng" của người dùng.
Liệt kê các chức năng tích hợp
Để liệt kê tất cả hàm tích hợp, hãy nhập truy vấn như sau:
Query
default> \df
Result
Bạn sẽ nhận được kết quả sau:
Mô tả chức năng
\df function name - Truy vấn này trả về mô tả đầy đủ của hàm đã cho.
Query
default> \df sqrt
Result
Bạn sẽ nhận được kết quả sau:
Quit Terminal
Để thoát khỏi thiết bị đầu cuối, hãy nhập truy vấn sau:
Query
default> \q
Result
Bạn sẽ nhận được kết quả sau:
bye!
Lệnh quản trị
Tajo shell cung cấp \admin tùy chọn để liệt kê tất cả các tính năng quản trị.
Query
default> \admin
Result
Bạn sẽ nhận được kết quả sau:
Thông tin cụm
Để hiển thị thông tin cụm trong Tajo, hãy sử dụng truy vấn sau
Query
default> \admin -cluster
Result
Bạn sẽ nhận được kết quả sau:
Hiển thị chủ
Truy vấn sau đây hiển thị thông tin chính hiện tại.
Query
default> \admin -showmasters
Result
localhost
Tương tự, bạn có thể thử các lệnh quản trị khác.
Các biến phiên
Máy khách Tajo kết nối với Master thông qua một id phiên duy nhất. Phiên hoạt động cho đến khi máy khách bị ngắt kết nối hoặc hết hạn.
Lệnh sau được sử dụng để liệt kê tất cả các biến phiên.
Query
default> \set
Result
'SESSION_LAST_ACCESS_TIME' = '1470206387146'
'CURRENT_DATABASE' = 'default'
‘USERNAME’ = 'user'
'SESSION_ID' = 'c60c9b20-dfba-404a-822f-182bc95d6c7c'
'TIMEZONE' = 'Asia/Kolkata'
'FETCH_ROWNUM' = '200'
‘COMPRESSED_RESULT_TRANSFER' = 'false'
Các \set key val sẽ đặt biến phiên có tên key với giá trị val. Ví dụ,
Query
default> \set ‘current_database’='default'
Result
usage: \set [[NAME] VALUE]
Tại đây, bạn có thể gán khóa và giá trị trong \setchỉ huy. Nếu bạn cần hoàn nguyên các thay đổi, hãy sử dụng\unset chỉ huy.
Để thực hiện một truy vấn trong Tajo shell, hãy mở terminal của bạn và di chuyển đến thư mục đã cài đặt Tajo, sau đó gõ lệnh sau:
$ bin/tsql
Bây giờ bạn sẽ thấy phản hồi như được hiển thị trong chương trình sau:
default>
Bây giờ bạn có thể thực hiện các truy vấn của mình. Nếu không, bạn có thể chạy các truy vấn của mình thông qua ứng dụng bảng điều khiển web tới URL sau:http://localhost:26080/
Các kiểu dữ liệu ban đầu
Apache Tajo hỗ trợ danh sách các kiểu dữ liệu nguyên thủy sau:
Không. | Kiểu dữ liệu & Mô tả |
---|---|
1 | integer Được sử dụng để lưu trữ giá trị số nguyên với bộ nhớ 4 byte. |
2 | tinyint Giá trị số nguyên nhỏ là 1 byte |
3 | smallint Được sử dụng để lưu trữ giá trị số nguyên kích thước nhỏ 2 byte. |
4 | bigint Giá trị số nguyên phạm vi lớn có 8 byte lưu trữ. |
5 | boolean Trả về true / false. |
6 | real Được sử dụng để lưu trữ giá trị thực. Kích thước là 4 byte. |
7 | float Giá trị chính xác dấu chấm động có không gian lưu trữ 4 hoặc 8 byte. |
số 8 | double Giá trị chính xác điểm kép được lưu trữ trong 8 byte. |
9 | char[(n)] Giá trị ký tự. |
10 | varchar[(n)] Dữ liệu không phải Unicode có độ dài thay đổi. |
11 | number Giá trị thập phân. |
12 | binary Giá trị nhị phân. |
13 | date Lịch ngày (năm, tháng, ngày). Example - DATE '2016-08-22' |
14 | time Thời gian trong ngày (giờ, phút, giây, mili giây) không có múi giờ. Các giá trị thuộc loại này được phân tích cú pháp và hiển thị trong múi giờ của phiên. |
15 | timezone Thời gian trong ngày (giờ, phút, giây, mili giây) với một múi giờ. Các giá trị thuộc loại này được hiển thị bằng cách sử dụng múi giờ từ giá trị. Example - TIME '01: 02: 03.456 Châu Á / kolkata' |
16 | timestamp Thời gian tức thì bao gồm ngày và giờ trong ngày mà không có múi giờ. Example - TIMESTAMP '2016-08-22 03: 04: 05.321' |
17 | text Văn bản Unicode có độ dài thay đổi. |
Các toán tử sau đây được sử dụng trong Tajo để thực hiện các thao tác mong muốn.
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ử chuỗi Dấu '||' toán tử thực hiện nối chuỗi. |
5 | 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ể. Tajo hỗ trợ toán tử GIỮA, KHÔNG ĐỦ, KHÔNG ĐỦ. |
Hiện tại, bạn đã biết về việc chạy các truy vấn cơ bản đơn giản trên Tajo. Trong vài chương tiếp theo, chúng ta sẽ thảo luận về các hàm SQL sau:
- Các hàm toán học
- Hàm chuỗi
- Các hàm DateTime
- Các hàm JSON
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 đây 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ề căn bậc hai của x. |
3 | ceil (x) Trả về giá trị x được làm tròn đến số nguyên gần nhất. |
4 | tầng (x) Trả về x làm tròn xuống số nguyên gần nhất. |
5 | số Pi() Trả về giá trị pi. Kết quả sẽ được trả về dưới dạng giá trị kép. |
6 | radian (x) chuyển đổi góc x tính bằng radian độ. |
7 | độ (x) Trả về giá trị độ cho x. |
số 8 | pow (x, p) Trả về lũy thừa của value'p 'cho giá trị x. |
9 | div (x, y) Trả về kết quả phép chia cho hai giá trị nguyên x, y đã cho. |
10 | exp (x) Trả về số của Euler e nâng lên thành lũy thừa của một số. |
11 | sqrt (x) Trả về căn bậc hai của x. |
12 | dấu (x) Trả về hàm dấu hiệu của x, nghĩa là -
|
13 | mod (n, m) Trả về môđun (phần dư) của n chia cho m. |
14 | vòng (x) Trả về giá trị làm tròn cho x. |
15 | cos (x) Trả về giá trị cosine (x). |
16 | asin(x) Returns the inverse sine value(x). |
17 | acos(x) Returns the inverse cosine value(x). |
18 | atan(x) Returns the inverse tangent value(x). |
19 | atan2(y,x) Returns the inverse tangent value(y/x). |
Data Type Functions
The following table lists out the data type functions available in Apache Tajo.
S.No. | Function & Description |
---|---|
1 | to_bin(x) Returns the binary representation of integer. |
2 | to_char(int,text) Converts integer to string. |
3 | to_hex(x) Converts the x value into hexadecimal. |
The following table lists out the string functions in Tajo.
S.No. | Function & Description |
---|---|
1 | concat(string1, ..., stringN) Concatenate the given strings. |
2 | length(string) Returns the length of the given string. |
3 | lower(string) Returns the lowercase format for the string. |
4 | upper(string) Returns the uppercase format for the given string. |
5 | ascii(string text) Returns the ASCII code of the first character of the text. |
6 | bit_length(string text) Returns the number of bits in a string. |
7 | char_length(string text) Returns the number of characters in a string. |
8 | octet_length(string text) Returns the number of bytes in a string. |
9 | digest(input text, method text) Calculates the Digest hash of string. Here, the second arg method refers to the hash method. |
10 | initcap(string text) Converts the first letter of each word to upper case. |
11 | md5(string text) Calculates the MD5 hash of string. |
12 | left(string text, int size) Returns the first n characters in the string. |
13 | right(string text, int size) Returns the last n characters in the string. |
14 | locate(source text, target text, start_index) Returns the location of specified substring. |
15 | strposb(source text, target text) Returns the binary location of specified substring. |
16 | substr(source text, start index, length) Returns the substring for the specified length. |
17 | trim(string text[, characters text]) Removes the characters (a space by default) from the start/end/both ends of the string. |
18 | split_part(string text, delimiter text, field int) Splits a string on delimiter and returns the given field (counting from one). |
19 | regexp_replace(string text, pattern text, replacement text) Replaces substrings matched to a given regular expression pattern. |
20 | reverse(string) Reverse operation performed for the string. |
Apache Tajo supports the following DateTime functions.
S.No. | Function & Description |
---|---|
1 | add_days(date date or timestamp, int day Returns date added by the given day value. |
2 | add_months(date date or timestamp, int month) Returns date added by the given month value. |
3 | current_date() Returns today’s date. |
4 | current_time() Returns today’s time. |
5 | extract(century from date/timestamp) Extracts century from the given parameter. |
6 | extract(day from date/timestamp) Extracts day from the given parameter. |
7 | extract(decade from date/timestamp) Extracts decade from the given parameter. |
8 | extract(day dow date/timestamp) Extracts day of week from the given parameter. |
9 | extract(doy from date/timestamp) Extracts day of year from the given parameter. |
10 | select extract(hour from timestamp) Extracts hour from the given parameter. |
11 | select extract(isodow from timestamp) Extracts day of week from the given parameter. This is identical to dow except for Sunday. This matches the ISO 8601 day of the week numbering. |
12 | select extract(isoyear from date) Extracts ISO year from the specified date. ISO year may be different from the Gregorian year. |
13 | extract(microseconds from time) Extracts microseconds from the given parameter. The seconds field, including fractional parts, multiplied by 1 000 000; |
14 | extract(millennium from timestamp ) Extracts millennium from the given parameter.one millennium corresponds to 1000 years. Hence, the third millennium started January 1, 2001. |
15 | extract(milliseconds from time) Extracts milliseconds from the given parameter. |
16 | extract(minute from timestamp ) Extracts minute from the given parameter. |
17 | extract(quarter from timestamp) Extracts quarter of the year(1 - 4) from the given parameter. |
18 | date_part(field text, source date or timestamp or time) Extracts date field from text. |
19 | now() Returns current timestamp. |
20 | to_char(timestamp, format text) Converts timestamp to text. |
21 | to_date(src text, format text) Converts text to date. |
22 | to_timestamp(src text, format text) Converts text to timestamp. |
The JSON functions are listed in the following table −
S.No. | Function & Description |
---|---|
1 | json_extract_path_text(js on text, json_path text) Extracts JSON string from a JSON string based on json path specified. |
2 | json_array_get(json_array text, index int4) Returns the element at the specified index into the JSON array. |
3 | json_array_contains(json_ array text, value any) Determine if the given value exists in the JSON array. |
4 | json_array_length(json_ar ray text) Returns the length of json array. |
This section explains the Tajo DDL commands. Tajo has a built-in database named default.
Create Database Statement
Create Database is a statement used to create a database in Tajo. The syntax for this statement is as follows −
CREATE DATABASE [IF NOT EXISTS] <database_name>
Query
default> default> create database if not exists test;
Result
The above query will generate the following result.
OK
Database is the namespace in Tajo. A database can contain multiple tables with a unique name.
Show Current Database
To check the current database name, issue the following command −
Query
default> \c
Result
The above query will generate the following result.
You are now connected to database "default" as user “user1".
default>
Connect to Database
As of now, you have created a database named “test”. The following syntax is used to connect the “test” database.
\c <database name>
Query
default> \c test
Result
The above query will generate the following result.
You are now connected to database "test" as user “user1”.
test>
You can now see the prompt changes from default database to test database.
Drop Database
To drop a database, use the following syntax −
DROP DATABASE <database-name>
Query
test> \c default
You are now connected to database "default" as user “user1".
default> drop database test;
Result
The above query will generate the following result.
OK
A table is a logical view of one data source. It consists of a logical schema, partitions, URL, and various properties. A Tajo table can be a directory in HDFS, a single file, one HBase table, or a RDBMS table.
Tajo supports the following two types of tables −
- external table
- internal table
External Table
External table needs the location property when the table is created. For example, if your data is already there as Text/JSON files or HBase table, you can register it as Tajo external table.
The following query is an example of external table creation.
create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';
Here,
External keyword − This is used to create an external table. This helps to create a table in the specified location.
Sample refers to the table name.
Location − It is a directory for HDFS,Amazon S3, HBase or local file system. To assign a location property for directories, use the below URI examples −
HDFS − hdfs://localhost:port/path/to/table
Amazon S3 − s3://bucket-name/table
local file system − file:///path/to/table
Openstack Swift − swift://bucket-name/table
Table Properties
An external table has the following properties −
TimeZone − Users can specify a time zone for reading or writing a table.
Compression format − Used to make data size compact. For example, the text/json file uses compression.codec property.
Internal Table
A Internal table is also called an Managed Table. It is created in a pre-defined physical location called the Tablespace.
Syntax
create table table1(col1 int,col2 text);
By default, Tajo uses “tajo.warehouse.directory” located in “conf/tajo-site.xml” . To assign new location for the table, you can use Tablespace configuration.
Tablespace
Tablespace is used to define locations in the storage system. It is supported for only internal tables. You can access the tablespaces by their names. Each tablespace can use a different storage type. If you don’t specify tablespaces then, Tajo uses the default tablespace in the root directory.
Tablespace Configuration
You have “conf/tajo-site.xml.template” in Tajo. Copy the file and rename it to “storagesite.json”. This file will act as a configuration for Tablespaces. Tajo data formats uses the following configuration −
HDFS Configuration
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
HBase Configuration
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hbase:zk://quorum1:port,quorum2:port/"
}
}
}
Text File Configuration
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
“uri”: “hdfs://localhost:9000/path/to/Tajo”
}
}
}
Tablespace Creation
Tajo’s internal table records can be accessed from another table only. You can configure it with tablespace.
Syntax
CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name]
[using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]
Here,
IF NOT EXISTS − This avoids an error if the same table has not been created already.
TABLESPACE − This clause is used to assign the tablespace name.
Storage type − Tajo data supports formats like text,JSON,HBase,Parquet,Sequencefile and ORC.
AS select statement − Select records from another table.
Configure Tablespace
Start your Hadoop services and open the file “conf/storage-site.json”, then add the following changes −
$ vi conf/storage-site.json {
"spaces": {
“space1”: {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
Here, Tajo will refer to the data from HDFS location and space1 is the tablespace name. If you do not start Hadoop services, you can’t register tablespace.
Query
default> create table table1(num1 int,num2 text,num3 float) tablespace space1;
The above query creates a table named “table1” and “space1” refers to the tablespace name.
Data formats
Tajo supports data formats. Let’s go through each of the formats one by one in detail.
Text
A character-separated values’ plain text file represents a tabular data set consisting of rows and columns. Each row is a plain text line.
Creating Table
default> create external table customer(id int,name text,address text,age int)
using text with('text.delimiter'=',') location ‘file:/Users/workspace/Tajo/customers.csv’;
Here, “customers.csv” file refers to a comma separated value file located in the Tajo installation directory.
To create internal table using text format, use the following query −
default> create table customer(id int,name text,address text,age int) using text;
In the above query, you have not assigned any tablespace so it will take Tajo’s default tablespace.
Properties
A text file format has the following properties −
text.delimiter − This is a delimiter character. Default is ‘|’.
compression.codec − This is a compression format. By default, it is disabled. you can change the settings using specified algorithm.
timezone − The table used for reading or writing.
text.error-tolerance.max-num − The maximum number of tolerance levels.
text.skip.headerlines − The number of header lines per skipped.
text.serde − This is serialization property.
JSON
Apache Tajo supports JSON format for querying data. Tajo treats a JSON object as SQL record. One object equals one row in a Tajo table. Let’s consider “array.json” as follows −
$ hdfs dfs -cat /json/array.json {
"num1" : 10,
"num2" : "simple json array",
"num3" : 50.5
}
After you create this file, switch to the Tajo shell and type the following query to create a table using the JSON format.
Query
default> create external table sample (num1 int,num2 text,num3 float)
using json location ‘json/array.json’;
Always remember that the file data must match with the table schema. Otherwise, you can omit the column names and use * which doesn’t require columns list.
To create an internal table, use the following query −
default> create table sample (num1 int,num2 text,num3 float) using json;
Parquet
Parquet is a columnar storage format. Tajo uses Parquet format for easy, fast and efficient access.
Table creation
The following query is an example for table creation −
CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;
Parquet file format has the following properties −
parquet.block.size − size of a row group being buffered in memory.
parquet.page.size − The page size is for compression.
parquet.compression − The compression algorithm used to compress pages.
parquet.enable.dictionary − The boolean value is to enable/disable dictionary encoding.
RCFile
RCFile is the Record Columnar File. It consists of binary key/value pairs.
Table creation
The following query is an example for table creation −
CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;
RCFile has the following properties −
rcfile.serde − custom deserializer class.
compression.codec − compression algorithm.
rcfile.null − NULL character.
SequenceFile
SequenceFile is a basic file format in Hadoop which consists of key/value pairs.
Table creation
The following query is an example for table creation −
CREATE TABLE seq(num1 int,num2 text,num3 float) USING sequencefile;
This sequence file has Hive compatibility. This can be written in Hive as,
CREATE TABLE table1 (id int, name string, score float, type string)
STORED AS sequencefile;
ORC
ORC (Optimized Row Columnar) is a columnar storage format from Hive.
Table creation
The following query is an example for table creation −
CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;
The ORC format has the following properties −
orc.max.merge.distance − ORC file is read, it merges when the distance is lower.
orc.stripe.size − This is the size of each stripe.
orc.buffer.size − The default is 256KB.
orc.rowindex.stride − This is the ORC index stride in number of rows.
In the previous chapter, you have understood how to create tables in Tajo. This chapter explains about the SQL statement in Tajo.
Create Table Statement
Before moving to create a table, create a text file “students.csv” in Tajo installation directory path as follows −
students.csv
Id | Name | Address | Age | Marks |
---|---|---|---|---|
1 | Adam | 23 New Street | 21 | 90 |
2 | Amit | 12 Old Street | 13 | 95 |
3 | Bob | 10 Cross Street | 12 | 80 |
4 | David | 15 Express Avenue | 12 | 85 |
5 | Esha | 20 Garden Street | 13 | 50 |
6 | Ganga | 25 North Street | 12 | 55 |
7 | Jack | 2 Park Street | 12 | 60 |
8 | Leena | 24 South Street | 12 | 70 |
9 | Mary | 5 West Street | 12 | 75 |
10 | Peter | 16 Park Avenue | 12 | 95 |
After the file has been created, move to the terminal and start the Tajo server and shell one by one.
Create Database
Create a new database using the following command −
Query
default> create database sampledb;
OK
Connect to the database “sampledb” which is now created.
default> \c sampledb
You are now connected to database "sampledb" as user “user1”.
Then, create a table in “sampledb” as follows −
Query
sampledb> create external table mytable(id int,name text,address text,age int,mark int)
using text with('text.delimiter' = ',') location ‘file:/Users/workspace/Tajo/students.csv’;
Result
The above query will generate the following result.
OK
Here, the external table is created. Now, you just have to enter the file location. If you have to assign the table from hdfs then use hdfs instead of file.
Next, the “students.csv” file contains comma separated values. The text.delimiter field is assigned with ‘,’.
You have now created “mytable” successfully in “sampledb”.
Show Table
To show tables in Tajo, use the following query.
Query
sampledb> \d
mytable
sampledb> \d mytable
Result
The above query will generate the following result.
table name: sampledb.mytable
table uri: file:/Users/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 261 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
List table
To fetch all the records in the table, type the following query −
Query
sampledb> select * from mytable;
Result
The above query will generate the following result.
Insert Table Statement
Tajo uses the following syntax to insert records in table.
Syntax
create table table1 (col1 int8, col2 text, col3 text);
--schema should be same for target table schema
Insert overwrite into table1 select * from table2;
(or)
Insert overwrite into LOCATION '/dir/subdir' select * from table;
Tajo’s insert statement is similar to the INSERT INTO SELECT statement of SQL.
Query
Let’s create a table to overwrite table data of an existing table.
sampledb> create table test(sno int,name text,addr text,age int,mark int);
OK
sampledb> \d
Result
The above query will generate the following result.
mytable
test
Insert Records
To insert records in the “test” table, type the following query.
Query
sampledb> insert overwrite into test select * from mytable;
Result
The above query will generate the following result.
Progress: 100%, response time: 0.518 sec
Here, “mytable" records overwrite the “test” table. If you don’t want to create the “test” table, then straight away assign the physical path location as mentioned in an alternative option for insert query.
Fetch records
Use the following query to list out all the records in the “test” table −
Query
sampledb> select * from test;
Result
The above query will generate the following result.
This statement is used to add, remove or modify columns of an existing table.
To rename the table use the following syntax −
Alter table table1 RENAME TO table2;
Query
sampledb> alter table test rename to students;
Result
The above query will generate the following result.
OK
To check the changed table name, use the following query.
sampledb> \d
mytable
students
Now the table “test” is changed to “students” table.
Add Column
To insert new column in the “students” table, type the following syntax −
Alter table <table_name> ADD COLUMN <column_name> <data_type>
Query
sampledb> alter table students add column grade text;
Result
The above query will generate the following result.
OK
Set Property
This property is used to change the table’s property.
Query
sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ;
OK
Here, compression type and codec properties are assigned.
To change the text delimiter property, use the following −
Query
ALTER TABLE students SET PROPERTY ‘text.delimiter'=',';
OK
Result
The above query will generate the following result.
sampledb> \d students
table name: sampledb.students
table uri: file:/tmp/tajo-user1/warehouse/sampledb/students
store type: TEXT
number of rows: 10
volume: 228 B
Options:
'compression.type' = 'RECORD'
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'compression.codec' = 'org.apache.hadoop.io.compress.SnappyCodec'
'text.delimiter' = ','
schema:
id INT4
name TEXT
addr TEXT
age INT4
mark INT4
grade TEXT
The above result shows that the table’s properties are changed using the “SET” property.
Select Statement
The SELECT statement is used to select data from a database.
The syntax for the Select statement is as follows −
SELECT [distinct [all]] * | <expression> [[AS] <alias>] [, ...]
[FROM <table reference> [[AS] <table alias name>] [, ...]]
[WHERE <condition>]
[GROUP BY <expression> [, ...]]
[HAVING <condition>]
[ORDER BY <expression> [ASC|DESC] [NULLS (FIRST|LAST)] [, …]]
Mệnh đề Where
Mệnh đề Where được sử dụng để lọc các bản ghi khỏi bảng.
Truy vấn
sampledb> select * from mytable where id > 5;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
Truy vấn trả về bản ghi của những sinh viên có id lớn hơn 5.
Truy vấn
sampledb> select * from mytable where name = ‘Peter’;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
Progress: 100%, response time: 0.117 sec
id, name, address, age
-------------------------------
10, Peter, 16 park avenue , 12
Kết quả chỉ lọc hồ sơ của Peter.
Mệnh đề riêng biệt
Một cột trong bảng có thể chứa các giá trị trùng lặp. Từ khóa DISTINCT chỉ có thể được sử dụng để trả về các giá trị riêng biệt (khác nhau).
Cú pháp
SELECT DISTINCT column1,column2 FROM table_name;
Truy vấn
sampledb> select distinct age from mytable;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
Progress: 100%, response time: 0.216 sec
age
-------------------------------
13
12
Truy vấn trả về độ tuổi khác biệt của sinh viên từ mytable.
Nhóm theo mệnh đề
Mệnh đề GROUP BY được sử dụng phối hợp với câu lệnh SELECT để sắp xếp dữ liệu giống nhau thành các nhóm.
Cú pháp
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;
Truy vấn
select age,sum(mark) as sumofmarks from mytable group by age;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
age, sumofmarks
-------------------------------
13, 145
12, 610
Ở đây, cột “mytable” có hai loại tuổi - 12 và 13. Bây giờ truy vấn nhóm các bản ghi theo độ tuổi và tạo ra tổng điểm cho các độ tuổi tương ứng của học sinh.
Có mệnh đề
Mệnh đề HAVING cho phép bạn chỉ định các điều kiện lọc kết quả nhóm nào xuất hiện trong kết quả cuối cùng. Mệnh đề WHERE đặt điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đặt điều kiện vào các nhóm được tạo bởi mệnh đề GROUP BY.
Cú pháp
SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]
Truy vấn
sampledb> select age from mytable group by age having sum(mark) > 200;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
age
-------------------------------
12
Truy vấn nhóm các bản ghi theo độ tuổi và trả về độ tuổi khi kết quả điều kiện sum (dấu)> 200.
Đặt hàng theo mệnh đề
Mệnh đề ORDER BY được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, dựa trên một hoặc nhiều cột. Cơ sở dữ liệu Tajo sắp xếp các kết quả truy vấn theo thứ tự tăng dần theo mặc định.
Cú pháp
SELECT column-list FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
Truy vấn
sampledb> select * from mytable where mark > 60 order by name desc;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
Truy vấn trả về tên của những sinh viên đó theo thứ tự giảm dần có điểm lớn hơn 60.
Tạo Tuyên bố Chỉ mục
Câu lệnh CREATE INDEX được sử dụng để tạo chỉ mục trong bảng. Chỉ mục được sử dụng để truy xuất dữ liệu nhanh chóng. Phiên bản hiện tại chỉ hỗ trợ lập chỉ mục cho các định dạng TEXT thuần túy được lưu trữ trên HDFS.
Cú pháp
CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }
Truy vấn
create index student_index on mytable(id);
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
id
———————————————
Để xem chỉ mục được chỉ định cho cột, hãy nhập truy vấn sau.
default> \d mytable
table name: default.mytable
table uri: file:/Users/deiva/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 307 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
Indexes:
"student_index" TWO_LEVEL_BIN_TREE (id ASC NULLS LAST )
Ở đây, phương pháp TWO_LEVEL_BIN_TREE được sử dụng theo mặc định trong Tajo.
Tuyên bố bảng thả
Câu lệnh Drop Table được sử dụng để loại bỏ một bảng từ cơ sở dữ liệu.
Cú pháp
drop table table name;
Truy vấn
sampledb> drop table mytable;
Để kiểm tra xem bảng có bị xóa khỏi bảng hay không, hãy nhập truy vấn sau.
sampledb> \d mytable;
Kết quả
Truy vấn trên sẽ tạo ra kết quả sau.
ERROR: relation 'mytable' does not exist
Bạn cũng có thể kiểm tra truy vấn bằng lệnh “\ d” để liệt kê các bảng Tajo có sẵn.
Chương này giải thích chi tiết các hàm tổng hợp và cửa sổ.
Chức năng tổng hợp
Các hàm tổng hợp tạo ra một kết quả duy nhất từ một tập hợp các giá trị đầu vào. Bảng sau đây mô tả chi tiết danh sách các hàm tổng hợp.
Không. | Mô tả chức năng |
---|---|
1 | AVG (exp) Tính trung bình một cột của tất cả các bản ghi trong một nguồn dữ liệu. |
2 | CORR (biểu thức1, biểu thức2) Trả về hệ số tương quan giữa một tập hợp các cặp số. |
3 | ĐẾM() Trả về các hàng số. |
4 | MAX (biểu thức) Trả về giá trị lớn nhất của cột đã chọn. |
5 | MIN (biểu thức) Trả về giá trị nhỏ nhất của cột đã chọn. |
6 | SUM (biểu thức) Trả về tổng của cột đã cho. |
7 | LAST_VALUE (biểu thức) Trả về giá trị cuối cùng của cột đã cho. |
Chức năng cửa sổ
Các hàm Window thực thi trên một tập hợp các hàng và trả về một giá trị duy nhất cho mỗi hàng từ truy vấn. Cửa sổ thuật ngữ có ý nghĩa là tập hợp hàng cho hàm.
Hàm Window trong một truy vấn, xác định cửa sổ bằng mệnh đề OVER ().
Các OVER() mệnh đề có các khả năng sau:
- Xác định các phân vùng cửa sổ để tạo thành các nhóm hàng. (Mệnh đề PARTITION BY)
- Sắp xếp các hàng trong một phân vùng. (Mệnh đề ORDER BY)
Bảng sau đây mô tả chi tiết các chức năng của cửa sổ.
Chức năng | Loại trả lại | Sự miêu tả |
---|---|---|
cấp() | int | Trả về thứ hạng của hàng hiện tại có khoảng trống. |
row_num () | int | Trả về hàng hiện tại trong phân vùng của nó, đếm từ 1. |
lead (giá trị [, số nguyên bù [, mặc định bất kỳ]]) | Giống như kiểu đầu vào | Trả về giá trị được đánh giá tại hàng được bù đắp hàng sau hàng hiện tại trong phân vùng. Nếu không có hàng như vậy, giá trị mặc định sẽ được trả về. |
lag (giá trị [, số nguyên bù [, mặc định bất kỳ]]) | Giống như kiểu đầu vào | Trả về giá trị được đánh giá tại hàng được bù đắp hàng trước hàng hiện tại trong phân vùng. |
first_value (giá trị) | Giống như kiểu đầu vào | Trả về giá trị đầu tiên của các hàng đầu vào. |
last_value (giá trị) | Giống như kiểu đầu vào | Trả về giá trị cuối cùng của các hàng đầu vào. |
Chương này giải thích về các Truy vấn quan trọng sau đây.
- Predicates
- Explain
- Join
Hãy để chúng tôi tiến hành và thực hiện các truy vấn.
Dự đoán
Vị từ là một biểu thức được sử dụng để đánh giá các giá trị true / false và UNKNOWN. Các vị từ được sử dụng trong điều kiện tìm kiếm của mệnh đề WHERE và mệnh đề HAVING và các cấu trúc khác mà giá trị Boolean được yêu cầu.
Vị ngữ IN
Xác định xem giá trị của biểu thức cần kiểm tra có khớp với bất kỳ giá trị nào trong truy vấn con hoặc danh sách hay không. Truy vấn con là một câu lệnh SELECT thông thường có tập kết quả gồm một cột và một hoặc nhiều hàng. Cột này hoặc tất cả các biểu thức trong danh sách phải có cùng kiểu dữ liệu với biểu thức để kiểm tra.
Syntax
IN::=
<expression to test> [NOT] IN (<subquery>)
| (<expression1>,...)
Query
select id,name,address from mytable where id in(2,3,4);
Result
Truy vấn trên sẽ tạo ra kết quả sau.
id, name, address
-------------------------------
2, Amit, 12 old street
3, Bob, 10 cross street
4, David, 15 express avenue
Truy vấn trả về các bản ghi từ mytable cho id sinh viên 2,3 và 4.
Query
select id,name,address from mytable where id not in(2,3,4);
Result
Truy vấn trên sẽ tạo ra kết quả sau.
id, name, address
-------------------------------
1, Adam, 23 new street
5, Esha, 20 garden street
6, Ganga, 25 north street
7, Jack, 2 park street
8, Leena, 24 south street
9, Mary, 5 west street
10, Peter, 16 park avenue
Truy vấn trên trả về các bản ghi từ mytable nơi mà học sinh không thuộc khối 2,3 và 4.
Giống như Vị từ
Vị từ LIKE so sánh chuỗi được chỉ định trong biểu thức đầu tiên để tính giá trị chuỗi, được coi là giá trị để kiểm tra, với mẫu được xác định trong biểu thức thứ hai để tính toán giá trị chuỗi.
Mẫu có thể chứa bất kỳ sự kết hợp nào của các ký tự đại diện như -
Biểu tượng gạch chân (_), có thể được sử dụng thay cho bất kỳ ký tự đơn nào trong giá trị để kiểm tra.
Dấu phần trăm (%), thay thế bất kỳ chuỗi nào không hoặc nhiều ký tự trong giá trị cần kiểm tra.
Syntax
LIKE::=
<expression for calculating the string value>
[NOT] LIKE
<expression for calculating the string value>
[ESCAPE <symbol>]
Query
select * from mytable where name like ‘A%';
Result
Truy vấn trên sẽ tạo ra kết quả sau.
id, name, address, age, mark
-------------------------------
1, Adam, 23 new street, 12, 90
2, Amit, 12 old street, 13, 95
Truy vấn trả về các bản ghi từ bảng của tôi về những sinh viên có tên bắt đầu bằng 'A'.
Query
select * from mytable where name like ‘_a%';
Result
Truy vấn trên sẽ tạo ra kết quả sau.
id, name, address, age, mark
——————————————————————————————————————-
4, David, 15 express avenue, 12, 85
6, Ganga, 25 north street, 12, 55
7, Jack, 2 park street, 12, 60
9, Mary, 5 west street, 12, 75
Truy vấn trả về các bản ghi từ mytable của những học sinh có tên bắt đầu bằng 'a' làm ký tự thứ hai.
Sử dụng giá trị NULL trong điều kiện tìm kiếm
Bây giờ chúng ta hãy hiểu cách sử dụng Giá trị NULL trong các điều kiện tìm kiếm.
Syntax
Predicate
IS [NOT] NULL
Query
select name from mytable where name is not null;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
name
-------------------------------
Adam
Amit
Bob
David
Esha
Ganga
Jack
Leena
Mary
Peter
(10 rows, 0.076 sec, 163 B selected)
Ở đây, kết quả là true nên nó trả về tất cả các tên từ bảng.
Query
Bây giờ chúng ta hãy kiểm tra truy vấn với điều kiện NULL.
default> select name from mytable where name is null;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
name
-------------------------------
(0 rows, 0.068 sec, 0 B selected)
Giải thích
Explainđược sử dụng để có được một kế hoạch thực thi truy vấn. Nó cho thấy một kế hoạch hợp lý và toàn cầu thực hiện một câu lệnh.
Truy vấn kế hoạch logic
explain select * from mytable;
explain
-------------------------------
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
Result
Truy vấn trên sẽ tạo ra kết quả sau.
Kết quả truy vấn hiển thị một định dạng kế hoạch hợp lý cho bảng đã cho. Phương án lôgic trả về ba kết quả sau:
- Danh sách mục tiêu
- Ra ngoài lược đồ
- Trong lược đồ
Truy vấn kế hoạch toàn cầu
explain global select * from mytable;
explain
-------------------------------
-------------------------------------------------------------------------------
Execution Block Graph (TERMINAL - eb_0000000000000_0000_000002)
-------------------------------------------------------------------------------
|-eb_0000000000000_0000_000002
|-eb_0000000000000_0000_000001
-------------------------------------------------------------------------------
Order of Execution
-------------------------------------------------------------------------------
1: eb_0000000000000_0000_000001
2: eb_0000000000000_0000_000002
-------------------------------------------------------------------------------
=======================================================
Block Id: eb_0000000000000_0000_000001 [ROOT]
=======================================================
SCAN(0) on default.mytable
=> target list: default.mytable.id (INT4), default.mytable.name (TEXT),
default.mytable.address (TEXT), default.mytable.age (INT4), default.mytable.mark (INT4)
=> out schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT),default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=> in schema: {
(5) default.mytable.id (INT4), default.mytable.name (TEXT), default.mytable.address (TEXT),
default.mytable.age (INT4), default.mytable.mark (INT4)
}
=======================================================
Block Id: eb_0000000000000_0000_000002 [TERMINAL]
=======================================================
(24 rows, 0.065 sec, 0 B selected)
Result
Truy vấn trên sẽ tạo ra kết quả sau.
Ở đây, kế hoạch toàn cầu hiển thị ID khối thực thi, thứ tự thực hiện và thông tin của nó.
Tham gia
Các phép nối SQL được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng. Sau đây là các loại SQL Joins khác nhau:
- Tham gia bên trong
- {TRÁI | QUYẾN RŨ | FULL} THAM GIA NGOÀI TRỜI
- Tham gia chéo
- Tự tham gia
- Tham gia tự nhiên
Hãy xem xét hai bảng sau để thực hiện các thao tác nối.
Bảng 1 - Khách hàng
Tôi | Tên | Địa chỉ | Tuổi tác |
---|---|---|---|
1 | Khách hàng 1 | 23 Phố Cổ | 21 |
2 | Khách hàng 2 | 12 Phố Mới | 23 |
3 | Khách hàng 3 | 10 Đại lộ Express | 22 |
4 | Khách hàng 4 | 15 Đại lộ Express | 22 |
5 | Khách hàng 5 | 20 Garden Street | 33 |
6 | Khách hàng 6 | 21 North Street | 25 |
Table2 - customer_order
Tôi | Mã đơn hàng | Id trống |
---|---|---|
1 | 1 | 101 |
2 | 2 | 102 |
3 | 3 | 103 |
4 | 4 | 104 |
5 | 5 | 105 |
Bây giờ chúng ta hãy tiếp tục và thực hiện các phép nối SQL trên hai bảng trên.
Tham gia bên trong
Phép nối bên trong chọn tất cả các hàng từ cả hai bảng khi có sự khớp giữa các cột trong cả hai bảng.
Syntax
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
Query
default> select c.age,c1.empid from customers c inner join customer_order c1 on c.id = c1.id;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
age, empid
-------------------------------
21, 101
23, 102
22, 103
22, 104
33, 105
Truy vấn khớp với năm hàng từ cả hai bảng. Do đó, nó trả về tuổi của các hàng phù hợp từ bảng đầu tiên.
Tham gia bên ngoài bên trái
Một phép nối ngoài cùng bên trái giữ lại tất cả các hàng của bảng “bên trái”, bất kể có hàng nào khớp trên bảng “bên phải” hay không.
Query
select c.name,c1.empid from customers c left outer join customer_order c1 on c.id = c1.id;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
customer6,
Ở đây, phép nối ngoài cùng bên trái trả về các hàng cột tên từ bảng khách hàng (bên trái) và cột rỗng các hàng khớp với bảng khách hàng (bên phải).
Tham gia bên ngoài bên phải
Một phép nối ngoài cùng bên phải giữ lại tất cả các hàng của bảng “bên phải”, bất kể có hàng nào khớp trên bảng “bên trái” hay không.
Query
select c.name,c1.empid from customers c right outer join customer_order c1 on c.id = c1.id;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
Ở đây, phép nối bên phải trả về các hàng trống từ bảng customer_order (bên phải) và cột tên khớp với các hàng từ bảng khách hàng.
Tham gia đầy đủ bên ngoài
Tham gia bên ngoài đầy đủ giữ lại tất cả các hàng từ cả bảng bên trái và bên phải.
Query
select * from customers c full outer join customer_order c1 on c.id = c1.id;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
Truy vấn trả về tất cả các hàng phù hợp và không khớp từ cả bảng khách hàng và bảng customer_order.
Tham gia chéo
Điều này trả về tích Descartes của các tập hợp các bản ghi từ hai hoặc nhiều bảng được nối.
Syntax
SELECT * FROM table1 CROSS JOIN table2;
Query
select orderid,name,address from customers,customer_order;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
Truy vấn trên trả về tích Descartes của bảng.
Tham gia tự nhiên
Một phép nối tự nhiên không sử dụng bất kỳ toán tử so sánh nào. Nó không kết hợp theo cách một tích Descartes làm. Chúng ta chỉ có thể thực hiện phép nối tự nhiên nếu có ít nhất một thuộc tính chung tồn tại giữa hai mối quan hệ.
Syntax
SELECT * FROM table1 NATURAL JOIN table2;
Query
select * from customers natural join customer_order;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
Ở đây, có một id cột chung tồn tại giữa hai bảng. Sử dụng cột chung đó,Natural Join tham gia cả hai bảng.
Tự tham gia
SQL SELF JOIN được sử dụng để nối một bảng với chính nó như thể bảng là hai bảng, tạm thời đổi tên ít nhất một bảng trong câu lệnh SQL.
Syntax
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_filed = b.common_field
Query
default> select c.id,c1.name from customers c, customers c1 where c.id = c1.id;
Result
Truy vấn trên sẽ tạo ra kết quả sau.
id, name
-------------------------------
1, customer1
2, customer2
3, customer3
4, customer4
5, customer5
6, customer6
Truy vấn kết hợp một bảng khách hàng với chính nó.
Tajo hỗ trợ nhiều định dạng lưu trữ khác nhau. Để đăng ký cấu hình plugin lưu trữ, bạn nên thêm các thay đổi vào tệp cấu hình “storage-site.json”.
Storage-site.json
Cấu trúc được xác định như sau:
{
"storages": {
“storage plugin name“: {
"handler": "${class name}”, "default-format": “plugin name"
}
}
}
Mỗi cá thể lưu trữ được xác định bởi URI.
Trình xử lý lưu trữ PostgreSQL
Tajo hỗ trợ trình xử lý lưu trữ PostgreSQL. Nó cho phép các truy vấn của người dùng truy cập các đối tượng cơ sở dữ liệu trong PostgreSQL. Nó là trình xử lý lưu trữ mặc định trong Tajo nên bạn có thể dễ dàng cấu hình nó.
cấu hình
{
"spaces": {
"postgre": {
"uri": "jdbc:postgresql://hostname:port/database1"
"configs": {
"mapped_database": “sampledb”
"connection_properties": {
"user":“tajo", "password": "pwd"
}
}
}
}
}
Đây, “database1” đề cập đến postgreSQL cơ sở dữ liệu được ánh xạ tới cơ sở dữ liệu “sampledb” trong Tajo.
Apache Tajo hỗ trợ tích hợp HBase. Điều này cho phép chúng tôi truy cập các bảng HBase trong Tajo. HBase là một cơ sở dữ liệu hướng cột phân tán được xây dựng trên hệ thống tệp Hadoop. Đây là một phần của hệ sinh thái Hadoop cung cấp quyền truy cập đọc / ghi ngẫu nhiên theo thời gian thực vào dữ liệu trong Hệ thống tệp Hadoop. Các bước sau là bắt buộc để cấu hình tích hợp HBase.
Đặt biến môi trường
Thêm các thay đổi sau vào tệp “conf / tajo-env.sh”.
$ vi conf/tajo-env.sh
# HBase home directory. It is opitional but is required mandatorily to use HBase.
# export HBASE_HOME = path/to/HBase
Sau khi bạn đã bao gồm đường dẫn HBase, Tajo sẽ đặt tệp thư viện HBase thành classpath.
Tạo bảng bên ngoài
Tạo một bảng bên ngoài bằng cú pháp sau:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> [(<column_name> <data_type>, ... )]
USING hbase WITH ('table' = '<hbase_table_name>'
, 'columns' = ':key,<column_family_name>:<qualifier_name>, ...'
, 'hbase.zookeeper.quorum' = '<zookeeper_address>'
, 'hbase.zookeeper.property.clientPort' = '<zookeeper_client_port>')
[LOCATION 'hbase:zk://<hostname>:<port>/'] ;
Để truy cập bảng HBase, bạn phải cấu hình vị trí vùng bảng.
Đây,
Table- Đặt tên bảng gốc hbase. Nếu bạn muốn tạo một bảng bên ngoài, bảng đó phải tồn tại trên HBase.
Columns- Phím đề cập đến phím hàng HBase. Số lượng mục nhập cột cần phải bằng số cột của bảng Tajo.
hbase.zookeeper.quorum - Đặt địa chỉ túc số người giữ vườn thú.
hbase.zookeeper.property.clientPort - Đặt cổng khách hàng của người giữ vườn thú.
Query
CREATE EXTERNAL TABLE students (rowkey text,id int,name text)
USING hbase WITH ('table' = 'students', 'columns' = ':key,info:id,content:name')
LOCATION 'hbase:zk://<hostname>:<port>/';
Tại đây, trường Đường dẫn vị trí đặt id cổng ứng dụng của người giữ vườn thú. Nếu bạn không đặt cổng, Tajo sẽ tham chiếu đến thuộc tính của tệp hbase-site.xml.
Tạo bảng trong HBase
Bạn có thể khởi động trình bao tương tác HBase bằng lệnh “hbase shell” như được hiển thị trong truy vấn sau.
Query
/bin/hbase shell
Result
Truy vấn trên sẽ tạo ra kết quả sau.
hbase(main):001:0>
Các bước truy vấn HBase
Để truy vấn HBase, bạn nên hoàn thành các bước sau:
Step 1 - Đưa các lệnh sau vào vỏ HBase để tạo bảng “hướng dẫn”.
Query
hbase(main):001:0> create ‘students’,{NAME => ’info’},{NAME => ’content’}
put 'students', ‘row-01', 'content:name', 'Adam'
put 'students', ‘row-01', 'info:id', '001'
put 'students', ‘row-02', 'content:name', 'Amit'
put 'students', ‘row-02', 'info:id', '002'
put 'students', ‘row-03', 'content:name', 'Bob'
put 'students', ‘row-03', 'info:id', ‘003'
Step 2 - Bây giờ, sử dụng lệnh sau trong hbase shell để tải dữ liệu vào một bảng.
main):001:0> cat ../hbase/hbase-students.txt | bin/hbase shell
Step 3 - Bây giờ, quay lại trình bao Tajo và thực hiện lệnh sau để xem siêu dữ liệu của bảng -
default> \d students;
table name: default.students
table path:
store type: HBASE
number of rows: unknown
volume: 0 B
Options:
'columns' = ':key,info:id,content:name'
'table' = 'students'
schema:
rowkey TEXT
id INT4
name TEXT
Step 4 - Để tìm nạp kết quả từ bảng, hãy sử dụng truy vấn sau:
Query
default> select * from students
Result
Truy vấn trên sẽ lấy kết quả sau:
rowkey, id, name
-------------------------------
row-01, 001, Adam
row-02, 002, Amit
row-03 003, Bob
Tajo hỗ trợ HiveCatalogStore để tích hợp với Apache Hive. Sự tích hợp này cho phép Tajo truy cập các bảng trong Apache Hive.
Đặt biến môi trường
Thêm các thay đổi sau vào tệp “conf / tajo-env.sh”.
$ vi conf/tajo-env.sh
export HIVE_HOME = /path/to/hive
Sau khi bạn đã bao gồm đường dẫn Hive, Tajo sẽ đặt tệp thư viện Hive thành đường dẫn classpath.
Cấu hình danh mục
Thêm các thay đổi sau vào tệp “conf / catalog-site.xml”.
$ vi conf/catalog-site.xml
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.HiveCatalogStore</value>
</property>
Sau khi HiveCatalogStore được cấu hình, bạn có thể truy cập bảng của Hive trong Tajo.
Swift là một cửa hàng đối tượng / blob phân tán và nhất quán. Swift cung cấp phần mềm lưu trữ đám mây để bạn có thể lưu trữ và truy xuất nhiều dữ liệu với một API đơn giản. Tajo hỗ trợ tích hợp Swift.
Sau đây là các điều kiện tiên quyết của Tích hợp Swift:
- Swift
- Hadoop
Core-site.xml
Thêm các thay đổi sau vào tệp hadoop “core-site.xml” -
<property>
<name>fs.swift.impl</name>
<value>org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem</value>
<description>File system implementation for Swift</description>
</property>
<property>
<name>fs.swift.blocksize</name>
<value>131072</value>
<description>Split size in KB</description>
</property>
Điều này sẽ được sử dụng để Hadoop truy cập các đối tượng Swift. Sau khi bạn thực hiện tất cả các thay đổi, hãy chuyển đến thư mục Tajo để đặt biến môi trường Swift.
conf / tajo-env.h
Mở tệp cấu hình Tajo và thêm thiết lập biến môi trường như sau:
$ vi conf/tajo-env.h export TAJO_CLASSPATH = $HADOOP_HOME/share/hadoop/tools/lib/hadoop-openstack-x.x.x.jar
Bây giờ, Tajo sẽ có thể truy vấn dữ liệu bằng Swift.
Tạo bảng
Hãy tạo một bảng bên ngoài để truy cập các đối tượng Swift trong Tajo như sau:
default> create external table swift(num1 int, num2 text, num3 float)
using text with ('text.delimiter' = '|') location 'swift://bucket-name/table1';
Sau khi bảng đã được tạo, bạn có thể chạy các truy vấn SQL.
Apache Tajo cung cấp giao diện JDBC để kết nối và thực thi các truy vấn. Chúng ta có thể sử dụng cùng một giao diện JDBC để kết nối Tajo từ ứng dụng dựa trên Java của chúng ta. Bây giờ chúng ta hãy hiểu cách kết nối Tajo và thực thi các lệnh trong ứng dụng Java mẫu của chúng ta bằng giao diện JDBC trong phần này.
Tải xuống trình điều khiển JDBC
Tải xuống trình điều khiển JDBC bằng cách truy cập liên kết sau: http://apache.org/dyn/closer.cgi/tajo/tajo-0.11.3/tajo-jdbc-0.11.3.jar.
Bây giờ, tệp “tajo-jdbc-0.11.3.jar” đã được tải xuống máy của bạn.
Đặt đường dẫn lớp
Để sử dụng trình điều khiển JDBC trong chương trình của bạn, hãy đặt đường dẫn lớp như sau:
CLASSPATH = path/to/tajo-jdbc-0.11.3.jar:$CLASSPATH
Kết nối với Tajo
Apache Tajo cung cấp trình điều khiển JDBC dưới dạng một tệp jar duy nhất và nó có sẵn @ /path/to/tajo/share/jdbc-dist/tajo-jdbc-0.11.3.jar.
Chuỗi kết nối để kết nối Apache Tajo có định dạng sau:
jdbc:tajo://host/
jdbc:tajo://host/database
jdbc:tajo://host:port/
jdbc:tajo://host:port/database
Đây,
host - Tên máy chủ của TajoMaster.
port- Số cổng mà máy chủ đang nghe. Số cổng mặc định là 26002.
database- Tên cơ sở dữ liệu. Tên cơ sở dữ liệu mặc định là mặc định.
Ứng dụng Java
Bây giờ chúng ta hãy hiểu ứng dụng Java.
Mã hóa
import java.sql.*;
import org.apache.tajo.jdbc.TajoDriver;
public class TajoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.apache.tajo.jdbc.TajoDriver");
connection = DriverManager.getConnection(“jdbc:tajo://localhost/default");
statement = connection.createStatement();
String sql;
sql = "select * from mytable”;
// fetch records from mytable.
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("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();
}
}
}
Ứng dụng có thể được biên dịch và chạy bằng các lệnh sau.
Tổng hợp
javac -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample.java
Chấp hành
java -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample
Kết quả
Các lệnh trên sẽ tạo ra kết quả sau:
ID: 1;
Name: Adam
ID: 2;
Name: Amit
ID: 3;
Name: Bob
ID: 4;
Name: David
ID: 5;
Name: Esha
ID: 6;
Name: Ganga
ID: 7;
Name: Jack
ID: 8;
Name: Leena
ID: 9;
Name: Mary
ID: 10;
Name: Peter
Apache Tajo hỗ trợ các chức năng tùy chỉnh / do người dùng xác định (UDF). Các chức năng tùy chỉnh có thể được tạo trong python.
Các chức năng tùy chỉnh chỉ là các chức năng python đơn giản với trình trang trí “@output_type(<tajo sql datatype>)” như sau -
@ouput_type(“integer”)
def sum_py(a, b):
return a + b;
Các tập lệnh python với UDF có thể được đăng ký bằng cách thêm cấu hình bên dưới vào “tajosite.xml”.
<property>
<name>tajo.function.python.code-dir</name>
<value>file:///path/to/script1.py,file:///path/to/script2.py</value>
</property>
Sau khi các tập lệnh được đăng ký, hãy khởi động lại cụm và các UDF sẽ có sẵn ngay trong truy vấn SQL như sau:
select sum_py(10, 10) as pyfn;
Apache Tajo cũng hỗ trợ các hàm tổng hợp do người dùng xác định nhưng không hỗ trợ các hàm cửa sổ do người dùng xác định.