成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【大數據】Presto(Trino)配置參數以及 SQL語法

數據庫 其他數據庫
使用分桶后,Trino優化器可以將查詢操作分配到不同的節點上并行執行,以實現更快的查詢速度。比如,如果你的分桶表中有100個桶,Trino可以把這100個桶分配到100個不同的節點上并行執行查詢操作,從而大大提高查詢效率。

一、概述

Trino (前身為PrestoSQL)是一款高性能,分布式的SQL查詢引擎,可以用于查詢各種類型的數據存儲,包括Hive、Mysql、Elasticsearch、Kafka、PostgreSQL等。在使用Trino時,可以通過一些參數來控制查詢的行為,例如:

  • coordinator節點和worker節點的數量: 這兩個參數控制了Trino集群中管理查詢的節點數量,它們的配合調整可以影響整個集群的查詢效率。
  • memory和cpu的分配: 這些參數控制了Trino在查詢和計算時使用的內存和CPU數量。可以根據集群的實際硬件情況和查詢工作負載來靈活配置。
  • join分布式:控制join關鍵字的使用。join分布式是一種優化策略,在大規模數據集上運行的查詢中處理join操作非常簡單。
  • 指定數據源:可以使用catalog和schema(數據庫)兩個關鍵字指定Trino查詢的數據源。
  • 分區和bucket表的查詢: 分區表是對表進行分區和拆分的一種方式,通過分區表查詢只需掃描相應分區,提高了查詢效率。bucket表是一種將數據分散在多個桶中的表格,它們可以通過桶數對數據進行分片,并行化查詢操作,從而提高查詢性能。

Trino官方文檔:https://trino.io/docs/current/

關于更多的Presto介紹可以參考我這篇文章:大數據Hadoop之——基于內存型SQL查詢引擎Presto(Presto-Trino環境部署)

二、Trino coordinator 和 worker 節點作用

1)Trino coordinator 節點作用

在Trino中,coordinator節點是整個集群的管理節點,它的作用包括:

  • 查詢協調:coordinator節點負責協調所有查詢操作,如解析sql語句、生成查詢計劃、調度和分配查詢任務等。它會根據查詢的復雜度和數據源的規模來判斷查詢是否需要被分割和并行執行,以提高查詢效率和資源利用率。
  • 資源管理:coordinator節點負責管理整個集群的資源,如內存、CPU等。它會根據每個查詢的資源需求和集群的可用資源情況來動態調整資源使用情況,以保證集群的穩定性和性能。
  • 節點管理:coordinator節點負責管理集群的所有worker節點,包括狀態更新、任務分配、心跳檢測等。它會監測節點的可用性和狀態,并根據集群負載情況來動態調整節點的任務分配和負載平衡策略,以保證整個集群的穩定性和可用性。
  • 集群監控:coordinator節點負責監控整個集群的運行狀況,包括各個節點的狀態、負載情況、查詢性能等。它會將這些信息進行匯總和分析,并生成相應的報告和指標,以便管理員進行集群的優化和調整。
  • 系統管理:coordinator節點負責管理整個Trino系統,包括配置文件管理、插件管理、安全管理等。它會根據管理員的設定和權限來進行相應的管理和控制,以保證整個系統的穩定性和安全性。

因此,可以看出coordinator節點在Trino集群中起到了至關重要的作用,它是整個集群的大腦和控制中心。為了保證集群的性能和可用性,建議對coordinator節點進行適當的配置和管理,以滿足查詢復雜度和數據量的需求。

2)Trino worker 節點作用

在Trino中,worker節點是集群中執行任務的節點。它的作用包括:

  • 任務執行:worker節點負責執行coordinator分配給它的任務,如數據讀取、數據過濾、數據聚合等。它會將數據處理的結果返回給coordinator節點,以便進行下一步的處理和計算。
  • 數據存儲:worker節點負責存儲集群中的數據,包括數據的分片、存儲和管理等。它會維護一個數據存儲倉庫,并根據查詢計劃和任務分配來讀取和處理數據,以提高查詢效率和資源利用率。
  • 資源管理:worker節點會根據集群的資源限制和任務優先級,動態調整資源的分配和使用情況,以保證集群的穩定性和性能。
  • 網絡通信:worker節點負責與coordinator節點進行通信,并根據分配的任務來讀取和處理數據。它需要保證和coordinator節點的通信暢通,并及時反饋處理結果。

因此,可以看出worker節點在Trino集群中扮演了至關重要的角色,它是整個集群的工作機器和數據存儲倉庫。為了保證集群的性能和可用性,建議對worker節點進行適當的配置和管理,以滿足查詢和數據處理的需求。同時,建議用戶根據自己的業務需求和數據量來增加或降低worker節點的數量和配置,以達到最佳的資源利用率和查詢效率。

三、Trino 參數詳細講解

1)coordinator 節點配置

1、config.properties 配置文件

