我想知道BigQuery标准SQL中与RTRIM和REGEXP_REPLACE有关的性能。以下两个 这将是更好的性能:BigQuery REGEXP_REPLACE vs RTRIM的标准性能
DISTINCT RTRIM("12367e","abcdefghijklmnopqrstuvwxyz")
与 REGEXP_REPLACE("12367e", r"\D$", "")
我不知道是否有这两种方法之间有很大的性能变化。
我想知道BigQuery标准SQL中与RTRIM和REGEXP_REPLACE有关的性能。以下两个 这将是更好的性能:BigQuery REGEXP_REPLACE vs RTRIM的标准性能
DISTINCT RTRIM("12367e","abcdefghijklmnopqrstuvwxyz")
与 REGEXP_REPLACE("12367e", r"\D$", "")
我不知道是否有这两种方法之间有很大的性能变化。
除非您有大量数据,否则看起来没有太大的差别。我对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的数据(从刚刚字符串列)和两到三秒钟时间才能运行,而无需任何查询在于速度远远其余的部分。我故意过滤了数据,结果是空的,因为我不想写入时间。
很高兴知道,非常感谢Elliot的回复! – RomainD
如果这回答你的问题,请接受/ upvote我的回应。另请参阅[StackOverflow帮助主题](https://stackoverflow.com/help/someone-answers)。谢谢! –
您是在过滤器还是在选择列表中使用它? –
根据我的经验,为了优化BQ查询,最好的办法是学习如何高效地使用数组和结构。就功能之间的差异而言,BQ足够快以至于最终使用哪一点并不重要。 –