Teradata集群表的DB2等效性

时间:2019-05-30 03:27:46

标签: db2 teradata db2-luw udb

在Teradata中,群集表的定义非常简单,并且以一种语法存在(如果我错了,请纠正我)。

CREATE TABLE table_name (charcol1 varchar(10), idcol integer)
primary index (idcol);

我正在阅读有关在DB2中为对象创建无共享物理数据布局的大量“集群”表类型。

TD中定义的主索引会将表数据分布到TD服务器可用的所有节点/虚拟cpus中。

在DB2中实现相同的最接近的方法(和语法)是什么?

3 个答案:

答案 0 :(得分:2)

我建议从此overview of data partitioning (concepts) for Db2开始。

  

以下三个子句演示了可以以任何组合方式一起使用的数据组织级别:

     
      
  • DISTRIBUTE BY将数据均匀分布在数据库分区之间(以实现查询内并行性并平衡每个数据库分区上的负载)(数据库分区)
  •   
  • PARTITION BY将同一数据分区(表分区)中具有单个维度的相似值的行分组
  •   
  • ORGANIZE BY可以将同一表范围内的多个维度上具有相似值的行分组(多维聚类),或根据插入操作的时间分组行(插入时间聚类表)。
  •   

所有三个子句都可以在同一CREATE TABLE语句中使用。其用法取决于数据和预想的查询。

数据库分区(DISTRIBUTE BY)是您没有要求的共享内容。根据年份跨分区分配数据。

 CREATE TABLE SALES
     (CUSTOMER   VARCHAR(80),
      REGION     CHAR(5),
      YEAR       INTEGER)
   DISTRIBUTE BY HASH (YEAR)

答案 1 :(得分:1)

表在表空间中创建,表空间在Db2 for LUW中的数据库分区组(或节点集,可以根据需要创建)中创建。
您可以使用以下查询来了解哪些表空间驻留在哪些数据库分区组中。

SELECT 
--  T.TBSPACEID, T.TBSPACETYPE
  CASE T.DATATYPE 
  WHEN 'A' THEN 'REGULAR'
  WHEN 'L' THEN 'LARGE'
  WHEN 'T' THEN 'SYSTEMP'
  WHEN 'U' THEN 'USRTEMP'
  END DATATYPE
, T.DBPGNAME
--, T.PAGESIZE
, T.TBSPACE
--, B.BPNAME
--, G.MIN_NODENUM, G.MAX_NODENUM, G.NODE_COUNT
, G.NODES_LIST
FROM SYSCAT.TABLESPACES T
JOIN SYSCAT.BUFFERPOOLS B ON B.BUFFERPOOLID=T.BUFFERPOOLID
LEFT JOIN (
SELECT 
  DBPGNAME
, COUNT(*) NODE_COUNT
, MIN(DBPARTITIONNUM) MIN_NODENUM
, MAX(DBPARTITIONNUM) MAX_NODENUM
, LISTAGG(DBPARTITIONNUM, ',') WITHIN GROUP (ORDER BY DBPARTITIONNUM) NODES_LIST 
FROM SYSCAT.DBPARTITIONGROUPDEF
GROUP BY DBPGNAME
) G ON G.DBPGNAME=T.DBPGNAME
ORDER BY T.TBSPACEID;

假设您得到以下结果:

DATATYPE  DBPGNAME        TBSPACE    NODES_LIST                                          
--------  --------------- ---------- ----------
...
LARGE     IBMDEFAULTGROUP USERSPACE1 0,1,2,3
...

这意味着,如果运行以下语句,则会在表空间USERSPACE1中创建表,该表空间位于数据库分区(节点)0-3上,并且基于哈希在这些节点之间分配表数据根据{{​​1}}列的值计算得出的值。

YEAR

始终建议您明确指定一个表空间,除非选择Db2在没有这种规范的情况下使用的表空间规则适用于您的特定语句。

答案 2 :(得分:0)

这是用于OLAP系统还是OLTP?

很少将与DB2共享的内容用于OLTP。有托管的注意事项,重要的是一次提交的成本要高得多(两阶段提交)。

如果这是OLAP系统,那么您是否正在考虑按列组织的表?您可能不需要分区。