cube.js 通过presto-gateway 进行连接
cube.js 对于presto 的支持是通过presto-client 刚好简单修改了一个可以支持presto-gateway 连接的
以下是一个简单的集成,以及关于集成中原有的一些修改
环境准备
- docker-compose 文件
version: "3"
services:
proxy:
image: dalongrong/presto-gateway:1.6.1
ports:
- "8888:8888"
- "8082:8082"
- "8083:8083"
build: ./
volumes:
- "./config.yml.template:/config.yml.template"
presto1:
image: starburstdata/presto
ports:
- "8080:8080"
presto2:
image: starburstdata/presto
ports:
- "8081:8080"
- presto-gateway 配置
requestRouter:
port: 8888
name: prestoRouter
cacheDir: /var/log/prestoproxy/cache
historySize: 1000
backends:
- localPort: 8082
name: presto1
proxyTo: http://presto1:8080
routingGroup: adhoc
- localPort: 8083
name: presto2
proxyTo: http://presto2:8080
routingGroup: scheduled
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
notifier:
smtpHost: localhost
smtpPort: 587
sender: presto-gw-monitor-noreply@lyft.com
recipients:
- prestodev@yourorg.com
modules:
- com.lyft.data.gateway.module.ProxyBackendProviderModule
- com.lyft.data.gateway.module.GatewayProviderModule
- com.lyft.data.gateway.module.NotifierModule
managedApps:
- com.lyft.data.gateway.GatewayManagedApp
- com.lyft.data.gateway.ActiveClusterMonitor
# Logging settings.
logging:
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
level: INFO
# Logger-specific levels.
loggers:
com.lyft: DEBUG
appenders:
- type: console
- type: file
currentLogFilename: /var/log/prestoproxy/prestoproxy-java.log
archivedLogFilenamePattern: /var/log/prestoproxy/prestoproxy-java-%d{yyyy-MM-dd}-%i.log.gz
archivedFileCount: 7
timeZone: UTC
maxFileSize: 100MB
cube.js presto 项目
- 初始化
cubejs create -d presto mypresto
- 修改生成的项目
主要是关于presto-client 的替换以及环境变量的添加,还有就是部分代码的简单修改 - package.json 改进
yarn add @dalongrong/presto-client
- 添加环境变量
.env
CUBEJS_DB_HOST=localhost
CUBEJS_DB_USER=dalong
CUBEJS_DB_PORT=8888
CUBEJS_DB_CATALOG=memory
CUBEJS_DB_TYPE=prestodb
CUBEJS_ROUTING_GROUP=scheduled
CUBEJS_DB_SCHEMA=default
CUBEJS_API_SECRET=71a4454929e8b429158759a29f4a7ddfcc957505efed7e5a93e02a859d7bd9f7ed7e49daac2243024a94cdaa3e88faa4cd3946dae7aea562f947bb1ed525125b
- 修改关于presto 连接
文件node_modules/@cubejs-backend/prestodb-driver/driver/PrestoDriver.js
const presto = require('@dalongrong/presto-client');
const {
map, zipObj, prop, concat
} = require('ramda');
const BaseDriver = require('@cubejs-backend/query-orchestrator/driver/BaseDriver');
const SqlString = require('sqlstring');
class PrestoDriver extends BaseDriver {
constructor(config) {
super();
this.config = {
host: process.env.CUBEJS_DB_HOST,
port: process.env.CUBEJS_DB_PORT,
catalog: process.env.CUBEJS_DB_CATALOG,
schema: process.env.CUBEJS_DB_SCHEMA,
user: process.env.CUBEJS_DB_USER,
routingGroup: process.env.CUBEJS_ROUTING_GROUP,
basic_auth: process.env.CUBEJS_DB_PASS ? {
user: process.env.CUBEJS_DB_USER,
password: process.env.CUBEJS_DB_PASS
} : undefined,
...config
};
this.catalog = this.config.catalog;
this.client = new presto.Client(this.config);
}
testConnection() {
const query = SqlString.format(`show catalogs like ?`, [`%${this.catalog}%`]);
return this.queryPromised(query)
.then(catalogs => {
if (catalogs.length === 0) {
throw new Error(`Catalog not found '${this.catalog}'`);
}
});
}
query(query, values) {
const queryWithParams = SqlString.format(query, values);
return this.queryPromised(queryWithParams);
}
queryPromised(query) {
return new Promise((resolve, reject) => {
let fullData = [];
this.client.execute({
query,
schema: this.config.schema || 'default',
routingGroup: this.config.routingGroup,
data: (error, data, columns) => {
const normalData = this.normalizeResultOverColumns(data, columns);
fullData = concat(normalData, fullData);
},
success: () => {
resolve(fullData);
},
error: error => {
reject(error.message || JSON.stringify(error));
}
});
});
}
normalizeResultOverColumns(data, columns) {
const columnNames = map(prop('name'), columns || []);
const arrayToObject = zipObj(columnNames);
return map(arrayToObject, data || []);
}
}
module.exports = PrestoDriver;
启动&&效果
- 启动
yarn dev
- 效果

