从MySQL导入Sqoop。小数总是以字符串的形式导入到Hive中。

问题描述 投票:2回答:1

我试图将数据从MySQL导入到Hive(Cloudera 5.8集群),HDFS有4个数据节点。使用Sqoop 1.4.6(包含在Cloudera 5.8中),我一直在尝试直接从MySQL导入Hive,它的工作原理是......我所有的十进制(18,2)字段形成MySQL表(InnoDB格式)总是作为Hive字符串数据类型导入,这显然是错误的。这是我的Sqoop bash(在CentOS 6.7上)脚本"。

sqoop import --null-string '\\N' --null-non-string '\\N' --hive-delims-replacement '\0D' --fields-terminated-by '\001' --connect jdbc:mysql://xxx.xxx.xxx/live_data --username (user_name) --password 'xxxxxx' --table (table name) --hive-import --hive-database (hive_database) --hive-table (table name) --target-dir "(target directory)" --as-parquetfile --hive-overwrite --map-column-hive 'price=DECIMAL\(18%2C2\)'

脚本": map-column-hive 似乎是允许的(意思是,没有错误,尽管我读到过在1.4.7中的修正),而且我用"%2C "代替了逗号(因为当你直接使用", "时你会得到一个错误)。

我检查了Hive十进制类型,似乎支持18.2的大小(cloudera 5.1+)。我尝试了很多变化:使用双引号代替单引号,使用

("-null-string '\\N' --null-non-string '\\N' --hive-delims-replacement '\0D' --fields-terminated-by '\001'") 

这对XML数据有很大的帮助,另一个表,在我使用这些设置之前,把数据弄乱了)。)

我也试过减少数字的数量(例如8,2),但无论我怎么做,我似乎从MySQL中得到的小数都被转换为Hive字符串类型,这对于数字聚合函数来说是很糟糕的。

我想把我的Sqoop升级到1.4.7,但我在编译后运行时出现了错误,这是一个单独的问题。由于某些原因,要么是我的 map-column-hive 参数被忽略或不工作。

有谁能回答我如何能让这个从十进制(18,2)正确导入到Hive十进制(18,2),或者至少是一个有2个小数点的较短数字。

谢谢大家

mysql string decimal cloudera sqoop
1个回答
0
投票

Sqoop导入+Parquet+十进制被打破。这里的avro已经修复了。https:/issues.apache.orgjirabrowseSQOOP-1493。

你可以尝试用 --map-column-hive.

© www.soinside.com 2019 - 2024. All rights reserved.