以编程方式运行 Database Designer 的工作流程
以下示例显示了通过以编程方式运行 Database Designer 来创建设计的步骤。
重要
在现有架构上运行 Database Designer 函数之前,请通过调用函数 EXPORT_CATALOG 来备份当前设计。在运行此示例之前,您应具有 DBDUSER 角色,并且您应使用 SET ROLE DBDUSER 命令启用此角色:
-
在公共架构中创建一个表:
=> CREATE TABLE T( x INT, y INT, z INT, u INT, v INT, w INT PRIMARY KEY );
-
将数据添加到表:
\! perl -e 'for ($i=0; $i<100000; ++$i) {printf("%d, %d, %d, %d, %d, %d\n", $i/10000, $i/100, $i/10, $i/2, $i, $i);}' | vsql -c "COPY T FROM STDIN DELIMITER ',' DIRECT;"
-
在公共架构中创建第二个表:
=> CREATE TABLE T2( x INT, y INT, z INT, u INT, v INT, w INT PRIMARY KEY );
-
将
T1
表中的数据复制到T2
表,并提交更改:=> INSERT /*+DIRECT*/ INTO T2 SELECT * FROM T; => COMMIT;
-
创建新设计:
=> SELECT DESIGNER_CREATE_DESIGN('my_design');
此命令将信息添加到 V_MONITOR 架构中的 DESIGNS 系统表。
-
将公共架构中的表添加到设计:
=> SELECT DESIGNER_ADD_DESIGN_TABLES('my_design', 'public.t'); => SELECT DESIGNER_ADD_DESIGN_TABLES('my_design', 'public.t2');
这些命令将信息添加到 DESIGN_TABLES 系统表。
-
在
/tmp/examples
中或在具有 READ 和 WRITE 权限的其他目录中创建一个名为queries.txt
的文件。将以下两个查询添加到此文件,然后保存它。Database Designer 使用以下查询来创建设计:SELECT DISTINCT T2.u FROM T JOIN T2 ON T.z=T2.z-1 WHERE T2.u > 0; SELECT DISTINCT w FROM T;
-
将查询文件添加到设计,并显示结果,即已接受查询、非设计查询和不可优化查询的数量:
=> SELECT DESIGNER_ADD_DESIGN_QUERIES ('my_design', '/tmp/examples/queries.txt', 'true' );
结果显示接受了两个查询:
Number of accepted queries =2 Number of queries referencing non-design tables =0 Number of unsupported queries =0 Number of illegal queries =0
DESIGNER_ADD_DESIGN_QUERIES 函数会填充 DESIGN_QUERIES 系统表。
-
将设计类型设置为 comprehensive。(这是默认值。)全面设计将为所有设计表创建一个初始或替换设计:
=> SELECT DESIGNER_SET_DESIGN_TYPE('my_design', 'comprehensive');
-
将优化目标设置为 query。此设置创建了一个主要用于提高查询性能的设计,它可能会推荐其他投影。这些投影会使数据库存储占用空间更大:
=> SELECT DESIGNER_SET_OPTIMIZATION_OBJECTIVE('my_design', 'query');
-
创建设计,然后将设计和部署脚本保存到
/tmp/examples
或具有 READ 和 WRITE 权限的其他目录。以下命令:-
会分析统计信息
-
不会部署设计。
-
在部署之后,不会删除设计。
-
遇到错误时会停止。
=> SELECT DESIGNER_RUN_POPULATE_DESIGN_AND_DEPLOY ('my_design', '/tmp/examples/my_design_projections.sql', '/tmp/examples/my_design_deploy.sql', 'True', 'False', 'False', 'False' );
此命令将信息添加到以下系统表:
-
-
检查已运行的 Database Designer 的状态,以查看 Database Designer 推荐了哪些投影。在
deployment_projection_name
列中:-
rep
表示复制的投影 -
super
表示超投影deployment_status
列为pending
,因为设计尚未部署。对于此示例,Database Designer 推荐了四种投影:
=> \x Expanded display is on. => SELECT * FROM OUTPUT_DEPLOYMENT_STATUS; -[ RECORD 1 ]--------------+----------------------------- deployment_id | 45035996273795970 deployment_projection_id | 1 deployment_projection_name | T_DBD_1_rep_my_design deployment_status | pending error_message | N/A -[ RECORD 2 ]--------------+----------------------------- deployment_id | 45035996273795970 deployment_projection_id | 2 deployment_projection_name | T2_DBD_2_rep_my_design deployment_status | pending error_message | N/A -[ RECORD 3 ]--------------+----------------------------- deployment_id | 45035996273795970 deployment_projection_id | 3 deployment_projection_name | T_super deployment_status | pending error_message | N/A -[ RECORD 4 ]--------------+----------------------------- deployment_id | 45035996273795970 deployment_projection_id | 4 deployment_projection_name | T2_super deployment_status | pending error_message | N/A
-
-
查看
/tmp/examples/my_design_deploy.sql
脚本,以了解在运行部署脚本时如何创建投影。在此示例中,脚本也会向列分配编码方案 RLE 和 COMMONDELTA_COMP(如合适)。 -
从保存设计的目录中部署设计。
=> \i /tmp/examples/my_design_deploy.sql
-
现在,设计已部署,可以删除设计:
=> SELECT DESIGNER_DROP_DESIGN('my_design');