Uma tarefa MaxCompute SQL usa sintaxe semelhante à SQL para processar dados em grande escala (nível de TB) de forma distribuída quando não há necessidade de resultados em tempo real. Este tópico descreve como desenvolver uma tarefa SQL no DataWorks e apresenta notas importantes de uso.
Introdução
A ODPS SQL processa e consulta dados no MaxCompute. Ela oferece suporte a operações SQL comuns, como SELECT, INSERT, UPDATE e DELETE, além de sintaxes e funções específicas do MaxCompute. Com a ODPS SQL, você escreve instruções semelhantes a SQL para consultar e processar dados sem precisar criar lógicas complexas de processamento. Para obter mais informações sobre a sintaxe SQL, consulte SQL Overview.
Limitações
Os nós ODPS SQL no DataWorks apresentam as seguintes limitações:
Categoria | Descrição |
Uso de comentários | O sistema aceita apenas comentários de linha única no formato Para obter mais informações, consulte MaxCompute SQL comments. As seguintes restrições também se aplicam aos comentários:
|
Envio de SQL | Não use instruções SET ou USE isoladamente; execute-as sempre acompanhadas de outras instruções SQL. Ao usar a instrução |
Desenvolvimento SQL | O tamanho do código SQL não pode exceder 128 KB, e a quantidade de instruções SQL está limitada a 200. |
Resultado da consulta | Somente instruções SQL iniciadas com SELECT ou WITH retornam um conjunto de resultados formatado. Os resultados de consultas estão sujeitos às seguintes limitações:
Nota Diante dessas limitações, baixe o resultado da consulta para visualização local usando um dos métodos abaixo:
|
Notas de uso
Verifique se a conta usada para executar a tarefa ODPS SQL tem as permissões necessárias no projeto MaxCompute correspondente. Para mais detalhes, consulte DataWorks On MaxCompute permission control e MaxCompute permissions.
Tarefas MaxCompute SQL exigem recursos de cota para execução. Se uma tarefa demorar muito para rodar, acesse o console do MaxCompute para verificar o consumo de cotas e garantir que haja recursos suficientes disponíveis. Consulte Computing Resources - Quota Management para mais informações.
Ao desenvolver tarefas em um nó ODPS SQL, envolva parâmetros especiais, como endereços OSS, entre aspas duplas ("). A ausência das aspas causa erros de análise e falha na tarefa.
Em situações extremas, como quedas de energia ou failover entre primário e secundário, o DataWorks pode não conseguir encerrar completamente as tarefas relacionadas no MaxCompute. Nesse cenário, acesse o projeto MaxCompute correspondente para terminate the job.
-
A ordem de execução das instruções de palavra-chave (SET e USE) varia conforme o ambiente do DataWorks.
No DataStudio: Todas as instruções de palavra-chave (SET e USE) são agrupadas e executadas antes das demais instruções SQL.
No ambiente de agendamento: As instruções seguem a ordem em que foram escritas.
Considere o seguinte código definido em um nó.
SET a=b; CREATE TABLE name1(id string); SET c=d; CREATE TABLE name2(id string);A tabela a seguir detalha a ordem de execução nos diferentes ambientes.
SQL executado
DataStudio
Ambiente de agendamento
Primeira instrução SQL
SET a=b; SET c=d; CREATE TABLE name1(id string);SET a=b; CREATE TABLE name1(id string);Segunda instrução SQL
SET a=b; SET c=d; CREATE TABLE name2(id string);SET c=d; CREATE TABLE name2(id string);
Editar código: Exemplos simples
Comandos SQL
Os comandos MaxCompute SQL usam sintaxe similar à SQL padrão e aceitam instruções DDL, DML e DQL, além de sintaxes específicas do MaxCompute. Consulte SQL overview para ver requisitos de sintaxe e exemplos de uso de cada comando. O exemplo simples abaixo demonstra como desenvolver e executar comandos SQL.
Para usar novos tipos de dados com as funções estendidas do MaxCompute 2.0, adicione
SET odps.sql.type.system.odps2=true;antes da instrução SQL e envie ambos juntos. Isso habilita o uso dos novos tipos de dados. Veja mais em 2.0 Data Types Version.O DataWorks disponibiliza parâmetros de agendamento para permitir passagem dinâmica de valores em cenários agendados. Defina variáveis no código do seu nó ODPS SQL usando o formato ${variable_name} e atribua valores na seção Properties > Parameter. Consulte Supported formats for scheduling parameters para conhecer os formatos suportados.
-
Criar uma tabela
Use a instrução
CREATE TABLEpara criar tabelas não particionadas, particionadas, externas ou clusterizadas. Consulte CREATE TABLE para mais detalhes. Exemplo de instrução SQL:-- Create a partitioned table named test1. CREATE TABLE if NOT EXISTS students ( id BIGINT, name STRING, age BIGINT, birth DATE) partitioned BY (gender STRING); -
Inserir dados
Use a instrução
INSERT INTOouINSERT OVERWRITEpara inserir ou atualizar dados em uma tabela de destino. Veja Insert or overwrite data (INSERT INTO | INSERT OVERWRITE) para mais informações. Exemplos de instruções SQL:-- Insert data. INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ; INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ; INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;ImportanteEvite usar a instrução
INSERT INTOpara inserir dados, pois isso pode causar duplicação acidental. Recomendamos o uso da instruçãoINSERT OVERWRITEcomo alternativa. Consulte Insert or overwrite data para saber mais. -
Consultar dados
A instrução
SELECTpermite realizar operações como consultas aninhadas, agrupamentos e ordenação. Para mais detalhes, veja SELECT syntax. Exemplos de instruções SQL:-- (Optional) Enable full table scan at the project level. This operation requires high-level permissions. -- SETPROJECT odps.sql.allow.fullscan=true; -- Enable full table scan at the session level. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; -- Query the information about all boys and sort the results by ID in ascending order. SELECT * FROM students WHERE gender='boy' ORDER BY id;NotaPor padrão, usuários RAM não têm permissão de consulta em tabelas de produção. Para consultar essas tabelas, envie uma solicitação no Security Center. Consulte MaxCompute data permission control details para entender as predefinições de permissões de dados do MaxCompute e o controle de acesso no DataWorks. Para conceder permissões via comandos no MaxCompute, veja Manage user permissions by using commands.
Funções SQL
O MaxCompute oferece funções integradas e funções definidas pelo usuário (UDFs) para desenvolvimento e análise de dados. Consulte Overview of built-in functions para saber mais sobre funções integradas e MaxCompute UDF overview para UDFs. O exemplo abaixo ilustra o uso de funções SQL.
-
Funções integradas: Já vêm pré-instaladas no MaxCompute e podem ser chamadas diretamente. Seguindo o exemplo anterior, use a função
dateaddpara modificar a coluna birth conforme unidade e intervalo especificados. Exemplo de comando:-- Enable full table scan at the session level. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students; Funções definidas pelo usuário (UDFs): Para usar uma UDF, escreva o código da função, faça upload dele como resource e registre a função. Consulte Create and use a UDF para mais detalhes.
Execução e resultados
-
Os resultados da execução aparecem diretamente em formato de planilha. É possível interagir com os dados no DataWorks, abri-los como planilha ou copiar e colar o conteúdo em um arquivo Excel local. Consulte Debug tasks para mais informações.
NotaDevido a um ajuste nas informações de fuso horário da china publicado pela Organização Internacional de Normalização (ISO), pode haver discrepância na exibição de datas ao executar consultas SQL relevantes no DataWorks. A diferença é de 5 minutos e 52 segundos para datas entre 1900 e 1928, e de 9 segundos para datas anteriores a 1900.
Log de execução: Clique em na aba Operational Logs para visualizar o Logview. Consulte View job information by using Logview V2.0 para mais detalhes.
-
Resultados retornados:
-
Consulte as informações de todos os meninos e ordene os resultados por ID em ordem crescente.
+------------+------------+------------+------------+------------+ | id | name | age | birth | gender | +------------+------------+------------+------------+------------+ | 1 | John | 15 | 2008-05-15 | boy | | 2 | Jack | 17 | 2006-07-20 | boy | | 5 | Bob | 17 | 2006-09-12 | boy | +------------+------------+------------+------------+------------+ -
Modifique a coluna birth conforme unidade e intervalo especificados.
+------------+------------+------------+------------+---------------+ | id | name | age | birth | birth_dateadd | +------------+------------+------------+------------+---------------+ | 4 | Lily | 21 | 2002-01-08 | 2002-02-08 | | 3 | Alice | 20 | 2003-04-20 | 2003-05-20 | | 2 | Jack | 17 | 2006-07-20 | 2006-08-20 | | 1 | John | 15 | 2008-05-15 | 2008-06-15 | | 5 | Bob | 17 | 2006-09-12 | 2006-10-12 | +------------+------------+------------+------------+---------------+
Na página de resultados da consulta, ordene os dados por um campo específico e baixe o resultado. Consulte Process query results para mais informações.
-
Editar código: Exemplos avançados
Para exemplos mais avançados de tarefas ODPS SQL, consulte os tópicos a seguir:
Perguntas frequentes
-
P: Por que minha tarefa ODPS SQL fica muito tempo no estado de espera?
R: Tarefas ODPS SQL precisam de recursos de cota para serem executadas. Se a tarefa permanecer em espera por muito tempo, acesse o console do MaxCompute para verificar o consumo de cotas e assegurar que existem recursos suficientes disponíveis. Consulte Computing Resources - Quota Management para mais detalhes.
-
P: Por que a mensagem de erro "You have No privilege 'odps:xxxx' on xxxx" aparece ao executar uma tarefa ODPS SQL?
R: A conta usada para rodar a tarefa ODPS SQL precisa ter as permissões adequadas no projeto MaxCompute correspondente. Consulte MaxCompute permissions para mais informações.