2017-04-21 3 views
0

sqoop에서 --query 옵션을 사용하여 SQL Server에서 데이터를 가져 오려고합니다. 내 관심사는 SQL Server에서 --query와 함께 사용할 스키마를 어떻게 선언 할 수 있는가입니다.SQOOP - SQL Server에서 SCHEMA를 사용하는 쿼리

내 스크립트 :

sqoop \ 
--options-file sqoop/aw_mssql.cfg \ 
--query "select BusinessEntityId, LoginID, cast(OrganizationNode as string) from Employee where \$CONDITIONS" \ 
--hive-table employees \ 
--hive-database mssql \ 
-- --schema=HumanResources 

여전히

Invalid object name 'Employee'

는 또한
--connect "jdbc:sqlserver://192.168.1.17;database=AdventureWorks;schema=HumanResources" 

하지만이 또한 실패를 시도 오류를 생성합니다.

답변

0

당신은 코드 아래에이 시도 할 수 있습니다 :

sqoop import \ 
--connect jdbc:sqlserver://192.168.1.17;database=AdventureWorks \ 
--username "Your User" \ 
--password "Your Password" \ 
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \ 
--verbose \ 
--query "select BusinessEntityId, LoginID, cast(OrganizationNode as string) from HumanResources.Employee where \$CONDITIONS" \ 
--split-by "EmpID" \ 
--where " EmpID='Employee ID' " \ 
-m 1 \ 
--target-dir /user/cloudera/ingest/raw/Employee\ 
--fields-terminated-by "," \ 
--hive-import \ 
--create-hive-table \ 
--hive-table mssql.employees \ 
  1. hive-import - 하이브로 가져 오기 테이블 (설정되어 있지 않은 경우 하이브의 기본 구분 기호 를 사용합니다.)
  2. create-hive-table - 그것은 새로운 HIBE 테이블을 생성합니다. Note: 작업 은 이미 하이브 테이블이있는 경우 실패합니다. 이 경우에는 에서 작동합니다.
  3. hive-table - <db_name>.<table_name>을 지정합니다.
+0

안녕하세요, 내 관심사는 소스 테이블입니다. Employee는 AdventureWorks 데이터베이스의 HumanResources 스키마 아래에 있습니다. HumanResources 스키마를 소스로 사용하도록 스크립트를 선언 할 수 있습니까? 감사합니다. – askdk

+0

--query 매개 변수에서'HumanResources.Employee'를 사용하려고 시도했습니다. – Souvik

+0

이미 시도했지만 실패했습니다. – askdk

0

사용중인 sqoop 명령에 몇 가지 사항이 누락되었습니다. 첫 번째로 이것이 sqoop 가져 오기 작업임을 지정해야합니다. 그 외에 쿼리에 연결 문자열이 있어야합니다. 게다가 내가 당신이 그것을 보지 못했기 때문에 당신이 세부 사항을 게시했다면 더 쉽게했을 것이고 나는 -- --schema=HumanResources 일에 대해 확신하지 못했을 것입니다. 원래 올바른 작업 Sqoop을 조회 예는 다음과 같습니다 당신이 --table 도구를 지정하지 않아도 --query 도구를 사용하는 동안

sqoop import --connect <connection string> --username <username> --password <password> --query <query> --hive-import --target-table <table_name> -m <no_if_mappers 

또한 그렇지 않으면 오류가 발생합니다,이 점을 명심.

+0

문제는, 내 소스 테이블이 스키마 인적 자원이 아닌 기본 DBO 스키마 받고있다. 기본적으로 AdventureWorks.HumanResources.Employee와 같습니다. HumanResources 스키마에서 쿼리하도록 스크립트를 설정하려면 어떻게해야합니까? 감사합니다 – askdk

+0

그냥 - 쿼리 '해봐야한다. SELECT * FROM HumanResources.Employee Where $ CONDITIONS' –

0

-schema는하지만 -query와, -table과 함께 작업 할 수 있습니다. 즉, 쿼리의 텍스트를 구문 분석하고 두 가지 이름으로 된 모든 규정되지 않은 테이블 참조를 교체해야하지만 두 부분, 세 부분 또는 네 부분으로 된 테이블 참조는 교체해야합니다. 그리고 정확히 일치 백 엔드 (이 경우 SQL Server) 구문 규칙을 일치하십시오. 그것은 단지 실현 가능하지 않습니다.

쿼리에 명시 적으로 스키마를 지정

select BusinessEntityId, LoginID, cast(OrganizationNode as string) 
from HumanResources.Employee 
where ... 
+0

은 HumanResources.Employee를 시도했지만 여전히 실패했습니다. 오류 manager.SqlManager : 문 실행 오류 : com.microsoft.sqlserver.jdbc.SQLServerException : 형식 문자열이 정의 된 시스템 형식이 아닙니다. – askdk

+0

예, 올바른 SQL Server 구문을 사용하십시오. [Transact-SQL 참조] (https://docs.microsoft.com/en-us/sql/t-sql/language-reference)를 참조하십시오. CAST to T-SQL에는'string' 같은 타입이 없습니다. –

+0

죄송합니다. 내 잘못이야! HumanResources.Employee가 해결책이었습니다. 바이너리가 마루에서 지원되지 않는다는 것을 깨닫지 못했습니다. 고마워요! – askdk

관련 문제