【问题标题】:BigQuery: How to represent integer of type Long in Bigquery?BigQuery:如何在 BigQuery 中表示 Long 类型的整数?
【发布时间】:2019-02-25 08:41:46
【问题描述】:

我有一个包含“Long”类型整数的数据集。我需要通过对其进行一些算术运算来分析该数据集。有哪些可能的方法来做到这一点?

我已尝试强制转换为 FLOAT,但我无法在该数据类型上使用一些操作,如按位 AND 等。

例如,这里是一个字段的值

18446744073709551615

谢谢

【问题讨论】:

  • 仅供参考 - 您需要对 long 进行按位运算的工作类型是什么?

标签: sql google-bigquery data-analysis integer-arithmetic


【解决方案1】:

如果您想保留一个数字及其所有小数点,您可以使用numeric

select cast('18446744073709551615' as numeric)

这不是无限灵活的。它实际上等同于任何其他数据库中的numeric(38, 9)。 BigQuery 无法控制规模和精度。这在 documentation 中有所描述(诚然,这是 BigQuery 的最新补充)。

【讨论】:

  • 无法对其使用按位运算。错误:按位运算符 & 需要两个相同类型的整数/字节参数,但看到了 NUMERIC 和 NUMERIC
  • @john 。 . .哎哟。按位运算需要一些技巧。但您始终可以使用* 2/ 2
  • 我试图通过将大长整数分解为两个小整数然后对其执行操作来打破逻辑。 +、-、*、/ 等基本操作运行良好,但按位 & 操作使事情变得复杂。如果您有更好的主意,我将不胜感激。 :)
  • 您可以在the issue tracker 上提交功能请求吗?
  • @ElliottBrossard 完成 :)
【解决方案2】:

整数的长范围是:

long 数据类型是 64 位二进制补码整数。签署的 long 的最小值为 -2^63,最大值为 2^63-1

在 BigQuery 中,普通整数 long 由 INT64(INTEGER) 表示。

Google Big-Query 文档:https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#integer_type

** 基本上,long 映射到 INTEGER (INT64),它在 bigquery 中的范围更大。 **

因此,如果您将其保留为 INTEGER 类型,并且算术运算不会导致最终值的小数点,那么您应该可以在 BigQuery 中使用数据类型 INTEGER 表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2020-03-10
    • 2018-07-10
    • 1970-01-01
    • 2014-03-20
    • 2021-10-14
    • 2023-03-27
    相关资源
    最近更新 更多