【发布时间】:2019-10-09 21:28:32
【问题描述】:
我想确保不会对基于 BigQuery 架构设计的查询性能产生负面影响。我有两个需要执行连接的表。我将用于连接表的列可以是 INTEGER 或 STRING 类型。在我的情况下,STRING 会更容易,因为它不需要在我们的代码库中进行任何新的验证来确保所有值都是 INTEGER 类型。但我不想加入 STRING 类型,如果查询性能比在 INTEGER 类型列上运行联接要差得多。
当连接类型为 STRING 与类型为 INTEGER 时,BigQuery 的性能是否存在很大差异?
---更新 10/16---
我对此进行了一些基本分析,结果如下:
使用公共数据集,users 表有 10M 行,posts 表有 31M 行
加入整数:2.78 sec elapsed, 318.1 MB processed (avg over 10 runs)
加入字符串6.77 sec elapsed, 137 MB processed (avg over 10 runs)
-- 加入整数查询
SELECT count(*)
FROM `bigquery-public-data.stackoverflow.users` u
JOIN `bigquery-public-data.stackoverflow.stackoverflow_posts` p
on u.id = p.owner_user_id
WHERE RAND() < 2
(添加Where子句以避免缓存)
-- 加入字符串
SELECT count(*)
FROM 'bigquery-public-data.stackoverflow.users' u
JOIN 'bigquery-public-data.stackoverflow.stackoverflow_posts' p
on u.display_name = p.owner_display_name
WHERE RAND() < 2
(添加Where子句以避免缓存)
令人惊讶的是,STRING 上的 JOIN 性能似乎比 INTEGER 差。
【问题讨论】:
标签: google-cloud-platform google-bigquery