The _TABLE_SUFFIX feature is great and exactly what I was looking for to solve my problem - however it is scanning all of the data matched by the wildcard when I use a sub-query to determine which tables to match on.
If you do an operation such as = or BETWEEN or IN with a set of values on _TABLE_SUFFIX, you can see the amount of data being scanned goes down compared to simply a wildcard:
SELECT sample_data FROM `test.dataset.*`
WHERE _TABLE_SUFFIX IN ("NWD1","NWD2","NWD3","NWD4","NWD5")
- 1.8 GB scanned
However if I do the following:
SELECT sample_data FROM `test.dataset.*`
WHERE _TABLE_SUFFIX IN (SELECT ID FROM subset)
- 50GB scanned (this sub-select contains the same values as shown in the explicit IN clause)