XLSX を Parquet に変換

ここで XLSX を Parquet に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 作り直し ParquetはXLSXとは仕組みが違います。非可逆コーデックのような段階的な劣化ではありません。Parquetが表現できるものは忠実に再現され、対応するものがないものはまったく残りません。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。
  • 知っておきたいこと 読み取るのは最初のシートだけで、しかも値だけです。数式、書式、列幅、そして 2 枚目以降のシートは残されます。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

スプレッドシートは行、Parquet は列で持つ

ワークブックの他の出力先はすべて 1 レコードずつ順に保存します。Parquet はフィールドごとにまとめて保存します。5 万件の注文日をすべて並べ、次に都市をすべて並べ、次に金額をすべて並べるという具合です。これは書式の好みではなく、この形式が存在する理由そのものです。

200 列のうち 2 列だけを読むクエリは全行ではなく 2 列分のバイトだけに触れます。列内で値が繰り返されるほど圧縮も効きます。ファイル末尾には自分自身のスキーマが記録されているので、1 行も読まずに列名と型を知ることができます。

列の型はどう決まるか

型は宣言ではなく値から推定されます。ある列の空でない値がすべて真偽値なら BOOLEAN、すべて 32 ビットの範囲内の整数なら INT32、整数でない数値や範囲外の数値を含むなら DOUBLE、それ以外はすべて文字列になります。

判定はファイル全体を読んでから行われ、先頭だけを見て決めることはしません。読み込みは遅くなりますが、最初の千行がきれいで 4 万行目が違う、という本番でだけ壊れる失敗のクラスをまるごと消せます。

1 つの異質な値が列全体を文字列にする理由

5 千件の数値のあとに SW1A 1AA のような郵便番号が 1 つ混じっていれば、その列は文字列列になり、数値だった部分も文字列として書かれます。

先頭行の型を採用し、合わない値を null にするという代替案は、正しく読み込めて静かに値を消してしまうファイルを作ります。文字列列であれば失われる値はなく、あとから 1 つの式でキャストできます。

大きな整数が INT64 ではなく DOUBLE になる理由

Parquet は 64 ビット整数の型を持ちますが、ここでは使われません。値は JavaScript の数値として届き、それは 53 ビットの整数精度しか持たないので、INT64 として書けばすでに失われている正確さを約束することになります。

9 千兆を超える識別子を扱うなら、変換前にスプレッドシート側でテキストとして保存しておけば文字列列としてそのまま届きます。

大きさの差、実測値

5 万行 6 列のシートで、Parquet ファイルは 301 KB でした。同じデータは .xlsx で約 4.3 MB、タブ区切りテキストで約 1.8 MB でした。

差は圧縮だけによるものではありません。列の中で繰り返される値は 1 度だけ保持され参照されるので、都市名や商品コードの列はほとんど費用がかかりません。差が大きく出るのは業務データで、ほぼすべて異なる自由記述の列では差は縮まります。

日付は日数として届き、タイムスタンプにはならない

スプレッドシートの日付セルが保持しているのは数値と表示書式です。変換はその数値をそのまま書くので、2024 年 1 月 1 日は 45292 になり、整数として型付けされます。

出力にはタイムスタンプの意味は付きません。クエリを実行する側で日数にエポック日を足す 1 行の式を使うほうが、ワークブックをテキストに変換し直すより確実です。

DuckDB や pandas、Spark で読み込む

DuckDB は FROM 句に直接指定でき、pandas は 1 回の呼び出しで読み込め、Spark とその上のクエリエンジンはネイティブなテーブル形式として扱います。ファイルは PAR1 の 4 バイトで始まり終わるので、それだけで見分けられます。

読み込んだあとまず確認すべきは推定された型です。数値だと思っていた列が文字列として届いたら、それはスプレッドシートについての本当の事実を教えてくれています。

1 つのシート、残りのシートへの対応

変換はワークブックの最初のシートだけを読みます。Parquet は 1 つのスキーマを持つ 1 つのテーブルなので、複数シートを 1 つのファイルに無理に統合することはできません。

複数のシートが重要なら、それぞれを別々に変換してクエリエンジン側で結合してください。それが複数のエンジンが設計されている使い方です。

ワークブックはどこで書き出されるか

スプレッドシートの読み込みも Parquet の書き出しも、あなたのブラウザーの中で行われます。顧客データや財務データの書き出しでは、これが決め手になることが多く、変換サービスへのアップロードそのものが方針で禁じられている場合もあるからです。

制約は料金プランではなくメモリーです。シート全体を行として読み込み、列に転置してから書き出すので、数百メガバイトを超えるとブラウザーのタブが厳しくなります。

XLSX を Parquet に変換する手順

  1. お手元の XLSX ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に Parquet を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった Parquet ファイル をダウンロードします。

XLSX と Parquet——何が変わるか

XLSXとParquetの比較
XLSXParquet
正式名称Excel ブックApache Parquet
拡張子.xlsx.parquet
メディアタイプapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.apache.parquet
圧縮方式可逆 — 何も捨てない
最初の公開20072013
発行元MicrosoftApache Software Foundation
仕様ECMA-376
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式CSV, ODSCSV, JSON

失われるもの

表計算ファイルは固定されたページになります。数式はもう数式ではなく、最後に出した結果だけが残り、どこで改ページするかはシートではなく印刷範囲が決めます。横に広い XLSX ファイル が Parquet では何ページにも分かれて出てくるのは、そのためです。

結果を開く

開くプログラムが重なりません。XLSX はMicrosoft Excel、LibreOffice Calc、Google Sheetsで、Parquet はpandas、Apache Spark、DuckDBで開きます。結果を渡す相手には後者のどれかが要ります。

どちらの形式が何のためのものか

2 つは狙っている用途が違います。XLSX は編集、Parquet は長期保存とプログラム間のデータ受け渡しです。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

XLSX は Microsoft の形式です(2007 年に登場)。 ECMA-376 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

Parquet は Apache Software Foundation の形式で、2013 年から使われています。pandas、Apache Spark、DuckDBがこの形式を読めます。

XLSX から Parquet:よくある質問

XLSX ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

XLSX から Parquet への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

XLSX を Parquet に変換すると品質は落ちますか。

XLSX と Parquet は、内容の表し方が根本から違います。ですからこの変換は複製ではなく再構築です。誠実ではありますが、1 バイトも同じというわけではありません。 読み取るのは最初のシートだけで、しかも値だけです。数式、書式、列幅、そして 2 枚目以降のシートは残されます。

XLSX ファイル が Parquet になると、中身はどうなりますか。

表計算ファイルは固定されたページになります。数式はもう数式ではなく、最後に出した結果だけが残り、どこで改ページするかはシートではなく印刷範囲が決めます。横に広い XLSX ファイル が Parquet では何ページにも分かれて出てくるのは、そのためです。

これらのフォーマットについて