2017-08-28 70 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)。謝謝! –