Databend 玩转Local 模式
目前开发者们需要尝鲜 Databend, 可以选择使用 Databend Cloud 或者按官方文档部署 Databend 服务。 由于 Databend 架构有三层,因此部署Databend 服务一般需要启动 databend-query
, databend-meta
, minio
三个进程,同时需要修改端口等配置项,流程上略显复杂。 有没有更快的方式可以快速尝鲜 Databend 呢?
Python Binding
一种快速的方式是将 Databend 跑在python中,借助 rust 优良的生态,我们基于 pyo3 库发布了 python binding,可以在本地 juypter 或者 colab 等在线服务中使用 Databend:
# pip install databend from databend import SessionContext ctx = SessionContext() df = ctx.sql("select number, number + 1, number::String as number_p_1 from numbers(8)") # convert to pyarrow df.to_py_arrow() # convert to pandas df.to_pandas()
Databend Local 模式
借鉴于 clickhouse-local
, duckdb
等嵌入型数据库的优点,我们在 Databend 中也可以开启 local 模式。
local
模式 是一个 Databend 的简易版本,用户无需部署 Databend 服务即可在命令中 用 SQL 和 Databend 交互。它的好处在于简化了开发安装,同时方便开发者们用 SQL 使用 Databend支持的功能进行简单的数据处理。 如果你需要在生产环境使用 Databend,我们建议按官网推荐部署 Databend 服务 或 Databend Cloud,但如果你是开发人员或测试工程师,你可以使用 local
模式 来玩转 Databend。
local
模式将启动一个临时的 databend-query 进程,这个进程融合了客户端和服务端,并且他的存储是在临时目录中,生命周期跟随进程,进程离开后资源也将销毁,你可以在一个服务器中启动多个 local
进程,他们的资源是相互隔离的。
下面通过例子介绍一下,每个例子都是简短的几行命令,介绍 local
模式可以实现什么功能。
在这之前,你需要下载 databend-query 二进制,然后将二进制放到 PATH 环境变量中,植入 bend-local
工具别名
alias bend-local="databend-query local"
-
命令行交互 ( REPL ) 模式
- 直接在终端输入 bend-local 这一行命令后,我们将进入 REPL 模式,这里融合了客户端和服务端,类似 duckdb cli 工具使用。
-
❯ bend-local Welcome to Databend, version v1.2.4-nightly-326cabe38056168dd261f744609ea85319f02686(rust-1.72.0-nightly-2023-09-02T15:18:48.006847567Z). databend-local:) select max(a) from range(1,1000) t(a); ┌────────────┐ │ max(a) │ │ Int64 NULL │ ├────────────┤ │ 999 │ └────────────┘ 1 row result in 0.036 sec. Processed 999 rows, 999 B (27.89 thousand rows/s, 217.90 KiB/s) databend-local:)
- 值得注意的是,bend-local 支持配置文件
~/.config/databend/config.toml
来做一些个性化客户端配置,配置文件的格式和 bendsql 是兼容的。
<!---->
-
一行命令生成一个 parquet 文件
- 支持 --query, --output-format 参数 传入查询 SQL 和输出格式
-
bend-local --query "select number, number + 1 as b from numbers(10)" --output-format parquet > /tmp/a.parquet
-
Shell pipe 模式分析数据, $STDIN 宏将解析 stdin 流作为一个临时 stage 表
-
❯ echo '3,4' | bend-local -q "select $1 a, $2 b from $STDIN (file_format => 'csv') " --output-format table SELECT $1 AS a, $2 AS b FROM 'fs:///dev/fd/0' (FILE_FORMAT => 'csv') ┌─────────────────┐ │ a │ b │ │ String │ String │ ├────────┼────────┤ │ '3' │ '4' │ └─────────────────┘
-
注意上面的 SQL 在 shell 中,使用了 $ 来对 shell 进行转义
-
读取 stage table (本地文件,外部 s3 等)
-
❯ bend-local --query "select count() from 'fs:///tmp/a.parquet' (file_format => 'parquet') " 10 ❯ bend-local --query "select count() from 'https://datafuse-1253727613.cos.ap-hongkong.myqcloud.com/data/books.parquet' (file_format => 'parquet') " 2 ❯ bend-local --query "select $1, $2 from 'http://www.geoplugin.net/csv.gp?ip=3.3.3.3' (file_format => 'csv') "
-
-
分析系统进程 ,找出每个用户占用的内存
-
❯ ps aux | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $4) }' | bend-local -q "select $1 as user, sum($2::double) as memory from $STDIN (file_format => 'tsv') group by user " sundy 9.100000000000001 root 1.2 dbus 0.0
-
-
数据清洗,将一个格式转换为其他格式 (支持csv, tsv, parquet, ndjson 等)
-
❯ bend-local -q 'select rand() as a, rand() as b from numbers(100)' > /tmp/a.tsv ❯ cat /tmp/a.tsv | bend-local -q "select $1 a, $2 b from $STDIN (file_format => 'tsv') " --output-format parquet > /tmp/a.parquet
-
-
其他好玩的分析例子,等待你的挖掘

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
极致优化 SSD 并行读调度
作者 | GL 导读 提升检索漏斗一致性,要求在粗排阶段引入更丰富的信号,这些信号的需求量已经远远超出了内存的承受能力。为此,我们考虑引入基于NVMe SSD的分层存储。本文详细探讨了一种长尾可控的方法论,以及在这个方法论的约束下,如何极致优化读调度。这些方法对于实施类似LargerThanMem的技术也将提供有价值的启发。 全文10593字,预计阅读时间27分钟。 01 业务背景 业务需要更大存储空间,需求量预期远超过内存可承受。 举例来说,客户落地页是客户营销内容的核心阵地,增强对客户落地页内容特征理解,才能实现用户兴趣和客户投放的精准匹配,提升用户体验和转化率,凤巢正排服务引入 URL 明文是关键一步。凤巢正排服务检索查询完全基于内存,内存存储着亿级别广告物料和检索线程需要的上下文。凤巢正排服务实例上万,单实例内存 Quota 已高达云原生红线,常态利用率 85+%,URL 明文引入后,即使业务上极致去重压缩,单实例还需增加数十GB,预期随广告库会继续增长,内存已远远不够。 广告检索过程引入基于 NVMe SSD 的分级存储,长尾控制尤其关键。 检索效果对处理性能极为敏感,若查询...
- 下一篇
Enhancer-轻量化的字节码增强组件包
一、问题描述 当我们的业务发展到一定阶段的时候,系统的复杂度往往会非常高,不再是一个简单的单体应用所能够承载的,随之而来的是系统架构的不断升级与演变。一般对于大型的To C的互联网企业来说,整个系统都是构建于微服务的架构之上,原因是To C的业务有着天生的微服务化的诉求:需求迭代快、业务系统多、领域划分多、链路调用关系复杂、容忍延迟低、故障传播快。微服务化之后带来的问题也很明显:服务的管理复杂、链路的梳理复杂、系统故障会在整个链路中迅速传播。 这里我们不讨论链路的依赖或服务的管理等问题,本次要解决的问题是怎么防止单个系统故障影响整个系统。这是一个复杂的问题,因为服务的传播特性,一个服务出现故障,其他依赖或被依赖的服务都会受到影响。为了找到解决问题的办法,我们试着通过5why提问法来找答案。 PS:这里说的系统故障,是特指由于慢调用、慢查询等影响系统性能而导致的系统故障。 Q1 怎么防止单个系统故障影响整个系统? A:避免耽搁系统的故障的传播。 Q2 怎么避免故障的传播? A:找到系统故障的原因,解决故障。 Q3 怎么找到故障的原因? A:找到并优化系统中耗时长的方法。 Q4 怎么找到系...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池