¿Cómo cambio las columnas de distribución?
En una base de datos de almacén de datos, debe elegir cuidadosamente las columnas de distribución para las tablas grandes, ya que pueden afectar al rendimiento de la base de datos y las consultas. Si se utiliza una clave de distribución incorrecta, puede producirse un sesgo de datos después de importar los datos. Como resultado, el uso de algunos discos será mucho más alto que el de otros discos, e incluso el clúster puede llegar a ser de solo lectura. Si se utiliza la política de distribución hash y se produce un sesgo de datos, el rendimiento de E/S de algunos DN será deficiente, lo que afectará al rendimiento general de la consulta. La selección y el ajuste adecuados de las columnas de distribución son fundamentales para el rendimiento de las consultas de tabla.
Si se utiliza la política de distribución hash, debe comprobar las tablas para asegurarse de que sus datos estén distribuidos uniformemente en cada DN. Generalmente, más del 5% de diferencia entre la cantidad de datos en diferentes DN se considera como sesgo de datos. Si la diferencia es superior al 10%, tiene que elegir otra columna de distribución.
Para las tablas que no están distribuidas uniformemente, ajuste sus columnas de distribución para reducir el sesgo de datos y evitar problemas de rendimiento de la base de datos.
Elección de una columna de distribución apropiada
La columna de distribución de una tabla hash debe cumplir los siguientes requisitos, que se clasifican por prioridad en orden descendente:
- Los valores de la clave de distribución deben ser discretos para que los datos puedan distribuirse uniformemente en cada DN. Puede seleccionar la clave principal de la tabla como clave de distribución. Por ejemplo, para una tabla de información de persona, elija la columna número de tarjeta de identificación como clave de distribución.
- No seleccione la columna donde existe un filtro constante.
- Seleccione la condición de unión como columna de distribución, de modo que las tareas de unión se puedan empujar hacia abajo a los DN para ejecutar, reduciendo la cantidad de datos transferidos entre los DN.
- Se pueden seleccionar varias columnas de distribución para distribuir los datos de manera uniforme.
Procedimiento
Ejecute la sentencia select version(); para consultar la versión actual de la base de datos. El rendimiento requerido varía según la versión.
- Para las versiones 8.0.x y anteriores, reconstruya una tabla.
- Utilice Data Studio o gsql en Linux para acceder a la base de datos.
- Cree una tabla.
En las instrucciones siguientes, table1 es el nombre original de la tabla y table1_new es el nombre de la nueva tabla. column1 y column2 son los nombres de columna de distribución.
1 2 3 4
CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2);
- Migre datos a la nueva tabla.
1 2 3 4
START TRANSACTION; LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE; INSERT INTO table1_new SELECT * FROM table1; COMMIT;
- Compruebe que se han migrado los datos de la tabla. Elimine la tabla original.
1 2
SELECT COUNT(*) FROM table1_new; DROP TABLE table1;
- Reemplace la tabla original.
1
ALTER TABLE table1_new RENAME TO table1;