복붙노트

[HADOOP] Sqoop을 : SQL 함수를 사용하여 --split-로 가져 오기

HADOOP

Sqoop을 : SQL 함수를 사용하여 --split-로 가져 오기

이 이전에 대답하고있다하지만 난 여기에 스택 오버플로를 찾을 수없는 생각하면 미안 해요.

내 소스 MySQL의 테이블에서 VARCHAR PK가 발생하는 수입하면서 좋지 않아 중복에 소금물에 절이있어, 나는 테이블 50기가바이트 주위에 있기 때문에 -m 1을 사용하려는 해달라고 각 그래서 난 열에 옵션에 의해 분할에 제공하기 위해 노력하고 내가 VARCHAR하지만 다음과 같은 자사의 int로 정의됩니다 알고

나는 EMR의 5.14.0에 Sqoop을 1.4.7 오전

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://host/jslice \
--username=*** --password *** --table orders --fields-terminated-by '|' \
--lines-terminated-by '\n' --null-non-string "\\\\N" --null-string 
"\\\\N" --escaped-by '\' \
--optionally-enclosed-by '\"' --map-column-java dwh_last_modified=String 
--hive-drop-import-delims \
--as-parquetfile -m 16 --compress --compression-codec 
org.apache.hadoop.io.compress.SnappyCodec --delete-target-dir \
--target-dir hdfs:///hive/warehouse/jslice/orders/text3/ --split-by 
'cast(order_number as UNSIGNED)'

내부적으로 Sqoop을은 경계 쿼리 등을 구축

INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT 
MIN(`cast(order_number as UNSIGNED)`), MAX(`cast(order_number as 
UNSIGNED)`) FROM `archive_orders`

그리고 오류가 발생합니다

ERROR tool.ImportTool: Encountered IOException running import job: 
java.io.IOException: java.sql.SQLSyntaxErrorException: (conn=472029) 
Unknown column 'cast(order_number as UNSIGNED)' in 'field list'

나는 우리가 분할에 의해 SQL 함수에 전달할 수 있다고 게시물을 보았다하지만 난 정말 작동하는지 확인하려면

나뿐만 아니라 ""를 시도하고 다시와 캐스트 명령 틱 참고

https://community.hortonworks.com/questions/146261/sql-function-in-split-by.html

https://community.cloudera.com/t5/Data-Ingestion-Integration/Sqoop-split-by-date-wants-to-compare-a-timestamp-with/m-p/69668#M3159

해결법

    from https://stackoverflow.com/questions/51217677/sqoop-import-with-split-by-using-sql-function by cc-by-sa and MIT license