Hierarchical Data Format (HDF) について
HDF(Hierarchical Data Format)は、大量のデータを効率的に格納し、構造化するために設計されたファイル形式の集合です。主にHDF4とHDF5の2つのバージョンが存在し、それぞれに特徴があります。
開発は、
米国立スーパーコンピュータ応用研究所(N
CSA)が開始し、現在は非営利法人であるHDFグループが、技術開発とデータの継続的な提供を担っています。HDFのライブラリと関連ツールは、
BSDライセンスの下で無償で利用でき、多様な商用・非商用ソフトウェアプラットフォームやプログラミング言語でサポートされています。
HDFの歴史
当初、HDFは「AEHOO(All Encompassing Hierarchical Object Oriented)」という名称で、1987年にN
CSAのグラフィック財団タスクフォース(GFTF)によって研究が開始されました。1990年代初頭には、NSFからの助成金がプロジェクトを大きく後押ししました。また、NASAの
地球観測システム(EOS)プロジェクトでは、15種類のファイル形式が調査された結果、HDFがデータ標準として採用されました。
HDF4
HDF4は旧バージョンですが、現在もHDFグループによってサポートされています。多次元配列、ラスターイメージ、テーブルなど、多様なデータモデルに対応しており、各データモデルには集計データタイプが定義され、データの読み書きや構造化のためのAPIが提供されています。ユーザーは、新しいデータモデルを追加することも可能です。
HDF4は自己記述型で、アプリケーションは外部情報なしにファイルの構造と内容を解釈できます。1つのHDFファイルには、関連するオブジェクトが混在しており、それぞれがグループまたは個別のオブジェクトとしてアクセスできます。ユーザーは「vgroup」と呼ばれる独自のグループ化構造を作成することも可能です。
しかし、HDF4にはいくつかの制限があります。まず、明確なオブジェクトモデルがないため、継続的なサポートや改善が困難です。また、異なるインターフェーススタイル(画像、テーブル、配列)をサポートすることで、APIが複雑化しています。さらに、メタデータのサポートはインターフェースによって異なり、SD(Scientific Dataset)オブジェクトは任意の属性をサポートしますが、他のタイプは事前定義されたメタデータのみをサポートします。特に、アドレス指定に32ビットの符号付き整数を使用しているため、ファイル容量が最大2GBに制限されている点は、現代の科学データには不十分です。
HDF5
HDF5は、HDF4の制限に対処し、よりモダンなシステムやアプリケーションの要求に対応するために設計されました。2002年には
R&D 100 Awardを受賞しています。
HDF5では、ファイル構造が簡素化されており、オブジェクトのタイプはデータセットとグループの2つのみです。
- - データセット: 同じタイプの多次元配列を格納します。
- - グループ: データセットや他のグループを保持できるコンテナ構造です。
この構造により、HDF5はファイルシステムのような階層的なデータ形式を実現しています。実際、HDF5ファイル内のリソースには、
POSIX風の構文(例: /path/to/resource)でアクセスできます。メタデータは、グループとデータセットに添付されたユーザー定義の属性として保存されます。
データセット、グループ、属性を利用して、より複雑なストレージAPIを構築し、画像やテーブルを表現できます。また、HDF5には改良された型システムや、データセット領域での選択を表すデータスペースオブジェクトが含まれています。APIは、データセット、グループ、属性、タイプ、データスペース、およびプロパティリストに関して、オブジェクト指向の設計となっています。
Net
CDFの最新バージョン(version 4)は、HDF5をベースとしています。HDF5は、B木を用いてテーブルオブジェクトのインデックスを作成するため、株価シリーズ、ネットワークモニタリングデータ、3D気象データなどの
時系列データに適しています。データへのアクセスは、
SQLデータベースの行よりも高速であり、単純な配列(テーブルオブジェクト)に対して特に高速です。また、非配列データにはB木アクセスを利用できます。
批判
一方で、HDF5はそのモノリシックな設計や長い仕様から批判されることもあります。また、HDF5は
UTF-8の使用を強制しないため、クライアントアプリケーションは
ASCIIを想定している場合があります。データセットのデータは、外部ツールを使用しない限り、ファイル内で解放することができないという課題もあります。
インターフェース
HDFは、多くのプログラミング言語やツールで利用可能です。公式にサポートされているAPIには、
C、
C++、
CLI (.Net)、Fortran、Fortran 90、HDF5 Lite(H5LT)、HDF5 Image(H5IM)、HDF5 Table(H5TB)、HDF5 Packet Table(H5PT)、HDF5 Dimension Scale(H5DS)、
Javaなどがあります。
さらに、
CGNS、
Common Lisp、D、Dymola、
Erlang、Elixir、LFE、GNU Data Language、Go、HDFql、Huygens Software、IDL、IGO
R Pro、JHDF5、jHDF、、Julia、
LabVIEW、lua-hdf5、MATLAB、
Scilab、Octave、
Mathematica、
Perl、
Python、
R、
Rustなど、多くのサードパーティバインディングやツールが存在します。
Pythonでは、h5py(HDF5への高レベルと低レベルの両方のアクセス)やPyTables(高度なインデックス作成とデータベースのようなクエリ機能)が利用でき、データ操作パッケージpandasでは、PyTablesを通じてHDF5のインポート・エクスポートが可能です。
Rでは、rhdf5やhdf5rパッケージでサポートされています。
ツール
HDFを操作するためのツールも豊富です。
Apache Spark HDF5コネクタ、
Apache Drill HDF5プラグイン、HDF Product Designer、HDF Explorer、HDFView、ViTablesなどがあります。これらのツールは、データの視覚化、編集、
SQLクエリなどを可能にします。
関連項目
- - Common Data Format (CDF)
- - FITS (天文学で使用されるデータ形式)
- - GRIB (GRIdded Binary) (気象学で使用されるデータ形式)
- - NetCDF
- - Protocol Buffers
外部リンク
この文章は、2008年11月1日以前にFree On-line Dictionary of
Computingから取得した項目の資料を元に、GFDL バージョン1.3以降の「
RELI
CENSING」条件に基づいて組み込まれています。