给定一个包含ddl的sql脚本,用于在mysql数据库中创建表,我想将该脚本转换为hiveddl,以便可以将表创建到hive中。我本可以自己编写一个解释器,但我认为可能会遗漏一些细节(例如数据格式转换、int、bigint、时间、日期等),因为我对hiveddl非常陌生。
我看过这个线程如何将mysql表传输到hive?,它提到了sqoophttp://archive.cloudera.com/cdh/3/sqoop/sqoopuserguide.html. 然而,在我看来,sqoop当然会翻译ddl,但只是作为一个中间步骤(因此翻译后的ddl在哪里都找不到)。我是否缺少将mysql ddl作为输入输出翻译的命令?
例如,我的mysql ddl看起来像:
CREATE TABLE `user_keyword` (
`username` varchar(32) NOT NULL DEFAULT '',
`keyword_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`username`,`keyword_id`),
KEY `keyword_id` (`keyword_id`),
CONSTRAINT `analyst_keywords_ibfk_1` FOREIGN KEY (`keyword_id`) REFERENCES `keywords` (`keyword_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
输出配置单元ddl如下所示:
CREATE TABLE user_keyword (
username string,
keyword_id int,
);
2条答案
按热度按时间1cklez4t1#
或者,可以使用createhivetable工具来实现这一点。“创建配置单元表”工具使用基于先前导入到hdfs的数据库表或计划导入的数据库表的表定义来填充配置单元元存储。这将有效地执行sqoop import的--hive import步骤,而不运行前面的导入。例如,
sqoop创建配置单元表--连接jdbc:mysql用法://localhost/demo-username root--table t2--以“,”结尾的字段--hive table t2
此命令将基于mysql中同一表的模式创建一个空hive表t2,而不导入数据。
7z5jn7bk2#
实际上我认为这是不受支持的,但是在查看了源代码之后,我在hiveimport.java中看到了:
所以基本上您应该只能使用这个选项生成ddl
--generate-only
与…结合使用--outdir
您的表将在指定的输出目录中创建,并以您的表命名。例如,根据您提供的链接:
将创建
/tmp/mysql_to_hive/ddl/employee.q