Эквивалентность DB2 для кластерных таблиц Teradata - PullRequest
0 голосов
/ 30 мая 2019

В Teradata определение кластеризованной таблицы очень просто и существует в едином синтаксисе (поправьте меня, если я ошибаюсь).

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

Я читаю, что в DB2 существует целый ряд "кластеризованных" типов таблиц, связанных с созданием физического макета данных для совместного использования для объекта.

Определенный первичный индекс в TD будет распределять данные таблицы по всем узлам / виртуальным процессорам, доступным для сервера TD.

Какой самый близкий метод (и синтаксис) для достижения того же в DB2?

Ответы [ 3 ]

2 голосов
/ 30 мая 2019

Я бы рекомендовал начать с этого обзора разбиения данных (концепций) для 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 голос
/ 30 мая 2019

Таблицы создаются в табличных пространствах, табличные пространства создаются в группах разделов базы данных (или наборах узлов, которые вы можете создавать по своему усмотрению) в Db2 для 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, и данные таблицы распределяются между этими узлами на основе вычисленного значения хеш-функции по значениям YEAR столбец.

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

Всегда желательно указывать табличное пространство явно, если только правила выбора такого табличного пространства, которые использует Db2 в случае отсутствия такой спецификации, не применимы для вашего конкретного утверждения.

0 голосов
/ 13 июня 2019

Это для системы OLAP или OLTP?

Ничего общего с DB2 редко используется для OLTP. Есть соображения колокейшн, и, что важно, стоимость коммита намного выше (двухфазный коммит).

Если это система OLAP, то рассматриваете ли вы таблицы, организованные по столбцам? Вам может не потребоваться раздел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...