Hive ビューを使用する
Athena を使用して、外部 Apache Hive メタストア内の既存のビューをクエリできます。Athena は、元のビューを変更したり、翻訳を保存したりすることなく、ランタイムにその場でビューを翻訳します。
例えば、Athena ではサポートされていない構文 (LATERAL VIEW explode()
) を使用する次のような Hive ビューがあるとします。
CREATE VIEW team_view AS SELECT team, score FROM matches LATERAL VIEW explode(scores) m AS score
Athena は、Hive ビューのクエリ文字列を、Athena が実行できる次のようなステートメントに翻訳します。
SELECT team, score FROM matches CROSS JOIN UNNEST(scores) AS m (score)
外部の Hive メタストアを Athena に接続する方法の詳細については、「外部の Hive メタストアを使用する」(Athena データコネクタを外部の Hive メタストアに使用する) を参照してください。
考慮事項と制限事項
Athena から Hive ビューをクエリする際は、以下の点を考慮してください。
-
Athena では、Hive ビューの作成をサポートしていません。外部 Hive メタストアに Hive ビューを作成し、そこに Athena からクエリを実行することができます。
-
Athena では、Hive ビューのカスタム UDF をサポートしていません。
-
Athena コンソールの既知の問題により、Hive ビューは、ビューのリストではなくテーブルのリストに表示されます。
-
翻訳プロセスは自動的に実行されますが、ある特定の Hive 関数は、Hive ビューでサポートされていないか、特別な処理が必要になります。詳細については、以下の セクションを参照してください。
Hive 関数のサポート制限
このセクションでは、Athena が Hive ビューでサポートしていない Hive 関数、および特別な処理が必要な Hive 関数について取り上げます。現在、Athena は主に Hive 2.2.0 の関数をサポートしているため、上位バージョン (Hive 4.0.0 など) でのみ有効な関数を使用することはできません。Hive 関数の全リストについては、Hive の「LanguageManual UDF
集計関数
特別な処理を必要とする集計関数
Hive ビューの次の集計関数では、特別な処理が必要です。
-
平均 —
avg(INT i)
の代わりにavg(CAST(i AS DOUBLE))
を使用します。
サポートされていない集計関数
Athena の Hive ビューでは、次の Hive 集計関数はサポートされていません。
covar_pop histogram_numeric ntile percentile percentile_approx
Athena の Hive ビューでは、regr_count
、regr_r2
、regr_sxx
などの回帰関数はサポートされていません。
サポートされていない日付関数
Athena の Hive ビューでは、次の 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)
サポートされていないマスク関数
Athena の Hive ビューでは、mask()
や mask_first_n()
などの Hive マスク関数はサポートされていません。
その他の関数
特別な処理を必要とするその他の関数
Hive ビューの次の種々の関数では、特別な処理が必要です。
-
md5 – Athena では
md5(binary)
はサポートされますが、md5(varchar)
はサポートされません。 -
Explode – 次の構文で使用される場合は、Athena で
explode
がサポートされます。LATERAL VIEW [OUTER] EXPLODE(
<argument>
) -
Posexplode – 次の構文で使用される場合は、Athena で
posexplode
がサポートされます。LATERAL VIEW [OUTER] POSEXPLODE(
<argument>
)(pos, val)
出力で、Athena はpos
列をBIGINT
として扱います。このため、古いビューを回避するには、pos
列をBIGINT
にキャストする必要がある場合があります。以下に示しているのはこの手法の例です。SELECT CAST(c AS BIGINT) AS c_bigint, d FROM table LATERAL VIEW POSEXPLODE(
<argument>
) t AS c, d
サポートされていないその他の関数
Athena の Hive ビューでは、次の Hive 関数はサポートされていません。
aes_decrypt aes_encrypt current_database current_user inline java_method logged_in_user reflect sha/sha1/sha2 stack version
演算子
特別な処理を必要とする演算子
Hive ビューの次の演算子では、特別な処理が必要です。
-
Mod 演算子 (%) –
DOUBLE
型は暗黙的にDECIMAL(x,y)
にキャストされるため、次の構文はView is stale
(ビューが古くなっています) エラーメッセージの原因となる可能性があります。a_double % 1.0 AS column
この問題を回避するには、次の例のように
CAST
を使用します。CAST(a_double % 1.0 as DOUBLE) AS column
-
除算演算子 (/) – Hive では、
int
をint
で除算するとdouble
になります。Athena では、同じ演算で、切り捨てられたint
が生成されます。
サポートされていない演算子
Athena の Hive ビューでは、次の演算子はサポートされていません。
~A – ビット単位の NOT
A ^ b – ビット単位の XOR
A & b – ビット単位の AND
A | b – ビット単位の OR
A <=> b – Null 以外のオペランドの等価 (=
) 演算子と同じ結果を返します。両方とも NULL
の場合は TRUE
を返し、いずれかが NULL
の場合は FALSE
を返します。
文字列関数
特別な処理を必要とする文字列関数
Hive ビューの次の Hive 文字列関数では、特別な処理が必要です。
-
chr(bigint|double a) – Hive では負の引数を使用できますが、Athena では使用できません。
-
instr(string str, string substr) –
instr
関数の Athena マッピングでは、INT
ではなくBIGINT
が返されるため、次の構文を使用します。CAST(instr(string str, string substr) as INT)
このステップがない場合、ビューは古いものと見なされます。
-
length(string a) –
length
関数の Athena マッピングでは、INT
ではなくBIGINT
が返されるため、ビューが古いものと見なされないように、次の構文を使用します。CAST(length(string str) as INT)
サポートされていない文字列関数
Athena の Hive ビューでは、次の 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)
サポートされていない XPath 関数
Athena の Hive ビューでは、xpath
、xpath_short
、xpath_int
などの Hive XPath 関数はサポートされていません。
トラブルシューティング
Athena で Hive ビューを使用すると、次の問題が発生する場合があります。
-
View
<view name>
is stale (ビュー <ビュー名> が古くなっています) – このメッセージは通常、Hive と Athena のビューで型の不一致が存在することを示します。Hive の「LanguageManual UDF」(言語マニュアル UDF) ドキュメントと Presto の「Functions and Operators 」(関数と演算子) ドキュメントの同じ関数が異なるシグネチャを持つ場合は、不一致のデータ型をキャストしてみてください。 -
Function not registered (関数が登録されていません) – 現在、Athena では、この関数をサポートしていません。詳細については、このドキュメントの前述の情報を参照してください。