2017-08-28 28 views
0

BigQuery Standard SQLのRTRIMREGEXP_REPLACEに関連するパフォーマンスが不思議でした。 次の二つのどちらがよりパフォーマンスのようになります。BigQuery REGEXP_REPLACEとRTRIMの標準的なパフォーマンス

REGEXP_REPLACE("12367e", r"\D$", "")

DISTINCT RTRIM("12367e","abcdefghijklmnopqrstuvwxyz") 私はこれら二つのアプローチの間には大きな性能変化があるかどうかわかりません。

+0

これはフィルタまたは選択リストで使用していますか? –

+1

BQクエリを最適化するための私の経験では、配列や構造体を効率的に使うことを学ぶことが最善の方法です。ファンクション間の相違点として、BQは、最後に使用するものが本当に問題にならない程度の速さで十分です。 –

答えて

2

大量のデータがない限り、大きな違いはありません。私はbigquery-public-data.github_repos.commitsテーブルに対していくつかのクエリを試して、0000120032a071dcd7e4bb1c8d418ca7a0028431のような値を持つcommitsカラムにこれらの文字列変換を適用しました。

私が試したクエリは次の通りであった:

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ギガバイトと任意のクエリは、そのはるかに高速よりもされることなく、実行するために2〜3秒の間取ります残り。私は意図的にデータをフィルタリングして、結果が空になるようにしました。私は書き込み時間を含めたくないからです。

+0

お返事ありがとう、返信Elliot! – RomainD

+1

これがあなたの質問に答えるなら、私の応答を受け入れるか、アップしてください。 [StackOverflowのヘルプトピック](https://stackoverflow.com/help/someone-answers)も参照してください。ありがとう! –

関連する問題