2013-06-13 41 views
5

Trong tài liệu API BigQuery có một phương pháp gọi là bản vá. Tôi hy vọng rằng tôi có thể sử dụng nó để thay đổi lược đồ của một bảng hiện có. Thật không may nó không được hỗ trợ bởi bq. Nhưng theo trang web của họ, bạn có thể thử nó tại https://developers.google.com/bigquery/docs/reference/v2/tables/patch. Tuy nhiên khi tôi thử nó sẽ gửi các yêu cầu sau đây:.Tôi làm cách nào để sử dụng bản vá BigQuery?

PATCH https://www.googleapis.com/bigquery/v2/projects/(my project id)/datasets/tmp_bt/tables/change_cols?key={YOUR_API_KEY} 

Content-Type: application/json 
Authorization: Bearer (removed) 
X-JavaScript-User-Agent: Google APIs Explorer 

{ 
"schema": { 
    "fields": [ 
    { 
    }, 
    { 
    }, 
    { 
    "mode": "nullable", 
    "name": "gotchahere", 
    "type": "string" 
    } 
    ] 
} 
} 

(tôi không có ý tưởng nơi các yếu tố có sản phẩm nào đến từ đâu, và biên tập là quá đau đớn để sử dụng để chỉ cần dán trong định nghĩa bảng hiện tại của tôi Tôi lưu ý rằng nó thiếu yếu tố cần thiết như ID dự án của tôi, mà tôi dự kiến ​​sẽ được đưa vào bởi vì họ được yêu cầu theo hình thức) và sau đó tôi nhận được câu trả lời:

cache-control: private, max-age=0 
content-encoding: gzip 
content-length: 122 
content-type: application/json; charset=UTF-8 
date: Thu, 13 Jun 2013 22:22:09 GMT 
expires: Thu, 13 Jun 2013 22:22:09 GMT 
server: GSE 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "backendError", 
    "message": "Backend Error" 
    } 
    ], 
    "code": 503, 
    "message": "Backend Error" 
} 
} 

đó là hoàn toàn vô dụng. Tôi đã thực hiện tìm kiếm trên web và không tìm thấy bất kỳ ví dụ nào về việc sử dụng đó.

Có ai có thể cho tôi ví dụ về cách sử dụng bản vá BigQuery để thay đổi bảng và mô tả về những gì nó thực sự có thể làm không?

+1

Theo http://googledevelopers.blogspot.com/2013/03/bigquery-gets-big-new-features-to-make.html phương pháp cập nhật cũng nên thực hiện tương tự. Ví dụ về điều đó thay vào đó sẽ làm việc là tốt. – btilly

Trả lời

12

TLDR: Bạn cần cung cấp lược đồ đầy đủ trong phần thân của yêu cầu vá, không chỉ các trường bạn đang cố thêm. Lỗi phụ trợ có thể do các trường trống trong mảng đó gây ra.


API của BigQuery cho phép bảng (và các tài nguyên khác) được cập nhật theo hai cách: cập nhật và vá.

Phương thức update thay thế tài nguyên bảng bằng tài nguyên mới mà bạn cung cấp. Phương pháp này hữu ích trong trường hợp bạn muốn lấy một tài nguyên bảng hiện có, sửa đổi nó, và sau đó đăng tài nguyên bảng đã sửa đổi đó trở lại toàn bộ BigQuery. (Lưu ý, tuy nhiên, một số trường của đối tượng, chẳng hạn như creationTime, được coi là không thay đổi, vì vậy các giá trị mới được cung cấp cho các trường này sẽ bị bỏ qua.)

Phương thức patch chỉ thay thế các trường bạn đưa vào yêu cầu và để nguyên phần còn lại của tài nguyên. Phương pháp này hữu ích nếu bạn muốn thực hiện một thay đổi riêng biệt cho một trường mà không phải lo lắng về phần còn lại. Thuật toán này được áp dụng đệ quy cho bất kỳ đối tượng lồng nhau nào, nhưng không phải là đối với các mảng lồng nhau. Nói cách khác, tài nguyên bản vá mà bạn gửi cùng với yêu cầu được hợp nhất đệ quy với tài nguyên hiện có cho đến khi một mảng hoặc giá trị vô hướng gặp phải, tại thời điểm đó mảng hoặc giá trị trong đối tượng bản vá thay thế một trong tài nguyên hiện có.

Vì lược đồ bạn đang cố gắng cập nhật chứa một mảng trường và vì phương thức vá cập nhật mảng bán buôn, đối tượng bản vá của bạn cần chứa đầy đủ các trường mà bạn muốn trong lược đồ kết quả. (Bạn không thể thêm trường bằng cách chỉ định mảng một trường trong đối tượng bản vá.)

Lưu ý rằng ID bảng được cung cấp trong URL yêu cầu, vì vậy nó không cần được đưa vào chính đối tượng đó .

Cuối cùng, lỗi chương trình phụ trợ là sự cố ở phía chúng tôi, có thể là kết quả của hai trường lược đồ trống trong yêu cầu của bạn. Chúng tôi sẽ đào sâu hơn và hy vọng cải thiện thông báo lỗi cho tương lai.

+0

Một số câu hỏi. Khi bạn thay đổi các trường, điều gì sẽ xảy ra với các trường hiện có? Nó có khớp với tên không? Liệu nó có khả năng đổi tên chúng? Nếu các loại không khớp thì sao? – btilly

+0

Và câu hỏi về hiệu suất không liên quan. Giả sử rằng tôi có một loạt các hoạt động. Khi tôi truy vấn nó, tôi luôn muốn giới hạn phạm vi thời gian và có các điều kiện ngẫu nhiên khác (kiểu hoạt động, người dùng, v.v., v.v.). Vì vậy, tôi sẽ có tất cả thời gian trong bảng, nhưng chỉ muốn một ngày, hoặc một tuần, hoặc một tháng. Có mẹo nào để làm cho mẫu sử dụng đó hiệu quả hơn không? – btilly

+0

Cập nhật giản đồ chỉ cho phép bạn nối thêm các trường hoặc chế độ trường thư giãn (ví dụ: bắt buộc -> tùy chọn). Bạn không thể thay đổi tên hoặc loại trường và bạn không thể sắp xếp lại chúng. –

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