多くのHiveテーブルの場所でバケット名を変更したいと思います。私たちがmySQLデータベースに接続して更新することは可能でしょうか?それは可能だと思います。しかし、実動データベースでそれを行うのが安全かどうかを知りたいと思います。多くのテーブルのHiveメタデータの場所を更新する
0
A
答えて
0
はい、可能ですが、私はそれを完了しました。しかし
(a)のは、メタストアスキーマが文書化されておらず、各ハイブのバージョンはいくつかのマイナーな変更をもたらしますので、あなたがどこ/ StorageDescriptor
オブジェクトを永続化する方法を見つけるために、独自の探査をしなければならない - その後、いくつかのユニットテスト/非回帰テストをDevシステムにインストールする - さらに、DBバックアップを実行してからProdシステムを操作することを忘れないでください(また、Devシステムの緊急修復のリハーサルも必要です)。
(b) 012を更新する必要がありますテーブルの場合はだけでなく、パーティションの場合 - パーティションテーブルの場合、テーブルレベルLOCATION
は、将来のパーティションのデフォルトルートディレクトリとして使用されます。一度作成されると、パーティションは明示的に変更されるまでその位置を保持します。レコードの
、一括更新のための好ましい方法は、(理論的に) Hive MetaToolあるが、残念ながら、それはあなたが必要とする更新の種類をサポートしていません。
今それが本当の pain pointだったので、それは、すべてのHDFSパスに名前ノードの別名を変更するための唯一の良いことだ...
残忍なSQLのアップデートに有効な代替はハイブを使用して、カスタムJavaプログラムを開発するだろうMetaStore APIを使用してすべてのテーブルをスキャンする&パーティションでStorageDescriptorを読み取り、次にその場所でRegExの変更を実行してから、変更を書き戻します。(これはMetaToolの機能とまったく同じですが、下位レベルのみ)しかし、それは過度のことです。
最後に、可能 妥協は(
regexp_replace()
で)ハイブCLIで、後に実行するコマンド
ALTER Table/Partition LOCATIONの連鎖を発生させるために、適切なMySQLのテーブルにSQLを選択だろう。
緊急ロールバックが必要な場合に備えて、元の場所に戻すためのALTERチェインを追加しました
:-/
関連する問題
- 1. オンザフライでテーブルのメタデータを更新する
- 2. Hive-beelineの履歴ファイルの場所を変更するには
- 3. Count()の多対多テーブルに基づくテーブルの更新
- 4. ソースの場所を変更した後のHive ORCテーブルの復元?
- 5. モデリングビューのメタデータの場所
- 6. Javaのビルドでgradleメタデータの場所を変更する方法
- 7. 多くのユーザーの最新の場所を取得
- 8. のMySQL/PHP更新多対多のテーブル
- 9. HDFSの変更を伴うHive外部テーブルの更新
- 10. Apache Hive:テーブルの特定の場所に列を追加する方法
- 11. マップボタンの更新場所
- 12. バックグラウンドでの更新場所
- 13. Mercurial、更新サブペーポの場所
- 14. Hive UDFの場所の特定
- 15. 多くのテーブルからdatagridviewを更新する
- 16. android Handler.postDelayed多くの場所で使用
- 17. メタデータを格納する場所は?
- 18. は私がテーブルの多数の行をロックするいくつかの場所を持っているテーブルに
- 19. Hiveの多くのテーブルで効果的な結合を実行する
- 20. テーブルの変更データソースの抽出場所
- 21. 多くの行を更新する
- 22. Hive外部テーブル:基になるディレクトリの更新中にテーブルにアクセスする場合
- 23. SQLテーブルの多くのカラムをより高速に更新する方法をお探しの場合
- 24. Androidネットワークの場所(更新の時間)
- 25. Androidの場所の更新間隔
- 26. ElasticSearchノードの場所の更新
- 27. Eclipse更新の別の場所
- 28. 現在の場所を更新中ではなく
- 29. 場所を更新すると場所のマーカーが消えます。Android Studio
- 30. ファイルの最終更新日をHive外部テーブルに追加