- 生成schema
- 集成效果

- presto-gatesway 效果


说明
以上是一个简单的集成,通过presto-gateway 可以方便我们的管理,是一个很不错的工具
参考资料
https://github.com/cube-js/cube.js
https://github.com/rongfengliang/presto-client-node
https://github.com/lyft/presto-gateway
cube.js 通过presto-gateway 进行连接的更多相关文章
- cube.js 学习 cube 连接mongodb 试用
cube.js 对于mongodb 的连接是通过mongodb bi connector(mysql 协议)处理的,以下为简单的试用 安装mongo bi connector 这个玩意用docker ...
- cube.js 最近版本的一些更新
有一段时间没有关注cube.js 了,刚好晚上收到一封来自官方的更新介绍,这里简单说明下 更多的数据驱动支持 bigquey, clickhouse snowflake,presto (很棒),hiv ...
- cube.js 开源模块化分析框架
cube.js 是一款很不错的模块化web 应用分析框架.cube.js 的设计主要是面向serverless 服务, 但是同时也支持所有rdbms, cube.js不是一个单体应用,包含了以下部分: ...
- cube.js 集成cratedb 的尝试
cratedb 提供了pg协议的兼容,我们可以直接使用pg client 连接,但是也不是完整实现pg 协议的 以下是 cube.js 集成cratedb 的一些尝试 环境准备 docker-comp ...
- cube.js 新版本试用preosto
cube.js 新的版本添加了更多的数据库的支持,但是目前cubejs-cli 以及官方文档问题还挺多,使用不清晰,文档有明显的错误 以下演示presto 数据库的使用 环境准备 安装新版本的cube ...
- cube.js 学习(八)backend部署模式
cube.js 从设计上就进行了系统上的分层,backend,frontend,backend 是cube.js 的核心 对于cube.js backend 的部署官方也提供了好多中方法 部署模型 s ...
- cube.js 学习(七)cube.js type 以及format 说明
cube.js 对于measure以及dimension 提供了丰富的数据类型,基本满足我们常见应用的开发,同时对于不同类型也提供了 格式化的操作 measure类型 number 格式 purc ...
- 通过JS判断联网类型和连接状态
通过JS判断联网类型和连接状态 中国的移动网络环境复杂,为了给用户带去更好访问体验,开发者希望能了解用户当前的联网方式,然后给用户一个符合当前网络环境的请求结果. W3C的规范中给出了一个方法来获得现 ...
- ASP.net与SQLite数据库通过js和ashx交互(连接和操作)
ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后 ...
随机推荐
- Shell获取指定区间随机未占用的端口号
说明 最近在写Jenkins自动运维的脚本,由于是用的docker,部署的时候启动容器端口号冲突会导致部署失败,用的微服务也不在乎端口什么的,只求部署成功,所以想了很久,参考了一些文章,还有运维大哥的 ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
- TestNG系列(五)TestNG测试报告
以TestNG执行测试方法后会生成test-output测试结果集,其中index.html是测试结果的展示.TestNG的测试报告可以通过IReporter监听自定义,也可以通过第三方工具(Repo ...
- Excel转换成xml文件
namespace ExcelToXml { class Program { [STAThread] static void Main(string[] args) { Program program ...
- MongoDB netcore
mongodb.driver mongodb.driver.core url: http://dl.mongodb.org/dl/win32/x86_64 ********************* ...
- Smack 4.3.4 API
Smack 4.3.4 API 包 包 描述 org.igniterealtime.smack.smackrepl Smack的REPL(读取评估打印循环). org.jivesoftware.s ...
- 《C++ Primer》学习总结;兼论如何使用'书'这种帮助性资料
6.25~ 6.27,用了3天翻了一遍<C++ Primer>. ▶书的 固有坏处 一句话: 代码比 文字描述 好看多了.————> 直接看习题部分/ 看demo就行了 看文字在描述 ...
- .NET中的异步编程——动机和单元测试
背景 自.NET 4.5发布以来已经有很长一段时间了.留在了我们的记忆里,其发布在2012年8月15日.是的,六年前.感觉老了吗?好吧,我不打算让你做出改变,而是提醒你一些.NET发布的亮点.此版本带 ...
- 嵌入式Web服务器boa在ARM平台的移植步骤
1.下载http://www.boa.org/ 2.解压tar xzf boa-0.94.13.tar.gz 3.编译cd boa-0.94.13/src./configure 生成了makefile ...
- 聊一下domain和entity
这段时间在负责海外事务,今天带着客户端走海外商店的支付流程.因为在国内接的大多数是渠道聚合的SDK,客户端就很少关注支付业务流程,只是按照以前的接的demo然后按照渠道提供的参数就直接上了.先po一张 ...