Transaction Processing Performance Council - Decision Support (TPC-DS) is a decision support benchmark that evaluates the performance of data warehouses. This topic describes how to use TPC-DS to test the performance of AnalyticDB for PostgreSQL on a test set of 100 GB.
Prerequisites
An Alibaba Cloud account or a Resource Access Management (RAM) user that has the
AliyunGPDBFullAccess,AliyunECSFullAccess, andAliyunOSSFullAccesspermissions is created. An AccessKey ID and an AccessKey secret are created for the Alibaba Cloud account or the RAM user.An AnalyticDB for PostgreSQL instance and an Elastic Compute Service (ECS) instance are created in the same virtual private cloud (VPC).
An Object Storage Service (OSS) bucket is created in the same region as the AnalyticDB for PostgreSQL instance.
The fixnumeric extension is installed for the AnalyticDB for PostgreSQL instance.
The private IP address of the ECS instance is added to an IP address whitelist of the AnalyticDB for PostgreSQL instance.
psql is installed on the ECS instance.
Test environment
AnalyticDB for PostgreSQL instance specifications | ECS instance specifications |
|
|
Generate test data
This section describes how to generate TPC-DS test data by using the toolkit provided by TPC.
Download and decompress tpcds-kit.tar and access the tools directory.
tar -xvf tpcds-kit.tar cd tpcds-kit/toolsSave the following script as a
.shfile. Run the./command to execute this file to generate 100 GB of TPC-DS test data.# Parameters: # SCALE specifies the size of the tpcds dataset to be generated. Unit: GB. # PARALLEL specifies the number of files to split the data into. The optimal number of files is an integer multiple of the number of compute nodes. FOR ((i=1;i<=16;i++)); DO ./dsdgen -TERMINATE N -SCALE 100 -PARALLEL 16 -CHILD $i & done waitNoteIf the
./dsdgen: cannot execute binary file: Exec format errorerror occurs, run the following code and repeat Step 2 to generate test data:sudo yum install byacc flex # Install yacc and flex. make clean make OS=LINUXUse ossutil to upload the test data to the OSS bucket. For information about the installation and use of the ossutil tool, see ossutil 1.0.
./ossutil64 cp -r <path of test data> <path of OSS bucket> --exclude "*.dat*"Example:
./ossutil64 cp -r /mnt/dbqgen/ oss://testBucketName --exclude "*.dat*"Create data tables.
View the complete SQL query
CREATE TABLE call_center ( cc_call_center_sk integer NOT NULL, cc_call_center_id char(16) NOT NULL, cc_rec_start_date date, cc_rec_end_date date, cc_closed_date_sk integer, cc_open_date_sk integer, cc_name varchar(50), cc_class varchar(50), cc_employees integer, cc_sq_ft integer, cc_hours char(20), cc_manager varchar(40), cc_mkt_id integer, cc_mkt_class char(50), cc_mkt_desc varchar(100), cc_market_manager varchar(40), cc_division integer, cc_division_name varchar(50), cc_company integer, cc_company_name char(50), cc_street_number char(10), cc_street_name varchar(60), cc_street_type char(15), cc_suite_number char(10), cc_city varchar(60), cc_county varchar(30), cc_state char(2), cc_zip char(10), cc_country varchar(20), cc_gmt_offset fixnumeric(19), cc_tax_percentage fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE catalog_page ( cp_catalog_page_sk integer NOT NULL, cp_catalog_page_id char(16) NOT NULL, cp_start_date_sk integer, cp_end_date_sk integer, cp_department varchar(50) , cp_catalog_number integer, cp_catalog_page_number integer, cp_description varchar(100), cp_type varchar(100) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE customer ( c_customer_sk integer NOT NULL, c_customer_id char(16) NOT NULL, c_current_cdemo_sk integer, c_current_hdemo_sk integer, c_current_addr_sk integer, c_first_shipto_date_sk integer, c_first_sales_date_sk integer, c_salutation char(10), c_first_name char(20), c_last_name char(30), c_preferred_cust_flag char(1), c_birth_day integer, c_birth_month integer, c_birth_year integer, c_birth_country varchar(20), c_login char(13), c_email_address char(50), c_last_review_date char(10) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (c_customer_sk); CREATE TABLE customer_address ( ca_address_sk integer NOT NULL, ca_address_id char(16) NOT NULL, ca_street_number char(10), ca_street_name varchar(60), ca_street_type char(15), ca_suite_number char(10), ca_city varchar(60), ca_county varchar(30), ca_state char(2), ca_zip char(10), ca_country varchar(20), ca_gmt_offset fixnumeric(19), ca_location_type char(20) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (ca_address_sk); CREATE TABLE customer_demographics ( cd_demo_sk integer NOT NULL, cd_gender char(1), cd_marital_status char(1), cd_education_status char(20), cd_purchase_estimate integer, cd_credit_rating char(10), cd_dep_count integer, cd_dep_employed_count integer, cd_dep_college_count integer ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (cd_demo_sk); CREATE TABLE date_dim ( d_date_sk integer NOT NULL, d_date_id char(16) NOT NULL, d_date date, d_month_seq integer, d_week_seq integer, d_quarter_seq integer, d_year integer, d_dow integer, d_moy integer, d_dom integer, d_qoy integer, d_fy_year integer, d_fy_quarter_seq integer, d_fy_week_seq integer, d_day_name char(9), d_quarter_name char(6), d_holiday char(1), d_weekend char(1), d_following_holiday char(1), d_first_dom integer, d_last_dom integer, d_same_day_ly integer, d_same_day_lq integer, d_current_day char(1), d_current_week char(1), d_current_month char(1), d_current_quarter char(1), d_current_year char(1) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE household_demographics ( hd_demo_sk integer NOT NULL, hd_income_band_sk integer, hd_buy_potential char(15), hd_dep_count integer, hd_vehicle_count integer ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE income_band ( ib_income_band_sk integer NOT NULL, ib_lower_bound integer, ib_upper_bound integer ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE inventory ( inv_date_sk integer NOT NULL, inv_item_sk integer NOT NULL, inv_warehouse_sk integer NOT NULL, inv_quantity_on_hand integer ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (inv_item_sk) PARTITION BY RANGE (inv_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (100), DEFAULT PARTITION OTHERS ); CREATE TABLE item ( i_item_sk integer NOT NULL, i_item_id char(16) NOT NULL, i_rec_start_date date, i_rec_end_date date, i_item_desc varchar(200), i_current_price fixnumeric(19), i_wholesale_cost fixnumeric(19), i_brand_id integer, i_brand char(50), i_class_id integer, i_class char(50), i_category_id integer, i_category char(50), i_manufact_id integer, i_manufact char(50), i_size char(20), i_formulation char(20), i_color char(20), i_units char(10), i_container char(10), i_manager_id integer, i_product_name char(50) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE promotion ( p_promo_sk integer NOT NULL, p_promo_id char(16) NOT NULL, p_start_date_sk integer, p_end_date_sk integer, p_item_sk integer, p_cost fixnumeric(19), p_response_target integer, p_promo_name char(50), p_channel_dmail char(1), p_channel_email char(1), p_channel_catalog char(1), p_channel_tv char(1), p_channel_radio char(1), p_channel_press char(1), p_channel_event char(1), p_channel_demo char(1), p_channel_details varchar(100), p_purpose char(15), p_discount_active char(1) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE reason ( r_reason_sk integer NOT NULL, r_reason_id char(16) NOT NULL, r_reason_desc char(100) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE ship_mode ( sm_ship_mode_sk integer NOT NULL, sm_ship_mode_id char(16) NOT NULL, sm_type char(30), sm_code char(10), sm_carrier char(20), sm_contract char(20) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE store ( s_store_sk integer NOT NULL, s_store_id char(16) NOT NULL, s_rec_start_date date, s_rec_end_date date, s_closed_date_sk integer, s_store_name varchar(50), s_number_employees integer, s_floor_space integer, s_hours char(20), s_manager varchar(40), s_market_id integer, s_geography_class varchar(100), s_market_desc varchar(100), s_market_manager varchar(40), s_division_id integer, s_division_name varchar(50), s_company_id integer, s_company_name varchar(50), s_street_number varchar(10), s_street_name varchar(60), s_street_type char(15), s_suite_number char(10), s_city varchar(60), s_county varchar(30), s_state char(2), s_zip char(10), s_country varchar(20), s_gmt_offset fixnumeric(19), s_tax_precentage fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE time_dim ( t_time_sk integer NOT NULL, t_time_id char(16) NOT NULL, t_time integer, t_hour integer, t_minute integer, t_second integer, t_am_pm char(2), t_shift char(20), t_sub_shift char(20), t_meal_time char(20) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE warehouse ( w_warehouse_sk integer NOT NULL, w_warehouse_id char(16) NOT NULL, w_warehouse_name varchar(20), w_warehouse_sq_ft integer, w_street_number char(10), w_street_name varchar(60), w_street_type char(15), w_suite_number char(10), w_city varchar(60), w_county varchar(30), w_state char(2), w_zip char(10), w_country varchar(20), w_gmt_offset fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE web_page ( wp_web_page_sk integer NOT NULL, wp_web_page_id char(16) NOT NULL, wp_rec_start_date date, wp_rec_end_date date, wp_creation_date_sk integer, wp_access_date_sk integer, wp_autogen_flag char(1), wp_customer_sk integer, wp_url varchar(100), wp_type char(50), wp_char_count integer, wp_link_count integer, wp_image_count integer, wp_max_ad_count integer ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE web_site ( web_site_sk integer NOT NULL, web_site_id char(16) NOT NULL, web_rec_start_date date, web_rec_end_date date, web_name varchar(50), web_open_date_sk integer, web_close_date_sk integer, web_class varchar(50), web_manager varchar(40), web_mkt_id integer, web_mkt_class varchar(50), web_mkt_desc varchar(100), web_market_manager varchar(40), web_company_id integer, web_company_name char(50), web_street_number char(10), web_street_name varchar(60), web_street_type char(15), web_suite_number char(10), web_city varchar(60), web_county varchar(30), web_state char(2), web_zip char(10), web_country varchar(20), web_gmt_offset fixnumeric(19), web_tax_percentage fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED REPLICATED; CREATE TABLE catalog_returns ( cr_returned_date_sk integer, cr_returned_time_sk integer, cr_item_sk integer NOT NULL, cr_refunded_customer_sk integer, cr_refunded_cdemo_sk integer, cr_refunded_hdemo_sk integer, cr_refunded_addr_sk integer, cr_returning_customer_sk integer, cr_returning_cdemo_sk integer, cr_returning_hdemo_sk integer, cr_returning_addr_sk integer, cr_call_center_sk integer, cr_catalog_page_sk integer, cr_ship_mode_sk integer, cr_warehouse_sk integer, cr_reason_sk integer, cr_order_number bigint NOT NULL, cr_return_quantity integer, cr_return_amount fixnumeric(19), cr_return_tax fixnumeric(19), cr_return_amt_inc_tax fixnumeric(19), cr_fee fixnumeric(19), cr_return_ship_cost fixnumeric(19), cr_refunded_cash fixnumeric(19), cr_reversed_charge fixnumeric(19), cr_store_credit fixnumeric(19), cr_net_loss fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (cr_item_sk) PARTITION BY RANGE (cr_returned_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (8), DEFAULT PARTITION OTHERS ); CREATE TABLE catalog_sales ( cs_sold_date_sk integer, cs_sold_time_sk integer, cs_ship_date_sk integer, cs_bill_customer_sk integer, cs_bill_cdemo_sk integer, cs_bill_hdemo_sk integer, cs_bill_addr_sk integer, cs_ship_customer_sk integer, cs_ship_cdemo_sk integer, cs_ship_hdemo_sk integer, cs_ship_addr_sk integer, cs_call_center_sk integer, cs_catalog_page_sk integer, cs_ship_mode_sk integer, cs_warehouse_sk integer, cs_item_sk integer NOT NULL, cs_promo_sk integer, cs_order_number bigint NOT NULL, cs_quantity integer, cs_wholesale_cost fixnumeric(19), cs_list_price fixnumeric(19), cs_sales_price fixnumeric(19), cs_ext_discount_amt fixnumeric(19), cs_ext_sales_price fixnumeric(19), cs_ext_wholesale_cost fixnumeric(19), cs_ext_list_price fixnumeric(19), cs_ext_tax fixnumeric(19), cs_coupon_amt fixnumeric(19), cs_ext_ship_cost fixnumeric(19), cs_net_paid fixnumeric(19), cs_net_paid_inc_tax fixnumeric(19), cs_net_paid_inc_ship fixnumeric(19), cs_net_paid_inc_ship_tax fixnumeric(19), cs_net_profit fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (cs_item_sk) PARTITION BY RANGE (cs_sold_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (28), DEFAULT PARTITION OTHERS ); CREATE TABLE web_returns ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer, wr_refunded_cdemo_sk integer, wr_refunded_hdemo_sk integer, wr_refunded_addr_sk integer, wr_returning_customer_sk integer, wr_returning_cdemo_sk integer, wr_returning_hdemo_sk integer, wr_returning_addr_sk integer, wr_web_page_sk integer, wr_reason_sk integer, wr_order_number bigint NOT NULL, wr_return_quantity integer, wr_return_amt fixnumeric(19), wr_return_tax fixnumeric(19), wr_return_amt_inc_tax fixnumeric(19), wr_fee fixnumeric(19), wr_return_ship_cost fixnumeric(19), wr_refunded_cash fixnumeric(19), wr_reversed_charge fixnumeric(19), wr_account_credit fixnumeric(19), wr_net_loss fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (wr_item_sk) PARTITION BY RANGE (wr_returned_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (180), DEFAULT PARTITION OTHERS ); CREATE TABLE web_sales ( ws_sold_date_sk integer, ws_sold_time_sk integer, ws_ship_date_sk integer, ws_item_sk integer NOT NULL, ws_bill_customer_sk integer, ws_bill_cdemo_sk integer, ws_bill_hdemo_sk integer, ws_bill_addr_sk integer, ws_ship_customer_sk integer, ws_ship_cdemo_sk integer, ws_ship_hdemo_sk integer, ws_ship_addr_sk integer, ws_web_page_sk integer, ws_web_site_sk integer, ws_ship_mode_sk integer, ws_warehouse_sk integer, ws_promo_sk integer, ws_order_number bigint NOT NULL, ws_quantity integer, ws_wholesale_cost fixnumeric(19), ws_list_price fixnumeric(19), ws_sales_price fixnumeric(19), ws_ext_discount_amt fixnumeric(19), ws_ext_sales_price fixnumeric(19), ws_ext_wholesale_cost fixnumeric(19), ws_ext_list_price fixnumeric(19), ws_ext_tax fixnumeric(19), ws_coupon_amt fixnumeric(19), ws_ext_ship_cost fixnumeric(19), ws_net_paid fixnumeric(19), ws_net_paid_inc_tax fixnumeric(19), ws_net_paid_inc_ship fixnumeric(19), ws_net_paid_inc_ship_tax fixnumeric(19), ws_net_profit fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (ws_item_sk) PARTITION BY RANGE (ws_sold_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (40), DEFAULT PARTITION OTHERS ); CREATE TABLE store_returns ( sr_returned_date_sk integer, sr_return_time_sk integer, sr_item_sk integer NOT NULL, sr_customer_sk integer, sr_cdemo_sk integer, sr_hdemo_sk integer, sr_addr_sk integer, sr_store_sk integer, sr_reason_sk integer, sr_ticket_number bigint NOT NULL, sr_return_quantity integer, sr_return_amt fixnumeric(19), sr_return_tax fixnumeric(19), sr_return_amt_inc_tax fixnumeric(19), sr_fee fixnumeric(19), sr_return_ship_cost fixnumeric(19), sr_refunded_cash fixnumeric(19), sr_reversed_charge fixnumeric(19), sr_store_credit fixnumeric(19), sr_net_loss fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (sr_item_sk) PARTITION BY RANGE (sr_returned_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (100), DEFAULT PARTITION OTHERS ); CREATE TABLE store_sales ( ss_sold_date_sk integer, ss_sold_time_sk integer, ss_item_sk integer NOT NULL, ss_customer_sk integer, ss_cdemo_sk integer, ss_hdemo_sk integer, ss_addr_sk integer, ss_store_sk integer, ss_promo_sk integer, ss_ticket_number bigint NOT NULL, ss_quantity integer, ss_wholesale_cost fixnumeric(19), ss_list_price fixnumeric(19), ss_sales_price fixnumeric(19), ss_ext_discount_amt fixnumeric(19), ss_ext_sales_price fixnumeric(19), ss_ext_wholesale_cost fixnumeric(19), ss_ext_list_price fixnumeric(19), ss_ext_tax fixnumeric(19), ss_coupon_amt fixnumeric(19), ss_net_paid fixnumeric(19), ss_net_paid_inc_tax fixnumeric(19), ss_net_profit fixnumeric(19) ) USING beam WITH(compresstype=auto,compresslevel=1) DISTRIBUTED BY (ss_item_sk) PARTITION BY RANGE (ss_sold_date_sk) ( START(2450815) INCLUSIVE END(2453005) INCLUSIVE EVERY (10), DEFAULT PARTITION OTHERS );Create OSS foreign tables. OSS foreign tables are used to import test data from OSS.
The
bucketparameter specifies the OSS bucket in which the test data is stored. Theendpointparameter specifies the endpoint of the OSS bucket. For information about how to obtain the OSS bucket and the endpoint, see Obtain the OSS bucket information.The
IDandKeyparameters specify the AccessKey ID and the AccessKey secret of your Alibaba Cloud account or RAM user. For information about how to obtain the AccessKey ID and the AccessKey secret, see Create an AccessKey pair.
View the complete SQL query
CREATE SERVER oss_serv FOREIGN DATA WRAPPER oss_fdw OPTIONS ( endpoint 'oss-cn-hang****.aliyuncs.com', bucket 'testBucketName' ); CREATE USER MAPPING FOR PUBLIC SERVER oss_serv OPTIONS (id 'LTAI****************', key 'yourAccessKeySecret'); CREATE FOREIGN TABLE ext_call_center( cc_call_center_sk integer, cc_call_center_id char(16), cc_rec_start_date date, cc_rec_end_date date, cc_closed_date_sk integer, cc_open_date_sk integer, cc_name varchar(50), cc_class varchar(50), cc_employees integer, cc_sq_ft integer, cc_hours char(20), cc_manager varchar(40), cc_mkt_id integer, cc_mkt_class char(50), cc_mkt_desc varchar(100), cc_market_manager varchar(40), cc_division integer, cc_division_name varchar(50), cc_company integer, cc_company_name char(50), cc_street_number char(10), cc_street_name varchar(60), cc_street_type char(15), cc_suite_number char(10), cc_city varchar(60), cc_county varchar(30), cc_state char(2), cc_zip char(10), cc_country varchar(20), cc_gmt_offset fixnumeric, cc_tax_percentage fixnumeric) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/call_center_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_catalog_page ( cp_catalog_page_sk integer, cp_catalog_page_id char(16), cp_start_date_sk integer, cp_end_date_sk integer, cp_department varchar(50), cp_catalog_number integer, cp_catalog_page_number integer, cp_description varchar(100), cp_type varchar(100) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/catalog_page_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_customer ( c_customer_sk integer, c_customer_id char(16), c_current_cdemo_sk integer, c_current_hdemo_sk integer, c_current_addr_sk integer, c_first_shipto_date_sk integer, c_first_sales_date_sk integer, c_salutation char(10), c_first_name char(20), c_last_name char(30), c_preferred_cust_flag char(1), c_birth_day integer, c_birth_month integer, c_birth_year integer, c_birth_country varchar(20), c_login char(13), c_email_address char(50), c_last_review_date char(10) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/customer/customer_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_customer_address ( ca_address_sk integer, ca_address_id char(16), ca_street_number char(10), ca_street_name varchar(60), ca_street_type char(15), ca_suite_number char(10), ca_city varchar(60), ca_county varchar(30), ca_state char(2), ca_zip char(10), ca_country varchar(20), ca_gmt_offset fixnumeric, ca_location_type char(20) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/customer_address_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_customer_demographics ( cd_demo_sk integer, cd_gender char(1), cd_marital_status char(1), cd_education_status char(20), cd_purchase_estimate integer, cd_credit_rating char(10), cd_dep_count integer, cd_dep_employed_count integer, cd_dep_college_count integer ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/customer_demographics_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_date_dim ( d_date_sk integer, d_date_id char(16), d_date date, d_month_seq integer, d_week_seq integer, d_quarter_seq integer, d_year integer, d_dow integer, d_moy integer, d_dom integer, d_qoy integer, d_fy_year integer, d_fy_quarter_seq integer, d_fy_week_seq integer, d_day_name char(9), d_quarter_name char(6), d_holiday char(1), d_weekend char(1), d_following_holiday char(1), d_first_dom integer, d_last_dom integer, d_same_day_ly integer, d_same_day_lq integer, d_current_day char(1), d_current_week char(1), d_current_month char(1), d_current_quarter char(1), d_current_year char(1) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/date_dim_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_household_demographics ( hd_demo_sk integer, hd_income_band_sk integer, hd_buy_potential char(15), hd_dep_count integer, hd_vehicle_count integer ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/household_demographics_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_income_band ( ib_income_band_sk integer, ib_lower_bound integer, ib_upper_bound integer ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/income_band_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_inventory ( inv_date_sk integer, inv_item_sk integer, inv_warehouse_sk integer, inv_quantity_on_hand integer ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/inventory_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_item ( i_item_sk integer, i_item_id char(16), i_rec_start_date date, i_rec_end_date date, i_item_desc varchar(200), i_current_price fixnumeric, i_wholesale_cost fixnumeric, i_brand_id integer, i_brand char(50), i_class_id integer, i_class char(50), i_category_id integer, i_category char(50), i_manufact_id integer, i_manufact char(50), i_size char(20), i_formulation char(20), i_color char(20), i_units char(10), i_container char(10), i_manager_id integer, i_product_name char(50) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/item_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_promotion ( p_promo_sk integer, p_promo_id char(16), p_start_date_sk integer, p_end_date_sk integer, p_item_sk integer, p_cost fixnumeric, p_response_target integer, p_promo_name char(50), p_channel_dmail char(1), p_channel_email char(1), p_channel_catalog char(1), p_channel_tv char(1), p_channel_radio char(1), p_channel_press char(1), p_channel_event char(1), p_channel_demo char(1), p_channel_details varchar(100), p_purpose char(15), p_discount_active char(1) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/promotion_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_reason ( r_reason_sk integer, r_reason_id char(16), r_reason_desc char(100) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/reason_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_ship_mode ( sm_ship_mode_sk integer, sm_ship_mode_id char(16), sm_type char(30), sm_code char(10), sm_carrier char(20), sm_contract char(20) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/ship_mode_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_store ( s_store_sk integer, s_store_id char(16), s_rec_start_date date, s_rec_end_date date, s_closed_date_sk integer, s_store_name varchar(50), s_number_employees integer, s_floor_space integer, s_hours char(20), s_manager varchar(40), s_market_id integer, s_geography_class varchar(100), s_market_desc varchar(100), s_market_manager varchar(40), s_division_id integer, s_division_name varchar(50), s_company_id integer, s_company_name varchar(50), s_street_number varchar(10), s_street_name varchar(60), s_street_type char(15), s_suite_number char(10), s_city varchar(60), s_county varchar(30), s_state char(2), s_zip char(10), s_country varchar(20), s_gmt_offset fixnumeric, s_tax_precentage fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/store_1', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_time_dim ( t_time_sk integer, t_time_id char(16), t_time integer, t_hour integer, t_minute integer, t_second integer, t_am_pm char(2), t_shift char(20), t_sub_shift char(20), t_meal_time char(20) ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/time_dim_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_warehouse ( w_warehouse_sk integer, w_warehouse_id char(16), w_warehouse_name varchar(20), w_warehouse_sq_ft integer, w_street_number char(10), w_street_name varchar(60), w_street_type char(15), w_suite_number char(10), w_city varchar(60), w_county varchar(30), w_state char(2), w_zip char(10), w_country varchar(20), w_gmt_offset fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/warehouse_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_web_page ( wp_web_page_sk integer, wp_web_page_id char(16), wp_rec_start_date date, wp_rec_end_date date, wp_creation_date_sk integer, wp_access_date_sk integer, wp_autogen_flag char(1), wp_customer_sk integer, wp_url varchar(100), wp_type char(50), wp_char_count integer, wp_link_count integer, wp_image_count integer, wp_max_ad_count integer ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/web_page_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_web_site ( web_site_sk integer, web_site_id char(16), web_rec_start_date date, web_rec_end_date date, web_name varchar(50), web_open_date_sk integer, web_close_date_sk integer, web_class varchar(50), web_manager varchar(40), web_mkt_id integer, web_mkt_class varchar(50) , web_mkt_desc varchar(100), web_market_manager varchar(40), web_company_id integer, web_company_name char(50), web_street_number char(10), web_street_name varchar(60) , web_street_type char(15), web_suite_number char(10), web_city varchar(60), web_county varchar(30), web_state char(2), web_zip char(10), web_country varchar(20), web_gmt_offset fixnumeric, web_tax_percentage fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/web_site_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_catalog_returns ( cr_returned_date_sk integer, cr_returned_time_sk integer, cr_item_sk integer, cr_refunded_customer_sk integer, cr_refunded_cdemo_sk integer, cr_refunded_hdemo_sk integer, cr_refunded_addr_sk integer, cr_returning_customer_sk integer, cr_returning_cdemo_sk integer, cr_returning_hdemo_sk integer, cr_returning_addr_sk integer, cr_call_center_sk integer, cr_catalog_page_sk integer, cr_ship_mode_sk integer, cr_warehouse_sk integer, cr_reason_sk integer, cr_order_number bigint, cr_return_quantity integer, cr_return_amount fixnumeric, cr_return_tax fixnumeric, cr_return_amt_inc_tax fixnumeric, cr_fee fixnumeric, cr_return_ship_cost fixnumeric, cr_refunded_cash fixnumeric, cr_reversed_charge fixnumeric, cr_store_credit fixnumeric, cr_net_loss fixnumeric SERVER oss_ser OPTIONS ( prefix 'tpcds_1tb/catalog_returns_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_catalog_sales ( cs_sold_date_sk integer, cs_sold_time_sk integer, cs_ship_date_sk integer, cs_bill_customer_sk integer, cs_bill_cdemo_sk integer, cs_bill_hdemo_sk integer, cs_bill_addr_sk integer, cs_ship_customer_sk integer, cs_ship_cdemo_sk integer, cs_ship_hdemo_sk integer, cs_ship_addr_sk integer, cs_call_center_sk integer, cs_catalog_page_sk integer, cs_ship_mode_sk integer, cs_warehouse_sk integer, cs_item_sk integer, cs_promo_sk integer, cs_order_number bigint, cs_quantity integer, cs_wholesale_cost fixnumeric, cs_list_price fixnumeric, cs_sales_price fixnumeric, cs_ext_discount_amt fixnumeric, cs_ext_sales_price fixnumeric, cs_ext_wholesale_cost fixnumeric, cs_ext_list_price fixnumeric, cs_ext_tax fixnumeric, cs_coupon_amt fixnumeric, cs_ext_ship_cost fixnumeric, cs_net_paid fixnumeric, cs_net_paid_inc_tax fixnumeric, cs_net_paid_inc_ship fixnumeric, cs_net_paid_inc_ship_tax fixnumeric, cs_net_profit fixnumeric SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/catalog_sales_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_web_returns ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer, wr_refunded_customer_sk integer, wr_refunded_cdemo_sk integer, wr_refunded_hdemo_sk integer, wr_refunded_addr_sk integer, wr_returning_customer_sk integer, wr_returning_cdemo_sk integer, wr_returning_hdemo_sk integer, wr_returning_addr_sk integer, wr_web_page_sk integer, wr_reason_sk integer, wr_order_number bigint, wr_return_quantity integer, wr_return_amt fixnumeric, wr_return_tax fixnumeric, wr_return_amt_inc_tax fixnumeric, wr_fee fixnumeric, wr_return_ship_cost fixnumeric, wr_refunded_cash fixnumeric, wr_reversed_charge fixnumeric, wr_account_credit fixnumeric, wr_net_loss fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/web_returns_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_web_sales ( ws_sold_date_sk integer, ws_sold_time_sk integer, ws_ship_date_sk integer, ws_item_sk integer, ws_bill_customer_sk integer, ws_bill_cdemo_sk integer, ws_bill_hdemo_sk integer, ws_bill_addr_sk integer, ws_ship_customer_sk integer, ws_ship_cdemo_sk integer, ws_ship_hdemo_sk integer, ws_ship_addr_sk integer, ws_web_page_sk integer, ws_web_site_sk integer, ws_ship_mode_sk integer, ws_warehouse_sk integer, ws_promo_sk integer, ws_order_number bigint, ws_quantity integer, ws_wholesale_cost fixnumeric, ws_list_price fixnumeric, ws_sales_price fixnumeric, ws_ext_discount_amt fixnumeric,ws_ext_sales_price fixnumeric, ws_ext_wholesale_cost fixnumeric, ws_ext_list_price fixnumeric, ws_ext_tax fixnumeric, ws_coupon_amt fixnumeric, ws_ext_ship_cost fixnumeric, ws_net_paid fixnumeric, ws_net_paid_inc_tax fixnumeric, ws_net_paid_inc_ship fixnumeric, ws_net_paid_inc_ship_tax fixnumeric, ws_net_profit fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/web_sales_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_store_returns ( sr_returned_date_sk integer, sr_return_time_sk integer, sr_item_sk integer, sr_customer_sk integer, sr_cdemo_sk integer, sr_hdemo_sk integer, sr_addr_sk integer, sr_store_sk integer, sr_reason_sk integer, sr_ticket_number bigint, sr_return_quantity integer, sr_return_amt fixnumeric, sr_return_tax fixnumeric, sr_return_amt_inc_tax fixnumeric, sr_fee fixnumeric, sr_return_ship_cost fixnumeric, sr_refunded_cash fixnumeric, sr_reversed_charge fixnumeric, sr_store_credit fixnumeric, sr_net_loss fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/store_returns_', format 'csv', DELIMITER '|' ); CREATE FOREIGN TABLE ext_store_sales ( ss_sold_date_sk integer, ss_sold_time_sk integer, ss_item_sk integer NOT NULL, ss_customer_sk integer, ss_cdemo_sk integer, ss_hdemo_sk integer, ss_addr_sk integer, ss_store_sk integer, ss_promo_sk integer, ss_ticket_number bigint NOT NULL, ss_quantity integer, ss_wholesale_cost fixnumeric, ss_list_price fixnumeric, ss_sales_price fixnumeric, ss_ext_discount_amt fixnumeric, ss_ext_sales_price fixnumeric, ss_ext_wholesale_cost fixnumeric, ss_ext_list_price fixnumeric, ss_ext_tax fixnumeric, ss_coupon_amt fixnumeric, ss_net_paid fixnumeric, ss_net_paid_inc_tax fixnumeric, ss_net_profit fixnumeric ) SERVER oss_serv OPTIONS ( prefix 'tpcds_1tb/store_sales_', format 'csv', DELIMITER '|' );Import data into the tables created in Step 4 and collect statistics.
INSERT INTO call_center SELECT * FROM ext_call_center; INSERT INTO catalog_page SELECT * FROM ext_catalog_page; INSERT INTO catalog_returns SELECT * FROM ext_catalog_returns; INSERT INTO catalog_sales SELECT * FROM ext_catalog_sales; INSERT INTO customer SELECT * FROM ext_customer; INSERT INTO customer_address SELECT * FROM ext_customer_address; INSERT INTO customer_demographics SELECT * FROM ext_customer_demographics; INSERT INTO date_dim SELECT * FROM ext_date_dim; INSERT INTO household_demographics SELECT * FROM ext_household_demographics; INSERT INTO income_band SELECT * FROM ext_income_band; INSERT INTO inventory SELECT * FROM ext_inventory; INSERT INTO item SELECT * FROM ext_item; INSERT INTO promotion SELECT * FROM ext_promotion; INSERT INTO reason SELECT * FROM ext_reason; INSERT INTO ship_mode SELECT * FROM ext_ship_mode; INSERT INTO store SELECT * FROM ext_store; INSERT INTO store_returns SELECT * FROM ext_store_returns; INSERT INTO store_sales SELECT * FROM ext_store_sales; INSERT INTO time_dim SELECT * FROM ext_time_dim; INSERT INTO warehouse SELECT * FROM ext_warehouse; INSERT INTO web_page SELECT * FROM ext_web_page; INSERT INTO web_returns SELECT * FROM ext_web_returns; INSERT INTO web_sales SELECT * FROM ext_web_sales; INSERT INTO web_site SELECT * FROM ext_web_site; -- Collect statistics. ANALYZE fullscan call_center; ANALYZE fullscan catalog_page; ANALYZE fullscan catalog_returns; ANALYZE fullscan catalog_sales; ANALYZE fullscan customer; ANALYZE fullscan customer_address; ANALYZE fullscan customer_demographics; ANALYZE fullscan date_dim; ANALYZE fullscan household_demographics; ANALYZE fullscan income_band; ANALYZE fullscan inventory; ANALYZE fullscan item; ANALYZE fullscan promotion; ANALYZE fullscan reason; ANALYZE fullscan ship_mode; ANALYZE fullscan store; ANALYZE fullscan store_returns; ANALYZE fullscan store_sales; ANALYZE fullscan time_dim; ANALYZE fullscan warehouse; ANALYZE fullscan web_page; ANALYZE fullscan web_returns; ANALYZE fullscan web_sales; ANALYZE fullscan web_site;After the statistics collection is complete, you can execute queries.
Execute queries
This test includes 99 queries. You can view the full list of SQL queries.
View the complete SQL queries
--Q1
WITH customer_total_return AS (
SELECT sr_customer_sk AS ctr_customer_sk,
sr_store_sk AS ctr_store_sk,
SUM(SR_FEE) AS ctr_total_return
FROM store_returns,
date_dim
WHERE sr_returned_date_sk = d_date_sk
AND d_year = 2000
GROUP BY sr_customer_sk,
sr_store_sk
)
SELECT c_customer_id
FROM customer_total_return ctr1,
store,
customer
WHERE ctr1.ctr_total_return > (
SELECT AVG(ctr_total_return) * 1.2
FROM customer_total_return ctr2
WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk
)
AND s_store_sk = ctr1.ctr_store_sk
AND s_state = 'SD'
AND ctr1.ctr_customer_sk = c_customer_sk
ORDER BY c_customer_id
LIMIT 100;
--Q2
WITH wscs AS (
SELECT sold_date_sk,
sales_price
FROM (
SELECT ws_sold_date_sk sold_date_sk,
ws_ext_sales_price sales_price
FROM web_sales
UNION ALL
SELECT cs_sold_date_sk sold_date_sk,
cs_ext_sales_price sales_price
FROM catalog_sales
) AS alias1
),
wswscs AS (
SELECT d_week_seq,
SUM(
CASE
WHEN (d_day_name = 'Sunday') THEN sales_price
ELSE NULL
END
) sun_sales,
SUM(
CASE
WHEN (d_day_name = 'Monday') THEN sales_price
ELSE NULL
END
) mon_sales,
SUM(
CASE
WHEN (d_day_name = 'Tuesday') THEN sales_price
ELSE NULL
END
) tue_sales,
SUM(
CASE
WHEN (d_day_name = 'Wednesday') THEN sales_price
ELSE NULL
END
) wed_sales,
SUM(
CASE
WHEN (d_day_name = 'Thursday') THEN sales_price
ELSE NULL
END
) thu_sales,
SUM(
CASE
WHEN (d_day_name = 'Friday') THEN sales_price
ELSE NULL
END
) fri_sales,
SUM(
CASE
WHEN (d_day_name = 'Saturday') THEN sales_price
ELSE NULL
END
) sat_sales
FROM wscs,
date_dim
WHERE d_date_sk = sold_date_sk
GROUP BY d_week_seq
)
SELECT d_week_seq1,
ROUND(sun_sales1 / sun_sales2, 2),
ROUND(mon_sales1 / mon_sales2, 2),
ROUND(tue_sales1 / tue_sales2, 2),
ROUND(wed_sales1 / wed_sales2, 2),
ROUND(thu_sales1 / thu_sales2, 2),
ROUND(fri_sales1 / fri_sales2, 2),
ROUND(sat_sales1 / sat_sales2, 2)
FROM (
SELECT wswscs.d_week_seq d_week_seq1,
sun_sales sun_sales1,
mon_sales mon_sales1,
tue_sales tue_sales1,
wed_sales wed_sales1,
thu_sales thu_sales1,
fri_sales fri_sales1,
sat_sales sat_sales1
FROM wswscs,
date_dim
WHERE date_dim.d_week_seq = wswscs.d_week_seq
AND d_year = 2001
) y,
(
SELECT wswscs.d_week_seq d_week_seq2,
sun_sales sun_sales2,
mon_sales mon_sales2,
tue_sales tue_sales2,
wed_sales wed_sales2,
thu_sales thu_sales2,
fri_sales fri_sales2,
sat_sales sat_sales2
FROM wswscs,
date_dim
WHERE date_dim.d_week_seq = wswscs.d_week_seq
AND d_year = 2001 + 1
) z
WHERE d_week_seq1 = d_week_seq2 -53
ORDER BY d_week_seq1;Test results
The following table descrbies the amount of time required for the test queries.
Query | Time (s) |
SUM | 370.62 |
Q1 | 0.6 |
Q2 | 3.6 |
Q3 | 0.4 |
Q4 | 16.3 |
Q5 | 1.07 |
Q6 | 0.38 |
Q7 | 1.02 |
Q8 | 0.41 |
Q9 | 6.99 |
Q10 | 0.64 |
Q11 | 10.6 |
Q12 | 0.17 |
Q13 | 1.23 |
Q14 | 6.7 |
Q15 | 0.43 |
Q16 | 2.94 |
Q17 | 0.85 |
Q18 | 1.37 |
Q19 | 0.34 |
Q20 | 0.19 |
Q21 | 0.3 |
Q22 | 13.4 |
Q23 | 26.8 |
Q24 | 2.69 |
Q25 | 0.76 |
Q26 | 0.86 |
Q27 | 1.18 |
Q28 | 5.73 |
Q29 | 1.22 |
Q30 | 0.42 |
Q31 | 1.64 |
Q32 | 0.17 |
Q33 | 0.99 |
Q34 | 0.2 |
Q35 | 1.67 |
Q36 | 3.34 |
Q37 | 0.57 |
Q38 | 6.1 |
Q39 | 2 |
Q40 | 0.5 |
Q41 | 0.2 |
Q42 | 0.17 |
Q43 | 1 |
Q44 | 1.95 |
Q45 | 0.5 |
Q46 | 2.14 |
Q47 | 2.21 |
Q48 | 1.36 |
Q49 | 0.95 |
Q50 | 2.22 |
Q51 | 12.48 |
Q52 | 0.17 |
Q53 | 0.47 |
Q54 | 0.64 |
Q55 | 0.15 |
Q56 | 0.96 |
Q57 | 1.46 |
Q58 | 0.58 |
Q59 | 7.66 |
Q60 | 1.3 |
Q61 | 0.6 |
Q62 | 1.41 |
Q63 | 0.58 |
Q64 | 7.06 |
Q65 | 3.25 |
Q66 | 1.34 |
Q67 | 104.12 |
Q68 | 1.51 |
Q69 | 1.03 |
Q70 | 2.75 |
Q71 | 0.63 |
Q72 | 3.88 |
Q73 | 0.19 |
Q74 | 9.09 |
Q75 | 5.24 |
Q76 | 3.09 |
Q77 | 0.96 |
Q78 | 7.73 |
Q79 | 3.56 |
Q80 | 1.8 |
Q81 | 0.56 |
Q82 | 1.04 |
Q83 | 0.69 |
Q84 | 0.44 |
Q85 | 1.65 |
Q86 | 1.41 |
Q87 | 8.81 |
Q88 | 7.42 |
Q89 | 0.57 |
Q90 | 0.69 |
Q91 | 0.59 |
Q92 | 0.15 |
Q93 | 2.2 |
Q94 | 1.57 |
Q95 | 11.16 |
Q96 | 1.15 |
Q97 | 2.35 |
Q98 | 0.58 |
Q99 | 2.43 |