Vì không thể cập nhật dữ liệu trong bảng trong BigQuery và chỉ hỗ trợ cơ chế chắp thêm, tôi đã quyết định tạo bảng mới hàng tháng. Vì vậy, giả sử cho năm 2012, các bảng sẽ là (tbl_012012
, tbl_022012
, tbl_032012
, ... tbl_122012
). Mỗi bản ghi sẽ được lưu trữ cùng với ngày timestamp
dưới dạng chuỗi. Bây giờ, nếu ứng dụng của tôi muốn tìm nạp các bản ghi khác nhau, từ tháng 1 năm 2012 (tbl_012012
) đến tháng 3 năm 2012 (tbl_032012
), BigQuery API sẽ tự động đi qua các bảng mong muốn thông qua truy vấn SQL đơn hoặc tôi sẽ phải viết nhiều truy vấn SQL. với mã ứng dụng bổ sung để truy xuất từng kết quả truy vấn và sau đó tổng hợp chúng hoàn toàn?Truy vấn nhiều bảng trong Big Query
Trả lời
Một truy vấn SQL có thể tham chiếu nhiều bảng. Chỉ cần tách từng bảng bằng dấu phẩy trong mệnh đề FROM để truy vấn trên tất cả các bảng được đề cập.
Dưới đây là một đoạn trích thể hiện một ví dụ về bảng nhiều chọn:
SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source
FROM [608XXXXX.ga_sessions_20131008],
[608XXXXX.ga_sessions_20131009],
[608XXXXX.ga_sessions_20131010],
[608XXXXX.ga_sessions_20131011],
[608XXXXX.ga_sessions_20131012],
[608XXXXX.ga_sessions_20131013],
[608XXXXX.ga_sessions_20131014],
[608XXXXX.ga_sessions_20131015],
GROUP BY Traffic_Source
ORDER BY Counts_Source DESC
Bạn cũng có thể sử dụng một chức năng Bảng ký tự đại diện. Dưới đây là một ví dụ từ số docs cho StandardSQL:
SELECT
name
FROM
mydata.people
WHERE
age >= 35
AND
(_TABLE_SUFFIX BETWEEN '20140325' AND '20140327')
Và đây là ví dụ tương tự cho LegacySQL (docs).
SELECT
name
FROM
(TABLE_DATE_RANGE([mydata.people],
TIMESTAMP('2014-03-25'),
TIMESTAMP('2014-03-27')))
WHERE
age >= 35
này sẽ truy vấn các bảng:
- mydata.people20140325
- mydata.people20140326
- mydata.people20140327
Có một vài tùy chọn khác trên docs. Tôi khuyên bạn nên kiểm tra chúng.
Có thể truy vấn một phạm vi tháng của biểu mẫu '201601' không? –
2017 update:
Với BigQuery #standardSQL - bạn có thể sử dụng tiêu chuẩn UNION ALL
phải đi qua nhiều bảng, hoặc bạn có thể sử dụng một *
để phù hợp với tất cả các bảng chia sẻ tiền tố giống nhau. Khi sử dụng đối sánh *
, bạn cũng sẽ có quyền truy cập vào cột meta _TABLE_SUFFIX
- để biết bảng nào đến từ hàng nào.
SELECT * FROM Roster
UNION ALL
SELECT * FROM TeamMascot
- 1. ORMLite hoặc truy vấn trên nhiều bảng
- 2. Big danh sách tham số cho truy vấn SQL
- 3. SQL INNER QUERY trả về nhiều giá trị trong truy vấn UPDATE
- 4. Truy vấn NHibernate trên nhiều bảng
- 5. SQL: Nhiều bảng và truy vấn
- 6. Cách truy vấn nhiều bảng trong SQLAlchemy ORM
- 7. MySQL Query Optimization - truy vấn nội
- 8. Laravel 4 Query Builder: LEFT JOIN ... AND ... truy vấn
- 9. Biểu thức bảng chung trong Sub-Query
- 10. PDO nhiều truy vấn
- 11. Làm cách nào để sử dụng thông số truy vấn ElasticSearch Query (truy vấn DSL) cho nhiều loại?
- 12. nhiều truy vấn chọn nhiều
- 13. Cách truy cập cột truy vấn bằng nhiều từ?
- 14. LINQ nhiều nơi truy vấn
- 15. MySQL, cập nhật nhiều bảng với một truy vấn
- 16. Nhiều truy vấn trong Solr
- 17. Nhóm theo nhiều bảng và vẫn có quyền truy cập vào truy vấn gốc?
- 18. LINQ truy vấn sql tương đương "không (chọn query)"
- 19. Vấn đề truy vấn nhiều người trong MySQL
- 20. Một truy vấn lớn so với nhiều truy vấn nhỏ?
- 21. Truy vấn PHP/MySQL vào vấn đề bảng html
- 22. Ví dụ truy vấn trong mối quan hệ nhiều-nhiều-
- 23. Làm cách nào để viết truy vấn tham gia trên nhiều bảng trong CakePHP?
- 24. Cách truy vấn bảng, trong sqlalchemy
- 25. Tìm tất cả các bậc cha mẹ trong bảng mysql với truy vấn duy nhất (Recursive Query)
- 26. Truy vấn SQL JOIN với Bảng
- 27. SQL - Kết hợp nhiều truy vấn như truy vấn
- 28. Cấu trúc truy vấn Bảng tính Gdata
- 29. Nhiều lần tham gia trong truy vấn Khung thực thể
- 30. SQL Nối bảng truy vấn
Cảm ơn rất nhiều vì. Nhưng điều này sẽ làm việc trong trường hợp truy vấn phạm vi, nếu truy vấn của tôi tìm kiếm một bản ghi có thể dư thừa. Vì vậy, trong trường hợp này, Big Query sẽ hiển thị ngang qua bảng mỗi tháng để tìm bản ghi đó. –
BigQuery được tối ưu hóa cho truy vấn tổng hợp, thay vì truy vấn đang tìm kiếm một bản ghi. Vì vậy, có, thật không may trong trường hợp này bạn sẽ cần phải tìm kiếm thông qua mỗi bảng tháng nếu bạn đang tìm kiếm chỉ là một hồ sơ duy nhất mà có thể được trong bất kỳ bảng. –
Cảm ơn vì đã giúp tôi. –