config.properties是Trino服務器的配置文件,它包含了Trino服務器的各種配置選項,如節點配置、查詢優化器配置、內存和CPU配置、集群安全配置等。下面是幾個常見的config.properties選項:

  • coordinator=true/false:配置當前節點是否為coordinator節點。
  • node-scheduler.include-coordinator:是Trino協調節點(coordinator)的配置參數之一,用于控制調度器是否包括協調節點自身作為可用的執行節點。默認情況下,node-scheduler.include-coordinator的值為 true,即協調節點被視為可用的執行節點。
  • task.max-memory-per-node:該參數用于設置每個工作節點上單個任務(task)可使用的最大內存量。它定義了每個任務在工作節點上可以使用的最大內存量。單位可以是字節(B)、千字節(KB)、兆字節(MB)、千兆字節(GB)或太字節(TB)。
  • query.max-memory:這個參數設置了每個查詢可使用的最大內存量。它控制著整個查詢在所有工作節點上可以使用的總內存量。當查詢需要的內存超過這個限制時,Trino將拋出內存不足的錯誤。
  • query.max-memory-per-node:此參數定義了每個工作節點可使用的最大內存量。它限制了單個查詢在單個工作節點上可以使用的最大內存量。當單個任務需要的內存超過此限制時,Trino將啟動其他任務以利用其他工作節點上的內存。
  • query.max-total-memory-per-node: 該參數限制了每個工作節點可使用的最大總內存量。它控制著所有正在運行的查詢在單個工作節點上可以使用的總內存量。當工作節點上的查詢總內存使用超過此限制時,Trino將拒絕新的查詢請求。
  • memory.heap-headroom-per-node:用來配置Trino worker節點的Java堆空間余量的選項。它指定了每個worker節點JVM堆中保留的額外內存空間的大小,用于處理臨時內存和查詢的內存需求。默認情況下,memory.heap-headroom-per-node的值是0。這意味著Trino使用默認的Java Heap內存分配策略來處理內存,并盡可能避免OOM(內存不足)錯誤。
  • query.max-run-time:配置每個查詢的最大運行時間,防止查詢太復雜導致資源耗盡。
  • http-server.http.port=8080:配置http服務器的端口號。
  • query.results.max-age=1m:配置查詢結果在內存中的最大保存時間,防止浪費內存。
  • query.priority=1:配置查詢的優先級,以便coordinator節點調度任務。
  • exchange.client-threads=2:配置worker節點與coordinator節點之間數據交換的線程數量,以提高網絡通信效率。
  • plugin.<plugin-name>.<option>=<value>:配置插件選項和值,以擴展Trino的功能和支持新的數據源。

因此,config.properties文件對于Trino服務器的性能和功能都具有重要的作用,建議管理員和用戶仔細查閱和配置。同時,可以根據業務需求和系統資源情況來適當調整其中的選項,以達到最佳的性能和效率。

示例配置如下:

###################################
## 協調節點配置
###################################
coordinator=true

###################################
## HTTP服務配置
###################################

http-server.http.port=8080

###################################
## 內存配置
###################################

query.max-memory=5GB
query.max-memory-per-node=2GB
query.max-total-memory-per-node=10GB

###################################
## 發現服務配置
###################################

discovery-server.enabled=true
discovery.uri=http://localhost:8080

###################################
## 插件配置
###################################

plugin.myplugin.property=value

###################################
## 其他配置
###################################

# 身份驗證配置
http-server.authentication.type=PASSWORD
http-server.authentication.password-user-mapping-file=etc/password-authenticator.properties

# 授權配置
access-control.name=my-access-control
access-control.config-file=etc/access-control.properties

# 元數據存儲配置
metadata.store.type=jdbc
metadata.store.jdbc-url=jdbc:postgresql://localhost:5432/trino_metadata
metadata.store.username=trino
metadata.store.password=secret

# 集群配置
discovery-server.enabled=true
discovery.uri=http://localhost:8080
node-scheduler.include-coordinator=true

# 指標和監控配置
metrics.enabled=true
metrics.reporting-interval=1m
metrics.store.type=prometheus
metrics.store.reporters=prometheus
metrics.store.prometheus.uri=http://localhost:9090/metrics

2、jvm.config 配置文件

Trino協調節點(coordinator)的JVM配置文件是 jvm.config。它位于Trino安裝目錄的 etc 文件夾中。

jvm.config 文件用于配置協調節點的Java虛擬機(JVM)參數,以控制內存、垃圾回收、線程等方面的行為。

一些常用的JVM參數及其含義:

-server:啟用服務器模式,優化性能。-Xmx8G:設置Java堆的最大內存為8GB。最好是配置小于32G。-XX:+UseG1GC:啟用G1垃圾收集器。-XX:InitialRAMPercentage:是一個Java虛擬機(JVM)參數,用于設置初始堆內存的百分比。它指定了初始堆內存大小相對于可用系統內存的比例。默認值為64,表示JVM將會使用可用系統內存的64%。

