Ich bin relativ neu der Prozess des Sqooping so entschuldigen Sie jede Ignoranz. Ich habe versucht, eine Tabelle aus einer Datenquelle als eine Parkettdatei zu stützen und eine Impala-Tabelle (auch als Parkett) zu erstellen, in die ich die gecloopten Daten einfügen werde. Der Code läuft ohne ein Problem, aber wenn ich versuche, ein paar Zeilen für die Prüfung auszuwählen erhalte ich die Fehlermeldung:sqoop erstellen impala Parketttisch
.../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]
Ich war Spiegelung der Prozess, den ich hier auf einem cloudera Führer gefunden: https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_create_table.html. Hauptsächlich der Abschnitt "Interne und externe Tabellen". Ich habe versucht, zu vermeiden, das Schema mit einer bestimmten Parkett-Datei ableiten zu müssen, da diese ganze Sache jeden Monat mit einem Bash-Skript gestartet wird (und ich kann mir auch keine Möglichkeit vorstellen, es auf nur eine Datei zu verweisen wenn ich mehr als einen Mapper verwende).
Hier ist der Code, den ich verwendet habe. Ich habe das Gefühl, dass ich entweder etwas Kleines und Dummes vermisse, oder dass ich alles Wichtige vermasselt habe, ohne es zu merken. Jede und jede Hilfe wird geschätzt. Vielen Dank!
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';
Sie können auch die Option '--hive-import' verwenden, die sofort Hive-Tabellen mit zugrunde liegenden Parkett-Dateien erstellt, ohne dass Sie sich Sorgen machen müssen. Impala verwendet den gleichen Tabellenmetastor, also keine Probleme. – spijs
@spijs danke für den Vorschlag! Würde das automatisch in Impala existieren, sobald es sqooped ist oder müsste ich nach Hue> Impala gehen und den Metastore auffrischen? Jede Menge manueller Schritte ist ein Nein, da wir dies für Geschäftspartner erstellen. – kemri
Sie müssten in der Tat den Meta-Store aktualisieren. Sie brauchen auch den Tabellennamen, um die Tabelle zu erstellen, daher ist das Hinzufügen eines Implana-Befehls zu Ihrem Skript wahrscheinlich weniger Arbeit als zum Beispiel das Definieren all Ihrer Spalten, was nicht notwendig ist mit -hive-import – spijs