我想知道BigQuery Standard SQL中与某些RTRIM和REGEXP_REPLACE相关的表现。 以下哪两个更具性能:
DISTINCT RTRIM("12367e","abcdefghijklmnopqrstuvwxyz")
与
REGEXP_REPLACE("12367e", r"\D$", "")
我不确定这两种方法之间是否存在重大的性能变化。
答案 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的数据(仅来自字符串列)并需要两到三秒才能运行,而没有任何查询比其他查询快得多。我故意过滤数据,结果是空的,因为我不想包括写时间。