В этом вопросе есть две части.
Первый - это действительный запрос для вашей исходной базы данных? В большинстве баз данных есть какой-то клиент или оболочка, которые позволяют вводить и выполнять запросы. Ваш запрос должен быть действительным в отношении оболочки или клиента.
Вторая часть вашего вопроса: как вы берете этот запрос (как String) и передаете его в базу данных через sqoop. Ответ на этот вопрос заключается в том, как вы работаете в sqoop.
Если вы используете sqoop через командную строку, вам необходимо идентифицировать эти символы (обычно двойные кавычки), которые придают вашей ОС возможность встраивания в аргумент командной строки. Используйте обратную косую черту перед этими символами, чтобы помочь ОС правильно разобрать команду. Обычно вам нужно поместить всю строку запроса в неэкранированные двойные кавычки, чтобы ОС рассматривала ваш запрос как один строковый аргумент.
Если вы работаете sqoop через Oozie то я настоятельно рекомендую вам разбить команду Sqoop в аргументы в действии Sqoop:
<arg>--query</arg>
<arg>select ... count(*) ax, “1- Pd” St , b.Type ... WHERE $CONDITIONS</arg>
Так что вы можете вообще вставить свой запрос, как это в действии.
Конечно, нет ничего проще. Вы все еще должны помнить, что запрос находится внутри XML-документа, поэтому любой символ, который испортит разбор XML, станет проблематичным. Единственными символами, с которыми я столкнулся до сих пор, являются угловые скобки, и я использую замену свойств (немного для kludge, я допускаю), чтобы решить эту проблему:
В файле свойств рабочего процесса Oozie, который я поставил:
lessThan=<
и я изменю свое ARG из
<arg>SELECT * from MyTable where $CONDITIONS AND (SOME_COL < 1000)</arg>
в
<arg>SELECT * from MyTable where $CONDITIONS AND (SOME_COL ${lessThan} 1000)</arg>
EDIT:
Для тех из вас, кто не нравится мой кладж, вы можете попробовать использовать CDATA элемент «бежать» ничего в запросе (за исключением, конечно, «]]>»):
<arg><![CDATA[SELECT * from MyTable where $CONDITIONS AND (SOME_COL < 1000)]]></arg>
Вы пробовали использовать одинарные кавычки ''? – Dane
у вас есть дополнительный ',' в разделе 'from' –
это и пример, реальная проблема - это« 1- Pd »St. С другой стороны, я пробовал использовать« 1- Pd »St,» 1- Pd «St», «1-Pd» «St» все комбинации с котировками –