3

さまざまなユーザーの通話の詳細を含むファイルを処理しています。call_durationデータ ファイルには、形式の値を含むフィールド がありますhh:mm:ss。例:00:49:39など00:20:00

各ユーザーの 1 か月あたりの通話時間の合計を計算したいと思います。

で時刻形式をストックできるデータ型がハイブに表示されませんhh:mm:ss。(現在、ステージングテーブルにこのデータを文字列として持っています)。

ユーザーごとに sum() グループ化できるように、時間を秒に変換するUDFを作成することを考えています。call_duration

同様の状況に直面した人はいますか?UDFを作成する必要がありますか? より良い方法はありますか?

事前にどうもありがとう

4

2 に答える 2

0

期間を整数秒数として保存することは、効率と計算を行うための最良のオプションのようです。String から Int に変換するためにカスタム UDF は必要ないと思います。これは、既存の UDFS を組み合わせることで実現できます。

Select 3600 * hours + 60 * minutes + seconds as duration_seconds
FROM (
  Select 
  cast(substr(duration,1,2) as Int) as hours, 
  cast(substr(duration,4,2) as Int) as minutes,
  cast(substr(duration,7,2) as Int) as seconds
  From(
    Select "01:02:03" as duration) a
) b;
于 2015-09-15T14:23:36.387 に答える
0

Hive には、時間、分、秒を抽出する組み込みの日付関数が用意されています。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

しかし、これらの関数が直接役に立たず、組み込み関数の多くの組み合わせを使用している場合は、独自の UDF を作成することをお勧めします (これは非常に頻繁なユーティリティであり、多数の行を実行する場合)。クエリのパフォーマンスの違いがわかります。

お役に立てれば

于 2015-09-15T14:31:17.533 に答える