天文学者のための Hadoop 日付操作のマスタリー

HadoopBeginner
オンラインで実践に進む

はじめに

2285 年。火星を周回する繁栄する宇宙ステーションを人類が建設している。この研究施設は「火星天文台」と呼ばれ、科学的探索と発見の拠点となっている。ここに滞在する多くの科学者の中には、天文学的観測に特化した優れたデータ アナリストであるエマ・ウィルキンズ博士がいる。

ウィルキンズ博士は、ステーションに搭載されたさまざまな望遠鏡や機器から収集された膨大なデータの分析を担当している。しかし、データは生の形式であり、彼女は意味のある洞察を抽出するためにそれを処理して操作する必要がある。彼女が直面している重要な課題の 1 つは、日付と時刻の情報を扱うことである。多くの観測は時系列に依存しており、正確な日付計算が必要だからである。

この課題に対処するために、ウィルキンズ博士は、ビッグデータ処理用に設計されたデータ ウェアハウジング ソリューションである Hadoop Hive に用意されている強力な日付操作関数を活用しなければならない。これらの関数を習得することで、彼女は日付と時刻のデータを効率的に操作し分析することができ、天文学の分野で画期的な発見につながるパターン、トレンド、異常を明らかにすることができる。

Hive 環境のセットアップ

この手順では、Hive 環境をセットアップし、日付操作関数の練習用のサンプル データセットを作成します。

  1. まず、ターミナルで以下のコマンドを実行して hadoop ユーザーに切り替えます。
su - hadoop
  1. 次に、以下のコマンドを実行して Hive シェルを起動します。
hive
  1. 以下のスキーマで observations という新しい Hive テーブルを作成します。
CREATE TABLE observations (
    observation_id INT,
    telescope STRING,
    observation_date STRING,
    observation_time STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
  1. observations テーブルにサンプル データを読み込みます。
LOAD DATA LOCAL INPATH '/home/hadoop/resources/observations.csv' OVERWRITE INTO TABLE observations;

observations.csv ファイルには、observation_idtelescopeobservation_dateyyyy-MM-dd 形式)、および observation_timeHH:mm:ss 形式)の列を持つサンプル 観測データが含まれています。

year() 関数の使用

この手順では、Hive の year() 関数を使用して日付文字列から年を抽出する方法を学びます。

year() 関数は、日付またはタイムスタンプ文字列を入力として受け取り、整数値として年のコンポーネントを返します。

  1. ターミナルで hive コマンドを実行して Hive コンソールを開きます。

  2. observation_date 列から年を抽出するには、次のクエリを実行します。

SELECT observation_id, year(observation_date) AS observation_year
FROM observations;

このクエリは、テーブルの各観測に対する observation_id と対応する年を返します。

  1. year() 関数を他の日付関数や句と組み合わせても使用できます。たとえば、特定の年の観測をフィルタリングするには、次のクエリを使用できます。
SELECT *
FROM observations
WHERE year(observation_date) = 2022;

このクエリは、observation_date の年のコンポーネントが 2022 であるすべての観測を返します。

datediff() 関数の使用

この手順では、Hive の datediff() 関数を使用して 2 つの日付の差を計算する方法を学びます。

datediff() 関数は、2 つの日付またはタイムスタンプ文字列を入力として受け取り、それらの間の日数を返します。

  1. 既に開いていなければ Hive コンソールを開きます。

  2. 2 つの観測日付の間の日数を計算するには、次のクエリを実行します。

SELECT observation_id,
       observation_date,
       '2022-12-31' AS reference_date,
       datediff('2022-12-31', observation_date) AS days_until_end_of_year
FROM observations;

このクエリは、observation_idobservation_date、参照日付 (2022-12-31)、および observation_date と参照日付の間の日数 (days_until_end_of_year) を返します。

  1. datediff() 関数を他の日付関数や句と組み合わせても使用できます。たとえば、特定の日付範囲内の観測をフィルタリングするには、次のクエリを使用できます。
