可以使用 Sqoop 将数据从 HDFS 导出到 RDBMS 表。但似乎我们需要有现有的表。
是否有一些参数可以告诉 Sqoop 执行“CREATE TABLE”并将数据导出到这个新创建的表?
如果是,它会与 Oracle 一起工作吗?
恐怕 Sqoop 目前不支持在 RDBMS 中创建表。Sqoop 使用 RDBMS 中的表来获取元数据(列数及其数据类型),所以我不确定 Sqoop 可以从哪里获取元数据来为您创建表。
您实际上可以通过 sqoop eval 执行任意 SQL 查询和 DDL,至少使用 MySQL 和 MSSQL。我希望它也可以与 Oracle 一起使用。MSSQL 示例:
sqoop eval --connect 'jdbc:sqlserver://<DB SERVER>:<DB PORT>;
database=<DB NAME>' --query "CREATE TABLE..."
--username <USERNAME> -P
我注意到你也使用 Oracle。某些 sqoop 供应商特定的 sqoop 连接器支持这一点,包括 Oracle。Sqoop 的 Oracle 直接连接模式可以选择这样做
https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_create_oracle_tables
24.8.5.4。创建 Oracle 表
-Doraoop.template.table=模板表名
通过复制 TemplateTableName 的结构和数据类型来创建 OracleTableName。TemplateTableName 是执行 Sqoop 命令之前存在于 Oracle 中的表。
附言。您必须使用 --direct sqoop 导出选项来激活 sqoop 直接模式 = 'Data Connector for Oracle and Hadoop'(又名 OraOOP - 旧名称)。