我是比較新的sqooping的過程,所以赦免任何無知。我一直在嘗試將數據源中的表格作爲鑲木地板文件進行拼接,並創建一個impala表格(也稱爲鑲木地板),並將插入sqooped數據。代碼運行沒有問題,但是當我嘗試選擇測試一對夫婦行我得到的錯誤:sqoop創建impala實木複合地板表
.../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的蒞臨指導過程中發現:https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_create_table.html。主要是「內部和外部表」部分。我一直試圖避免必須使用特定的parquet文件來推斷模式,因爲這整個事情每個月都會用bash腳本啓動(而且我也想不出一種方法將它指向一個文件如果我使用多個映射器)。
這是我使用的代碼。我覺得我要麼失去了一些小而愚蠢的東西,要麼我把所有重大事情搞砸了,卻沒有意識到這一點。任何和所有幫助表示讚賞。謝謝!
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';
您也可以考慮使用選項'--hive-import',它立即創建帶有底層parquet文件的配置表格,而不必擔心。 Impala使用相同的表Metastore,因此沒有問題。 – spijs
@spijs謝謝你的建議!這是否會在Impala中自動存在一次sqooped或是否必須進入Hue> Impala並刷新Metastore?由於我們正在爲業務合作伙伴創建這一步驟,因此任何手動步驟都是不可行的。 – kemri
你確實必須刷新元存儲。你還需要表名來創建表,所以在你的腳本中添加一個impala命令可能比例如定義所有不需要的列的作用要小一些,這對於-hive-import – spijs