2016-09-30 13 views
1

私は、ほぼ100万行のテーブルを持っています。 1つの値を検索するには5秒かかり、約15秒で500になります。これはかなり長い時間です。どのようにクエリを最適化できますか教えてください。Google bigQueryでのクエリが遅い

私のクエリは次のとおりです。

select a,b,c,d from table where a in ('a1','a2') 

ジョブID:安定-APOGEE-119006:job_ClLDIUSdDLYA6tC2jfC5GxBXmv0

+0

なぜそれがdownvotedされますか?どうすれば最適化できますか? – hmims

+0

こちらをお読みください:http://stackoverflow.com/help/mcve実行しようとしているクエリを他の人が手助けするのを助けてください。 BigQueryのエンジニアにとっては、過去のクエリのジョブIDを持つことも役に立ちます。 –

+0

ジョブIDを追加していただきありがとうございます。誰かが私にそれを打つことがなければ、私は明日の朝(太平洋時間)を見ます。 –

答えて

0

私はあなたが "それが15秒を要し500" によって何を意味するかわからないが、私はいくつかのテストを実行しました当社のデータベースには、あなたが実行しているものをシミュレートしようとしていると私はあなたにいくつかの同様の結果を得た反対

は(私のクエリは、それがjoin操作を持っていますが、まだここに私たちが行くように、その後あなたの遅い):

SELECT 
    a.fv fv, 
    a.v v, 
    a.sku sku, 
    a.pp pp from(
    SELECT 
    fullvisitorid fv, 
    visitid v, 
    hits.product.productsku sku, 
    hits.page.pagepath pp 
    FROM (TABLE_DATE_RANGE([40663402.ga_sessions_], DATE_ADD(CURRENT_DATE(), -3, 'day'), DATE_ADD(CURRENT_DATE(), -3, 'day'))) 
    WHERE 
    1 = 1) a 
JOIN EACH (
    SELECT 
    fullvisitorid fv, 
    FROM (TABLE_DATE_RANGE([40663402.ga_sessions_], DATE_ADD(CURRENT_DATE(), -3, 'day'), DATE_ADD(CURRENT_DATE(), -3, 'day'))) 
    GROUP EACH BY 
    fv 
    LIMIT 
    1) b 
ON 
    a.fv = b.fv 

1日だけ質問すると、1人のフルビジュアルを持って来ても、約5秒で1.7 GBを処理できました。

そして、私が先月のために同じクエリを実行し、limitオペレータを削除する場合には、処理するために、〜の10Sを取った〜(34万行程度)データの56ギガバイト:

enter image description here

これはめちゃくちゃ速いです。

プロジェクトのスペックを評価する必要があるかもしれません。まだ5秒があなたのためにあまりにも多すぎるなら、多分あなたはあなたのアーキテクチャに合った他の戦略を見つける必要があります。

BigQueryは要求を処理するのに秒を費やしますが、何百というGigasも数秒で処理する準備ができています。

プロジェクトのデータ使用量が増加し、数百万行の処理が開始される場合は、アプリケーションで数秒待っても問題がないかどうかを評価できます。

他にも、クエリが実行される限り、パフォーマンスを向上させるための最適化はあまりないとは思いません。

PS:私は100日のために実行することを決定し、それは14Sで100 GB単位の周りに処理

関連する問題