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:

ini 复制代码
# 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 工具别名

ini 复制代码
alias bend-local="databend-query local"
  • 命令行交互(REPL) 模式

    • 直接在终端输入 bend-local 这一行命令后,我们将进入REPL模式,这里融合了客户端和服务端,类似 duckdb cli工具使用。
    sql 复制代码
    ❯ 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 和 输出格式
    css 复制代码
     bend-local --query "select number, number + 1 as b from numbers(10)" --output-format parquet > /tmp/a.parquet
  • Shell pipe 模式分析数据, $STDIN 宏将解析stdin流作为一个临时stage表

    perl 复制代码
    ❯ 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 等)

    ini 复制代码
    ❯ 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') "
  • 分析系统进程 ,找出每个用户占用的内存

    perl 复制代码
    ❯ 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 等)

    css 复制代码
    ❯ 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
  • 其他好玩的分析例子,等待你的挖掘

相关推荐
IvorySQL38 分钟前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫1 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20082 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql