2016-11-11 3 views
0

私は寄木張りとして格納されたcreate table t(name string、age int)でハイブテーブルを作成します。 次に、いくつかのデータを挿入します。いくつかはgzip圧縮を使用しており、一部はスナッピー圧縮を使用しています。つまり、対応するHDFSディレクトリにgzipファイルとスナッピーファイルがあります。 私はクエリを実行すると、gzipとスナッピーのデータがすべて照会されることがわかりました。私の質問は、Hiveがファイルを処理するときにどの圧縮コーデックを使用するかを検出する方法です。あなたがテーブルを説明するようクエリを実行するときにデータファイルがどのように圧縮されるのかをHiveがどのように知っていますか?

答えて

0

ハイブは、それを同じように検出します。

DESCRIBE [EXTENDED | FORMATTED] TABLE_NAME(詳細https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL)すべてのテーブルのプロパティを表示するコマンド上記

それが圧縮されているかどうか、どのタイプの圧縮では、ハイブテーブルに関連するその他のプロパティを使用しています。そう

HIVEが読ん現象(詳細http://www.centurylink.com/business/enterprise/blog/thinkgig/data-lakes-schema-on-read-vs-schema-on-write/)のスキーマを次のようにクエリを読んで「HQLエンジンは、」最初のあなたのテーブルのメタデータを読み込みながら

0

表は、我々はフィールドの下に定義ハイブに作成されます。

行形式のSERDE

FILE_FORMAT

LOCATIONのhdfs_path

FILE_FORMAT

列位置とセパレータ..

ルックテーブル定義として格納。

追加 compression/decompression

+0

ありがとう@sandeep。私の質問は、データがテーブルの対応するHDFSディレクトリにあるときには、スナップ圧縮ファイルであり、いくつかはgzip圧縮ファイルであるということです。これらのファイルに対してHiveクエリを実行すると、Hiveはファイルを圧縮解除するときにどのコーデックを使用するかを知っています。 – Tom

+0

圧縮/解凍が自動的に検出されました。回答にリンクを追加しました –

2

単にメタデータをチェックし、圧縮情報を取得するためには十分ではありません。圧縮されたファイルと圧縮されていないファイルを1つのテーブルディレクトリに簡単に混在させることができます。したがって、圧縮コーデックは、ファイル自体の各ファイルに対して定義されます。

ファイルのどの部分にコーデックに関するこの情報が書き込まれていますか?

ファイルの種類によって異なります。

表のメタデータは、ファイルの種類に関する情報(テーブルのDDLでSTORED AS ...として指定することができます)

だから、最初にすべてのハイブのファイルタイプを取得するためのメタデータを読み込むが含まれています。

ファイルの種類(テキスト、orc、寄木張りなど)によっては、コーデック情報がファイルのヘッダーまたはフッターに格納されます。

各ファイルタイプには対応するリーダーがあります。 読者はコーデック情報を読み取る方法を知っています。たとえば、the ORC reader reads the last 16k bytes of the file with the hope that it will contain both the Footer and Postscript sections。 ORCのPostScriptセクションにはコーデック情報が含まれています。

テキストファイルにはヘッダーなどのコーデック情報が含まれています。 これは簡単な答えです。対応するファイルリーダーは、圧縮コーデックに関する情報をどこから取得するのかを認識しています。

+0

ありがとう@leftjoin。あなたは正しいです、そしてそれは質問1に答えました – Tom

関連する問題