выбрать последнюю таблицу в наборе данных большого запроса - стандартный синтаксис SQL - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть набор данных, содержащий несколько таблиц с одинаковыми именами:

например

affilinet_4221_first_20180911_204956
affilinet_4221_first_20180911_160004
affilinet_4221_first_20180911_085559
affilinet_4221_first_20180910_201323
affilinet_4221_first_20180910_201042
affilinet_4221_first_20180910_080006
affilinet_4221_first_20180909_160707

Этот запрос идентифицирует самый последний набор данных (в соответствии с соглашением об именах yyyymmdd_hhmmss) с __ TABLES_SUMMARY __ методом

SELECT max(table_id) as table_id FROM `modemutti-8d8a6.feed_first.__TABLES_SUMMARY__`
where table_id LIKE "affilinet_4221_first_%"

10 *

этот запрос извлекает все значения из определенной таблицы с помощью _TABLE_SUFFIX метод

SELECT * FROM `modemutti-8d8a6.feed_first.*`
WHERE _TABLE_SUFFIX = "affilinet_4221_first_20180911_204956"

результат запроса

Thisзапрос объединяет __ TABLES_SUMMARY __ (который возвращает affilinet_4221_first_20180911_204956) и _TABLE_SUFFIX

SELECT * FROM `modemutti-8d8a6.feed_first.*`
WHERE _TABLE_SUFFIX = (
            SELECT max(table_id) FROM `modemutti-8d8a6.feed_first.__TABLES_SUMMARY__`
            where table_id LIKE "affilinet_4221_first_%")

этот запрос завершается ошибкой:

Ошибка: не удается прочитатьполе 'modemio_cat_level' типа INT64 как STRING

скриншот с ошибкой

есть идеи, почему это происходит или как я могу решить эту проблему?

------------ РЕДАКТИРОВАТЬ------------

@ Михаил работает правильно, но обрабатывает огромное количество данных.См. явный вызов против предложенного метода .Другим решением было бы

SELECT * FROM  `modemutti-8d8a6.feed_first.affilinet_4221_first_*` WHERE _TABLE_SUFFIX = 
    ( 
    SELECT MAX(_TABLE_SUFFIX)  FROM`modemutti-8d8a6.feed_first.affilinet_4221_first_*`
    )

, но этот обрабатывает также намного больший объем данных по сравнению с явным запросом .Есть ли способ добиться с помощью представления в пользовательском интерфейсе или лучше использовать Python / Java SDK через API?

1 Ответ

0 голосов
/ 12 сентября 2018

Попробуйте ниже

#standardSQL
SELECT * FROM `modemutti-8d8a6.feed_first.affilinet_4221_first_*`
WHERE _TABLE_SUFFIX = (
    SELECT REPLACE(MAX(table_id), 'affilinet_4221_first_', '') 
    FROM `modemutti-8d8a6.feed_first.__TABLES_SUMMARY__`
    WHERE table_id LIKE "affilinet_4221_first_%"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...