In Silico

マテリアルズインフォマティクス・材料

Materials Projectが中核データの一括配布を列形式の表へ

2026/10/3

  • Materials Project
  • マテリアルズインフォマティクス
  • データ基盤
  • parquet
  • Delta
  • Arrow
  • LeMaterial
  • MPDataset
  • JSON
  • 列形式
  • mp-api
  • Alexandria
  • AWS
  • S3
  • column pruning
  • MongoDB
  • incar
  • Hugging Face
  • LeMat-Bulk
  • Open Data
  • predicate pushdown
  • Python
  • OQMD
目次
背景・問い・要点
背景

材料の計算結果を集めた公開データベースから、全材料のデータをまとめて取り出して使う研究者がいる。たとえば、狙ったバンドギャップを持つ候補を全材料から絞り込む。あるいは、全材料の計算結果を機械学習モデルの学習データにする。こうした使い方のために、材料データベースの中には、全件をまとめてダウンロードできるファイルを配っているものがある。

よく使われてきた配り方は、材料一件ごとの記録をJSON形式の文書として書き、それを多数まとめて圧縮したファイルである。本稿はこの配り方を文書型と呼ぶ。一件の文書には、結晶構造、エネルギー、計算の設定など多くの項目が入っている。全材料のバンドギャップだけが欲しい利用者も、ファイルを展開して全部の文書を読み込み、その後で必要な項目を選ぶことになる。使わない項目まで読むので、そのぶん時間とメモリを使う。

問い

全件を配る形式を、文書型のJSONから列形式の表に変えると、利用者が読む量はどう変わり、代わりに何が要るのか。

要点

Materials Project(MP)が2026年6月に中核データの一括配布をJSONの束から列形式の表へ変えたことで、全件を受け取る利用者も、必要な列と条件に合う行だけを読めるようになった。 文書型で読む量は件数と一件の項目数の積で決まり、列形式で読む量は読み込みのときに指定した列と条件で決まる。ただし代償が二つあり、一つは、mp-apiで全件を手元に落とす使い方では置く量が全件ぶんのまま残ることで、MPの計算記録を集めたtasksコレクションは10GBを超える1。もう一つは、項目の形が一件ごとに違うデータを、全行が同じ列を持つ表に収める変換で、MPの作り手はこれを作業中としている1。

モデル・例示

六件の材料の表で、読む値の数を数える

※ この節の数値は説明のための仮定で、測定値ではありません。

材料が6件あり、一件ごとに、材料ID・バンドギャップ・生成エネルギー・計算の設定の4つの項目を持つとする。値の総数は6×4で24である。利用者はバンドギャップが1eVより大きい材料の、バンドギャップの値だけを欲しいとし、該当する材料は3件とする。

文書型では、この利用者は24の値をすべて読む。文書は一件ずつ丸ごと書かれているので、バンドギャップの値だけを取り出すには、6件の文書を全部読み込み、それぞれから1項目を選ぶ。読む量は6×4のままで、欲しい項目が1つでも減らない。

列形式の表では、バンドギャップの値が6件ぶん続けて一か所に並ぶ。利用者が読み込みのときにバンドギャップの列だけを読むと指定すると、読むのはその6値で、残りの18値は読まない。さらに列形式のファイルは、行を何件かずつのかたまりに分けて置き、かたまりごとに各列の値の範囲を控えている。行を3件ずつ2つのかたまりに分け、後ろのかたまりのバンドギャップがすべて1eV以下なら、1eVより大きいという条件を読み込みのときに渡した利用者は、後ろのかたまりを読まずに飛ばす。読むのは前のかたまりの3値だけになる。24、6、3と、読む量は指定した列と条件で決まる。

