2016-12-10 17 views

答えて

5
標準のSQL構文

、あなたがテーブルを作成するとき、あなたは特定の列がNullを更新/挿入しようとしてすなわち(か(つまりNULL値を含んでいてもよい)「NULL可能」であることを述べることができます値はエラーをスローする)
Nullがデフォルトです。

寄木細工のスキーマ構文は、同じ概念をサポートしていますが、AVROシリアル化を使用するときは、デフォルトではnullが使用できません。
警告 - Sparkを使用して複数のParquetファイルを読み取る場合、これらのファイルには異なるスキーマが含まれている可能性があります。スキーマ定義が時間とともに変化し、新しいファイルの最後に2つのNullable列があるとします。次に、スキーマがすべてのファイル(無作為に1つだけではない)からスキーマを読み込むように、「スキーマのマージ」を要求する必要があります。これらのスキーマがすべて互換性があることを確認してください。古いファイルの場合はNULLです。

ハイブHQL構文は、標準のSQL機能をサポートしていません。 Hiveはデータファイルを完全に制御できないため、すべての列がnull許容である必要があります。
想像して2つのパーティションを持つハイブパーティション表...

  • 1パーティションはTextFileの形式を使用して、いくつかの予想されるすべての列を示す、いくつか欠けている は、最後の2列は、彼らが使用しているため、CSVは 異なるソースからのダンプが含まれ古い定義
  • 二パーティションはハイブINSERT-SELECTクエリによって作成された、歴史のための寄せ木形式を使用しますが、それらは古いテーブル定義
  • を使用して作成されたので、 寄せ木ファイルは、また、最後の2列が欠落している古いです

Parquetベースのパーティションの場合、Hiveは "スキーママージ"を行いますが、Sparkのようにファイルスキーマをマージする代わりに、各ファイルスキーマをテーブルスキーマとマージします。ファイルに含まれていないすべてのテーブル列をNULLにデフォルト設定します。

CSVベースのパーティションの場合、CSVファイルには「スキーマ」がないため、テーブルの列に順番にマッピングされる値の一覧があるため、残念です。 EOLに達すると、欠落している列はすべてNULLに設定されます。最後の列の値に達すると、行の余分な値は無視されます。

+0

ご協力いただきありがとうございます。 – Rakib

関連する問題