mysql 또는 임의의 RDBMS에서 하이브로 테이블 스키마를 복사하는 적절한 인수로 sqoop create-hive-table 명령을 사용했습니다. 오늘 내가 사용해야하는 요구 사항을 발견했습니다"sqoop create-hive-table"을 사용하여 테이블 스키마를 생성하는 Sqoop
--hive-partition-key와 함께 "sqoop create-hive-table"을 지정하면 파티션 열이 지정된 테이블 스키마를 만들 수 있습니다. Sqoop을 명령은 내가 사용 :
만들-하이브 테이블 Sqoop을 --connect JDBC : mysql을 : --table POC_XYZ_Partition \ // localhost를/XYZ \ --username XYZ --password 비밀번호 \ --hive- --fields가 종료 별 \ 테이블 POC_XYZ.POC_Datatype_Mapping_Sodhi \이 --hive 파티션 키 join_date ','--lines이 종료-하여 오류 메시지와 함께 밖으로 오류가 발생한 '\ n을'
:
ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.IllegalArgumentException: Partition key join_date cannot be a column to import.
파티션 키가 테이블 생성 명령의 일부가되어서는 안되지만 완전히 잊어 버렸습니다.
나는 다음 해결 방법 발견했다 :
sqoop create-hive-table --connect jdbc:mysql://localhost/XYZ \ --username XYZ --password password \ --table POC_XYZ_Partition \ --hive-table POC_XYZ.POC_Datatype_Mapping_Sodhi \ --hive-partition-key join_date_partition \ --fields-terminated-by ',' --lines-terminated-by '\n'
위의 스키마를 생성하지만 HDFS에 MySQL의 데이터를로드하려고 할 때 나중에는의 일부가 될하기 위해 join_date_partition을 고려하고있다 mysql 테이블과 mysql에서 데이터를 가져 오지 않습니다.
내가 좋아하는 많은 솔루션을 시도 :sqoop import --connect jdbc:mysql://localhost/XYZ \ --username XYZ --password password \ --query 'select a.*, a.join_date as join_date_partition from POC_XYZ_Partition a WHERE $CONDITIONS' \ --split-by id \ --hcatalog-database POC_XYZ \ --hcatalog-table POC_XYZ_Partition;
하지만 나 때문에이 Sqoop을에 열 이름을 중복 허용하지 않을 Sqoop을 버그의 데이터를 가져올 수 없습니다.
누구든지 문제를 해결하고 해결 했습니까? 그렇다면 제안하십시오.
하이브 물리적 폴더로 분할 열을 나타내고, 각각의 폴더에 데이터를 입력. 테이블에 데이터를로드하는 데 문제가 없습니다. 실제 문제는 파티션 키를 생성되는 폴더와 함께 데이터 값으로 사용하는 것입니다. 또한 -create-hive-table은 데이터를로드하지 않지만 하이브 테이블 스키마 만 만들 것이라고 생각합니다. 우리가 발견 한 버그는 파티션 키의 다른 이름을 가지고 데이터의 일부로 그리고 파티션 키로 사용하는 해결책이었습니다. – Maverick4U
파티션에는 값이 들어 있습니다. 폴더는 'month = SEP'와 같이 호출됩니다. 여기서 'month'는 파티션 열 이름이고 'SEP'는 값입니다 (적어도 하이브 0.13에서는 true입니다). – arghtype