首页 > 其他分享 >Presto学习笔记——Go客户端连接Presto

Presto学习笔记——Go客户端连接Presto

时间:2024-05-12 14:57:18浏览次数:19  
标签:err presto Presto go client Go trino com 客户端

1.查询PrestoDB(facebook版本)

1.创建PrestoDB环境

使用docker创建presto测试环境

https://hub.docker.com/r/prestodb/presto/tags

拉取镜像

docker pull prestodb/presto:0.284

启动

docker run -p 8080:8080 -ti -v /Users/lintong/Downloads/config.properties:/opt/presto-server/etc/config.properties -v /Users/lintong/Downloads/jvm.config:/opt/presto-server/etc/jvm.config prestodb/presto:0.284

其中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

jvm.config

-server
-Xmx4G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-Djdk.attach.allowAttachSelf=true

配置参考:https://github.com/prestodb/presto/tree/master/docker/etc

https://prestodb.github.io/docs/current/installation/deployment.html

访问localhost:8080

2.使用client连接PrestoDB

可以使用presto-go-client,官方文档

https://github.com/prestodb/presto-go-client

引入依赖

go get github.com/prestodb/presto-go-client/presto

go连接数据库使用的是database/sql,还需要额外引入具体数据库的driver,比如

presto的github.com/prestodb/presto-go-client/presto

mysql的github.com/go-sql-driver/mysql

impala的github.com/bippio/go-impala

查询presto代码

import (
	"database/sql"
	"fmt"
	_ "github.com/prestodb/presto-go-client/presto"
)

func main() {
	dsn := "http://user@localhost:8080?catalog=default&schema=test"
	db, err := sql.Open("presto", dsn)
	if err != nil {
		fmt.Println(err)
	}
	rows, err := db.Query("SELECT name, age FROM foobar WHERE id=?")
	if err != nil {
		fmt.Println(err)
 	}

	// 迭代结果行
	for rows.Next() {
		var col1 string
		var col2 int
		if err := rows.Scan(&col1, &col2); err != nil {
			fmt.Println("扫描行失败:", err)
			return
		}
		fmt.Println(col1, col2)
	}
}

参考:golang+presto查询在数据平台中ad hoc查询

如果想同时查询多行的话,也可以先定义一个struct

type YourTable struct {
  Col1 string
  Col2 int
  Col3 float64
  // 其他列...
}

然后在迭代查询的时候使用这个struct

// 迭代结果行
for rows.Next() {
  var row YourTable
  if err := rows.Scan(&row.Col1, &row.Col2, &row.Col3); err != nil {
    fmt.Println("扫描行失败:", err)
    return
  }
  fmt.Println(row)
}

3.使用REST API连接PrestoDB

参考官方文档

https://prestodb.io/docs/current/develop/client-protocol.html

其实presto-go-client底层也是使用presto的REST API的POST请求来提交任务,参考源码

https://github.com/prestodb/presto-go-client/tree/master/presto#L635

2.查询Trino(社区版本)

1.创建Trino环境

创建Trino环境用于测试可以使用docker

https://hub.docker.com/r/trinodb/trino/tags

拉取镜像

docker pull trinodb/trino:435

启动

docker run -p 8080:8080 -ti trinodb/trino:435

访问localhost:8080,默认密码不启用,随便输入一个用户名

界面

2.使用client连接trino

可以使用trino-go-client,官方文档

https://github.com/trinodb/trino-go-client

引入依赖

go get github.com/trinodb/trino-go-client/trino

查询trino代码

import (
	"database/sql"
	"fmt"
)
import _ "github.com/trinodb/trino-go-client/trino"

func main() {
	dsn := "http://user@localhost:8080?catalog=default&schema=test"
	db, err := sql.Open("trino", dsn)
	if err != nil {
		fmt.Println(err)
	}
	db.Query("SELECT * FROM foobar WHERE id=?", 1, sql.Named("X-Trino-User", string("Alice")))
}

3.使用REST API连接TrinoDB

参考官方文档

https://trino.io/docs/current/develop/client-protocol.html

