在大查询数据集中选择最新表 - 标准 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 语法的主要内容,如果未能解决你的问题,请参考以下文章

如果使用命令行或 sql 在大查询中不存在表,如何创建表

BigQuery:使用标准 SQL 查询多个数据集和表

在大查询中从宽到长重塑(标准 SQL)

hive的基本语法

sql语法随记

查询 BigQuery 数据集中的最新表