For example:
SELECT id, uuid, timestamp, userAgent, wiki FROM MobileWikiAppShareAFact_12588711 WHERE timestamp >= '20180201' AND wiki RLIKE '^WikipediaApp'
| id | uuid | timestamp | userAgent | wiki |
|---|---|---|---|---|
| 46245550 | 58a8e87003295bf393bf432cc49e9d75 | 20180201000906 | {"wmf_app_version": "2.4.184-beta-2016-12-14", "os_minor": "1", "os_major": "4", "is_bot": false, "device_family": "Generic Smartphone", "os_family": "Android", "browser_minor": "1", "is_mediawiki": false, "browser_major": "4", "browser_family": "Android"} | WikipediaApp/2.4.184-beta-2016-12-14 (Android 4.1.2; Phone) Google Play Beta Channel |
| 46246058 | 339e6284846c5f8dbc9bf87b714131f4 | 20180201001400 | {"wmf_app_version": "2.4.184-r-2016-12-14", "os_minor": "4", "os_major": "4", "is_bot": false, "device_family": "Generic Smartphone", "os_family": "Android", "browser_minor": "4", "is_mediawiki": false, "browser_major": "4", "browser_family": "Android"} | WikipediaApp/2.4.184-r-2016-12-14 (Android 4.4.4; Phone) Google Play |
At first I thought it may be caused by right-to-left languages but a quick look at the events showed the problem is language-independent.
How widespread the problem is (at least across MobileWikiApp* schemas), restricted to 2018 data:
| affected | schema | events | proportion |
|---|---|---|---|
| ★ | MobileWikiAppAppearanceSettings_10375462 | 823 | 0.11% |
| ★ | MobileWikiAppArticleSuggestions_15302212 | 1467 | 0.18% |
| ★ | MobileWikiAppCreateAccount_9135391 | 928 | 0.85% |
| ★ | MobileWikiAppDailyStats_12637385 | 1436 | 0.03% |
| ★ | MobileWikiAppEdit_9003125 | 3311 | 1.68% |
| MobileWikiAppFeedConfigure_17490595 | 0 | 0.00% | |
| ★ | MobileWikiAppFeed_15734713 | 3848 | 28.20% |
| MobileWikiAppFeed_16432467 | 0 | 0.00% | |
| ★ | MobileWikiAppFindInPage_14586774 | 1000 | 0.20% |
| MobileWikiAppInstallReferrer_12601905 | 0 | 0.00% | |
| ★ | MobileWikiAppIntents_15237384 | 2741 | 0.31% |
| ★ | MobileWikiAppLangSelect_12588733 | 277 | 0.89% |
| ★ | MobileWikiAppLinkPreview_15730939 | 58868 | 0.33% |
| ★ | MobileWikiAppLogin_9135390 | 3679 | 0.95% |
| ★ | MobileWikiAppMediaGallery_12588701 | 1626 | 0.42% |
| MobileWikiAppNavMenu_12732211 | 0 | 0.00% | |
| MobileWikiAppOfflineLibrary_17649221 | 0 | 0.00% | |
| MobileWikiAppOnThisDay_17490767 | 0 | 0.00% | |
| MobileWikiAppOnboarding_9123466 | 0 | 0.00% | |
| ★ | MobileWikiAppPageScroll_14591606 | 41295 | 0.27% |
| ★ | MobileWikiAppProtectedEditAttempt_8682497 | 108 | 0.12% |
| MobileWikiAppRandomizer_17490463 | 0 | 0.00% | |
| ★ | MobileWikiAppReadingLists_15520526 | 15964 | 0.36% |
| MobileWikiAppSavedPages_10375480 | 0 | 0.00% | |
| ★ | MobileWikiAppSearch_15729321 | 9309 | 0.32% |
| ★ | MobileWikiAppSessions_15522505 | 59215 | 6.34% |
| ★ | MobileWikiAppShareAFact_12588711 | 13620 | 0.12% |
| MobileWikiAppStuffHappens_8955468 | 0 | 0.00% | |
| ★ | MobileWikiAppTabs_12453651 | 3438 | 0.24% |
| ★ | MobileWikiAppToCInteraction_14585319 | 1540 | 0.21% |
| MobileWikiAppWidgets_11312870 | 0 | 0.00% | |
| ★ | MobileWikiAppWiktionaryPopup_15158116 | 57 | 0.47% |
I have not checked the other schemas.
Here's the R code I used to figure out these stats:
library(tidyverse) mobile_schemas <- wmf::mysql_read("SHOW TABLES;", "log") %>% filter(grepl("^MobileWikiApp[A-Za-z]+_[0-9]+$", Tables_in_log)) query <- "SELECT wiki RLIKE '^WikipediaApp' AS malformed, COUNT(*) AS events FROM {schema} WHERE timestamp >= '20180101' GROUP BY malformed;" malformations <- lapply(mobile_schemas$Tables_in_log, function(schema) { result <- try(wmf::mysql_read(glue::glue(query), "log")) if (inherits(result, "try-error")) return(NULL) else { if (all(c(0, 1) %in% result$malformed)) { counts <- tidyr::spread(result, malformed, events) output <- c( events = counts$`1`, proportion = counts$`1` / (counts$`0` + counts$`1`) ) return(output) } else { return(data.frame( events = if_else(result$malformed[1] == 0, 0, result$events[1]), proportion = if_else(result$malformed[1] == 0, 0, 1.0) )) } } }) %>% set_names(mobile_schemas$Tables_in_log) %>% do.call(rbind, .) malformations$schema <- row.names(malformations) malformations %>% mutate( affected = if_else(events > 0, "★", ""), proportion = sprintf("%.2f%%", proportion * 100) ) %>% select(affected, schema, events, proportion) %>% knitr::kable(format = "markdown", align = c("c", "l", "r", "r"))