如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构
Posted
技术标签:
【中文标题】如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构【英文标题】:how to define hive table structure using sqoop import-mainframe --create-hive-table command 【发布时间】:2016-08-24 16:04:42 【问题描述】:我们正在尝试导入一个平面大型机文件以加载到配置单元表中。我能够使用 sqoop import-mainframe 将其导入并加载到 hive 表中,但我的整个文件都放在一列中,而且该列中也没有名称。
是否可以在 sqoop import 命令本身中定义表结构?
我们正在使用以下命令从大型机导入并将其加载到 Hive 表中
sqoop import-mainframe --connect mainframe.com --dataset mainframedataset --username xxxxx -P --hive-import --create-hive-table --hive-table table1 --warehouse-dir /warehouse/
大型机数据示例:
ASWIN|1234|1000.00 XXXX|1235|200.00 YYYY|1236|150.00
sqoop生成的Hive表创建脚本:
CREATE TABLE Employee ( DEFAULT_COLUMN STRING) COMMENT 'Imported by sqoop on 2016/08/26 02:12:04' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LINES TERMINATED BY '\012' STORED AS TEXTFILE
【问题讨论】:
分享mainframedataset
dataset 的样本数据。 列中没有名称是什么意思?
还将--verbose
放在命令末尾(查看扩展日志)。它将显示 CREATE TABLE 语句。也分享该声明。
感谢开发者的回复!!。我的大型机数据集包含以下示例数据 ASWIN|1234|1000.00 XXXX|1235|200.00 YYYY|1236|150.00 我需要移动这个使用 sqoop 命令到 Hadoop 配置单元表的日期,并希望将表定义为表名称为员工,列为 (Name String, Empid int,Amount float) 但现在在 sqoop -hive-import --create- hive-table 没有提供定义列名的选项有没有办法这样做?
我尝试了 --verbose 语句,下面是创建表时发生的情况 16/08/26 02:12:04 DEBUG hive.TableDefWriter: Create statement: CREATE TABLE Employee
(@987654326 @ STRING) COMMENT 'Imported by sqoop on 2016/08/26 02:12:04' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LINES TERMINATED BY '\012' STORED AS TEXTFILE 所有三列都存储为单个列名为“DEFAULT_COLUMN”的列
我更新了你的问题。这就是你想要的。对吗?
【参考方案1】:
根据 Sqoop docs,
默认情况下,数据集中的每条记录都存储为文本记录,末尾有一个换行符。假设每条记录都包含一个名为 DEFAULT_COLUMN 的文本字段。当 Sqoop 将数据导入 HDFS 时,它会生成一个 Java 类,该类可以重新解释它创建的文本文件。
您的 psv 文件将被加载到 HDFS。
现在使用自己创建table1
(hive 表) -
CREATE TABLE table1 (Name string, Empid int,Amount float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\012' STORED AS TEXTFILE
现在运行不带--create-hive-table
标签的 sqoop 导入命令。它应该可以工作。
【讨论】:
以上是关于如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Sqoop 从 MySQL 增量导入到 Hive?