gpt4 book ai didi

mysql - Sqoop 从 MySQL 导入 : Decimals always imported into Hive as String

转载 作者:行者123 更新时间:2023-12-05 06:41:47 27 4
gpt4 key购买 nike

我正在尝试将数据从 MySQL 导入 Hive(Cloudera 5.8 集群),其中有 4 个数据节点用于 HDFS。使用 Sqoop 1.4.6(包含在 Cloudera 5.8 中)我一直在尝试直接从 MySQL 导入 Hive 并且它有效,除了..我的所有 Decimal (18,2) 字段形成 MySQL 表(InnoDB 格式)总是导入为这显然是错误的 Hive String 数据类型。这是我的 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 Decimal Type,似乎支持 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 Decimal (18,2) 或至少具有 2 位小数的较短数字。

谢谢大家!

最佳答案

Sqoop Import + Parquet + Decimal 已损坏。它已在此处为 avro 修复: https://issues.apache.org/jira/browse/SQOOP-1493

您可以尝试使用 --map-column-hive 转换为 double。

关于mysql - Sqoop 从 MySQL 导入 : Decimals always imported into Hive as String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com