2016-07-07 2 views

ответ

0

Существует много способов добиться этого.

  1. , если вы хотите импортировать все таблицы в БД MySQL, вы можете использовать: import-all-tables - также вы можете использовать этот аргумент --exclude-tables <tables> - разделенных запятыми значений - исключить некоторую таблицу (ы) с impor-all-tables

  2. если вы хотите импортировать некоторые данные из некоторых таблиц (значимые данные), вы можете использовать: Free-form Query Imports

  3. если вы хотите импортировать несколько таблиц, вы можете прямо сценарий оболочки:

    #!/bin/sh 
    
    i=0 
    while [ ${i} -le 5 ] 
    do 
        echo "importing table a_0_${i}" 
        #here write your full sqoop command, this is just an example 
        #sqoop import --connect --table a_0_${i} 
        i=$((i + 1)) 
    done 
    

Теперь запустите сценарий оболочки: команда sqoop будет запускаться 6 раз в соответствии с логикой и импортировать 6 таблиц.

$ ./importAll.sh 
importing table a_0_0 
importing table a_0_1 
importing table a_0_2 
importing table a_0_3 
importing table a_0_4 
importing table a_0_5 

Примечание: вы должны изменить логику в сценарии оболочки в соответствии с вашими потребностями. Решения, которые я предлагаю, основаны на деталях, о которых идет речь.

+0

привет, спасибо, много изменилось, я думаю, что решение 2 подходит, потому что у меня есть 20W + таблиц, распространяемых на сотнях машин, и я должен учитывать количество подключений каждой базы данных. Я намерен использовать union all для объединения нескольких таблиц, знаете ли вы, как их реализовать? – Jiangbo

+0

Что вы понимаете под таблицами '20W +'? Я думаю, что для использования 'UNION' вам нужно будет учитывать требование от типа mysql, типа столбца, и число столбцов в каждом предложении UNION должно совпадать. также считают, что 'UNION' будет экспортировать только уникальные данные, вы можете использовать' UNION ALL'. Кроме того, опция 2 будет экспортировать все таблицы в один файл 'hdfs' –

Смежные вопросы