我的数据集包含多个名称相似的表:
例如
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
此查询使用 __ TABLES_SUMMARY __ 方法标识最新数据集(根据yyyymmdd_hhmmss命名约定)
SELECT max(table_id) as table_id FROM `modemutti-8d8a6.feed_first.__TABLES_SUMMARY__`
where table_id LIKE "affilinet_4221_first_%"
此查询使用 _TABLE_SUFFIX 方法从特定表中提取所有值
SELECT * FROM `modemutti-8d8a6.feed_first.*`
WHERE _TABLE_SUFFIX = "affilinet_4221_first_20180911_204956"
此查询结合了 __ 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_%")
此查询失败:
错误:无法将INT64类型的字段'modemio_cat_level'读取为STRING
知道为什么会这样或我如何解决该问题吗?
------------编辑------------
@Mikhail解决方案可以正常工作,但可以处理大量数据。请参见explicit call与suggested Method。另一个解决方案是
SELECT * FROM `modemutti-8d8a6.feed_first.affilinet_4221_first_*` WHERE _TABLE_SUFFIX =
(
SELECT MAX(_TABLE_SUFFIX) FROM`modemutti-8d8a6.feed_first.affilinet_4221_first_*`
)
但是this处理的数据也比显式查询大得多。是否可以通过UI中的视图来实现,还是应该通过API使用Python / Java SDK?
答案 0 :(得分:2)
尝试以下
#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_%"
)