0% found this document useful (0 votes)
21 views7 pages

TPs ED

1. The document provides instructions for setting up and partitioning tables in PostgreSQL for the TPC-H benchmark dataset. 2. It includes commands for downloading data, creating roles, databases and tables, loading data, and partitioning tables in various ways including by list, hash, and range. 3. Notes are provided on useful PostgreSQL commands like \l, \c, \d+, and altering user roles.

Uploaded by

Yah Abdra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views7 pages

TPs ED

1. The document provides instructions for setting up and partitioning tables in PostgreSQL for the TPC-H benchmark dataset. 2. It includes commands for downloading data, creating roles, databases and tables, loading data, and partitioning tables in various ways including by list, hash, and range. 3. Notes are provided on useful PostgreSQL commands like \l, \c, \d+, and altering user roles.

Uploaded by

Yah Abdra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

TPs ED

TP01:

ls // ‫لإظهار ما داخل الملف‬


cd file_name // ‫للدخول لملف ما‬
./dbgen -s 5 -f ;//to gernrate 5Go data
psql -h localhost -d tpch -U dw

1 / we have to download TPCH file from this link and extract it :


https://drive.google.com/file/d/1QW0eD8TfT6aHf1XdSmJiDtEW80R4lhhV/

2 / we went to the TPCH file and we open debgen

3 / we have to make a copy of makefile.suit and we name it makefile using the following command:

cp makefile.suite makefile

4/ than do this command:

nano makefile

5/ inside the file write :


cc=gcc
DATABASE= ORACLE

MACHINE =LINUX

WORKLOAD =TPCH

6/ we went out by : ctrl + x than “enter” than Entrée

7/ write

make

TPs ED 1
8/ write

./dbgen -s 1 -f

TP02 :
0\

./dbgen -s 5 -f

inside dbgen file remove the | using this command:

sed -i 's/|$/ /' orders.csv // to remove the / from the file

1\

1.1\

sudo -i -u postgres psql

1.2\Create new role: the first step is to create a new role called DW

CREATE ROLE dw
SUPERUSER
CREATEDB
CREATEROLE
INHERIT
LOGIN
REPLICATION
BYPASSRLS
CONNECTION LIMIT -1;

1.1\Change password

ALTER USER dW WITH PASSWORD 'blabla';

2\ Create a new database called 'tpch'

create database tpch with owner= dw ;

3\Create the following tables : Nation, Region, Part, Supplier, Customer, PartSupp,
Orders, and LineItem using the DW role.

TPs ED 2
/*table NATION*/
CREATE TABLE NATION
(N_NATIONKEY INTEGER NOT NULL ,
N_NAME CHAR(25) NOT NULL ,
N_REGIONKEY INTEGER NOT NULL ,
N_COMMENT VARCHAR(152));

/*table REGION*/
CREATE TABLE REGION
( R_REGIONKEY INTEGER NOT NULL ,
R_NAME CHAR(25) NOT NULL ,
R_COMMENT VARCHAR (152));

/*table PART*/
CREATE TABLE PART
(P_PARTKEY INTEGER NOT NULL ,
P_NAME VARCHAR (55) NOT NULL ,
P_MFGR CHAR(25) NOT NULL ,
P_BRAND CHAR(10) NOT NULL ,
P_TYPE VARCHAR(25) NOT NULL ,
P_SIZE INTEGER NOT NULL ,
P_CONTAINER CHAR(10) NOT NULL ,
P_RETAILPRICE DECIMAL(15,2) NOT NULL
, P_COMMENT VARCHAR (23) NOT NULL );

/*table SUPPLIER*/
CREATE TABLE SUPPLIER
(S_SUPPKEY INTEGER NOT NULL ,
S_NAME CHAR(25) NOT NULL ,
S_ADDRESS VARCHAR (40) NOT NULL ,
S_NATIONKEY INTEGER NOT NULL ,
S_PHONE CHAR(15) NOT NULL ,
S_ACCTBAL DECIMAL(15,2) NOT NULL ,
S_COMMENT VARCHAR (101) NOT NULL);

/*table CUSTOMER*/
CREATE TABLE CUSTOMER
(C_CUSTKEY INTEGER NOT NULL ,
C_NAME VARCHAR (25) NOT NULL ,
C_ADDRESS VARCHAR (40) NOT NULL ,
C_NATIONKEY INTEGER NOT NULL ,
C_PHONE CHAR(15) NOT NULL ,
C_ACCTBAL DECIMAL(15,2) NOT NULL ,
C_MKTSEGMENT CHAR(10) NOT NULL ,
C_COMMENT VARCHAR (117) NOT NULL);

