Apache Tajo - คู่มือฉบับย่อ
ระบบคลังข้อมูลแบบกระจาย
คลังข้อมูลเป็นฐานข้อมูลเชิงสัมพันธ์ที่ออกแบบมาเพื่อการสืบค้นและการวิเคราะห์แทนที่จะใช้สำหรับการประมวลผลธุรกรรม เป็นชุดข้อมูลที่มุ่งเน้นเชิงบูรณาการตัวแปรเวลาและไม่ลบเลือน ข้อมูลนี้ช่วยให้นักวิเคราะห์สามารถตัดสินใจอย่างชาญฉลาดในองค์กร แต่ปริมาณข้อมูลเชิงสัมพันธ์จะเพิ่มขึ้นทุกวัน
เพื่อเอาชนะความท้าทายระบบคลังข้อมูลแบบกระจายจะแบ่งปันข้อมูลในที่เก็บข้อมูลหลายแห่งเพื่อจุดประสงค์ในการประมวลผลการวิเคราะห์ออนไลน์ (OLAP) คลังข้อมูลแต่ละแห่งอาจเป็นขององค์กรตั้งแต่หนึ่งองค์กรขึ้นไป ทำการปรับสมดุลภาระงานและปรับขนาดได้ ข้อมูลเมตาถูกจำลองแบบและแจกจ่ายจากส่วนกลาง
Apache Tajo เป็นระบบคลังข้อมูลแบบกระจายซึ่งใช้ Hadoop Distributed File System (HDFS) เป็นชั้นจัดเก็บข้อมูลและมีเอ็นจิ้นการดำเนินการสืบค้นของตัวเองแทนกรอบ MapReduce
ภาพรวมของ SQL บน Hadoop
Hadoop เป็นเฟรมเวิร์กโอเพนซอร์สที่อนุญาตให้จัดเก็บและประมวลผลข้อมูลขนาดใหญ่ในสภาพแวดล้อมแบบกระจาย มันเร็วและทรงพลังมาก อย่างไรก็ตาม Hadoop มีความสามารถในการสืบค้นที่ จำกัด ดังนั้นจึงสามารถปรับปรุงประสิทธิภาพได้ดียิ่งขึ้นด้วยความช่วยเหลือของ SQL บน Hadoop สิ่งนี้ช่วยให้ผู้ใช้สามารถโต้ตอบกับ Hadoop ผ่านคำสั่ง SQL ง่ายๆ
ตัวอย่างบางส่วนของ SQL บนแอปพลิเคชัน Hadoop ได้แก่ Hive, Impala, Drill, Presto, Spark, HAWQ และ Apache Tajo
Apache Tajo คืออะไร
Apache Tajo เป็นกรอบการประมวลผลข้อมูลเชิงสัมพันธ์และแบบกระจาย ออกแบบมาเพื่อความหน่วงแฝงต่ำและการวิเคราะห์คำค้นหาเฉพาะกิจที่ปรับขนาดได้
Tajo รองรับ SQL มาตรฐานและรูปแบบข้อมูลต่างๆ แบบสอบถามส่วนใหญ่ของ Tajo สามารถดำเนินการได้โดยไม่ต้องแก้ไขใด ๆ
ตาโจมี fault-tolerance ผ่านกลไกการรีสตาร์ทสำหรับงานที่ล้มเหลวและเอ็นจิ้นการเขียนคิวรีที่ขยายได้
ทาโจดำเนินการที่จำเป็น ETL (Extract Transform and Load process)การดำเนินการเพื่อสรุปชุดข้อมูลขนาดใหญ่ที่จัดเก็บบน HDFS เป็นอีกทางเลือกหนึ่งของ Hive / Pig
Tajo เวอร์ชันล่าสุดมีการเชื่อมต่อที่ดีกว่ากับโปรแกรม Java และฐานข้อมูลของบุคคลที่สามเช่น Oracle และ PostGreSQL
คุณสมบัติของ Apache Tajo
Apache Tajo มีคุณสมบัติดังต่อไปนี้ -
- ความสามารถในการปรับขนาดที่เหนือกว่าและประสิทธิภาพที่ดีที่สุด
- เวลาแฝงต่ำ
- ฟังก์ชันที่ผู้ใช้กำหนดเอง
- กรอบการประมวลผลการจัดเก็บแถว / คอลัมน์
- ความเข้ากันได้กับ HiveQL และ Hive MetaStore
- การไหลของข้อมูลที่เรียบง่ายและการบำรุงรักษาง่าย
ประโยชน์ของ Apache Tajo
Apache Tajo มอบสิทธิประโยชน์ดังต่อไปนี้ -
- ง่ายต่อการใช้
- สถาปัตยกรรมที่เรียบง่าย
- การเพิ่มประสิทธิภาพการสืบค้นตามต้นทุน
- แผนการดำเนินการค้นหาแบบเวกเตอร์
- จัดส่งที่รวดเร็ว
- กลไก I / O ที่เรียบง่ายและรองรับการจัดเก็บประเภทต่างๆ
- ความทนทานต่อความผิดพลาด
ใช้กรณีของ Apache Tajo
ต่อไปนี้เป็นกรณีการใช้งานบางส่วนของ Apache Tajo -
คลังข้อมูลและการวิเคราะห์
บริษัท SK Telecom ของเกาหลีดำเนินการกับ Tajo โดยใช้ข้อมูลที่มีมูลค่า 1.7 เทราไบต์และพบว่าสามารถดำเนินการสืบค้นด้วยความเร็วสูงกว่า Hive หรือ Impala
การค้นพบข้อมูล
บริการสตรีมเพลงของเกาหลี Melon ใช้ Tajo สำหรับการประมวลผลเชิงวิเคราะห์ Tajo ดำเนินงาน ETL (ขั้นตอนการแยกการแปลง - โหลด) เร็วกว่า Hive 1.5 ถึง 10 เท่า
การวิเคราะห์บันทึก
Bluehole Studio บริษัท สัญชาติเกาหลีพัฒนา TERA - เกมออนไลน์แบบผู้เล่นหลายคนแฟนตาซี บริษัท ใช้ Tajo สำหรับการวิเคราะห์บันทึกเกมและค้นหาสาเหตุหลักของการขัดจังหวะคุณภาพบริการ
รูปแบบการจัดเก็บและข้อมูล
Apache Tajo รองรับรูปแบบข้อมูลต่อไปนี้ -
- JSON
- ไฟล์ข้อความ (CSV)
- Parquet
- ไฟล์ลำดับ
- AVRO
- บัฟเฟอร์โปรโตคอล
- Apache Orc
Tajo รองรับรูปแบบการจัดเก็บดังต่อไปนี้ -
- HDFS
- JDBC
- Amazon S3
- Apache HBase
- Elasticsearch
ภาพประกอบต่อไปนี้แสดงให้เห็นถึงสถาปัตยกรรมของ Apache Tajo
ตารางต่อไปนี้อธิบายรายละเอียดส่วนประกอบแต่ละส่วน
ส. | ส่วนประกอบและคำอธิบาย |
---|---|
1 | Client Client ส่งคำสั่ง SQL ไปยัง Tajo Master เพื่อรับผลลัพธ์ |
2 | Master มาสเตอร์เป็นภูตหลัก มีหน้าที่วางแผนการสืบค้นและเป็นผู้ประสานงานสำหรับคนงาน |
3 | Catalog server รักษาคำอธิบายตารางและดัชนี มันฝังอยู่ใน Master daemon เซิร์ฟเวอร์แค็ตตาล็อกใช้ Apache Derby เป็นชั้นจัดเก็บข้อมูลและเชื่อมต่อผ่านไคลเอ็นต์ JDBC |
4 | Worker โหนดหลักมอบหมายงานให้กับโหนดของผู้ปฏิบัติงาน TajoWorker ประมวลผลข้อมูล เมื่อจำนวน TajoWorkers เพิ่มขึ้นความสามารถในการประมวลผลก็เพิ่มขึ้นในเชิงเส้น |
5 | Query Master Tajo master กำหนดแบบสอบถามให้กับ Query Master Query Master มีหน้าที่ควบคุมแผนการดำเนินการแบบกระจาย เปิดตัว TaskRunner และกำหนดเวลางานให้กับ TaskRunner บทบาทหลักของ Query Master คือการตรวจสอบงานที่กำลังทำงานอยู่และรายงานไปยังโหนดหลัก |
6 | Node Managers จัดการทรัพยากรของโหนดผู้ปฏิบัติงาน ตัดสินใจในการจัดสรรคำขอไปยังโหนด |
7 | TaskRunner ทำหน้าที่เป็นเครื่องมือดำเนินการสืบค้นภายในเครื่อง ใช้เพื่อเรียกใช้และตรวจสอบกระบวนการสืบค้น TaskRunner ประมวลผลทีละงาน มีคุณสมบัติหลักสามประการดังต่อไปนี้ -
|
8 | Query Executor ใช้เพื่อดำเนินการสืบค้น |
9 | Storage service เชื่อมต่อที่เก็บข้อมูลพื้นฐานกับ Tajo |
เวิร์กโฟลว์
Tajo ใช้ Hadoop Distributed File System (HDFS) เป็นชั้นจัดเก็บข้อมูลและมีกลไกการดำเนินการสืบค้นของตัวเองแทนกรอบงาน MapReduce คลัสเตอร์ Tajo ประกอบด้วยโหนดหลักหนึ่งโหนดและคนงานจำนวนหนึ่งในโหนดคลัสเตอร์
หลักมีหน้าที่หลักในการวางแผนการสืบค้นและผู้ประสานงานสำหรับคนงาน ต้นแบบแบ่งแบบสอบถามออกเป็นงานเล็ก ๆ และมอบหมายให้คนงาน ผู้ปฏิบัติงานแต่ละคนมีเครื่องมือสืบค้นข้อมูลในพื้นที่ซึ่งเรียกใช้งานกราฟแบบ acyclic ที่กำหนดทิศทางของตัวดำเนินการทางกายภาพ
นอกจากนี้ Tajo ยังสามารถควบคุมการไหลของข้อมูลแบบกระจายได้ยืดหยุ่นกว่า MapReduce และสนับสนุนเทคนิคการสร้างดัชนี
อินเทอร์เฟซบนเว็บของ Tajo มีความสามารถดังต่อไปนี้ -
- ตัวเลือกในการค้นหาวิธีการวางแผนการสืบค้นข้อมูล
- ตัวเลือกในการค้นหาวิธีกระจายแบบสอบถามข้ามโหนด
- ตัวเลือกในการตรวจสอบสถานะของคลัสเตอร์และโหนด
ในการติดตั้ง Apache Tajo คุณต้องมีซอฟต์แวร์ต่อไปนี้ในระบบของคุณ -
- Hadoop เวอร์ชัน 2.3 หรือสูงกว่า
- Java เวอร์ชัน 1.7 หรือสูงกว่า
- Linux หรือ Mac OS
ให้เราทำตามขั้นตอนต่อไปนี้เพื่อติดตั้ง Tajo
ตรวจสอบการติดตั้ง Java
หวังว่าคุณได้ติดตั้ง Java เวอร์ชัน 8 บนเครื่องของคุณแล้ว ตอนนี้คุณต้องดำเนินการต่อโดยการยืนยัน
ในการตรวจสอบให้ใช้คำสั่งต่อไปนี้ -
$ java -version
หากติดตั้ง Java บนเครื่องของคุณสำเร็จคุณจะเห็นเวอร์ชันปัจจุบันของ Java ที่ติดตั้ง หากไม่ได้ติดตั้ง Java ให้ทำตามขั้นตอนเหล่านี้เพื่อติดตั้ง Java 8 บนเครื่องของคุณ
ดาวน์โหลด JDK
ดาวน์โหลด JDK เวอร์ชันล่าสุดโดยไปที่ลิงค์ต่อไปนี้จากนั้นดาวน์โหลดเวอร์ชันล่าสุด
https://www.oracle.com
เวอร์ชันล่าสุดคือ JDK 8u 92 และไฟล์คือ “jdk-8u92-linux-x64.tar.gz”. โปรดดาวน์โหลดไฟล์บนเครื่องของคุณ ต่อไปนี้ให้แตกไฟล์และย้ายไปยังไดเร็กทอรีเฉพาะ ตอนนี้ตั้งค่าทางเลือก Java ในที่สุด Java ก็ถูกติดตั้งบนเครื่องของคุณ
การตรวจสอบการติดตั้ง Hadoop
คุณได้ติดตั้งแล้ว Hadoopในระบบของคุณ ตอนนี้ตรวจสอบโดยใช้คำสั่งต่อไปนี้ -
$ hadoop version
หากทุกอย่างเรียบร้อยในการตั้งค่าของคุณคุณจะเห็นเวอร์ชันของ Hadoop หากไม่ได้ติดตั้ง Hadoop ให้ดาวน์โหลดและติดตั้ง Hadoop โดยไปที่ลิงค์ต่อไปนี้ -https://www.apache.org
การติดตั้ง Apache Tajo
Apache Tajo มีโหมดการทำงานสองโหมด - โหมดโลคัลและโหมดกระจายเต็มรูปแบบ หลังจากตรวจสอบการติดตั้ง Java และ Hadoop แล้วให้ดำเนินการตามขั้นตอนต่อไปนี้เพื่อติดตั้งคลัสเตอร์ Tajo บนเครื่องของคุณ อินสแตนซ์ Tajo ในโหมดโลคัลต้องการการกำหนดค่าที่ง่ายมาก
ดาวน์โหลด Tajo เวอร์ชันล่าสุดโดยไปที่ลิงค์ต่อไปนี้ - https://www.apache.org/dyn/closer.cgi/tajo
ตอนนี้คุณสามารถดาวน์โหลดไฟล์ “tajo-0.11.3.tar.gz” จากเครื่องของคุณ
แตกไฟล์ Tar
แตกไฟล์ tar โดยใช้คำสั่งต่อไปนี้ -
$ cd opt/ $ tar tajo-0.11.3.tar.gz
$ cd tajo-0.11.3
ตั้งค่าตัวแปรสภาพแวดล้อม
เพิ่มการเปลี่ยนแปลงต่อไปนี้ใน “conf/tajo-env.sh” ไฟล์
$ 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/
ที่นี่คุณต้องระบุพา ธ Hadoop และ Java ไปที่ “tajo-env.sh”ไฟล์. หลังจากทำการเปลี่ยนแปลงแล้วให้บันทึกไฟล์และออกจากเทอร์มินัล
เริ่มเซิร์ฟเวอร์ Tajo
ในการเปิดเซิร์ฟเวอร์ Tajo ให้ดำเนินการคำสั่งต่อไปนี้ -
$ bin/start-tajo.sh
คุณจะได้รับคำตอบที่คล้ายกับสิ่งต่อไปนี้ -
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
ตอนนี้พิมพ์คำสั่ง“ jps” เพื่อดู daemons ที่กำลังทำงานอยู่
$ jps
1010 TajoWorker
1140 Jps
933 TajoMaster
เปิด Tajo Shell (Tsql)
ในการเปิดใช้งาน Tajo shell ไคลเอ็นต์ให้ใช้คำสั่งต่อไปนี้ -
$ bin/tsql
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
welcome to
_____ ___ _____ ___
/_ _/ _ |/_ _/ /
/ // /_| |_/ // / /
/_//_/ /_/___/ \__/ 0.11.3
Try \? for help.
ออกจาก Tajo Shell
ดำเนินการคำสั่งต่อไปนี้เพื่อออกจาก Tsql -
default> \q
bye!
ที่นี่ค่าเริ่มต้นหมายถึงแคตตาล็อกใน Tajo
UI ของเว็บ
พิมพ์ URL ต่อไปนี้เพื่อเปิดใช้งานเว็บ UI ของ Tajo - http://localhost:26080/
ตอนนี้คุณจะเห็นหน้าจอต่อไปนี้ซึ่งคล้ายกับตัวเลือก ExecuteQuery
หยุดทาโจ
ในการหยุดเซิร์ฟเวอร์ Tajo ให้ใช้คำสั่งต่อไปนี้ -
$ bin/stop-tajo.sh
คุณจะได้รับคำตอบดังต่อไปนี้ -
localhost: stopping worker
stopping master
การกำหนดค่าของ Tajo ขึ้นอยู่กับระบบการกำหนดค่าของ Hadoop บทนี้จะอธิบายรายละเอียดการตั้งค่าคอนฟิกของ Tajo
การตั้งค่าพื้นฐาน
Tajo ใช้ไฟล์ config สองไฟล์ต่อไปนี้ -
- catalogue-site.xml - การกำหนดค่าสำหรับเซิร์ฟเวอร์แค็ตตาล็อก
- tajo-site.xml - การกำหนดค่าสำหรับโมดูล Tajo อื่น ๆ
การกำหนดค่าโหมดกระจาย
การตั้งค่าโหมดกระจายจะทำงานบน Hadoop Distributed File System (HDFS) มาทำตามขั้นตอนเพื่อกำหนดการตั้งค่าโหมดกระจาย Tajo
tajo-site.xml
ไฟล์นี้มีให้ @ /path/to/tajo/confไดเร็กทอรีและทำหน้าที่เป็นคอนฟิกูเรชันสำหรับโมดูล Tajo อื่น ๆ ในการเข้าถึง Tajo ในโหมดกระจายให้ใช้การเปลี่ยนแปลงต่อไปนี้กับ“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>
การกำหนดค่าโหนดหลัก
Tajo ใช้ HDFS เป็นประเภทจัดเก็บข้อมูลหลัก การกำหนดค่ามีดังนี้และควรเพิ่มเข้าไป“tajo-site.xml”.
<property>
<name>tajo.rootdir</name>
<value>hdfs://namenode_hostname:port/path</value>
</property>
การกำหนดค่าแค็ตตาล็อก
หากคุณต้องการปรับแต่งบริการแค็ตตาล็อกให้คัดลอก $path/to/Tajo/conf/catalogsite.xml.template ถึง $path/to/Tajo/conf/catalog-site.xml และเพิ่มการกำหนดค่าใด ๆ ต่อไปนี้ตามต้องการ
ตัวอย่างเช่นถ้าคุณใช้ “Hive catalog store” เพื่อเข้าถึง Tajo จากนั้นการกำหนดค่าควรเป็นดังต่อไปนี้ -
<property>
<name>tajo.catalog.store.class</name>
<value>org.apache.tajo.catalog.store.HCatalogStore</value>
</property>
หากต้องการจัดเก็บ MySQL แคตตาล็อกจากนั้นใช้การเปลี่ยนแปลงต่อไปนี้ -
<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>
ในทำนองเดียวกันคุณสามารถลงทะเบียนแค็ตตาล็อกอื่น ๆ ที่รองรับ Tajo ในไฟล์การกำหนดค่า
การกำหนดค่าผู้ปฏิบัติงาน
ตามค่าเริ่มต้น TajoWorker จะเก็บข้อมูลชั่วคราวบนระบบไฟล์ภายในเครื่อง ถูกกำหนดไว้ในไฟล์“ tajo-site.xml” ดังนี้ -
<property>
<name>tajo.worker.tmpdir.locations</name>
<value>/disk1/tmpdir,/disk2/tmpdir,/disk3/tmpdir</value>
</property>
ในการเพิ่มขีดความสามารถในการรันงานของทรัพยากรผู้ปฏิบัติงานแต่ละรายการให้เลือกการกำหนดค่าต่อไปนี้ -
<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>
ในการทำให้ผู้ปฏิบัติงาน Tajo ทำงานในโหมดเฉพาะให้เลือกการกำหนดค่าต่อไปนี้ -
<property>
<name>tajo.worker.resource.dedicated</name>
<value>true</value>
</property>
ในบทนี้เราจะเข้าใจคำสั่งของ Tajo Shell โดยละเอียด
ในการดำเนินการคำสั่งเปลือก Tajo คุณต้องเริ่มต้นเซิร์ฟเวอร์ Tajo และเชลล์ Tajo โดยใช้คำสั่งต่อไปนี้ -
เริ่มเซิร์ฟเวอร์
$ bin/start-tajo.sh
เริ่มเชลล์
$ bin/tsql
คำสั่งข้างต้นพร้อมสำหรับการดำเนินการแล้ว
คำสั่ง Meta
ให้เราพูดคุยเกี่ยวกับ Meta Commands. คำสั่ง Tsql meta เริ่มต้นด้วยแบ็กสแลช(‘\’).
คำสั่งช่วยเหลือ
“\?” คำสั่งใช้เพื่อแสดงตัวเลือกวิธีใช้
Query
default> \?
Result
ข้างบน \?คำสั่งแสดงรายการตัวเลือกการใช้งานพื้นฐานทั้งหมดใน Tajo คุณจะได้รับผลลัพธ์ต่อไปนี้ -
ฐานข้อมูลรายการ
ในการแสดงรายการฐานข้อมูลทั้งหมดใน Tajo ให้ใช้คำสั่งต่อไปนี้ -
Query
default> \l
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
information_schema
default
ในปัจจุบันเรายังไม่ได้สร้างฐานข้อมูลใด ๆ ดังนั้นจึงแสดงฐานข้อมูล Tajo ที่สร้างขึ้นสองฐานข้อมูล
ฐานข้อมูลปัจจุบัน
\c ใช้เพื่อแสดงชื่อฐานข้อมูลปัจจุบัน
Query
default> \c
Result
ขณะนี้คุณเชื่อมต่อกับฐานข้อมูล "ค่าเริ่มต้น" เป็นผู้ใช้ "ชื่อผู้ใช้"
แสดงรายการฟังก์ชันในตัว
หากต้องการแสดงรายการฟังก์ชันในตัวทั้งหมดให้พิมพ์แบบสอบถามดังนี้ -
Query
default> \df
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
อธิบายฟังก์ชัน
\df function name - แบบสอบถามนี้ส่งกลับคำอธิบายทั้งหมดของฟังก์ชันที่กำหนด
Query
default> \df sqrt
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
ออกจาก Terminal
หากต้องการออกจากเทอร์มินัลให้พิมพ์แบบสอบถามต่อไปนี้ -
Query
default> \q
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
bye!
คำสั่งผู้ดูแลระบบ
เปลือกทาโจให้ \admin ตัวเลือกเพื่อแสดงรายการคุณลักษณะของผู้ดูแลระบบทั้งหมด
Query
default> \admin
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
ข้อมูลคลัสเตอร์
หากต้องการแสดงข้อมูลคลัสเตอร์ใน Tajo ให้ใช้แบบสอบถามต่อไปนี้
Query
default> \admin -cluster
Result
คุณจะได้รับผลลัพธ์ต่อไปนี้ -
แสดงต้นแบบ
แบบสอบถามต่อไปนี้แสดงข้อมูลหลักปัจจุบัน
Query
default> \admin -showmasters
Result
localhost
ในทำนองเดียวกันคุณสามารถลองใช้คำสั่งอื่น ๆ ของผู้ดูแลระบบได้
ตัวแปรเซสชัน
ไคลเอนต์ Tajo เชื่อมต่อกับ Master ผ่านรหัสเซสชันที่ไม่ซ้ำกัน เซสชันจะใช้งานได้จนกว่าไคลเอ็นต์จะถูกตัดการเชื่อมต่อหรือหมดอายุ
คำสั่งต่อไปนี้ใช้เพื่อแสดงรายการตัวแปรเซสชันทั้งหมด
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'
\set key val จะตั้งชื่อตัวแปรเซสชัน key ด้วยค่า val. ตัวอย่างเช่น,
Query
default> \set ‘current_database’='default'
Result
usage: \set [[NAME] VALUE]
ที่นี่คุณสามารถกำหนดคีย์และค่าในไฟล์ \setคำสั่ง หากคุณต้องการยกเลิกการเปลี่ยนแปลงให้ใช้ไฟล์\unset คำสั่ง
ในการดำเนินการค้นหาในเชลล์ Tajo ให้เปิดเทอร์มินัลของคุณและย้ายไปที่ไดเร็กทอรีที่ติดตั้ง Tajo จากนั้นพิมพ์คำสั่งต่อไปนี้
$ bin/tsql
ตอนนี้คุณจะเห็นการตอบสนองดังที่แสดงในโปรแกรมต่อไปนี้ -
default>
ตอนนี้คุณสามารถดำเนินการค้นหาของคุณได้แล้ว มิฉะนั้นคุณสามารถเรียกใช้การสืบค้นของคุณผ่านแอปพลิเคชันเว็บคอนโซลไปยัง URL ต่อไปนี้ -http://localhost:26080/
ประเภทข้อมูลดั้งเดิม
Apache Tajo รองรับรายการประเภทข้อมูลดั้งเดิมต่อไปนี้ -
ส. | ประเภทข้อมูลและคำอธิบาย |
---|---|
1 | integer ใช้สำหรับจัดเก็บค่าจำนวนเต็มด้วยพื้นที่เก็บข้อมูล 4 ไบต์ |
2 | tinyint ค่าจำนวนเต็มเล็ก ๆ คือ 1 ไบต์ |
3 | smallint ใช้สำหรับจัดเก็บค่าขนาดเล็กจำนวนเต็ม 2 ไบต์ |
4 | bigint ค่าจำนวนเต็มช่วงใหญ่มีพื้นที่เก็บข้อมูล 8 ไบต์ |
5 | boolean ส่งคืนจริง / เท็จ |
6 | real ใช้สำหรับจัดเก็บมูลค่าที่แท้จริง ขนาด 4 ไบต์ |
7 | float ค่าความแม่นยำของจุดลอยตัวซึ่งมีพื้นที่จัดเก็บ 4 หรือ 8 ไบต์ |
8 | double ค่าความแม่นยำสองจุดที่จัดเก็บใน 8 ไบต์ |
9 | char[(n)] ค่าตัวละคร. |
10 | varchar[(n)] ข้อมูลที่ไม่ใช่ Unicode ที่มีความยาวตัวแปร |
11 | number ค่าทศนิยม |
12 | binary ค่าไบนารี |
13 | date วันที่ในปฏิทิน (ปีเดือนวัน) Example - วันที่ '2016-08-22' |
14 | time เวลาของวัน (ชั่วโมงนาทีวินาทีมิลลิวินาที) โดยไม่มีเขตเวลา ค่าประเภทนี้จะถูกแยกวิเคราะห์และแสดงผลในเขตเวลาของเซสชัน |
15 | timezone เวลาของวัน (ชั่วโมงนาทีวินาทีมิลลิวินาที) พร้อมเขตเวลา ค่าประเภทนี้แสดงผลโดยใช้เขตเวลาจากค่า Example - TIME '01: 02: 03.456 Asia / kolkata ' |
16 | timestamp ทันทีในเวลาที่มีวันที่และเวลาของวันโดยไม่มีเขตเวลา Example - TIMESTAMP '2016-08-22 03: 04: 05.321' |
17 | text ข้อความ Unicode ที่มีความยาวตัวแปร |
ตัวดำเนินการต่อไปนี้ใช้ใน Tajo เพื่อดำเนินการตามที่ต้องการ
ส. | ตัวดำเนินการและคำอธิบาย |
---|---|
1 | ตัวดำเนินการเลขคณิต Presto รองรับตัวดำเนินการเลขคณิตเช่น +, -, *, /,% |
2 | ตัวดำเนินการเชิงสัมพันธ์ <,>, <=,> =, =, <> |
3 | ตัวดำเนินการทางตรรกะ และหรือไม่ |
4 | ตัวดำเนินการสตริง '||' ตัวดำเนินการดำเนินการต่อสายอักขระ |
5 | ตัวดำเนินการช่วง ตัวดำเนินการช่วงใช้เพื่อทดสอบค่าในช่วงเฉพาะ Tajo รองรับระหว่างนี้เป็นโมฆะไม่ใช่ตัวดำเนินการที่เป็นโมฆะ |
ณ ตอนนี้คุณทราบถึงการเรียกใช้แบบสอบถามพื้นฐานง่ายๆบน Tajo ในสองสามบทถัดไปเราจะพูดถึงฟังก์ชัน SQL ต่อไปนี้ -
- ฟังก์ชันคณิตศาสตร์
- ฟังก์ชันสตริง
- ฟังก์ชัน DateTime
- ฟังก์ชัน JSON
ฟังก์ชันทางคณิตศาสตร์ทำงานกับสูตรทางคณิตศาสตร์ ตารางต่อไปนี้อธิบายรายการฟังก์ชันโดยละเอียด
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | เอบีเอส (x) ส่งกลับค่าสัมบูรณ์ของ x |
2 | cbrt (x) ส่งคืนคิวบ์รูทของ x |
3 | เพดาน (x) ส่งกลับค่า x ที่ปัดเศษขึ้นเป็นจำนวนเต็มที่ใกล้เคียงที่สุด |
4 | ชั้น (x) ส่งคืน x ปัดลงเป็นจำนวนเต็มที่ใกล้เคียงที่สุด |
5 | ปี่ () ส่งคืนค่า pi ผลลัพธ์จะถูกส่งกลับเป็นค่าสองเท่า |
6 | เรเดียน (x) แปลงมุม x เป็นองศาเรเดียน |
7 | องศา (x) ส่งกลับค่าองศาสำหรับ x |
8 | ธาร (x, p) ส่งคืนพลังของ value'p 'เป็นค่า x |
9 | div (x, y) ส่งคืนผลลัพธ์การหารสำหรับค่าจำนวนเต็ม x, y สองค่าที่กำหนด |
10 | ประสบการณ์ (x) ส่งคืนหมายเลขของออยเลอร์ e ยกกำลังขึ้นเป็นตัวเลข |
11 | sqrt (x) ส่งคืนค่ารากที่สองของ x |
12 | เครื่องหมาย (x) ส่งกลับฟังก์ชัน signum ของ x นั่นคือ -
|
13 | สมัย (n, m) ส่งกลับโมดูลัส (เศษที่เหลือ) ของ n หารด้วย m |
14 | รอบ (x) ส่งกลับค่าปัดเศษสำหรับ x |
15 | cos (x) ส่งคืนค่าโคไซน์ (x) |
16 | asin (x) ส่งกลับค่าไซน์ผกผัน (x) |
17 | acos (x) ส่งกลับค่าโคไซน์ผกผัน (x) |
18 | atan (x) ส่งกลับค่าแทนเจนต์ผกผัน (x) |
19 | atan2 (y, x) ส่งกลับค่าแทนเจนต์ผกผัน (y / x) |
ฟังก์ชันชนิดข้อมูล
ตารางต่อไปนี้แสดงฟังก์ชันประเภทข้อมูลที่มีใน Apache Tajo
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | to_bin (x) ส่งกลับการแทนค่าฐานสองของจำนวนเต็ม |
2 | to_char (int ข้อความ) แปลงจำนวนเต็มเป็นสตริง |
3 | to_hex (x) แปลงค่า x เป็นเลขฐานสิบหก |
ตารางต่อไปนี้แสดงรายการฟังก์ชันสตริงใน Tajo
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | concat (string1, ... , stringN) เชื่อมต่อสตริงที่กำหนด |
2 | ความยาว (สตริง) ส่งกลับความยาวของสตริงที่กำหนด |
3 | ต่ำกว่า (สตริง) ส่งคืนรูปแบบตัวพิมพ์เล็กสำหรับสตริง |
4 | บน (สตริง) ส่งคืนรูปแบบตัวพิมพ์ใหญ่สำหรับสตริงที่กำหนด |
5 | ascii (ข้อความสตริง) ส่งคืนรหัส ASCII ของอักขระตัวแรกของข้อความ |
6 | bit_length (ข้อความสตริง) ส่งคืนจำนวนบิตในสตริง |
7 | char_length (ข้อความสตริง) ส่งคืนจำนวนอักขระในสตริง |
8 | octet_length (ข้อความสตริง) ส่งคืนจำนวนไบต์ในสตริง |
9 | แยกย่อย (ข้อความป้อนข้อความวิธีการ) คำนวณ Digestแฮชของสตริง ที่นี่วิธีการอาร์กิวเมนต์ที่สองหมายถึงวิธีแฮช |
10 | initcap (ข้อความสตริง) แปลงอักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ |
11 | md5 (ข้อความสตริง) คำนวณ MD5 แฮชของสตริง |
12 | ซ้าย (ข้อความสตริงขนาด int) ส่งคืนอักขระ n ตัวแรกในสตริง |
13 | ขวา (ข้อความสตริงขนาด int) ส่งคืนอักขระ n ตัวสุดท้ายในสตริง |
14 | ค้นหา (ข้อความต้นฉบับข้อความเป้าหมาย start_index) ส่งคืนตำแหน่งของสตริงย่อยที่ระบุ |
15 | strposb (ข้อความต้นฉบับข้อความเป้าหมาย) ส่งคืนตำแหน่งไบนารีของสตริงย่อยที่ระบุ |
16 | substr (ข้อความต้นทางดัชนีเริ่มต้นความยาว) ส่งคืนสตริงย่อยสำหรับความยาวที่ระบุ |
17 | ตัดแต่ง (ข้อความสตริง [ข้อความอักขระ]) ลบอักขระ (ช่องว่างโดยค่าเริ่มต้น) จากจุดเริ่มต้น / จุดสิ้นสุด / ปลายทั้งสองด้านของสตริง |
18 | Split_part (ข้อความสตริงข้อความตัวคั่นฟิลด์ int) แยกสตริงบนตัวคั่นและส่งคืนฟิลด์ที่กำหนด (นับจากหนึ่ง) |
19 | regexp_replace (ข้อความสตริงข้อความรูปแบบข้อความแทนที่) แทนที่สตริงย่อยที่ตรงกับรูปแบบนิพจน์ทั่วไปที่กำหนด |
20 | ย้อนกลับ (สตริง) ดำเนินการย้อนกลับสำหรับสตริง |
Apache Tajo รองรับฟังก์ชัน DateTime ดังต่อไปนี้
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | add_days (วันที่หรือเวลาประทับวัน int ส่งคืนวันที่เพิ่มด้วยค่าวันที่กำหนด |
2 | add_months (วันที่หรือเวลาประทับเดือน int) ส่งคืนวันที่เพิ่มด้วยค่าเดือนที่กำหนด |
3 | วันที่ปัจจุบัน() ส่งคืนวันที่ของวันนี้ |
4 | current_time () คืนเวลาของวันนี้ |
5 | สารสกัด (ศตวรรษจากวันที่ / ประทับเวลา) แยกศตวรรษจากพารามิเตอร์ที่กำหนด |
6 | แยก (วันจากวันที่ / ประทับเวลา) แยกวันจากพารามิเตอร์ที่กำหนด |
7 | แยก (ทศวรรษจากวันที่ / ประทับเวลา) แยกทศวรรษจากพารามิเตอร์ที่กำหนด |
8 | สารสกัด (วันที่ลงวันที่ / ประทับเวลา) แยกวันในสัปดาห์จากพารามิเตอร์ที่กำหนด |
9 | แยก (doy จากวันที่ / ประทับเวลา) แยกวันของปีจากพารามิเตอร์ที่กำหนด |
10 | เลือกสารสกัด (ชั่วโมงจากการประทับเวลา) แยกชั่วโมงจากพารามิเตอร์ที่กำหนด |
11 | เลือกสารสกัด (isodow จากการประทับเวลา) แยกวันในสัปดาห์จากพารามิเตอร์ที่กำหนด ซึ่งเหมือนกับ dow ยกเว้นวันอาทิตย์ ซึ่งตรงกับวันที่ ISO 8601 ของสัปดาห์ |
12 | เลือกสารสกัด (isoyear จากวันที่) แยกปี ISO จากวันที่ระบุ ปี ISO อาจแตกต่างจากปีเกรกอเรียน |
13 | สารสกัด (ไมโครวินาทีจากเวลา) แยกไมโครวินาทีจากพารามิเตอร์ที่กำหนด ฟิลด์วินาทีรวมถึงส่วนเศษส่วนคูณด้วย 1,000,000 |
14 | สารสกัด (สหัสวรรษจากการประทับเวลา) แยกสหัสวรรษจากพารามิเตอร์ที่กำหนดหนึ่งสหัสวรรษสอดคล้องกับ 1,000 ปี ดังนั้นสหัสวรรษที่สามจึงเริ่มตั้งแต่วันที่ 1 มกราคม 2544 |
15 | สารสกัด (มิลลิวินาทีจากเวลา) แยกมิลลิวินาทีจากพารามิเตอร์ที่กำหนด |
16 | แยก (นาทีจากการประทับเวลา) แยกนาทีจากพารามิเตอร์ที่กำหนด |
17 | แยก (ไตรมาสจากการประทับเวลา) แยกไตรมาสของปี (1 - 4) จากพารามิเตอร์ที่กำหนด |
18 | date_part (ข้อความในฟิลด์วันที่ต้นทางหรือประทับเวลาหรือเวลา) แยกฟิลด์วันที่ออกจากข้อความ |
19 | ตอนนี้ () ส่งคืนการประทับเวลาปัจจุบัน |
20 | to_char (ประทับเวลาจัดรูปแบบข้อความ) แปลงการประทับเวลาเป็นข้อความ |
21 | to_date (ข้อความ src, รูปแบบข้อความ) แปลงข้อความเป็นวันที่ |
22 | to_timestamp (ข้อความ src, รูปแบบข้อความ) แปลงข้อความเป็นการประทับเวลา |
ฟังก์ชัน JSON แสดงอยู่ในตารางต่อไปนี้ -
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | json_extract_path_text (js บนข้อความข้อความ json_path) แยกสตริง JSON จากสตริง JSON ตามเส้นทาง json ที่ระบุ |
2 | json_array_get (ข้อความ json_array ดัชนี int4) ส่งคืนองค์ประกอบที่ดัชนีที่ระบุลงในอาร์เรย์ JSON |
3 | json_array_contains (ข้อความอาร์เรย์ json_ ค่าใด ๆ ) ตรวจสอบว่าค่าที่กำหนดมีอยู่ในอาร์เรย์ JSON หรือไม่ |
4 | json_array_length (ข้อความ json_ar ray) ส่งกลับความยาวของอาร์เรย์ json |
ส่วนนี้อธิบายถึงคำสั่ง Tajo DDL Tajo มีฐานข้อมูลในตัวชื่อdefault.
สร้างคำชี้แจงฐานข้อมูล
Create Databaseคือคำสั่งที่ใช้ในการสร้างฐานข้อมูลใน Tajo ไวยากรณ์สำหรับคำสั่งนี้มีดังนี้ -
CREATE DATABASE [IF NOT EXISTS] <database_name>
แบบสอบถาม
default> default> create database if not exists test;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
OK
ฐานข้อมูลคือเนมสเปซใน Tajo ฐานข้อมูลสามารถมีหลายตารางที่มีชื่อเฉพาะ
แสดงฐานข้อมูลปัจจุบัน
ในการตรวจสอบชื่อฐานข้อมูลปัจจุบันให้ใช้คำสั่งต่อไปนี้ -
แบบสอบถาม
default> \c
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
You are now connected to database "default" as user “user1".
default>
เชื่อมต่อกับฐานข้อมูล
ณ ตอนนี้คุณได้สร้างฐานข้อมูลชื่อ“ test” แล้ว ไวยากรณ์ต่อไปนี้ใช้เพื่อเชื่อมต่อฐานข้อมูล“ test”
\c <database name>
แบบสอบถาม
default> \c test
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
You are now connected to database "test" as user “user1”.
test>
ตอนนี้คุณสามารถเห็นการเปลี่ยนแปลงพรอมต์จากฐานข้อมูลเริ่มต้นเป็นการทดสอบฐานข้อมูล
วางฐานข้อมูล
ในการวางฐานข้อมูลให้ใช้ไวยากรณ์ต่อไปนี้ -
DROP DATABASE <database-name>
แบบสอบถาม
test> \c default
You are now connected to database "default" as user “user1".
default> drop database test;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
OK
ตารางคือมุมมองเชิงตรรกะของแหล่งข้อมูลเดียว ประกอบด้วยสคีมาโลจิคัลพาร์ติชัน URL และคุณสมบัติต่างๆ ตาราง Tajo สามารถเป็นไดเร็กทอรีใน HDFS ไฟล์เดียวตาราง HBase หนึ่งตารางหรือตาราง RDBMS
Tajo รองรับตารางสองประเภทต่อไปนี้ -
- ตารางภายนอก
- ตารางภายใน
ตารางภายนอก
ตารางภายนอกต้องการคุณสมบัติตำแหน่งเมื่อสร้างตาราง ตัวอย่างเช่นหากข้อมูลของคุณมีอยู่แล้วเป็นไฟล์ Text / JSON หรือตาราง HBase คุณสามารถลงทะเบียนเป็นตารางภายนอกของ Tajo
แบบสอบถามต่อไปนี้เป็นตัวอย่างของการสร้างตารางภายนอก
create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';
ที่นี่
External keyword- ใช้เพื่อสร้างตารางภายนอก สิ่งนี้ช่วยในการสร้างตารางในตำแหน่งที่ระบุ
ตัวอย่างหมายถึงชื่อตาราง
Location- เป็นไดเร็กทอรีสำหรับ HDFS, Amazon S3, HBase หรือระบบไฟล์ในเครื่อง ในการกำหนดคุณสมบัติตำแหน่งสำหรับไดเร็กทอรีให้ใช้ตัวอย่าง URI ด้านล่าง -
HDFS - hdfs: // localhost: port / path / to / table
Amazon S3 - s3: // ที่เก็บชื่อ / ตาราง
local file system - ไฟล์: /// path / to / table
Openstack Swift - รวดเร็ว: // bucket-name / table
คุณสมบัติของตาราง
ตารางภายนอกมีคุณสมบัติดังต่อไปนี้ -
TimeZone - ผู้ใช้สามารถระบุเขตเวลาสำหรับการอ่านหรือเขียนตารางได้
Compression format- ใช้เพื่อทำให้ข้อมูลมีขนาดกะทัดรัด ตัวอย่างเช่นไฟล์ text / json ใช้compression.codec ทรัพย์สิน.
ตารางภายใน
ตารางภายในเรียกอีกอย่างว่าไฟล์ Managed Table. มันถูกสร้างขึ้นในตำแหน่งทางกายภาพที่กำหนดไว้ล่วงหน้าที่เรียกว่า Tablespace
ไวยากรณ์
create table table1(col1 int,col2 text);
ตามค่าเริ่มต้น Tajo จะใช้“ tajo.warehouse.directory” ที่อยู่ใน“ conf / tajo-site.xml” ในการกำหนดตำแหน่งใหม่สำหรับตารางคุณสามารถใช้การกำหนดค่า Tablespace
Tablespace
Tablespace ใช้เพื่อกำหนดตำแหน่งในระบบจัดเก็บข้อมูล รองรับเฉพาะตารางภายในเท่านั้น คุณสามารถเข้าถึงพื้นที่ตารางตามชื่อของพวกเขา แต่ละช้อนโต๊ะสามารถใช้ประเภทการจัดเก็บที่แตกต่างกัน หากคุณไม่ได้ระบุพื้นที่ตาราง Tajo จะใช้พื้นที่ตารางเริ่มต้นในไดเรกทอรีราก
การกำหนดค่า Tablespace
คุณมี “conf/tajo-site.xml.template”ใน Tajo คัดลอกไฟล์และเปลี่ยนชื่อเป็น“storagesite.json”. ไฟล์นี้จะทำหน้าที่เป็นส่วนกำหนดค่าสำหรับ Tablespaces รูปแบบข้อมูล Tajo ใช้การกำหนดค่าต่อไปนี้ -
การกำหนดค่า HDFS
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
การกำหนดค่า HBase
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
"uri": “hbase:zk://quorum1:port,quorum2:port/"
}
}
}
การกำหนดค่าไฟล์ข้อความ
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": {
“uri”: “hdfs://localhost:9000/path/to/Tajo”
}
}
}
การสร้าง Tablespace
บันทึกตารางภายในของ Tajo สามารถเข้าถึงได้จากตารางอื่นเท่านั้น คุณสามารถกำหนดค่าได้ด้วยพื้นที่ตาราง
ไวยากรณ์
CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name]
[using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]
ที่นี่
IF NOT EXISTS - หลีกเลี่ยงข้อผิดพลาดหากยังไม่ได้สร้างตารางเดียวกัน
TABLESPACE - ประโยคนี้ใช้เพื่อกำหนดชื่อพื้นที่ตาราง
Storage type - ข้อมูล Tajo รองรับรูปแบบเช่น text, JSON, HBase, Parquet, Sequencefile และ ORC
AS select statement - เลือกบันทึกจากตารางอื่น
กำหนดค่า Tablespace
เริ่มบริการ Hadoop ของคุณและเปิดไฟล์ “conf/storage-site.json”จากนั้นเพิ่มการเปลี่ยนแปลงต่อไปนี้ -
$ vi conf/storage-site.json {
"spaces": {
“space1”: {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
ที่นี่ Tajo จะอ้างถึงข้อมูลจากตำแหน่ง HDFS และ space1คือชื่อตาราง หากคุณไม่เริ่มบริการ Hadoop คุณจะไม่สามารถลงทะเบียนพื้นที่ตารางได้
แบบสอบถาม
default> create table table1(num1 int,num2 text,num3 float) tablespace space1;
คำค้นหาด้านบนสร้างตารางชื่อ "table1" และ "space1" หมายถึงชื่อพื้นที่ตาราง
รูปแบบข้อมูล
Tajo รองรับรูปแบบข้อมูล มาดูแต่ละรูปแบบโดยละเอียดทีละรูปแบบ
ข้อความ
ไฟล์ข้อความธรรมดาของค่าที่คั่นด้วยอักขระแสดงถึงชุดข้อมูลแบบตารางที่ประกอบด้วยแถวและคอลัมน์ แต่ละแถวเป็นบรรทัดข้อความธรรมดา
การสร้างตาราง
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’;
ที่นี่ “customers.csv” ไฟล์หมายถึงไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาคซึ่งอยู่ในไดเร็กทอรีการติดตั้ง Tajo
ในการสร้างตารางภายในโดยใช้รูปแบบข้อความให้ใช้แบบสอบถามต่อไปนี้ -
default> create table customer(id int,name text,address text,age int) using text;
ในข้อความค้นหาข้างต้นคุณยังไม่ได้กำหนดพื้นที่ตารางใด ๆ ดังนั้นมันจะใช้พื้นที่ตารางเริ่มต้นของ Tajo
คุณสมบัติ
รูปแบบไฟล์ข้อความมีคุณสมบัติดังต่อไปนี้ -
text.delimiter- นี่คืออักขระตัวคั่น ค่าเริ่มต้นคือ '|'
compression.codec- นี่คือรูปแบบการบีบอัด โดยค่าเริ่มต้นจะปิดใช้งาน คุณสามารถเปลี่ยนการตั้งค่าโดยใช้อัลกอริทึมที่ระบุ
timezone - โต๊ะสำหรับอ่านหนังสือหรือเขียน
text.error-tolerance.max-num - จำนวนระดับความอดทนสูงสุด
text.skip.headerlines - จำนวนบรรทัดส่วนหัวต่อการข้าม
text.serde - นี่คือคุณสมบัติการทำให้เป็นอนุกรม
JSON
Apache Tajo รองรับรูปแบบ JSON สำหรับการสืบค้นข้อมูล Tajo ถือว่าออบเจ็กต์ JSON เป็นบันทึก SQL หนึ่งวัตถุเท่ากับหนึ่งแถวในตาราง Tajo ลองพิจารณา“ array.json” ดังนี้ -
$ hdfs dfs -cat /json/array.json {
"num1" : 10,
"num2" : "simple json array",
"num3" : 50.5
}
หลังจากคุณสร้างไฟล์นี้แล้วให้เปลี่ยนไปใช้เชลล์ Tajo และพิมพ์แบบสอบถามต่อไปนี้เพื่อสร้างตารางโดยใช้รูปแบบ JSON
แบบสอบถาม
default> create external table sample (num1 int,num2 text,num3 float)
using json location ‘json/array.json’;
โปรดจำไว้เสมอว่าข้อมูลไฟล์ต้องตรงกับสคีมาของตาราง มิฉะนั้นคุณสามารถละเว้นชื่อคอลัมน์และใช้ * ซึ่งไม่ต้องการรายการคอลัมน์
ในการสร้างตารางภายในให้ใช้แบบสอบถามต่อไปนี้ -
default> create table sample (num1 int,num2 text,num3 float) using json;
ปาร์เก้
ไม้ปาร์เก้เป็นรูปแบบการจัดเก็บคอลัมน์ Tajo ใช้รูปแบบ Parquet เพื่อการเข้าถึงที่ง่ายรวดเร็วและมีประสิทธิภาพ
การสร้างตาราง
แบบสอบถามต่อไปนี้เป็นตัวอย่างสำหรับการสร้างตาราง -
CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;
รูปแบบไฟล์ปาร์เก้มีคุณสมบัติดังต่อไปนี้ -
parquet.block.size - ขนาดของกลุ่มแถวที่ถูกบัฟเฟอร์ในหน่วยความจำ
parquet.page.size - ขนาดหน้าสำหรับการบีบอัด
parquet.compression - อัลกอริทึมการบีบอัดที่ใช้ในการบีบอัดหน้า
parquet.enable.dictionary - ค่าบูลีนคือการเปิด / ปิดการเข้ารหัสพจนานุกรม
RCFile
RCFile คือไฟล์ Record Columnar ประกอบด้วยคู่คีย์ / ค่าไบนารี
การสร้างตาราง
แบบสอบถามต่อไปนี้เป็นตัวอย่างสำหรับการสร้างตาราง -
CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;
RCFile มีคุณสมบัติดังต่อไปนี้ -
rcfile.serde - คลาส deserializer ที่กำหนดเอง
compression.codec - อัลกอริทึมการบีบอัด
rcfile.null - อักขระ NULL
SequenceFile
SequenceFile เป็นรูปแบบไฟล์พื้นฐานใน Hadoop ซึ่งประกอบด้วยคู่คีย์ / ค่า
การสร้างตาราง
แบบสอบถามต่อไปนี้เป็นตัวอย่างสำหรับการสร้างตาราง -
CREATE TABLE seq(num1 int,num2 text,num3 float) USING sequencefile;
ไฟล์ลำดับนี้มีความเข้ากันได้ของ Hive สิ่งนี้สามารถเขียนใน Hive เป็น
CREATE TABLE table1 (id int, name string, score float, type string)
STORED AS sequencefile;
ORC
ORC (Optimized Row Columnar) คือรูปแบบการจัดเก็บคอลัมน์จาก Hive
การสร้างตาราง
แบบสอบถามต่อไปนี้เป็นตัวอย่างสำหรับการสร้างตาราง -
CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;
รูปแบบ ORC มีคุณสมบัติดังต่อไปนี้ -
orc.max.merge.distance - ไฟล์ ORC ถูกอ่านมันจะรวมเข้าด้วยกันเมื่อระยะทางต่ำลง
orc.stripe.size - นี่คือขนาดของแต่ละแถบ
orc.buffer.size - ค่าเริ่มต้นคือ 256KB
orc.rowindex.stride - นี่คือการก้าวเดินของดัชนี ORC ในจำนวนแถว
ในบทที่แล้วคุณได้เข้าใจวิธีสร้างตารางใน Tajo แล้ว บทนี้อธิบายเกี่ยวกับคำสั่ง SQL ใน Tajo
สร้างคำสั่งตาราง
ก่อนที่จะย้ายไปสร้างตารางให้สร้างไฟล์ข้อความ“ students.csv” ในพา ธ ไดเร็กทอรีการติดตั้ง Tajo ดังนี้ -
students.csv
Id | ชื่อ | ที่อยู่ | อายุ | เครื่องหมาย |
---|---|---|---|---|
1 | อดัม | 23 ถนนใหม่ | 21 | 90 |
2 | Amit | 12 Old Street | 13 | 95 |
3 | บ๊อบ | 10 ครอสสตรีท | 12 | 80 |
4 | เดวิด | 15 Express Avenue | 12 | 85 |
5 | Esha | 20 Garden Street | 13 | 50 |
6 | คงคา | 25 North Street | 12 | 55 |
7 | แจ็ค | 2 Park Street | 12 | 60 |
8 | ลีน่า | 24 South Street | 12 | 70 |
9 | แมรี่ | 5 West Street | 12 | 75 |
10 | ปีเตอร์ | 16 พาร์คอเวนิว | 12 | 95 |
หลังจากสร้างไฟล์แล้วให้ย้ายไปที่เทอร์มินัลและเริ่มเซิร์ฟเวอร์ Tajo และเชลล์ทีละรายการ
สร้างฐานข้อมูล
สร้างฐานข้อมูลใหม่โดยใช้คำสั่งต่อไปนี้ -
แบบสอบถาม
default> create database sampledb;
OK
เชื่อมต่อกับฐานข้อมูล“ ตัวอย่าง” ซึ่งสร้างขึ้นในขณะนี้
default> \c sampledb
You are now connected to database "sampledb" as user “user1”.
จากนั้นสร้างตารางใน "ตัวอย่าง" ดังนี้ -
แบบสอบถาม
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’;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
OK
ที่นี่ตารางภายนอกถูกสร้างขึ้น ตอนนี้คุณต้องป้อนตำแหน่งไฟล์ หากคุณต้องกำหนดตารางจาก hdfs ให้ใช้ hdfs แทนไฟล์
ถัดไป “students.csv”ไฟล์มีค่าที่คั่นด้วยลูกน้ำ text.delimiter ฟิลด์ถูกกำหนดด้วย ","
ตอนนี้คุณได้สร้าง "mytable" ใน "sampledb" เรียบร้อยแล้ว
แสดงตาราง
หากต้องการแสดงตารางใน Tajo ให้ใช้แบบสอบถามต่อไปนี้
แบบสอบถาม
sampledb> \d
mytable
sampledb> \d mytable
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
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
ตารางรายการ
ในการดึงข้อมูลทั้งหมดในตารางให้พิมพ์แบบสอบถามต่อไปนี้ -
แบบสอบถาม
sampledb> select * from mytable;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
แทรกคำชี้แจงตาราง
Tajo ใช้ไวยากรณ์ต่อไปนี้เพื่อแทรกระเบียนในตาราง
ไวยากรณ์
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 คล้ายกับ INSERT INTO SELECT คำสั่งของ SQL
แบบสอบถาม
มาสร้างตารางเพื่อเขียนทับข้อมูลตารางของตารางที่มีอยู่
sampledb> create table test(sno int,name text,addr text,age int,mark int);
OK
sampledb> \d
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
mytable
test
แทรกบันทึก
หากต้องการแทรกระเบียนในตาราง "ทดสอบ" ให้พิมพ์แบบสอบถามต่อไปนี้
แบบสอบถาม
sampledb> insert overwrite into test select * from mytable;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
Progress: 100%, response time: 0.518 sec
ที่นี่ระเบียน "mytable" จะเขียนทับตาราง "test" หากคุณไม่ต้องการสร้างตาราง "test" ให้กำหนดตำแหน่งเส้นทางจริงตามที่กล่าวไว้ในตัวเลือกอื่นสำหรับการแทรกคิวรีทันที
ดึงข้อมูลบันทึก
ใช้แบบสอบถามต่อไปนี้เพื่อแสดงรายการระเบียนทั้งหมดในตาราง "ทดสอบ" -
แบบสอบถาม
sampledb> select * from test;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
คำสั่งนี้ใช้เพื่อเพิ่มลบหรือแก้ไขคอลัมน์ของตารางที่มีอยู่
ในการเปลี่ยนชื่อตารางให้ใช้ไวยากรณ์ต่อไปนี้ -
Alter table table1 RENAME TO table2;
แบบสอบถาม
sampledb> alter table test rename to students;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
OK
หากต้องการตรวจสอบชื่อตารางที่เปลี่ยนแปลงให้ใช้แบบสอบถามต่อไปนี้
sampledb> \d
mytable
students
ตอนนี้ตาราง "ทดสอบ" เปลี่ยนเป็นตาราง "นักเรียน"
เพิ่มคอลัมน์
หากต้องการแทรกคอลัมน์ใหม่ในตาราง "นักเรียน" ให้พิมพ์ไวยากรณ์ต่อไปนี้ -
Alter table <table_name> ADD COLUMN <column_name> <data_type>
แบบสอบถาม
sampledb> alter table students add column grade text;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
OK
ตั้งค่าคุณสมบัติ
คุณสมบัตินี้ใช้เพื่อเปลี่ยนคุณสมบัติของตาราง
แบบสอบถาม
sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ;
OK
ที่นี่มีการกำหนดประเภทการบีบอัดและคุณสมบัติตัวแปลงสัญญาณ
ในการเปลี่ยนคุณสมบัติตัวคั่นข้อความให้ใช้สิ่งต่อไปนี้ -
แบบสอบถาม
ALTER TABLE students SET PROPERTY ‘text.delimiter'=',';
OK
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
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
ผลลัพธ์ข้างต้นแสดงให้เห็นว่าคุณสมบัติของตารางมีการเปลี่ยนแปลงโดยใช้คุณสมบัติ“ SET”
เลือกคำชี้แจง
คำสั่ง SELECT ใช้เพื่อเลือกข้อมูลจากฐานข้อมูล
ไวยากรณ์สำหรับคำสั่ง Select มีดังนี้ -
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)] [, …]]
ที่ข้อ
ส่วนคำสั่ง Where ใช้เพื่อกรองระเบียนจากตาราง
แบบสอบถาม
sampledb> select * from mytable where id > 5;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
แบบสอบถามจะส่งคืนระเบียนของนักเรียนที่มี id มากกว่า 5
แบบสอบถาม
sampledb> select * from mytable where name = ‘Peter’;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
Progress: 100%, response time: 0.117 sec
id, name, address, age
-------------------------------
10, Peter, 16 park avenue , 12
ผลลัพธ์จะกรองบันทึกของปีเตอร์เท่านั้น
ข้อแตกต่าง
คอลัมน์ของตารางอาจมีค่าที่ซ้ำกัน สามารถใช้คีย์เวิร์ด DISTINCT เพื่อส่งคืนเฉพาะค่าที่แตกต่างกัน (ต่างกัน)
ไวยากรณ์
SELECT DISTINCT column1,column2 FROM table_name;
แบบสอบถาม
sampledb> select distinct age from mytable;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
Progress: 100%, response time: 0.216 sec
age
-------------------------------
13
12
ข้อความค้นหาจะแสดงอายุที่แตกต่างกันของนักเรียนจาก mytable.
จัดกลุ่มตามข้อ
คำสั่ง GROUP BY ใช้ร่วมกับคำสั่ง SELECT เพื่อจัดเรียงข้อมูลที่เหมือนกันเป็นกลุ่ม
ไวยากรณ์
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;
แบบสอบถาม
select age,sum(mark) as sumofmarks from mytable group by age;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
age, sumofmarks
-------------------------------
13, 145
12, 610
ที่นี่คอลัมน์ "mytable" มีอายุ 2 ประเภทคือ 12 และ 13 ตอนนี้การสืบค้นจะจัดกลุ่มระเบียนตามอายุและสร้างผลรวมของเครื่องหมายสำหรับอายุที่สอดคล้องกันของนักเรียน
มีข้อ
HAVING clause ช่วยให้คุณสามารถระบุเงื่อนไขที่กรองผลลัพธ์ของกลุ่มที่จะปรากฏในผลลัพธ์สุดท้าย WHERE clause วางเงื่อนไขบนคอลัมน์ที่เลือกในขณะที่ HAVING clause วางเงื่อนไขบนกลุ่มที่สร้างโดย GROUP BY clause
ไวยากรณ์
SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]
แบบสอบถาม
sampledb> select age from mytable group by age having sum(mark) > 200;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
age
-------------------------------
12
แบบสอบถามจัดกลุ่มระเบียนตามอายุและส่งกลับอายุเมื่อผลรวมเงื่อนไข (เครื่องหมาย)> 200
เรียงตามข้อ
คำสั่ง ORDER BY ใช้เพื่อจัดเรียงข้อมูลจากน้อยไปมากหรือมากไปหาน้อยโดยยึดตามคอลัมน์อย่างน้อยหนึ่งคอลัมน์ ฐานข้อมูล Tajo จะเรียงลำดับผลลัพธ์จากน้อยไปหามากตามค่าเริ่มต้น
ไวยากรณ์
SELECT column-list FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
แบบสอบถาม
sampledb> select * from mytable where mark > 60 order by name desc;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
การสืบค้นจะส่งคืนชื่อของนักเรียนเหล่านั้นตามลำดับจากมากไปหาน้อยซึ่งมีเครื่องหมายมากกว่า 60
สร้างคำชี้แจงดัชนี
คำสั่ง CREATE INDEX ใช้เพื่อสร้างดัชนีในตาราง ดัชนีใช้สำหรับการดึงข้อมูลอย่างรวดเร็ว เวอร์ชันปัจจุบันรองรับดัชนีสำหรับรูปแบบ TEXT ธรรมดาที่จัดเก็บบน HDFS เท่านั้น
ไวยากรณ์
CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }
แบบสอบถาม
create index student_index on mytable(id);
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
id
———————————————
หากต้องการดูดัชนีที่กำหนดสำหรับคอลัมน์ให้พิมพ์แบบสอบถามต่อไปนี้
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 )
ที่นี่มีการใช้เมธอด TWO_LEVEL_BIN_TREE โดยค่าเริ่มต้นใน Tajo
วางคำสั่งตาราง
Drop Table Statement ใช้เพื่อวางตารางจากฐานข้อมูล
ไวยากรณ์
drop table table name;
แบบสอบถาม
sampledb> drop table mytable;
หากต้องการตรวจสอบว่าตารางหลุดออกจากตารางหรือไม่ให้พิมพ์แบบสอบถามต่อไปนี้
sampledb> \d mytable;
ผลลัพธ์
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
ERROR: relation 'mytable' does not exist
คุณยังสามารถตรวจสอบการสืบค้นโดยใช้คำสั่ง“ \ d” เพื่อแสดงรายการตาราง Tajo ที่มีอยู่
บทนี้จะอธิบายรายละเอียดฟังก์ชันการรวมและหน้าต่าง
ฟังก์ชันการรวม
ฟังก์ชันการรวมสร้างผลลัพธ์เดียวจากชุดของค่าอินพุต ตารางต่อไปนี้อธิบายรายละเอียดของฟังก์ชันการรวม
ส. | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | AVG (ประสบการณ์) เฉลี่ยคอลัมน์ของระเบียนทั้งหมดในแหล่งข้อมูล |
2 | CORR (นิพจน์ 1, นิพจน์ 2) ส่งกลับค่าสัมประสิทธิ์ของความสัมพันธ์ระหว่างชุดของคู่จำนวน |
3 | นับ() ส่งคืนแถวตัวเลข |
4 | MAX (นิพจน์) ส่งคืนค่าที่ใหญ่ที่สุดของคอลัมน์ที่เลือก |
5 | MIN (นิพจน์) ส่งคืนค่าที่น้อยที่สุดของคอลัมน์ที่เลือก |
6 | SUM (นิพจน์) ส่งคืนผลรวมของคอลัมน์ที่กำหนด |
7 | LAST_VALUE (นิพจน์) ส่งคืนค่าสุดท้ายของคอลัมน์ที่กำหนด |
ฟังก์ชันหน้าต่าง
ฟังก์ชัน Window จะดำเนินการกับชุดของแถวและส่งคืนค่าเดียวสำหรับแต่ละแถวจากแบบสอบถาม คำว่า window มีความหมายของ set of row สำหรับฟังก์ชัน
ฟังก์ชัน Window ในแบบสอบถามกำหนดหน้าต่างโดยใช้คำสั่ง OVER ()
OVER() อนุประโยคมีความสามารถดังต่อไปนี้ -
- กำหนดพาร์ติชันของหน้าต่างเพื่อสร้างกลุ่มของแถว (แบ่งส่วนตามข้อ)
- สั่งซื้อแถวภายในพาร์ติชัน (ORDER BY clause)
ตารางต่อไปนี้อธิบายฟังก์ชันของหน้าต่างโดยละเอียด
ฟังก์ชัน | ประเภทผลตอบแทน | คำอธิบาย |
---|---|---|
อันดับ () | int | ส่งคืนอันดับของแถวปัจจุบันที่มีช่องว่าง |
row_num () | int | ส่งคืนแถวปัจจุบันภายในพาร์ติชันโดยนับจาก 1 |
ลูกค้าเป้าหมาย (ค่า [จำนวนเต็มออฟเซ็ต [ค่าเริ่มต้นใด ๆ ]]) | เหมือนกับประเภทอินพุต | ส่งกลับค่าที่ประเมินในแถวที่เป็นออฟเซ็ตแถวหลังจากแถวปัจจุบันภายในพาร์ติชัน หากไม่มีแถวดังกล่าวระบบจะส่งคืนค่าเริ่มต้น |
ความล่าช้า (ค่า [จำนวนเต็มชดเชย [ค่าเริ่มต้นใด ๆ ]]) | เหมือนกับประเภทอินพุต | ส่งกลับค่าที่ประเมินในแถวที่เป็นออฟเซ็ตแถวก่อนแถวปัจจุบันภายในพาร์ติชัน |
ค่าแรก (ค่า) | เหมือนกับประเภทอินพุต | ส่งคืนค่าแรกของแถวอินพุต |
last_value (ค่า) | เหมือนกับประเภทอินพุต | ส่งคืนค่าสุดท้ายของแถวอินพุต |
บทนี้จะอธิบายเกี่ยวกับแบบสอบถามที่สำคัญต่อไปนี้
- Predicates
- Explain
- Join
ให้เราดำเนินการและดำเนินการค้นหา
เปรต
เพรดิเคตคือนิพจน์ที่ใช้ในการประเมินค่าจริง / เท็จและ UNKNOWN เพรดิเคตถูกใช้ในเงื่อนไขการค้นหาของ WHERE clauses และ HAVING clauses และโครงสร้างอื่น ๆ ที่จำเป็นต้องมีค่าบูลีน
ในภาคแสดง
พิจารณาว่าค่าของนิพจน์ที่จะทดสอบตรงกับค่าใด ๆ ในแบบสอบถามย่อยหรือรายการ Subquery คือคำสั่ง SELECT ธรรมดาที่มีชุดผลลัพธ์ของคอลัมน์หนึ่งคอลัมน์และแถวอย่างน้อยหนึ่งแถว คอลัมน์นี้หรือนิพจน์ทั้งหมดในรายการต้องมีชนิดข้อมูลเดียวกันกับนิพจน์ที่จะทดสอบ
Syntax
IN::=
<expression to test> [NOT] IN (<subquery>)
| (<expression1>,...)
Query
select id,name,address from mytable where id in(2,3,4);
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
id, name, address
-------------------------------
2, Amit, 12 old street
3, Bob, 10 cross street
4, David, 15 express avenue
แบบสอบถามส่งคืนระเบียนจาก mytable สำหรับนักเรียน id 2,3 และ 4
Query
select id,name,address from mytable where id not in(2,3,4);
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
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
แบบสอบถามข้างต้นส่งคืนระเบียนจาก mytable โดยที่นักเรียนไม่ได้อยู่ใน 2,3 และ 4
เช่นเดียวกับเพรดิเคต
เพรดิเคต LIKE เปรียบเทียบสตริงที่ระบุในนิพจน์แรกสำหรับการคำนวณค่าสตริงซึ่งอ้างอิงเป็นค่าที่จะทดสอบกับรูปแบบที่กำหนดไว้ในนิพจน์ที่สองสำหรับการคำนวณค่าสตริง
รูปแบบอาจมีสัญลักษณ์แทนเช่น -
สัญลักษณ์ขีดเส้นใต้ (_) ซึ่งสามารถใช้แทนอักขระเดี่ยวใดก็ได้ในค่าที่จะทดสอบ
เครื่องหมายเปอร์เซ็นต์ (%) ซึ่งจะแทนที่สตริงที่มีอักขระศูนย์หรือมากกว่าในค่าที่จะทดสอบ
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
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
id, name, address, age, mark
-------------------------------
1, Adam, 23 new street, 12, 90
2, Amit, 12 old street, 13, 95
แบบสอบถามส่งคืนระเบียนจาก mytable ของนักเรียนที่มีชื่อขึ้นต้นด้วย 'A'
Query
select * from mytable where name like ‘_a%';
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
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
แบบสอบถามส่งคืนระเบียนจาก mytable ของนักเรียนที่มีชื่อขึ้นต้นด้วย 'a' เป็นอักขระตัวที่สอง
การใช้ค่า NULL ในเงื่อนไขการค้นหา
ตอนนี้ให้เราเข้าใจวิธีการใช้ค่า NULL ในเงื่อนไขการค้นหา
Syntax
Predicate
IS [NOT] NULL
Query
select name from mytable where name is not null;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
name
-------------------------------
Adam
Amit
Bob
David
Esha
Ganga
Jack
Leena
Mary
Peter
(10 rows, 0.076 sec, 163 B selected)
ที่นี่ผลลัพธ์เป็นจริงดังนั้นจึงส่งคืนชื่อทั้งหมดจากตาราง
Query
ตอนนี้ให้เราตรวจสอบแบบสอบถามด้วยเงื่อนไข NULL
default> select name from mytable where name is null;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
name
-------------------------------
(0 rows, 0.068 sec, 0 B selected)
อธิบาย
Explainใช้เพื่อขอรับแผนการดำเนินการสืบค้น แสดงการดำเนินการตามแผนเชิงตรรกะและทั่วโลกของคำสั่ง
แบบสอบถามแผนตรรกะ
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
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
ผลลัพธ์คิวรีแสดงรูปแบบแผนตรรกะสำหรับตารางที่กำหนด แผนลอจิกส่งคืนผลลัพธ์สามรายการต่อไปนี้ -
- รายการเป้าหมาย
- สคีมา
- ในสคีมา
แบบสอบถามแผนสากล
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
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
ที่นี่แผนส่วนกลางจะแสดงรหัสบล็อกการดำเนินการลำดับการดำเนินการและข้อมูล
เข้าร่วม
การรวม SQL ใช้เพื่อรวมแถวจากสองตารางขึ้นไป ต่อไปนี้เป็นประเภทต่างๆของการเข้าร่วม SQL -
- การเข้าร่วมภายใน
- {ซ้าย | ขวา | เข้าร่วมเต็มรูปแบบจากภายนอก
- เข้าร่วมข้าม
- เข้าร่วมด้วยตนเอง
- เข้าร่วมตามธรรมชาติ
พิจารณาสองตารางต่อไปนี้เพื่อดำเนินการรวม
Table1 - ลูกค้า
Id | ชื่อ | ที่อยู่ | อายุ |
---|---|---|---|
1 | ลูกค้า 1 | 23 Old Street | 21 |
2 | ลูกค้า 2 | 12 ถนนใหม่ | 23 |
3 | ลูกค้า 3 | 10 Express Avenue | 22 |
4 | ลูกค้า 4 | 15 Express Avenue | 22 |
5 | ลูกค้า 5 | 20 Garden Street | 33 |
6 | ลูกค้า 6 | 21 North Street | 25 |
Table2 - customer_order
Id | รหัสคำสั่งซื้อ | รหัส Emp |
---|---|---|
1 | 1 | 101 |
2 | 2 | 102 |
3 | 3 | 103 |
4 | 4 | 104 |
5 | 5 | 105 |
ให้เราดำเนินการต่อและดำเนินการรวม SQL ในสองตารางด้านบน
การเข้าร่วมภายใน
การรวมภายในจะเลือกแถวทั้งหมดจากทั้งสองตารางเมื่อมีการจับคู่ระหว่างคอลัมน์ในทั้งสองตาราง
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
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
age, empid
-------------------------------
21, 101
23, 102
22, 103
22, 104
33, 105
แบบสอบถามตรงกับห้าแถวจากทั้งสองตาราง ดังนั้นจะส่งคืนอายุของแถวที่ตรงกันจากตารางแรก
เข้าร่วมด้านนอกซ้าย
การรวมภายนอกด้านซ้ายจะรักษาแถวทั้งหมดของตาราง "ซ้าย" ไม่ว่าจะมีแถวที่ตรงกับตาราง "ขวา" หรือไม่ก็ตาม
Query
select c.name,c1.empid from customers c left outer join customer_order c1 on c.id = c1.id;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
customer6,
ที่นี่การรวมภายนอกด้านซ้ายจะแสดงแถวคอลัมน์ชื่อจากตารางลูกค้า (ซ้าย) และคอลัมน์ Empid ที่ตรงกับแถวจากตาราง customer_order (ขวา)
เข้าร่วมภายนอกขวา
การรวมภายนอกด้านขวาจะยังคงรักษาแถวทั้งหมดของตาราง "ขวา" ไม่ว่าจะมีแถวที่ตรงกับตาราง "ซ้าย" หรือไม่
Query
select c.name,c1.empid from customers c right outer join customer_order c1 on c.id = c1.id;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
name, empid
-------------------------------
customer1, 101
customer2, 102
customer3, 103
customer4, 104
customer5, 105
ที่นี่ Right Outer Join ส่งคืนแถว empid จากตาราง customer_order (ขวา) และคอลัมน์ชื่อที่ตรงกับแถวจากตารางลูกค้า
เข้าร่วมภายนอกเต็มรูปแบบ
การเข้าร่วมแบบเต็มภายนอกจะเก็บแถวทั้งหมดจากทั้งตารางด้านซ้ายและด้านขวา
Query
select * from customers c full outer join customer_order c1 on c.id = c1.id;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
แบบสอบถามส่งคืนแถวที่ตรงกันและไม่ตรงกันทั้งหมดจากทั้งลูกค้าและตาราง customer_order
เข้าร่วมข้าม
ส่งคืนผลคูณคาร์ทีเซียนของชุดระเบียนจากตารางที่รวมสองตารางขึ้นไป
Syntax
SELECT * FROM table1 CROSS JOIN table2;
Query
select orderid,name,address from customers,customer_order;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
แบบสอบถามด้านบนส่งคืนผลิตภัณฑ์คาร์ทีเซียนของตาราง
เข้าร่วมตามธรรมชาติ
Natural Join ไม่ใช้ตัวดำเนินการเปรียบเทียบใด ๆ ไม่เชื่อมต่อกันแบบที่ผลิตภัณฑ์คาร์ทีเซียนทำ เราสามารถทำการเข้าร่วมแบบธรรมชาติได้ก็ต่อเมื่อมีแอตทริบิวต์ทั่วไปอย่างน้อยหนึ่งอย่างที่มีอยู่ระหว่างความสัมพันธ์ทั้งสอง
Syntax
SELECT * FROM table1 NATURAL JOIN table2;
Query
select * from customers natural join customer_order;
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
ที่นี่มีรหัสคอลัมน์ทั่วไปหนึ่งรายการที่มีอยู่ระหว่างสองตาราง การใช้คอลัมน์ทั่วไปนั้นไฟล์Natural Join เข้าร่วมทั้งสองตาราง
เข้าร่วมด้วยตนเอง
SQL SELF JOIN ใช้เพื่อรวมตารางเข้ากับตัวเองราวกับว่าตารางเป็นสองตารางโดยเปลี่ยนชื่อตารางอย่างน้อยหนึ่งตารางในคำสั่ง 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
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
id, name
-------------------------------
1, customer1
2, customer2
3, customer3
4, customer4
5, customer5
6, customer6
แบบสอบถามรวมตารางลูกค้าเข้ากับตัวเอง
Tajo รองรับการจัดเก็บรูปแบบต่างๆ ในการลงทะเบียนการกำหนดค่าปลั๊กอินหน่วยเก็บข้อมูลคุณควรเพิ่มการเปลี่ยนแปลงในไฟล์คอนฟิกูเรชัน“ storage-site.json”
storage-site.json
มีการกำหนดโครงสร้างดังนี้ -
{
"storages": {
“storage plugin name“: {
"handler": "${class name}”, "default-format": “plugin name"
}
}
}
URI แต่ละอินสแตนซ์หน่วยเก็บข้อมูลระบุ
PostgreSQL Storage Handler
Tajo รองรับตัวจัดการพื้นที่จัดเก็บ PostgreSQL ช่วยให้การสืบค้นของผู้ใช้เข้าถึงวัตถุฐานข้อมูลใน PostgreSQL เป็นตัวจัดการพื้นที่เก็บข้อมูลเริ่มต้นใน Tajo เพื่อให้คุณสามารถกำหนดค่าได้อย่างง่ายดาย
การกำหนดค่า
{
"spaces": {
"postgre": {
"uri": "jdbc:postgresql://hostname:port/database1"
"configs": {
"mapped_database": “sampledb”
"connection_properties": {
"user":“tajo", "password": "pwd"
}
}
}
}
}
ที่นี่ “database1” หมายถึง postgreSQL ฐานข้อมูลที่แมปกับฐานข้อมูล “sampledb” ใน Tajo
Apache Tajo รองรับการรวม HBase สิ่งนี้ทำให้เราสามารถเข้าถึงตาราง HBase ใน Tajo HBase เป็นฐานข้อมูลเชิงคอลัมน์แบบกระจายที่สร้างขึ้นที่ด้านบนของระบบไฟล์ Hadoop เป็นส่วนหนึ่งของระบบนิเวศ Hadoop ที่ให้การเข้าถึงข้อมูลแบบสุ่มอ่าน / เขียนแบบเรียลไทม์ใน Hadoop File System ขั้นตอนต่อไปนี้จำเป็นเพื่อกำหนดค่าการรวม HBase
ตั้งค่าตัวแปรสภาพแวดล้อม
เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์“ 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
หลังจากที่คุณรวมพา ธ HBase แล้ว Tajo จะตั้งค่าไฟล์ไลบรารี HBase เป็น classpath
สร้างตารางภายนอก
สร้างตารางภายนอกโดยใช้ไวยากรณ์ต่อไปนี้ -
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>/'] ;
ในการเข้าถึงตาราง HBase คุณต้องกำหนดค่าตำแหน่งพื้นที่ตาราง
ที่นี่
Table- ตั้งชื่อตารางต้นกำเนิด hbase หากคุณต้องการสร้างตารางภายนอกตารางจะต้องมีอยู่บน HBase
Columns- คีย์หมายถึงคีย์แถว HBase จำนวนรายการคอลัมน์ต้องเท่ากับจำนวนคอลัมน์ตาราง Tajo
hbase.zookeeper.quorum - กำหนดที่อยู่โควรัมผู้ดูแลสวนสัตว์
hbase.zookeeper.property.clientPort - ตั้งค่าพอร์ตไคลเอ็นต์ zookeeper
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>/';
ที่นี่ฟิลด์ Location path จะตั้งค่า id พอร์ตไคลเอ็นต์ zookeeper หากคุณไม่ได้ตั้งค่าพอร์ต Tajo จะอ้างถึงคุณสมบัติของไฟล์ hbase-site.xml
สร้างตารางใน HBase
คุณสามารถเริ่มเชลล์โต้ตอบ HBase โดยใช้คำสั่ง“ hbase เชลล์” ดังที่แสดงในแบบสอบถามต่อไปนี้
Query
/bin/hbase shell
Result
แบบสอบถามข้างต้นจะสร้างผลลัพธ์ต่อไปนี้
hbase(main):001:0>
ขั้นตอนในการสืบค้น HBase
หากต้องการสอบถาม HBase คุณควรทำตามขั้นตอนต่อไปนี้ -
Step 1 - บีบคำสั่งต่อไปนี้ไปที่ HBase shell เพื่อสร้างตาราง "บทช่วยสอน"
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 - ตอนนี้ออกคำสั่งต่อไปนี้ใน hbase เชลล์เพื่อโหลดข้อมูลลงในตาราง
main):001:0> cat ../hbase/hbase-students.txt | bin/hbase shell
Step 3 - ตอนนี้กลับไปที่เปลือก Tajo และดำเนินการคำสั่งต่อไปนี้เพื่อดูข้อมูลเมตาของตาราง -
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 - ในการดึงผลลัพธ์จากตารางให้ใช้แบบสอบถามต่อไปนี้ -
Query
default> select * from students
Result
แบบสอบถามข้างต้นจะดึงผลลัพธ์ต่อไปนี้ -
rowkey, id, name
-------------------------------
row-01, 001, Adam
row-02, 002, Amit
row-03 003, Bob
Tajo สนับสนุน HiveCatalogStore เพื่อทำงานร่วมกับ Apache Hive การรวมนี้ช่วยให้ Tajo เข้าถึงตารางใน Apache Hive
ตั้งค่าตัวแปรสภาพแวดล้อม
เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์“ conf / tajo-env.sh”
$ vi conf/tajo-env.sh
export HIVE_HOME = /path/to/hive
หลังจากคุณรวมเส้นทาง Hive แล้ว Tajo จะตั้งค่าไฟล์ไลบรารี Hive เป็น classpath
การกำหนดค่าแค็ตตาล็อก
เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์“ 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>
เมื่อกำหนดค่า HiveCatalogStore แล้วคุณจะสามารถเข้าถึงตารางของ Hive ใน Tajo ได้
Swift เป็นที่เก็บวัตถุ / หยดแบบกระจายและสม่ำเสมอ Swift นำเสนอซอฟต์แวร์จัดเก็บข้อมูลบนคลาวด์เพื่อให้คุณสามารถจัดเก็บและดึงข้อมูลจำนวนมากด้วย API ที่เรียบง่าย Tajo รองรับการรวม Swift
ต่อไปนี้เป็นข้อกำหนดเบื้องต้นของ Swift Integration -
- Swift
- Hadoop
Core-site.xml
เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์ 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>
สิ่งนี้จะใช้สำหรับ Hadoop เพื่อเข้าถึงวัตถุ Swift หลังจากที่คุณทำการเปลี่ยนแปลงทั้งหมดแล้วให้ย้ายไปที่ไดเร็กทอรี Tajo เพื่อตั้งค่าตัวแปรสภาพแวดล้อม Swift
conf / tajo-env.h
เปิดไฟล์คอนฟิกูเรชันของ Tajo และเพิ่ม set the environment variable ดังนี้ -
$ vi conf/tajo-env.h export TAJO_CLASSPATH = $HADOOP_HOME/share/hadoop/tools/lib/hadoop-openstack-x.x.x.jar
ตอนนี้ Tajo จะสามารถสืบค้นข้อมูลโดยใช้ Swift
สร้างตาราง
มาสร้างตารางภายนอกเพื่อเข้าถึงวัตถุ Swift ใน Tajo ดังนี้ -
default> create external table swift(num1 int, num2 text, num3 float)
using text with ('text.delimiter' = '|') location 'swift://bucket-name/table1';
หลังจากสร้างตารางแล้วคุณสามารถรันคิวรี SQL ได้
Apache Tajo มีอินเทอร์เฟซ JDBC เพื่อเชื่อมต่อและดำเนินการสืบค้น เราสามารถใช้อินเทอร์เฟซ JDBC เดียวกันเพื่อเชื่อมต่อ Tajo จากแอปพลิเคชันที่ใช้ Java ของเรา ตอนนี้ให้เราเข้าใจวิธีเชื่อมต่อ Tajo และดำเนินการคำสั่งในแอปพลิเคชัน Java ตัวอย่างของเราโดยใช้อินเทอร์เฟซ JDBC ในส่วนนี้
ดาวน์โหลด JDBC Driver
ดาวน์โหลดไดรเวอร์ JDBC โดยไปที่ลิงค์ต่อไปนี้ - http://apache.org/dyn/closer.cgi/tajo/tajo-0.11.3/tajo-jdbc-0.11.3.jar.
ตอนนี้ไฟล์“ tajo-jdbc-0.11.3.jar” ถูกดาวน์โหลดบนเครื่องของคุณแล้ว
ตั้งค่าเส้นทางคลาส
ในการใช้ไดรเวอร์ JDBC ในโปรแกรมของคุณให้ตั้งค่าคลาสพา ธ ดังนี้ -
CLASSPATH = path/to/tajo-jdbc-0.11.3.jar:$CLASSPATH
เชื่อมต่อกับ Tajo
Apache Tajo จัดเตรียมไดรเวอร์ JDBC เป็นไฟล์ jar เดียวและพร้อมใช้งาน @ /path/to/tajo/share/jdbc-dist/tajo-jdbc-0.11.3.jar.
สตริงการเชื่อมต่อเพื่อเชื่อมต่อ Apache Tajo มีรูปแบบต่อไปนี้ -
jdbc:tajo://host/
jdbc:tajo://host/database
jdbc:tajo://host:port/
jdbc:tajo://host:port/database
ที่นี่
host - ชื่อโฮสต์ของ TajoMaster
port- หมายเลขพอร์ตที่เซิร์ฟเวอร์กำลังรับฟัง หมายเลขพอร์ตเริ่มต้นคือ 26002
database- ชื่อฐานข้อมูล ชื่อฐานข้อมูลเริ่มต้นเป็นค่าเริ่มต้น
แอปพลิเคชัน Java
ตอนนี้ให้เราเข้าใจแอปพลิเคชัน Java
การเข้ารหัส
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();
}
}
}
แอปพลิเคชันสามารถคอมไพล์และรันโดยใช้คำสั่งต่อไปนี้
การรวบรวม
javac -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample.java
การดำเนินการ
java -cp /path/to/tajo-jdbc-0.11.3.jar:. TajoJdbcSample
ผลลัพธ์
คำสั่งข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
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 รองรับฟังก์ชันที่กำหนดเอง / ผู้ใช้กำหนดเอง (UDF) ฟังก์ชันที่กำหนดเองสามารถสร้างได้ใน python
ฟังก์ชันที่กำหนดเองเป็นเพียงฟังก์ชัน python ธรรมดากับมัณฑนากร “@output_type(<tajo sql datatype>)” ดังต่อไปนี้ -
@ouput_type(“integer”)
def sum_py(a, b):
return a + b;
สามารถลงทะเบียนสคริปต์ python ที่มี UDF ได้โดยเพิ่มการกำหนดค่าด้านล่างใน “tajosite.xml”.
<property>
<name>tajo.function.python.code-dir</name>
<value>file:///path/to/script1.py,file:///path/to/script2.py</value>
</property>
เมื่อลงทะเบียนสคริปต์แล้วให้รีสตาร์ทคลัสเตอร์และ UDF จะพร้อมใช้งานในแบบสอบถาม SQL ดังต่อไปนี้ -
select sum_py(10, 10) as pyfn;
Apache Tajo รองรับฟังก์ชันการรวมที่ผู้ใช้กำหนดเช่นกัน แต่ไม่รองรับฟังก์ชันหน้าต่างที่ผู้ใช้กำหนด