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