From 6ae773a56556ffe6f2ea1b1379be153d6cd3cc9c Mon Sep 17 00:00:00 2001 From: Andrew Rumble Date: Mon, 27 Jan 2025 11:59:04 +0000 Subject: [PATCH] Merge pull request #22943 from overleaf/ar-ss-migrate-sync-group-memberships-to-raw [web] migrate sync group memberships to raw GitOrigin-RevId: 8c2ea9fef84ec1abcc99deef841e085d62739050 --- .../analytics/helpers/GoogleBigQueryHelper.mjs | 8 ++++---- .../sync_group_subscription_memberships.mjs | 15 ++++++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/services/web/scripts/analytics/helpers/GoogleBigQueryHelper.mjs b/services/web/scripts/analytics/helpers/GoogleBigQueryHelper.mjs index 84ff5f2caf..7bdc354bf6 100644 --- a/services/web/scripts/analytics/helpers/GoogleBigQueryHelper.mjs +++ b/services/web/scripts/analytics/helpers/GoogleBigQueryHelper.mjs @@ -7,20 +7,20 @@ function getDataset() { console.log( 'Connecting to BigQuery dataset: ', process.env.BQ_PROJECT_ID, - process.env.BQ_DATASET + process.env.BQ_DATASET_V2 ) dataset = new GoogleBigQuery({ projectId: process.env.BQ_PROJECT_ID, keyFilename: process.env.GCS_KEY_FILE, - }).dataset(process.env.BQ_DATASET) + }).dataset(process.env.BQ_DATASET_V2) } return dataset } -async function query(query) { - const [job] = await getDataset().createQueryJob({ query }) +async function query(query, params = {}) { + const [job] = await getDataset().createQueryJob({ query, params }) const [rows] = await job.getQueryResults() return rows } diff --git a/services/web/scripts/analytics/sync_group_subscription_memberships.mjs b/services/web/scripts/analytics/sync_group_subscription_memberships.mjs index cb41dd03f5..6502698fab 100644 --- a/services/web/scripts/analytics/sync_group_subscription_memberships.mjs +++ b/services/web/scripts/analytics/sync_group_subscription_memberships.mjs @@ -218,8 +218,11 @@ async function sendCorrectiveEvent(userId, event, subscription) { } } +/** + * @param {Array} groupIds + * @return {Promise<*>} + */ async function fetchBigQueryMembershipStatuses(groupIds) { - const joinedGroupIds = groupIds.map(id => `"${id}"`).join(',') const query = `\ WITH user_memberships AS ( SELECT @@ -227,9 +230,9 @@ async function fetchBigQueryMembershipStatuses(groupIds) { COALESCE(user_aliases.user_id, ugm.user_id) AS user_id, is_member, ugm.created_at - FROM analytics.user_group_memberships ugm - LEFT JOIN analytics.user_aliases ON ugm.user_id = user_aliases.analytics_id - WHERE ugm.group_id IN (${joinedGroupIds}) + FROM INT_user_group_memberships ugm + LEFT JOIN INT_user_aliases user_aliases ON ugm.user_id = user_aliases.analytics_id + WHERE ugm.group_id IN UNNEST(@groupIds) ), ordered_status AS ( SELECT *, @@ -240,7 +243,9 @@ async function fetchBigQueryMembershipStatuses(groupIds) { WHERE row_number = 1; ` - return GoogleBigQueryHelper.query(query) + return await GoogleBigQueryHelper.query(query, { + groupIds: groupIds.map(id => id.toString()), + }) } const setup = () => {