使用DWS秒级查询交通卡口通行车辆行驶路线
本实践将演示交通卡口车辆通行分析,将加载8.9亿条交通卡口车辆通行模拟数据到数据仓库单个数据库表中,并进行车辆精确查询和车辆模糊查询,展示DWS对于历史详单数据的高性能查询能力。

DWS已预先将样例数据上传到OBS桶的“traffic-data”文件夹中,并给所有华为云用户赋予了该OBS桶的只读访问权限。
视频介绍
支持区域
当前已上传OBS数据的区域如表1所示。
区域 |
OBS桶名 |
---|---|
华北-北京一 |
dws-demo-cn-north-1 |
华北-北京二 |
dws-demo-cn-north-2 |
华北-北京四 |
dws-demo-cn-north-4 |
华北-乌兰察布一 |
dws-demo-cn-north-9 |
华东-上海一 |
dws-demo-cn-east-3 |
华东-上海二 |
dws-demo-cn-east-2 |
华南-广州 |
dws-demo-cn-south-1 |
华南-广州友好 |
dws-demo-cn-south-4 |
中国-香港 |
dws-demo-ap-southeast-1 |
亚太-新加坡 |
dws-demo-ap-southeast-3 |
亚太-曼谷 |
dws-demo-ap-southeast-2 |
拉美-圣地亚哥 |
dws-demo-la-south-2 |
非洲-约翰内斯堡 |
dws-demo-af-south-1 |
拉美-墨西哥城一 |
dws-demo-na-mexico-1 |
拉美-墨西哥城二 |
dws-demo-la-north-2 |
莫斯科二 |
dws-demo-ru-northwest-2 |
拉美-圣保罗一 |
dws-demo-sa-brazil-1 |
步骤二:导入交通卡口样例数据
使用SQL客户端工具连接到集群后,在SQL客户端工具中,执行以下步骤导入交通卡口车辆通行的样例数据并执行查询。
- 创建traffic数据库。
1
CREATE DATABASE traffic encoding 'utf8' template template0;
- 切换到新的数据库traffic,创建用于存储卡口车辆信息的数据库表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
CREATE SCHEMA traffic_data; SET current_schema= traffic_data; DROP TABLE if exists GCJL; CREATE TABLE GCJL ( kkbh VARCHAR(20), hphm VARCHAR(20), gcsj DATE , cplx VARCHAR(8), cllx VARCHAR(8), csys VARCHAR(8) ) with (orientation = column, COMPRESSION=MIDDLE) distribute by hash(hphm);
- 创建外表。外表用于识别和关联OBS上的源数据。
- <obs_bucket_name>表示OBS桶名,当前系统已预置了OBS桶和样例数据,用户无需创建,请替换为DWS所在的实际区域对应的桶名,参见支持区域,本实践以“中国-香港”地区为例,请替换为dws-demo-ap-southeast-1。不支持跨区域访问OBS桶数据,例如集群在“中国-香港”,不能将<obs_bucket_name>替换成其他区域所对应的桶名。
- <Access_Key_Id>和<Secret_Access_Key>替换为实际值,在准备工作获取。
- 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
- 创建外表如果提示“ERROR: schema "xxx" does not exist Position”,则说明schema不存在,请先参照上一步创建schema。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
CREATE SCHEMA tpchobs; SET current_schema = 'tpchobs'; DROP FOREIGN table if exists GCJL_OBS; CREATE FOREIGN TABLE GCJL_OBS ( like traffic_data.GCJL ) SERVER gsmpp_server OPTIONS ( encoding 'utf8', location 'obs://<obs_bucket_name>/traffic-data/gcxx', format 'text', delimiter ',', access_key '<Access_Key_Id>', secret_access_key '<Secret_Access_Key>', chunksize '64', IGNORE_EXTRA_DATA 'on' );
- 将数据从外表导入到数据库表中。
1
INSERT INTO traffic_data.GCJL SELECT * FROM tpchobs.GCJL_OBS;
导入数据需要一些时间,请耐心等待。
步骤三:车辆分析
- 执行ANALYZE。
用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。
执行以下语句生成表统计信息:
1
ANALYZE;
- 查询数据表中的数据量。
执行如下语句,可以查看已加载的数据条数。
1 2
SET current_schema= traffic_data; SELECT count(*) FROM traffic_data.gcjl;
- 车辆精确查询。
执行以下语句,指定车牌号码和时间段查询车辆行驶路线。DWS在应对点查时秒级响应。
1 2 3 4 5 6
SET current_schema= traffic_data; SELECT hphm, kkbh, gcsj FROM traffic_data.gcjl where hphm = 'YD38641' and gcsj between '2016-01-06' and '2016-01-07' order by gcsj desc;
- 车辆模糊查询。
执行以下语句,指定车牌号码和时间段查询车辆行驶路线,DWS 在应对模糊查询时秒级响应。
1 2 3 4 5 6 7
SET current_schema= traffic_data; SELECT hphm, kkbh, gcsj FROM traffic_data.gcjl where hphm like 'YA23F%' and kkbh in('508', '1125', '2120') and gcsj between '2016-01-01' and '2016-01-07' order by hphm,gcsj desc;