mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 07:31:57 +00:00
Merge pull request #28055 from yingfc/master
Fix `star schema` in zh docs
This commit is contained in:
commit
bfdfe4dca4
@ -7,7 +7,7 @@ toc_title: Star Schema Benchmark
|
|||||||
|
|
||||||
编译 dbgen:
|
编译 dbgen:
|
||||||
|
|
||||||
``` bash
|
```bash
|
||||||
$ git clone git@github.com:vadimtk/ssb-dbgen.git
|
$ git clone git@github.com:vadimtk/ssb-dbgen.git
|
||||||
$ cd ssb-dbgen
|
$ cd ssb-dbgen
|
||||||
$ make
|
$ make
|
||||||
@ -16,9 +16,9 @@ $ make
|
|||||||
开始生成数据:
|
开始生成数据:
|
||||||
|
|
||||||
!!! warning "注意"
|
!!! warning "注意"
|
||||||
使用`-s 100`dbgen将生成6亿行数据(67GB), 如果使用`-s 1000`它会生成60亿行数据(这需要很多时间))
|
使用`-s 100`dbgen 将生成 6 亿行数据(67GB), 如果使用`-s 1000`它会生成 60 亿行数据(这需要很多时间))
|
||||||
|
|
||||||
``` bash
|
```bash
|
||||||
$ ./dbgen -s 1000 -T c
|
$ ./dbgen -s 1000 -T c
|
||||||
$ ./dbgen -s 1000 -T l
|
$ ./dbgen -s 1000 -T l
|
||||||
$ ./dbgen -s 1000 -T p
|
$ ./dbgen -s 1000 -T p
|
||||||
@ -26,9 +26,9 @@ $ ./dbgen -s 1000 -T s
|
|||||||
$ ./dbgen -s 1000 -T d
|
$ ./dbgen -s 1000 -T d
|
||||||
```
|
```
|
||||||
|
|
||||||
在ClickHouse中创建数据表:
|
在 ClickHouse 中创建数据表:
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
CREATE TABLE customer
|
CREATE TABLE customer
|
||||||
(
|
(
|
||||||
C_CUSTKEY UInt32,
|
C_CUSTKEY UInt32,
|
||||||
@ -93,7 +93,7 @@ ENGINE = MergeTree ORDER BY S_SUPPKEY;
|
|||||||
|
|
||||||
写入数据:
|
写入数据:
|
||||||
|
|
||||||
``` bash
|
```bash
|
||||||
$ clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl
|
$ clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl
|
||||||
$ clickhouse-client --query "INSERT INTO part FORMAT CSV" < part.tbl
|
$ clickhouse-client --query "INSERT INTO part FORMAT CSV" < part.tbl
|
||||||
$ clickhouse-client --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl
|
$ clickhouse-client --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl
|
||||||
@ -102,100 +102,267 @@ $ clickhouse-client --query "INSERT INTO lineorder FORMAT CSV" < lineorder.tbl
|
|||||||
|
|
||||||
将`star schema`转换为`flat schema`:
|
将`star schema`转换为`flat schema`:
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SET max_memory_usage = 20000000000, allow_experimental_multiple_joins_emulation = 1;
|
SET max_memory_usage = 20000000000;
|
||||||
|
|
||||||
CREATE TABLE lineorder_flat
|
CREATE TABLE lineorder_flat
|
||||||
ENGINE = MergeTree
|
ENGINE = MergeTree
|
||||||
PARTITION BY toYear(LO_ORDERDATE)
|
PARTITION BY toYear(LO_ORDERDATE)
|
||||||
ORDER BY (LO_ORDERDATE, LO_ORDERKEY) AS
|
ORDER BY (LO_ORDERDATE, LO_ORDERKEY) AS
|
||||||
SELECT l.*, c.*, s.*, p.*
|
SELECT
|
||||||
FROM lineorder l
|
l.LO_ORDERKEY AS LO_ORDERKEY,
|
||||||
ANY INNER JOIN customer c ON (c.C_CUSTKEY = l.LO_CUSTKEY)
|
l.LO_LINENUMBER AS LO_LINENUMBER,
|
||||||
ANY INNER JOIN supplier s ON (s.S_SUPPKEY = l.LO_SUPPKEY)
|
l.LO_CUSTKEY AS LO_CUSTKEY,
|
||||||
ANY INNER JOIN part p ON (p.P_PARTKEY = l.LO_PARTKEY);
|
l.LO_PARTKEY AS LO_PARTKEY,
|
||||||
|
l.LO_SUPPKEY AS LO_SUPPKEY,
|
||||||
ALTER TABLE lineorder_flat DROP COLUMN C_CUSTKEY, DROP COLUMN S_SUPPKEY, DROP COLUMN P_PARTKEY;
|
l.LO_ORDERDATE AS LO_ORDERDATE,
|
||||||
|
l.LO_ORDERPRIORITY AS LO_ORDERPRIORITY,
|
||||||
|
l.LO_SHIPPRIORITY AS LO_SHIPPRIORITY,
|
||||||
|
l.LO_QUANTITY AS LO_QUANTITY,
|
||||||
|
l.LO_EXTENDEDPRICE AS LO_EXTENDEDPRICE,
|
||||||
|
l.LO_ORDTOTALPRICE AS LO_ORDTOTALPRICE,
|
||||||
|
l.LO_DISCOUNT AS LO_DISCOUNT,
|
||||||
|
l.LO_REVENUE AS LO_REVENUE,
|
||||||
|
l.LO_SUPPLYCOST AS LO_SUPPLYCOST,
|
||||||
|
l.LO_TAX AS LO_TAX,
|
||||||
|
l.LO_COMMITDATE AS LO_COMMITDATE,
|
||||||
|
l.LO_SHIPMODE AS LO_SHIPMODE,
|
||||||
|
c.C_NAME AS C_NAME,
|
||||||
|
c.C_ADDRESS AS C_ADDRESS,
|
||||||
|
c.C_CITY AS C_CITY,
|
||||||
|
c.C_NATION AS C_NATION,
|
||||||
|
c.C_REGION AS C_REGION,
|
||||||
|
c.C_PHONE AS C_PHONE,
|
||||||
|
c.C_MKTSEGMENT AS C_MKTSEGMENT,
|
||||||
|
s.S_NAME AS S_NAME,
|
||||||
|
s.S_ADDRESS AS S_ADDRESS,
|
||||||
|
s.S_CITY AS S_CITY,
|
||||||
|
s.S_NATION AS S_NATION,
|
||||||
|
s.S_REGION AS S_REGION,
|
||||||
|
s.S_PHONE AS S_PHONE,
|
||||||
|
p.P_NAME AS P_NAME,
|
||||||
|
p.P_MFGR AS P_MFGR,
|
||||||
|
p.P_CATEGORY AS P_CATEGORY,
|
||||||
|
p.P_BRAND AS P_BRAND,
|
||||||
|
p.P_COLOR AS P_COLOR,
|
||||||
|
p.P_TYPE AS P_TYPE,
|
||||||
|
p.P_SIZE AS P_SIZE,
|
||||||
|
p.P_CONTAINER AS P_CONTAINER
|
||||||
|
FROM lineorder AS l
|
||||||
|
INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY
|
||||||
|
INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY
|
||||||
|
INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY;
|
||||||
```
|
```
|
||||||
|
|
||||||
运行查询:
|
运行查询:
|
||||||
|
|
||||||
Q1.1
|
Q1.1
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue FROM lineorder_flat WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25;
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q1.2
|
Q1.2
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue FROM lineorder_flat WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35;
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q1.3
|
Q1.3
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue FROM lineorder_flat WHERE toISOWeek(LO_ORDERDATE) = 6 AND toYear(LO_ORDERDATE) = 1994 AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35;
|
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE toISOWeek(LO_ORDERDATE) = 6 AND toYear(LO_ORDERDATE) = 1994
|
||||||
|
AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q2.1
|
Q2.1
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRAND FROM lineorder_flat WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA' GROUP BY year, P_BRAND ORDER BY year, P_BRAND;
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q2.2
|
Q2.2
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRAND FROM lineorder_flat WHERE P_BRAND BETWEEN 'MFGR#2221' AND 'MFGR#2228' AND S_REGION = 'ASIA' GROUP BY year, P_BRAND ORDER BY year, P_BRAND;
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_BRAND >= 'MFGR#2221' AND P_BRAND <= 'MFGR#2228' AND S_REGION = 'ASIA'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q2.3
|
Q2.3
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT sum(LO_REVENUE), toYear(LO_ORDERDATE) AS year, P_BRAND FROM lineorder_flat WHERE P_BRAND = 'MFGR#2239' AND S_REGION = 'EUROPE' GROUP BY year, P_BRAND ORDER BY year, P_BRAND;
|
SELECT
|
||||||
|
sum(LO_REVENUE),
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
P_BRAND
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE P_BRAND = 'MFGR#2239' AND S_REGION = 'EUROPE'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year,
|
||||||
|
P_BRAND;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q3.1
|
Q3.1
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT C_NATION, S_NATION, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenue FROM lineorder_flat WHERE C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997 GROUP BY C_NATION, S_NATION, year ORDER BY year asc, revenue desc;
|
SELECT
|
||||||
|
C_NATION,
|
||||||
|
S_NATION,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_NATION,
|
||||||
|
S_NATION,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q3.2
|
Q3.2
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenue FROM lineorder_flat WHERE C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997 GROUP BY C_CITY, S_CITY, year ORDER BY year asc, revenue desc;
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q3.3
|
Q3.3
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenue FROM lineorder_flat WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997 GROUP BY C_CITY, S_CITY, year ORDER BY year asc, revenue desc;
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q3.4
|
Q3.4
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT C_CITY, S_CITY, toYear(LO_ORDERDATE) AS year, sum(LO_REVENUE) AS revenue FROM lineorder_flat WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = '199712' GROUP BY C_CITY, S_CITY, year ORDER BY year asc, revenue desc;
|
SELECT
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
sum(LO_REVENUE) AS revenue
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = 199712
|
||||||
|
GROUP BY
|
||||||
|
C_CITY,
|
||||||
|
S_CITY,
|
||||||
|
year
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
revenue DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q4.1
|
Q4.1
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT toYear(LO_ORDERDATE) AS year, C_NATION, sum(LO_REVENUE - LO_SUPPLYCOST) AS profit FROM lineorder_flat WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2') GROUP BY year, C_NATION ORDER BY year, C_NATION;
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
C_NATION,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
C_NATION
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
C_NATION ASC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q4.2
|
Q4.2
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT toYear(LO_ORDERDATE) AS year, S_NATION, P_CATEGORY, sum(LO_REVENUE - LO_SUPPLYCOST) AS profit FROM lineorder_flat WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2') GROUP BY year, S_NATION, P_CATEGORY ORDER BY year, S_NATION, P_CATEGORY;
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
S_NATION,
|
||||||
|
P_CATEGORY,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
S_NATION,
|
||||||
|
P_CATEGORY
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
S_NATION ASC,
|
||||||
|
P_CATEGORY ASC;
|
||||||
```
|
```
|
||||||
|
|
||||||
Q4.3
|
Q4.3
|
||||||
|
|
||||||
``` sql
|
```sql
|
||||||
SELECT toYear(LO_ORDERDATE) AS year, S_CITY, P_BRAND, sum(LO_REVENUE - LO_SUPPLYCOST) AS profit FROM lineorder_flat WHERE S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14' GROUP BY year, S_CITY, P_BRAND ORDER BY year, S_CITY, P_BRAND;
|
SELECT
|
||||||
|
toYear(LO_ORDERDATE) AS year,
|
||||||
|
S_CITY,
|
||||||
|
P_BRAND,
|
||||||
|
sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
|
||||||
|
FROM lineorder_flat
|
||||||
|
WHERE S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14'
|
||||||
|
GROUP BY
|
||||||
|
year,
|
||||||
|
S_CITY,
|
||||||
|
P_BRAND
|
||||||
|
ORDER BY
|
||||||
|
year ASC,
|
||||||
|
S_CITY ASC,
|
||||||
|
P_BRAND ASC;
|
||||||
```
|
```
|
||||||
|
|
||||||
[原始文章](https://clickhouse.tech/docs/en/getting_started/example_datasets/star_schema/) <!--hide-->
|
[原始文章](https://clickhouse.tech/docs/en/getting_started/example_datasets/star_schema/) <!--hide-->
|
||||||
|
Loading…
Reference in New Issue
Block a user