Sq oop Ошибка: для импорта требуется --table или --query - PullRequest
0 голосов
/ 10 июля 2020

Я получаю сообщение об ошибке "Команда не найдена" при использовании следующей команды sq oop (oracle запрос). Я использовал другую команду sq oop для подключения к другой БД с другой строкой подключения jdb c, она подключилась и извлекла данные без ошибок. Не уверен, в чем проблема, может ли кто-нибудь помочь исправить эту ошибку? Заранее благодарим.

`sqoop import 
 --connectjdc:oracle:thin:@//(connection string)
 --query 
"Select sys, 
case when (substring(gid,3,3))="_A_" or gid="NJ_Parsipanny") then "core"
when
else "misc" end "org",
aid, aname,
b.workid as "waddress",
f.ai,
a.ag,
b.jobd,
b.jobk,
e.emstatus,
b.jobfunc,
b.superid,
c.fname+" "+c.lname as "S_Name",
FROM ad.db.tbl_a a
left join common.db.b b
on a.tid=b.sbid
left join common.db.c c
on b.sid=c.sbid
left join common.db.d d
on c.sid=d.sbid
left join common.db.e e
on d.sid=e.sbid
left join ad.db.tbl_f f
on a.AG=f.AG 
WHERE RIGHT(a.AG,1) IN ("E","T")
AND \$CONDITIONS"
--num-mappers 1
--target-dir /abc/46780
--fields-terminated-by ","
--user-name xyz
--password-file hdfs:///abc/46780/p/pswd.txt`

Ошибки: команда не найдена. --table или --query требуется для импорта строки 26: - query: command not found строка 44: - num-mappers: command not found строка 45: - target-dir: command not found строка 46: - fields-terminated-by: команда не найдена строка 47: - имя пользователя: команда не найдена строка 48: - файл-пароля: команда не найдена

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Я предполагаю, что вы запускаете команду sq oop из linux shell command line.

Я бы переписал команду sq oop следующим образом.

Сначала я бы протестировал запрос через консоль Oracle, чтобы узнать, работает ли запрос.

Во-вторых, в конец каждой строки вы должны поместить sla sh \

В-третьих, вы должны помещать строковые литералы в запрос между одинарными кавычками 'string literal' вместо двойных кавычек.

sqoop import \
--connectjdc:oracle:thin:@//(connection string) \
--query  "Select sys, 
case when (substring(gid,3,3))='_A_' or gid='NJ_Parsipanny') then 'core'
when
else 'misc' end 'org',
aid, aname,
b.workid as waddress,
f.ai,
a.ag,
b.jobd,
b.jobk,
e.emstatus,
b.jobfunc,
b.superid,
c.fname+' '+c.lname as S_Name,
FROM ad.db.tbl_a a
left join common.db.b b
on a.tid=b.sbid
left join common.db.c c
on b.sid=c.sbid
left join common.db.d d
on c.sid=d.sbid
left join common.db.e e
on d.sid=e.sbid
left join ad.db.tbl_f f
on a.AG=f.AG 
WHERE RIGHT(a.AG,1) IN ('E','T')
AND \$CONDITIONS" \
--num-mappers 1 \
--target-dir /abc/46780 \
--fields-terminated-by "," \
--username xyz \
--password-file hdfs:///abc/46780/p/pswd.txt
0 голосов
/ 02 августа 2020

Похоже, что сценарий оболочки выдает ошибку, а не sqoop.

Если у вас одна команда, но разделена на несколько строк, вам нужно добавить backsla sh \ в конце каждой строки.

sqoop import \
 --connect jdbc:oracle:thin:@//(connection string) \
 --query \
'Select sys,
case when (substring(gid,3,3))="_A_" or gid="NJ_Parsipanny") then "core"
when
else "misc" end "org",
aid, aname,
b.workid as "waddress",
f.ai,
a.ag,
b.jobd,
b.jobk,
e.emstatus,
b.jobfunc,
b.superid,
c.fname+" "+c.lname as "S_Name",
FROM ad.db.tbl_a a
left join common.db.b b
on a.tid=b.sbid
left join common.db.c c
on b.sid=c.sbid
left join common.db.d d
on c.sid=d.sbid
left join common.db.e e
on d.sid=e.sbid
left join ad.db.tbl_f f
on a.AG=f.AG 
WHERE RIGHT(a.AG,1) IN ("E","T")
AND $CONDITIONS' \
--num-mappers 1 \
--target-dir /abc/46780 \
--fields-terminated-by "," \
--user-name xyz \
--password-file hdfs:///abc/46780/p/pswd.txt

Примечание: Не нужно добавлять \ внутри кавычек. Изменения:

  1. Я заменил двойные кавычки на одинарные, поскольку у вас есть двойные кавычки внутри вашего запроса SQL.
  2. Удалить \ перед $CONDITIONS так как использование одинарных кавычек требует выхода $. Это по умолчанию.
...