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.
Travaillez avec les vues Hive
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 Utiliser un métastore Hive externe.
Considérations et restrictions
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
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 une liste complète des fonctions de Hive, consultez le manuel du langage Hive
Fonctions d’agrégation
Fonctions d'agrégation qui nécessitent un traitement spécial
La fonction d'agrégation suivante pour les vues Hive nécessite un traitement spécial.
-
Avg– Au lieu de
avg(INT i)
, utilisezavg(CAST(i AS DOUBLE))
.
Fonctions d'agrégation non prises en charge
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
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
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
Fonctions diverses qui nécessitent un traitement spécial
Les fonctions diverses suivantes pour les vues Hive nécessitent un traitement spécial.
-
md5 – Athena prend en charge
md5(binary)
, mais pasmd5(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 colonnepos
commeBIGINT
. Pour cette raison, vous devrez peut-être convertir la colonnepos
enBIGINT
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
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
Opérateurs nécessitant un traitement spécial
Les opérateurs suivants pour les vues Hive nécessitent un traitement spécial.
-
Opérateur Mod (%) – Parce que le type
DOUBLE
convertit implicitement enDECIMAL(x,y)
, la syntaxe suivante peut entraîner un message d'erreurView 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é parint
produit undouble
. Dans Athena, la même opération produit unint
tronqué.
Opérateurs non pris en charge
Athena ne prend pas en charge les opérateurs suivants pour les vues Hive.
~A – au niveau du bit NOT
A ^ b – au niveau du bit XOR
A & b – au niveau du bit AND
A | 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
Fonctions de chaîne qui nécessitent un traitement spécial
Les fonctions de chaîne Hive suivantes pour les vues Hive nécessitent un traitement spécial.
-
chr(bigint|double a) – Hive autorise des arguments négatifs ; pas Athena.
-
instr(string str, string substr) – Parce que le mappage d'Athena pour la fonction
instr
renvoieBIGINT
et nonINT
, 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
renvoieBIGINT
et nonINT
, 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
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)
XPathfonctions non prises en charge
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
Lorsque vous utilisez les vues Hive dans Athena, vous pouvez rencontrer les problèmes suivants :
-
Afficher
<view name>
est obsolète — 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 LanguageManual UDF et opérateurs Hiveet Presto possède des signatures différentes, essayez de convertir le type de données qui ne correspond pas. -
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.