`-XX:InitialRAMPercentage` 該參數通常與`-Xmx`(最大堆內存)參數一起使用,以確保在應用程序啟動時分配足夠的初始堆內存。

-XX:InitialRAMPercentage 和 -Xmx 都是用于配置Java虛擬機(JVM)的堆內存參數。下面是一個示例配置和相應的換算示例:

-XX:InitialRAMPercentage=25
-Xmx8G

假設可用系統內存為16GB(Gigabytes),我們將根據配置計算初始堆內存和最大堆內存的大小。

首先,我們使用 -XX:InitialRAMPercentage 參數來計算初始堆內存的大小:

初始堆內存大小 = 可用系統內存 * (InitialRAMPercentage / 100)

初始堆內存大小 = 16GB * (25 / 100) = 4GB

接下來,我們使用 -Xmx 參數來指定最大堆內存的大小,這里設置為8GB。

因此,根據以上配置和換算示例,初始堆內存將為4GB,最大堆內存將為8GB。

請注意,確保根據實際系統內存大小和應用程序的內存需求進行適當的調整。對于初始堆內存和最大堆內存,建議根據應用程序的性能需求進行合理配置,以確保充分利用系統資源并避免內存不足或浪費的情況。

此外,-XX:InitialRAMPercentage 和 -Xmx 參數的可用性和行為可能因JVM的版本和廠商而有所不同。請參考所使用JVM的文檔以獲取準確的信息。
  • -XX:MaxRAMPercentage:是一個JVM參數,用于指定JVM使用系統內存的最大百分比。這個參數可以被用于Trino和其他Java應用程序。它的默認值為64,表示JVM將最大使用可用系統內存的64%。例如,如果系統有16GB內存可用,則默認情況下JVM將使用10.24GB內存。
  • -XX:MaxRAMPercentage:是一個JVM參數,用于控制G1垃圾收集器中堆區域的大小。G1垃圾收集器是Java SE 9及更高版本中使用的一種高效的垃圾收集器,可以用于Trino和其他Java應用程序。堆區域是G1垃圾收集器中內存分配的最小單位。這個參數的默認值是堆大小除以2048,最小值是1MB,最大值是32MB。這意味著如果堆大小是8GB,則每個堆區域的默認大小是4MB。
  • -XX:+ExplicitGCInvokesConcurrent:是一個JVM參數,用于啟用顯式垃圾回收調用時并發處理的垃圾收集器。在此模式下,會在發出垃圾回收調用時,同時運行一個并發垃圾收集器,以優化程序的性能。
  • -XX:+ExitOnOutOfMemoryError:是一個JVM參數,用于在發生OutOfMemoryError錯誤時自動退出JVM。OutOfMemoryError指的是Java程序中無法分配足夠的內存的情況。默認情況下,JVM在發生OutOfMemoryError時不會終止。如果您使用這個參數,則JVM將在發生OutOfMemoryError時立即退出,從而防止程序繼續運行并進一步損壞數據或系統。
  • -XX:-OmitStackTraceInFastThrow:是一個JVM參數,用于在Java程序中啟用錯誤堆棧跟蹤提示。通常,當Java程序中發生異常或錯誤時,系統會生成一個堆棧跟蹤提示來告訴您程序執行過程中出現了哪些錯誤。默認情況下,當程序中的代碼中發生快速失敗時,JVM會省略異常堆棧跟蹤提示,以提高程序的性能。這意味著,當程序出現錯誤時,您可能無法輕松地DEBUG并查找到底發生了什么錯誤。
  • -XX:ReservedCodeCacheSize:是一個JVM參數,用于設置JIT編譯器代碼緩存的最大大小。默認情況下,JIT編譯器會將編譯過的代碼存放在代碼緩存中,以加速程序的后續執行。然而,如果緩存大小不夠,JIT編譯器可能會不得不丟棄部分編譯過的代碼,這會導致程序性能下降。
  • -XX:PerMethodRecompilationCutoff:是一個Java虛擬機(JVM)的參數,用于設置方法重新編譯的閾值。它指定了一個方法在執行多少次之后需要重新編譯。該參數的值通常是一個正整數,默認值為15000。
  • -XX:PerBytecodeRecompilationCutoff:是一個Java虛擬機(JVM)的參數,用于設置字節碼重新編譯的閾值。它指定了一個方法的字節碼在執行多少次之后需要重新編譯。該參數的值通常是一個正整數,默認值為10000。
  • -Djdk.attach.allowAttachSelf 是一個Java系統屬性,用于允許Java進程自己附加到自己。該屬性通常用于啟用Java程序自我監視和調試的功能。默認情況下,此屬性被設置為"false",禁止Java進程附加到自身。要允許Java進程附加到自身,需要將該屬性設置為"true"。
  • -Djdk.nio.maxCachedBufferSize:是一個Java系統屬性,用于設置NIO緩沖區的最大緩存大小。NIO(New I/O)是Java提供的一種高性能I/O操作方式。該屬性指定了NIO緩沖區在緩存中的最大大小。默認情況下,該屬性未設置,使用JVM內部的默認值。可以通過設置該屬性為一個正整數值來限制NIO緩沖區的最大緩存大小,以控制內存的使用。默認值取決于 Java 運行時環境的版本。在 Java 8 及之前的版本中,默認值為 -1,表示不限制 NIO 緩沖區的最大緩存大小。而在 Java 9 及以后的版本中,默認值為 0,表示禁用 NIO 緩沖區的緩存,即不進行緩存。
  • -XX:+UnlockDiagnosticVMOptions:是一個 Java 虛擬機(JVM)選項,用于解鎖診斷性 VM 選項。默認情況下,JVM 中的某些診斷功能是被禁用的,通過使用該選項,可以解鎖并啟用這些診斷功能。這個選項通常用于開發和調試目的。
  • -XX:+UseAESCTRIntrinsics:是一個 Java 虛擬機(JVM)選項,用于啟用AES-CTR加密算法的硬件優化。當該選項被啟用時,JVM會嘗試使用CPU的AES指令集來執行AES-CTR操作,以提高加密和解密的性能。
  • -XX:-G1UsePreventiveGC:是一個 Java 虛擬機(JVM)選項,用于禁用 G1 垃圾收集器的預防性垃圾回收(Preventive GC)機制。預防性垃圾回收是 G1 垃圾收集器的一項特性,旨在在堆內存使用率較低時主動觸發垃圾回收,以避免堆內存達到極限。

