Usar visualizações do Hive - Amazon Athena

Usar visualizações do Hive

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 o conector de dados do Athena para metastore externo 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), use avg(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 a md5(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 coluna pos como BIGINT. Por isso, poderá ser necessário converter a coluna pos em BIGINT 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 em DECIMAL(x,y), a sintaxe a seguir pode gerar uma mensagem de erro View 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 por int gera um double. No Athena, a mesma operação gera um int 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 retorna BIGINT em vez de INT, 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 retorna BIGINT em vez de INT, 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 Hive e 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.