Google_Http_Request object {
batchHeaders => array(3) (
[Content-Type] => (string) application/http
[Content-Transfer-Encoding] => (string) binary
[MIME-Version] => (string) 1.0
)
queryParams => array(0)
requestMethod => (string) PATCH
requestHeaders => array(3) (
[content-type] => (string) application/json; charset=UTF-8
[authorization] => (string) *edited*
[accept-encoding] => (string) gzip
)
baseComponent => (string) https://www.googleapis.com
path => (string) /bigquery/v2/projects/aerobic-forge-504/datasets/wr_dev/tables/user_profile
postBody => (string) [{"name":"user_id","type":"integer","mode":"nullable"},{"name":"is_complete","type":"integer","mode":"nullable"},{"name":"country_id","type":"integer","mode":"nullable"},{"name":"state","type":"string","mode":"nullable"},{"name":"city","type":"string","mode":"nullable"},{"name":"zip","type":"string","mode":"nullable"},{"name":"language","type":"string","mode":"nullable"},{"name":"industry_id","type":"integer","mode":"nullable"},{"name":"subscribed_status","type":"integer","mode":"nullable"},{"name":"tracking_prod_type","type":"string","mode":"nullable"},{"name":"tracking_prod_id","type":"integer","mode":"nullable"},{"name":"timestamp","type":"timestamp","mode":"required"},{"name":"tags","type":"string","mode":"repeated"},{"name":"utm","type":"record","mode":"nullable","fields":[{"name":"source","type":"string","mode":"nullable"},{"name":"medium","type":"string","mode":"nullable"},{"name":"campaign","type":"string","mode":"nullable"},{"name":"content","type":"string","mode":"nullable"},{"name":"term","type":"string","mode":"nullable"}]},{"name":"meta","type":"string","mode":"nullable"}]
userAgent => (string) Client_Library_Examples google-api-php-client/1.0.3-beta (gzip)
canGzip => (bool) true
responseHttpCode => null
responseHeaders => null
responseBody => null
expectedClass => (string) Google_Service_Bigquery_Table
accessKey => null
}
我有此调用,它返回成功但所需的更改未反映在架构上。 tracking_prod_type
是一个新字段,它未添加到架构中。我们尝试了Patch
和Update
方式,我们无法添加其他列。更新返回:Provided Schema does not match
。补丁返回有效。
在postBody上,我们尝试了不同的语法,但没有一个有效。 [etag] => (string) "wRHWmN_1J7FEq2j8vIkltiyoyRw/GVGxfUY15UK1iZLhzZzfWOf-1Ow"
我们尝试按照此问与答Bigquery add columns to table schema
进行操作当我们发出调用时,我们会在表模式上看到Last Modified字段被修改,但结构没有新列。
更新
Google_Http_Request object {
batchHeaders => array(3) (
[Content-Type] => (string) application/http
[Content-Transfer-Encoding] => (string) binary
[MIME-Version] => (string) 1.0
)
queryParams => array(0)
requestMethod => (string) PATCH
requestHeaders => array(2) (
[content-type] => (string) application/json; charset=UTF-8
[authorization] => (string) edited
)
baseComponent => (string) https://www.googleapis.com
path => (string) /bigquery/v2/projects/aerobic-forge-504/datasets/wr_dev/tables/user_profile
postBody => (string) {"fields":[{"name":"user_id","type":"integer","mode":"nullable"},{"name":"is_complete","type":"integer","mode":"nullable"},{"name":"country_id","type":"integer","mode":"nullable"},{"name":"state","type":"string","mode":"nullable"},{"name":"city","type":"string","mode":"nullable"},{"name":"zip","type":"string","mode":"nullable"},{"name":"language","type":"string","mode":"nullable"},{"name":"industry_id","type":"integer","mode":"nullable"},{"name":"subscribed_status","type":"integer","mode":"nullable"},{"name":"timestamp","type":"timestamp","mode":"required"},{"name":"tags","type":"string","mode":"repeated"},{"name":"utm","type":"record","mode":"nullable","fields":[{"name":"source","type":"string","mode":"nullable"},{"name":"medium","type":"string","mode":"nullable"},{"name":"campaign","type":"string","mode":"nullable"},{"name":"content","type":"string","mode":"nullable"},{"name":"term","type":"string","mode":"nullable"}]},{"name":"meta","type":"string","mode":"nullable"},{"name":"tracking_prod_type","type":"string","mode":"nullable"},{"name":"tracking_prod_id","type":"integer","mode":"nullable"}]}
userAgent => null
canGzip => null
responseHttpCode => nu...
使用PATCH更新2
这是我有tableResource和架构,并使用PATCH。架构中列出了两个附加列。我得到了:Provided Schema does not match Table aerobic-forge-504:wr_dev.user_profile
Google_Http_Request object {
batchHeaders => array(3) (
[Content-Type] => (string) application/http
[Content-Transfer-Encoding] => (string) binary
[MIME-Version] => (string) 1.0
)
queryParams => array(0)
requestMethod => (string) PATCH
requestHeaders => array(3) (
[content-type] => (string) application/json; charset=UTF-8
[authorization] => (string) edited
[accept-encoding] => (string) gzip
)
baseComponent => (string) https://www.googleapis.com
path => (string) /bigquery/v2/projects/aerobic-forge-504/datasets/wr_dev/tables/user_profile
postBody => (string) {"tableReference":{"datasetId":"wr_dev","projectId":"aerobic-forge-504","tableId":"user_profile"},"schema":{"fields":[{"name":"user_id","type":"integer","mode":"nullable"},{"name":"is_complete","type":"integer","mode":"nullable"},{"name":"country_id","type":"integer","mode":"nullable"},{"...
使用PUT更新3
使用更新节点时,我仍然会得到Provided Schema does not match Table aerobic-forge-504:wr_dev.user_profile
Google_Http_Request object {
batchHeaders => array(3) (
[Content-Type] => (string) application/http
[Content-Transfer-Encoding] => (string) binary
[MIME-Version] => (string) 1.0
)
queryParams => array(0)
requestMethod => (string) PUT
requestHeaders => array(4) (
[content-type] => (string) application/json; charset=UTF-8
[authorization] => (string) edited
[accept-encoding] => (string) gzip
[content-length] => (int) 1221
)
baseComponent => (string) https://www.googleapis.com
path => (string) /bigquery/v2/projects/aerobic-forge-504/datasets/wr_dev/tables/user_profile
postBody => (string) {"tableReference":{"datasetId":"wr_dev","projectId":"aerobic-forge-504","tableId":"user_profile"},"schema":{"fields":[{"name":"user_id","type":"integer","mode":"nullable"},{"name":"is_complete","type":"integer","mode":"nullable"},{"name":"country_id","type":"integer","mode":"nullable"},{"...
答案 0 :(得分:3)
调用补丁或更新时,您需要提供看起来像表格的内容。在上面的示例中,您似乎没有传递表资源,只传递表资源中的字段。您可能需要将postBody包装在{"schema": {"fields": postBody } }
从另一个问题来看,这有点令人困惑,因为bq update为你做了这个包装。
您看到更新失败的原因是因为bigquery服务器根本没有看到任何架构,因此它认为您正在尝试删除架构。并且补丁成功但什么都不做,因为它根本没有看到任何有效字段,所以它只是进行空补丁操作。
以下是向模式添加字段的curl会话示例。应该相对容易适应php。它使用来自here
的auth.py.PROJECT_ID=<your_project_here>
DATASET_ID=scratch
BASE_URL=https://www.googleapis.com/bigquery/v2/projects
TABLES_URL=${BASE_URL}/${PROJECT_ID}/datasets/${DATASET_ID}/tables
### Make a scratch dataset.
bq --project_id=${PROJECT_ID} mk –d ${DATASET_ID}
SCHEMA="{'fields': [{'name':'foo', 'type': 'STRING'}]}"
TABLE_REF="{'tableId': 'table1', \
'datasetId': 'scratch', \
'projectId': '${PROJECT_ID}'}"
### Make a temporary table with a schema.
curl -H "$(python auth.py)" \
-H "Content-Type: application/json" \
-X POST \
-d "{'tableReference': ${TABLE_REF}, \
'schema': ${SCHEMA}}" \
"${TABLES_URL}"
### Tables.update()
SCHEMA2="{'fields': [ \
{'name':'foo', 'type': 'STRING'}, \
{'name': 'bar', 'type': 'FLOAT'}]}"
TABLE_JSON="{'tableReference': ${TABLE_REF}, 'schema': ${SCHEMA2}}"
curl -H "$(python auth.py)" \
-H "Content-Type: application/json" \
-X PUT \
-d "${TABLE_JSON}" \
"${TABLES_URL}/table1"
### Tables.patch()
EXPIRATION_TIME=$(($(date +"%s")+24*60*60))000
curl -H "$(python auth.py)" \
-H "Content-Type: application/json" \
-X PATCH \
--data-binary "{'expirationTime': '${EXPIRATION_TIME}'}" \
"${TABLES_URL}/table1"