楼主: 〇〇

才发现有个鸭子数据库

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
11#
 楼主| 发表于 2021-11-3 10:14 | 只看该作者
处理csv就慢得多了

D COPY (SELECT * FROM 'd:\dbd\taxi*.parquet') TO 'alltaxi.csv' WITH (HEADER 1, DELIMITER '|');
Run Time: real 77.724 user 74.474877 sys 2.776818
D select passenger_count,count(*) from 'alltaxi.csv' group by passenger_count;
┌─────────────────┬──────────────┐
│ passenger_count │ count_star() │
├─────────────────┼──────────────┤
│ 1               │ 15356631     │
│ 2               │ 3332927      │
│ 5               │ 910516       │
│ 3               │ 944833       │
│ 0               │ 408742       │
│ 6               │ 546467       │
│ 4               │ 439066       │
│ 7               │ 106          │
│ 9               │ 64           │
│ 8               │ 72           │
└─────────────────┴──────────────┘
Run Time: real 26.186 user 24.726159 sys 1.450809

文件大了5倍
2021/11/03  10:10     2,120,483,787 alltaxi.csv

2021/06/25  22:46       127,056,503 taxi_2019_04.parquet
2021/06/25  23:29       130,095,527 taxi_2019_05.parquet
2021/06/25  23:31       120,790,979 taxi_2019_06.parquet
               3 个文件    377,943,009 字节

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
12#
 楼主| 发表于 2021-11-4 08:16 | 只看该作者
文档中没有说,实际是支持递归CTE的
D .table
D with recursive t(a)as(select 1::int union all select a+1 from t where a<4)select * from t;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
+---+
Run Time: real 0.023 user 0.000000 sys 0.000000

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
13#
 楼主| 发表于 2021-11-12 12:37 | 只看该作者
本帖最后由 〇〇 于 2021-11-12 12:38 编辑

处理真实数据
https://www12.statcan.gc.ca/cens ... ETYPE=CSV&GEONO=055 下载加拿大人口普查发布结果
然后
解压缩,从meta文件找到列名,创建表,导入csv文件,再复制到parquet

