2017-08-28 85 views
0

我想知道BigQuery标准SQL中与RTRIMREGEXP_REPLACE有关的性能。以下两个 这将是更好的性能:BigQuery REGEXP_REPLACE vs RTRIM的标准性能

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

我不知道是否有这两种方法之间有很大的性能变化。

+0

您是在过滤器还是在选择列表中使用它? –

+1

根据我的经验,为了优化BQ查询,最好的办法是学习如何高效地使用数组和结构。就功能之间的差异而言,BQ足够快以至于最终使用哪一点并不重要。 –

回答

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的数据(从刚刚字符串列)和两到三秒钟时间才能运行,而无需任何查询在于速度远远其余的部分。我故意过滤了数据,结果是空的,因为我不想写入时间。

+0

很高兴知道,非常感谢Elliot的回复! – RomainD

+1

如果这回答你的问题,请接受/ upvote我的回应。另请参阅[StackOverflow帮助主题](https://stackoverflow.com/help/someone-answers)。谢谢! –