2016-08-12 9 views
4

2日前(2016年8月10日)、Googleアナリティクスプレミアム用のBQエクスポートのテーブルを使用して作業していたクエリが機能しなくなりました。それは、次のエラーが返されます。いくつかの調査の後BigQueryの不具合または新しい動作?

Error: Cannot union tables : Incompatible types. 'hits.latencyTracking.userTimingVariable' : TYPE_INT64 'hits.latencyTracking.userTimingVariable' : TYPE_STRING

を、私が前から8月10日(テーブルga_sessions_20160810)の後にテーブルをクエリWHERE句でのUSINGに問題があると思われます。

私は元のクエリを単純化して、同じ基本構造を持つダミーのクエリを提供しました。次のクエリは、(2016年8月8日と2016年8月9日からのデータを照会)作品:

SELECT fullVisitorId, sum(totals.visits) 
FROM (select * from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-08'),TIMESTAMP('2016-08-09'))) 
WHERE fullVisitorId in(
    SELECT fullVisitorId 
    FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-08'),TIMESTAMP('2016-08-09')) 
) 
GROUP BY fullVisitorId 

しかし、2016年8月9日と2016から08からこのケースでちょうど日付を変更し、この他の1(、 -10)エラーを返します:

SELECT fullVisitorId, sum(totals.visits) 
FROM (select * from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10'))) 
WHERE fullVisitorId in(
    SELECT fullVisitorId 
    FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10')) 
) 
GROUP BY fullVisitorId 

この最後のクエリは、私はWHERE句を削除した場合か、私はちょうど、IN内のクエリを試してみてください、私は問題がフィールド構造である推測する場合のいずれか正常に動作しますに(...)。さらに、2016-08-10のデータのみを照会すると機能します。また、fullVisitorIdとは異なるフィールドを使用し、異なるBQプロジェクトで同じクエリを実行することも同じです。

エラーの説明を見ると、変数タイプに問題があるはずですが、hits.latencyTracking.userTimingVariableは何か分かりません。私のクエリは正常に動作していたので、何が変わってエラーが発生するのか分かりません。いくつかのフィールドがタイプを変えたか、何が起こったのですか?

これを経験したことがありますか?これはBigQueryのバグか新しい動作ですか?このエラーはどのように解決できますか?

+0

別の日からスキーマの変更は、あなたがチェックすると、テーブルには、パラメータをga_sessions hits.latencyTracking.userTimingVariableは整数であり、現在、それは文字列だ、あなたもこれを実行しようとカント: SELECT fullVisitorId、hits.latencyTracking .userTimingVariable FROM TABLE_DATE_RANGE([xxxxxxxxxxxx.ga_sessions _]、TIMESTAMP( '2016-08-9')、TIMESTAMP( '2016-08-10'))、date_range関数がスキーマの変更に準備されていません日数 –

+0

'右、パウロ。 hits.latencyTracking。この期間中にuserTimingVariableがINTEGERからSTRINGに変更されましたが、このフィールドを照会することさえできません...どのような方法でクエリを使用しているのか分かりますか? –

答えて

2

使用しているとおり*労働組合は、そのは、(STRINGにINT64から変更スキーマなど)は、2つの異なる列タイプを組み合わせるしようとして起こっているとき、select句で、それが問題の原因かもしれません。

私は2つのアプローチ

1を持っている)は、内側のクエリを分割し、クエリで後でビューを使用するビューを使用して)

SELECT fullVisitorId, sum(totals.visits) 
FROM (select fullVisitorId,totals.visits from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10'))) 
    WHERE fullVisitorId in(
    SELECT fullVisitorId 
    FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10')) 
) GROUP BY fullVisitorId 

2 select句に*使用するよりも、自分が必要なフィールドだけを使用します。そのエラーは存在しません。これはhits.latencyTracking.userTimingVariableを除外します

SELECT fullVisitorId, sum(totals.visits) 
FROM [view.innertable2] 
    WHERE fullVisitorId in(
    SELECT fullVisitorId from [view.innertable1]) GROUP BY fullVisitorId 

(偶数ビューで、あなたが必要とされ、これらのフィールドを使用するだけで使用する必要があります)。

+0

アプローチ1が動作します。ありがとう! –

+0

@ PolF。この解決のために私たちに近づいた彼のクライアントに感謝し、彼はいくつかの研究を行い、同じ問題に直面している何人かを言うこの質問に私たちを指摘しました。乾杯!!! –

0

クエリしているフィールドに互換性がある場合は、標準SQLワイルドカードテーブルを使用してみることができます(UIからこれを行う場合は、レガシーSQLボックスの使用をオフにする必要があります)。このような何か:

SELECT fullVisitorId, sum(totals.visits) 
FROM `xxxxxxxx.ga_sessions_*` 
WHERE _TABLE_SUFFIX BETWEEN '20160808' and '20160810' 
GROUP BY fullVisitorId; 
+0

あなたのクエリが機能します、Pavan。しかし、[公式ドキュメント](https://cloud.google.com/bigquery/docs/wildcard-tables)によると、Standard SQLはまだベータ版であるため、実稼働環境には推奨されていません。レガシーSQLを使用する別の方法を知っていますか? –

関連する問題