ハイブで外部表を作成してから、ユーザーinsert overwrite directory ...
を追加してファイルを追加します。しかし、私は私のクエリを実行する2回目に私は古いファイルが削除され、(私は上書きオプションがあるため)新しいファイルを置き換えると期待しています。しかし、そうではなく、古いファイルを削除せずに新しいファイルがディレクトリに追加され、データの不一致が発生します。ここで何がうまくいかないのですか?ハイブでの上書きの挿入が正しく動作しない
答えて
私はバグを提出しようとしていましたが、これは既存の問題です:HIVE-13997 - 期待される結果をoverwrite directory
にする場合は、パッチを適用してください。私が発見したものをテストから
は次のとおりです。
overwrite directory
とoverwrite table
は異なる動作を:あなたはディレクトリ全体を上書きしたい場合は、overwrite table
を使用する必要があります。
は、テストのために、この表を作成しました:create external table t2 (a1 int,a2 string) LOCATION '/user/cloudera/t2';
overwrite directory:
をディレクトリが上書きされ、あなたが期待するように、です。言い換えれば、指定されたパスが存在する場合は、それはclobberedされ、出力と置き換えられます。
hive> insert overwrite directory '/user/cloudera/t2' select * from sqoop_import.departments;
上記の文は場所/user/cloudera/t2/000000_0
にデータを書き込むことが起こっているのであれば、その後にのみ、この場所が上書きされます。
#~~~~ BEFORE ~~~~
[[email protected] ~]$ hadoop fs -ls /user/cloudera/t2/*
-rwxr-xr-x 1 cloudera cloudera 60 2016-07-25 17:42 /user/cloudera/t2/000000_0
-rwxr-xr-x 1 cloudera cloudera 0 2016-07-25 15:48 /user/cloudera/t2/_SUCCESS
-rwxr-xr-x 1 cloudera cloudera 88 2016-07-25 15:48 /user/cloudera/t2/part-m-00000
-rwxr-xr-x 1 cloudera cloudera 60 2016-07-25 15:48 /user/cloudera/t2/part-m-00001
#~~~~ AFTER: Note the timestamp ~~~~
[[email protected] ~]$ hadoop fs -ls /user/cloudera/t2/*
-rwxr-xr-x 1 cloudera cloudera 60 2016-07-25 18:01 /user/cloudera/t2/000000_0
-rwxr-xr-x 1 cloudera cloudera 0 2016-07-25 15:48 /user/cloudera/t2/_SUCCESS
-rwxr-xr-x 1 cloudera cloudera 88 2016-07-25 15:48 /user/cloudera/t2/part-m-00000
-rwxr-xr-x 1 cloudera cloudera 60 2016-07-25 15:48 /user/cloudera/t2/part-m-00001
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
overwrite table:
選択されたテーブルの内容又はパーティションは対応するselectステートメントの出力に置き換えられます。
hive> insert overwrite table t2 select * from sqoop_import.departments;
今全体のディレクトリが上書きされます。結論、上書きディレクトリにあるので、
[[email protected] ~]$ hadoop fs -ls /user/cloudera/t2/*
-rwxr-xr-x 1 cloudera cloudera 60 2016-07-25 18:03 /user/cloudera/t2/000000_0
-rwxr-xr-x 1 cloudera cloudera 0 2016-07-25 15:48 /user/cloudera/t2/_SUCCESS
だけで生成されたファイルではないディレクトリの直接のパスを上書きします。 see Writing-data-into-the-file-system-from-queries
- 1. Embedded Jettyの書き換えが正しく動作しない
- 2. バージョン管理でバッチ更新、削除、挿入が正しく動作しない
- 3. MongoDBの挿入が動作しない
- 4. ARKIT:平面上のオブジェクトが正しく動作しない
- 5. デバイス上でSQliteが正しく動作しない
- 6. なぜ私の挿入クエリがサーバー上で動作していない
- 7. ASP.Netサーバー上のプロセスがIIS上で正しく動作しない
- 8. Cでファイルに挿入する(上書きしない)
- 9. ハイブ1つのテーブルから別のテーブルへの上書きの挿入
- 10. MongoDBが正常に動作しないレコードを挿入する
- 11. ハイブ:複数の挿入クエリで:FAILED:SemanticException発生しないでください
- 12. iOSでデバイスの向きが正しく動作しない
- 13. FadeIn LibGDXでの動作が正しく動作しない
- 14. SQLクエリは、MATLAB上で動作していない正しく
- 15. 隠し入力が正しく動作しない
- 16. Apache NiFi - ScanContent辞書形式が正しく動作しない
- 17. ModX:getPageがリソース上の異なるアクセス許可で正しく動作しない
- 18. Firebaseデータの挿入問題。データが正しく挿入されていない
- 19. Mod_rewrite - 書き換え条件が正しく動作していない
- 20. ハイブ:実行中のHiveServer2なしでアプリケーションが動作しない
- 21. インストール時にハイブが動作しない
- 22. ハイブ履歴コマンドが動作しない
- 23. iOS上のReactとSocket.ioでJavascriptのオーディオが正しく動作しない
- 24. Magento 2:テンプレートファイルが正しく上書きされない
- 25. overloaded <<挿入演算子が正しく動作していません
- 26. コントローラーのYii2の動作が正しく動作しない
- 27. Codeigniter DBの挿入が正しく動作しません(間違った値を挿入します)
- 28. libgdxアクター入力が正しく動作しない
- 29. データベースに正しく挿入できない場合は、
- 30. 好きなボタンが正しく動作していない
は、ハイブテーブルを分割したものですか? –
いいえパーティション化されていない、単純なテーブルです –