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 de un metastore de Hive externo.
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 siguiente secció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 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)
, utiliceavg(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 nomd5(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 columnapos
comoBIGINT
. Debido a esto, es posible que necesite convertir la columnapos
enBIGINT
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 aDECIMAL(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 porint
produce undouble
. En Athena, la misma operación produce unint
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
devuelveBIGINT
en lugar deINT
, 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
devuelveBIGINT
en lugar deINT
, 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.
Resolució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 UDFy 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.