/*table PARTSUPP*/
CREATE TABLE PARTSUPP
( PS_PARTKEY INTEGER NOT NULL ,
PS_SUPPKEY INTEGER NOT NULL , PS_AVAILQTY INTEGER NOT NULL ,
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL ,
PS_COMMENT VARCHAR (199) NOT NULL );

/*table ORDERS*/
CREATE TABLE ORDERS(
O_ORDERKEY INTEGER NOT NULL ,
O_CUSTKEY INTEGER NOT NULL ,
O_ORDERSTATUS CHAR(1) NOT NULL ,
O_TOTALPRICE DECIMAL(15,2) NOT NULL,
O_ORDERDATE DATE NOT NULL ,
O_ORDERPRIORITY CHAR(15) NOT NULL ,
O_CLERK CHAR(15) NOT NULL ,
O_SHIPPRIORITY INTEGER NOT NULL ,
O_COMMENT VARCHAR (79) NOT NULL);

/*table LINEITEM*/

TPs ED 3
CREATE TABLE LINEITEM (
L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL ,
L_RECEIPTDATE DATE NOT NULL ,
L_COMMENT VARCHAR (44) NOT NULL,
l_shipinstruct character(25) NOT NULL,
l_shipmode character(100) NOT NULL,
COL character(100)
);

4\now exit from postgers and enter again :

psql -h localhost -d tpch -U dw

5\To copy data from the debegen table to our table :

\copy NATION FROM '/home/heythem/Desktop/ED_TP/genrated tables 02/nation.csv' with (DELIMITER '|', NULL '');

notes :

sudo -i -u postgres psql // ‫ للدخول لل‬postgres


\l // to see all the databases that you have
\c db_name // to connect to a database
\du // to show all the role
\dt // to show all the table in the database
\d+ // to affiche table size
///////////////////////////////////
ALTER USER dW WITH PASSWORD 'blabla';// to change the role pw
//////////////////////////////////////
// to update the role attributes
ALTER ROLE your_role_name
SUPERUSER
CREATEDB
CREATEROLE
INHERIT
LOGIN
REPLICATION
BYPASSRLS
CONNECTION LIMIT -1;

TP03

explain analyze select


l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,

TPs ED 4
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
lineitem
where
l_shipdate <= date '1998-12-01' - interval ':1'
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus;

TP04
Partition by list :

CREATE TABLE REGION


( R_REGIONKEY INTEGER NOT NULL ,
R_NAME CHAR(25) NOT NULL ,
R_COMMENT VARCHAR (152))
PARTITION BY LIST (r_name);

CREATE TABLE mena PARTITION OF region


FOR VALUES IN ('MIDDLE EAST','AFRICA');

CREATE TABLE nato PARTITION OF region


FOR VALUES IN ('EUROPE','AMERICA');

CREATE TABLE asia PARTITION OF region


FOR VALUES IN ('ASIA');

insert into REGION select * from REGION_BK;

TP05
Partition by hash :

alter table customer rename to customer_bk ;


CREATE TABLE CUSTOMER
(C_CUSTKEY INTEGER NOT NULL ,
C_NAME VARCHAR (25) NOT NULL ,
C_ADDRESS VARCHAR (40) NOT NULL ,
C_NATIONKEY INTEGER NOT NULL ,
C_PHONE CHAR(15) NOT NULL ,
C_ACCTBAL DECIMAL(15,2) NOT NULL ,
C_MKTSEGMENT CHAR(10) NOT NULL ,
C_COMMENT VARCHAR (117) NOT NULL)PARTITION BY HASH(C_CUSTKEY);

CREATE TABLE customer_partition_1 PARTITION OF CUSTOMER

TPs ED 5
FOR VALUES WITH (MODULUS 4, REMAINDER 0);

CREATE TABLE customer_partition_2 PARTITION OF CUSTOMER


FOR VALUES WITH (MODULUS 4, REMAINDER 1);

CREATE TABLE customer_partition_3 PARTITION OF CUSTOMER


FOR VALUES WITH (MODULUS 4, REMAINDER 2);

CREATE TABLE customer_partition_4 PARTITION OF CUSTOMER


FOR VALUES WITH (MODULUS 4, REMAINDER 3);

insert into CUSTOMER select * from CUSTOMER_BK;

