Si no se especifica ninguna columna de distribución, ¿cómo se almacenarán los datos?
Para clústeres de 8.1.2 o posterior, puede utilizar el parámetro de GUC default_distribution_mode para consultar y establecer el modo de distribución de tabla predeterminado.
Si no se especifica ninguna columna de distribución durante la creación de la tabla, los datos se almacenan de la siguiente manera:
- Escenario 1
Si se incluye la clave principal o la restricción única durante la creación de la tabla, se selecciona la distribución hash. La columna de distribución es la columna correspondiente a la clave principal o restricción única.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
CREATE TABLE warehouse1 ( W_WAREHOUSE_SK INTEGER PRIMARY KEY, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) ); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "warehouse1_pkey" for table "warehouse1" CREATE TABLE SELECT getdistributekey('warehouse1'); getdistributekey ------------------ w_warehouse_sk (1 row)
- Escenario 2
Si la clave principal o la restricción única no se incluyen durante la creación de la tabla pero hay columnas cuyos tipos de datos se pueden utilizar como columnas de distribución, se selecciona la distribución hash. La columna de distribución es la primera columna cuyo tipo de datos se puede utilizar como columna de distribución.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CREATE TABLE warehouse2 ( W_WAREHOUSE_SK INTEGER , W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) ); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'w_warehouse_sk' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE SELECT getdistributekey('warehouse2'); getdistributekey ------------------ w_warehouse_sk (1 row)
- Escenario 3
Si la clave principal o la restricción única no se incluyen durante la creación de la tabla y no existe ninguna columna cuyo tipo de datos se pueda utilizar como columna de distribución, se selecciona la distribución round-robin.
CREATE TABLE warehouse3 ( W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) ); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'w_warehouse_id' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE SELECT getdistributekey('warehouse3'); getdistributekey ------------------ w_warehouse_id (1 row)