1. ホーム
  2. hadoop

Hiveでレコードを削除・更新する方法

2023-12-14 15:53:57

質問

Hadoop、Hive、Hive JDBCをインストールし、正常に動作しています。しかし、私はまだ問題があります。MySQLの削除または更新コマンドがHiveで動作しないため、どのようにHiveを使用して単一のレコードを削除または更新することができます。

ありがとうございます。

hive> delete from student where id=1;
Usage: delete [FILE|JAR|ARCHIVE] <value> [<value>]*
Query returned non-zero code: 1, cause: null

どのように解決するのですか?

Hiveを通常のRDBMSとして考えるべきではありません。Hiveは非常に大きな不変のデータセットに対するバッチ処理に適しています。

以下はHive 0.14より前のバージョンに適用されます。 アシュトニウム の回答をご覧ください。

特定のレコードまたはレコードの特定のセットの削除または更新のためにサポートされている操作はなく、私には、これはむしろ貧弱なスキーマの兆候です。

以下はその例です。 公式ドキュメントの :

Hadoop is a batch processing system and Hadoop jobs tend to have high latency and
incur substantial overheads in job submission and scheduling. As a result -
latency for Hive queries is generally very high (minutes) even when data sets
involved are very small (say a few hundred megabytes). As a result it cannot be
compared with systems such as Oracle where analyses are conducted on a
significantly smaller amount of data but the analyses proceed much more
iteratively with the response times between iterations being less than a few
minutes. Hive aims to provide acceptable (but not optimal) latency for
interactive data browsing, queries over small data sets or test queries.

Hive is not designed for online transaction processing and does not offer
real-time queries and row level updates. It is best used for batch jobs over
large sets of immutable data (like web logs).

この制限を回避する方法として、パーティションを使用する方法があります。私は、あなたが何を id が何に対応するのかわかりませんが、もしidの異なるバッチを別々に取得しているのであれば、idでパーティショニングされるようにテーブルを再設計すれば、取り除きたいidのパーティショニングを簡単に削除することができます。