24、6、3の三つの数から言えることを、性質として三つに分ける。

  1. 読む量の決まり方。 文書型で読む量は件数×一件の項目数で、欲しい項目の数によらない。列形式で読む量は必要な列数×条件に合うかたまりの行数で、読み込みのときに列と条件を渡したときだけ減る。全件の全項目を使う利用者には差が出ない(どちらも24)。
  2. 置く量。 表に変えても、手元に置く値は24のままである。読む量が減っても、全件を手元に置く使い方である限り、置く量は減らない。
  3. 表の制約。 表は全行が同じ列を持つ。例では、計算の設定という項目の中の項目名が材料ごとに違うなら、その材料の記録はそのままでは表に入らず、列を揃える変換が要る。元のデータが不揃いなほど、この変換は増える。

MPは中核データを、列形式のファイルの集まりを一つの表にして配る

Materials Project(MP)は、材料の計算結果を集めた公開データベースである。MPはこれまで、条件と項目を指定して絞り込めるAPIの問い合わせ2と並んで、全件のデータをAWSの公開データセットの枠組みであるOpen Dataでも配ってきた3。そのファイルは文書型である。計算結果から作ったコレクションは、一行に一件のJSONを書いたファイルを版ごとに圧縮して置き、計算の出力を解析した記録は、多くを材料IDごとにgzip圧縮したJSONで置いて、一行に一件の形へまとめ直している途中である3。MPの内部でも、すべてのデータ製品は、JSONに似た文書を一件ずつ保存するデータベースであるMongoDBに保存されてきた1。

2026年6月8日に本番化した版v2026.04.13で、中核のデータ製品はAWSのファイル保存サービスS3の上のDeltaテーブルに置かれるようになった4。表を列形式で保存するファイル形式がparquetで、大きなデータセットは一つのparquetファイルに収まらないことが多いと作り手は書く1。配る側では、多数のファイルを一つの表として管理する層がファイルの上に要り、この層を担う仕組みをオープンテーブルフォーマット(open table format、OTF)と呼ぶ5。MPが選んだOTFがDeltaである5。読む側では、列形式のデータをメモリ上で扱うライブラリArrowが、複数のparquetファイルを一つの表として読む1。

MPが公開する利用者向けのPythonクライアントmp-apiには、この変更を扱う機能が加わった4。加わった機能の中心がMPDatasetで、tasksコレクション(個々の計算の記録を集めたコレクション)なら丸ごと手元にダウンロードし、Arrowでメモリを節約しながら少しずつ読む1。MPの一覧では、tasksのほかsummaryやthermoなど23のデータ製品がこの形とmp-apiの連携に対応し、分子のデータなどは移行の途中である6。

列形式へ移した理由そのものを、MPは移行の告知でも解説頁でも述べていない。MPが理由を書いているのはAWSのOpen Dataで配ることについてで、使いやすくすること、ダウンロードを大きく改善すること、自前のサーバーの負荷を減らすことを挙げる3。列形式の利点については、クラウドでは転送と読み出しの効率がそのまま費用に効くと述べる文献が多い、と解説頁が紹介するにとどまる5。一方、MPは同じ解説の別の頁で、parquetとDeltaの形で公開したことにより、mp-apiのPythonクライアントでは用意されていないことがある処理を利用者が自分で組めるようになった点を、利点として挙げる7。

MPの解説は必要なものだけ読むことを、実測は全件ぶんの容量を示す

MPの解説頁が利用者に押さえてほしいと書く発想は二つで、どちらも列形式の表で読む量を、必要な列と条件に合う行だけに減らすものである。predicate pushdownは、絞り込みの条件に合わない行のかたまりを読む前に飛ばす仕組みである。列形式のファイルは行を何件かずつのかたまりに分けて置き、かたまりごとに各列の値の範囲を控えているので、条件に合う値を含まないかたまりは読まずに済む。column pruningは、必要な列だけを読む仕組みである。作り手はこの二つを「the most important concepts to understand and keep in mind are predicate pushdown and column pruning , or in lay-terms reading only what you need」とまとめる5。parquetでは、読む側が要らない列を読み込みの前に外せる5。