這個選項通常用于開發和以下是一個示例的 jvm.config 配置文件:

-server
-Xmx2G
-XX:InitialRAMPercentage=20
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC

請注意,具體的配置取決于您的硬件資源、工作負載和性能需求。您可以根據您的具體情況來調整和優化JVM參數。

3、log.properties 配置文件

# 設置日志級別,有四個級別:DEBUG, INFO, WARN and ERROR
io.trino=INFO

4、node.properties 配置文件

# 環境的名字。集群中所有的Trino節點必須具有相同的環境名稱。
node.environment=production
# 此Trino安裝的唯一標識符。這對于每個節點都必須是唯一的,不填則是隨機的。
node.id=trino-coordinator
# 數據目錄的位置(文件系統路徑)。Trino在這里存儲日志和其他數據。
node.data-dir=/opt/apache/trino/data

2)worker 節點配置

1、config.properties 配置文件

以下是一個Trino工作節點的配置文件示例config.properties,用于配置工作節點的基本設置,包括通信、內存、線程池以及插件等。

coordinator=false
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=10GB
query.max-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://<your-coordinator-node-hostname>:8080
exchange.http-client.keep-alive-interval=5m
exchange.http-client.idle-timeout=10m
task.concurrency=16
task.writer-count=4
jvm.configured-initial-ram-percent=80
memory.heap-headroom-per-node=1GB

以下是示例配置文件中的各項設置的含義:

  • coordinator=false:設置當前節點為工作節點而非協調器節點。
  • node-scheduler.include-coordinator=false:用于決定協調器節點是否應該納入查詢計算資源的調度范圍。當該參數設置為true時,協調器節點可以作為一個普通的計算節點來執行查詢,從而幫助處理計算負載。當設置false,這將確保協調器節點不會執行查詢,從而避免了性能瓶頸問題,一般是設置false,禁用協調節點又充當worker節點使用。
  • http-server.http.port=8080:HTTP服務器監聽的端口號,用于接收REST API請求。
  • query.max-memory=10GB:單個查詢可用的最大內存數量。

- query.max-memory-per-node=2GB:單個工作節點可用于執行查詢的最大內存數量。

  • discovery-server.enabled=true:啟用節點發現服務器,用于協調 Trino 群集中的各個節點。
  • discovery.uri=http://<your-coordinator-node-hostname>:8080:發現服務器節點的URL。
  • exchange.http-client.keep-alive-interval=5m:控制通信時,HTTP客戶端保持活動狀態的時間。
  • exchange.http-client.idle-timeout=10m:當HTTP客戶端處于空閑狀態時,客戶端關閉連接之前保持空閑的時間量。
  • task.concurrency=16:在工作節點上同時執行的最大任務數。
  • task.writer-count=4:在工作節點上同時寫入數據的最大任務數。
  • jvm.configured-initial-ram-percent=80:JVM初始堆大小作為RAM百分比的設置。
  • memory.heap-headroom-per-node=1GB:為Trino查詢準備的每個節點之外的堆剩余空間。

請注意,這只是一個示例配置,您可以根據您自己的需求進行修改。有關更多配置參數和詳細信息,請參閱官方文檔:https://trino.io/docs/current/installation/deployment.html。

2、jvm.config 配置文件