再建立视图
D:\duckdb>duckdb
v0.3.0 46a0fc50a
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D create table X2016055
> (
> "CENSUS_YEAR" text,
> "GEO_CODE (POR)"text,
> "GEO_LEVEL"text,
> "GEO_NAME"text,
> "GNR"text,
> "GNR_LF"text,
> "DATA_QUALITY_FLAG"text,
> "CSD_TYPE_NAME"text,
> "ALT_GEO_CODE"text,
> "DIM: Profile of Census Divisions/Census Subdivisions (2247)"text,
> "Member ID: Profile of Census Divisions/Census Subdivisions (2247)"text,
> "Notes: Profile of Census Divisions/Census Subdivisions (2247)"text,
> "Dim: Sex (3): Member ID: [1]: Total - Sex"text,
> "Dim: Sex (3): Member ID: [2]: Male"text,
> "Dim: Sex (3): Member ID: [3]: Female"text
> );
D .timer on
D insert into X2016055 select * from 'd:/cac/98-401-X2016055_English_CSV_data.csv';
Run Time: real 30.980 user 29.156587 sys 1.825212
D select count(*) from X2016055;
| count_star() |
|--------------|
| 12288843     |
Run Time: real 0.020 user 0.000000 sys 0.000000
D
D .mode markdown
D COPY (SELECT * FROM X2016055) TO 'X2016055-zstd.parquet' (FORMAT 'parquet' , CODEC 'ZSTD');
Run Time: real 11.422 user 9.937264 sys 1.326008
D select count(*) from 'X2016055-zstd.parquet';
| count_star() |
|--------------|
| 12288843     |
Run Time: real 0.040 user 0.031200 sys 0.000000
D
D describe X2016055;
|                               Field                               |  Type   | Null | Key | Default | Extra |
|-------------------------------------------------------------------|---------|------|-----|---------|-------|
| CENSUS_YEAR                                                       | VARCHAR | YES  |     |         |       |
| GEO_CODE (POR)                                                    | VARCHAR | YES  |     |         |       |
| GEO_LEVEL                                                         | VARCHAR | YES  |     |         |       |
| GEO_NAME                                                          | VARCHAR | YES  |     |         |       |
| GNR                                                               | VARCHAR | YES  |     |         |       |
| GNR_LF                                                            | VARCHAR | YES  |     |         |       |
| DATA_QUALITY_FLAG                                                 | VARCHAR | YES  |     |         |       |
| CSD_TYPE_NAME                                                     | VARCHAR | YES  |     |         |       |
| ALT_GEO_CODE                                                      | VARCHAR | YES  |     |         |       |
| DIM: Profile of Census Divisions/Census Subdivisions (2247)       | VARCHAR | YES  |     |         |       |
| Member ID: Profile of Census Divisions/Census Subdivisions (2247) | VARCHAR | YES  |     |         |       |
| Notes: Profile of Census Divisions/Census Subdivisions (2247)     | VARCHAR | YES  |     |         |       |
| Dim: Sex (3): Member ID: [1]: Total - Sex                         | VARCHAR | YES  |     |         |       |
| Dim: Sex (3): Member ID: [2]: Male                                | VARCHAR | YES  |     |         |       |
| Dim: Sex (3): Member ID: [3]: Female                              | VARCHAR | YES  |     |         |       |
Run Time: real 0.140 user 0.000000 sys 0.000000
D select count(distinct GEO_LEVEL),count(distinct "GEO_CODE (POR)") from X2016055;
| count(geo_level) | count(GEO_CODE (POR)) |
|------------------|-----------------------|
| 4                | 5469                  |
Run Time: real 1.410 user 1.404009 sys 0.000000
D select count(distinct GEO_NAME),count(distinct "CSD_TYPE_NAME") from X2016055;
| count(geo_name) | count(CSD_TYPE_NAME) |
|-----------------|----------------------|
| 5114            | 54                   |
Run Time: real 1.450 user 1.450809 sys 0.000000
D select count(distinct "Member ID: Profile of Census Divisions/Census Subdivisions (2247)") from X2016055;
| count(Member ID: Profile of Census Divisions/Census Subdivisions (2247)) |
|--------------------------------------------------------------------------|
| 2247                                                                     |
Run Time: real 0.912 user 0.920406 sys 0.000000
D CREATE view strings as SELECT
> "CENSUS_YEAR"                                                        "year" ,
> "GEO_CODE (POR)"                                                     geo_code_por ,
> "GEO_LEVEL"                                                          geo_level ,
> "GEO_NAME"                                                           geo_name ,
> "GNR"                                                                gnr ,
> "GNR_LF"                                                             gnr_lf ,
> "DATA_QUALITY_FLAG"                                                  data_quality_flag ,
> "CSD_TYPE_NAME"                                                      csd_type_name ,
> "ALT_GEO_CODE"                                                       alt_geo_code ,
> "DIM: Profile of Census Divisions/Census Subdivisions (2247)"        profile ,
> "Member ID: Profile of Census Divisions/Census Subdivisions (2247)"  profile_id ,
> "Notes: Profile of Census Divisions/Census Subdivisions (2247)"      notes ,
> "Dim: Sex (3): Member ID: [1]: Total - Sex"                          total ,
> "Dim: Sex (3): Member ID: [2]: Male"                                 male ,
> "Dim: Sex (3): Member ID: [3]: Female"                               female
> from X2016055;
Run Time: real 0.000 user 0.000000 sys 0.000000
D WITH inputs AS (
>   SELECT
>     geo_name,
>     CASE WHEN profile_id = '1930' THEN 'total' ELSE 'cyclist' END AS mode,
>     female,
>     male
>   FROM strings
>   WHERE
>     profile_id IN ('1930', '1935') AND
>     csd_type_name = 'CY' AND
>     geo_name IN ('Victoria', 'Dawson Creek', 'Kitchener')
> )
> SELECT
>   total.geo_name,
>   cyclist.male,
>   cyclist.female,
>   (100.0 * cyclist.male::int / total.male::int)::numeric(4,2) AS pct_male,
>   (100.0 * cyclist.female::int / total.female::int)::numeric(4,2) AS pct_female
> FROM inputs AS total
> JOIN inputs AS cyclist USING (geo_name)
> WHERE total.mode = 'total' AND cyclist.mode = 'cyclist';
|   geo_name   | male | female | pct_male | pct_female |
|--------------|------|--------|----------|------------|
| Kitchener    | 905  | 280    | 1.51     | 0.51       |
| Victoria     | 2650 | 2130   | 12.57    | 9.73       |
| Dawson Creek | 25   | 0      | 0.86     | 0.00       |
Run Time: real 0.420 user 0.374402 sys 0.000000

D WITH total AS (
>   SELECT
>     geo_name,
>     female::int female,
>     male::int male
>   FROM strings
>   WHERE
>     geo_name in ('Dawson Creek', 'Victoria', 'Kitchener') AND
>     csd_type_name = 'CY' AND
>     profile_id = '1930'
> ), cyclist as (
>   SELECT
>     geo_name,
>     female::int female,
>     male::int male
>   FROM strings
>   WHERE
>     geo_name in ('Dawson Creek', 'Victoria', 'Kitchener') AND
>     csd_type_name = 'CY' AND
>     profile_id = '1935'
> )
> SELECT
>   total.geo_name,
>   cyclist.male,
>   cyclist.female,
>   100.0 * cyclist.male / total.male,
>   100.0 * cyclist.female / total.female
> FROM total
> JOIN cyclist USING (geo_name);
|   geo_name   | male | female | 100.0 * cyclist.male / total.male | 100.0 * cyclist.female / total.female |
|--------------|------|--------|-----------------------------------|---------------------------------------|
| Kitchener    | 905  | 280    | 1.512998411769623                 | 0.5145639988973628                    |
| Victoria     | 2650 | 2130   | 12.574139976275207                | 9.730470534490635                     |
| Dawson Creek | 25   | 0      | 0.8635578583765112                | 0.0                                   |
Run Time: real 0.735 user 0.639604 sys 0.000000

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
14#
 楼主| 发表于 2021-11-16 21:50 来自手机 | 只看该作者