其实trino-go-client底层也是使用trino的REST API的POST请求来提交任务,参考源码

https://github.com/trinodb/trino-go-client/blob/master/trino/trino.go#L820

 

标签:err,presto,Presto,go,client,Go,trino,com,客户端
From: https://www.cnblogs.com/tonglin0325/p/18187831

相关文章

  • 玩转AI,笔记本电脑安装属于自己的Llama 3 8B大模型和对话客户端
    2024年4月18日,Meta开源了Llama3大模型,把AI的门槛降低到了最低,这是人工智能领域的一个重要飞跃。我们个人也可以部署大模型了,这简直就是给个人开发者发了个大红包!Llama3模型有不同的参数版本,本文主要分享我在个人笔记本电脑是部署8B参数过程和编写客户端,让我们大家......
  • go学习笔记——wire依赖注入
    wire是google开源的使用依赖注入来自动连接组件的代码生成工具安装goinstallgithub.com/google/wire/cmd/wire@latest官方使用文档:https://github.com/google/wire/blob/main/docs/guide.md文档参考:手把手,带你从零封装Gin框架(十二):使用Wire依赖注入重构golang中的依......
  • 如何编译Godot(Godot & Godot with C#)
    要在Windows下编译Godot,需要以下环境:VisualStudioCommunity:使用最新版本。MinGW-w64:可以替代VisualStudio。请务必将其安装/配置为使用posix线程模型。使用MinGW编译主分支时,需要GCC9或更高版本。Python3.6+:确保在安装程序中启用将Python添加到环境变量......
  • KAN: Kolmogorov–Arnold Networks 学术论文全译
    KAN:Kolmogorov–ArnoldNetworks学术论文全译来源 https://zhuanlan.zhihu.com/p/696001648 KAN:Kolmogorov–ArnoldNetworks https://arxiv.org/pdf/2404.19756讨论Applicationaspects:WehavepresentedsomepreliminaryevidencesthatKANsaremoreeffective......
  • go channel ->同步
    通道并非用来取代锁,各有不同使用场景。通道解决高级别逻辑层次并发架构,锁则用来保护低级别局部代码安全。●竟态条件:多线程同时读写共享资源(竟态资源)。●临界区:读写竟态资源的代码片段。●互斥锁:同一时刻,只有一个线程能进入临界区。●读写锁:写独占(其他读写均被阻塞),读共享。●信号......
  • golang channel 封装
    对于closed或nil通道,规则如下:无论收发,nil通道都会阻塞。不能关闭nil通道。重复关闭通道,引发panic!向已关闭通道发送数据,引发panic!从已关闭通道接收数据,返回缓冲数据或零值。nil通道是指没有make的变量。鉴于通道关闭后,所有基于此的阻塞都被解除,可用作通知。没......
  • luogu P4342[IOI1998]Polygon
    阅读前需深剖析分系列是记录我个人的做题思路,实现过程的全面分析,存在内容可靠、思路健全、分析到位、试错纠错等优于一般题解的特征,其中,Quest部分表示探索问题,我会在此提出做题时的想法、问题,并在内容中得到解决,因此建议从上到下按序浏览,以防出现思路断层,内容不衔接的情况,感谢理......
  • Beego-Orm-关联查询
    packagemodelsimport"github.com/beego/beego/v2/client/orm"typeCustomerstruct{Idint`orm:"pk;auto""`UserNamestringSexstring`orm:"size(5)"`Mobilestring`orm:"size(11)"`Ord......
  • Django性能之道:缓存应用与优化实战
    title:Django性能之道:缓存应用与优化实战date:2024/5/1118:34:22updated:2024/5/1118:34:22categories:后端开发tags:缓存系统Redis优点Memcached优缺点Django缓存数据库优化性能监控安全实践引言在当今的互联网时代,用户对网站和应用程序的性能要求越来......
  • django 点击按钮,显示文本,js实现
    方法一:点击显示弹出框<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>数据弹窗</title><scripttype="text/javascript">functionshowAlert(data){......