Uma tarefa MaxCompute SQL usa sintaxe semelhante à SQL para processar dados distribuídos em grande escala (nível de TB) quando resultados em tempo real não são necessários. 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 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 têm as seguintes limitações:
|
Categoria |
Descrição |
|
Uso de comentários |
Há suporte apenas para 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 com outras instruções SQL. |
|
Desenvolvimento SQL |
O tamanho do código SQL não pode exceder 128 KB, e o número de instruções SQL não pode ultrapassar 200. |
|
Resultado da consulta |
Apenas instruções SQL iniciadas com SELECT ou WITH retornam um conjunto de resultados formatado. O resultado da consulta está sujeito às seguintes limitações:
Nota
Ao encontrar essas limitações, baixe o resultado da consulta para visualização local usando um dos métodos a seguir:
|
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 obter 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 ser executada, acesse o console do MaxCompute para verificar o consumo de cota e garantir que haja recursos suficientes disponíveis. Para obter mais informações, consulte Computing Resources - Quota Management.
Ao desenvolver uma tarefa em um nó ODPS SQL, coloque parâmetros especiais, como endereços OSS, entre aspas duplas ("). Caso contrário, ocorrerá um erro de análise e a tarefa falhará.
Em situações extremas, como falta de energia no servidor ou failover primário/secundário, o DataWorks pode não conseguir encerrar completamente as tarefas relacionadas no MaxCompute. Nesse caso, 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 descreve 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 oferecem suporte a instruções DDL, DML e DQL, além de sintaxes específicas do MaxCompute. Para obter mais informações sobre requisitos de sintaxe e exemplos de uso de cada comando SQL, consulte Overview of MaxCompute SQL. O exemplo simples a seguir demonstra como desenvolver e executar comandos SQL.
Ao usar novos tipos de dados com funções estendidas do MaxCompute 2.0, adicione
SET odps.sql.type.system.odps2=true;antes da instrução SQL e envie-os juntos para habilitar o uso dos novos tipos de dados. Para obter mais detalhes, consulte 2.0 Data Types Version.O DataWorks oferece parâmetros de agendamento para permitir passagem dinâmica de parâmetros 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. Para obter mais informações sobre formatos suportados para parâmetros de agendamento, consulte Supported formats for scheduling parameters.
-
Criar uma tabela
Use a instrução
CREATE TABLEpara criar tabelas não particionadas, particionadas, externas ou clusterizadas. Para obter mais informações, consulte CREATE TABLE. 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. Para obter mais detalhes, consulte Insert or overwrite data (INSERT INTO | INSERT OVERWRITE). 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 OVERWRITEem seu lugar. Para obter mais informações, consulte Insert or overwrite data. -
Consultar dados
A instrução
SELECTpermite realizar operações como consultas aninhadas, agrupamentos e ordenação. Para obter mais detalhes, consulte 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ões de consulta em tabelas de produção. Para consultar tabelas de produção, envie uma solicitação no Security Center. Para obter informações sobre predefinições de permissão de dados do MaxCompute e controle de acesso no DataWorks, consulte MaxCompute data permission control details. Para saber como conceder permissões via comandos no MaxCompute, consulte Manage user permissions by using commands.
Funções SQL
O MaxCompute oferece suporte a funções integradas e funções definidas pelo usuário (UDFs) para desenvolvimento e análise de dados. Para obter mais informações sobre funções integradas, consulte Overview of built-in functions. Para obter detalhes sobre UDFs, consulte MaxCompute UDF overview. O exemplo a seguir mostra como usar funções SQL.
-
Funções integradas: Estas funções vêm pré-instaladas no MaxCompute e podem ser chamadas diretamente. Com base no exemplo anterior, use a função
dateaddpara modificar a coluna birth por uma unidade e intervalo específicos. 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. Para obter mais informações, consulte Create and use a UDF.
Execução e resultados
-
Os resultados da execução aparecem diretamente em formato de planilha. Realize operações no DataWorks para abrir os resultados em uma planilha ou copie e cole o conteúdo em um arquivo Excel local. Para obter mais informações, consulte Debug tasks.
NotaDevido a um ajuste nas informações de fuso horário da china divulgado pela Organização Internacional de Normalização (ISO), pode haver discrepância temporal 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. Para obter mais detalhes, consulte View job information by using Logview V2.0.
-
Resultados retornados:
-
Consulta das informações de todos os meninos com resultados ordenados 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 | +------------+------------+------------+------------+------------+ -
Modificação da coluna birth por uma unidade e intervalo específicos.
+------------+------------+------------+------------+---------------+ | 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 os resultados. Para obter mais informações, consulte Process query results.
-
Editar código: Exemplos avançados
Para exemplos mais avançados de tarefas ODPS SQL, consulte os seguintes tópicos:
Perguntas frequentes
-
P: Por que minha tarefa ODPS SQL permanece no estado de espera por muito tempo?
R: Tarefas ODPS SQL necessitam de recursos de cota para execução. Se sua tarefa ficar aguardando por longo período, acesse o console do MaxCompute para verificar o consumo de cota e assegurar que existem recursos suficientes disponíveis. Para obter mais informações, consulte Computing Resources - Quota Management.
-
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 utilizada para executar a tarefa ODPS SQL precisa ter as permissões adequadas no projeto MaxCompute correspondente. Para obter mais detalhes, consulte MaxCompute permissions.