Hierarchical Data Format

Hierarchical Data Format（階層的データ形式、略称：HDF）は、大量のデータを格納および構造化するために設計した一連のファイル形式（HDF4、HDF5）。米国立スーパーコンピュータ応用研究所が開発し、非営利法人である HDF グループが対応している。HDFグループは、HDF5 技術の継続的な開発と HDF で保存しデータの継続的な提供を確保することを使命としている。 

HDF ライブラリと関連ツールは自由なBSDライセンスの下で幅広く利用できる。 HDF は多くの商用および非商用ソフトウェアプラットフォームとプログラミング言語でサポートされている。 無料で利用できる HDF ディストリビューションは、ライブラリ、コマンドラインユーティリティ、テストスイートソース、Java インターフェイス、Java ベースのHDFビューアー（HDFView）で構成されている。  

現行の HDF5 は、旧来の HDF4 とはデザインも API も大きく異なる。

初期の歴史 
ポータブルな科学データ形式は当初 AEHOO（All Encompassing Hierarchical Object Oriented）形式と呼ばれ、1987年に米国立スーパーコンピュータ応用研究所（NCSA）のグラフィック財団タスクフォース（GFTF）によって探求が始められた。 1990年と1992年に受け取った NSF 助成金は同プロジェクトにとって重要だった。 この頃 NASA は、地球観測システム（EOS）プロジェクトで使用するために 15 種類のファイル形式を調査した。2 年間の評価期間を経て、HDF がデータおよび情報システムの標準として採用された。

HDF4 
HDF4 はこのフォーマットの旧バージョンだが、HDF グループは現在も積極的にサポートしており、多次元配列、ラスターイメージ、テーブルなど、多様なデータモデルに対応している。それぞれに集計データタイプが定義され、データとメタデータの読み取り、書き込み、および構造化のための API が提供されている。 HDF 開発者やユーザーは、新しいデータモデルを追加できる。 

HDF は自己記述型であり、アプリケーションは外部情報なしでファイルの構造と内容を解釈できる。 1つの HDF ファイルには関連するオブジェクトが混在し、それぞれがグループまたは個別のオブジェクトとしてアクセスできる。 ユーザーは、「vgroup」と呼ばれる独自のグループ化構造を作成できる。 

HDF4 には多くの制限がある   。まず、明確なオブジェクトモデルがないため、継続的なサポートと改善が困難である。 多くの異なるインターフェイススタイル（画像、テーブル、配列）をサポートすることで、API が複雑になる。メタデータのサポートは、使用されているインターフェースによって異なる。 SD （Scientific Dataset）オブジェクトは任意の名前付き属性をサポートするが、他のタイプは事前定義されたメタデータのみをサポートする。 アドレス指定に32ビットの符号付き整数を使用しているため一つのファイルの容量が 2 GB までに制限されていることが一番の問題かもしれない。このことは、現代科学の多くの場面で受け入れられない。

HDF5 
HDF5 は、HDF4 ライブラリのいくつかの制限に対処し、モダンなシステムとアプリケーションにおける現在および将来的な要件に対応するべく設計された。2002 年にR＆D 100 Awardを受賞した 。  

HDF5 はファイル構造を単純化しており、オブジェクトのタイプには下記の 2 つしかない。 

 データセット - 同じタイプの多次元配列 
 グループ - データセットや他のグループを保持できるコンテナ構造 

このことにより、真に階層的な、ファイルシステムのようなデータ形式になる。実際、HDF5 ファイル内のリソースには、 POSIXのような構文（/path/to/resource）でアクセスできる。 メタデータは、グループとデータセットに添付されたユーザー定義の名前付き属性の形式で保存される。 次に、データセット、グループ、および属性を使用して、画像とテーブルを表すより複雑なストレージAPIを構築できる。 

これらのファイル形式の進歩に加えて、HDF5 には、改良された型システムと、データセット領域での選択を表すデータスペースオブジェクトが含まれている。 APIは、データセット、グループ、属性、タイプ、データスペース、およびプロパティリストに関してオブジェクト指向でもある。 

NetCDF の最新バージョン（version 4）は、HDF5 に基づいている。 

B木を使用してテーブルオブジェクトのインデックスを作成するため、HDF5は株価シリーズ、ネットワークモニタリングデータ、3D気象データなどの時系列データに適している。 データの大部分は SQL データベースの行よりもはるかに高速にアクセスできる単純な配列（テーブルオブジェクト）となるが、非配列データには B 木アクセスを利用できる。 HDF5データストレージの機構は、SQL スタースキーマよりも単純かつ高速である。

批判 
モノリシックな設計と長い仕様から批判されている。 

 HDF5 は UTF-8 の使用を強制しないため、クライアントアプリケーションは多くの場面で ASCII を想定している可能性がある。 
 データセットデータは、外部ツール（h5repack）を使用してファイルコピーを生成しないと、ファイル内で解放できない。

インターフェース

公式にサポートされているAPI 

 C 
 C++ 
 CLI - .Net 
 Fortran, Fortran 90 
 HDF5 Lite（H5LT）– C 用の軽量インターフェイス 
 HDF5 Image（H5IM）– 画像またはラスター用の C インターフェイス 
 HDF5 Table（H5TB）– テーブルの C インターフェイス 
 HDF5 Packet Table（H5PT）– パケットデータを処理する C および C++ のインターフェイス 
 HDF5 Dimension Scale（H5DS） 
 Java

サードパーティのバインディング 

 CGNS – HDF5 をメインのストレージとして使用する 
 Common Lisp – hdf5-cffi ライブラリ 
 D – 開発中の高レベルの h5py スタイルの D ラッパーを使用して、C APIへのバインディングを提供する 
 Dymola – リリース Dymola 2016 FD01 で SDF (Scientific Data Format) と呼ばれる実装を使用したHDF5エクスポートのサポートを導入した 
 Erlang、Elixir、LFE は、BEAM 言語のバインディングを使用できる 
 GNU データ言語 
 Go – gonumのhdf5パッケージ。 
 HDFql – C、C++、Java、Python、C＃、Fortran、R の高水準言語（SQL に類似）を介して HDF5 ファイルを管理できる 
 Huygens Software – バージョン3.5以降、プライマリのストレージ形式として HDF5 を使用している 
 IDL 
 IGOR Pro – HDF5 ファイルを完全にサポートしている 
 JHDF5  – 一部のユーザーが簡単だと感じる公式の HDF5 Java バインディングとは異なるアプローチを取る代替 Java バインディング 
 jHDF – HDF5ファイルへの読み取り専用アクセスを提供する純粋なJava実装 
 JSON – hdf5-json 。 
 Julia – HDF5パッケージを通じて HDF5 サポートを提供する 
 LabVIEW – h5labview や lvhdf5 などのサードパーティライブラリを通じてHDFサポートを取得できる。 
 lua-hdf5 – ライブラリを介した Lua 
 MATLAB, Scilab, Octave – 最近のリリースでは、HDF5をプライマリストレージフォーマットとして使用 
 Mathematica  – HDF および HDF5 データの即時分析を提供する 
 Perl  
 Python – h5py （HDF5 概念への高レベルと低レベルの両方のアクセス）とPyTables （高度なインデックス作成とデータベースのようなクエリ機能を備えた高レベルインターフェイス）を介して HDF5 をサポートする。
HDF4 は、 Python-HDF4またはPyHDFを介して、Python 2 とPython 3 の両方で利用できる。
データ操作パッケージ pandas は、  を介してHDF5 からのインポートおよび HDF5 へのエクスポートが可能である 
 R – rhdf5 および hdf5r パッケージでサポートする 
 Rust – hdf5 などのサードパーティライブラリを介して HDF サポートを取得できる

ツール 

 Apache Spark HDF5 コネクタ – Apache Spark の HDF5 コネクタ 
 Apache Drill HDF5 プラグイン – Apache Drill の HDF5 プラグインは、HDF5ファイルを介したSQLクエリを可能にする。 
 HDF Product Designer – 相互運用可能な HDF5 データ製品作成 GUI ツール 
 HDF Explorer – HDF、HDF5、netCDF データファイル形式を読み取るデータ視覚化プログラム 
 HDFView – HDF ファイル用のブラウザとエディタ 
 ViTables – Python で記述された HDF5 および PyTables ファイル用のブラウザおよびエディタ

関連項目 

 Common Data Format （CDF） 
 FITS – 天文学で使用されるデータ形式 
 GRIB (GRIdded Binary) – 気象学で使用されるデータ形式 
 HDF Explorer 
 NetCDF – Netcdf Javaライブラリは、純粋なJavaを使用してHDF5、HDF4、HDF-EOSおよびその他の形式を読み取る 
 Protocol Buffers – Google のデータ交換形式

脚注

外部リンク 

 HDF Group
 What is HDF5?
 HDF-EOS Tools and Information Center
 Open Navigation Surface

気象情報ネットワーク
ファイルフォーマット