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.
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.
- (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.
- 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) ) ;
- 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:
- 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;
- 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).
- 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
- 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.
- 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
- Crie uma tabela estrangeira para cada tabela.
- 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.