

# Usar comandos mágicos
<a name="notebooks-spark-magics"></a>

Comandos mágicos, ou mágicas, correspondem a comandos especiais que você pode executar em uma célula do caderno. Por exemplo, `%env` apresenta as variáveis de ambiente em uma sessão do caderno. O Athena oferece suporte para as funções mágicas no IPython 6.0.3. 

Esta seção apresenta alguns dos principais comandos magic no Athena para Apache Spark.
+  Para visualizar uma lista de comandos magic no Athena, execute o comando **%lsmagic** em uma célula de caderno. 
+ Para obter informações sobre como usar magic para criar grafos em cadernos do Athena, consulte [Usar mágica para criar gráficos de dados](notebooks-spark-magics-graphs.md).
+ Para obter informações sobre outros comandos magic, consulte [Comandos magic integrados](https://ipython.readthedocs.io/en/stable/interactive/magics.html) na documentação do IPython.

**nota**  
Atualmente, o comando `%pip` apresenta falhas quando é executado. Esse é um problema conhecido. 

**Topics**
+ [Magics de células](notebooks-spark-magics-cell-magics.md)
+ [Magics de linha](notebooks-spark-magics-line-magics.md)
+ [Magics de grafos](notebooks-spark-magics-graphs.md)

# Usar mágica de célula
<a name="notebooks-spark-magics-cell-magics"></a>

Mágicas que são gravadas em diversas linhas são precedidas por um sinal de porcentagem duplo (`%%`) e são chamadas de funções mágicas de células ou mágicas de células.

## %%sql
<a name="notebooks-spark-magics-sql"></a>

O magic de células permite executar instruções SQL diretamente sem precisar decorá-las com a instrução SQL do Spark. O comando também exibe a saída chamando implicitamente `.show()` no quadro de dados retornado.

![\[Usar o %%sql.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-1.png)


O comando `%%sql` trunca automaticamente as saídas da coluna para uma largura de 20 caracteres. Essa definição não é configurável no momento. Para contornar essa limitação, use a sintaxe completa a seguir e modifique os parâmetros do método `show` adequadamente. 

```
spark.sql("""YOUR_SQL""").show(n=number, truncate=number, vertical=bool)
```
+ **n** `int`, opcional. O número de linhas a serem exibidas.
+ **truncar**: `bool` ou `int`, opcional. Se `true`, trunca strings com mais de 20 caracteres. Quando definido como um número maior que 1, trunca strings de caracteres longas até o comprimento especificado e alinha as células à direita.
+ **vertical**: `bool`, opcional. Se `true`, imprime as linhas de saída verticalmente (uma linha por valor de coluna).

# Usar mágica de linha
<a name="notebooks-spark-magics-line-magics"></a>

Mágicas que estão em uma única linha são precedidas por um sinal de porcentagem (`%`) e são chamadas de funções mágicas de linha ou mágicas de linha.

## %help
<a name="notebooks-spark-magics-help"></a>

Exibe descrições dos comandos magic disponíveis.

![\[Usar o %help.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-2.png)


## %list\$1sessions
<a name="notebooks-spark-magics-list_sessions"></a>

Lista as sessões associadas ao caderno. As informações de cada sessão incluem o ID da sessão, o status da sessão e a data e hora em que a sessão iniciou e terminou.

![\[Usar o %list_sessions.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-3.png)


## %session\$1id
<a name="notebooks-spark-magics-session_id"></a>

Recupera o ID da sessão atual.

![\[Usar o session_id.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-4.png)


## %set\$1log\$1level
<a name="notebooks-spark-magics-set_log_level"></a>

Define ou redefine o logger para usar o nível de log especificado. Os valores possíveis são `DEBUG`, `ERROR`, `FATAL`,`INFO` e `WARN` ou `WARNING`. Os valores devem estar em letras maiúsculas e não devem estar delimitados entre aspas simples ou duplas.

![\[Usar o %set_log_level.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-5.png)


## %status
<a name="notebooks-spark-magics-status"></a>

Descreve a sessão atual. A saída inclui o ID da sessão, o estado da sessão, o nome do grupo de trabalho, a versão do mecanismo PySpark e a hora de início da sessão. Esse comando magic requer uma sessão ativa para recuperar os detalhes da sessão.

Os seguintes valores de status são possíveis:

**CREATING**: a sessão está sendo iniciada, incluindo a aquisição de recursos.

**CREATED**: a sessão foi iniciada.

**IDLE**: a sessão pode aceitar um cálculo.

**BUSY**: a sessão está processando outra tarefa e não pode aceitar um cálculo.

**TERMINATING**: a sessão está no processo de desligamento.

**TERMINATED**: a sessão e os respectivos recursos não estão mais em execução.

**DEGRADED**: a sessão não tem coordenadores íntegros.

**FAILED**: devido a uma falha, a sessão e os respectivos recursos não estão mais em execução.

![\[Usar o %status.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-6.png)


# Usar mágica para criar gráficos de dados
<a name="notebooks-spark-magics-graphs"></a>

Os magics de linha desta seção são especializados em renderizar dados para tipos específicos de dados ou em conjunto com bibliotecas de grafos.

## %table
<a name="notebooks-spark-magics-graphs-table"></a>

Use o comando magic `%table` para exibir dados do quadro de dados em formato de tabela.

O exemplo a seguir cria um quadro de dados com duas colunas e três linhas de dados e exibe os dados em formato de tabela.

![\[Usar o comando magic %table.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-graphs-1.png)


## %matplot
<a name="notebooks-spark-magics-graphs-matplot"></a>

[Matplotlib](https://matplotlib.org/) é uma biblioteca completa para criar visualizações estáticas, animadas e interativas em Python. Você pode usar o comando magic `%matplot` para criar um grafo depois de importar a biblioteca matplotlib para uma célula do caderno.

O exemplo a seguir importa a biblioteca matplotlib, cria um conjunto de coordenadas x e y e usa o comando magic `%matplot` para criar um grafo dos pontos.

```
import matplotlib.pyplot as plt 
x=[3,4,5,6,7,8,9,10,11,12] 
y= [9,16,25,36,49,64,81,100,121,144] 
plt.plot(x,y) 
%matplot plt
```

![\[Usar o comando magic %matplot.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-graphs-2.png)


### Usar as bibliotecas matplotlib e seaborn juntas
<a name="notebooks-spark-magics-graphs-using-the-matplotlib-and-seaborn-libraries-together"></a>

[Seaborn](https://seaborn.pydata.org/tutorial/introduction) é uma biblioteca para criação de gráficos estatísticos em Python. Baseia-se no matplotlib e integra-se estreitamente às estruturas de dados [pandas](https://pandas.pydata.org/) (análise de dados Python). Também é possível usar o comando magic `%matplot` para renderizar dados seaborn.

O exemplo a seguir usa as bibliotecas matplotlib e seaborn para criar um grafo de barras simples.

```
import matplotlib.pyplot as plt 
import seaborn as sns 

x = ['A', 'B', 'C'] 
y = [1, 5, 3] 

sns.barplot(x, y) 
%matplot plt
```

![\[Usar %matplot para renderizar dados seaborn.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-graphs-3.png)


## %plotly
<a name="notebooks-spark-magics-graphs-plotly"></a>

[Plotly](https://plotly.com/python/) é uma biblioteca de grafos de código aberto para Python que você pode usar para criar grafos interativos. Use o comando magic `%ploty` para renderizar dados ploty.

O exemplo a seguir usa as bibliotecas [StringIO](https://docs.python.org/3.13/library/io.html#io.StringIO), plotly e pandas em dados de preços de ações para criar um grafo da atividade de ações de fevereiro e março de 2015.

```
from io import StringIO 
csvString = """ 
Date,AAPL.Open,AAPL.High,AAPL.Low,AAPL.Close,AAPL.Volume,AAPL.Adjusted,dn,mavg,up,direction 
2015-02-17,127.489998,128.880005,126.919998,127.830002,63152400,122.905254,106.7410523,117.9276669,129.1142814,Increasing 
2015-02-18,127.629997,128.779999,127.449997,128.720001,44891700,123.760965,107.842423,118.9403335,130.0382439,Increasing 
2015-02-19,128.479996,129.029999,128.330002,128.449997,37362400,123.501363,108.8942449,119.8891668,130.8840887,Decreasing 
2015-02-20,128.619995,129.5,128.050003,129.5,48948400,124.510914,109.7854494,120.7635001,131.7415509,Increasing 
2015-02-23,130.020004,133,129.660004,133,70974100,127.876074,110.3725162,121.7201668,133.0678174,Increasing 
2015-02-24,132.940002,133.600006,131.169998,132.169998,69228100,127.078049,111.0948689,122.6648335,134.2347981,Decreasing 
2015-02-25,131.559998,131.600006,128.149994,128.789993,74711700,123.828261,113.2119183,123.6296667,134.0474151,Decreasing 
2015-02-26,128.789993,130.869995,126.610001,130.419998,91287500,125.395469,114.1652991,124.2823333,134.3993674,Increasing 
2015-02-27,130,130.570007,128.240005,128.460007,62014800,123.510987,114.9668484,124.8426669,134.7184854,Decreasing 
2015-03-02,129.25,130.279999,128.300003,129.089996,48096700,124.116706,115.8770904,125.4036668,134.9302432,Decreasing 
2015-03-03,128.960007,129.520004,128.089996,129.360001,37816300,124.376308,116.9535132,125.9551669,134.9568205,Increasing 
2015-03-04,129.100006,129.559998,128.320007,128.539993,31666300,123.587892,118.0874253,126.4730002,134.8585751,Decreasing 
2015-03-05,128.580002,128.75,125.760002,126.410004,56517100,121.539962,119.1048311,126.848667,134.5925029,Decreasing 
2015-03-06,128.399994,129.369995,126.260002,126.599998,72842100,121.722637,120.190797,127.2288335,134.26687,Decreasing 
2015-03-09,127.959999,129.570007,125.059998,127.139999,88528500,122.241834,121.6289771,127.631167,133.6333568,Decreasing 
2015-03-10,126.410004,127.220001,123.800003,124.510002,68856600,119.71316,123.1164763,127.9235004,132.7305246,Decreasing 
""" 
csvStringIO = StringIO(csvString) 
 
from io import StringIO 
import plotly.graph_objects as go 
import pandas as pd 
from datetime import datetime 
df = pd.read_csv(csvStringIO) 
fig = go.Figure(data=[go.Candlestick(x=df['Date'], 
open=df['AAPL.Open'], 
high=df['AAPL.High'], 
low=df['AAPL.Low'], 
close=df['AAPL.Close'])]) 
%plotly fig
```

![\[Usar o comando magic %ploty.\]](http://docs.aws.amazon.com/pt_br/athena/latest/ug/images/notebooks-spark-magics-graphs-4.png)
