2017-07-21 2 views
1

別のネストされたフィールドの値と一致するga_sessions_テーブルのsourcePropertyDisplayNameを更新しようとしています。私はここでこの答えが見つかりました:別のネストされたフィールドを条件として使用してBigQueryのネストされたフィールドを更新します。

Update nested field in BigQuery table

をしかし、これはTRUE WHERE非常に単純なを持っています。特定のhits.eventInfo.eventCategoryと一致する場合にのみ適用したいと考えています。

UPDATE `dataset_name`.`ga_sessions_20170720` 
SET hits = 
    ARRAY(
    SELECT AS STRUCT * REPLACE(
     (SELECT AS STRUCT sourcePropertyInfo.* REPLACE('updated text' AS 
     sourcePropertyDisplayName)) AS sourcePropertyInfo) 
    FROM UNNEST(hits) 
) 
WHERE ARRAY(
SELECT AS STRUCT eventInfo.eventCategory 
FROM UNNEST(hits) 
) LIKE '%SEARCH%' 

しかし、私は現在、次のエラー取得しています:

Error: No matching signature for operator LIKE for argument types: 
ARRAY<STRUCT<eventCategory STRING>>, STRING. Supported signatures: STRING 
LIKE STRING; BYTES LIKE BYTES at [8:7] 

私は別の値を使用して、1つのネストされたフィールドを更新することができますどのようにここで

は、私がこれまで持っているものですWHERE句?

答えて

0

あなたの句は

WHERE EXISTS (
    SELECT 1 FROM UNNEST(hits) AS h 
    WHERE h.eventInfo.eventCategory LIKE '%SEARCH%' 
) 
+0

以下おかげミハイルのようにする必要があります。 'UPDATE dataset_name.ga_sessions_20170720 SETヒット= ARRAY( SELECT AS STRUCT *はsourcePropertyInfo AS(STRUCT sourcePropertyInfo AS SELECT * sourcePropertyDisplayName AS( '更新 テキスト')REPLACE)( をREPLACE):私はにクエリを変更しましたUNNEST(ヒット) FROM )EXISTS h.eventInfo.eventCategory LIKE '%の検索%' ) ' 時間 AS( はUNNEST(ヒットから1をSELECT)そして、私は今、取得 : 'エラー:リソースをクエリの実行中に超過しました。 " 0行が正常に更新されました。これについて何かできますか? – Jimbol4

+0

WHERE句がうまく動作するかどうかをテストすることをお勧めします。これは、あなたの質問の焦点だったので、これを行うには、\ datetet_name.ga_sessions_20170720 \ 'からselect count(1)を実行してください。 WHERE EXISTS(SELECT 1 FROM hEventInfo.eventCategory LIKE '%SEARCH%') - 最低でもWHEREが動作するか、おそらく 'Resources exceeded'エラーの原因であることが分かります。それがうまくいくなら - エラーを解決するために私は考えている別の質問を投稿するべきです:o) –

+0

ありがとうMikhail。クエリの実行は機能するので、リソースの問題を調査し、必要に応じて別の問題を投稿します。 – Jimbol4

関連する問題