BigQuery - 数据类型

在加载和查询数据时,了解 BigQuery 对数据类型的使用和解释至关重要。如架构章节中所示,加载到 BigQuery 中的每个列都必须具有已定义的可接受类型。

BigQuery 接受其他 SQL 方言使用的许多数据类型,并且还提供 BigQuery 独有的数据类型。

跨 SQL 方言的常见数据类型

跨 SQL 方言的常见数据类型包括 −

  • STRING
  • INTEGER
  • FLOAT
  • BOOLEAN

BigQuery 还支持特殊数据类型,例如 JSON 数组,这将在后面的章节中讨论。

注意 −如果在加载过程中未提供架构或未指定类型,BigQuery 将推断类型。但是,对于依赖不可预测的上游数据的集成,这不一定是积极的结果。

与分区和聚类列一样,类型必须在创建表时指定。

使用 CAST() 函数更改类型

可以在查询中更改类型(临时或永久)。为此,请使用 CAST() 函数。 CAST 使用以下语法 −

CAST(column_name AS column_type)

例如 −

CAST(id AS STRING)

与指定错误类型一样,尝试强制 CAST 不兼容的类型可能会令人沮丧并导致基础架构中断。

要获得更可靠的类型转换方法,请使用 SAFE_CAST(),它将为不兼容的行返回 NULL,而不是完全中断 −

SAFE_CAST(id AS STRING)

要创建强大的 SQL 查询,必须充分了解 BigQuery 如何解释给定输入的类型。

BigQuery 数据类型 STRING

在 SQL 开发人员使用的最常见数据类型中,BigQuery 中的 STRING 类型通常很容易识别。但是,字符串的操作或解释偶尔会出现一些怪癖。

通常,字符串类型由字母数字字符组成。虽然字符串类型可以包含整数类数字和符号,但如果指定类型为 STRING,则此信息将像常规字符串一样存储。

新开发人员遇到的一个棘手情况是处理包含带符号的 INTEGER 或 FLOAT 值的行,例如货币的情况。

虽然可能会因为小数点而假设 $5.00 是 FLOAT,但美元符号使其成为字符串。因此,在加载带有美元符号的行时,BigQuery 会期望它在您的架构中定义为 STRING 类型。

DATE 数据类型

STRING 类型的一个子集是 DATE 数据类型。

  • 尽管 BigQuery 对日期值有自己的指定,但日期值本身默认表示为字符串。
  • 对于使用 Python 中的 Pandas 的人来说,这类似于日期字段在数据框中表示为对象的方式。
  • 有各种专用于解析 STRING 数据的函数。

STRING 函数

值得注意的 STRING 函数包括 −

  • LOWER() −将字符串中的所有内容转换为小写
  • UPPER() − lower 的逆操作;将值转换为大写
  • INITCAP() − 仅将每个句子的首字母大写;即句子大小写
  • CONCAT() − 组合字符串元素

重要的是,BigQuery 中的数据类型默认为 STRING。除了常规字符串元素外,这还包括开发人员未指定 REPEATED 模式的列表。

INTEGER 和 FLOAT

如果您在企业(业务)规模上使用 BigQuery,则很可能会处理涉及数字的数据。这可能是从出勤数据到营业收入的任何数据。

无论如何,STRING 数据类型对于这些用例没有意义。这不仅是因为这些数字没有美元符号或欧元等货币符号,还因为要生成有用的见解,需要利用特定于数字数据的函数。

注意 INTEGER 和 FLOAT 之间的区别很简单:"。"

在许多 SQL 方言中,当指定数值时,开发人员需要告诉 SQL 引擎需要多少位数字。这就是传统 SQL 获得 BIGINT 等名称的地方。

BigQuery 将 FLOAT 类型编码为 64 位实体。这就是为什么当您将列 CAST() 转换为 FLOAT 类型时,您会像这样执行 −

CAST(column_name AS FLOAT64)

值得注意的 INTEGER 和 FLOAT 函数

其他值得注意的 INTEGER 和 FLOAT 函数包括 −

  • ROUND()
  • AVG()
  • MAX()
  • MIN()

注意事项

FLOAT 类型的一个重要警告是,除了指定句点分隔的数字外,FLOAT 类型也是 NULL 的默认类型。

如果使用SAFE_CAST(),最好包含额外的逻辑来将任何返回的 NULL 值从 FLOAT 转换为所需类型。