Use o editor SQL integrado do EMR Serverless Spark para escrever e executar jobs Spark SQL interativamente. Após a execução, acesse a Spark UI para verificar o status, o uso de recursos e os logs.
Pré-requisitos
Antes de começar, verifique se você tem:
Um workspace. Consulte Crie um workspace.
Uma instância de sessão SQL. Consulte Gerencie sessões SQL.
Criar um job Spark SQL
O EMR Serverless Spark carrega os parâmetros do DLF Catalog durante a inicialização da SparkSession. Definir parâmetros relacionados ao Catalog, como spark.sql.catalog.dlf.warehouse, dinamicamente no código PySpark com spark.conf.set() não surte efeito. Para configurar esses parâmetros corretamente, especifique-os como parâmetros de inicialização ao enviar o job. Por exemplo, adicione spark.sql.catalog.dlf.warehouse=oss://your-bucket/warehouse-path na seção Configuration do console do EMR Serverless Spark ou use o parâmetro --conf na CLI.
-
Acesse a página de desenvolvimento.
Faça login no console do EMR.
No painel de navegação à esquerda, escolha EMR Serverless \> Spark.
Na página Spark, clique em nome do workspace desejado.
Na página EMR Serverless Spark, clique em Development no painel de navegação à esquerda.
-
Crie um job.
Na aba Development, clique em ícone
.Na caixa de diálogo, insira um Name, defina Type como SparkSQL e clique em OK.
No canto superior direito, selecione um catálogo de dados, um banco de dados e uma instância de sessão SQL em execução. Para criar uma nova instância de sessão SQL, selecione Connect to SQL Session na lista suspensa. Consulte Gerencie sessões SQL para mais detalhes.
-
Insira as instruções SQL no editor.
Exemplo 1: Operações SQL básicas
Crie um banco de dados, mude para ele, crie uma tabela, insira linhas e consulte os dados.
create DATABASE test_sql; use test_sql; CREATE TABLE IF NOT EXISTS my_table (id INT, name STRING); INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob'); SELECT * FROM my_table WHERE id > 1;Os resultados aparecem no painel de saída abaixo do editor.
#
id
name
1
2
Bob
Exemplo 2: Tabela externa baseada em CSV
Crie uma tabela externa baseada em um arquivo CSV no Object Storage Service (OSS) e execute uma consulta analítica. Substitua
oss://<bucketname>/user/pelo caminho real do seu bucket.-
Crie a tabela externa. Defina uma tabela chamada
orderscom os seguintes campos:order_id: ID do pedido.order_date: Timestamp do pedido, por exemplo,'2025-07-01 10:00:00'.order_category: Categoria do product, por exemplo,'Electronics'ou'Apparel'.order_revenue: Valor do pedido.
CREATE TABLE orders ( order_id STRING, -- Order ID order_date STRING, -- Order timestamp order_category STRING, -- Product category order_revenue DOUBLE -- Order amount ) USING CSV OPTIONS ( path 'oss://<bucketname>/user/', header 'true' ); -
Insira dados de teste.
INSERT OVERWRITE TABLE orders VALUES ('o1', '2025-07-01 10:00:00', 'Electronics', 5999.0), ('o2', '2025-07-02 11:30:00', 'Apparel', 299.0), ('o3', '2025-07-03 14:45:00', 'Electronics', 899.0), ('o4', '2025-07-04 09:15:00', 'Home Goods', 99.0), ('o5', '2025-07-05 16:20:00', 'Electronics', 1999.0), ('o6', '2025-07-06 08:00:00', 'Apparel', 199.0), ('o7', '2025-07-07 12:10:00', 'Electronics', 799.0), ('o8', '2025-07-08 18:30:00', 'Home Goods', 59.0), ('o9', '2025-07-09 20:00:00', 'Electronics', 399.0), ('o10', '2025-07-10 07:45:00', 'Apparel', 599.0), ('o11', '2025-07-11 09:00:00', 'Electronics', 1299.0), ('o12', '2025-07-12 13:20:00', 'Home Goods', 159.0), ('o13', '2025-07-13 17:15:00', 'Apparel', 499.0), ('o14', '2025-07-14 21:30:00', 'Electronics', 999.0), ('o15', '2025-07-15 06:10:00', 'Home Goods', 299.0); -
Execute uma consulta analítica. A consulta a seguir retorna o desempenho de vendas por categoria no período de 15 dias: contagem de pedidos, GMV total (Gross Merchandise Value), valor médio do pedido e hora do pedido mais recente. O resultado inclui apenas categorias com receita total acima de 1.000, ordenadas por GMV em ordem decrescente.
SELECT order_category, COUNT(order_id) AS order_count, SUM(order_revenue) AS gmv, AVG(order_revenue) AS avg_order_amount, MAX(order_date) AS latest_order_date FROM orders WHERE CAST(order_date AS TIMESTAMP) BETWEEN '2025-07-01' AND '2025-07-15' GROUP BY order_category HAVING SUM(order_revenue) > 1000 ORDER BY gmv DESC, order_category ASC;
Exemplo 3: Criar uma tabela Hive Parquet (DLF Format Table)
Por padrão, o EMR Serverless Spark usa Apache Paimon como formato de tabela. Para criar uma tabela Hive Parquet, substitua as configurações padrão nos parâmetros de inicialização do job.
Parâmetros de inicialização
Antes de criar uma tabela Hive Parquet, adicione os seguintes parâmetros de configuração do Spark para impedir que o catálogo Paimon intercepte a criação da tabela:
spark.sql.catalog.spark_catalog=org.apache.spark.sql.hive.HiveCatalog spark.sql.defaultFileFormat=parquetAdicione esses parâmetros na seção Configuration do console do EMR Serverless Spark ou use o parâmetro
--confna CLI.Método SQL
Use a sintaxe
CREATE TABLE ... USING PARQUETpara criar uma tabela Hive Parquet. Não useSTORED AS PARQUET.CREATE TABLE my_parquet_table ( id INT, name STRING, created_at TIMESTAMP ) USING PARQUET;Método da API DataFrame
Use
df.write.format("parquet").saveAsTable(...)para gravar dados como uma tabela Hive Parquet.df.write.format("parquet").saveAsTable("my_parquet_table")NotaSe o seu workspace estiver vinculado a um DLF Catalog, recomendamos criar tabelas usando sessões Spark ou instruções SQL para garantir consistência com o catálogo de metadados.
-
(Opcional) Clique em aba Version Information à direita para comparar versões. O editor destaca as diferenças no código SQL entre as versões.
-
Execute e publique o job.
Clique em Run. Os resultados aparecem na aba Execution Results. Se ocorrer um erro, verifique a aba Execution Issues. O painel de histórico de execução à direita mostra registros dos últimos três dias.
Após confirmar que o job foi executado corretamente, clique em Publish no canto superior direito.
Na caixa de diálogo Publish, insira as notas de versão e clique em OK.
Acessar a Spark UI
A Spark UI exibe o status de execução das tarefas, o uso de recursos e informações de log. Use essas informações para analisar e otimizar seus jobs Spark.
Acesso pelos resultados da execução
Este método requer as seguintes versões de engine ou posteriores: esr-4.2.0 (esr-4.x), esr-3.2.0 (esr-3.x) ou esr-2.6.0 (esr-2.x).
Após a execução da instrução SQL, clique em Spark UI na parte inferior da aba Execution Results.
Acesso pela instância de sessão
Após a execução da instrução SQL, localize a instância de sessão e escolha
\> Spark UI.
Atalhos de teclado
|
Função |
Windows |
Mac |
Descrição |
|
Executar script atual |
|
|
Executa todas as instruções SQL ou apenas a seleção destacada. Equivalente a clicar em Run. |
|
Formatar SQL |
|
|
Formata a estrutura SQL: padroniza recuos, quebras de linha e maiúsculas/minúsculas de palavras-chave. |
|
Localizar texto |
|
|
Busca palavras-chave no script atual. |
|
Salvar tarefa |
|
|
Salva o job atual não publicado para evitar perda de dados. |
Próximos passos
Agende a execução periódica do job criando um workflow. Consulte Crie um workflow. Para um exemplo completo de agendamento, consulte Quick start for Spark SQL development.
FAQ
É possível ultrapassar o limite de download de 10.000 linhas para resultados de consultas?
Não. O download de resultados de consultas no desenvolvimento de dados do EMR Serverless Spark está sujeito a um limite rígido da plataforma. Você pode baixar no máximo 10.000 linhas, e o tamanho total do arquivo não pode exceder 10 MB. Não é possível modificar esse limite via configuração.
Para exportar conjuntos de dados maiores, use um dos métodos a seguir:
Envie um job usando spark-submit e grave os resultados no Object Storage Service (OSS) ou no Hadoop Distributed File System (HDFS).
Use uma tarefa de sincronização offline no DataWorks para exportar os dados.
O EMR Serverless Spark fornece APIs públicas para o Spark History?
Sim. O EMR Serverless Spark disponibiliza APIs públicas. Para obter a lista completa de operações de API disponíveis, consulte API overview.