1 Setup a new accelerator
Suppose that our new TPCH database is named tpch. Then we can create a new logical IWA accelerator with the following commands:
echo "EXECUTE FUNCTION ifx_setupDWA('IWATPCH', '192.168.1.1', '21022', '1234');" | dbaccess tpch
The IP address and the PIN code below should be adjusted according to the output of the command ondwa getpin executed on the accelerator server. Please, check the Installation document for more details.
2 Sample datamart
The following XML code could be used to create a datamart which will allow us to accelerate some queries for the tpch database.
<?xml version="1.0" encoding="UTF-8" ?> <aqtmart:martModel xmlns:aqtmart="http://www.ibm.com/xmlns/prod/dwa" version="1.0"> <mart name="tpch_1"> <table isFactTable="false" name="nation" schema="informix"> <column name="n_nationkey" /> <column name="n_name" /> <column name="n_regionkey" /> <column name="n_comment" /> </table> <table isFactTable="false" name="region" schema="informix"> <column name="r_regionkey" /> <column name="r_name" /> <column name="r_comment" /> </table> <table isFactTable="false" name="part" schema="informix"> <column name="p_partkey" /> <column name="p_name" /> <column name="p_mfgr" /> <column name="p_brand" /> <column name="p_type" /> <column name="p_size" /> <column name="p_container" /> <column name="p_retailprice" /> <column name="p_comment" /> </table> <table isFactTable="false" name="supplier" schema="informix"> <column name="s_suppkey" /> <column name="s_name" /> <column name="s_address" /> <column name="s_nationkey" /> <column name="s_phone" /> <column name="s_acctbal" /> <column name="s_comment" /> </table> <table isFactTable="false" name="partsupp" schema="informix"> <column name="ps_partkey" /> <column name="ps_suppkey" /> <column name="ps_availqty" /> <column name="ps_supplycost" /> <column name="ps_comment" /> </table> <table isFactTable="false" name="customer" schema="informix"> <column name="c_custkey" /> <column name="c_name" /> <column name="c_address" /> <column name="c_nationkey" /> <column name="c_phone" /> <column name="c_acctbal" /> <column name="c_mktsegment" /> <column name="c_comment" /> </table> <table isFactTable="false" name="orders" schema="informix"> <column name="o_orderkey" /> <column name="o_custkey" /> <column name="o_orderstatus" /> <column name="o_totalprice" /> <column name="o_orderdate" /> <column name="o_orderpriority" /> <column name="o_clerk" /> <column name="o_shippriority" /> <column name="o_comment" /> </table> <table isFactTable="true" name="lineitem" schema="informix"> <column name="l_orderkey" /> <column name="l_partkey" /> <column name="l_suppkey" /> <column name="l_linenumber" /> <column name="l_quantity" /> <column name="l_extendedprice" /> <column name="l_discount" /> <column name="l_tax" /> <column name="l_returnflag" /> <column name="l_linestatus" /> <column name="l_shipdate" /> <column name="l_commitdate" /> <column name="l_receiptdate" /> <column name="l_shipinstruct" /> <column name="l_shipmode" /> <column name="l_comment" /> </table> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="partsupp" parentCardinality="1" dependentTableName="lineitem" dependentCardinality="n" > <parentColumn name="ps_partkey" /> <parentColumn name="ps_suppkey" /> <dependentColumn name="l_partkey" /> <dependentColumn name="l_suppkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="part" parentCardinality="1" dependentTableName="partsupp" dependentCardinality="n" > <parentColumn name="p_partkey" /> <dependentColumn name="ps_partkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="supplier" parentCardinality="1" dependentTableName="partsupp" dependentCardinality="n" > <parentColumn name="s_suppkey" /> <dependentColumn name="ps_suppkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="orders" parentCardinality="1" dependentTableName="lineitem" dependentCardinality="n" > <parentColumn name="o_orderkey" /> <dependentColumn name="l_orderkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="customer" parentCardinality="1" dependentTableName="orders" dependentCardinality="n" > <parentColumn name="c_custkey" /> <dependentColumn name="o_custkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="nation" parentCardinality="1" dependentTableName="supplier" dependentCardinality="n" > <parentColumn name="n_nationkey" /> <dependentColumn name="s_nationkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="nation" parentCardinality="1" dependentTableName="customer" dependentCardinality="n" > <parentColumn name="n_nationkey" /> <dependentColumn name="c_nationkey" /> </reference> <reference referenceType="LEFTOUTER" isRuntimeJoin="true" parentTableSchema="informix" dependentTableSchema="informix" parentTableName="region" parentCardinality="1" dependentTableName="nation" dependentCardinality="n" > <parentColumn name="r_regionkey" /> <dependentColumn name="n_regionkey" /> </reference> </mart> </aqtmart:martModel>
3 Create and load a datamart
Suppose that a datamart XML definition is stored in /tmp/tpch.xml. Then the datamart can be deployed with the following command:
$ echo "EXECUTE FUNCTION ifx_createMart('IWATPCH', filetoclob('/tmp/tpch.xml', 'client'));" | dbaccess tpch
Database selected.
(expression) The operation was completed successfully.
1 row(s) retrieved.
Database closed.
In order to use the datamart, it's data should be loaded into the accelerator:
$ echo "EXECUTE FUNCTION ifx_loadMart('IWATPCH', 'tpch_1', 'NONE');" | dbaccess tpch
Database selected.
(expression) The operation was completed successfully.
1 row(s) retrieved.
Database closed.
This operation can take long time if the number of rows in the fact table is big. While executing the loading on the DB server, the following command can be used in the accelerator server to check the task status:
$ ondwa tasks
TaskManager tracking 2 task(s):
------------------+--------------------------------+---------+---------+--------+------------
Task 205195258022068668 (of type 'LOAD' with name LOAD MART - 2:13)
------------------+--------------------------------+---------+---------+--------+------------
Location | Status | Progr. | Upd. ms | Memory | Monitor
------------------+--------------------------------+---------+---------+--------+------------
Primary Node 0 | receiving "informix"."lineitem"(1 of 8) | 6078M | 142 | 0 | Fine
-> Node 1 | receiving "informix"."lineitem"(1 of 8) | 2023M | 462 | 494M | Fine
-> Node 2 | receiving "informix"."lineitem"(1 of 8) | 2023M | 300 | 494M | Fine
-> Node 3 | receiving "informix"."lineitem"(1 of 8) | 2031M | 140 | 494M | Fine
(Total Memory) | | | | 1482M |
------------------+--------------------------------+---------+---------+--------+------------
Used Resources | Mart ID: 3 0 on node 0
------------------+--------------------------------+---------+---------+--------+------------
Task 134826513844404224 (of type 'DAEMON' with name DRDADaemon - 24125:39)
------------------+--------------------------------+---------+---------+--------+------------
Location | Status | Progr. | Upd. ms | Memory | Monitor
------------------+--------------------------------+---------+---------+--------+------------
Primary Node 0 | Running | 2 | 133101 | 0 | Fine
(Total Memory) | | | | 0 |
------------------+--------------------------------+---------+---------+--------+------------
Used Resources | DRDA device: 'eth0' address: '192.168.10.19:21022' on node 0
| Unbound on node 0
------------------+--------------------------------+---------+---------+--------+------------
- End of Tasklist -