Você pode usar o Athena para consultar visualizações existentes em seus metastores externos do Apache Hive. O Athena traduz as visualizações dinamicamente em tempo de execução sem alterar a visualização original ou armazenar a tradução.
Por exemplo, suponha que você tenha uma visualização do Hive que usa uma sintaxe semelhante a LATERAL VIEW explode()
, não compatível com o Athena, como mostrado a seguir:
CREATE VIEW team_view AS
SELECT team, score
FROM matches
LATERAL VIEW explode(scores) m AS score
O Athena traduz a string de consulta da visualização do Hive em uma instrução que o Athena pode executar, como esta:
SELECT team, score
FROM matches
CROSS JOIN UNNEST(scores) AS m (score)
Para obter informações sobre como conectar um metastore externo do Hive ao Athena, consulte Usar um metastore externa do Hive.
Considerações e limitações
Ao consultar visualizações do Hive no Athena, considere os seguintes pontos:
-
O Athena não oferece suporte à criação de visualizações do Hive. Você pode criar visualizações do Hive no seu metastore externo do Hive, que pode então ser consultado usando o Athena.
-
O Athena não oferece suporte a UDFs personalizadas para visualizações do Hive.
-
Devido a um problema conhecido no console do Athena, as visualizações do Hive aparecem na lista de tabelas, e não na lista de visualizações.
-
Embora o processo de tradução seja automático, certas funções do Hive não são compatíveis com exibições do Hive ou exigem um tratamento especial. Para obter mais informações, consulte a seção a seguir.
Limitações de suporte às funções do Hive
Esta seção destaca as funções do Hive que não são compatíveis com visualizações do Hive no Athena ou que exigem um tratamento especial. Como o Athena atualmente oferece suporte principalmente a funções do Hive 2.2.0, funções disponíveis somente em versões superiores (como Hive 4.0.0) não são compatíveis. Para obter uma lista completa de funções do Hive, consulte o manual de idioma de UDFs do Hive
Funções agregadas
Funções agregadas que exigem tratamento especial
A função agregada a seguir para visualizações do Hive exige um tratamento especial.
-
Avg: em vez de
avg(INT i)
, useavg(CAST(i AS DOUBLE))
.
Funções agregadas sem suporte
O Athena não oferece suporte às funções agregadas do Hive a seguir para visualizações do Hive.
covar_pop histogram_numeric ntile percentile percentile_approx
O Athena não oferece suporte a funções de regressão como regr_count
, regr_r2
e regr_sxx
para visualizações do Hive.
Funções de data sem suporte
O Athena não oferece suporte às funções de data do Hive a seguir para visualizações do 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)
Funções de mascaramento sem suporte
O Athena não oferece suporte a funções de mascaramento do Hive como mask()
e mask_first_n()
para visualizações do Hive.
Funções diversas
Funções diversas que exigem tratamento especial
As funções diversas para visualizações do Hive a seguir exigem tratamento especial.
-
md5: o Athena oferece suporte a
md5(binary)
, mas não amd5(varchar)
. -
explode: o Athena oferece suporte a
explode
quando usada com a seguinte sintaxe:LATERAL VIEW [OUTER] EXPLODE(
<argument>
) -
posexplode: o Athena oferece suporte a
posexplode
quando usada com a seguinte sintaxe:LATERAL VIEW [OUTER] POSEXPLODE(
<argument>
)Na saída
(pos, val)
, o Athena trata a colunapos
comoBIGINT
. Por isso, poderá ser necessário converter a colunapos
emBIGINT
para evitar uma visualização obsoleta. O exemplo a seguir ilustra essa técnica.SELECT CAST(c AS BIGINT) AS c_bigint, d FROM table LATERAL VIEW POSEXPLODE(
<argument>
) t AS c, d
Funções diversas sem suporte
O Athena não oferece suporte às funções do Hive a seguir para visualizações do Hive.
aes_decrypt aes_encrypt current_database current_user inline java_method logged_in_user reflect sha/sha1/sha2 stack version
Operadores
Operadores que exigem tratamento especial
Os operadores para visualizações do Hive a seguir exigem tratamento especial.
-
Operador de módulo (%): como o tipo
DOUBLE
implicitamente converte emDECIMAL(x,y)
, a sintaxe a seguir pode gerar uma mensagem de erroView is stale
(Visualização obsoleta):a_double % 1.0 AS column
Para contornar esse problema, use
CAST
, como no exemplo a seguir.CAST(a_double % 1.0 as DOUBLE) AS column
-
Operador de divisão (/): no Hive ,
int
dividido porint
gera umdouble
. No Athena, a mesma operação gera umint
truncado.
Operadores sem suporte
O Athena não oferece suporte aos operadores a seguir para visualizações do Hive.
~A: bitwise NOT
A ^ b: bitwise XOR
A & b: bitwise AND
A | b: bitwise OR
A <=> b: retorna o mesmo resultado que o operador igual a (=
) para operandos não nulos. Retornará TRUE
se ambos forem NULL
, ou FALSE
se um deles for NULL
.
Funções de string
Funções de string que exigem tratamento especial
As funções de string para visualizações do Hive a seguir exigem tratamento especial.
-
chr(bigint|double a): o Hive permite argumentos negativos; o Athena não.
-
instr(string str, string substr): como o mapeamento do Athena para a função
instr
retornaBIGINT
em vez deINT
, use a seguinte sintaxe:CAST(instr(string str, string substr) as INT)
Sem essa etapa, a visualização será considerada obsoleta.
-
length(string a): como o mapeamento do Athena para a função
length
retornaBIGINT
em vez deINT
, use a seguinte sintaxe para que a visualização não seja considerada obsoleta:CAST(length(string str) as INT)
Funções de string sem suporte
O Athena não oferece suporte às funções de string do Hive a seguir para visualizações do 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)
Funções XPath sem suporte
O Athena não oferece suporte a funções XPath do Hive como xpath
, xpath_short
e xpath_int
para visualizações do Hive.
Solução de problemas
Ao usar visualizações do Hive no Athena, você poderá encontrar os seguintes problemas:
-
View
<view name>
is stale (A visualização <nome da visualização> está obsoleta): esta mensagem geralmente indica uma não correspondência de tipo entre a visualização no Hive e no Athena. Se a mesma função no manual de idioma de UDFs do Hivee na documentação sobre funções e operadores do Presto tiver assinaturas diferentes, tente converter o tipo de dado sem correspondência. -
Function not registered (Função não registrada): o Athena atualmente não oferece suporte à função. Para obter mais informações, consulte as seções anteriores neste documento.