ETL

ETL

初級

はじめに

Lexiconiaというオンラインマルチプレイヤーゲームを作っている会社で働いています。

このゲームをプレイするには、各プレイヤーに13文字の文字が渡され、それらを並べ替えて単語を作ります。文字によってポイントが異なります。というのも、単語を作りやすい文字とそうでない文字があるからです。

ゲームはもともと英語版としてリリースされましたが、とても人気が出たため、今では会社は他の言語にも展開したいと考えています。

言語が違えば、文字に設定するポイントも変える必要があります。ポイントは、その言語の中でそれぞれの文字がどれくらいよく使われるかを基準に決められます。

たとえば、'C'という文字は英語ではよく使われる方で、ポイントはわずか3です。しかしノルウェー語ではとても珍しい文字で、ポイントは10になります。

新しい言語を追加しやすくするために、チームはゲーム内で文字とそのポイントを保存する方法を変える必要があります。

説明

ゲームにおける文字とその得点のデータ形式を変更するのが、この課題です。

現在、文字は得点に基づいてグループ分けされて格納されており、1対多のマッピングになっています。

  • 1点: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
  • 2点: "D", "G",
  • 3点: "B", "C", "M", "P",
  • 4点: "F", "H", "V", "W", "Y",
  • 5点: "K",
  • 8点: "J", "X",
  • 10点: "Q", "Z",

これを、各文字とその得点を1対1のマッピングで格納する形式に変更する必要があります。

  • "a"は1点です。
  • "b"は3点です。
  • "c"は3点です。
  • "d"は2点です。
  • その他の文字も同様です。

この変更の一環として、チームは文字を大文字ではなく小文字にすることも決めました。

Note

データが以前どのように構成されていたか、そしてどのように変更する必要があるかを確認したい場合は、テストスイートの例を見てみてください。

jqのヒント

この演習では、入力のオブジェクトを受け取り、それを新しいオブジェクトに変換します。 役に立つかもしれない組み込み関数を2つ紹介します。

  • to_entries
    • この関数はオブジェクトを入力として受け取ります
    • 出力は_配列_です。配列の各要素は{"key": "K", "value": V}というオブジェクトです
      • 各Kは、入力オブジェクトのキーです
      • 各Vは、Kに対応する値です。
  • from_entries
    • 逆の操作です
    • {"key": K, "value": V}というオブジェクトの配列を受け取り、1つのオブジェクトを組み立てます

例を見てみましょう。

jq -n '
    {
        "username": "glennj",
        "tracks": ["bash", "awk", "jq"],
        "reputation": 123
    }
    | to_entries
'

次のように出力されます。

[
  {
    "key": "username",
    "value": "glennj"
  },
  {
    "key": "tracks",
    "value": ["bash", "awk", "jq"]
  },
  {
    "key": "reputation",
    "value": 123
  }
]
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
jq Exercism

ETLを始める準備はできましたか?

Exercismに登録すれば、12個のコンセプト75個の演習、そして本物の人間によるメンタリングとともに、jqを学んでマスターできます。すべて無料です。