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)

深入了解 BigQuery 如何解释给定输入的类型对于创建健壮的 SQL 查询至关重要。

BigQuery 数据类型 STRING

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

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

新开发人员遇到的一个棘手的情况是处理包含整数或浮点数以及符号的行,例如货币情况。

虽然可以假设 $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(),最好包含其他逻辑以将从 FLOAT 返回的任何 NULL 值转换为所需的类型。

广告

© . All rights reserved.