web-dev-qa-db-ja.com

RDBMSの主キーなしのSqoopインポート

Sqoopを使用してRDBMSテーブルデータ(テーブルには主キーがありません)をHiveにインポートできますか?はいの場合、sqoopimportコマンドを実行してください。

Sqoop import generalコマンドで試しましたが、失敗しました。

9
KM Prak

テーブルに主キーが定義されていない場合は、データをインポートするための-m 1オプションを指定するか、--split-by引数に列名を指定する必要があります。指定しないと、エラーが発生します。

ERROR tool.ImportTool: Error during import: No primary key could be found for table <table_name>. Please specify one with --split-by or perform a sequential import with '-m 1'

すると、sqoopコマンドは次のようになります

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table user \
    --target-dir /user/root/user_data \
    --columns "first_name, last_name, created_date"
    -m 1

または

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table user \
    --target-dir /user/root/user_data \
    --columns "first_name, last_name, created_date"
    --split-by created_date
18
Prasad Khode

PrimarykeyなしでRDBMSからHiveにデータをインポートできます。

まず、Hiveでテーブルを作成する必要があります。その後、次のコードを記述する必要があります。

sqoop import \
    --connect jdbc:mysql://localhost/test_db \
    --username root \
    --password **** \
    --table <RDBMS-Table-name> \
    --target-dir /user/root/user_data \
    --Hive-import \ 
    --Hive-table <Hive-table-name> \
    --create-Hive-table \
    -m 1 (or) --split-by <RDBMS-Column>
3

1つのマッパーを使用する最初のシナリオでは...ファイルのサイズが非常に大きい場合、このプロセスは応答に時間がかかるか、失敗する可能性があります。 mapper = 1を使用する前に、データのサイズを確認してください。

2
Arvind A

クイックビュー:

Sqoopジョブが失敗し、エラーは次のようになります。「インポート中のエラー:テーブルの主キーが見つかりませんでした。-split-byで指定するか、「-m1」で順次インポートを実行してください。」

説明:通常、Sqoopジョブを内部で実行すると、テーブル内の主キーが検索されます。主キーがない場合、Sqoopジョブは失敗し、エラーは次のようになります。 "インポート中のエラー:テーブルの主キーが見つかりませんでした。-split-byで指定するか、 '-m1で順次インポートを実行してください。 '"。この提案では、このシナリオには2つの代替アプローチがあると説明されています。

最善の方法はオプション2です

  1. マッパーの数を1として指定するには(デフォルトでは4)。したがって、マッパーの数を1に指定すると、タスクはシーケンシャルになり、シングルスレッドタスクと同じになります。これは、小さなテーブルをターゲットにしている場合にのみ成功します。大きなインポートを探している場合、タスクが永久に実行される傾向があるため、これは失敗します。

  2. 最良のアプローチは、インデックス付き列に基づいてマッパーの数を指定するか、手動で(クエリを使用して)列を分割できるsplit-byを使用することです。

1
Tony79

コマンドで以下を使用します。

--autoreset-to-one-mapper

Importは、テーブルに主キーがなく、分割列が指定されていない場合、1つのマッパーを使用する必要があります。 --split-by <col>オプションと一緒に使用することはできません。

0
Ravi Ranjan