Je me demande si quelqu'un pourrait m'aider s'il vous plaît.
J'essaie de mettre ensemble un script de bigquery dans SQL standard qui trouve des valeurs de champs indiquées, puis remplace une valeur spécifique. P>
C'est le script que j'ai mis ensemble: p> Le problème que j'ai est que je suis capable de créer une nouvelle colonne appelée "EventLabel", mais je ne peux pas comprendre Un moyen d'écraser la colonne "Hits.EventInfo.EventLabel" existante. P> Est-ce que quelqu'un pourrait peut-être jeter un coup d'œil à cela s'il vous plaît et offrir des conseils sur l'endroit où j'ai mal tourné. P> Merci beaucoup et bien Cordialement P> Chris P> P>
3 Réponses :
Je ne peux pas comprendre un moyen d'écraser la colonne "Hits.EventInfo.eventLabel" existante ... P>
ci-dessous est un exemple pour SQL STANDERY SQL P>
#standardSQL SELECT visitId, visitNumber, ARRAY( SELECT y FROM ( SELECT * REPLACE( IF(eventInfo IS NULL, NULL, STRUCT<eventCategory STRING, eventAction STRING, eventLabel STRING, eventValue INT64> ( eventInfo.eventCategory, eventInfo.eventAction, IF(REGEXP_CONTAINS(page.pagePath, r'your regex here'), REGEXP_REPLACE(eventInfo.eventLabel, r'your regex here','Apples'), eventInfo.eventLabel ), eventInfo.eventValue ) ) AS eventInfo) FROM t.hits x ) y) hits FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` t
Bonjour @mikhail Berlyant, merci pour cela, mais malheureusement, les données ne sont pas changées. Merci beaucoup et meilleures salutations
que veux-tu dire? Bien sûr, les données originales ne changeront pas si vous venez d'exécuter Sélectionner. Vous devez définir la table de destination pour enregistrer des données «Correction» dans cette nouvelle table. ou vous pouvez définir les mêmes données que la destination et définir la table d'écrasement comme une préférence d'écriture
Salut. Je suis retourné au script et je l'ai mis pour écraser la table existante. Mais malheureusement, la colonne "Hits_EventInfo_EventLabel" n'est pas écrasée. Merci beaucoup
J'ai testé le script dans ma réponse - et ça marche! Vous devez donc fournir plus de détails sur votre cas et vos données. Je soupçonnerais que vous utilisez une mauvaise réégalité. mais sans exemple de vos données - il n'est pas possible de vous aider davantage
Salut Mikhail, mes excuses. Je ne sais pas si j'avais fait mes premiers tests contenant une faute de frappe, mais je l'ai réécrit, cela fonctionne maintenant. Merci pour votre aide et votre patience. Cordialement. Chris
bien sûr pas de problème. envisager de voter la réponse
Je pense que vous recherchez une instruction code> code>, voir Syntaxe DML , en particulier la partie" Mettre à jour les enregistrements répétés "dans la section Exemples.
Dans cette requête Je modifie le tableau code> indiqué par Sous-questionnement et construire mon propre nouveau tableau à partir de celui-ci à l'aide de Si toute votre regex est correcte, cela devrait fonctionner comme prévu. P> Sélectionnez comme struct code> et alimenter la sortie dans
tableau () code>. P>
UPDATE `project.dataset.ga_sessions_20190107`
SET hits =
ARRAY(SELECT AS STRUCT
* REPLACE (
-- correcting eventInfo here
IF(REGEXP_CONTAINS(page.pagePath, r'^/dashboard/.*/properties|^/dashboard/inbox') and REGEXP_CONTAINS(EventInfo.eventLabel, r'.*\,')
,STRUCT(
eventInfo.eventCategory,
eventInfo.eventAction,
REGEXP_REPLACE(eventInfo.eventLabel, r'.*\,','Apples') AS eventLabel,
eventInfo.eventValue
)
,eventInfo) AS eventInfo)
FROM UNNEST(hits)
)
WHERE ( -- only relevant sessions
SELECT COUNT(1)>0
FROM UNNEST(hits)
WHERE REGEXP_CONTAINS(page.pagePath, r'^/dashboard/.*/properties|^/dashboard/inbox')
AND REGEXP_CONTAINS(EventInfo.eventLabel, r'.*\,')
)
Salut Martin, merci pour cela. J'ai exécuté le script, mais malheureusement, je reçois l'erreur suivante: Erreur: Aucune signature de correspondance pour la fonction Si pour les types d'arguments: BOOL, STREST
Pouvez-vous essayer sur une nouvelle table d'essai? On dirait que votre table d'essai est confondue avec le schéma EventInfo. Il devrait être struct
Salut Martin. Merci de revenir à moi avec ça. J'ai utilisé une nouvelle table, mais je rencontre toujours le même problème. Genre de chris
J'espère que c'est n'est pas trop tard ... J'ai eu du mal à votre même numéro de l'erreur de structure dans le cas échéant, puis a compris cette mise à jour plus simple:
update `xxxxxx.test_ga_sessions_20190728` SET hits = ARRAY( SELECT AS STRUCT * REPLACE( (SELECT AS STRUCT eventInfo.* REPLACE(REGEXP_REPLACE(eventInfo.eventLabel,r'TESTING','Mandarins') AS eventLabel)) AS eventInfo) FROM UNNEST(hits) ) where fullVisitorId ='3030555601660252942';
Comment voulez-vous que la valeur de EventLabel soit modifiée? S'il vous plaît expliquer la règle de substitution
Avez-vous essayé au lieu de
comme EventLabel CODE> SELECT
comme hits.EventInfo.eventLabel code>
Voulez-vous recréer la table d'origine mais avec différentes valeurs dans
hits.eventinfo.eventlabel code> pour certains des hits?
Bonjour à tous, mes excuses pour ne pas rendre cela plus clair. J'aimerais modifier les données de la colonne existante, c'est-à-dire le cas échéant pour la valeur dans la colonne "Hits.EventInfo.eventLabel" pour dire des pommes. J'ai essayé d'utiliser Hits.EventInfo.EventLabel, mais je reçois une erreur de syntaxe. Merci beaucoup Chris