

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation des vues Hive
<a name="hive-views"></a>

Vous pouvez utiliser Athena pour interroger les vues existantes dans vos métastores Hive externes. Athena traduit vos vues pour vous on-the-fly lors de l'exécution sans modifier la vue d'origine ni enregistrer la traduction.

Par exemple, supposons que vous disposez d'une vue Hive comme la suivante qui utilise une syntaxe non prise en charge par Athena comme `LATERAL VIEW explode()` :

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

Athena traduit la chaîne de requête de la vue Hive en une instruction semblable à la suivante qu'Athena peut exécuter :

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

Pour plus d'informations sur la connexion d'un métastore Hive externe à Athena, consultez [Utilisation d’un metastore Hive externe](connect-to-data-source-hive.md).

## Considérations et restrictions
<a name="hive-views-considerations-and-limitations"></a>

Lorsque vous interrogez les vues Hive d'Athena, tenez compte des points suivants :
+ Athena ne prend pas en charge la création de vues Hive. Vous pouvez créer des vues Hive dans votre métastore Hive externe, que vous pouvez ensuite interroger depuis Athena.
+ Athena ne prend pas en charge les vues personnalisées UDFs pour Hive.
+ En raison d'un problème connu dans la console Athena, les vues Hive apparaissent sous la liste des tables au lieu de la liste des vues.
+ Bien que le processus de traduction soit automatique, certaines fonctions Hive ne sont pas prises en charge pour les vues Hive ou nécessitent un traitement spécial. Pour plus d'informations, consultez la section suivante.

## Limitations du support de la fonction Hive
<a name="hive-views-function-limitations"></a>

Cette section met en évidence les fonctions Hive qu'Athena ne prend pas en charge pour les vues Hive ou qui nécessitent un traitement spécial. Actuellement, étant donné qu'Athena prend principalement en charge les fonctions de Hive 2.2.0, les fonctions disponibles uniquement dans les versions supérieures (telles que Hive 4.0.0) ne sont pas disponibles. Pour obtenir la liste complète des fonctions Hive, consultez les [fonctions définies par l'utilisateur LanguageManual Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Fonctions d’agrégation
<a name="hive-views-aggregate-functions"></a>

#### Fonctions d'agrégation qui nécessitent un traitement spécial
<a name="hive-views-aggregate-functions-special-handling"></a>

La fonction d'agrégation suivante pour les vues Hive nécessite un traitement spécial.
+ **Avg**– Au lieu de `avg(INT i)`, utilisez `avg(CAST(i AS DOUBLE))`.

#### Fonctions d'agrégation non prises en charge
<a name="hive-views-aggregate-functions-not-supported"></a>

Les fonctions d'agrégation Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

Les fonctions de régression telles que `regr_count`, `regr_r2`, et `regr_sxx` ne sont pas prises en charge dans les vues Athena pour Hive.

### Fonctions de date non prises en charge
<a name="hive-views-date-functions-not-supported"></a>

Les fonctions de date Hive suivantes ne sont pas prises en charge dans les vues Athena pour 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)
```

### Fonctions de masquage non prises en charge
<a name="hive-views-masking-functions-not-supported"></a>

Les fonctions de masquage Hive telles que `mask()` et `mask_first_n()` ne sont pas pris en charge dans les vues Athena pour Hive.

### Fonctions diverses
<a name="hive-views-miscellaneous-functions"></a>

#### Fonctions diverses qui nécessitent un traitement spécial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

Les fonctions diverses suivantes pour les vues Hive nécessitent un traitement spécial.
+ **md5** – Athena prend en charge `md5(binary)`, mais pas `md5(varchar)`.
+ **Explose** – Athena prend en charge `explode` lorsqu'il est utilisé dans la syntaxe suivante :

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **Posexplose** – Athena prend en charge `posexplode` lorsqu'il est utilisé dans la syntaxe suivante :

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

  Dans la sortie `(pos, val)`, Athena traite la colonne `pos` comme `BIGINT`. Pour cette raison, vous devrez peut-être convertir la colonne `pos` en `BIGINT` pour éviter une vue obsolète. L'exemple suivant illustre cette technique.

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

#### Fonctions diverses non prises en charge
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

Les fonctions Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

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

### Opérateurs
<a name="hive-views-operators"></a>

#### Opérateurs nécessitant un traitement spécial
<a name="hive-views-operators-special-handling"></a>

Les opérateurs suivants pour les vues Hive nécessitent un traitement spécial.
+ **Opérateur Mod (%)** – Parce que le type `DOUBLE` convertit implicitement en `DECIMAL(x,y)`, la syntaxe suivante peut entraîner un message d'erreur View is stale (La vue est obsolète) :

  ```
  a_double % 1.0 AS column
  ```

  Pour résoudre ce problème, utilisez `CAST`, comme dans l'exemple suivant.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Opérateur de division (/)** – Dans Hive, `int` divisé par `int` produit un `double`. Dans Athena, la même opération produit un `int` tronqué.

#### Opérateurs non pris en charge
<a name="hive-views-operators-not-supported"></a>

Athena ne prend pas en charge les opérateurs suivants pour les vues Hive.

**\$1A** – au niveau du bit `NOT`

**A ^ b** – au niveau du bit `XOR`

**A & b** – au niveau du bit `AND`

**A \$1 b** – au niveau du bit `OR`

**A <=> b** – renvoie le même résultat que l'opérateur égal (`=`) pour opérandes non nuls. Renvoie `TRUE` si les deux sont `NULL`, `FALSE` si l'un d'eux est `NULL`.

### Fonctions de chaîne
<a name="hive-views-string-functions"></a>

#### Fonctions de chaîne qui nécessitent un traitement spécial
<a name="hive-views-string-functions-special-handling"></a>

Les fonctions de chaîne Hive suivantes pour les vues Hive nécessitent un traitement spécial.
+ **chr(bigint\$1double a)** – Hive autorise des arguments négatifs ; pas Athena.
+ **instr(string str, string substr)** – Parce que le mappage d'Athena pour la fonction `instr` renvoie `BIGINT` et non `INT`, utilisez la syntaxe suivante :

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

  Sans cette étape, la vue sera considérée comme obsolète.
+ **length(string a)** – Parce que le mappage d'Athena pour la fonction `length` renvoie `BIGINT` et non `INT`, utilisez la syntaxe suivante pour que la vue ne soit pas considérée comme obsolète :

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

#### Fonctions de chaîne non prises en charge
<a name="hive-views-string-functions-not-supported"></a>

Les fonctions de chaîne Hive suivantes ne sont pas prises en charge dans les vues Athena pour 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)
```

### XPath fonctions non prises en charge
<a name="hive-views-xpath-functions-not-supported"></a>

Les XPath fonctions Hive sont similaires à `xpath``xpath_short`, et ne `xpath_int` sont pas prises en charge dans les vues Athena for Hive.

## Résolution des problèmes
<a name="hive-views-troubleshooting"></a>

Lorsque vous utilisez les vues Hive dans Athena, vous pouvez rencontrer les problèmes suivants :
+ ***<view name>*La vue est périmée** — Ce message indique généralement une incompatibilité de type entre la vue dans Hive et Athena. Si la même fonction présente dans la documentation des [fonctions et opérateurs [Hive LanguageManual UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) et Presto](https://prestodb.io/docs/current/functions.html) possède des signatures différentes, essayez de convertir le type de données incompatible.
+ **Fonction non enregistrée** – Athena ne prend pas actuellement en charge cette fonction. Pour obtenir des détails, consultez les informations plus haut dans ce document.