Sqoop zu create table schema mit "sqoop erstellen einer hive-Tabelle"
Ich habe mit sqoop erstellen-hive-table-Befehl mit den entsprechenden Argumenten, die würde kopieren Sie die Tabelle schema von mysql oder jede RDBMS-in-Struktur. Heute stieß ich auf eine Anforderung, wo ich zu verwenden habe
"sqoop erstellen einer hive-Tabelle" zusammen mit-hive-partition-key create table schema mit partition-Spalte angegeben. Die sqoop Befehl, den ich verwendet:
sqoop erstellen einer hive-Tabelle --connect jdbc:mysql://localhost/XYZ \
--username-XYZ --password password \
--Tabelle POC_XYZ_Partition \
--hive-Tabelle POC_XYZ.POC_Datatype_Mapping_Sodhi \
--hive-partition-key join_date \
--fields-terminated-by ',' --lines-terminated-by '\n'
welche fehlerhaft mit der Fehlermeldung:
ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.IllegalArgumentException: Partition key join_date cannot be a column to import.
Ich weiß partition Schlüssel sollte nicht ein Teil der create table-Befehl, aber ich habe ganz vergessen, dass.
Gefunden habe ich dann ein work-around und nicht:
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'
Oben erstellt das schema, aber später, wenn ich versuchte, laden von Daten aus mysql in hdfs ist es unter Berücksichtigung der join_date_partition ein Teil der mysql-Tabelle, und nicht immer die Daten aus der mysql.
Ich habe versucht, viele Lösungen wie:
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;
aber konnte nicht importiert werden die Daten aufgrund eines Fehlers in sqoop, die nicht erlauben würde, mich zu duplizieren die Namen der Spalten in sqoop.
Hat jemand vor das Problem und es behoben? Wenn so, schlagen Sie bitte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass
-hive-partition-key
(und Wert) nur nicht egal, für das hochladen von Daten in die Tabelle, aber nicht für die Erstellung der Tabelle. Dies zwingt auch zu einer Last, die nur in eine einzige partition auf Zeit.Aber Sie könnten versuchen, zu tun, Ihre Aufgabe in mehreren Schritten:
-create-hive-table
in plain hive plain_table.INSERT OVERWRITE TABLE partitioned_table
PARTITION(partitionColumn)
SELECT col1, ... colN, partitionColumn
FROM plain_table;