我是一个比较新的sqooping过程,所以请原谅我的无知。我一直在尝试将数据源中的一个表作为parquet文件进行sqoop,并创建一个impala表(也作为parquet),在其中插入sqooped数据。代码运行时没有问题,但当我尝试选择几行进行测试时,出现了错误:
.../EWT_CALL_PROF_DIM_SQOOP/ec2fe2b0-c9fa-4ef9-91f8-46cf0e12e272.parquet' has an incompatible Parquet schema for column 'dru_id.test_ewt_call_prof_dim_parquet.call_prof_sk_id'. Column type: INT, Parquet schema: optional byte_array CALL_PROF_SK_ID [i:0 d:1 r:0]
我在模仿我在cloudera指南上找到的过程here:https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_create_table.html. 主要是“内外表”部分。我一直在努力避免用一个特定的Parquet文件来推断模式,因为每个月都会用一个bash脚本来启动整个过程(如果我使用多个Map器,我也想不出一种方法来将它指向一个文件)。
这是我使用的代码。我觉得我要么错过了一些小而愚蠢的事情,要么我把所有重大的事情都搞砸了,却没有意识到这一点。感谢所有的帮助。谢谢!
sqoop import -Doraoop.import.hint=" " \
--options-file /home/kemri/pass.txt \
--verbose \
--connect jdbc:oracle:thin:@ldap://oid:389/cn=OracleContext,dc=[employer],dc=com/EWSOP000 \
--username [userid] \
--num-mappers 1 \
--target-dir hdfs://nameservice1/data/res/warehouse/finance/[dru_userid]/EWT_CALL_PROF_DIM_SQOOP \
--delete-target-dir \
--table DMPROD.EWT_CALL_PROF_DIM \
--direct \
--null-string '\\N' \
--null-non-string '\\N' \
--as-parquetfile
impala-shell -k -i hrtimpslb.[employer].com
create external table test_EWT_CALL_PROF_DIM_parquet(
CALL_PROF_SK_ID INT,
SRC_SKL_CD_ID STRING,
SPLIT_NM STRING,
SPLIT_DESC STRING,
CLM_SYS_CD STRING,
CLM_SYS_NM STRING,
LOB_CD STRING,
LOB_NM STRING,
CAT_IND STRING,
CALL_TY_CD STRING,
CALL_TY_NM STRING,
CALL_DIR_CD STRING,
CALL_DIR_NM STRING,
LANG_CD STRING,
LANG_NM STRING,
K71_ATOMIC_TS TIMESTAMP)
stored as parquet location '/data/res/warehouse/finance/[dru_userid]/EWT_CALL_PROF_DIM_SQOOP';
1条答案
按热度按时间jgzswidk1#
根据评论中的请求,我提供了一个示例,说明如何使用一个sqoop导入实现相同的功能
--hive-import
. 由于明显的原因,我还没有针对您的特定需求对它进行测试,因此它可能需要更多的调整,这通常是使用这些sqoop命令时的情况。根据我的经验,进口Parquet地板迫使你使用--query
选项,因为它不允许您将schema.table用作表。基本上就是你需要的
--hive-import
是--hive-database
,--hive-table
以及--query
. 如果不希望所有列都以字符串形式出现在配置单元中,则还必须包括:你可能需要一个类似的
--map-java-columns
当然,但我不知道什么时候需要。你需要一个--split-by
如果需要多个Map器正如您需要使用的注解中所讨论的
invalidate metadata db.table
以确保 Impala 看到这些变化。可以从cl发出这两个命令,也可以使用一个bash脚本发出impala命令impala-shell -q [query]
.