下面是一個Trino工作節點的jvm.config示例配置文件,它包含了一些常用的JVM參數,可以幫助你優化Trino的性能和內存利用率:

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=16M
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ErrorFile=/var/log/trino/hs_err_pid%p.log
-Djava.library.path=/usr/lib/hadoop/lib/native
-Djdk.attach.allowAttachSelf=true

這里是每個參數的含義:

  • -server: 使用JVM的服務模式,通常是用于長時間運行的應用程序。
  • -Xmx16G: 設置JVM可用的最大堆內存為16GB。
  • -XX:+UseG1GC: 啟用G1垃圾回收器。
  • -XX:G1HeapRegionSize=16M: 設置G1 GC的堆區域大小為16MB。
  • -XX:+HeapDumpOnOutOfMemoryError: 在內存溢出時生成堆內存轉儲文件。
  • -XX:OnOutOfMemoryError=kill -9 %p: 在內存溢出時強制殺死Trino進程。
  • -XX:ErrorFile=/var/log/trino/hs_err_pid%p.log: 將JVM錯誤信息輸出到指定的錯誤文件中。
  • -XX:+ExplicitGCInvokesConcurrent: 啟用顯式垃圾回收操作。
  • -Djava.library.path=/usr/lib/hadoop/lib/native: 指定Hadoop本機庫的路徑。
  • -Djdk.attach.allowAttachSelf=true: 允許JVM附加到它自己的進程,有助于診斷和調試。

這只是一個基礎配置文件,用戶可以根據各自的需求和系統資源狀況進行微調。同時需要注意的是,在配置JVM參數時,一定要謹慎,了解每個參數的含義和影響,并進行適當的測試和調優,以確保系統的穩定性和性能。

3、log.properties 配置文件

# 設置日志級別,有四個級別:DEBUG, INFO, WARN and ERROR
io.trino=INFO

4、node.properties 配置文件

# 環境的名字。集群中所有的Trino節點必須具有相同的環境名稱。
node.environment=production
# 此Trino安裝的唯一標識符。這對于每個節點都必須是唯一的,不填則是隨機的。
node.id=trino-worker-1
# 數據目錄的位置(文件系統路徑)。Trino在這里存儲日志和其他數據。
node.data-dir=/opt/apache/trino/data

四、環境準備

如已經有環境了,可以忽略,如想快熟部署Presto(Trino)環境可參考我這篇文章:【大數據】通過 docker-compose 快速部署 Presto(Trino)保姆級教程

docker exec -it trino-coordinator bash

# --catalog:數據源 --schema:數據庫
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

五、Trino 中的 數據源(catalog)

在Trino中,catalog是一種用于管理數據連接和數據源的概念。一個catalog可以代表一個數據庫、一個hive實例、或者其他支持的數據源。Trino可以通過啟用不同的catalog來連接和查詢不同的數據源,這樣你就可以使用一個Trino集群查詢多個數據源中的數據,而不需要使用不同的工具和語言進行查詢。

Trino中支持的catalog包括:

系統catalog:包括system、memory、information_schema和metadata,用于管理和查詢Trino系統和運行時信息。

  • Hive catalog:用于連接處理Hive數據。
  • Mysql catalog:用于連接在Trino中,catalog是一種用于管理數據連接和數據源的概念。一個catalog可以代表一個數據庫、一個hive實例、或者其他支持的數據源。Trino可以通過啟用不同的catalog來連接和查詢不同的數據源,這樣你就可以使用一個Trino集群查詢多個數據源中的數據,而不需要使用不同的工具和語言進行查詢。

Trino中支持的catalog包括:

  • 系統catalog:包括system、memory、information_schema和metadata,用于管理和查詢Trino系統和運行時信息。
  • Mysql catalog:用于連接Mysql數據源。
  • Hive catalog:用于連接處理Hive數據。
  • Kafka catalog:用于連接處理Kafka消息數據。
  • Elasticsearch catalog:用于連接處理Elasticsearch數據。
  • Jdbc catalog:用于連接處理關系型數據庫。
  • Cassandra catalog:用于連接處理Cassandra NoSQL數據庫。

除了以上常用的catalog,Trino還支持許多其他的catalog。你可以通過配置文件或者命令行參數來啟用或禁用不同的catalog,以便連接和查詢不同的數據源。當啟用一個catalog時,需要為它配置連接參數和身份憑證等信息。Trino中的catalog提供了一種簡便而靈活的方式來管理連接和查詢多種數據源,使得數據查詢和集成變得更加高效和便利。

官方文檔:https://trino.io/docs/current/connector.html

六、Trino 數據類型

官方文檔:https://trino.io/docs/current/language/types.html

1)基礎數據類型

類型

描述

示例

boolean

true或false

true

tinyint

8位有符號整數,最小值? 2^7 ,最大值 2^7-1

42

smallint

16位有符號整數,最小值? 2^15 ,最大值 2^15-1

42

integer、int

32位有符號整數,最小值? 2^31 ,最大值 2^31-1


bigint

