我尝试跨多个表进行查询,但
_TABLE_SUFFIX
在我的情况下不起作用。
我想跨多个表进行计算,如下所列:
01_2021, 01_2022, 01_2023, 01_2024, 02_2021, 02_2022, 02_2023, 02_2024, 03_2020, 03_2021, 03_2022, 03_2024, 04_2020, 04_2021, 04_2022, 04_2023, 04_2024, 05_2020, 05_2021, 05_2022, 05_2023, 05_2024, 06_2020, 06_2021, 06_2022, 06_2023, 06_2024, 07_2020, 07_2021, 07_2022, 08_2023, 08_2024, 09_2021, 09_2022, 09_2023, 10_2020, ... 12_2020, 12_2021, 12_2022, 12_2023.
按月份命名的文件,从 2020 年 4 月到 2024 年 8 月。
我想按年份查询。然而,当我使用
_TABLE_SUFFIX
时:
create table `<data_set>.2021` as
select
*,
extract(time FROM started_at) as start_time,
extract(day from started_at) as start_day,
extract(month from started_at) as start_month,
extract(year from started_at) as start_year,
extract(dayofweek from started_at) as start_weekday,
extract(time FROM ended_at) as end_time,
extract(day from ended_at) as end_day,
extract(month from ended_at) as end_month,
extract(year from ended_at) as end_year,
extract(dayofweek from ended_at) as end_weekday
from
`<data_set>.*_2021`
WHERE
_TABLE_SUFFIX BETWEEN '01' AND '12'
我希望按年份创建表格。但是,上面的代码出现错误
Not found: Table <...*_2021> was not found in location asia-southest1
我想它只有在有前缀时才有效(所以它是后缀:v lol),因为下面的代码有效。然而,下面的代码与我最初的目标不同。
FROM
`<data_set>.01_*`
WHERE
_TABLE_SUFFIX BETWEEN '2021' AND '2024'
我尝试用
*
替换总文件名
FROM
`Cyclist_data.*`
WHERE
_TABLE_SUFFIX BETWEEN '01_2021' AND '12_2021'
但是,我猜是因为BQ像图片一样排列文件。所以会跨越
01_2021
、01_2022
、03_2023
...在12_2021
之前,我看到查询结果会包含2024年的数据。
_TABLE_DATE_RANGE
在这种情况下也不起作用。尽管我遵循说明,但还是出现错误
Expected "," or "]" but got ":"
。
from
TABLE_DATE_RANGE([elemental-alloy-416508:Cyclist_data.],
TIMESTAMP('01_2021'),
TIMESTAMP('12_2021'))
我的情况有什么解决办法吗?
P/s: 我曾考虑过手动将所有文件的名称更改为
2021_01
,但这将是最后的选择。非常感谢大家的回答!!
感觉就像一个类似于以下的查询:
FROM
`<data_set>.*`
WHERE
ENDS_WITH(_TABLE_SUFFIX, '_2021')
应该可以。 这应仅包括名称以“_2021”结尾的表。
如果这不起作用,请更新问题: