Hierarchical Data Format
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 はこのフォーマットの旧バージョンだが、HDF グループは現在も積極的にサポートしており、多次元配列、ラスターイメージ、テーブルなど、多様なデータモデルに対応している。それぞれに集計データタイプが定義され、データとメタデータの読み取り、書き込み、および構造化のための API が提供されている。 HDF 開発者やユーザーは、新しいデータモデルを追加できる。
HDF は自己記述型であり、アプリケーションは外部情報なしでファイルの構造と内容を解釈できる。 1つの HDF ファイルには関連するオブジェクトが混在し、それぞれがグループまたは個別のオブジェクトとしてアクセスできる。 ユーザーは、「vgroup」と呼ばれる独自のグループ化構造を作成できる。
HDF4 には多くの制限がある   。まず、明確なオブジェクトモデルがないため、継続的なサポートと改善が困難である。 多くの異なるインターフェイススタイル(画像、テーブル、配列)をサポートすることで、API が複雑になる。メタデータのサポートは、使用されているインターフェースによって異なる。 SD (Scientific Dataset)オブジェクトは任意の名前付き属性をサポートするが、他のタイプは事前定義されたメタデータのみをサポートする。 アドレス指定に32ビットの符号付き整数を使用しているため一つのファイルの容量が 2 GB までに制限されていることが一番の問題かもしれない。このことは、現代科学の多くの場面で受け入れられない。
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)を使用してファイルコピーを生成しないと、ファイル内で解放できない。
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)
CGNS – HDF5 をメインのストレージとして使用する
Common Lisp –  ライブラリ
D – 開発中の高レベルの h5py スタイルの D ラッパーを使用して、を提供する
Dymola – リリース Dymola 2016 FD01 で SDF (Scientific Data Format) と呼ばれる実装を使用したHDF5エクスポートのサポートを導入した
Erlang、Elixir、LFE は、を使用できる
GNU データ言語
Go – のパッケージ。
– C、C++、Java、Python、C#、Fortran、R の高水準言語(SQL に類似)を介して HDF5 ファイルを管理できる
Huygens Software – バージョン3.5以降、プライマリのストレージ形式として HDF5 を使用している
IGOR Pro –  ファイルを
JHDF5  – 一部のユーザーが簡単だと感じる公式の HDF5 Java バインディングとは異なるアプローチを取る代替 Java バインディング
– HDF5ファイルへの読み取り専用アクセスを提供する純粋なJava実装
JSON –  。
Julia – パッケージを通じて HDF5 サポートを提供する
LabVIEW –  や  などのサードパーティライブラリを通じてHDFサポートを取得できる。
– ライブラリを介した Lua
MATLAB, Scilab, Octave – 最近のリリースでは、HDF5をプライマリストレージフォーマットとして使用
Mathematica  – HDF および HDF5 データの即時分析を提供する
Python –  (HDF5 概念への高レベルと低レベルの両方のアクセス)と (高度なインデックス作成とデータベースのようなクエリ機能を備えた高レベルインターフェイス)を介して HDF5 をサポートする。
HDF4 は、 またはを介して、Python 2 とPython 3 の両方で利用できる。
データ操作パッケージ pandas は、 PyTables を介してHDF5 からのインポートおよび HDF5 へのエクスポートが可能である
R –  および  パッケージでサポートする
Rust –  などのサードパーティライブラリを介して HDF サポートを取得できる
Apache Spark HDF5 コネクタ – Apache Spark の HDF5 コネクタ
Apache Drill HDF5 プラグイン – Apache Drill の HDF5 プラグインは、HDF5ファイルを介したSQLクエリを可能にする。
– 相互運用可能な HDF5 データ製品作成 GUI ツール
– HDF、HDF5、netCDF データファイル形式を読み取るデータ視覚化プログラム
– HDF ファイル用のブラウザとエディタ
– Python で記述された HDF5 および PyTables ファイル用のブラウザおよびエディタ