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 转换为所需类型。