2016-07-30 16 views
2

Ich habe versucht, alle Tabellen mit dem sqoop in eines der Verzeichnisse zu importieren.Aber eine der Tabellen hat keinen Primärschlüssel.Dies ist der Code, den ich ausgeführt habe.Primärschlüsselfehler beim Importieren der Tabelle Mit Sqoop

sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db" 
--username=retail_dba 
--password=cloudera 
--warehouse-dir /user/cloudera/sqoop_import/ 

Ich erhalte die folgende Fehlermeldung:

Error during import: No primary key could be found for table departments_export. Please specify one with --split-by or perform a sequential import with '-m 1'.

von sqoop import without primary key in RDBMS

da ich verstanden, dass wir nur --split-by für eine einzelne Tabelle import.Is eine Art und Weise verwenden, kann ich angeben --splity-by für Import-all-tables Befehl. Gibt es eine Möglichkeit, dass ich mehr als einen Mapper für den Multi-Tabellen-Import ohne Primärschlüssel verwenden kann.

Antwort

8

Sie verwenden müssen --autoreset-to-one-mapper:

Tabellen ohne Primärschlüssel wird mit einem Mapper und andere mit Primärschlüssel mit Standard-Mapper werden importiert (4 - wenn nicht in sqoop Befehl angegeben)

  • Wie @JaimeCr sagte Sie nicht --split-by mit import-all-tables aber dieses nur ein Zitat aus Sqoop Führung in Zusammenhang mit Fehlern verwenden, können Sie bekommt:

    If a table does not have a primary key defined and the --split-by> <col> is not provided, then import will fail unless the number of mappers is explicitly set to one with the --num-mappers 1 or --m 1 option or the --autoreset-to-one-mapper option is used.

  • Die Option --autoreset-to-one-mapper wird normalerweise mit dem Tool import-all-tables verwendet, um automatisch Tabellen ohne Primärschlüssel in einem Schema zu behandeln.

    sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera/retail_db" \ 
    --username=retail_dba \ 
    --password=cloudera \ 
    --autoreset-to-one-mapper \ 
    --warehouse-dir /user/cloudera/sqoop_import/ 
    
+0

Danke, ich wusste nicht, diese Option. –