2017-07-17 1 views
1

私は自分のローカルマシン(Linux)自体にMySQLテーブルを持っていますが、私はMySQLテーブルと同じスキーマを持つHive外部テーブルを持っています。Sqoopを使ってMySQLテーブルとHive外部テーブルを自動的に同期する方法は?

私はMySQLテーブルからHive外部テーブルにデータをインポートしようとしていますが、これに対してSqoopを使用しています。

しかし、問題は、新しいレコードがMySQLテーブルに追加されるたびに、自動的にHive外部テーブルを更新しないということです。

これは私が使用しているSqoopインポートコマンドです:

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -P --split-by id --columns id,name,age,salary --table customer --target-dir /user/chamith/mysqlhivetest/ --fields-terminated-by "," --hive-import --hive-table test.customers 

私はこっちに何かが足りないのですか?またはこれはどのようにしてできますか?

ご協力いただければ幸いです。

+1

利用増分ロードのアプローチ。.. – TKHN

+0

が追加された新しいものを記録のようなサンプルを追加し、それがデータや追加データを変異させ..is? – TKHN

+0

@TKHNそれは絶対に新しい行で、すべての列の値を持ちます。インクリメンタルロードアプローチ?あなたはそれについていくつかの光を当てることができますか?ありがとう! – Kulasangar

答えて

3

あなたの場合、テーブルに新しい行が追加されます。 したがって、インクリメンタルな追加アプローチを使用する必要があります。

追加モードはいつ使用しますか?

  • 新しい行が継続的に今増加行ID値を有する

が追加されているテーブルをインポートする場合、このような 自動インクリメントキー

  • として、時間の経過とともに増加している数値データのための作品コマンドで追加する必要があるもの

    -check-columnインポートする行を決定する際に検査する列を指定します。

    --incremental Sqoopが新しい行をどのように決定するかを指定します。

    --last値この場合sqoopメタストアを自動的

    を最後の値を記憶のように、これはsqoopジョブを使用して実行する前インポート

    理想からのチェック欄の最大値を指定しステップ1:通常のインポートコマンドを使用してデータをロードします。

    ステップ2:

    sqoop job --create incrementalImportJob -- import \ 
    --connect jdbc:mysql://localhost:3306/sqoop 
    --username root 
    -P 
    --split-by id 
    --columns id,name,age,salary 
    --table customer 
    --incremental append \ 
    --check-column id \ 
    --last-value 5 
    --fields-terminated-by "," 
    --target-dir hdfs://ip:8020/path/to/table/; 
    

    ・ホープ、このことができます。..

  • 関連する問題