Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2026-09-29 GMT+08:00

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.

Tabla 1 Regiones y nombres de bucket 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.

  1. (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.

  2. 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.

    1
    DROP 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)                  
    ) ;
    

  3. 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:

    1. 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;
      
    2. 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).

    3. 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
      
    4. 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.
    5. 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

  4. Ejecute el comando ANALYZE para actualizar las estadísticas.

    1
    ANALYZE;
    

    Si se devuelve ANALYZE, la ejecución se realiza correctamente.

    1
    ANALYZE
    

    La 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.