Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Melhores práticas/ Práticas da otimização de tabela/ Passo 1: criar uma tabela inicial e carregar dados de amostra
Atualizado em 2024-05-09 GMT+08:00

Passo 1: criar uma tabela inicial e carregar dados de amostra

Regiões suportadas

Tabela 1 descreve as regiões onde os dados do OBS foram carregados.

Tabela 1 Regiões e nomes de bucket do OBS

Região

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

Crie um grupo de tabelas sem especificar seus modos de armazenamento, chaves de distribuição, modos de distribuição ou modos de compactação. Carregue dados de amostra nessas tabelas.

  1. (Opcional) Crie um cluster.

    Se um cluster estiver disponível, ignore esta etapa. Para obter detalhes sobre como criar um cluster, consulte Criação de um cluster do GaussDB(DWS) 2.0.

    Conecte-se ao cluster e teste a conexão. Para obter detalhes, consulte Métodos de conexão a um cluster.

    Esta prática usa um cluster de 8 nós como exemplo. Você também pode usar um cluster de quatro nós para executar o teste.

  2. Crie uma tabela de teste SS store_sales.

    Antes de criar esta tabela, exclua as tabelas SS existentes primeiro (se houver) usando o comando DROP TABLE. Por exemplo, para excluir a tabela store_sales, execute o seguinte comando:

    1
    DROP TABLE store_sales;
    

    Não configure o modo de armazenamento, a chave de distribuição, o modo de distribuição ou o modo de compactação ao criar esta tabela.

    Execute o comando CREATE TABLE para criar as 11 tabelas no Figura 3. Esta seção fornece apenas a sintaxe para criar a tabela store_sales. Para criar todas as tabelas, copie a sintaxe em Criação de uma tabela 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. Carregue dados de amostra nessas tabelas.

    Um bucket do OBS fornece dados de exemplo usados para essa prática. O bucket pode ser lido por todos os usuários da nuvem autenticados. Execute as seguintes operações para carregar os dados de amostra:

    1. Crie uma tabela estrangeira para cada tabela.

      GaussDB(DWS) usa os wrappers de dados estrangeiros (FDWs) fornecidos pelo PostgreSQL para importar dados em paralelo. Para usar FDWs, crie tabelas de FDW primeiro (também chamadas de tabelas estrangeiras). Esta seção fornece apenas a sintaxe para criar a tabela estrangeira obs_from_store_sales_001 correspondente à tabela store_sales. Para criar todas as tabelas estrangeiras, copie a sintaxe em Criação de uma tabela estrangeira.

      • Observe que <obs_bucket_name> na instrução a seguir indica o nome do bucket do OBS. Apenas algumas regiões são suportadas. Para obter detalhes sobre as regiões suportadas e os nomes dos bucket do OBS, consulte Tabela 1. Os clusters do GaussDB(DWS) não oferecem suporte ao acesso entre regiões aos dados do bucket do OBS.
      • As colunas da tabela estrangeira devem ser as mesmas da tabela ordinária correspondente. Neste exemplo, store_sales e obs_from_store_sales_001 devem ter as mesmas colunas.
      • A sintaxe da tabela estrangeira obtém os dados de exemplo usados para esta prática do bucket do OBS. Para carregar outros dados de amostra, modifique SERVER gsmpp_server OPTIONS conforme necessário. Para obter detalhes, consulte Sobre a importação paralela de dados do OBS.
      • // AK e SK codificados rigidamente ou em texto não criptografado são arriscados. Para fins de segurança, criptografe seu AK e SK e armazene-os no arquivo de configuração ou nas variáveis de ambiente.
       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. Defina os parâmetros ACCESS_KEY e SECRET_ACCESS_KEY conforme necessário na instrução de criação de tabela estrangeira e execute essa instrução em uma ferramenta cliente para criar uma tabela estrangeira.

      Para obter os valores de ACCESS_KEY e SECRET_ACCESS_KEY, consulte Criação de chaves de acesso (AK e SK).

    3. Importe dados.
      Crie o script insert.sql contendo as seguintes instruções e execute-o:
       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
      

      Informação semelhante à seguinte é exibida:

       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 o tempo total gasto na criação das 11 tabelas. O resultado será registrado como o tempo de carregamento na tabela de referência em 1 na próxima seção.
    5. Execute o comando a seguir para verificar se cada tabela é carregada corretamente e registra linhas na tabela:
       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;
      

      O número de linhas em cada tabela SS é o seguinte:

      Nome da tabela

      Número de linhas

      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. Execute o comando ANALYZE para atualizar as estatísticas.

    1
    ANALYZE;
    

    Se ANALYZE for retornado, a execução é bem-sucedida.

    1
    ANALYZE
    

    A instrução ANALYZE coleta estatísticas sobre o conteúdo da tabela em bancos de dados, que serão armazenadas no catálogo do sistema PG_STATISTIC. Em seguida, o otimizador de consulta usa as estatísticas para elaborar o plano de execução mais eficiente.

    Depois de executar inserções e exclusões em lote, é aconselhável executar a instrução ANALYZE na tabela ou na biblioteca inteira para atualizar as estatísticas.