我創建每日表格。如何查詢「最新」的?我在BigQuery上有每日表格。如何查詢「最新」的?
例如,GitHubArchive現在發佈每日表格 - 而不是單一表格(請參閱/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
我創建每日表格。如何查詢「最新」的?我在BigQuery上有每日表格。如何查詢「最新」的?
例如,GitHubArchive現在發佈每日表格 - 而不是單一表格(請參閱/r/bigquery/.../github_archive_changes_monthly_and_daily_tables/)。
要查找最新的表,你可以使用BigQuery的表查詢功能:
例如,最新的每日GitHubArchive表:
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
爲了最大限度地方便,你可以在查詢存儲爲視圖與他人分享。然後,查詢最新的表格,只需查詢視圖:
SELECT num_records
FROM [fh-bigquery:public_dump.githubarchive_latest_day]
# 201859
更多關於表查詢功能,看到喬丹的回答How do I use the TABLE_QUERY() function in BigQuery?。
Felipe的答案使用Legacy SQL。這是標準SQL中的一個解決方案。
如果你的表名在你的鏈接可預測的後綴像GitHub的例子(使用YYYYMMDD
後綴的每一天),你可以使用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}")
)
如果你想依靠BigQuery的關於元數據創建時間,而不是前綴,你可以這樣做:
SELECT COUNT(*)
FROM `githubarchive.day.*`
WHERE _TABLE_SUFFIX = (
SELECT table_id
FROM `githubarchive.day.__TABLES_SUMMARY__`
ORDER BY creation_time DESC
LIMIT 1
)
需要注意的是,如果你有在你的項目不同模式的表格,後者語法是危險的,因爲查詢將使用第一個表的架構它在通配符中看到。
如果您正在嘗試創建按日期分區的表格,那麼可以使用名爲date-partitioned tables的BigQuery功能來實現這一功能,並且使查詢更容易。