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

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/5489811/blog/10110289

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。