64位有符號整數,最小值? 2^63 ,最大值 2^63-1


real

32位浮點數,遵循IEEE 754二進制浮點數運算標準

2.71828

double

64位浮點數,遵循IEEE 754二進制浮點數運算標準

2.71828

decimal

固定精度小數

123456.7890

varchar、varchar(n)

可變長度字符串。字符長度為m(m < n),則分配m個字符

“hello world”

char、char(n)

固定長度字符串。總是分配n個字符,不管字符長度是多少。char表示char(1)

“hello world”

  • 當字符串cast為char(n),不足的字符用空格填充,多的字符被截斷
  • 當插入字符串到類型為char(n)的列,不足的字符用空格填充,多了就報錯
  • 當插入字符串到類型為varchar(n)的列,多了就報錯

2)集合數據類型

類型

示例

array

array[‘apples’, ‘oranges’, ‘pears’]

map

map(array[‘a’, ‘b’, ‘c’], array[1, 2, 3])

json


row

row(1, 2, 3)

3)日期時間數據類型

官方文檔:https://trino.io/docs/current/functions.html

類型

描述

示例

date

包含年、月、日的日期

2023-05-14

time

包含時、分、秒、毫秒的時間, 時區可選

16:26:08.123 +08:00

timestamp

包含日期和時間, 時區可選

2023-05-14 16:26:08.123 Asia/Shanghai

interval year to month

間隔時間跨度為年、月

interval ‘1-2’ year to month

interval day to second

間隔時間跨度為天、時、分、秒、毫秒

interval ‘5’ day to second

七、Trino 內置函數

Trino(之前叫Presto)提供了豐富的內置函數,可以滿足各種SQL查詢的需求。下面對Trino內置函數進行詳細說明。

1)數學函數

  • abs(numeric):返回數值參數的絕對值。
  • ceil(numeric):返回不小于參數的最小整數。
  • floor(numeric):返回不大于參數的最大整數。
  • exp(numeric):返回e的冪次方。
  • log(numeric):返回參數的自然對數。
  • log10(numeric):返回參數的以10為底的對數。
  • sqrt(numeric):返回參數的平方根。
  • power(numeric, numeric):返回第一個參數乘以第二個參數的冪次方。

2)字符串函數

  • concat(string1, string2, ...): 連接兩個或多個字符串。
  • length(str):返回字符串的長度。
  • substring(str, from [, length ]):返回字符串的子串,從指定位置開始(從1開始計算),如果提供長度參數,則截取固定長度。
  • replace(str, pattern, replacement):將字符串中的符合模式的字符串替換成替換字符串。
  • lower(str) / upper(str):將字符串轉化成小寫/大寫。
  • trim([characters from] string):去掉字符串頭尾指定的空格或字符。
  • regexp_extract(string, pattern, index):指定模式,并返回特定位置(從1開始計算)的匹配結果。
  • regexp_replace(string, pattern, replacement):將字符串中的符合模式的字符串替換成替換字符串。

3)日期時間函數

  • date(date_string):將日期字符串轉化成日期格式。
  • current_date:返回當前日期。
  • current_time:返回當前時間。
  • current_timestamp:返回當前時間戳。
  • year(date):返回日期的年份。
  • month(date):返回日期的月份。
  • day(date):返回日期的日份。
  • hour(timestamp):返回時間戳的小時部分。
  • minute(timestamp):返回時間戳的分鐘部分。
  • second(timestamp):返回時間戳的秒部分。

4)聚合函數

  • count(*) / count(expression):返回記錄數。count(*)表示所有行的行數,一般用于計算表的行數。count(expression)返回expression的不同值的數量。
  • sum(number):返回列數值的總和。
  • avg(numeric):返回數值列的平均值。
  • max(value) / min(value):返回列的最大值/最小值。
  • array_agg(expression):將指定表達式的結果合并為一個數組。

5)邏輯函數

  • if(condition, true_value, false_value):如果條件為真,返回true_value,否則返回false_value。
  • nullif(expression1, expression2):如果expression1等于expression2,則返回null。
  • coalesce(expression1, expression2, ...):返回參數列表中第一個非空的值。
  • and(x1, x2, ...) / or(x1, x2, ...) / not(x):邏輯運算符,返回相應的邏輯值。

6)類型轉換函數

  • cast(expression AS type):將表達式轉化為指定類型。
  • try_cast(expression AS type):嘗試將表達式轉化為指定類型,如果無法轉化,則返回null。
  • to_json(expression):將指定的值序列化為JSON字符串。
  • from_json(jsonString, type):將一個JSON字符串反序列化為指定類型。
  • to_array(map) / to_map(array):將一個map(array)轉化為一個數組(map)。

這些內置函數只是Trino中的部分函數,Trino還支持大量其他內置函數,可以參閱Trino的官方文檔獲得更詳細、更全面的信息。

八、Trino 中的 SQL 語法

連接:

# 如不是通過容器部署,自己有環境,可以忽略下來容器登錄的步驟
docker exec -it trino-coordinator bash

# --catalog:數據源 --schema:數據庫
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

官方文檔:https://trino.io/docs/current/sql.html

1)數據源語法

一般數據源配置在${TRINO_HOME}/etc/catalog目錄下

# 查看數據源
show catalogs;

當然也可以通過sql創建,示例如下:

1、配置hive數據源${TRINO_HOME}/etc/catalog/hive.conf

connector.name=hive
hive.metastore.uri=thrift://hive-metastore:9083
hive.config.resources='/opt/apache/trino/etc/catalog/core-site.xml,/opt/apache/trino/etc/catalog/hdfs-site.xml'

2、查看catalog

${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

SHOW CATALOGS;

# 查看當前 catalog
SELECT current_catalog;

2)數據庫語法(schemas)

在Trino中,catalog用于訪問數據源和外部系統。每個catalog都可以包含一個或多個schema,每個schema包含一組相關的表。你可以在Trino中使用CREATE SCHEMA、DROP SCHEMA、RENAME SCHEMA和SHOW SCHEMAS等語句來管理schema。

語法:

CREATE SCHEMA [ IF NOT EXISTS ] schema_name
[ AUTHORIZATION ( user | USER user | ROLE role ) ]
[ WITH ( property_name = expression [, ...] ) ]

以下是一些用于操作catalog schema的示例:

  • 創建一個名為schema_test的新schema
#USE 語法,USE catalog.schema 
# USE schema

USE hive.default;
CREATE SCHEMA IF NOT EXISTS schema_test;
# 查看
show schemas;

【注意】如果登錄時,沒有帶--scheme,就必須USE切換scheme,才能使用創建schema。

  1. 查看scheme
show schemas from hive;
show schemas;
  1. 刪除一個名為my_schema的schema
DROP SCHEMA hive.schema_test;
  1. 查看當前scheme
# 查看當前catalog
SELECT current_catalog;
# 查看scheme
SELECT current_schema;

3)表 DDL 語法

在Trino中,你可以使用CREATE TABLE語句來創建表,使用ALTER TABLE來修改表的結構和元數據,并使用DROP TABLE來刪除表。

下面分別介紹一下這幾個操作的語法和參數:

1、創建表 - CREATE TABLE

語法:

CREATE TABLE [ IF NOT EXISTS ]
table_name (
  { column_name data_type [ NOT NULL ]
      [ COMMENT comment ]
      [ WITH ( property_name = expression [, ...] ) ]
  | LIKE existing_table_name
      [ { INCLUDING | EXCLUDING } PROPERTIES ]
  }
  [, ...]
)
[ COMMENT table_comment ]
[ WITH ( property_name = expression [, ...] ) ]

使用CREATE TABLE創建一個新的表。下面是一個示例:

CREATE TABLE orders (
  orderkey bigint,
  orderstatus varchar,
  totalprice double,
  orderdate date
)
WITH (format = 'ORC')

# 在Trino中,你可以使用 FORMAT 子句指定查詢結果輸出的格式。Trino支持多種常見格式,包括文本(text)、CSV、JSON、javax.json、Avro、Parquet、ORC、RCFile等。

其中,my_table是你想要創建的表名,后面的括號中列出了表的列和對應的數據類型。在Trino中可以定義多種數據類型,如integer、varchar、boolean等等。更多數據類型可以查看Trino官方文檔。

你可以使用CREATE TABLE的參數進行更高級的操作,例如指定分桶(bucket)、分區(partition)和格式(format),以下是一些常用參數的示例:

CREATE TABLE my_table3 (
  column1 int,
  column2 varchar(64),
  column3 varchar(64),
  column4 varchar(64)
)
WITH (
  format = 'ORC',
  partitioned_by = ARRAY['column3','column4'],
  bucketed_by = ARRAY['column2'],
  bucket_count = 10
);
# 注意:partitioned字段必須是表的最后的字段

這個示例中,表使用ORC格式存儲,按照column3和column4列進行了分區,使用column2列進行了分桶,并設置了10個桶。

2、修改表 - ALTER TABLE

使用ALTER TABLE命令修改現有表。下面是一些常見的用法:

  • 添加列
ALTER TABLE my_table ADD COLUMN new_column datatype;
  • 修改列
ALTER TABLE my_table ALTER COLUMN column1 TYPE new_datatype;
  • 刪除列
ALTER TABLE my_table DROP COLUMN column1;
  • 添加分區
ALTER TABLE my_table ADD PARTITION (column1 = 'value1', column2 = 'value2');
  • 刪除分區
ALTER TABLE my_table DROP PARTITION (column1 = 'value1', column2 = 'value2', ...);

3、刪除表 - DROP TABLE

使用DROP TABLE語句刪除現有表。下面是一個示例:

DROP TABLE my_table;