CREATE TABLE orders (


o_orderkey INTEGER NOT NULL,
o_custkey INTEGER NOT NULL,
o_orderstatus CHAR(1) NOT NULL,
o_totalprice DECIMAL(15, 2) NOT NULL,
o_orderdate DATE NOT NULL,
o_orderpriority CHAR(15) NOT NULL,
o_clerk CHAR(15) NOT NULL,
o_shippriority INTEGER NOT NULL,
o_comment VARCHAR(79) NOT NULL
) PARTITION BY HASH(o_orderkey);

CREATE TABLE orders_partition_1 PARTITION OF orders


FOR VALUES WITH (MODULUS 4, REMAINDER 0);

CREATE TABLE orders_partition_2 PARTITION OF orders


FOR VALUES WITH (MODULUS 4, REMAINDER 1);

CREATE TABLE orders_partition_3 PARTITION OF orders


FOR VALUES WITH (MODULUS 4, REMAINDER 2);

CREATE TABLE orders_partition_4 PARTITION OF orders


FOR VALUES WITH (MODULUS 4, REMAINDER 3);

insert into orders select * from orders_bk

Partitioning by Range

CREATE TABLE orders_br (


o_orderkey INTEGER NOT NULL,
o_custkey INTEGER NOT NULL,
o_orderstatus CHAR(1) NOT NULL,
o_totalprice DECIMAL(15, 2) NOT NULL,
o_orderdate DATE NOT NULL,
o_orderpriority CHAR(15) NOT NULL,
o_clerk CHAR(15) NOT NULL,
o_shippriority INTEGER NOT NULL,
o_comment VARCHAR(79) NOT NULL
) PARTITION BY RANGE (o_orderdate);

CREATE TABLE orders_br1 PARTITION OF orders_br


FOR VALUES FROM ('1992-01-01') TO ('1994-01-01');
CREATE TABLE orders_br2 PARTITION OF orders_br

TPs ED 6
FOR VALUES FROM ('1994-01-01') TO ('1996-01-01');
CREATE TABLE orders_br3 PARTITION OF orders_br
FOR VALUES FROM ('1996-01-01') TO ('1998-01-01');
CREATE TABLE orders_br4 PARTITION OF orders_br
FOR VALUES FROM ('1998-01-01') TO ('1998-08-03');

insert into orders_br select *from orders_bk;

Multi-column range patitioning

CREATE TABLE PART (


P_PARTKEY INTEGER NOT NULL,
P_NAME VARCHAR(55) NOT NULL,
P_MFGR CHAR(25) NOT NULL,
P_BRAND CHAR(10) NOT NULL,
P_TYPE VARCHAR(25) NOT NULL,
P_SIZE INTEGER NOT NULL,
P_CONTAINER CHAR(10) NOT NULL,
P_RETAILPRICE DECIMAL(15, 2) NOT NULL,
P_COMMENT VARCHAR(23) NOT NULL
)PARTITION BY RANGE (P_SIZE,P_RETAILPRICE);

CREATE TABLE part_size_price_1 PARTITION OF PART


FOR VALUES FROM (MINVALUE, MINVALUE) TO (15, 500.00);

CREATE TABLE part_size_price_2 PARTITION OF PART


FOR VALUES FROM (16, 500.01) TO (35, 1000.00);

CREATE TABLE part_size_price_3 PARTITION OF PART


FOR VALUES FROM (35, 1000.01) TO (60, 1500.00);

insert into part select *from part_bk;

Patition by reference

CREATE TABLE orders_ref (


o_orderkey INTEGER NOT NULL,
o_custkey INTEGER NOT NULL,
o_orderstatus CHAR(1) NOT NULL,
o_totalprice DECIMAL(15, 2) NOT NULL,
o_orderdate DATE NOT NULL,
o_orderpriority CHAR(15) NOT NULL,
o_clerk CHAR(15) NOT NULL,
o_shippriority INTEGER NOT NULL,
o_comment VARCHAR(79) NOT NULL
)

CREATE TABLE CUSTOMER_REF


(C_CUSTKEY INTEGER NOT NULL ,
C_NAME VARCHAR (25) NOT NULL ,
C_ADDRESS VARCHAR (40) NOT NULL ,
C_NATIONKEY INTEGER NOT NULL ,
C_PHONE CHAR(15) NOT NULL ,
C_ACCTBAL DECIMAL(15,2) NOT NULL ,
C_MKTSEGMENT CHAR(10) NOT NULL ,
C_COMMENT VARCHAR (117) NOT NULL);

TPs ED 7

You might also like