Travaillez avec les vues Hive - Amazon Athena

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. UDF

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), utilisez avg(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 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

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 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

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 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

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 à xpathxpath_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 Hive et 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.