私は寄木張りとして格納されたcreate table t(name string、age int)でハイブテーブルを作成します。 次に、いくつかのデータを挿入します。いくつかはgzip圧縮を使用しており、一部はスナッピー圧縮を使用しています。つまり、対応するHDFSディレクトリにgzipファイルとスナッピーファイルがあります。 私はクエリを実行すると、gzipとスナッピーのデータがすべて照会されることがわかりました。私の質問は、Hiveがファイルを処理するときにどの圧縮コーデックを使用するかを検出する方法です。あなたがテーブルを説明するようクエリを実行するときにデータファイルがどのように圧縮されるのかをHiveがどのように知っていますか?
答えて
ハイブは、それを同じように検出します。
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エンジンは、」最初のあなたのテーブルのメタデータを読み込みながら
表は、我々はフィールドの下に定義ハイブに作成されます。
行形式のSERDE
FILE_FORMAT
LOCATIONのhdfs_path
FILE_FORMAT
列位置とセパレータ..
ルックテーブル定義として格納。
単にメタデータをチェックし、圧縮情報を取得するためには十分ではありません。圧縮されたファイルと圧縮されていないファイルを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セクションにはコーデック情報が含まれています。
テキストファイルにはヘッダーなどのコーデック情報が含まれています。 これは簡単な答えです。対応するファイルリーダーは、圧縮コーデックに関する情報をどこから取得するのかを認識しています。
ありがとう@leftjoin。あなたは正しいです、そしてそれは質問1に答えました – Tom
- 1. Soundオブジェクトが再生されているかどうかをどのように知っていますか?
- 2. Railsは移行が実行されたことをどのように知っていますか?
- 3. 圧縮されていないzlibストリームとどのようにファイルが分かれているか
- 4. bzip2ブロックの非圧縮データのサイズはどのように知ることができますか?
- 5. どのようにフルスクリーンアプリケーションがウィンドウで実行されているかどうかを検出できますか?
- 6. 同様の行をどのように圧縮できますか?
- 7. IISが本当に自分のHTMLを圧縮しているかどうかを知るにはどうすればよいですか?
- 8. コントローラアクションがDNSまたはIPによって要求されたかどうかをどのようにして知ることができますか?
- 9. ストリームが閉じているかどうかをどのように知ることができますか?
- 10. 圧縮によってハッシュ値が変更されますか?
- 11. 何かがjQueryで操作されたかどうかをどのように知っていますか?
- 12. どのようなPythonソースファイルが実行されるのかをどのように知ることができますか?
- 13. 実行ファイルがインクリメンタルリンクされているかどうかをどのように知ることができますか?
- 14. サーブレットへのリクエストがHTTPまたはHTTPSを使用して実行されたかどうかをどのように知ることができますか?
- 15. コントロールはフォームにフォームが追加されていることをどのように知っていますか?
- 16. キュウリは、どのJavaファイルを実行するかをどのように知っていますか?
- 17. Javaでは、スレッドが実行されているかどうかをどのように判断しますか?
- 18. comparison_typeの列がLexicalUUIDTypeのときにクエリを実行するにはどうすればよいですか?
- 19. Djangoテンプレートは、どのテンプレートが呼び出されるかをどのように知っていますか
- 20. リストがソートされているとき、どのように言語*知っていますか?
- 21. どのような.libにどの関数が含まれているかをC++リンカーがどのように知っていますか?
- 22. AnimationTimerが実行されているかどうかはどのように知ることができますか?
- 23. bashスクリプトがnohupで実行されているかどうかはどのように知ることができますか?
- 24. どのようにしてフォルダを圧縮することができますか?
- 25. SAML要求が圧縮されているかどうかを確実に伝えますか?
- 26. Collection.sortがどのように実装されていますか?
- 27. どのようにデータファイルの各行をタプルのリストのタプルにすることができますか?
- 28. erlangプロセスがどのノードで実行されているかをどのようにして知ることができますか?
- 29. Django - クエリはどのようにクエリを実行しますか?
- 30. URLが最後に要求されたときをどのように知っていますか?
ありがとう@sandeep。私の質問は、データがテーブルの対応するHDFSディレクトリにあるときには、スナップ圧縮ファイルであり、いくつかはgzip圧縮ファイルであるということです。これらのファイルに対してHiveクエリを実行すると、Hiveはファイルを圧縮解除するときにどのコーデックを使用するかを知っています。 – Tom
圧縮/解凍が自動的に検出されました。回答にリンクを追加しました –