Perguntas frequentes sobre tipos de dados, limites do SQL e outros tópicos relacionados à execução de instruções SQL no MaxCompute.
Categoria | Perguntas frequentes |
Tipos de dados | |
Limites do SQL | |
Execução de jobs SQL | |
Monitoramento de jobs SQL | |
Otimização de jobs SQL |
Um campo relacionado a tempo no MaxCompute pode armazenar uma data sem hora?
Sim. Use o tipo de dados DATE, que exige a ativação dos tipos de dados do MaxCompute V2.0. Para obter mais informações, consulte 2.0 data type versions.
Por que obtenho resultados inesperados ao comparar dois valores DOUBLE quanto à igualdade em uma instrução SQL do MaxCompute?
O tipo de dados DOUBLE no MaxCompute está sujeito a erros de precisão. Não use o sinal de igual (=) para comparar dois valores DOUBLE diretamente.
Em vez disso, subtraia um valor do outro e verifique se a diferença absoluta é pequena o suficiente para ser considerada igual.
Como resolvo um erro de estouro de precisão para o tipo de dados DECIMAL?
Execute o comando set odps.sql.decimal.odps2=true; no nível da sessão para ativar o suporte aos tipos de dados do MaxCompute V2.0. A precisão máxima para o tipo de dados DECIMAL no MaxCompute é de 38 dígitos. Armazenar dados com precisão máxima aumenta a probabilidade de erros de estouro durante o processamento. Sempre que possível, use uma precisão menor.
Projetos do MaxCompute recém-criados não suportam conversão implícita de tipos de dados. Como resolver isso?
Desative o suporte aos tipos de dados do MaxCompute V2.0 para permitir a conversão implícita. Para obter mais informações, consulte Data type conversion.
Ao consultar dados, aparece uma mensagem de erro informando 'XXX type is not enabled in current mode'. Como resolver?
Execute o comando set odps.sql.decimal.odps2=true; no nível da sessão para ativar o suporte aos tipos de dados do MaxCompute V2.0.
Como lidar com o limite de 8 MB para um único campo?
Um único campo em uma tabela do MaxCompute não pode exceder 8 MB. Se um campo ultrapassar esse limite, divida-o em vários campos menores conforme suas necessidades de negócio.
Campos grandes com estruturas complexas podem degradar o desempenho da computação. Para evitar isso, projete sua arquitetura de dados seguindo os padrões de data warehouse:
Arquive dados brutos com estruturas complexas na camada Operational Data Store (ODS) em formato compactado.
Limpe periodicamente os dados incrementais na camada ODS (por exemplo, diariamente). Divida campos complexos em vários campos simples e armazene-os nas tabelas da camada Common Data Model (CDM) para facilitar a análise.
Ao executar uma instrução SQL do MaxCompute, aparece uma mensagem de erro informando 'partitions exceeds the specified limit'. Como resolver?
-
Sintoma
Ao executar uma instrução SQL do MaxCompute, o sistema retorna a seguinte mensagem de erro:
FAILED: ODPS-0010000:System internal error - OTS filtering exception - Ots read range partitions exceeds the specified limit:10000: tableName:xxxx , please check hive conf key -
Causa
Uma única tabela do MaxCompute suporta até 60.000 partições, mas uma única consulta pode acessar no máximo 10.000 partições. Esse erro pode ocorrer pelos seguintes motivos:
Motivo 1: Nenhuma condição de partição foi especificada.
Motivo 2: Uso de um campo como ID de usuário como chave de partição, resultando em um número excessivo de partições.
-
Solução
Solução para o Motivo 1: Caso não tenha especificado uma condição de partição, adicione uma.
Solução para o Motivo 2: Se a coluna da chave de partição não for adequada e causar excesso de partições, considere alterá-la.
Como executar instruções SQL do MaxCompute de forma não interativa?
Use o Shell para executar instruções SQL do MaxCompute de forma não interativa:
-
Use o comando
odps -f filenamepara ler e processar um arquivo SQL.Ao executar uma instrução SQL, a primeira linha do arquivo
filenamedeve serSQLpara indicar o modo SQL.SQL select ... from table_name where xxx; -
Para executar uma única instrução SQL, use o método
sqltextno MaxCompute SQL../odpscmd -e "select * from dual;"Execute
odps -helppara obter mais informações.
Como sincronizar dados de tabela de um ambiente de desenvolvimento para um ambiente de produção?
Execute o seguinte comando no MaxCompute client:
insert into project.table select * from project_dev.table;
Caso não possua permissões de leitura e gravação na tabela de produção, conceda as permissões necessárias à sua conta. Para obter mais informações, consulte MaxCompute permissions.
Como verificar se um campo está vazio?
Use operadores no MaxCompute SQL para verificar se um campo está vazio. Para obter mais informações, consulte Operators.
Posso chamar o MaxCompute SQL a partir de um nó Shell no DataWorks?
Não. Os nós Shell suportam apenas sintaxe Shell padrão, e não sintaxe interativa. Para executar múltiplos jobs, use um nó ODPS SQL. Para obter mais informações, consulte Develop an ODPS SQL task.
Como implementar um loop em SQL?
Use um do-while node no DataWorks.
Como chamar um nó de atribuição em SQL?
Use um for-each node no DataWorks.
Como visualizar todas as instruções SQL executadas no MaxCompute em um dia específico?
Execute o comando show p -all -limit <number>; para visualizar o histórico de SQL de todos os membros em um projeto do MaxCompute. Para obter mais informações, consulte View instance information.
Como visualizar o uso de recursos de um job SQL?
Visualize o uso de recursos de um job SQL em sua fatura. Para obter mais informações, consulte Analyze the usage details in a MaxCompute bill.
Como visualizar o custo de execução de uma instrução SQL?
Use o comando cost sql para estimar os custos da consulta. Para obter mais informações, consulte Metering and estimation.
Meu job SQL está lento. Como otimizá-lo?
Use o Logview para identificar a causa da lentidão do job SQL. Para obter mais informações, consulte Logview-based diagnosis practices.
Para obter mais informações sobre otimização de jobs SQL, consulte Best practices for compute optimization.