読む量が減るのは読み込みのときに列と条件を渡したときだけだ、という条件は、MPDatasetの使い方の注意として現れる。MPDatasetは従来の問い合わせの戻り値と同じように振る舞うので既存のコードはそのまま動くが、添字で一件ずつ読むと最適でないという警告が出る1。作り手は同じ絞り込みを二通りで示す。Pythonで全件を回す書き方には「this will finish, eventually」と注記し、条件と列をArrowに渡す書き方は普通のマシンで長くても数秒と書く1。列と条件を渡して読んだ後も、列形式の表からPythonのオブジェクトへ戻すこと自体に時間がかかる。作り手が示したところでは、r2SCANで計算した非金属の4万2千件の構造を、材料の構造を扱うPythonライブラリpymatgenの形へ戻すと、変換が2回かかり、秒のオーダーで終わる1。作り手は、PyArrowの書き方は最初は不慣れでも、Pythonオブジェクトへの変換をできる限り遅らせ、Arrowの計算エンジンを使うことで得る性能の利得は学習の手間に見合うと書く1。この学習の手間は使い方に慣れれば薄れるので、一時的な代償である。

読む量が減っても手元に置く量は減らないことを示す実測は、ディスク容量である。tasksコレクションの全件は、効率のよいparquet表現でも10GBを超え、mp-apiのMPDatasetはこの全件を手元にダウンロードする1。全件を手元に置く使い方である限り、形式を変えても全件ぶんのデータを置くことになる。一方でMPは、S3に置いたままのtasksの表と状態密度の表を外部の問い合わせエンジンDuckDBで条件を付けて読み、結果だけを手元のparquetファイルに書き出す例も示している7。その例で手元に残るのは、GGA+Uで計算された六方晶の材料の状態密度のデータ、約3800件である7。この読み方では、問い合わせの速さがネットワークの速さに縛られると作り手は注記する7。ただしS3を直接読むとmp-apiの保護が外れ、データごとの利用条件とアクセス制限は利用者が自分で確かめることになる7。

表に収める変換は、MPでは作業中で、LeMaterialでは出典ごとの形の揃え直しになる

MPのデータで、中身の形が一件ごとに違うために全行が同じ列を持つ表へそのままでは収まらない項目として、原典はincarを挙げる。incarは計算プログラムVASPの設定を並べた項目で、作り手は中身が極めて不均質な辞書だと書く1。MongoDBの文書は項目の組み合わせを一件ごとに変えられるが、parquetの表は全行が同じ列を持ち、作り手はこの二つを相容れないと書く1。incarに一様に厳密な型を付けるには、いったん文字列に変えて保存し、読んだ後で戻すほかなかった1。戻す処理は、MPのデータ製品の型を定める文書モデルが引き受けるが、作り手は最良の性能のために、やはり戻しをできる限り遅らせるよう勧める1。

作り手は、この相容れなさから来る課題を「consider this issue a work-in-progress」と書き、利用者が回避策を意識せずに済むよう対応を進めている1。

複数のデータベースを一つの表にまとめると、全行が同じ列を持つ表に収めるための変換は出典ごとに項目の形を揃える作業になる。LeMaterialはEntalpicとHugging Faceが主導する共同プロジェクトで、MP・Alexandria・OQMDなどを統合・整形した一つの形式(670万件・7物性)を、Hugging FaceのデータセットLeMat-Bulkとして配る8。LeMaterialが課題に挙げるのは、MP・Alexandria・OQMDが「形式・パラメータ・範囲で異なる」ことである8。具体的には、形式や項目定義の不一致・両立しない計算といった統合の問題と、データベースにまたがる似た材料をつなぐ識別子の欠如である8。作り手はこの状態を「断片化した状況」と呼び、既存データを活かす妨げになると書く8。

