DuckDB学习-初识tpcds

本文详细介绍了如何编译DuckDB以支持TPC-DS扩展,包括设置环境变量和执行编译命令。接着,演示了生成TPC-DS测试数据并执行查询的过程。此外,还提供了查询计划的查看方法和DuckDB代码调试的步骤,特别是使用VSCode进行调试的配置。
摘要由CSDN通过智能技术生成

DuckDB编译

跑TPC-DS

编译DuckDB支持TPC-DS扩展

下载代码,然后进源码目录,执行下面两个步骤。

export BUILD_TPCDS=1
make debug

执行数据生成及查询

在build/debug下可以看到duckdb二进制,直接执行它

./duckdb tpcds.db 

这样可以让数据持久化
在这里插入图片描述
接着执行call dsdgen(sf=0.01) 生成10MB的tpcds测试数据。

可以开始执行tpcds语句测试了,执行pragma tpcds(1)执行第一条query语句,参数是查询语句的序号,范围是1~99。

如果想看语句的原始语句,可以通过翻源码,在extension/tpcds/include/queries下有99条语句的duckdb改写版。

TPC-DS简单分析(v3.2.0)

事实表

Store_Sales
表中每行代表一个单独的订单项,这些订单项都是通过店铺渠道销售的,并且记录在事实表store_sales中。

Store_returns
表中每行代表一个单独的退货项,这些退货项都是通过店铺渠道销售的,并且记录在事实表store_returns中。

Catalog_sales
表中每行代表一个单独的订单项,这些订单项都是通过目录渠道销售的,并且记录在事实表catalog_sales中。

Catalog_returns
表中每行代表一个单独的退货项,这些退货项都是通过目录渠道销售的,并且记录在事实表catalog_returns中。

Web_sales
表中每行代表一个单独的订单项,这些订单项都是通过网络渠道销售的,并且记录在事实表web_sales中。

Web_returns
表中每行代表一个单独的退货项,这些退货项都是通过网络渠道销售的,并且记录在事实表web_returns中。

Inventory
表中每行表示指定周特定仓库中某商品的数量。

维度表

Stores
该维度表中每行显示一个商店的细节信息。
Call Center
该维度表中每行显示一个呼叫中心的细节信息。
Catalog_page
该维度表中每行显示一个目录页的细节信息。
Web_site
该维度表中每行显示一个网站的细节信息。
Web_page
该维度表中每行显示一个网页的细节信息。
Warehouse
该维度表中代表显示一个存货仓库的信息。
Customer
该维度表中每行代表一个顾客的信息。
Customer_address
该维度表中每行代表一个唯一的顾客地址信息(有些顾客会有不止一个地址)。
Customer_demographics
顾客人群统计表中,有一行是用来显示特定的人群信息组合。
Date_dim
该表中,每一行代表一个公历日。该行的儒略日可以用作代理关键字(d_date_sk)
Household_demographics
该表中,每一行表示一个家庭人群状况。
Item
该表中,每一行表示一个特定产品的构成(例如,尺寸,颜色,制造商等)。
Income_band
该表中的每一行表示一个收入范围的信息。
Promotion
该表中,每行表示一个特定商品的促销信息(例如广告,销售,公关)。
Reason
此表中的每一行表示一个被退货的商品的退货原因。
Ship_mode
此表中的每一行表示一种运送模式。
Time_dim
该表中每行表示一秒。
dsdgen_version
基准测试时不会用到这个表,dsdgen会生成一个flat file(见附录F),这个文件可以确保你在使用时,当前的数据集是由正确版本的TPC-DS搭建的。

查看查询计划

安装duckdb的依赖

pip3 install duckdb

在duckdb的执行终端里执行命令开启profile输出到json文件

PRAGMA enable_profiling='json';

然后可以执行源码的

scripts/generate_queryplan.py /path/to/jsonfile /path/to/output.html

output.html是图像化的方式展示查询计划,并且包含每个算子的执行时间,用浏览器打开即可,可以看执行计划比较直观一些。

DuckDB的代码调试(以vscode为例)

去examples/embedded-c++目录下,执行

cmake .
make -j

即可编译代码,但是为了能gdb执行,需要修改下编译文件,让生成的二进制带有debug信息,修改cmake文件如下:

cmake_minimum_required(VERSION 2.8.12)
project(example-c++)

set(CMAKE_CXX_STANDARD 11)

include_directories(../../src/include)
link_directories(../../build/debug/src)

add_definitions("-Wall -g")
add_executable(main main.cpp)
target_link_libraries(main duckdb)

重点是两个:

  1. 链接的动态库的路径改成debug路径下
  2. 添加-Wall -g标志,生成带debug信息的二进制版本

然后在main.cpp里打断点,执行调试。
vscode会生成launch.json文件,修改下二进制路径,改成生成的二进制路径即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/9bcb4008a5974b26aeff1d52c88a321f.png

参考:

  1. https://github.com/duckdb/duckdb
  2. https://blog.csdn.net/github_38325884/article/details/72835953?ops_request_misc=&request_id=&biz_id=102&utm_term=TPC-DS&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduweb~default-5-72835953.nonecase&spm=1018.2226.3001.4450
  3. https://duckdb.org/dev/profiling
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值