Paso 4: Creación de otra tabla y carga de datos
Después de seleccionar un modo de almacenamiento, un nivel de compresión, un modo de distribución y una clave de distribución para cada tabla, utilice estos atributos para crear tablas y volver a cargar datos. Compare el rendimiento del sistema antes y después de la recreación de la tabla.
- Elimine las tablas creadas anteriormente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
DROP TABLE store_sales; DROP TABLE date_dim; DROP TABLE store; DROP TABLE item; DROP TABLE time_dim; DROP TABLE promotion; DROP TABLE customer_demographics; DROP TABLE customer_address; DROP TABLE household_demographics; DROP TABLE customer; DROP TABLE income_band; DROP FOREIGN TABLE obs_from_store_sales_001; DROP FOREIGN TABLE obs_from_date_dim_001; DROP FOREIGN TABLE obs_from_store_001; DROP FOREIGN TABLE obs_from_item_001; DROP FOREIGN TABLE obs_from_time_dim_001; DROP FOREIGN TABLE obs_from_promotion_001; DROP FOREIGN TABLE obs_from_customer_demographics_001; DROP FOREIGN TABLE obs_from_customer_address_001; DROP FOREIGN TABLE obs_from_household_demographics_001; DROP FOREIGN TABLE obs_from_customer_001; DROP FOREIGN TABLE obs_from_income_band_001;
- Cree tablas y especifique modos de almacenamiento y distribución para ellas.
Solo se proporciona la sintaxis para recrear la tabla store_sales por simplicidad. Para recrear todas las demás tablas, copie la sintaxis en Creación de otra tabla después de la optimización del diseño.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
CREATE TABLE store_sales ( ss_sold_date_sk integer , ss_sold_time_sk integer , ss_item_sk integer not null, ss_customer_sk integer , ss_cdemo_sk integer , ss_hdemo_sk integer , ss_addr_sk integer , ss_store_sk integer , ss_promo_sk integer , ss_ticket_number bigint not null, ss_quantity integer , ss_wholesale_cost decimal(7,2) , ss_list_price decimal(7,2) , ss_sales_price decimal(7,2) , ss_ext_discount_amt decimal(7,2) , ss_ext_sales_price decimal(7,2) , ss_ext_wholesale_cost decimal(7,2) , ss_ext_list_price decimal(7,2) , ss_ext_tax decimal(7,2) , ss_coupon_amt decimal(7,2) , ss_net_paid decimal(7,2) , ss_net_paid_inc_tax decimal(7,2) , ss_net_profit decimal(7,2) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY hash (ss_item_sk);
- Cargue datos de muestra en estas tablas.
- Registre el tiempo de carga en las tablas de referencia.
Referencia
Antes
Después
Tiempo de carga (11 tablas)
341584 ms
257241 ms
Espacio de almacenamiento ocupado
Store_Sales
42 GB
-
Date_Dim
11 MB
-
Store
232 KB
-
Item
110 MB
-
Time_Dim
11 MB
-
Promotion
256 KB
-
Customer_Demographics
171 MB
-
Customer_Address
170 MB
-
Household_Demographics
504 KB
-
Customer
441 MB
-
Income_Band
88 KB
-
Espacio de almacenamiento total
42 GB
-
Query execution time
Consulta 1
14552.05 ms
-
Consulta 2
27952.36 ms
-
Consulta 3
17721.15 ms
-
Tiempo total de ejecución
60225.56 ms
-
- Ejecute el comando ANALYZE para actualizar las estadísticas.
1ANALYZE;
Si se devuelve ANALYZE, la ejecución se realiza correctamente.
1ANALYZE - Compruebe si hay sesgo de datos.
En una tabla hash, una clave de distribución incorrecta puede causar sesgo de datos o un rendimiento de E/S deficiente en determinados DN. Por lo tanto, debe comprobar la tabla para asegurarse de que los datos estén distribuidos uniformemente en cada DN. Puede ejecutar las siguientes sentencias SQL para comprobar si hay sesgo de datos:
1SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM table_name GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;
xc_node_id corresponde a un DN. Por lo general, una diferencia superior al 5% entre la cantidad de datos en los diferentes DN se considera un sesgo de datos. Si la diferencia es mayor al 10%, elija otra clave de distribución. En DWS, puede seleccionar varias claves de distribución para distribuir los datos de forma uniforme.