这种情况就像我有一个10列的配置单元表。我想使用Sqoop将我的配置单元表中的数据导出到oracle表中。将Sqoop从配置单元导出到oracle,使用不同的col名称,列数和列顺序
但是,目标oracle表中有30列与hive表列有不同的名称。此外,oracle表中的列位置与配置单元表中的不同。
任何人都可以请建议如何编写这种情况下的Sqoop导出命令?
这种情况就像我有一个10列的配置单元表。我想使用Sqoop将我的配置单元表中的数据导出到oracle表中。将Sqoop从配置单元导出到oracle,使用不同的col名称,列数和列顺序
但是,目标oracle表中有30列与hive表列有不同的名称。此外,oracle表中的列位置与配置单元表中的不同。
任何人都可以请建议如何编写这种情况下的Sqoop导出命令?
有2个选项:
截至目前,sqoop出口是非常有限的(思维,因为这是没有太大的预期功能,但周围的其他方式),它给指定--export-dir
这是唯一的选择表的仓库目录。它会加载所有列。因此,您可能需要将其加载到临时表&,并使用相关列映射将其加载到原始基表中。
您可以从蜂巢使用导出数据:
INSERT OVERWRITE DIRECTORY '/user/hive_exp/orders' select column1, column2 from hivetable;
然后使用Oracle的本地导入工具。这给了更多的灵活性。
如果您有更好的解决方案,请更新。
首先,你不能直接从配置单元导出数据到oracle。
需要导出蜂巢表HDFS
样本命令:
export table mytable to 'some_hdfs_location'
或使用您的蜂巢表的HDFS数据位置。
命令检查位置
show create table mytable
所以,现在你有数据的位置,为您的蜂巢表。
可以在Sqoop导出使用--columns
tag命令选择列的顺序和数量。
不同的列名称没有问题。
我以简单的例子
现在你有一个列蜂房表 - C1,C2,C3
和Oracle表 - COL1,COL2,COL3,COL4,COL5
我想将c1与col2,c2与col5,c3与col1进行映射。
我将在我的sqoop命令中使用--columns "col2,col5,col1"
。
按Sqoop docs,
默认情况下,表中的所有列被选中用于出口。您可以通过使用--columns参数来选择列的子集并控制其排序。这应该包括一个以逗号分隔的列导出列表。例如:--columns“col1,col2,col3”。请注意,不包含在--columns参数中的列需要定义默认值或允许NULL值。否则,您的数据库将拒绝导入的数据,从而导致Sqoop作业失败。
你能举出上面例子给出的任何示例sqoop export命令吗? –
@dev如果有一个配置单元表,它的数据将被存储在HDFS位置(通常在像hive仓库这样的目录中)对吗?那么,如果我们试图通过提及配置单元仓库位置而不是将Hive中的数据引入HDFS并执行导出来尝试导出,那该怎么办呢?它不会起作用吗? – JKC
@JKC是的,它会工作。我会用这个澄清来编辑我的答案:) –
请尝试下面的内容,假设您的配置单元表是作为外部表创建的,并且您的数据位于/ myhivetable/data /中,则字段以|并且行以'\ n'结尾。
在你的RDBMS表中,不会从配置单元HDFS填充的20列应该有默认值或允许空值。
让我们假设您的数据库列是DC1,DC2,D4,DC5 .... D20和配置单元列是c1,c2,c3,c3,...... c10,您的映射如下。
DC1 -- c8
DC2 -- c1
DC3 -- c2
DC4 -- c4
DC5 -- c3
DC6 -- c7
DC7 -- c10
DC8 -- c9
DC9 -- c5
DC10 -- c6
sqoop export \
--connect jdbc:postgresql://10.10.11.11:1234/db \
--table table1 \
--username user \
--password pwd \
--export-dir /myhivetable/data/ \
--columns "DC2,DC3,DC5,DC4,DC9,DC10,DC6,DC1,DC8,DC7" \
--fields-terminated-by '|' \
--lines-terminated-by '\n' \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N"
'--col col1,col2'是导出过程中目标表(oracle)中的列。因为'sqoop export'没有指定Hive导出,所以我们不是指任何Hive表,我们只是指的是蜂巢数据的位置。 – KiranM