ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
要点
- Apache ORC (Optimized Row Columnar) は Hortonworks が Hive のために 2013 年に開発した列指向ファイル形式。拡張子は
.orc。 - Parquet と並ぶ二大列指向フォーマットで、性能面はワークロード次第でほぼ互角。Hive/HDP/CDP の Hadoop ディストリビューション圏内では ORC が第一候補。
- 内部は Stripe(行ストライプ)→ Row Group → Stream の階層構造。Stripe 単位の min/max/sum などをファイル内に持ち、強力な Predicate Pushdown と Bloom Filter が効く。
- デフォルトの圧縮は ZLIB だが、近年は ZSTD が推奨。Snappy / LZ4 も選べる。
概要
ORC は Hive 0.11(2013 年)で導入されたフォーマットで、当時 Hive が抱えていた「RCFile では遅い、Parquet は Cloudera 寄り」という事情に対する Hortonworks 側の回答だった。Apache 配下に移ったあとは Hive と密結合のまま独自に進化し、ACID トランザクション、更新/削除、Bloom Filter インデックスといった、Parquet にはない(あるいは後追いになった)機能を先行して搭載してきた。
用途的には「Hive 上の DWH」「LLAP 経由のインタラクティブ分析」「Druid / Presto / Trino からの参照」が中心。クラウド DWH やデータレイク文脈では Parquet が優勢だが、オンプレ Hadoop が残る大企業では現役の選択肢である。Spark からも spark.read.orc() で透過的に扱える。
列指向ファイル全般の利点(必要な列だけ IO、列単位の高圧縮、Predicate Pushdown による Row Group スキップ)はすべて ORC でも有効で、CSV と比べた読み込み高速化倍率や圧縮率は Parquet と同等オーダーである。両者を選ぶ基準は技術的というより「自分の環境のエコシステムが何を主に読み書きするか」で決まる。
内部構造
ORC ファイルは Stripe という大きな単位で行を区切る。Stripe のデフォルトサイズは 64 MB〜256 MB で、Parquet の Row Group に相当する並列処理単位である。
- Stripe: 一定行数をまとめた塊。内部にインデックス、データ、Stripe フッタを持つ。
- Row Group: Stripe 内の 10,000 行単位の細かい区分。各 Row Group の min/max/sum などを Stripe インデックスに持ち、これが Predicate Pushdown の主役になる。
- Stream: 列ごとの実データ。さらに「PRESENT(NULL ビット)」「DATA(値)」「LENGTH(可変長)」「SECONDARY(補助)」の 4 種類のストリームに分解される。
ファイル末尾には File Footer と PostScript があり、PostScript はファイルサイズ・圧縮種別といった起動情報、Footer は各 Stripe の位置・スキーマ・統計を持つ。クエリエンジンは PostScript → Footer → 必要 Stripe の順に読み込み、不要な Stripe はバイナリレベルでスキップする。
追加で Bloom Filter を列ごとに作成でき、等価条件(id = 12345 のような点クエリ)に対して特定の Stripe を読まずに済む。これは Parquet にも後追いで入ったが、ORC では仕様の早い段階から組み込まれている。
主な用途
- Hive 上の DWH テーブル:
STORED AS ORCがほぼデフォルト。圧縮率と速度の両立で TEXTFILE/RCFile から置き換えられた。 - ACID/Update のあるテーブル: Hive ACID は ORC 形式が前提。Delta ファイルをマージしながら更新を扱える。
- Trino / Presto / Spark からの読み出し: 既存の ORC データレイクに直接 SQL を投げる構成。
- 長期アーカイブ: ZSTD で圧縮した ORC は CSV の 1/10〜1/20 程度になることが多く、コールドデータの保管にも向く。
関連形式との比較
| 形式 | 主な戦場 | 強み | 弱み |
|---|---|---|---|
| ORC | Hive / Hadoop | ACID、Bloom Filter、高圧縮 | Hive 圏外の支援が薄め |
| Parquet | クラウド DWH / Spark / Python | 事実上の標準、エコシステム広い | 更新は不得手 |
| Avro | Kafka | スキーマ進化、行追記 | 分析は遅い |
| CSV | 受け渡し | 人間可読 | 遅い・大きい・型なし |
結論として、「Hive を中心に据えるなら ORC、その他は Parquet」が大筋の指針となる。詳細比較は CSV(.csv) や Parquet の記事と併せて参照すると分かりやすい。
コマンド・ツール
公式の CLI orc-tools で中身を覗ける。
$ java -jar orc-tools-1.9.0-uber.jar meta sales.orc
Processing data file sales.orc [length: 5,234,112]
Structure for sales.orc
File Version: 0.12 with ORC_135
Rows: 1,234,567
Compression: ZSTD
Compression size: 262144
Type: struct<id:bigint,amount:double,ts:timestamp>
$ java -jar orc-tools-1.9.0-uber.jar data sales.orc | head
Python では pyarrow が ORC を読み書きできる。
import pyarrow.orc as orc
table = orc.read_table("sales.orc")
df = table.to_pandas()
Hive/Spark からはネイティブに扱えるので、変換は SQL レベルで完結する。
-- Hive
CREATE TABLE sales_orc STORED AS ORC AS SELECT * FROM sales_text;
-- Spark
spark.read.csv("sales.csv").write.format("orc").save("/dl/sales_orc")
注意点
- Hadoop 圏外でのライブラリ成熟度: Python の純粋 ORC ライブラリは限られ、pyarrow 経由が現実解。Parquet ほど周辺ツールは多くない。
- Stripe サイズと並列度: 64MB を切るような小さな Stripe を多数持つと、メタデータ往復で遅くなる。書き出し時に
orc.stripe.sizeを意識する。 - 更新可能テーブルは特殊: ACID ORC は基本ファイル + Delta ファイル + Compaction の構成。素の ORC として外部ツールで読むと、更新が反映されない場合がある。
- Bloom Filter の対象指定: デフォルトでは作られない。
orc.bloom.filter.columnsで列を指定して書き出す。
関連リンク
- 親: データベース・データ交換
- 概論: ファイル拡張子とは
- カテゴリ: データベース(カテゴリ)
- 同 Wave: Parquet(.parquet) / Avro(.avro) / Feather / Arrow IPC
- テキスト系比較: CSV(.csv)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?