2015-03-19 4 views
0

Могу ли я импортировать данные таблицы РСУБД (таблица не имеет первичного ключа) для использования с использованием sqoop? если да, можете ли вы указать команду импорта sqoop,импорт sqoop без первичного ключа в СУБД

Я попытался с помощью команды sqoop import generall, но это не удалось.

Заранее спасибо

PK

ответ

5

Если таблица не имеет первичного ключа, определенный, то вы должны дать -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 
1

В первом сценарии с использованием 1 Mapper ... Если размер файла очень большой этот процесс займет больше времени, чтобы ответить или может потерпеть неудачу. Перед использованием mapper = 1 проверьте размер данных.

1

Вы можете импортировать данные из РСУБД в улей без Primarykey.

Прежде всего, необходимо создать таблицу в hive.After, что вам нужно написать следующий код:

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>