As tabelas são a unidade fundamental de armazenamento de dados no MaxCompute. Este tutorial orienta você no design e na criação de dois tipos de tabelas (não particionadas e particionadas) com dados bancários de exemplo e na posterior verificação dos resultados.
O que você aprenderá:
Como analisar um arquivo de dados e determinar a estrutura adequada da tabela
Como criar tabelas não particionadas e particionadas usando o cliente MaxCompute
Como adicionar partições a uma tabela particionada
Como verificar se as tabelas foram criadas com o schema correto
Steps overview: Etapa 1: Projetar as tabelas → Etapa 2: Criar as tabelas → Etapa 3: Verificar as tabelas
Pré-requisitos
Antes de começar, certifique-se de ter:
O cliente MaxCompute instalado e em execução. Consulte Instalar e iniciar o cliente MaxCompute.
-
Um arquivo de dados CSV ou TXT para importar. Este tutorial utiliza os seguintes arquivos de exemplo:
Tabela não particionada: banking.txt
Tabela particionada (três arquivos): banking_nocreditcard.csv, banking_uncreditcard.csv e banking_yescreditcard.csv
-
A permissão CREATE TABLE no seu projeto MaxCompute. Essa permissão é obrigatória para usuários RAM. Titulares de contas Alibaba Cloud a possuem por padrão.
Para verificar suas permissões, consulte Consultar permissões usando MaxCompute SQL.
Para conceder permissões a um usuário RAM, consulte Permissões do MaxCompute.
Observações de uso
Os tipos de dados das colunas na tabela devem corresponder aos tipos de dados nos arquivos source. Incompatibilidades de tipo impedem a importação dos dados.
Etapa 1: Projetar as tabelas
Antes de escrever qualquer SQL, examine seus dados source para determinar o número de colunas, os nomes dos campos e os tipos de dados de cada coluna.
Os arquivos de exemplo neste tutorial contêm dados de mutuários. Os campos são separados por vírgulas. A pré-visualização a seguir mostra algumas linhas de cada arquivo:
-- Non-partitioned table data (21 columns)
44,blue-collar,married,basic.4y,unknown,yes,no,cellular,aug,thu,210,1,999,0,nonexistent,1.4,93.444,-36.1,4.963,5228.1,0
53,technician,married,unknown,no,no,no,cellular,nov,fri,138,1,999,0,nonexistent,-0.1,93.2,-42,4.021,5195.8,0
28,management,single,university.degree,no,yes,no,cellular,jun,thu,339,3,6,2,success,-1.7,94.055,-39.8,0.729,4991.6,1
-- Partitioned table data (20 columns per file; credit column is used as partition key)
53,technician,married,unknown,no,no,cellular,nov,fri,138,1,999,0,nonexistent,-0.1,93.2,-42,4.021,5195.8,0
28,management,single,university.degree,yes,no,cellular,jun,thu,339,3,6,2,success,-1.7,94.055,-39.8,0.729,4991.6,1
39,services,married,high.school,no,no,cellular,apr,fri,185,2,999,0,nonexistent,-1.8,93.075,-47.1,1.405,5099.1,0
Conte as colunas, identifique o tipo de dados de cada campo e escolha nomes significativos para as colunas. A tabela a seguir resume a análise dos arquivos de exemplo.
<table> <thead> <tr> <td><p><b>Item</b></p></td> <td><p><b>Descrição</b></p></td> </tr> </thead> <colgroup></colgroup> <colgroup></colgroup> <tbody> <tr> <td><p>Número de colunas</p></td> <td><p>Conte o número de colunas em cada arquivo de exemplo e determine a quantidade de colunas na tabela a ser criada:</p> <ul> <li><p>O arquivo de exemplo usado para criar uma tabela não particionada contém 21 colunas. Com base nesse arquivo, crie uma tabela não particionada com 21 colunas. </p> <div> <div> <i></i> </div> <div> <strong>Nota </strong> <p>Se o número de colunas na tabela exceder o número de colunas no arquivo de exemplo, as colunas adicionais serão preenchidas com NULL. Caso a tabela tenha menos colunas que o arquivo de exemplo, os dados excedentes no arquivo serão descartados. </p> </div> </div></li> <li><p>Cada arquivo de exemplo usado para criar uma tabela particionada contém 20 colunas. Com base nesses arquivos, crie uma tabela particionada com 21 colunas, sendo uma delas a chave de partição. Defina as partições durante a criação da tabela. </p></li> </ul></td> </tr> <tr> <td><p>Campos da tabela</p></td> <td><p>Identifique os campos em cada arquivo de exemplo e determine os campos da tabela a ser criada:</p> <ul> <li><p>Campos da tabela não particionada:</p> <ul> <li><p>age: idade</p></li> <li><p>job: tipo de trabalho</p></li> <li><p>marital: estado civil</p></li> <li><p>education: nível de escolaridade</p></li> <li><p>credit: possui cartão de crédito</p></li> <li><p>housing: mutuários</p></li> <li><p>loan: possui empréstimos</p></li> <li><p>contact: informações de contato</p></li> <li><p>month: mês</p></li> <li><p>day_of_week: dia da semana</p></li> <li><p>duration: duração</p></li> <li><p>campaign: número de contatos na campanha atual</p></li> <li><p>pdays: tempo decorrido desde o último contato</p></li> <li><p>previous: número de contatos anteriores</p></li> <li><p>poutcome: resultados de atividades de marketing anteriores</p></li> <li><p>emp_var_rate: taxa de variação de emprego</p></li> <li><p>cons_price_idx: índice de preços ao consumidor</p></li> <li><p>cons_conf_idx: índice de confiança do consumidor</p></li> <li><p>euribor 3m: Taxa Interbancária de Oferta em Euros (Euribor) de 3 meses</p></li> <li><p>nr_employed: número de funcionários</p></li> <li><p>fixed_deposit: possui depósito a prazo</p></li> </ul></li> <li><p>Campos da tabela particionada:</p> <ul> <li><p>age: idade</p></li> <li><p>job: tipo de trabalho</p></li> <li><p>marital: estado civil</p></li> <li><p>education: nível de escolaridade</p></li> <li><p>housing: mutuários</p></li> <li><p>loan: possui empréstimos</p></li> <li><p>contact: informações de contato</p></li> <li><p>month: mês</p></li> <li><p>day_of_week: dia da semana</p></li> <li><p>duration: duração</p></li> <li><p>campaign: número de contatos na campanha atual</p></li> <li><p>pdays: tempo decorrido desde o último contato</p></li> <li><p>previous: número de contatos anteriores</p></li> <li><p>poutcome: resultados de atividades de marketing anteriores</p></li> <li><p>emp_var_rate: taxa de variação de emprego</p></li> <li><p>cons_price_idx: índice de preços ao consumidor</p></li> <li><p>cons_conf_idx: índice de confiança do consumidor</p></li> <li><p>euribor 3m: Euribor de 3 meses</p></li> <li><p>nr_employed: número de funcionários</p></li> <li><p>fixed_deposit: possui depósito a prazo</p></li> <li><p>credit: possui cartão de crédito (chave de partição) </p></li> </ul></li> </ul></td> </tr> <tr> <td><p>Tipos de dados</p></td> <td><p>Identifique o tipo de dados de cada coluna nos arquivos de exemplo:</p> <ul> <li><p>age: BIGINT</p></li> <li><p>job: STRING</p></li> <li><p>marital: STRING</p></li> <li><p>education: STRING</p></li> <li><p>credit: STRING</p></li> <li><p>housing: STRING</p></li> <li><p>loan: STRING</p></li> <li><p>contact: STRING</p></li> <li><p>month: STRING</p></li> <li><p>day_of_week: STRING</p></li> <li><p>duration: STRING</p></li> <li><p>campaign: BIGINT</p></li> <li><p>pdays: DOUBLE</p></li> <li><p>previous: DOUBLE</p></li> <li><p>poutcome: STRING</p></li> <li><p>emp_var_rate: DOUBLE</p></li> <li><p>cons_price_idx: DOUBLE</p></li> <li><p>cons_conf_idx: DOUBLE</p></li> <li><p>euribor3m: DOUBLE</p></li> <li><p>nr_employed: DOUBLE</p></li> <li><p>fixed_deposit: BIGINT</p></li> </ul></td> </tr> </tbody> </table>
Etapa 2: Criar as tabelas
Este tutorial cria quatro tabelas no total:
bank_data: tabela não particionada para importar o conjunto completo de dadosbank_data_pt: tabela particionada, comcreditcomo chave de partiçãoresult_table1: tabela não particionada para armazenar resultados de consultasresult_table2: tabela não particionada para armazenar resultados de consultas
Para obter detalhes sobre a sintaxe CREATE TABLE, consulte Criar uma tabela. Para mais informações sobre gerenciamento de tabelas e partições, consulte Operações de tabela e Operações de partição.
-
Optional: Mude para o projeto MaxCompute desejado. Ignore esta etapa se o projeto já tiver sido selecionado ao iniciar o cliente.
use doc_test_dev;O prompt é atualizado para confirmar a mudança:
doc_test_dev.default> -
Crie as quatro tabelas. A ordem das colunas e os tipos de dados em cada instrução CREATE TABLE correspondem diretamente aos campos identificados na Etapa 1.
-
Crie a tabela não particionada
bank_data:create table if not exists bank_data ( age BIGINT comment 'age', job STRING comment 'job type', marital STRING comment 'marital status', education STRING comment 'education level', credit STRING comment 'have a credit card', housing STRING comment 'mortgagors', loan STRING comment 'have loans', contact STRING comment 'contact information', month STRING comment 'month', day_of_week STRING comment 'day of the week', duration STRING comment 'duration', campaign BIGINT comment 'number of contacts for the current campaign', pdays DOUBLE comment 'time elapsed after the last contact', previous DOUBLE comment 'number of previous contacts', poutcome STRING comment 'results of previous marketing activities', emp_var_rate DOUBLE comment 'employment variance rate', cons_price_idx DOUBLE comment 'consumer price index', cons_conf_idx DOUBLE comment 'consumer confidence index', euribor3m DOUBLE comment '3-month Euribor', nr_employed DOUBLE comment 'number of employees', fixed_deposit BIGINT comment 'have a time deposit' ); -
Crie a tabela particionada
bank_data_pte adicione partições. A colunacreditfunciona como chave de partição em vez de uma coluna de dados comum; portanto, a tabela possui 20 colunas de dados mais uma chave de partição.create table if not exists bank_data_pt ( age BIGINT comment 'age', job STRING comment 'job type', marital STRING comment 'marital status', education STRING comment 'education level', housing STRING comment 'mortgagors', loan STRING comment 'have loans', contact STRING comment 'contact information', month STRING comment 'month', day_of_week STRING comment 'day of the week', duration STRING comment 'duration', campaign BIGINT comment 'number of contacts for the current campaign', pdays DOUBLE comment 'time elapsed after the last contact', previous DOUBLE comment 'number of previous contacts', poutcome STRING comment 'results of previous marketing activities', emp_var_rate DOUBLE comment 'employment variance rate', cons_price_idx DOUBLE comment 'consumer price index', cons_conf_idx DOUBLE comment 'consumer confidence index', euribor3m DOUBLE comment '3-month Euribor', nr_employed DOUBLE comment 'number of employees', fixed_deposit BIGINT comment 'have a time deposit' )partitioned by (credit STRING comment 'have a credit card'); alter table bank_data_pt add if not exists partition (credit='yes') partition (credit='no') partition (credit='unknown'); -
Crie a tabela não particionada
result_table1:create table if not exists result_table1 ( education STRING comment 'education level', num BIGINT comment 'number of persons' ); -
Crie a tabela não particionada
result_table2:create table if not exists result_table2 ( education STRING comment 'education level', num BIGINT comment 'number of persons', credit STRING comment 'have a credit card' );
-
Etapa 3: Verificar as tabelas
Verifique se todas as tabelas foram criadas e se os schemas estão corretos.
-
Liste todas as tabelas no projeto:
show tables;Todas as quatro tabelas aparecem na saída:
ALIYUN$****:bank_data ALIYUN$****:bank_data_pt ALIYUN$****:result_table1 ALIYUN$****:result_table2 -
Inspecione o schema e as partições de cada tabela:
O campo
Size: 0é esperado, pois a tabela ainda não contém dados. O tamanho aumenta após a importação dos dados.-- View the schema of bank_data. desc bank_data; -- View the schema of bank_data_pt. desc bank_data_pt; -- View the partitions of bank_data_pt. show partitions bank_data_pt; -- View the schema of result_table1. desc result_table1; -- View the schema of result_table2. desc result_table2;A saída de
desc bank_data_pt;é semelhante a:+------------------------------------------------------------------------------------+ | Owner: ALIYUN$**** | Project: doc_test_dev | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-05-17 14:02:21 | | LastDDLTime: 2021-05-17 14:02:21 | | LastModifiedTime: 2021-05-17 14:02:21 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | age | bigint | | age | | job | string | | job type | | marital | string | | marital status | | education | string | | educational level | | housing | string | | mortgagors | | loan | string | | have loans | | contact | string | | contact information | | month | string | | month | | day_of_week | string | | day of the week | | duration | string | | duration | | campaign | bigint | | number of contacts for the current campaign | | pdays | double | | time elapsed after the last contact | | previous | double | | number of previous contacts | | poutcome | string | | results of previous marketing activities | | emp_var_rate | double | | employment variation rate | | cons_price_idx | double | | consumer price index | | cons_conf_idx | double | | consumer confidence index | | euribor3m | double | | 3-month Euribor | | nr_employed | double | | number of employees | | fixed_deposit | bigint | | have a time deposit | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | credit | string | have a credit card | +------------------------------------------------------------------------------------+A saída de
show partitions bank_data_pt;confirma que todas as três partições foram criadas:credit=no credit=unknown credit=yes
Próximos passos
Com as quatro tabelas criadas e os schemas verificados, importe os dados dos arquivos de exemplo. Consulte Importar dados para tabelas.