-- 如報錯:io.prestosql.spi.security.AccessDeniedException: Access Denied: Cannot drop table
-- 在catalog hive中添加以下兩行
-- hive.allow-drop-table=true
-- hive.allow-rename-table=true

注意:刪除一個表將會永久刪除該表的全部數據,慎重操作!

4、trino 中的分區分桶

在Trino中,你可以使用分區(partition)和分桶(bucket)來優化查詢性能,提高查詢速度和效率。

1、分區(partition)

  • 分區是指把數據按照一定規則劃分成若干部分(比如按照日期、地區、類別等),每個部分就是一個分區。在Trino中,你可以使用 CREATE TABLE 語句的 partitioned_by 子句來創建一個分區表,你可以寫入數據到這個表的每個分區。
  • 使用分區對于查詢過濾條件的列進行過濾非常高效。Trino實際上將所有數據按照分區規則分布到磁盤的不同目錄下,當你執行包含了分區過濾的查詢時,Trino會自動發現這個過濾條件,并且只讀取符合條件的分區數據,這樣就可以大大提高查詢效率。

以下是一個創建一個按照日期分區的示例:

CREATE TABLE my_part_table (
  id bigint,
  name varchar(64),
  event_date date
)
WITH (
partitioned_by = ARRAY['event_date']
);

2、分桶(bucket)

  • 分桶是將表中的數據劃分成若干個桶(bucket)存儲的方式。在Trino中,你可以使用 CREATE TABLE 語句的 bucketed_by 和 bucket_count 子句來創建一個分桶表。在建表時,你需要定義一個或多個bucket列并設置桶的數量,Trino會根據這些設置把表中的數據分配到不同的桶中。

使用分桶后,Trino優化器可以將查詢操作分配到不同的節點上并行執行,以實現更快的查詢速度。比如,如果你的分桶表中有100個桶,Trino可以把這100個桶分配到100個不同的節點上并行執行查詢操作,從而大大提高查詢效率。

以下是一個創建分桶的示例:

CREATE TABLE my_bucket_table (
  id INT,
  name VARCHAR,
  age INT
)
WITH (
  bucket_count = 10,
  bucketed_by = ARRAY['id']
);

CREATE TABLE my_bucket_table_new (
  id INT,
  name VARCHAR,
  age INT
)
WITH (
  bucket_count = 10,
  bucketed_by = ARRAY['id']
);

4)添加數據

INSERT INTO my_bucket_table (id, name, age) VALUES (1, 'Tom', 20), (2, 'Jerry', 23);
INSERT INTO my_bucket_table_new SELECT * FROM my_bucket_table;

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-05-14 23:30:38

PrestoHadoop函數

2023-12-11 07:27:11

數據編排系統Alluxio數據平臺

2021-11-30 07:49:00

大數據工具 Presto

2018-03-14 07:47:41

大數據語法SQL

2017-08-09 16:13:48

SQL大數據語法

2009-11-30 18:04:13

evdo路由器

2021-08-06 11:01:23

大數據數據分析技術

2010-06-24 17:19:14

Linux chkco

2016-11-07 16:06:43

大數據SparkImpala

2010-04-12 10:46:02

Oracle性能測試

2011-05-20 17:59:06

回調函數

2017-06-23 21:32:16

MySQL大數據優化

2022-02-27 15:28:53

大數據挑戰戰略

2020-12-31 13:26:37

FacebookPrestoSQLTrino

2010-07-09 15:39:29

SQL server

2022-10-27 10:32:09

Presto SQLJoin大數據

2022-10-27 11:07:40

2022-10-27 11:31:10

Presto SQL統計計數大數據

2022-10-27 10:06:16

Presto SQLAntlr大數據

2025-06-23 10:25:00

Trino開源大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女视频在线看 | 午夜伊人| 五月激情久久 | 男女视频在线观看网站 | 日韩和的一区二区 | 伊大人久久 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 久草精品视频 | 亚洲精品中文字幕在线观看 | 亚洲精品乱码久久久久久按摩 | 羞羞视频网站 | 久久久国产一区二区三区 | 免费在线播放黄色 | 精品国产91| 国产极品91 | 欧美成人第一页 | 亚洲永久 | 日韩成人精品一区二区三区 | 亚洲精品国产综合区久久久久久久 | av一区二区三区四区 | 午夜国产一级片 | 欧美v在线| 盗摄精品av一区二区三区 | 欧美成人精品二区三区99精品 | 精品国产伦一区二区三区观看方式 | 久久国产精品视频 | 久久精品亚洲国产奇米99 | 久久免费观看一级毛片 | 伊人二区| 中文字幕亚洲无线 | 成人妇女免费播放久久久 | 成人久久18免费网站 | 亚洲视频一区在线 | 日韩欧美亚洲 | 国产精品久久毛片av大全日韩 | 亚洲天堂中文字幕 | 日日做夜夜爽毛片麻豆 | 精品国产一级 | 欧美色性 | 国产精品视频观看 | 九色在线视频 |