2014-10-02 5 views
2

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을 버그의 데이터를 가져올 수 없습니다.

누구든지 문제를 해결하고 해결 했습니까? 그렇다면 제안하십시오.

답변

1

(및 값)은 데이터를 테이블로 업로드 할 때만 문제가 있지만 테이블 생성에는 문제가없는 것으로 보입니다. 이것은 또한 한 번에 하나의 파티션으로 만로드되도록합니다.

하지만 당신은 몇 가지 단계를 통해 작업을 수행하려고 할 수 있습니다 :

  1. partitioned_table을 만듭니다.
  2. 평 균 하이브에 -create-hive-table을 입력하여 데이터를로드하십시오. plain_table. 같은 것을 사용하여 파티션 테이블에
  3. 데이터로드 :

INSERT OVERWRITE TABLE partitioned_table PARTITION(partitionColumn) SELECT col1, ... colN, partitionColumn FROM plain_table;

+0

하이브 물리적 폴더로 분할 열을 나타내고, 각각의 폴더에 데이터를 입력. 테이블에 데이터를로드하는 데 문제가 없습니다. 실제 문제는 파티션 키를 생성되는 폴더와 함께 데이터 값으로 사용하는 것입니다. 또한 -create-hive-table은 데이터를로드하지 않지만 하이브 테이블 스키마 만 만들 것이라고 생각합니다. 우리가 발견 한 버그는 파티션 키의 다른 이름을 가지고 데이터의 일부로 그리고 파티션 키로 사용하는 해결책이었습니다. – Maverick4U

+0

파티션에는 값이 들어 있습니다. 폴더는 'month = SEP'와 같이 호출됩니다. 여기서 'month'는 파티션 열 이름이고 'SEP'는 값입니다 (적어도 하이브 0.13에서는 true입니다). – arghtype