

# Trabalhar com visualizações do Hive
<a name="hive-views"></a>

Você pode usar o Athena para consultar visualizações existentes em seus metastores externos do Apache Hive. O Athena traduz as visualizações dinamicamente em tempo de execução sem alterar a visualização original ou armazenar a tradução.

Por exemplo, suponha que você tenha uma visualização do Hive que usa uma sintaxe semelhante a `LATERAL VIEW explode()`, não compatível com o Athena, como mostrado a seguir:

```
CREATE VIEW team_view AS 
SELECT team, score 
FROM matches 
LATERAL VIEW explode(scores) m AS score
```

O Athena traduz a string de consulta da visualização do Hive em uma instrução que o Athena pode executar, como esta:

```
SELECT team, score
FROM matches
CROSS JOIN UNNEST(scores) AS m (score)
```

Para obter informações sobre como conectar um metastore externo do Hive ao Athena, consulte [Usar um metastore externa do Hive](connect-to-data-source-hive.md).

## Considerações e limitações
<a name="hive-views-considerations-and-limitations"></a>

Ao consultar visualizações do Hive no Athena, considere os seguintes pontos:
+ O Athena não oferece suporte à criação de visualizações do Hive. Você pode criar visualizações do Hive no seu metastore externo do Hive, que pode então ser consultado usando o Athena.
+ O Athena não oferece suporte a UDFs personalizadas para visualizações do Hive.
+ Devido a um problema conhecido no console do Athena, as visualizações do Hive aparecem na lista de tabelas, e não na lista de visualizações.
+ Embora o processo de tradução seja automático, certas funções do Hive não são compatíveis com exibições do Hive ou exigem um tratamento especial. Para obter mais informações, consulte a seção a seguir:

## Limitações de suporte às funções do Hive
<a name="hive-views-function-limitations"></a>

