我试图将数据从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个小数点的较短数字。
谢谢大家
Sqoop导入+Parquet+十进制被打破。这里的avro已经修复了。https:/issues.apache.orgjirabrowseSQOOP-1493。
你可以尝试用 --map-column-hive
.