2012-05-17 49 views

Trả lời

42

Nếu bạn muốn UNION để bạn có thể kết hợp kết quả truy vấn, bạn có thể sử dụng subselects trong BigQuery:

SELECT foo, bar 
FROM 
    (SELECT integer(id) AS foo, string(title) AS bar 
    FROM publicdata:samples.wikipedia limit 10), 
    (SELECT integer(year) AS foo, string(state) AS bar 
    FROM publicdata:samples.natality limit 10); 

Đây là gần như chính xác tương đương với SQL

SELECT id AS foo, title AS bar 
FROM publicdata:samples.wikipedia limit 10 
UNION ALL 
SELECT year AS foo, state AS bar 
FROM publicdata:samples.natality limit 10; 

(lưu ý rằng nếu muốn SQL UNION và không UNION TẤT CẢ việc này sẽ không hoạt động)

Cách khác, bạn có thể chạy hai truy vấn và nối thêm kết quả.

+0

ahh ... rất thông minh. Việc thêm hai truy vấn không phải là một tùy chọn trong trường hợp của tôi, nhưng việc xây dựng này có vẻ như nó sẽ hoạt động. – mdahlman

+2

Cũng giống như một lưu ý, như bạn đã đề cập, đây không phải là một UNION, mà là UNION ALL [Xem bài viết khác] (http: // stackoverflow).com/questions/49925/what-is-the-khác biệt-giữa-union-và-union-tất cả) – hoggkm

+0

hello @ Jordan-Tigani nếu tôi gọi như trên truy vấn như sau đó hồ sơ hàng đầu sẽ được wikipedia và sau đó của natality. Tôi muốn biết trình tự có duy trì hay không. chỉ muốn clerify. –

0

Các đoàn thể thực sự được hỗ trợ. Đoạn trích từ liên kết mà bạn đã đăng:

Lưu ý: Không giống như nhiều hệ thống dựa trên SQL khác, BigQuery sử dụng cú pháp dấu phẩy để biểu thị công đoàn bảng chứ không phải tham gia. Điều này có nghĩa bạn có thể chạy một truy vấn trên nhiều bảng với lược đồ tương thích như sau:

// Tìm hoạt động đáng ngờ trong vài ngày

SELECT FORMAT_UTC_USEC(event.timestamp_in_usec) AS time, request_url 
    FROM [applogs.events_20120501], [applogs.events_20120502], [applogs.events_20120503] 
    WHERE event.username = 'root' AND NOT event.source_ip.is_internal; 
+0

Điều đó đề cập đến các bảng kết hợp với nhau cho nguồn. Đó là tính năng mà tôi đã đề cập cụ thể không phải là những gì tôi cần. – mdahlman

+0

Tôi hiểu rồi. Tôi đã không hiểu ý bạn bằng cách "kết hợp với nhau cho nguồn" ban đầu. Tôi thực sự kết thúc làm một cái gì đó tương tự như những gì Jordan đề xuất cho một kịch bản mà tôi cần tên bảng trong tập kết quả. Tôi đặt tên_bảng trong các truy vấn bên trong và chọn chúng từ truy vấn bên ngoài, ví dụ: CHỌN table_name, tiêu đề, trạng thái FROM (SELECT "publicdata: samples.wikipedia" AS table_name, string (title) AS title TỪ publicdata: samples.wikipedia limit 10), (SELECT "publicdata: samples.natality" AS table_name, string (trạng thái) AS trạng thái FROM publicdata: samples.natality limit 10) –

2

Bạn luôn có thể làm:

SELECT * FROM (query 1), (query 2); 

Nó hiện giống như:

SELECT * from query1 UNION select * from query 2; 
+4

Vâng, nó hoạt động. Nó giống với những gì Jordan đã đăng 2,5 năm trước. – mdahlman

4

BigQuery đã thêm hỗ trợ gần đây cho Standard SQL, bao gồm hoạt động UNION.


Khi gửi một truy vấn thông qua giao diện web, chỉ cần đảm bảo để bỏ chọn "Use Legacy SQL" dưới đề mục SQL Version: enter image description here

+2

Điều quan trọng là bạn nên sử dụng UNION với từ khóa thứ hai: UNION ALL hoặc UNION DISTINCT, xem [liên kết sau] (https://cloud.google.com/bigquery/docs/reference/standard-sql/query -syntax # union) –

+0

@RogierWerschkull true dat. – olebebo

0

Lưu ý rằng, nếu bạn đang sử dụng SQL chuẩn, dấu phẩy hành tại nghĩa JOIN-you have to use the UNION syntax if you want a union:

trong SQL di sản, các nhà điều hành dấu phẩy, có ý nghĩa phi tiêu chuẩn của UNION ALL khi áp dụng cho bảng. Trong SQL chuẩn, toán tử dấu phẩy có ý nghĩa chuẩn của JOIN.

Ví dụ:

#standardSQL 
SELECT 
    column_name, 
    count(*) 
from 
    (SELECT * FROM me.table1 UNION ALL SELECT * FROM me.table2) 
group by 1 
Các vấn đề liên quan