Esta seção destaca as funções do Hive que não são compatíveis com visualizações do Hive no Athena ou que exigem um tratamento especial. Como o Athena atualmente oferece suporte principalmente a funções do Hive 2.2.0, funções disponíveis somente em versões superiores (como Hive 4.0.0) não são compatíveis. Para obter uma lista completa de funções do Hive, consulte o [manual de idioma de UDFs do Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Funções agregadas
<a name="hive-views-aggregate-functions"></a>

#### Funções agregadas que exigem tratamento especial
<a name="hive-views-aggregate-functions-special-handling"></a>

A função agregada a seguir para visualizações do Hive exige um tratamento especial.
+ **Avg**: em vez de `avg(INT i)`, use `avg(CAST(i AS DOUBLE))`.

#### Funções agregadas sem suporte
<a name="hive-views-aggregate-functions-not-supported"></a>

O Athena não oferece suporte às funções agregadas do Hive a seguir para visualizações do Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

O Athena não oferece suporte a funções de regressão como `regr_count`, `regr_r2` e `regr_sxx` para visualizações do Hive.

### Funções de data sem suporte
<a name="hive-views-date-functions-not-supported"></a>

O Athena não oferece suporte às funções de data do Hive a seguir para visualizações do Hive.

```
date_format(date/timestamp/string ts, string fmt)
day(string date)
dayofmonth(date)
extract(field FROM source)
hour(string date)
minute(string date)
month(string date)
quarter(date/timestamp/string)
second(string date)
weekofyear(string date)
year(string date)
```

### Funções de mascaramento sem suporte
<a name="hive-views-masking-functions-not-supported"></a>

O Athena não oferece suporte a funções de mascaramento do Hive como `mask()` e `mask_first_n()` para visualizações do Hive.

### Funções diversas
<a name="hive-views-miscellaneous-functions"></a>

#### Funções diversas que exigem tratamento especial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

As funções diversas para visualizações do Hive a seguir exigem tratamento especial.
+ **md5**: o Athena oferece suporte a `md5(binary)`, mas não a `md5(varchar)`.
+ **explode**: o Athena oferece suporte a `explode` quando usada com a seguinte sintaxe:

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **posexplode**: o Athena oferece suporte a `posexplode` quando usada com a seguinte sintaxe:

  ```
  LATERAL VIEW [OUTER] POSEXPLODE(<argument>)           
  ```

  Na saída `(pos, val)`, o Athena trata a coluna `pos` como `BIGINT`. Por isso, poderá ser necessário converter a coluna `pos` em `BIGINT` para evitar uma visualização obsoleta. O exemplo a seguir ilustra essa técnica.

  ```
  SELECT CAST(c AS BIGINT) AS c_bigint, d 
  FROM table LATERAL VIEW POSEXPLODE(<argument>) t AS c, d
  ```

#### Funções diversas sem suporte
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

O Athena não oferece suporte às funções do Hive a seguir para visualizações do Hive.

```
aes_decrypt
aes_encrypt
current_database
current_user
inline
java_method
logged_in_user
reflect
sha/sha1/sha2
stack
version
```

### Operadores
<a name="hive-views-operators"></a>

#### Operadores que exigem tratamento especial
<a name="hive-views-operators-special-handling"></a>

Os operadores para visualizações do Hive a seguir exigem tratamento especial.
+ **Operador de módulo (%)**: como o tipo `DOUBLE` implicitamente converte em `DECIMAL(x,y)`, a sintaxe a seguir pode gerar uma mensagem de erro View is stale (Visualização obsoleta):

  ```
  a_double % 1.0 AS column
  ```

  Para contornar esse problema, use `CAST`, como no exemplo a seguir.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Operador de divisão (/)**: no Hive , `int` dividido por `int` gera um `double`. No Athena, a mesma operação gera um truncado `int`.

#### Operadores sem suporte
<a name="hive-views-operators-not-supported"></a>

O Athena não oferece suporte aos operadores a seguir para visualizações do Hive.

**\$1A**: bitwise `NOT`

**A ^ b**: bitwise `XOR`

**A & b**: bitwise `AND`

**A \$1 b**: bitwise `OR`

**A <=> b**: retorna o mesmo resultado que o operador igual a (`=`) para operandos não nulos. Retornará `TRUE` se ambos forem `NULL`, ou `FALSE` se um deles for `NULL`.

### Funções de string
<a name="hive-views-string-functions"></a>

#### Funções de string que exigem tratamento especial
<a name="hive-views-string-functions-special-handling"></a>

As funções de string para visualizações do Hive a seguir exigem tratamento especial.
+ **chr(bigint\$1double a)**: o Hive permite argumentos negativos; o Athena não.
+ **instr(string str, string substr)**: como o mapeamento do Athena para a função `instr` retorna `BIGINT` em vez de `INT`, use a seguinte sintaxe:

  ```
  CAST(instr(string str, string substr) as INT)         
  ```

  Sem essa etapa, a visualização será considerada obsoleta.
+ **length(string a)**: como o mapeamento do Athena para a função `length` retorna `BIGINT` em vez de `INT`, use a seguinte sintaxe para que a visualização não seja considerada obsoleta:

  ```
  CAST(length(string str) as INT)
  ```

#### Funções de string sem suporte
<a name="hive-views-string-functions-not-supported"></a>

O Athena não oferece suporte às funções de string do Hive a seguir para visualizações do Hive.

```
ascii(string str)
character_length(string str)
decode(binary bin, string charset)
encode(string src, string charset)
elt(N int,str1 string,str2 string,str3 string,...)
field(val T,val1 T,val2 T,val3 T,...)
find_in_set(string str, string strList)
initcap(string A)
levenshtein(string A, string B)
locate(string substr, string str[, int pos])
octet_length(string str)
parse_url(string urlString, string partToExtract [, string keyToExtract])
printf(String format, Obj... args)
quote(String text)
regexp_extract(string subject, string pattern, int index)
repeat(string str, int n)
sentences(string str, string lang, string locale)
soundex(string A)
space(int n)
str_to_map(text[, delimiter1, delimiter2])
substring_index(string A, string delim, int count)
```

### Funções XPath sem suporte
<a name="hive-views-xpath-functions-not-supported"></a>

O Athena não oferece suporte a funções XPath do Hive como `xpath`, `xpath_short` e `xpath_int` para visualizações do Hive.

## Solução de problemas
<a name="hive-views-troubleshooting"></a>

Ao usar visualizações do Hive no Athena, você poderá encontrar os seguintes problemas:
+ **View *<view name>* is stale** (A visualização <nome da visualização> está obsoleta): esta mensagem geralmente indica uma não correspondência de tipo entre a visualização no Hive e no Athena. Se a mesma função no [manual de idioma de UDFs do Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) e na documentação sobre [funções e operadores do Presto](https://prestodb.io/docs/current/functions.html) tiver assinaturas diferentes, tente converter o tipo de dado sem correspondência.
+ **Function not registered** (Função não registrada): o Athena atualmente não oferece suporte à função. Para obter mais informações, consulte as seções anteriores neste documento.