Trabajo con vistas de Hive - Amazon Athena

Trabajo con vistas de Hive

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 del conector de datos de Athena para metaalmacén externo de Hive.

Consideraciones y limitaciones

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 sección a continuación.

Limitaciones de compatibilidad de las funciones de Hive

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 Hive language manual UDF (UDF manual del lenguaje Hive).

Funciones de agregación

Funciones de agregación que requieren un manejo especial

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

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

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

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

Funciones varias

Funciones varias que requieren un manejo especial

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

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

Operadores que requieren un manejo especial

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 int truncado.

Operadores no admitidos

Athena no admite los siguientes operadores para vistas de Hive.

~A: bit a bit NOT

A ^ b: bit a bit XOR

A & b: bit a bit AND

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

Funciones de cadena que requieren un manejo especial

Las siguientes funciones de cadena de Hive para las vistas de Hive requieren un manejo especial.

  • chr (bigint|double 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

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

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

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 y la documentación de las funciones y operadores Presto 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.