5

Hive でテーブルを定義していて、日付に基づいてパーティション分割する予定で、日付の形式が YYYYMMDD の場合、int または string のどちらのタイプを選択する必要がありますか?

それが単なるフィールドであり、テーブルに提供しているファイルの場合、データに侵入する可能性のある不正な形式のエントリを検索して特定できるようにするためであっても、文字列を使用していることがわかります。しかし、ロード プロセスの一部としてパーティションを指定するので、常に正しい形式の値が得られることがわかっています。

句で使用される場合Where、パーティション フィールドは通常、等号または以下/以上のロジックになります。

4

2 に答える 2

5

日付は通常、Hive では文字列として扱われます。利用可能なすべての日付操作 UDF を見ると、それらは文字列型を使用しているため、整数を使用している場合は毎回キャストする必要があります。

概念的にも、文字列を使用する方が理にかなっていると思います.YYYYMMDDは日付オブジェクトのリテラル表現にすぎませんが、YYYY-MM-DDやDDMMYYYYなどと暗黙的に同等です。したがって、ここで整数を使用していると、そのような比較を行うのが面倒になります。

Hive の文字列を等号/大なり/小なり演算子で比較することもできることに注意してください。パーティションの範囲を選択したい場合は、これらの演算子で簡単に行うことができます。

「日付」を整数として使用する唯一のケースは、タイムスタンプ (Unix スタイル) を使用することです。これは、連続値であり、実際の測定可能な量を表すためです。

于 2013-03-04T17:42:41.623 に答える
4

YYYY-MM-DD は日付表現の標準であり、Hive の to_date() UDF の出力であるため、select * from foo where day>'2013' のような遅延処理も実行できます。

http://xkcd.com/1179/

于 2013-03-07T06:15:31.470 に答える