

# Trabajo con vistas de Hive
<a name="hive-views"></a>

Puede utilizar Athena para consultar las vistas existentes en los almacenes de metadatos de Apache Hive externos. Athena traduce las vistas sobre la marcha en tiempo de ejecución sin cambiar la vista original ni almacenar la traducción.

Suponga, por ejemplo, que tiene una vista de Hive como la siguiente que utiliza una sintaxis no admitida en Athena como `LATERAL VIEW explode()`:

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

Athena traduce la cadena de consulta de vista de Hive en una instrucción como la siguiente que Athena puede ejecutar:

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

Para obtener información sobre cómo conectar un almacén de metadatos de Hive externo a Athena, consulte [Uso de un metastore de Hive externo](connect-to-data-source-hive.md).

## Consideraciones y limitaciones
<a name="hive-views-considerations-and-limitations"></a>

Cuando consulte las vistas de Hive desde Athena, tenga en cuenta los siguientes puntos:
+ Athena no admite la creación de vistas de Hive. Puede crear vistas de Hive en su almacén de metadatos de Hive externo, que luego puede consultar desde Athena.
+ Athena no admite las UDF personalizadas para las vistas de Hive.
+ Debido a un problema conocido en la consola de Athena, las vistas de Hive aparecen debajo de la lista de tablas en lugar de la lista de vistas.
+ Aunque el proceso de traducción es automático, algunas funciones de Hive no son compatibles con las vistas de Hive ni requieren un manejo especial. Para más información, consulte la siguiente sección.

## Limitaciones de compatibilidad de las funciones de Hive
<a name="hive-views-function-limitations"></a>

En esta sección, se destacan las funciones de Hive que Athena no admite para las vistas de Hive o que requieren un tratamiento especial. Actualmente, dado que Athena admite principalmente funciones de Hive 2.2.0, las funciones que están disponibles solo en versiones superiores (como Hive 4.0.0) no están disponibles. Para obtener una lista completa de las funciones de Hive, consulte el [UDF manual del lenguaje Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Funciones de agregación
<a name="hive-views-aggregate-functions"></a>

#### Funciones de agregación que requieren un manejo especial
<a name="hive-views-aggregate-functions-special-handling"></a>

La siguiente función de agregación para las vistas de Hive requiere un manejo especial.
+ **Avg**: en lugar de `avg(INT i)`, utilice `avg(CAST(i AS DOUBLE))`.

#### Funciones de agregación no admitidas
<a name="hive-views-aggregate-functions-not-supported"></a>

Las siguientes funciones de agregación de Hive no se admiten en Athena para las vistas de Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

Las funciones de regresión como `regr_count`, `regr_r2` y `regr_sxx` no se admiten en las vistas de Athena para Hive.

### Funciones de fecha no admitidas
<a name="hive-views-date-functions-not-supported"></a>

Las siguientes funciones de fecha de Hive no se admiten en Athena para las vistas de 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)
```

### Funciones de enmascaramiento no admitidas
<a name="hive-views-masking-functions-not-supported"></a>

Las funciones de enmascaramiento de Hive, como `mask()` y `mask_first_n()`, no se admiten en Athena para las vistas de Hive.

### Funciones varias
<a name="hive-views-miscellaneous-functions"></a>

#### Funciones varias que requieren un manejo especial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

Las siguientes funciones varias para las vistas de Hive requieren un manejo especial.
+ **md5**: Athena admite `md5(binary)`, pero no `md5(varchar)`.
+ **Explode**: Athena admite `explode` cuando se utiliza en la siguiente sintaxis:

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **Posexplode**: Athena admite `posexplode` cuando se utiliza en la siguiente sintaxis:

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

  En la salida `(pos, val)`, Athena trata la columna `pos` como `BIGINT`. Debido a esto, es posible que necesite convertir la columna `pos` en `BIGINT` para evitar una vista obsoleta. En el siguiente ejemplo, se ilustra esta técnica.

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

#### Funciones varias no admitidas
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

Las siguientes funciones de Hive no se admiten en Athena para las vistas de 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 requieren un manejo especial
<a name="hive-views-operators-special-handling"></a>

Los siguientes operadores para las vistas de Hive requieren un manejo especial.
+ **Operador mod (%)**: debido a que el tipo `DOUBLE` se convierte implícitamente a `DECIMAL(x,y)`, la siguiente sintaxis puede provocar el mensaje de error: La vista es obsoleta

  ```
  a_double % 1.0 AS column
  ```

  Para solucionar este problema, utilice `CAST`, como en el siguiente ejemplo.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Operador de división (/)**: en Hive, `int` dividido por `int` produce un `double`. En Athena, la misma operación produce un truncado `int`.

#### Operadores no admitidos
<a name="hive-views-operators-not-supported"></a>

Athena no admite los siguientes operadores para vistas de Hive.

**\$1A**: bit a bit `NOT`

**A ^ b**: bit a bit `XOR`

**A & b**: bit a bit `AND`

**A \$1 b**: bit a bit `OR`

**A <=> b**: devuelve el mismo resultado que los operadores iguales a (`=`) para operandos no nulos. Devuelve `TRUE` si ambos son `NULL`, `FALSE` si uno de ellos es `NULL`.

### Funciones de cadena
<a name="hive-views-string-functions"></a>

#### Funciones de cadena que requieren un manejo especial
<a name="hive-views-string-functions-special-handling"></a>

Las siguientes funciones de cadena de Hive para las vistas de Hive requieren un manejo especial.
+ **chr (bigint\$1double a)**: Hive permite argumentos negativos; Athena no lo hace.
+ **instr(string str, string substr)**: debido a que la asignación de Athena para la función `instr` devuelve `BIGINT` en lugar de `INT`, utilice la siguiente sintaxis:

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

  Sin este paso, la vista se considerará obsoleta.
+ **length(string a)**: debido a que la asignación de Athena para la función `length` devuelve `BIGINT` en lugar de `INT`, utilice la siguiente sintaxis para que no se considere la vista obsoleta:

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

#### Funciones de cadena no admitidas
<a name="hive-views-string-functions-not-supported"></a>

Las siguientes funciones de cadena de Hive no se admiten en Athena para las vistas de 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)
```

### Funciones de XPath no admitidas
<a name="hive-views-xpath-functions-not-supported"></a>

Las funciones XPath de Hive, como `xpath`, `xpath_short` y `xpath_int` no se admiten en Athena para las vistas de Hive.

## Solución de problemas
<a name="hive-views-troubleshooting"></a>

Cuando utilice las vistas de Hive en Athena, es posible que se encuentre con los siguientes problemas:
+ **La vista *<view name>* está obsoleta**: este mensaje suele indicar una discordancia de tipo entre la vista en Hive y Athena. Si la misma función en el [Hive LanguageManual UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) y la documentación de las [funciones y operadores Presto](https://prestodb.io/docs/current/functions.html) tiene firmas diferentes, pruebe convertir el tipo de datos que no coincida.
+ **Función no registrada**: Athena no admite la función actualmente. Para obtener más información, consulte los datos mencionados anteriormente en este documento.