在大查询数据集中选择最新表 - 标准 SQL 语法
Posted
技术标签:
【中文标题】在大查询数据集中选择最新表 - 标准 SQL 语法【英文标题】:select latest Table in a Big Query Dataset - Standard SQL syntax 【发布时间】:2018-09-11 22:52:33 【问题描述】:我的数据集包含多个名称相似的表:
例如
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_%"
query result
此查询使用 _TABLE_SUFFIX 方法从特定表中提取所有值
SELECT * FROM `modemutti-8d8a6.feed_first.*`
WHERE _TABLE_SUFFIX = "affilinet_4221_first_20180911_204956"
query result
此查询结合了 __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
error screenshot
知道为什么会发生这种情况或我该如何解决这个问题吗?
------------编辑------------
@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?
【问题讨论】:
【参考方案1】:下面试试
#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_%"
)
【讨论】:
这是意料之中的,绝对不建议这样做,而只是回答您关于如何解决您在问题中描述的具体问题的问题!以上是关于在大查询数据集中选择最新表 - 标准 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章