RegQuery标准性能REGEXP_REPLACE vs RTRIM

时间:2017-08-28 19:27:34

标签: sql google-bigquery

我想知道BigQuery Standard SQL中与某些RTRIMREGEXP_REPLACE相关的表现。 以下哪两个更具性能:

DISTINCT RTRIM("12367e","abcdefghijklmnopqrstuvwxyz")REGEXP_REPLACE("12367e", r"\D$", "")

我不确定这两种方法之间是否存在重大的性能变化。

1 个答案:

答案 0 :(得分:2)

除非您拥有大量数据,否则看起来并没有太大区别。我在bigquery-public-data.github_repos.commits表上尝试了一些查询,将这些字符串转换应用到commits列,其值为0000120032a071dcd7e4bb1c8d418ca7a0028431

我尝试的查询是:

SELECT COUNTIF(RTRIM(commit,'abcdefghijklmnopqrstuvwxyz') = '')
FROM `bigquery-public-data`.github_repos.commits;

SELECT COUNTIF(REGEXP_REPLACE(commit, r'\D$', '') = '')
FROM `bigquery-public-data`.github_repos.commits;

SELECT COUNT(*)
FROM `bigquery-public-data`.github_repos.commits
WHERE RTRIM(commit,'abcdefghijklmnopqrstuvwxyz') = '';

SELECT COUNT(*)
FROM `bigquery-public-data`.github_repos.commits
WHERE REGEXP_REPLACE(commit, r'\D$', '') = '';

这些都处理7.91 GB的数据(仅来自字符串列)并需要两到三秒才能运行,而没有任何查询比其他查询快得多。我故意过滤数据,结果是空的,因为我不想包括写时间。