Question: Je souhaite extraire des données de plusieurs tables de sessions Google Analytics à l'aide de _TABLE_SUFFIX, mais je souhaite définir les paramètres de suffixe entre "il y a sept jours" et "il y a un jour" (c'est-à-dire extraire les données des 7 derniers jours)
La syntaxe actuelle (qui ne fonctionne pas):
#StandardSQL
SELECT
date,
SUM (totals.visits) AS visits
FROM
`projectname.123456789.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN
'DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -7 DAY)' AND
'DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -1 DAY)'
GROUP BY
date
ORDER BY
date ASC
Ce qui me donne le message " Valide: Cette requête traitera 0 B lors de son exécution." À mes yeux, il n'y a pas d'erreur dans la syntaxe, mais BigQuery ne peut pas lire mes fonctions de date et ne peut donc pas les suffixer au caractère générique ga_sessions_ *
Inspiration:
BigQuery Cookbook a un exemple pour legacySQL sur lequel je me base: ( https://support.google.com/analytics/answer/4419694?hl=en#7days )
#LegacySQL
SELECT
date,
SUM (totals.visits) AS visits
FROM
(TABLE_DATE_RANGE([73156703.ga_sessions_],
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
GROUP BY
date
ORDER BY
date ASC
Choses que j'ai essayées: (cela ne fonctionne pas)
Utilisation de DATE_SUB au lieu de DATE_ADD et utilisation de CURRENT_DATE au lieu de CURRENT_TIMESTAMP:
WHERE
_TABLE_SUFFIX BETWEEN
'DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)' AND
'DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)'
Résultat: " Valide: Cette requête traitera 0 B lors de son exécution."
Utilisation de DATE_FORMAT autour de DATE_SUB et CURRENT_DATE afin d'obtenir les dates sans tirets:
WHERE
_TABLE_SUFFIX BETWEEN
'FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))' AND
'FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))'
Résultat: " Valide: Cette requête traitera 0 B lors de son exécution."
J'ai essayé de sauter les tirets '' autour de la clause DATE_SUB
WHERE
_TABLE_SUFFIX BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
Il en résulte le message d'erreur suivant " Erreur: Aucune signature correspondante pour l'opérateur BETWEEN pour les types d'argument: STRING, DATE, DATE. Signature prise en charge: (ANY) BETWEEN (TOUT) ET (TOUT) "
Merci d'avance,
La réponse d'Elliott est correcte, mais si vous souhaitez tirer le meilleur parti de BigQuery pour ce type de requête, au lieu de convertir _TABLESUFFIX
en DATE
, vous devez convertir CURRENT_DATE
expressions aux chaînes:
WHERE
_TABLE_SUFFIX BETWEEN
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) AND
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
Vous étiez presque là avec votre dernière tentative. Vous devez convertir votre chaîne en une date afin de l'utiliser dans la comparaison:
WHERE
PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
Cela fonctionne pour tous ceux qui cherchent à segmenter la dernière semaine de données en grande requête. Fonctionne pour n'importe quel ensemble de données tant que vous avez un horodatage!
where TIMESTAMPFIELD >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)