Paso 1: Creación de una tabla inicial y carga de datos de ejemplo
Regiones admitidas
La Tabla 1 describe las regiones donde se han cargado los datos de OBS.
| Región | Bucket de OBS |
|---|---|
| CN North-Beijing1 | dws-demo-cn-north-1 |
| CN North-Beijing2 | dws-demo-cn-north-2 |
| CN North-Beijing4 | dws-demo-cn-north-4 |
| CN North-Ulanqab1 | dws-demo-cn-north-9 |
| CN East-Shanghai1 | dws-demo-cn-east-3 |
| CN East-Shanghai2 | dws-demo-cn-east-2 |
| CN South-Guangzhou | dws-demo-cn-south-1 |
| CN South-Guangzhou-InvitationOnly | dws-demo-cn-south-4 |
| CN-Hong Kong | dws-demo-ap-southeast-1 |
| AP-Singapore | dws-demo-ap-southeast-3 |
| AP-Bangkok | dws-demo-ap-southeast-2 |
| LA-Santiago | dws-demo-la-south-2 |
| AF-Johannesburg | dws-demo-af-south-1 |
| LA-Mexico City1 | dws-demo-na-mexico-1 |
| LA-Mexico City2 | dws-demo-la-north-2 |
| RU-Moscow2 | dws-demo-ru-northwest-2 |
| LA-Sao Paulo1 | dws-demo-sa-brazil-1 |
Cree un grupo de tablas sin especificar sus modos de almacenamiento, claves de distribución, modos de distribución o modos de compresión. Cargue datos de muestra en estas tablas.
- (Opcional) Cree un clúster.
Si hay un clúster disponible, omita este paso. Para obtener más información sobre cómo crear un clúster, consulte Creación de un clúster de almacenamiento y cómputo acoplado de DWS.
Además, conéctese al clúster y pruebe la conexión. Para obtener más información, consulte Métodos de conexión a un clúster.
Esta práctica utiliza un clúster de 8 nodos como ejemplo. También puede utilizar un clúster de cuatro nodos para realizar la prueba.
- Cree una tabla de prueba SS store_sales.
Si ya existen tablas SS en la base de datos actual, ejecute la sentencia DROP TABLE para eliminar estas tablas primero.
Por ejemplo, elimine la tabla store_sales.
1DROP TABLE store_sales;
No configure el modo de almacenamiento, la clave de distribución, el modo de distribución ni el modo de compresión al crear esta tabla.
Ejecute el comando CREATE TABLE para crear las 11 tablas en Figura 3. Esta sección solo proporciona la sintaxis para crear la tabla store_sales. Para crear todas las tablas, copie la sintaxis en Creación de una tabla inicial.
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
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) ) ;
- Cargue datos de muestra en estas tablas.
Un bucket de OBS proporciona datos de muestra utilizados para esta práctica. El bucket puede ser leído por todos los usuarios de la nube autenticados. Realice las siguientes operaciones para cargar los datos de muestra:
- Cree una tabla foránea para cada tabla.
DWS utiliza los wrappers de datos foráneos (FDW) proporcionados por PostgreSQL para importar datos en paralelo. Para utilizar los FDW, cree primero las tablas FDW (también llamadas tablas foráneas). Esta sección solo proporciona la sintaxis para crear la tabla foránea obs_from_store_sales_001 correspondiente a la tabla store_sales. Para crear todas las tablas foráneas, copie la sintaxis en Creación de una tabla foránea.
- Tenga en cuenta que <obs_bucket_name> en la siguiente sentencia indica el nombre de bucket de OBS. Solo se admiten algunas regiones. Para obtener más información sobre las regiones admitidas y los nombres de bucket de OBS, consulte Tabla 1. Los clústeres de DWS no admiten el acceso entre regiones a los datos de bucket de OBS.
- Las columnas de la tabla foránea deben ser las mismas que las de la tabla ordinaria correspondiente. En este ejemplo, store_sales y obs_from_store_sales_001 deben tener las mismas columnas.
- La sintaxis de la tabla foránea obtiene los datos de ejemplo utilizados para esta práctica del bucket de OBS. Para cargar otros datos de ejemplo, modifique SERVER gsmpp_server OPTIONS según sea necesario. Para obtener más información, consulte Importación de datos en paralelo desde OBS.
- El uso de AK y SK codificadas de forma rígida (hard-coded) o en texto plano representa un riesgo de seguridad. Por seguridad, encripte su AK/SK y guárdelas en el archivo de configuración o en las variables de entorno.
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 29 30 31 32 33 34 35 36 37 38 39 40 41
CREATE FOREIGN TABLE obs_from_store_sales_001 ( 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) ) -- Configure OBS server information and data format details. SERVER gsmpp_server OPTIONS ( LOCATION 'obs://<obs_bucket_name>/tpcds/store_sales', FORMAT 'text', DELIMITER '|', ENCODING 'utf8', NOESCAPING 'true', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', REJECT_LIMIT 'unlimited', CHUNKSIZE '64' ) -- If create foreign table failed,record error message WITH err_obs_from_store_sales_001;
- Establezca los parámetros ACCESS_KEY y SECRET_ACCESS_KEY según sea necesario en la sentencia de creación de la tabla foránea y ejecute esta sentencia en una herramienta cliente para crear una tabla foránea.
Para los valores de ACCESS_KEY y SECRET_ACCESS_KEY, consulte Creación de claves de acceso (AK y SK).
- Importe datos. Cree el script insert.sql que contiene las siguientes sentencias y ejecútelo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
\timing on \parallel on 4 INSERT INTO store_sales SELECT * FROM obs_from_store_sales_001; INSERT INTO date_dim SELECT * FROM obs_from_date_dim_001; INSERT INTO store SELECT * FROM obs_from_store_001; INSERT INTO item SELECT * FROM obs_from_item_001; INSERT INTO time_dim SELECT * FROM obs_from_time_dim_001; INSERT INTO promotion SELECT * FROM obs_from_promotion_001; INSERT INTO customer_demographics SELECT * from obs_from_customer_demographics_001 ; INSERT INTO customer_address SELECT * FROM obs_from_customer_address_001 ; INSERT INTO household_demographics SELECT * FROM obs_from_household_demographics_001; INSERT INTO customer SELECT * FROM obs_from_customer_001; INSERT INTO income_band SELECT * FROM obs_from_income_band_001; \parallel off
El resultado devuelto es el siguiente:
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 29
SET Timing is on. SET Time: 2.831 ms Parallel is on with scale 4. Parallel is off. INSERT 0 402 Time: 1820.909 ms INSERT 0 73049 Time: 2715.275 ms INSERT 0 86400 Time: 2377.056 ms INSERT 0 1000 Time: 4037.155 ms INSERT 0 204000 Time: 7124.190 ms INSERT 0 7200 Time: 2227.776 ms INSERT 0 1920800 Time: 8672.647 ms INSERT 0 20 Time: 2273.501 ms INSERT 0 1000000 Time: 11430.991 ms INSERT 0 1981703 Time: 20270.750 ms INSERT 0 287997024 Time: 341395.680 ms total time: 341584 ms
- Calcule el tiempo total invertido en la creación de las 11 tablas. El resultado se registrará como el tiempo de carga en la tabla de referencia en 1 en la siguiente sección.
- Ejecute el siguiente comando para verificar que cada tabla se cargue correctamente y registre líneas en la tabla:
1 2 3 4 5 6 7 8 9 10 11
SELECT COUNT(*) FROM store_sales; SELECT COUNT(*) FROM date_dim; SELECT COUNT(*) FROM store; SELECT COUNT(*) FROM item; SELECT COUNT(*) FROM time_dim; SELECT COUNT(*) FROM promotion; SELECT COUNT(*) FROM customer_demographics; SELECT COUNT(*) FROM customer_address; SELECT COUNT(*) FROM household_demographics; SELECT COUNT(*) FROM customer; SELECT COUNT(*) FROM income_band;
La cantidad de filas de cada tabla SS es la siguiente:
Nombre de la tabla
Cantidad de filas
Store_Sales
287997024
Date_Dim
73049
Store
402
Item
204000
Time_Dim
86400
Promotion
1000
Customer_Demographics
1920800
Customer_Address
1000000
Household_Demographics
7200
Customer
1981703
Income_Band
20
- Cree una tabla foránea para cada tabla.
- Ejecute el comando ANALYZE para actualizar las estadísticas.
1ANALYZE;
Si se devuelve ANALYZE, la ejecución se realiza correctamente.
1ANALYZELa sentencia ANALYZE recopila estadísticas sobre el contenido de las tablas en las bases de datos, las cuales se almacenarán en el catálogo del sistema PG_STATISTIC. Luego, el optimizador de consultas utiliza las estadísticas para calcular el plan de ejecución más eficiente.
Después de ejecutar inserciones y eliminaciones por lotes, se recomienda ejecutar la sentencia ANALYZE en la tabla o en toda la biblioteca para actualizar las estadísticas.