Apache Presto - Kurzanleitung
Bei der Datenanalyse werden Rohdaten analysiert, um relevante Informationen für eine bessere Entscheidungsfindung zu sammeln. Es wird hauptsächlich in vielen Organisationen verwendet, um Geschäftsentscheidungen zu treffen. Die Big-Data-Analyse umfasst eine große Datenmenge, und dieser Prozess ist recht komplex. Daher wenden Unternehmen unterschiedliche Strategien an.
Facebook ist beispielsweise eines der führenden datengesteuerten und größten Data Warehouse-Unternehmen der Welt. Facebook-Warehouse-Daten werden in Hadoop für umfangreiche Berechnungen gespeichert. Später, als die Lagerdaten auf Petabyte anstiegen, beschlossen sie, ein neues System mit geringer Latenz zu entwickeln. Im Jahr 2012 entwarfen Facebook-Teammitglieder“Presto” für interaktive Abfrageanalysen, die selbst mit Petabyte an Daten schnell funktionieren.
Was ist Apache Presto?
Apache Presto ist eine verteilte parallele Abfrageausführungs-Engine, die für geringe Latenz und interaktive Abfrageanalyse optimiert ist. Presto führt Abfragen einfach aus und skaliert ohne Ausfallzeiten von Gigabyte auf Petabyte.
Eine einzelne Presto-Abfrage kann Daten aus mehreren Quellen wie HDFS, MySQL, Cassandra, Hive und vielen weiteren Datenquellen verarbeiten. Presto ist in Java integriert und einfach in andere Dateninfrastrukturkomponenten zu integrieren. Presto ist leistungsstark und wird von führenden Unternehmen wie Airbnb, DropBox, Groupon und Netflix übernommen.
Presto - Funktionen
Presto enthält die folgenden Funktionen:
- Einfache und erweiterbare Architektur.
- Steckbare Konnektoren - Presto unterstützt steckbare Konnektoren, um Metadaten und Daten für Abfragen bereitzustellen.
- Pipeline-Ausführungen - Vermeidet unnötigen Overhead für die E / A-Latenz.
- Benutzerdefinierte Funktionen - Analysten können benutzerdefinierte Funktionen erstellen, um die Migration zu vereinfachen.
- Vektorisierte säulenförmige Verarbeitung.
Presto - Vorteile
Hier ist eine Liste der Vorteile, die Apache Presto bietet:
- Spezialisierte SQL-Operationen
- Einfach zu installieren und zu debuggen
- Einfache Speicherabstraktion
- Skaliert Petabyte-Daten schnell mit geringer Latenz
Presto - Anwendungen
Presto unterstützt die meisten der besten Industrieanwendungen von heute. Werfen wir einen Blick auf einige der bemerkenswerten Anwendungen.
Facebook- Facebook hat Presto für Datenanalyse-Anforderungen entwickelt. Presto skaliert problemlos große Datengeschwindigkeiten.
Teradata- Teradata bietet End-to-End-Lösungen für Big Data-Analysen und Data Warehousing. Der Beitrag von Teradata zu Presto erleichtert es mehr Unternehmen, alle analytischen Anforderungen zu erfüllen.
Airbnb- Presto ist ein wesentlicher Bestandteil der Airbnb-Dateninfrastruktur. Nun, Hunderte von Mitarbeitern führen täglich Abfragen mit der Technologie durch.
Warum Presto?
Presto unterstützt Standard-ANSI-SQL, was es Datenanalysten und Entwicklern sehr einfach gemacht hat. Obwohl es in Java erstellt wurde, werden typische Probleme mit Java-Code im Zusammenhang mit der Speicherzuweisung und der Speicherbereinigung vermieden. Presto verfügt über eine Hadoop-freundliche Connector-Architektur. Es ermöglicht das einfache Einstecken von Dateisystemen.
Presto läuft auf mehreren Hadoop-Distributionen. Darüber hinaus kann Presto von einer Hadoop-Plattform aus nach Cassandra, relationalen Datenbanken oder anderen Datenspeichern fragen. Diese plattformübergreifende Analysefunktion ermöglicht es Presto-Benutzern, den maximalen Geschäftswert von Gigabyte bis Petabyte an Daten zu extrahieren.
Die Architektur von Presto ähnelt fast der klassischen MPP-DBMS-Architektur (Massively Parallel Processing). Das folgende Diagramm zeigt die Architektur von Presto.
Das obige Diagramm besteht aus verschiedenen Komponenten. In der folgenden Tabelle werden die einzelnen Komponenten ausführlich beschrieben.
S.No. | Komponentenbeschreibung |
---|---|
1. | Client Der Client (Presto CLI) sendet SQL-Anweisungen an einen Koordinator, um das Ergebnis zu erhalten. |
2. | Coordinator Der Koordinator ist ein Master-Daemon. Der Koordinator analysiert zunächst die SQL-Abfragen, analysiert sie dann und plant die Ausführung der Abfrage. Der Scheduler führt die Pipeline-Ausführung durch, weist dem nächstgelegenen Knoten Arbeit zu und überwacht den Fortschritt. |
3. | Connector Speicher-Plugins werden als Konnektoren bezeichnet. Hive, HBase, MySQL, Cassandra und viele mehr fungieren als Konnektor. Andernfalls können Sie auch eine benutzerdefinierte implementieren. Der Connector stellt Metadaten und Daten für Abfragen bereit. Der Koordinator verwendet den Connector, um Metadaten zum Erstellen eines Abfrageplans abzurufen. |
4. | Worker Der Koordinator weist Arbeiterknoten eine Aufgabe zu. Die Arbeiter erhalten aktuelle Daten vom Konnektor. Schließlich liefert der Worker-Knoten das Ergebnis an den Client. |
Presto - Workflow
Presto ist ein verteiltes System, das auf einem Cluster von Knoten ausgeführt wird. Die verteilte Abfrage-Engine von Presto ist für interaktive Analysen optimiert und unterstützt Standard-ANSI-SQL, einschließlich komplexer Abfragen, Aggregationen, Verknüpfungen und Fensterfunktionen. Die Presto-Architektur ist einfach und erweiterbar. Presto Client (CLI) sendet SQL-Anweisungen an einen Master-Daemon-Koordinator.
Der Scheduler stellt eine Verbindung über die Ausführungspipeline her. Der Scheduler weist Knoten Knoten zu, die den Daten am nächsten liegen, und überwacht den Fortschritt. Der Koordinator weist mehreren Arbeiterknoten eine Aufgabe zu, und schließlich liefert der Arbeiterknoten das Ergebnis an den Client zurück. Der Client zieht Daten aus dem Ausgabeprozess. Erweiterbarkeit ist das Schlüsseldesign. Steckbare Konnektoren wie Hive, HBase, MySQL usw. bieten Metadaten und Daten für Abfragen. Presto wurde mit einer „einfachen Speicherabstraktion“ entwickelt, die es einfach macht, SQL-Abfragefunktionen für diese verschiedenen Arten von Datenquellen bereitzustellen.
Ausführungsmodell
Presto unterstützt benutzerdefinierte Abfrage- und Ausführungsmodule mit Operatoren, die die SQL-Semantik unterstützen. Zusätzlich zur verbesserten Planung befindet sich die gesamte Verarbeitung im Speicher und wird zwischen verschiedenen Phasen über das Netzwerk geleitet. Dies vermeidet unnötigen Overhead für die E / A-Latenz.
In diesem Kapitel wird erläutert, wie Sie Presto auf Ihrem Computer installieren. Lassen Sie uns die grundlegenden Anforderungen von Presto durchgehen.
- Linux oder Mac OS
- Java Version 8
Fahren Sie nun mit den folgenden Schritten fort, um Presto auf Ihrem Computer zu installieren.
Überprüfen der Java-Installation
Hoffentlich haben Sie Java Version 8 bereits auf Ihrem Computer installiert, also überprüfen Sie es einfach mit dem folgenden Befehl.
$ java -version
Wenn Java erfolgreich auf Ihrem Computer installiert wurde, wird möglicherweise die Version von installiertem Java angezeigt. Wenn Java nicht installiert ist, führen Sie die folgenden Schritte aus, um Java 8 auf Ihrem Computer zu installieren.
Laden Sie JDK herunter. Laden Sie die neueste Version von JDK herunter, indem Sie den folgenden Link besuchen.
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Die neueste Version ist JDK 8u 92 und die Datei lautet "jdk-8u92-linux-x64.tar.gz". Bitte laden Sie die Datei auf Ihren Computer herunter.
Extrahieren Sie danach die Dateien und wechseln Sie in das jeweilige Verzeichnis.
Stellen Sie dann Java-Alternativen ein. Schließlich wird Java auf Ihrem Computer installiert.
Apache Presto Installation
Laden Sie die neueste Version von Presto herunter, indem Sie den folgenden Link besuchen:
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.149/
Jetzt wird die neueste Version von "presto-server-0.149.tar.gz" auf Ihren Computer heruntergeladen.
Teerdateien extrahieren
Extrahieren Sie die tar Datei mit dem folgenden Befehl -
$ tar -zxf presto-server-0.149.tar.gz
$ cd presto-server-0.149
Konfigurationseinstellungen
Erstellen Sie ein Datenverzeichnis
Erstellen Sie ein Datenverzeichnis außerhalb des Installationsverzeichnisses, das zum Speichern von Protokollen, Metadaten usw. verwendet wird, damit es beim Upgrade von Presto problemlos beibehalten werden kann. Es wird mit dem folgenden Code definiert:
$ cd
$ mkdir data
Verwenden Sie den Befehl „pwd“, um den Pfad anzuzeigen, in dem er sich befindet. Dieser Speicherort wird in der nächsten Datei node.properties zugewiesen.
Erstellen Sie das Verzeichnis "etc"
Erstellen Sie ein etc-Verzeichnis im Presto-Installationsverzeichnis mit dem folgenden Code:
$ cd presto-server-0.149
$ mkdir etc
Dieses Verzeichnis enthält Konfigurationsdateien. Lassen Sie uns jede Datei einzeln erstellen.
Knoteneigenschaften
Die Eigenschaftendatei des Presto-Knotens enthält eine für jeden Knoten spezifische Umgebungskonfiguration. Es wird im Verzeichnis etc (etc / node.properties) mit dem folgenden Code erstellt:
$ cd etc
$ vi node.properties
node.environment = production
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir = /Users/../workspace/Presto
Nachdem Sie alle Änderungen vorgenommen haben, speichern Sie die Datei und beenden Sie das Terminal. Hiernode.data ist der Speicherort des oben erstellten Datenverzeichnisses. node.id repräsentiert die eindeutige Kennung für jeden Knoten.
JVM-Konfiguration
Erstellen Sie eine Datei "jvm.config" im Verzeichnis etc (etc / jvm.config). Diese Datei enthält eine Liste der Befehlszeilenoptionen, die zum Starten der Java Virtual Machine verwendet werden.
$ cd etc
$ vi jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize = 32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError = kill -9 %p
Nachdem Sie alle Änderungen vorgenommen haben, speichern Sie die Datei und beenden Sie das Terminal.
Konfigurationseigenschaften
Erstellen Sie eine Datei "config.properties" im Verzeichnis etc (etc / config.properties). Diese Datei enthält die Konfiguration des Presto-Servers. Wenn Sie eine einzelne Maschine zum Testen einrichten, kann der Presto-Server nur als Koordinierungsprozess fungieren, wie mit dem folgenden Code definiert:
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = true
http-server.http.port = 8080
query.max-memory = 5GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
Hier,
coordinator - Hauptknoten.
node-scheduler.include-coordinator - Ermöglicht Planungsarbeiten am Koordinator.
http-server.http.port - Gibt den Port für den HTTP-Server an.
query.max-memory=5GB - Die maximale Menge an verteiltem Speicher.
query.max-memory-per-node=1GB - Die maximale Speichermenge pro Knoten.
discovery-server.enabled - Presto verwendet den Discovery-Dienst, um alle Knoten im Cluster zu finden.
discovery.uri - Der URI zum Discovery-Server.
Wenn Sie einen Presto-Server mit mehreren Computern einrichten, fungiert Presto sowohl als Koordinierungs- als auch als Arbeitsprozess. Verwenden Sie diese Konfigurationseinstellung, um den Presto-Server auf mehreren Computern zu testen.
Konfiguration für den Koordinator
$ cd etc
$ vi config.properties
coordinator = true
node-scheduler.include-coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
Konfiguration für Worker
$ cd etc
$ vi config.properties
coordinator = false
http-server.http.port = 8080
query.max-memory = 50GB
query.max-memory-per-node = 1GB
discovery.uri = http://localhost:8080
Protokolleigenschaften
Erstellen Sie eine Datei "log.properties" im Verzeichnis etc (etc / log.properties). Diese Datei enthält die Mindestprotokollstufe für benannte Loggerhierarchien. Es wird mit dem folgenden Code definiert:
$ cd etc
$ vi log.properties
com.facebook.presto = INFO
Speichern Sie die Datei und beenden Sie das Terminal. Hier werden vier Protokollebenen verwendet, z. B. DEBUG, INFO, WARN und ERROR. Die Standardprotokollstufe ist INFO.
Katalogeigenschaften
Erstellen Sie ein Verzeichnis "Katalog" im Verzeichnis etc (etc / catalog). Dies wird zum Mounten von Daten verwendet. Zum Beispiel erstellenetc/catalog/jmx.properties mit dem folgenden Inhalt, um die zu montieren jmx connector als jmx katalog -
$ cd etc
$ mkdir catalog $ cd catalog
$ vi jmx.properties
connector.name = jmx
Starten Sie Presto
Presto kann mit dem folgenden Befehl gestartet werden:
$ bin/launcher start
Dann sehen Sie eine ähnliche Antwort:
Started as 840
Führen Sie Presto aus
Verwenden Sie den folgenden Befehl, um den Presto-Server zu starten:
$ bin/launcher run
Nach dem erfolgreichen Start des Presto-Servers finden Sie die Protokolldateien im Verzeichnis "var / log".
launcher.log - Dieses Protokoll wird vom Launcher erstellt und ist mit den Streams stdout und stderr des Servers verbunden.
server.log - Dies ist die von Presto verwendete Hauptprotokolldatei.
http-request.log - Vom Server empfangene HTTP-Anfrage.
Ab sofort haben Sie die Presto-Konfigurationseinstellungen erfolgreich auf Ihrem Computer installiert. Fahren wir mit den Schritten zur Installation von Presto CLI fort.
Installieren Sie Presto CLI
Die Presto-CLI bietet eine terminalbasierte interaktive Shell zum Ausführen von Abfragen.
Laden Sie die Presto CLI herunter, indem Sie den folgenden Link besuchen:
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.149/
Jetzt wird "presto-cli-0.149-executeable.jar" auf Ihrem Computer installiert.
Führen Sie die CLI aus
Kopieren Sie das Presto-Cli nach dem Herunterladen an den Speicherort, an dem Sie es ausführen möchten. Dieser Ort kann ein beliebiger Knoten sein, der Netzwerkzugriff auf den Koordinator hat. Ändern Sie zuerst den Namen der Jar-Datei in Presto. Dann machen Sie es ausführbar mitchmod + x Befehl mit folgendem Code -
$ mv presto-cli-0.149-executable.jar presto
$ chmod +x presto
Führen Sie nun die CLI mit dem folgenden Befehl aus:
./presto --server localhost:8080 --catalog jmx --schema default
Here jmx(Java Management Extension) refers to catalog and default referes to schema.
Sie sehen die folgende Antwort:
presto:default>
Geben Sie nun den Befehl "jps" in Ihr Terminal ein und Sie sehen die laufenden Dämonen.
Stoppen Sie Presto
Nachdem Sie alle Ausführungen durchgeführt haben, können Sie den Presto-Server mit dem folgenden Befehl stoppen:
$ bin/launcher stop
In diesem Kapitel werden die Konfigurationseinstellungen für Presto erläutert.
Presto Verifier
Mit dem Presto Verifier können Sie Presto gegen eine andere Datenbank (z. B. MySQL) oder zwei Presto-Cluster gegeneinander testen.
Datenbank in MySQL erstellen
Öffnen Sie den MySQL-Server und erstellen Sie eine Datenbank mit dem folgenden Befehl.
create database test
Jetzt haben Sie auf dem Server eine Testdatenbank erstellt. Erstellen Sie die Tabelle und laden Sie sie mit der folgenden Abfrage.
CREATE TABLE verifier_queries(
id INT NOT NULL AUTO_INCREMENT,
suite VARCHAR(256) NOT NULL,
name VARCHAR(256),
test_catalog VARCHAR(256) NOT NULL,
test_schema VARCHAR(256) NOT NULL,
test_prequeries TEXT,
test_query TEXT NOT NULL,
test_postqueries TEXT,
test_username VARCHAR(256) NOT NULL default 'verifier-test',
test_password VARCHAR(256),
control_catalog VARCHAR(256) NOT NULL,
control_schema VARCHAR(256) NOT NULL,
control_prequeries TEXT,
control_query TEXT NOT NULL,
control_postqueries TEXT,
control_username VARCHAR(256) NOT NULL default 'verifier-test',
control_password VARCHAR(256),
session_properties_json TEXT,
PRIMARY KEY (id)
);
Konfigurationseinstellungen hinzufügen
Erstellen Sie eine Eigenschaftendatei, um den Verifizierer zu konfigurieren.
$ vi config.properties
suite = mysuite
query-database = jdbc:mysql://localhost:3306/tutorials?user=root&password=pwd
control.gateway = jdbc:presto://localhost:8080
test.gateway = jdbc:presto://localhost:8080
thread-count = 1
Hier in der query-database Geben Sie im Feld die folgenden Details ein: Name der MySQL-Datenbank, Benutzername und Kennwort.
Laden Sie die JAR-Datei herunter
Laden Sie die Presto-Verifier-JAR-Datei herunter, indem Sie den folgenden Link besuchen:
https://repo1.maven.org/maven2/com/facebook/presto/presto-verifier/0.149/
Nun die Version “presto-verifier-0.149-executable.jar” wird auf Ihren Computer heruntergeladen.
Führen Sie JAR aus
Führen Sie die JAR-Datei mit dem folgenden Befehl aus:
$ mv presto-verifier-0.149-executable.jar verifier
$ chmod+x verifier
Führen Sie Verifier aus
Führen Sie den Verifizierer mit dem folgenden Befehl aus:
$ ./verifier config.properties
Tabelle erstellen
Lassen Sie uns eine einfache Tabelle in erstellen “test” Datenbank mit der folgenden Abfrage.
create table product(id int not null, name varchar(50))
Tabelle einfügen
Fügen Sie nach dem Erstellen einer Tabelle zwei Datensätze mit der folgenden Abfrage ein:
insert into product values(1,’Phone')
insert into product values(2,’Television’)
Führen Sie die Verifiziererabfrage aus
Führen Sie die folgende Beispielabfrage im Verifizierer-Terminal (./verifier config.propeties) aus, um das Verifizierer-Ergebnis zu überprüfen.
Beispielabfrage
insert into verifier_queries (suite, test_catalog, test_schema, test_query,
control_catalog, control_schema, control_query) values
('mysuite', 'mysql', 'default', 'select * from mysql.test.product',
'mysql', 'default', 'select * from mysql.test.product');
Hier, select * from mysql.test.product Abfrage bezieht sich auf MySQL-Katalog, test ist Datenbankname und productist Tabellenname. Auf diese Weise können Sie über den Presto-Server auf den MySQL-Connector zugreifen.
Hier werden zwei gleiche Auswahlabfragen gegeneinander getestet, um die Leistung zu sehen. Ebenso können Sie andere Abfragen ausführen, um die Leistungsergebnisse zu testen. Sie können auch zwei Presto-Cluster verbinden, um die Leistungsergebnisse zu überprüfen.
In diesem Kapitel werden die in Presto verwendeten Verwaltungstools erläutert. Beginnen wir mit dem Webinterface von Presto.
Webinterface
Presto bietet eine Webschnittstelle zum Überwachen und Verwalten von Abfragen. Der Zugriff erfolgt über die in den Eigenschaften der Koordinatorkonfiguration angegebene Portnummer.
Starten Sie den Presto-Server und die Presto-CLI. Dann können Sie über die folgende URL auf die Weboberfläche zugreifen:http://localhost:8080/
Die Ausgabe ähnelt dem obigen Bildschirm.
Hier enthält die Hauptseite eine Liste von Abfragen sowie Informationen wie eindeutige Abfrage-ID, Abfragetext, Abfragestatus, Prozentsatz der abgeschlossenen Abfragen, Benutzername und Quelle, von der diese Abfrage stammt. Die neuesten Abfragen werden zuerst ausgeführt, dann werden unten abgeschlossene oder nicht abgeschlossene Abfragen unten angezeigt.
Optimieren der Leistung auf Presto
Wenn bei Presto-Clustern Leistungsprobleme auftreten, ändern Sie Ihre Standardkonfigurationseinstellungen in die folgenden Einstellungen.
Konfigurationseigenschaften
task. info -refresh-max-wait - Reduziert die Arbeitsbelastung des Koordinators.
task.max-worker-threads - Teilt den Prozess auf und weist ihn jedem Arbeitsknoten zu.
distributed-joins-enabled - Hash-basierte verteilte Joins.
node-scheduler.network-topology - Setzt die Netzwerktopologie auf Scheduler.
JVM-Einstellungen
Ändern Sie Ihre Standard-JVM-Einstellungen in die folgenden Einstellungen. Dies ist hilfreich für die Diagnose von Speicherbereinigungsproblemen.
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCCause
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintReferenceGC
-XX:+PrintClassHistogramAfterFullGC
-XX:+PrintClassHistogramBeforeFullGC
-XX:PrintFLSStatistics = 2
-XX:+PrintAdaptiveSizePolicy
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount = 1
In diesem Kapitel wird erläutert, wie Sie Abfragen in Presto erstellen und ausführen. Lassen Sie uns die von Presto unterstützten Basisdatentypen durchgehen.
Grundlegende Datentypen
In der folgenden Tabelle werden die grundlegenden Datentypen von Presto beschrieben.
S.No. | Datentyp & Beschreibung |
---|---|
1. | VARCHAR Zeichendaten variabler Länge |
2. | BIGINT Eine 64-Bit-Ganzzahl mit Vorzeichen |
3. | DOUBLE Ein 64-Bit-Gleitkommawert mit doppelter Genauigkeit |
4. | DECIMAL Eine Dezimalzahl mit fester Genauigkeit. Zum Beispiel ist DECIMAL (10,3) - 10 die Genauigkeit, dh die Gesamtzahl der Ziffern und 3 ist der als Bruchpunkt dargestellte Skalenwert. Die Skalierung ist optional und der Standardwert ist 0 |
5. | BOOLEAN Boolesche Werte true und false |
6. | VARBINARY Binärdaten variabler Länge |
7. | JSON JSON-Daten |
8. | DATE Datumsdatentyp dargestellt als Jahr-Monat-Tag |
9. | TIME, TIMESTAMP, TIMESTAMP with TIME ZONE ZEIT - Uhrzeit (Stunde-Min-Sek-Millisekunde) TIMESTAMP - Datum und Uhrzeit des Tages TIMESTAMP mit ZEITZONE - Datum und Uhrzeit des Tages mit Zeitzone vom Wert |
10. | INTERVAL Datentypen für Datum und Uhrzeit strecken oder erweitern |
11. | ARRAY Array des angegebenen Komponententyps. Zum Beispiel ARRAY [5,7] |
12. | MAP Zuordnung zwischen den angegebenen Komponententypen. Zum Beispiel MAP (ARRAY ['eins', 'zwei'], ARRAY [5,7]) |
13. | ROW Zeilenstruktur aus benannten Feldern |
Presto - Betreiber
Presto-Operatoren sind in der folgenden Tabelle aufgeführt.
S.No. | Betreiber & Beschreibung |
---|---|
1. | Arithmetischer Operator Presto unterstützt arithmetische Operatoren wie +, -, *, /,% |
2. | Vergleichsoperator <,>, <=,> =, =, <> |
3. | Logischer Operator UND ODER NICHT |
4. | Bereichsoperator Der Bereichsoperator wird verwendet, um den Wert in einem bestimmten Bereich zu testen. Presto unterstützt ZWISCHEN, IST NULL, IST NICHT NULL, GRÖSST und MINDESTENS |
5. | Dezimaloperator Der binäre arithmetische Dezimaloperator führt eine binäre arithmetische Operation für den Dezimaltyp aus. Unärer Dezimaloperator - Der - operator führt Negation durch |
6. | String-Operator Das ‘||’ operator führt eine Zeichenfolgenverkettung durch |
7. | Datums- und Uhrzeitoperator Führt arithmetische Additions- und Subtraktionsoperationen für Datums- und Zeitdatentypen aus |
8. | Array-Operator Indexoperator [] - Zugriff auf ein Element eines Arrays Verkettungsoperator || - ein Array mit einem Array oder einem Element des gleichen Typs verketten |
9. | Kartenoperator Karten-Indexoperator [] - Ruft den Wert, der einem bestimmten Schlüssel entspricht, von einer Karte ab |
Ab sofort haben wir einige einfache grundlegende Abfragen für Presto besprochen. In diesem Kapitel werden die wichtigen SQL-Funktionen erläutert.
Mathematische Funktionen
Mathematische Funktionen arbeiten mit mathematischen Formeln. Die folgende Tabelle beschreibt die Liste der Funktionen im Detail.
S.No. | Bedienungsanleitung |
---|---|
1. | abs (x) Gibt den absoluten Wert von zurück x |
2. | cbrt (x) Gibt die Kubikwurzel von zurück x |
3. | Decke (x) Gibt die zurück x Wert auf die nächste ganze Zahl aufgerundet |
4. | ceil(x) Alias für Decke (x) |
5. | Grad (x) Gibt den Gradwert für zurück x |
6. | Ex) Gibt den doppelten Wert für Eulers Nummer zurück |
7. | exp(x) Gibt den Exponentenwert für die Euler-Zahl zurück |
8. | Boden (x) Kehrt zurück x auf die nächste ganze Zahl abgerundet |
9. | from_base(string,radix) Gibt den Wert der Zeichenfolge zurück, die als Basis-Radix-Zahl interpretiert wird |
10. | ln(x) Gibt den natürlichen Logarithmus von zurück x |
11. | log2 (x) Gibt den Logarithmus zur Basis 2 von zurück x |
12. | log10(x) Gibt den Logarithmus zur Basis 10 von zurück x |
13. | log(x,y) Gibt die Basis zurück y Logarithmus von x |
14. | mod (n, m) Gibt den Modul (Rest) von zurück n geteilt durch m |
15. | pi() Gibt den pi-Wert zurück. Das Ergebnis wird als doppelter Wert zurückgegeben |
16. | Potenz (x, p) Gibt die Wertkraft zurück ‘p’ zum x Wert |
17. | pow(x,p) Alias für Macht (x, p) |
18. | Bogenmaß (x) wandelt den Winkel um x in Grad Bogenmaß |
19. | rand() Alias für Bogenmaß () |
20. | zufällig() Gibt den Pseudozufallswert zurück |
21. | rand(n) Alias für random () |
22. | rund (x) Gibt den gerundeten Wert für x zurück |
23. | round(x,d) x Wert gerundet für die ‘d’ Nachkommastellen |
24. | sign(x) Gibt die Signumfunktion von x zurück, dh 0, wenn das Argument 0 ist 1, wenn das Argument größer als 0 ist -1, wenn das Argument kleiner als 0 ist Bei doppelten Argumenten gibt die Funktion zusätzlich - zurück NaN, wenn das Argument NaN ist 1, wenn das Argument + Unendlichkeit ist -1, wenn das Argument -Infinity ist |
25. | sqrt (x) Gibt die Quadratwurzel von zurück x |
26. | to_base (x, radix) Rückgabetyp ist Bogenschütze. Das Ergebnis wird als Basisradix für zurückgegebenx |
27. | abschneiden (x) Schneidet den Wert für ab x |
28. | width_bucket (x, bound1, bound2, n) Gibt die Bin-Nummer von zurück x angegebene Grenzen für bound1 und bound2 und n Anzahl von Buckets |
29. | width_bucket (x, Bins) Gibt die Bin-Nummer von zurück x gemäß den durch die Array-Bins angegebenen Bins |
Trigonometrische Funktionen
Trigonometrische Funktionsargumente werden als Bogenmaß () dargestellt. In der folgenden Tabelle sind die Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | acos (x) Gibt den inversen Kosinuswert (x) zurück. |
2. | asin(x) Gibt den inversen Sinuswert (x) zurück. |
3. | atan(x) Gibt den inversen Tangentenwert (x) zurück. |
4. | atan2 (y, x) Gibt den inversen Tangentenwert (y / x) zurück. |
5. | cos(x) Gibt den Kosinuswert (x) zurück. |
6. | cosh (x) Gibt den hyperbolischen Kosinuswert (x) zurück. |
7. | Sünde (x) Gibt den Sinuswert (x) zurück. |
8. | tan(x) Gibt den Tangentenwert (x) zurück. |
9. | tanh(x) Gibt den hyperbolischen Tangenswert (x) zurück. |
Bitweise Funktionen
In der folgenden Tabelle sind die bitweisen Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | bit_count (x, bits) Zählen Sie die Anzahl der Bits |
2. | bitweise_und (x, y) Führen Sie eine bitweise UND-Verknüpfung für zwei Bits durch. x und y |
3. | bitweise_oder (x, y) Bitweise ODER-Verknüpfung zwischen zwei Bits x, y |
4. | bitweise_not (x) Bitweise Nichtoperation für Bit x |
5. | bitweise_xor (x, y) XOR-Operation für Bits x, y |
String-Funktionen
In der folgenden Tabelle sind die String-Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | concat (string1, ..., stringN) Verketten Sie die angegebenen Zeichenfolgen |
2. | Länge (Zeichenfolge) Gibt die Länge der angegebenen Zeichenfolge zurück |
3. | niedriger (String) Gibt das Kleinbuchstabenformat für die Zeichenfolge zurück |
4. | obere (Zeichenfolge) Gibt das Großbuchstabenformat für die angegebene Zeichenfolge zurück |
5. | lpad (String, Größe, Padstring) Linke Polsterung für die angegebene Zeichenfolge |
6. | ltrim (string) Entfernt das führende Leerzeichen aus der Zeichenfolge |
7. | ersetzen (Zeichenfolge, suchen, ersetzen) Ersetzt den Zeichenfolgenwert |
8. | umgekehrt (Zeichenfolge) Kehrt die für die Zeichenfolge ausgeführte Operation um |
9. | rpad (String, Größe, Padstring) Richtige Auffüllung für die angegebene Zeichenfolge |
10. | rtrim (string) Entfernt das nachgestellte Leerzeichen aus der Zeichenfolge |
11. | split (Zeichenfolge, Trennzeichen) Teilt die Zeichenfolge nach dem Trennzeichen und gibt höchstens ein Array mit der Größe zurück |
12. | split_part (Zeichenfolge, Trennzeichen, Index) Teilt die Zeichenfolge am Trennzeichen und gibt den Feldindex zurück |
13. | strpos (Zeichenfolge, Teilzeichenfolge) Gibt die Startposition des Teilstrings in der Zeichenfolge zurück |
14. | substr (string, start) Gibt den Teilstring für die angegebene Zeichenfolge zurück |
15. | substr (String, Start, Länge) Gibt den Teilstring für den angegebenen String mit der spezifischen Länge zurück |
16. | trim (string) Entfernt das führende und das nachfolgende Leerzeichen aus der Zeichenfolge |
Datums- und Uhrzeitfunktionen
In der folgenden Tabelle sind die Funktionen Datum und Uhrzeit aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | aktuelles Datum Gibt das aktuelle Datum zurück |
2. | aktuelle Uhrzeit Gibt die aktuelle Zeit zurück |
3. | Aktueller Zeitstempel Gibt den aktuellen Zeitstempel zurück |
4. | current_timezone () Gibt die aktuelle Zeitzone zurück |
5. | jetzt() Gibt das aktuelle Datum und den Zeitstempel mit der Zeitzone zurück |
6. | Ortszeit Gibt die Ortszeit zurück |
7. | localtimestamp Gibt den lokalen Zeitstempel zurück |
Funktionen für reguläre Ausdrücke
In der folgenden Tabelle sind die Funktionen für reguläre Ausdrücke aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | regexp_extract_all (Zeichenfolge, Muster) Gibt die Zeichenfolge zurück, die mit dem regulären Ausdruck für das Muster übereinstimmt |
2. | regexp_extract_all (Zeichenfolge, Muster, Gruppe) Gibt die Zeichenfolge zurück, die mit dem regulären Ausdruck für das Muster und die Gruppe übereinstimmt |
3. | regexp_extract (Zeichenfolge, Muster) Gibt den ersten Teilstring zurück, der mit dem regulären Ausdruck für das Muster übereinstimmt |
4. | regexp_extract (Zeichenfolge, Muster, Gruppe) Gibt den ersten Teilstring zurück, der mit dem regulären Ausdruck für das Muster und die Gruppe übereinstimmt |
5. | regexp_like (Zeichenfolge, Muster) Gibt die Zeichenfolgenübereinstimmungen für das Muster zurück. Wenn die Zeichenfolge zurückgegeben wird, ist der Wert true, andernfalls false |
6. | regexp_replace (Zeichenfolge, Muster) Ersetzt die Instanz der Zeichenfolge, die für den Ausdruck übereinstimmt, durch das Muster |
7. | regexp_replace (Zeichenfolge, Muster, Ersetzung) Ersetzen Sie die Instanz der Zeichenfolge, die für den Ausdruck übereinstimmt, durch das Muster und die Ersetzung |
8. | regexp_split (Zeichenfolge, Muster) Teilt den regulären Ausdruck für das angegebene Muster |
JSON-Funktionen
In der folgenden Tabelle sind die JSON-Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | json_array_contains (json, Wert) Überprüfen Sie, ob der Wert in einem JSON-Array vorhanden ist. Wenn der Wert vorhanden ist, wird true zurückgegeben, andernfalls false |
2. | json_array_get (json_array, index) Holen Sie sich das Element für den Index im JSON-Array |
3. | json_array_length (json) Gibt die Länge im JSON-Array zurück |
4. | json_format (json) Gibt das JSON-Strukturformat zurück |
5. | json_parse (Zeichenfolge) Analysiert den String als JSON |
6. | json_size (json, json_path) Gibt die Größe des Werts zurück |
URL-Funktionen
In der folgenden Tabelle sind die URL-Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | url_extract_host (url) Gibt den Host der URL zurück |
2. | url_extract_path (url) Gibt den Pfad der URL zurück |
3. | url_extract_port (url) Gibt den Port der URL zurück |
4. | url_extract_protocol (url) Gibt das Protokoll der URL zurück |
5. | url_extract_query (url) Gibt die Abfragezeichenfolge der URL zurück |
Aggregierte Funktionen
In der folgenden Tabelle sind die Aggregatfunktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | avg(x) Gibt den Durchschnitt für den angegebenen Wert zurück |
2. | min (x, n) Gibt den Mindestwert aus zwei Werten zurück |
3. | max (x, n) Gibt den Maximalwert aus zwei Werten zurück |
4. | Summe (x) Gibt die Wertesumme zurück |
5. | Anzahl(*) Gibt die Anzahl der Eingabezeilen zurück |
6. | count (x) Gibt die Anzahl der Eingabewerte zurück |
7. | Prüfsumme (x) Gibt die Prüfsumme für zurück x |
8. | beliebig (x) Gibt den beliebigen Wert für zurück x |
Farbfunktionen
In der folgenden Tabelle sind die Farbfunktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | Balken (x, Breite) Rendert einen einzelnen Balken mit rgb low_color und high_color |
2. | Balken (x, Breite, niedrige Farbe, hohe Farbe) Rendert einen einzelnen Balken für die angegebene Breite |
3. | Farbe (String) Gibt den Farbwert für die eingegebene Zeichenfolge zurück |
4. | rendern (x, Farbe) Rendert den Wert x unter Verwendung der spezifischen Farbe unter Verwendung von ANSI-Farbcodes |
5. | rendern (b) Akzeptiert den Booleschen Wert b und gibt mithilfe von ANSI-Farbcodes ein Grün als wahr oder ein Rot als falsch wieder |
6. | rgb(red, green, blue) Gibt einen Farbwert zurück, der den RGB-Wert von drei Komponentenfarbwerten erfasst, die als int-Parameter im Bereich von 0 bis 255 angegeben werden |
Array-Funktionen
In der folgenden Tabelle sind die Array-Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | array_max (x) Findet das max-Element in einem Array |
2. | array_min (x) Findet das min-Element in einem Array |
3. | array_sort (x) Sortiert die Elemente in einem Array |
4. | array_remove (x, Element) Entfernt das bestimmte Element aus einem Array |
5. | concat (x, y) Verkettet zwei Arrays |
6. | enthält (x, Element) Findet die angegebenen Elemente in einem Array. True wird zurückgegeben, wenn es vorhanden ist, andernfalls false |
7. | array_position (x, element) Suchen Sie die Position des angegebenen Elements in einem Array |
8. | array_intersect (x, y) Führt einen Schnittpunkt zwischen zwei Arrays aus |
9. | element_at (Array, Index) Gibt die Position des Array-Elements zurück |
10. | Scheibe (x, Start, Länge) Schneidet die Array-Elemente mit der spezifischen Länge |
Teradata-Funktionen
In der folgenden Tabelle sind die Teradata-Funktionen aufgeführt.
S.No. | Funktionen & Beschreibung |
---|---|
1. | Index (Zeichenfolge, Teilzeichenfolge) Gibt den Index der Zeichenfolge mit der angegebenen Teilzeichenfolge zurück |
2. | Teilzeichenfolge (Zeichenfolge, Start) Gibt den Teilstring der angegebenen Zeichenfolge zurück. Hier können Sie den Startindex angeben |
3. | Teilzeichenfolge (Zeichenfolge, Start, Länge) Gibt den Teilstring der angegebenen Zeichenfolge für den spezifischen Startindex und die Länge der Zeichenfolge zurück |
Der MySQL-Connector wird zum Abfragen einer externen MySQL-Datenbank verwendet.
Voraussetzungen
Installation des MySQL-Servers.
Konfigurationseinstellungen
Hoffentlich haben Sie den MySQL-Server auf Ihrem Computer installiert. Um die MySQL-Eigenschaften auf dem Presto-Server zu aktivieren, müssen Sie eine Datei erstellen“mysql.properties” im “etc/catalog”Verzeichnis. Setzen Sie den folgenden Befehl ab, um eine mysql.properties-Datei zu erstellen.
$ cd etc $ cd catalog
$ vi mysql.properties
connector.name = mysql
connection-url = jdbc:mysql://localhost:3306
connection-user = root
connection-password = pwd
Speichern Sie die Datei und beenden Sie das Terminal. In der obigen Datei müssen Sie Ihr MySQL-Passwort in das Feld Verbindungskennwort eingeben.
Datenbank in MySQL Server erstellen
Öffnen Sie den MySQL-Server und erstellen Sie eine Datenbank mit dem folgenden Befehl.
create database tutorials
Jetzt haben Sie auf dem Server eine Datenbank mit Tutorials erstellt. Verwenden Sie zum Aktivieren des Datenbanktyps den Befehl "Tutorials verwenden" im Abfragefenster.
Tabelle erstellen
Lassen Sie uns eine einfache Tabelle in der Datenbank "Tutorials" erstellen.
create table author(auth_id int not null, auth_name varchar(50),topic varchar(100))
Tabelle einfügen
Fügen Sie nach dem Erstellen einer Tabelle drei Datensätze mit der folgenden Abfrage ein.
insert into author values(1,'Doug Cutting','Hadoop')
insert into author values(2,’James Gosling','java')
insert into author values(3,'Dennis Ritchie’,'C')
Wählen Sie Datensätze
Geben Sie die folgende Abfrage ein, um alle Datensätze abzurufen.
Abfrage
select * from author
Ergebnis
auth_id auth_name topic
1 Doug Cutting Hadoop
2 James Gosling java
3 Dennis Ritchie C
Ab sofort haben Sie Daten mit dem MySQL-Server abgefragt. Verbinden wir das MySQL-Speicher-Plugin mit dem Presto-Server.
Verbinden Sie Presto CLI
Geben Sie den folgenden Befehl ein, um das MySQL-Plugin über Presto CLI zu verbinden.
./presto --server localhost:8080 --catalog mysql --schema tutorials
Sie erhalten folgende Antwort.
presto:tutorials>
Hier “tutorials” verweist auf das Schema im MySQL-Server.
Listenschemata
Geben Sie die folgende Abfrage in Presto Server ein, um alle Schemas in MySQL aufzulisten.
Abfrage
presto:tutorials> show schemas from mysql;
Ergebnis
Schema
--------------------
information_schema
performance_schema
sys
tutorials
Aus diesem Ergebnis können wir die ersten drei Schemata als vordefiniert und das letzte als von Ihnen selbst erstellt schließen.
Listen aus dem Schema auflisten
Die folgende Abfrage listet alle Tabellen im Tutorial-Schema auf.
Abfrage
presto:tutorials> show tables from mysql.tutorials;
Ergebnis
Table
--------
author
Wir haben nur eine Tabelle in diesem Schema erstellt. Wenn Sie mehrere Tabellen erstellt haben, werden alle Tabellen aufgelistet.
Tabelle beschreiben
Geben Sie die folgende Abfrage ein, um die Tabellenfelder zu beschreiben.
Abfrage
presto:tutorials> describe mysql.tutorials.author;
Ergebnis
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Spalten aus Tabelle anzeigen
Abfrage
presto:tutorials> show columns from mysql.tutorials.author;
Ergebnis
Column | Type | Comment
-----------+--------------+---------
auth_id | integer |
auth_name | varchar(50) |
topic | varchar(100) |
Zugriff auf Tabellendatensätze
Führen Sie die folgende Abfrage aus, um alle Datensätze aus der MySQL-Tabelle abzurufen.
Abfrage
presto:tutorials> select * from mysql.tutorials.author;
Ergebnis
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Aus diesem Ergebnis können Sie MySQL-Serverdatensätze in Presto abrufen.
Tabelle mit Befehl erstellen
Der MySQL-Connector unterstützt keine Abfrage zum Erstellen von Tabellen, Sie können jedoch eine Tabelle mit dem Befehl as erstellen.
Abfrage
presto:tutorials> create table mysql.tutorials.sample as
select * from mysql.tutorials.author;
Ergebnis
CREATE TABLE: 3 rows
Sie können keine Zeilen direkt einfügen, da dieser Connector einige Einschränkungen aufweist. Die folgenden Abfragen können nicht unterstützt werden:
- create
- insert
- update
- delete
- drop
Geben Sie die folgende Abfrage ein, um die Datensätze in der neu erstellten Tabelle anzuzeigen.
Abfrage
presto:tutorials> select * from mysql.tutorials.sample;
Ergebnis
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Java Management Extensions (JMX) enthält Informationen zur Java Virtual Machine und zur Software, die in JVM ausgeführt werden. Der JMX-Connector wird zum Abfragen von JMX-Informationen auf dem Presto-Server verwendet.
Da haben wir schon aktiviert “jmx.properties” Datei unter “etc/catalog”Verzeichnis. Verbinden Sie nun die Prest-CLI, um das JMX-Plugin zu aktivieren.
Presto CLI
Abfrage
$ ./presto --server localhost:8080 --catalog jmx --schema jmx
Ergebnis
Sie erhalten folgende Antwort.
presto:jmx>
JMX-Schema
Geben Sie die folgende Abfrage ein, um alle Schemas in "jmx" aufzulisten.
Abfrage
presto:jmx> show schemas from jmx;
Ergebnis
Schema
--------------------
information_schema
current
Tabellen anzeigen
Verwenden Sie den folgenden Befehl, um die Tabellen im „aktuellen“ Schema anzuzeigen.
Abfrage 1
presto:jmx> show tables from jmx.current;
Ergebnis
Table
------------------------------------------------------------------------------
com.facebook.presto.execution.scheduler:name = nodescheduler
com.facebook.presto.execution:name = queryexecution
com.facebook.presto.execution:name = querymanager
com.facebook.presto.execution:name = remotetaskfactory
com.facebook.presto.execution:name = taskexecutor
com.facebook.presto.execution:name = taskmanager
com.facebook.presto.execution:type = queryqueue,name = global,expansion = global
………………
……………….
Abfrage 2
presto:jmx> select * from jmx.current.”java.lang:type = compilation";
Ergebnis
node | compilationtimemonitoringsupported | name | objectname | totalcompilationti
--------------------------------------+------------------------------------+--------------------------------+----------------------------+-------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | true | HotSpot 64-Bit Tiered Compilers | java.lang:type=Compilation | 1276
Abfrage 3
presto:jmx> select * from jmx.current."com.facebook.presto.server:name = taskresource";
Ergebnis
node | readfromoutputbuffertime.alltime.count
| readfromoutputbuffertime.alltime.max | readfromoutputbuffertime.alltime.maxer
--------------------------------------+---------------------------------------+--------------------------------------+---------------------------------------
ffffffff-ffff-ffff-ffff-ffffffffffff | 92.0 | 1.009106149 |
Der Hive-Connector ermöglicht das Abfragen von Daten, die in einem Hive-Data-Warehouse gespeichert sind.
Voraussetzungen
- Hadoop
- Hive
Hoffentlich haben Sie Hadoop und Hive auf Ihrem Computer installiert. Starten Sie alle Dienste einzeln im neuen Terminal. Starten Sie dann den Hive-Metastore mit dem folgenden Befehl:
hive --service metastore
Presto verwendet den Hive-Metastore-Service, um die Details der Hive-Tabelle abzurufen.
Konfigurationseinstellungen
Erstellen Sie eine Datei “hive.properties” unter “etc/catalog”Verzeichnis. Verwenden Sie den folgenden Befehl.
$ cd etc $ cd catalog
$ vi hive.properties
connector.name = hive-cdh4
hive.metastore.uri = thrift://localhost:9083
Nachdem Sie alle Änderungen vorgenommen haben, speichern Sie die Datei und beenden Sie das Terminal.
Datenbank erstellen
Erstellen Sie eine Datenbank in Hive mit der folgenden Abfrage:
Abfrage
hive> CREATE SCHEMA tutorials;
Nachdem die Datenbank erstellt wurde, können Sie sie mit der überprüfen “show databases” Befehl.
Tabelle erstellen
Tabelle erstellen ist eine Anweisung zum Erstellen einer Tabelle in Hive. Verwenden Sie beispielsweise die folgende Abfrage.
hive> create table author(auth_id int, auth_name varchar(50),
topic varchar(100) STORED AS SEQUENCEFILE;
Tabelle einfügen
Die folgende Abfrage wird verwendet, um Datensätze in die Tabelle des Bienenstocks einzufügen.
hive> insert into table author values (1,’ Doug Cutting’,Hadoop),
(2,’ James Gosling’,java),(3,’ Dennis Ritchie’,C);
Starten Sie Presto CLI
Sie können Presto CLI starten, um das Hive-Speicher-Plugin mit dem folgenden Befehl zu verbinden.
$ ./presto --server localhost:8080 --catalog hive —schema tutorials;
Sie erhalten folgende Antwort.
presto:tutorials >
Listenschemata
Geben Sie den folgenden Befehl ein, um alle Schemas im Hive-Connector aufzulisten.
Abfrage
presto:tutorials > show schemas from hive;
Ergebnis
default
tutorials
Listet Tabellen auf
Verwenden Sie die folgende Abfrage, um alle Tabellen im Schema "Tutorials" aufzulisten.
Abfrage
presto:tutorials > show tables from hive.tutorials;
Ergebnis
author
Tabelle abrufen
Die folgende Abfrage wird verwendet, um alle Datensätze aus der Tabelle des Bienenstocks abzurufen.
Abfrage
presto:tutorials > select * from hive.tutorials.author;
Ergebnis
auth_id | auth_name | topic
---------+----------------+--------
1 | Doug Cutting | Hadoop
2 | James Gosling | java
3 | Dennis Ritchie | C
Der Kafka Connector für Presto ermöglicht den Zugriff auf Daten von Apache Kafka mit Presto.
Voraussetzungen
Laden Sie die neueste Version der folgenden Apache-Projekte herunter und installieren Sie sie.
- Apache ZooKeeper
- Apache Kafka
Starten Sie ZooKeeper
Starten Sie den ZooKeeper-Server mit dem folgenden Befehl.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
Jetzt startet ZooKeeper den Port auf 2181.
Starten Sie Kafka
Starten Sie Kafka in einem anderen Terminal mit dem folgenden Befehl.
$ bin/kafka-server-start.sh config/server.properties
Nach dem Start von kafka wird die Portnummer 9092 verwendet.
TPCH-Daten
Laden Sie tpch-kafka herunter
$ curl -o kafka-tpch
https://repo1.maven.org/maven2/de/softwareforge/kafka_tpch_0811/1.0/kafka_tpch_
0811-1.0.sh
Jetzt haben Sie den Loader mit dem obigen Befehl von Maven Central heruntergeladen. Sie erhalten eine ähnliche Antwort wie die folgende.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
5 21.6M 5 1279k 0 0 83898 0 0:04:30 0:00:15 0:04:15 129k
6 21.6M 6 1407k 0 0 86656 0 0:04:21 0:00:16 0:04:05 131k
24 21.6M 24 5439k 0 0 124k 0 0:02:57 0:00:43 0:02:14 175k
24 21.6M 24 5439k 0 0 124k 0 0:02:58 0:00:43 0:02:15 160k
25 21.6M 25 5736k 0 0 128k 0 0:02:52 0:00:44 0:02:08 181k
………………………..
Machen Sie es dann mit dem folgenden Befehl ausführbar:
$ chmod 755 kafka-tpch
Führen Sie tpch-kafka aus
Führen Sie das Programm kafka-tpch aus, um eine Reihe von Themen mit tpch-Daten mit dem folgenden Befehl vorzuladen.
Abfrage
$ ./kafka-tpch load --brokers localhost:9092 --prefix tpch. --tpch-type tiny
Ergebnis
2016-07-13T16:15:52.083+0530 INFO main io.airlift.log.Logging Logging
to stderr
2016-07-13T16:15:52.124+0530 INFO main de.softwareforge.kafka.LoadCommand
Processing tables: [customer, orders, lineitem, part, partsupp, supplier,
nation, region]
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-1
de.softwareforge.kafka.LoadCommand Loading table 'customer' into topic 'tpch.customer'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-2
de.softwareforge.kafka.LoadCommand Loading table 'orders' into topic 'tpch.orders'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-3
de.softwareforge.kafka.LoadCommand Loading table 'lineitem' into topic 'tpch.lineitem'...
2016-07-13T16:15:52.834+0530 INFO pool-1-thread-4
de.softwareforge.kafka.LoadCommand Loading table 'part' into topic 'tpch.part'...
………………………
……………………….
Jetzt werden Kafka-Tabellen Kunden, Bestellungen, Lieferanten usw. mit tpch geladen.
Konfigurationseinstellungen hinzufügen
Fügen Sie die folgenden Konfigurationseinstellungen für den Kafka-Connector auf dem Presto-Server hinzu.
connector.name = kafka
kafka.nodes = localhost:9092
kafka.table-names = tpch.customer,tpch.orders,tpch.lineitem,tpch.part,tpch.partsupp,
tpch.supplier,tpch.nation,tpch.region
kafka.hide-internal-columns = false
In der obigen Konfiguration werden Kafka-Tabellen mit dem Programm Kafka-tpch geladen.
Starten Sie Presto CLI
Starten Sie Presto CLI mit dem folgenden Befehl:
$ ./presto --server localhost:8080 --catalog kafka —schema tpch;
Hier “tpch" ist ein Schema für den Kafka-Connector und Sie erhalten die folgende Antwort.
presto:tpch>
Listet Tabellen auf
Die folgende Abfrage listet alle Tabellen in auf “tpch” Schema.
Abfrage
presto:tpch> show tables;
Ergebnis
Table
----------
customer
lineitem
nation
orders
part
partsupp
region
supplier
Beschreiben Sie die Kundentabelle
Die folgende Abfrage beschreibt “customer” Tabelle.
Abfrage
presto:tpch> describe customer;
Ergebnis
Column | Type | Comment
-------------------+---------+---------------------------------------------
_partition_id | bigint | Partition Id
_partition_offset | bigint | Offset for the message within the partition
_segment_start | bigint | Segment start offset
_segment_end | bigint | Segment end offset
_segment_count | bigint | Running message count per segment
_key | varchar | Key text
_key_corrupt | boolean | Key data is corrupt
_key_length | bigint | Total number of key bytes
_message | varchar | Message text
_message_corrupt | boolean | Message data is corrupt
_message_length | bigint | Total number of message bytes
Die JDBC-Schnittstelle von Presto wird für den Zugriff auf Java-Anwendungen verwendet.
Voraussetzungen
Installieren Sie presto-jdbc-0.150.jar
Sie können die JDBC-JAR-Datei unter folgendem Link herunterladen:
https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.150/
Fügen Sie die JAR-Datei nach dem Herunterladen dem Klassenpfad Ihrer Java-Anwendung hinzu.
Erstellen Sie eine einfache Anwendung
Erstellen wir eine einfache Java-Anwendung mithilfe der JDBC-Schnittstelle.
Codierung - PrestoJdbcSample.java
import java.sql.*;
import com.facebook.presto.jdbc.PrestoDriver;
//import presto jdbc driver packages here.
public class PrestoJdbcSample {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("com.facebook.presto.jdbc.PrestoDriver");
connection = DriverManager.getConnection(
"jdbc:presto://localhost:8080/mysql/tutorials", "tutorials", “");
//connect mysql server tutorials database here
statement = connection.createStatement();
String sql;
sql = "select auth_id, auth_name from mysql.tutorials.author”;
//select mysql table author table two columns
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
int id = resultSet.getInt("auth_id");
String name = resultSet.getString(“auth_name");
System.out.print("ID: " + id + ";\nName: " + name + "\n");
}
resultSet.close();
statement.close();
connection.close();
}catch(SQLException sqlException){
sqlException.printStackTrace();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
Speichern Sie die Datei und beenden Sie die Anwendung. Starten Sie nun den Presto-Server in einem Terminal und öffnen Sie ein neues Terminal, um das Ergebnis zu kompilieren und auszuführen. Es folgen die Schritte -
Zusammenstellung
~/Workspace/presto/presto-jdbc $ javac -cp presto-jdbc-0.149.jar PrestoJdbcSample.java
Ausführung
~/Workspace/presto/presto-jdbc $ java -cp .:presto-jdbc-0.149.jar PrestoJdbcSample
Ausgabe
INFO: Logging initialized @146ms
ID: 1;
Name: Doug Cutting
ID: 2;
Name: James Gosling
ID: 3;
Name: Dennis Ritchie
Erstellen Sie ein Maven-Projekt, um die benutzerdefinierte Funktion von Presto zu entwickeln.
SimpleFunctionsFactory.java
Erstellen Sie die SimpleFunctionsFactory-Klasse, um die FunctionFactory-Schnittstelle zu implementieren.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.metadata.FunctionListBuilder;
import com.facebook.presto.metadata.SqlFunction;
import com.facebook.presto.spi.type.TypeManager;
import java.util.List;
public class SimpleFunctionFactory implements FunctionFactory {
private final TypeManager typeManager;
public SimpleFunctionFactory(TypeManager typeManager) {
this.typeManager = typeManager;
}
@Override
public List<SqlFunction> listFunctions() {
return new FunctionListBuilder(typeManager)
.scalar(SimpleFunctions.class)
.getFunctions();
}
}
SimpleFunctionsPlugin.java
Erstellen Sie eine SimpleFunctionsPlugin-Klasse, um die Plugin-Schnittstelle zu implementieren.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.type.TypeManager;
import com.google.common.collect.ImmutableList;
import javax.inject.Inject;
import java.util.List;
import static java.util.Objects.requireNonNull;
public class SimpleFunctionsPlugin implements Plugin {
private TypeManager typeManager;
@Inject
public void setTypeManager(TypeManager typeManager) {
this.typeManager = requireNonNull(typeManager, "typeManager is null”);
//Inject TypeManager class here
}
@Override
public <T> List<T> getServices(Class<T> type){
if (type == FunctionFactory.class) {
return ImmutableList.of(type.cast(new SimpleFunctionFactory(typeManager)));
}
return ImmutableList.of();
}
}
Ressourcendatei hinzufügen
Erstellen Sie eine Ressourcendatei, die im Implementierungspaket angegeben ist.
(com.tutorialspoint.simple.functions.SimpleFunctionsPlugin)
Wechseln Sie nun zum Speicherort der Ressourcendatei @ / path / to / resource /
Dann fügen Sie die Änderungen hinzu,
com.facebook.presto.spi.Plugin
pom.xml
Fügen Sie der Datei pom.xml die folgenden Abhängigkeiten hinzu.
<?xml version = "1.0"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint.simple.functions</groupId>
<artifactId>presto-simple-functions</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>presto-simple-functions</name>
<description>Simple test functions for Presto</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-spi</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-main</artifactId>
<version>0.149</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
<build>
<finalName>presto-simple-functions</finalName>
<plugins>
<!-- Make this jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</build>
</project>
SimpleFunctions.java
Erstellen Sie die SimpleFunctions-Klasse mit Presto-Attributen.
package com.tutorialspoint.simple.functions;
import com.facebook.presto.operator.Description;
import com.facebook.presto.operator.scalar.ScalarFunction;
import com.facebook.presto.operator.scalar.StringFunctions;
import com.facebook.presto.spi.type.StandardTypes;
import com.facebook.presto.type.LiteralParameters;
import com.facebook.presto.type.SqlType;
public final class SimpleFunctions {
private SimpleFunctions() {
}
@Description("Returns summation of two numbers")
@ScalarFunction(“mysum")
//function name
@SqlType(StandardTypes.BIGINT)
public static long sum(@SqlType(StandardTypes.BIGINT) long num1,
@SqlType(StandardTypes.BIGINT) long num2) {
return num1 + num2;
}
}
Nachdem die Anwendung erstellt wurde, kompilieren Sie die Anwendung und führen Sie sie aus. Es wird die JAR-Datei erstellt. Kopieren Sie die Datei und verschieben Sie die JAR-Datei in das Zielverzeichnis des Presto-Server-Plugins.
Zusammenstellung
mvn compile
Ausführung
mvn package
Starten Sie nun den Presto-Server neu und verbinden Sie den Presto-Client. Führen Sie dann die benutzerdefinierte Funktionsanwendung wie unten erläutert aus.
$ ./presto --catalog mysql --schema default
Abfrage
presto:default> select mysum(10,10);
Ergebnis
_col0
-------
20