Tôi mới dùng Google Big Query (và Stack Overflow), chủ yếu là kiểm tra tốc độ mà Big Query quản lý để xử lý cả các truy vấn được tạo thủ công và kém kỹ lưỡng.NHÓM THEO vấn đề trong Google Big Query
Tôi gặp khó khăn với truy vấn cồng kềnh chạy (chậm) trên MySQL. Big Query phàn nàn về nội dung GROUP BY. Đây là truy vấn bắt đầu:
SELECT nonstops.term, nonstops.lincat, nonstops.id,
MIN(
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(nonstops.catweb * nonstops.catweb * nonstops.catimp/nonstops.fnvweb/nonstops.fnvimp)
)
AS calc FROM nonstops INNER JOIN EACH minusone ON nonstops.lincat = minusone.lincat AND nonstops.term = minusone.term
WHERE nonstops.lincat = 556 GROUP BY nonstops.term, nonstops.lincat
ORDER BY `calc` DESC
Lưu ý rằng "MACHI" được thêm vào INNER JOIN vì cả hai bảng đều lớn. Tôi đã xóa tên tập dữ liệu để dễ đọc hơn.
GROUP BY được dự định chỉ trả lại giá trị thấp nhất của phép tính được thực hiện bởi sự tham gia cho mỗi cặp/cặp lincat.
Các lỗi tôi nhận được là:
(L1: 62): Biểu hiện 'phrases.nonstops.id' là không có mặt trong danh sách GROUP BY
Mà tôi không muốn trong GROUP BY, nhưng tôi đã thêm nó và sau đó tôi nhận được:
Biểu hiện 'calc
' là không có mặt trong danh sách GROUP BY
mà tôi cũng không muốn! Nhưng nếu tôi thêm nó tôi nhận được:
(L7: 1): Không thể nhóm bởi một tổng hợp
Tôi đã xem xét các tài liệu và tìm kiếm một câu trả lời, nhưng không có may mắn. Bất kỳ gợi ý hoặc liên kết nào sẽ được đánh giá cao nhất.
Cảm ơn Michael, backticks thực sự là một vấn đề. Trường id bị thiếu từ GROUP BY là một điểm tốt, vì dữ liệu này nó hoạt động tốt trong MySQL vì kết quả được tạo ra cùng một id cho mỗi nhóm (một chút dư thừa nhưng chỉ mục trên id được sử dụng). Tôi đã thay đổi nó theo gợi ý và nó hoạt động. – LocalGeek
Nên thêm, hiệu suất khôn ngoan, mất 75 giây (dữ liệu 2,5 GB). Tách truy vấn thành JOIN (tạo một tập hợp dữ liệu) sau đó chạy GROUP BY mất 20 giây và sau đó 15 giây. Một hộp Linux với RAM 32GB 2133Mhz, 8GB được MySQL sử dụng một bộ xử lý AMD A10 khá chậm (7850K) với dữ liệu trên ổ SSD Samsung 840 mất khoảng 2000 giây để truy vấn đầy đủ hoặc tách chúng. – LocalGeek
Hiệu suất-vise Tôi nghĩ rằng bạn có thể hưởng lợi bằng cách lọc trước khi JOIN (BigQuery không đủ thông minh để tự mình làm): CHỌN ... TỪ (CHỌN .. TỪ nonstops WHERE lincat = 556) INNER JOIN EACH (SELECT .. FROM minusone ĐÂU lincat = 556) ON nonstops.lincat = minusone.lincat VÀ nonstops.term = minusone.term GROUP BY nonstops.term, nonstops.lincat ORDER BY calc DESC – Michael