

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Lavorare con le visualizzazioni Hive
<a name="hive-views"></a>

È possibile utilizzare Athena per eseguire query sulle visualizzazioni Apache create in metastore Hive esterni. Athena traduce le tue visualizzazioni per te on-the-fly in fase di esecuzione senza modificare la vista originale o memorizzare la traduzione.

Ad esempio, supponiamo di avere una visualizzazione Hive come la seguente, che utilizza una sintassi non supportata in Athena come `LATERAL VIEW explode()`:

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

Athena traduce la stringa di query di visualizzazione Hive in un'istruzione simile alla seguente, che è in grado di eseguire:

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

Per informazioni sul collegamento di un metastore Hive esterno ad Athena, consulta la sezione [Utilizzare un metastore Hive esterno](connect-to-data-source-hive.md).

## Considerazioni e limitazioni
<a name="hive-views-considerations-and-limitations"></a>

Durante l'esecuzione di query sulle visualizzazioni Hive da Athena, considera i seguenti punti:
+ Athena non supporta la creazione di visualizzazioni Hive. È possibile creare visualizzazioni Hive nel metastore esterno di Hive, sulle quali è possibile poi eseguire query da Athena.
+ Athena non supporta le visualizzazioni personalizzate UDFs per Hive.
+ A causa di un problema noto nella console Athena, le visualizzazioni Hive vengono mostrate nell'elenco delle tabelle anziché in quello delle visualizzazioni.
+ Sebbene il processo di traduzione sia automatico, alcune funzioni Hive non sono supportate per le visualizzazioni Hive o richiedono una gestione speciale. Per ulteriori informazioni, consulta la sezione seguente.

## Limitazioni nel supporto delle funzioni Hive
<a name="hive-views-function-limitations"></a>

Questa sezione evidenzia le funzioni Hive che Athena non supporta per le visualizzazioni Hive o che richiedono un trattamento speciale. Attualmente, poiché Athena supporta principalmente le funzioni di Hive 2.2.0, le funzioni presenti solo nelle versioni successive (come Hive 4.0.0) non sono disponibili. Per un elenco completo delle funzioni Hive, consulta[Manuale del linguaggio Hive UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Funzioni di aggregazione
<a name="hive-views-aggregate-functions"></a>

#### Funzioni di aggregazione che richiedono una gestione speciale
<a name="hive-views-aggregate-functions-special-handling"></a>

La seguente funzione di aggregazione per le visualizzazioni Hive richiede una gestione speciale.
+ **Avg**: al posto di `avg(INT i)`, utilizza `avg(CAST(i AS DOUBLE))`.

#### Funzioni aggregate non supportate
<a name="hive-views-aggregate-functions-not-supported"></a>

Le seguenti funzioni di aggregazione Hive non sono supportate in Athena per le visualizzazioni Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

Funzioni di regressione come `regr_count`, `regr_r2` e `regr_sxx` non sono supportate in Athena per le visualizzazioni Hive.

### Funzioni aggregate non supportate
<a name="hive-views-date-functions-not-supported"></a>

Le seguenti funzioni di aggregazione Hive non sono supportate in Athena per le visualizzazioni 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)
```

### Funzioni aggregate non supportate
<a name="hive-views-masking-functions-not-supported"></a>

Funzioni di regressione come `mask()`, e `mask_first_n()` non sono supportate in Athena per le visualizzazioni Hive.

### Funzioni varie
<a name="hive-views-miscellaneous-functions"></a>

#### Funzioni varie che richiedono una gestione speciale
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

Le seguenti funzioni varie per le visualizzazioni Hive richiedono una gestione speciale.
+ **md5**: Athena supporta `md5(binary)` ma non `md5(varchar)`.
+ **Explode**: Athena supporta `explode` quando viene utilizzato nella seguente sintassi:

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **Explode**: Athena supporta `posexplode` quando viene utilizzato nella seguente sintassi:

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

  Nell'output `(pos, val)`, Athena tratta la colonna `pos` come `BIGINT`. Per questo motivo, potrebbe essere necessario eseguire il cast della colonna `pos` a `BIGINT` per evitare una visualizzazione obsoleta. Nell'esempio seguente viene descritta tale tecnica.

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

#### Funzioni varie non supportate
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

Le seguenti funzioni di aggregazione Hive non sono supportate in Athena per le visualizzazioni Hive.

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

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

#### Operatori che richiedono una gestione speciale
<a name="hive-views-operators-special-handling"></a>

I seguenti operatori per le visualizzazioni Hive richiedono una gestione speciale.
+ **Operatore mod o modulo (%)**: poiché il tipo `DOUBLE` esegue implicitamente un cast a `DECIMAL(x,y)`, la sintassi seguente può causare il messaggio di errore View is stale (La visualizzazione è non aggiornata):

  ```
  a_double % 1.0 AS column
  ```

  Per risolvere il problema, utilizza `CAST`, come nell'esempio seguente.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Operatore divisione (/)**: in Hive,`int` diviso per `int` produce un `double`. In Athena, la stessa operazione produce un `int` abbreviato.

#### Operatori non supportati
<a name="hive-views-operators-not-supported"></a>

Athena non supporta i seguenti operatori per le visualizzazioni Hive.

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

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

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

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

**A <=> b**: Restituisce lo stesso risultato dell'operatore uguale (`=`) per operandi non nulli. Restituisce `TRUE` se entrambi sono `NULL`, `FALSE` se uno di questi è `NULL`.

### Funzioni stringa
<a name="hive-views-string-functions"></a>

#### Funzioni stringa che richiedono una gestione speciale
<a name="hive-views-string-functions-special-handling"></a>

Le seguenti funzioni stringa per le visualizzazioni Hive richiedono una gestione speciale.
+ **chr (bigint\$1doppia a)**: Hive consente argomenti negativi; Athena no.
+ **instr (string str, string substr)**: poiché la mappatura Athena per la funzione `instr` restituisce `BIGINT` anziché `INT`, utilizza la sintassi seguente:

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

  Senza questo passaggio, la visualizzazione sarà considerata obsoleta.
+ **lunghezza (stringa a)**: poiché la mappatura Athena per la funzione `length` restituisce `BIGINT` anziché `INT`, utilizza la seguente sintassi in modo che la visualizzazione non venga considerata obsoleta:

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

#### Funzioni stringa non supportate
<a name="hive-views-string-functions-not-supported"></a>

Le seguenti funzioni stringa di Hive non sono supportate nelle visualizzazioni Hive in Athena.

```
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 funzioni non supportate
<a name="hive-views-xpath-functions-not-supported"></a>

 XPath Le funzioni di Hive come `xpath``xpath_short`, e non `xpath_int` sono supportate in Athena for Hive views.

## Risoluzione dei problemi
<a name="hive-views-troubleshooting"></a>

Quando si utilizzano le visualizzazioni Hive in Athena, potrebbero verificarsi i seguenti problemi:
+ ***<view name>*La visualizzazione è obsoleta**: questo messaggio di solito indica una mancata corrispondenza di tipo tra la vista in Hive e Athena. Se la stessa funzione nelle funzioni e nella documentazione degli [operatori di [Hive LanguageManual UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) e Presto](https://prestodb.io/docs/current/functions.html) presenta firme diverse, prova a inserire il tipo di dati non corrispondente.
+ **Function not registered** (Funzione non registrata): Athena non supporta attualmente la funzione. Per ulteriori informazioni, consulta le informazioni descritte precedentemente in questo documento.