【发布时间】:2019-06-07 05:35:12
【问题描述】:
我在 BigQuery 中有一个输入表,其中所有字段都存储为字符串。例如,表格如下所示:
name dob age info
"tom" "11/27/2000" "45" "['one', 'two']"
在查询中,我目前正在执行以下操作
WITH
table AS (
SELECT
"tom" AS name,
"11/27/2000" AS dob,
"45" AS age,
"['one', 'two']" AS info )
SELECT
EXTRACT( year from PARSE_DATE('%m/%d/%Y', dob)) birth_year,
ANY_value(PARSE_DATE('%m/%d/%Y', dob)) bod,
ANY_VALUE(name) example_name,
ANY_VALUE(SAFE_CAST(age AS INT64)) AS age
FROM
table
GROUP BY
EXTRACT( year from PARSE_DATE('%m/%d/%Y', dob))
此外,我尝试执行一个非常基本的group by 操作,将项目转换为字符串与否,并且我没有看到大约 1M 行的数据集有任何性能下降(实际上,在这种特殊情况下,转换到一个字符串更快):
除了“保留”这个全字符串表而不将其转换为正确的类型是不好的做法之外,我在保留一个表时会遇到哪些限制(无论是功能还是性能方面) -string 而不是将其存储为正确的类型。我知道由于存储字符串而不是数字/日期/布尔/等,大小会略有增加,但是如果我保持这种方式,我会遇到哪些主要限制或性能损失?
在我的脑海中,我看到的唯一限制是:
- 查询会变得更加复杂(但如果使用查询构建器则无关紧要)。
- 从数组字段中提取非字符串项有点困难。
- 插入数据变得有点棘手(例如,需要跟踪日期格式是什么)。
但这些似乎都是可以解决的非常小的项目。是否还有其他“更大”的原因导致使用所有字符串字段会成为一个巨大的限制,无论是限制查询能力还是在各种情况下都会对性能造成巨大影响?
【问题讨论】:
-
它可能与问题的实质无关 - 但您的查询将不会运行,因为
GROUP 2它可能是其他东西遗留下来的? -
@MikhailBerlyant 感谢您指出这一点。我用两个实际例子更新了这个问题。
-
这个问题主要是基于意见的。您肯定会因反复转换字段的开销而导致性能下降。
-
@MạnhQuyếtNguyễn 尽管如此,我正在评估它是否是一个可行的选择。
标签: sql google-bigquery