2015-02-10 12 views

Trả lời

8

Để tìm bảng mới nhất, bạn có thể sử dụng chức năng truy vấn bảng BigQuery của:

Ví dụ, bảng GitHubArchive hàng ngày mới nhất:

SELECT COUNT(*) num_records 
FROM TABLE_QUERY(githubarchive:day, 
    "table_id IN (
    SELECT table_id FROM githubarchive:day.__TABLES__ 
    ORDER BY creation_time DESC LIMIT 1)") 

# 201859 

Để thuận tiện tối đa, bạn có thể lưu trữ truy vấn mà như một cái nhìn để chia sẻ với người khác. Sau đó, để truy vấn bảng mới nhất, chỉ cần truy vấn xem:

SELECT num_records 
FROM [fh-bigquery:public_dump.githubarchive_latest_day] 

# 201859 

Để biết thêm về các chức năng truy vấn bảng, xem câu trả lời của Jordan để How do I use the TABLE_QUERY() function in BigQuery?.

2

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.

Các vấn đề liên quan