SELECT *
FROM observations
WHERE datediff(observation_date, '2022-01-01') BETWEEN 0 AND 180;

このクエリは、observation_date が 2022 年 1 月 1 日から 2022 年 6 月 30 日まで(両端含む)のすべての観測を返します。

date_format() 関数の使用

この手順では、Hive の date_format() 関数を使用して日付文字列をある形式から別の形式に変換する方法を学びます。

date_format() 関数は 2 つの引数を取ります。日付またはタイムスタンプ文字列と、形式パターンです。指定された形式パターンで日付またはタイムスタンプ文字列を返します。

  1. 既に開いていなければ Hive コンソールを開きます。

  2. observation_date 列を yyyy-MM-dd 形式から MMM dd, yyyy 形式に変換するには、次のクエリを実行します。

SELECT observation_id,
       observation_date,
       date_format(observation_date, 'MMM dd, yyyy') AS formatted_date
FROM observations;

このクエリは、observation_id、元の observation_date、および MMM dd, yyyy 形式(例:Jun 15, 2022)の整形済み日付 (formatted_date) を返します。

  1. date_format() 関数を他の日付関数や句と組み合わせても使用できます。たとえば、特定の日付形式に基づいて観測をフィルタリングするには、次のクエリを使用できます。
SELECT *
FROM observations
WHERE date_format(observation_date, 'yyyy/MM/dd') = '2022/06/15';

このクエリは、observation_dateyyyy/MM/dd 形式に整形したときに 2022/06/15 に等しいすべての観測を返します。

add_months() 関数の使用

この手順では、Hive の add_months() 関数を使用して日付に月を加えるか減らす方法を学びます。

add_months() 関数は 2 つの引数を取ります。日付またはタイムスタンプ文字列と、加えるまたは減らす月数を表す整数値です。

  1. 既に開いていなければ Hive コンソールを開きます。

  2. observation_date 列に 6 か月加えるには、次のクエリを実行します。

SELECT observation_id,
       observation_date,
       add_months(observation_date, 6) AS date_plus_six_months
FROM observations;

このクエリは、observation_id、元の observation_date、および observation_date から 6 か月後の日付 (date_plus_six_months) を返します。

  1. add_months() 関数を他の日付関数や句と組み合わせても使用できます。たとえば、特定の月の範囲内の観測をフィルタリングするには、次のクエリを使用できます。
SELECT *
FROM observations
WHERE month(add_months(observation_date, 6)) BETWEEN 1 AND 6;

このクエリは、observation_date から 6 か月後の日付の月のコンポーネントが 1 月から 6 月まで(両端含む)のすべての観測を返します。

まとめ

この実験では、ビッグデータ処理のための強力なデータウェアハウジングソリューションである Hadoop Hive の日付操作関数の世界を探りました。火星を周回する未来派の宇宙ステーションを舞台にした魅力的なシナリオを通じて、天文学的観測を分析する任務を負う優れたデータ アナリストであるエマ・ウィルキンズ博士の旅をたどりました。

year()datediff()date_format()add_months() などの日付操作関数を習得することで、ウィルキンズ博士は日付と時刻データを効率的に操作し分析する能力を身につけ、天文学の分野で画期的な発見につながるパターン、トレンド、異常を明らかにすることができました。

実験全体を通じて、手を動かしながら学べる例を掘り下げ、スムーズな学習体験を保証するためのチェッカーを用意しました。実験の対話型の性質により、学習者はこれらの重要な関数の理解を練習し強化することができ、より高度なデータ分析技術のための堅牢な基礎を築くことができました。

全体的に、この実験は貴重な技術スキルを伝えるだけでなく、広大な宇宙に対する驚きと好奇心を醸し出しました。天文学データに隠された秘密を解き明かすツールを学習者に与えることで、私たちは未来の科学者たちが人間の知識と探索の限界を押し広げる道を切り開きました。