形を揃える変換の例は、LeMat-Bulkの項目の説明に出ている。LeMat-BulkはOQMDの整数のIDを「oqmd-」付きの文字列に変え、OQMDが短い表記で持つ応力を3×3の形に直して、一つの表に収めている9。

これとは別に、出典ごとの計算条件の違いを、LeMat-Bulkは行を混ぜて使ってよいかの問題として扱う。計算条件から見て他の行と混ぜてよいかを列cross_compatibilityで示し、混ぜてよい行だけの分割を既定にする一方、全件の分割Allには揃わない行も残す9。2025年4月17日付の更新履歴の項(見出しは版を「NOT YET RELEASED」と記す)は、Ybという元素の計算条件の一つをMPと同じものへ変えたこと、力の大きい構造の除外、MPの2020年版の補正方式に合わせたエネルギー補正の付与を記録する9。MPの条件に合わせた結果、Ybを別の条件で計算しているAlexandriaやOQMDとは揃わなくなり、Ybを含む材料はどれも、他の出典と混ぜてよいことを示すcross_compatible=Trueを持たなくなった9。

出典9件
  1. Materials Project「Arrow Datasets & the MPDataset Interface」(2026-09-28 取得). https://docs.materialsproject.org/materials-project-data-lakehouse/arrow-datasets — MPDatasetの使い方、tasks全件が10GBを超えること、incarのような不均質な項目を表に収める課題が作業中であること。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16

  2. Materials Project「Querying Data」(2026-09-30 取得). https://docs.materialsproject.org/downloading-data/using-the-api/querying-data — APIの問い合わせで、条件と返す項目を指定して絞り込めること。 ↩

  3. Materials Project「AWS Open Data」(2026-09-28 取得). https://docs.materialsproject.org/downloading-data/aws-opendata — 全件をAWSのOpen Dataでも配る理由と、版ごとのgzip圧縮JSONLや材料IDごとのJSONで置く形。 ↩ ↩2 ↩3

  4. Materials Project「Database Versions」(2026-09-28 取得). https://docs.materialsproject.org/changes/database-versions — 版v2026.04.13が2026年6月8日に本番化し、中核データがS3上のDeltaテーブルへ移り、mp-apiに対応機能が加わったこと。 ↩ ↩2

  5. Materials Project「Arrow, Parquet, and OTFs」(2026-09-28 取得). https://docs.materialsproject.org/materials-project-data-lakehouse/arrow-parquet-and-otfs — 必要なものだけ読むpredicate pushdownとcolumn pruning、列形式の利点の紹介、表形式にDeltaを選んだこと。 ↩ ↩2 ↩3 ↩4 ↩5

  6. Materials Project「Supported Data Products」(2026-10-02 取得). https://docs.materialsproject.org/materials-project-data-lakehouse/supported-data-products — Parquet/Deltaとmp-apiに対応した23のデータ製品と、移行途中の分子データなどの一覧。 ↩

  7. Materials Project「Leveraging External Query Engines」(2026-09-30 取得). https://docs.materialsproject.org/materials-project-data-lakehouse/leveraging-external-query-engines — S3上の表をDuckDBで直接読み約3800件の状態密度を書き出す例と、速さがネットワークに縛られmp-apiの保護が外れる注意。 ↩ ↩2 ↩3 ↩4 ↩5

  8. Alexandre Duval ほか「LeMaterial: an open source initiative to accelerate materials discovery and research」Hugging Face, 2024. https://huggingface.co/blog/lematerial — MP・Alexandria・OQMDの統合と、出典ごとに形式が違う課題。 ↩ ↩2 ↩3 ↩4

  9. LeMaterial「LeMat-Bulk」dataset card(2026-09-28 取得). https://huggingface.co/datasets/LeMaterial/LeMat-Bulk — OQMDのIDや応力の形の揃え直し、混ぜてよい行を示すcross_compatibility列、Ybの計算条件の変更の記録。 ↩ ↩2 ↩3 ↩4

この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。