Câu trả lời của Felipe sử dụng SQL kế thừa. Đây là một giải pháp trong SQL tiêu chuẩn.
Nếu tên bảng của bạn có một hậu tố có thể dự đoán giống như ví dụ GitHub trong liên kết của bạn (trong đó sử dụng một hậu tố YYYYMMDD
cho mỗi ngày), bạn có thể sử dụng wildcard tables and TABLE_SUFFIX
:
SELECT COUNT(*)
FROM `githubarchive.day.events_*`
WHERE _TABLE_SUFFIX = (
SELECT MAX(SUBSTR(table_id, -8))
FROM `githubarchive.day.__TABLES_SUMMARY__`
WHERE REGEXP_CONTAINS(table_id, "events_\\d{8}")
)
Nếu bạn muốn dựa vào siêu dữ liệu BigQuery về gian tạo thay vì các tiền tố, bạn có thể làm:
SELECT COUNT(*)
FROM `githubarchive.day.*`
WHERE _TABLE_SUFFIX = (
SELECT table_id
FROM `githubarchive.day.__TABLES_SUMMARY__`
ORDER BY creation_time DESC
LIMIT 1
)
Lưu ý rằng nếu bạn có bảng với lược đồ khác nhau trong dự án của bạn, cú pháp thứ hai là nguy hiểm, vì truy vấn sẽ sử dụng giản đồ của bảng đầu tiên nó thấy trong ký tự đại diện.
Nếu bạn đang cố gắng tạo bảng được phân đoạn theo ngày, có một tính năng BigQuery được gọi là date-partitioned tables thực hiện điều đó và sau đó sẽ dễ truy vấn hơn.