【问题标题】:RJDBC wrongly reading bigintegers from database tableRJDBC 错误地从数据库表中读取大整数
【发布时间】:2014-12-06 14:27:37
【问题描述】:

我正在将包含大整数的列从数据库中检索到 R 中(使用 RJDBCs dbGetQuery 方法)。对于一个测试用例,可以考虑以下数字

1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
**971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490**

R 似乎读错了内容。在 R 中我可以使用它的方式(在我使用 RJDBC 从数据库中读取之后)是:

1000522010609612
1000522010609613
1000522010609614
1000522010609615
1000522010609616
1000522010609617
**971000522010609664
1501000522010819584
971000522010943744
1501000522010733568**

查看最后 4 个数字。他们错了!它似乎正在自动将数据转换为带有损坏数字(对于 bigints)的数据帧(这很好 - 但是)。关于我们如何解决上述问题的任何建议,特别是当我们使用 RJDBC 包使用 dbGetQuery 时?

【问题讨论】:

    标签: r bigint rjdbc


    【解决方案1】:

    您的数据以浮点数形式读入:

    DF <- read.table(text="1000522010609612 
    1000522010609613 
    1000522010609614 
    1000522010609615 
    1000522010609616 
    1000522010609617 
    971000522010609612 
    1501000522010819466 
    971000522010943717 
    1501000522010733490")
    
    class(DF[,1])
    #[1] "numeric"
    sprintf("%20f", DF[10, 1])
    #[1] "1501000522010733568.000000"
    

    您可以将其读取为字符串并转换为大整数或直接读取为大整数:

    library(bit64)
    
    DF <- read.table(text="1000522010609612 
    1000522010609613 
    1000522010609614 
    1000522010609615 
    1000522010609616 
    1000522010609617 
    971000522010609612 
    1501000522010819466 
    971000522010943717 
    1501000522010733490", colClasses = "integer64")
    
    #                    V1
    #1     1000522010609612
    #2     1000522010609613
    #3     1000522010609614
    #4     1000522010609615
    #5     1000522010609616
    #6     1000522010609617
    #7   971000522010609612
    #8  1501000522010819466
    #9   971000522010943717
    #10 1501000522010733490
    

    我无法为您的数据库应用程序提供帮助,但这应该为您解决问题提供一个起点。

    【讨论】:

    • dbGetQuery 应该有一个 colClasses 参数,允许将这些列作为字符导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多