現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。8月にヤフーのデータプラットフォームチームのインターンシップに参加した山添です。今回はインターンで検証を行ったカラムナフォーマットにおけるエンコーディング方式について紹介します。本ブログでは、特に数値型のエンコーディング方式について、データ圧縮率への効用を確認します。カラムナフォーマットとは昨今のデータ社会では、ログデータや購買データ、位置情報データなどさまざまなデータがものすごいスピードで生み出されています。企業ではそのような大規模なデータを蓄えておく必要があります。テキストフォーマットだと思います。これらのフォーマットは、データ保存時にスキーマを必要としない、人間からの可視性が高いなどの利点がありますが、データの圧縮効率が低いことや、処理性能の低さなどのデメリットもあります。そこで、データの圧縮効率と利用効率を求めて提案されたのがカラムナフォーマットです。カラムナフォーマットは、大規模なデータを効率よく保存、利用するための仕組みで、圧縮効率が高いこととデータの利用効率が高いことが特長として挙げられます。カラムナフォーマットは、同じ属性のデータが集まる列方向にデータを圧縮することでデータの圧縮効率を高めることができます。必要な列のデータだけを取り出すことができるため、データの利用効率も高くなります。利用できますが、これらの実装ではデータ保存時にスキーマを必要とするため、テキストフォーマットの利点であったデータ保存時の気軽さが失われてしまいます。呼ばれる技術を使ってネストデータを自動的に展開します。比べて優っていると言えます。カラムナフォーマットのデータ圧縮では、まず、データの分布や統計量などに基づき最適な符号化が行われます。この符号化技術をエンコーディングと呼びます。代表される一般的な圧縮技術を適用します。カラムナフォーマットでは列単位でデータを圧縮するため、同じ属性のデータをまとめて符号化します。そのため、各列に最適なエンコーディング方式を選択できるメリットがあります。今回は、gzipなどの圧縮前に適用されるエンコーディング方式に着目しています。データ型ごとのエンコーディング方式紹介エンコーディング方式には各データ型に適した手法が存在しています。以下では代表的なエンコーディング方式を紹介します。数値型エンコーディングに焦点をおきました。インデックスと数を保持することによってデータを圧縮します。違った方法を使っています。スキップすることでカラムサイズを少なくします。インデックスを比較し、小さい方を保持します。そのためインデックスの数の最大値を要素数の半分にできます。データからユニークな値をもとに辞書情報、文字長と参照情報を取得し、エンコードします。データのカーディナリティが低い場合にはうまく効きますが、カーディナリティが高くなるにつれて辞書情報が大きくなり、圧縮効率が低下してしまいます。カーディナリティとは、データに含まれるユニークな値の数を指します。方式は符号付き(signed)データのエンコードに適用されます。2進数で表現されるため、負の数を表現には最大のビット数が必要です。変換することで、データの圧縮効率を高めます。具体的には、正の数と負の数を行ったり来たり(ジグザグに)変換します。...、とエンコードされます。方式は同じ値が連続するデータをまとめて保持する方法です。どんなデータが何回繰り返されたかを保持することで、データの圧縮効率を高めます。繰り返しの多いデータに適しており、数値型以外にも適用できます。するデータに適したエンコーディング方式です。ベースの値からの差を保持することで、データ圧縮効率を高めます。ヘッダーでベースの値と値が増加していくのか、減少していくのかを保持します。bit)を用いて表現可能な場合に効果を発揮します。外れ値データをパッチリストを用いることで補います。このような方法を取ることで、一番大きな数値にビット数を合わせる無駄を削減できます。3種類で比較しました。本節では、本題の数値型エンコーディング方式の比較をします。データ圧縮にもたらす効果を、疑似データを使って実験することで調査しました。それぞれに全てのエンコーディング方式が実装されている訳ではありません。実装されている数値型エンコーディング方式をまとめます。エンコーディング方式の実装が豊富です。ない強みを持つカラムナフォーマットとして誕生した経緯もあり、エンコーディング方式については最低限の実装しかされていません。実用上、データ圧縮率も重要な要素であることは間違いありません。このことから、今回の目的として、上記のエンコーディング方式の充実度がデータ圧縮率にどれ程影響を与えるのかを明らかにすることとしました。使って、さまざまな特徴を持つデータを圧縮し、それぞれのデータ圧縮率にどれ程の差があるかを確認します。実装されており、これらのツールを用いて、データのエンコードと圧縮に伴うデータサイズの比較をしました。一様分布なデータ一様分布なデータには特に特徴がないため、どのエンコーディング方式も効果がない事になります。このことから、一様分布なデータにおける圧縮サイズを基準として、他のデータ分布における圧縮率を計算します。変換した際のデータサイズを以下に示します。データフォーマットに必要な管理情報が含まれており、管理情報の差異がこのデータサイズの違いとして現れています。各データに対するエンコードとデータ圧縮の違いを比較できます。以下に、入力データに対するエンコードの寄与率を計算する方法を示します。負の数を含むデータ(正規分布)次に負の数を含むデータを圧縮します。平均とする正規分布を生成しました。エンコーディングの寄与率が高いことが分かります。エンコーディングの寄与率は若干低いものとなっています。インクリメンタルなデータ次にインクリメンタルなデータに対する圧縮効果を比較してみます。インクリメンタルなデータとして、1ずつ単調増加するデータランダムに単調増加するデータ稀に減少を含むデータ(全体の1%が前の値から減少する)の3種類のデータを用いて実験しました。以下に結果を示します。寄与率がかなり高いことが分かります。実装されていることで、データを効率よく圧縮できています。減少を含むデータに対してはうまく機能しないようです。するため、寄与率が低くなっています。繰り返しのあるデータ次に、同じデータが連続するデータに対してフォーマット変換を行います。効くことが予想されます。エンコーディングの寄与率がほとんど同じ結果になりました。外れ値を含むデータ最後に、外れ値を含むデータに対する圧縮圧縮効果を測定します。データの外れ値が発生する割合を、1%、5%、10%に設定して実験しました。以下にそれぞれの結果を示します。エンコーディングの寄与率が高くなる結果となりました。外れ値を含む割合が増えれば増えるほどエンコーディングの効果が低くなります。外れ値の割合が増えるとパッチリストのサイズが大きくなるので、予想通りの結果と言えます。まとめ調査の結果、インクリメンタルなデータや外れ値を含むデータには、それぞれに適したエンコーディング方式を用いる事でデータ圧縮に大きな効果があることが分かりました。エンコーディングを強みとしており、実装されている手法が豊富です。いうエンコーディングとは別の強みがありますが、エンコーディングもデータサイズの面で重要であることが明らかになりました。伸び代のあるファイルフォーマットであるといえます。オープンソースとして公開されています。今回行った調査結果をもとに、いろいろな方が知恵を出し合い、より良いものを作れていければ良いと思いました。インターンシップ担当メンターより今回のインターンシップで山添さんを担当した大戸です。して公開、開発が進められています。比較し、利用検討を行うためのドキュメントが必要になります。貢献が増えていくことが期待できます。貢献がどのようなものかを感じていただけたようです。して独り立ちできるような取り組みをしていきたいと思います。貴哉エンジニア(インターンシップ)筑波大学大学院1年。情報セキュリティの研究室でデータのプライバシー保護、安全な機械学習モデルの訓練手法について研究している。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。