2017-05-03 29 views
1

'ヒット'は繰り返しレコードです。 「hits」の下に「hits.customDimensions」もあります。Google Big Queryで繰り返しレコード内の繰り返しレコードを照会する方法標準SQL

私は標準SQLにこのGoogleビッグクエリを持っています。

SELECT  

     visitNumber, 
     h.time, h.hour, h.minute, 
     h.page.PagePath, 


     h.customDimensions.value as language, /* not working */ 


      from 
       `550335029.ga_sessions_*` , UNNEST(hits) as h 
      where    
       h.customDimensions.index = 3 /* not working */ 

私はhits.customDimensions.indexとhits.customDimensions.valueへのアクセス権の構文を探しています。 2つの 'not working'行を削除すると、クエリが実行されます。

エラーは次のようになります。

GenericGBQException: Reason: invalidQuery, Message: Cannot access field customDimensions on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [40:46] 

答えて

1

は、BigQueryの標準SQL

SELECT 
    visitNumber, 
    h.time, 
    h.hour, 
    h.minute, 
    h.page.PagePath, 
    d.value AS language 
FROM 
    `550335029.ga_sessions_*`, 
    UNNEST(hits) AS h, 
    UNNEST(h.customDimensions) AS d 
WHERE d.index = 3 
1

については、以下を試してみてください、私はまた、あなたが標準SQLを使用しているとき素晴らしいパフォーマンスブーストを観察し、いくつかの​​操作を避けることができることを見出しました(ただし、これはあなたが何を操作しているかによって異なります)。

例として、これは、これを解決するための別の方法である:

SELECT 
    visitNumber, 
    h.time, 
    h.hour, 
    h.minute, 
    h.page.PagePath, 
    (select value from unnest(h.customDimensions) where index = 3) AS LANGUAGE 
FROM 
    `550335029.ga_sessions_*`, 
    UNNEST(hits) AS h 
WHERE 1 = 1 
AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) 
AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY)) 
and exists(select 1 from unnest(h.customDimensions) dim where dim.index = 3) 

あなたが今やっていることのために多くの違いを見つけることができませんが、それはようBQで動作するように心の異なる技術で維持することは興味深いです彼らは最終的にあなたのクエリを何十倍も速くすることができます。

+0

私はUNNESTがここで避けられたことを知りたいと思っています。一見すると、上記と同じUNNESTingを行っているように見えますが、そのうちの1つをサブクエリーに移動するだけです。 –

+0

データセット全体にUNNESTを適用すると、ネストされていない配列の外側のすべてのキーが複製されます。私がしたことをすることで、避けることができます。すなわち、配列 'h.customDimension'だけがネストされず、外部キーの重複は起こりません。 –

関連する問題