0.3.1发布了。https://github.com/duckdb/duckdb/releases/download/v0.3.1/duckdb_cli-linux-amd64.zip

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
15#
 楼主| 发表于 2021-11-16 21:51 来自手机 | 只看该作者
Win 64 Bit: https://github.com/duckdb/duckdb/releases/download/v0.3.1/duckdb_cli-windows-amd64.zip  Win 32 Bit: https://github.com/duckdb/duckdb/releases/download/v0.3.1/duckdb_cli-windows-i386.zip

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
16#
 楼主| 发表于 2021-11-16 21:53 来自手机 | 只看该作者
Win 64 Bit: https://github.com/duckdb/duckdb/releases/download/v0.3.1/libduckdb-windows-amd64.zip  Win 32 Bit: https://github.com/duckdb/duckdb/releases/download/v0.3.1/libduckdb-windows-i386.zip

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
17#
 楼主| 发表于 2021-11-25 09:32 | 只看该作者
duckdb.rar (2.33 MB, 下载次数: 0)

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
18#
 楼主| 发表于 2021-11-26 10:47 | 只看该作者
支持parquet的编译版本

cmake -S D:\32\duckdb-master -B d:\32\build -DCMAKE_BUILD_TYPE=Release -DBUILD_PARQUET_EXTENSION=TRUE

duckdb_par.rar

2.52 MB, 下载次数: 0

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
19#
 楼主| 发表于 2021-11-26 14:21 | 只看该作者
新版速度有提高
D:\duckdb>duckdb
v0.3.0 46a0fc50a
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D .timer on
D create table t as select range i from range(1000000000);
Run Time: real 12.370 user 10.062064 sys 2.293215
D describe t;
┌───────┬────────┬──────┬─────┬─────────┬───────┐
│ Field │  Type  │ Null │ Key │ Default │ Extra │
├───────┼────────┼──────┼─────┼─────────┼───────┤
│ i     │ BIGINT │ YES  │     │         │       │
└───────┴────────┴──────┴─────┴─────────┴───────┘
Run Time: real 0.200 user 0.000000 sys 0.000000
D select sum(i) from t;
┌────────────────────┐
│       sum(i)       │
├────────────────────┤
│ 499999999500000000 │
└────────────────────┘
Run Time: real 5.300 user 5.288434 sys 0.000000
D select avg(i) from t;
┌─────────────┐
│   avg(i)    │
├─────────────┤
│ 499999999.5 │
└─────────────┘
Run Time: real 5.350 user 5.335234 sys 0.000000
D select count(i) from t;
┌────────────┐
│  count(i)  │
├────────────┤
│ 1000000000 │
└────────────┘
Run Time: real 1.580 user 1.560010 sys 0.000000
D .exit



D:\duckdb>duckdb031
v0.3.1 88aa81c6b
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D .timer on
D create table t as select range i from range(1000000000);
Run Time: real 14.730 user 11.856076 sys 2.839218
D describe t;
┌───────┬────────┬──────┬─────┬─────────┬───────┐
│ Field │  Type  │ Null │ Key │ Default │ Extra │
├───────┼────────┼──────┼─────┼─────────┼───────┤
│ i     │ BIGINT │ YES  │     │         │       │
└───────┴────────┴──────┴─────┴─────────┴───────┘
Run Time: real 0.200 user 0.000000 sys 0.000000
D select sum(i) from t;
┌────────────────────┐
│       sum(i)       │
├────────────────────┤
│ 499999999500000000 │
└────────────────────┘
Run Time: real 1.240 user 24.070954 sys 0.093601
D select avg(i) from t;
┌─────────────┐
│   avg(i)    │
├─────────────┤
│ 499999999.5 │
└─────────────┘
Run Time: real 1.340 user 25.927366 sys 0.000000
D select count(i) from t;
┌────────────┐
│  count(i)  │
├────────────┤
│ 1000000000 │
└────────────┘
Run Time: real 1.310 user 24.133355 sys 0.062400
D .exit

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2022-1-14 10:36 | 只看该作者
性能很高不错的

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表