mac上编译tpcds(转)

本文详细介绍了在Mac OS上编译tpcds时遇到的`values.h`和`malloc.h`缺失,以及如何通过替换头文件、定义宏来解决'MAXINT'未声明的问题。通过这个过程,读者可以了解Mac平台与Linux环境差异下的代码适配技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MacOs下编译tpcds | 白发川的BLOG

MacOs下编译tpcds

tpcds是针对linux写的代码,进入tool目录执行make即可编译,在mac下编译的时候会碰到如下问题。

fatal error: ‘values.h’ file not found

错误:

./porting.h:46:10: fatal error: 'values.h' file not found
#include <values.h>
         ^~~~~~~~~~
1 error generated.
make: *** [mkheader.o] Error 1

values.h 是GNU的库,在mac下可使用如下头文件替换:

#include <limits.h>
#include <float.h>

fatal error: ‘malloc.h’ file not found

错误:

dist.c:41:10: fatal error: 'malloc.h' file not found
#include <malloc.h>
         ^~~~~~~~~~
1 error generated.
make: *** [dist.o] Error 1

mac下的malloc头文件移到了sys下,因此修改为:

#include <sys/malloc.h>

error: use of undeclared identifier ‘MAXINT’

错误:

genrand.c:87:12: error: use of undeclared identifier 'MAXINT'
      s += MAXINT;
           ^
genrand.c:117:36: error: use of undeclared identifier 'MAXINT'
   return ((double) res / (double) MAXINT);
                                   ^
genrand.c:149:26: error: use of undeclared identifier 'MAXINT'
           Z = (M * Z) % MAXINT;
                         ^
genrand.c:151:23: error: use of undeclared identifier 'MAXINT'
        M = (M * M) % MAXINT;
                      ^
genrand.c:187:53: error: use of undeclared identifier 'MAXINT'
           fres += (double) (next_random (stream) / MAXINT) - 0.5;
                                                    ^
genrand.c:234:53: error: use of undeclared identifier 'MAXINT'
           fres += (double) (next_random (stream) / MAXINT) - 0.5;
                                                    ^
genrand.c:291:68: error: use of undeclared identifier 'MAXINT'
                (double) ((double) next_random (stream) / (double) MAXINT) -
                                                                   ^
genrand.c:591:16: error: use of undeclared identifier 'MAXINT'
        skip = MAXINT / MAX_COLUMN;
               ^
8 errors generated.
make: *** [genrand.o] Error 1

这里是宏没有定义,因为mac和linux的h文件差异,部分宏mac并没有,因此直接自己添加即可:

vi genrand.h
define MAXINT 4096000

再次make即可生成对应的二进制工具文件。

### TPC-DS Benchmark数据集概述 TPC-DS是一个面向决策支持系统的基准测试工具,旨在评估数据库管理系统在复杂查询处理和大规模数据分析方面的性能[^1]。此基准由事务处理性能委员会(Transaction Processing Performance Council, TPC)开发并维护,该组织致力于定义交易处理和数据库基准,并向业界传播客观、可验证的TPC性能数据[^2]。 #### 数据模型与表结构 TPC-DS的数据模型基于零售业的实际业务流程设计而成,涵盖了销售、库存管理等多个方面。整个方案包含了7张事实表以及18维表,这些表格共同构成了一个高度复杂的星型模式(schema),能够很好地反映现实世界中的商业智能应用场景需求。 #### 查询特性 为了更贴近实际应用环境下的工作负荷特点,TPC-DS提供了99条预设SQL查询语句样本。这些查询不仅涉及单表操作,还包括多表连接、聚合函数调用等多种高级功能;同时,在编写过程中充分考虑到了各种可能影响执行效率的因素,比如分区裁剪(partition pruning)、索引选择等优化措施。 ```sql -- Example of a complex query from TPC-DS SELECT i_item_id, s_state, GROUPING(s_state) AS g_state, AVG(ss_quantity), AVG(ss_list_price), AVG(ss_coupon_amt) FROM store_sales, customer_demographics, date_dim, store, household_demographic, item WHERE ss_sold_date_sk = d_date_sk AND ... GROUP BY ROLLUP (i_item_id, s_state); ``` #### 测试方法论 当使用TPC-DS作为评测标准时,通常会经历以下几个阶段: - **加载**:将生成好的海量测试数据导入目标DBMS中; - **准备**:创建必要的索引和其他物理存储对象来加速后续读取过程; - **运行**:按照规定顺序依次提交所有预定查询请求给被测系统直至完成全部迭代次数; - **报告**:收集统计信息用于分析最终得分情况。 通过上述严格的过程控制可以确保得到公平公正的结果对比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值