テーブルのデータは、一連のベースファイルに格納されます。新しいレコード、更新、および削除はデルタファイルに格納されます。新しいデルタファイルセットが、テーブルを変更する各トランザクション(またはFlumeまたはStorm、トランザクションの各バッチなどのストリーミングエージェントの場合)ごとに作成されます。読み取り時に、リーダーはベースファイルとデルタファイルをマージし、読み取ったときに更新や削除を適用します。
その後、メジャーコンパクションは、より大きなデルタファイルおよび/またはベースファイルを別のベースファイルにマージして、定期的な間隔でテーブルスキャン操作を高速化します。
スペースを節約し、データアクセスを最適化するために、挿入/更新/削除されたデータが定期的に圧縮されます。
- それだけORCファイルのために働く:
ACIDトランザクションは、現在、これらの制限を持っていています。 Parquetテーブルのサポートを追加するためのオープンソースのJIRAがあります。
- これは、ソートされていないバケット表に対してのみ機能します。
- INSERT OVERWRITEはトランザクションではサポートされていません。
- BEGIN、COMMIT、またはROLLBACKトランザクションはサポートされていません。
- OLTPではお勧めできません。
ACIDはAVROファイルではサポートされず、HDFSブロック置換ポリシーはACIDテーブルでも同じです。
以下のリンクは、ハイブのACIDテーブルを理解するのに役立ちます。
http://docs.qubole.com/en/latest/user-guide/hive/use-hive-acid.html
https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions