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 requer a habilitação dos tipos de dados do MaxCompute V2.0. Para obter mais informações, consulte Versões de tipos de dados 2.0.
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 habilitar o suporte aos tipos de dados do MaxCompute V2.0. A precisão máxima do tipo de dados DECIMAL no MaxCompute é de 38 dígitos. Armazenar dados com a precisão máxima aumenta a probabilidade de erros de estouro durante o processamento. Use uma precisão menor quando possível.
Projetos recém-criados do MaxCompute não suportam conversão implícita de tipos de dados. Como posso 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 Conversão de tipos de dados.
Quando consulto dados, aparece uma mensagem de erro informando que 'o tipo XXX não está habilitado no modo atual'. Como resolvo isso?
Execute o comando set odps.sql.decimal.odps2=true; no nível da sessão para habilitar 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 de acordo com as necessidades do seu 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:
Armazene os 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.
Quando executo uma instrução SQL do MaxCompute, aparece uma mensagem de erro informando que 'partitions exceeds the specified limit'. Como resolvo isso?
Sintoma
Ao executar uma instrução SQL do MaxCompute, a seguinte mensagem de erro é retornada.
FAILED: ODPS-0010000:System internal error - OTS filtering exception - Ots read range partitions exceeds the specified limit:10000: tableName:xxxx , please check hive conf keyCausa
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: Você não especificou uma condição de partição.
Motivo 2: Você usou um campo como ID de usuário como campo de partição, o que resultou em partições excessivas.
Solução
Solução para o Motivo 1: Se você não especificou uma condição de partição, adicione uma.
Solução para o Motivo 2: Se a coluna de chave de partição não for adequada e causar partições excessivas, considere alterar a coluna de chave de partição.
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 `filename` deve ser
SQLpara indicar o modo SQL.SQL select ... from table_name where xxx;Para executar uma única instrução SQL, use o método
sqltextno SQL do MaxCompute../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 cliente do MaxCompute.
insert into project.table select * from project_dev.table;Se você não tiver 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 Permissões do MaxCompute.
Como verificar se um campo está vazio?
Use operadores no SQL do MaxCompute para verificar se um campo está vazio. Para obter mais informações, consulte Operadores.
Posso chamar o SQL do MaxCompute a partir de um nó Shell no DataWorks?
Não. Os nós Shell suportam apenas a sintaxe padrão do Shell, não a sintaxe interativa. Para executar vários jobs, use um nó ODPS SQL. Para obter mais informações, consulte Desenvolver uma tarefa ODPS SQL.
Como implementar um loop em SQL?
Use um nó do-while no DataWorks.
Como chamar um nó de atribuição em SQL?
Use um nó for-each 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 Visualizar informações da instância.
Como visualizar o uso de recursos de um job SQL?
Visualize o uso de recursos de um job SQL na sua fatura. Para obter mais informações, consulte Analisar os detalhes de uso em uma fatura do MaxCompute.
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 Medição e estimativa.
Meu job SQL está lento. Como posso otimizá-lo?
Use o Logview para identificar a causa de um job SQL lento. Para obter mais informações, consulte Práticas de diagnóstico baseadas no Logview.
Para obter mais informações sobre a otimização de jobs SQL, consulte Práticas recomendadas para otimização de computação.