首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python脚本更新BigQuery表中的列描述?

如何使用python脚本更新BigQuery表中的列描述?
EN

Stack Overflow用户
提问于 2022-04-07 03:35:19
回答 1查看 913关注 0票数 0

我可以在制作新表时使用SchemaField(f"{field_name}", f"{field_type}", mode="NULLABLE", description=...)

但是我想更新已经上传的表的列的描述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-07 17:10:04

不幸的是,我们还没有这样一种机制可以通过客户端库更新表的列描述。作为解决办法,您可以尝试以下可用选项来更新表列级别的说明:

选项1:使用以下ALTER TABLE ALTER COLUMN SET OPTIONS数据定义语言语句:

代码语言:javascript
运行
复制
ALTER TABLE `projectID.datasetID.tableID`
ALTER COLUMN Name
SET OPTIONS (
 description="Country Name"
);

有关文档语句的更多信息,请参考此ALTER COLUMN SET OPTIONS语句。

选项2:使用bq命令行工具的bq update命令:

步骤1:通过运行以下bq show命令获取JSON模式:

代码语言:javascript
运行
复制
bq show --format=prettyjson projectID:datasetID.tableID > table.json

步骤2:然后将模式从table.json复制到schema.json文件。

注意:不要从‘table.json’文件中复制整个数据,只复制模式,它将如下所示:

代码语言:javascript
运行
复制
[
    {
        "description": "Country Name",
        "mode": "NULLABLE",
        "name": "Name",
        "type": "STRING"
    }
]

步骤3:在“schema.json”文件中,根据需要修改描述名称。然后,运行以下bq update命令来更新表列描述。

代码语言:javascript
运行
复制
bq update projectID:datasetID.tableID schema.json

有关文档命令的更多信息,请参考此bq update

选项3:调用tables.patch API方法:

有关文档 API方法的更多信息,请参考此tables.patch

根据您的要求,我从这个中篇中获取了下面的Python代码,而不是Google官方文档中的代码。因此Google将不提供对此代码的任何支持。

步骤1:在“schema.py”文件中添加模式,并根据需要修改列描述名称:

代码语言:javascript
运行
复制
#Add field schema
TableObject = {
   "tableReference": {
     "projectId": "projectID",
     "datasetId": "datasetID",
     "tableId": "tableID",
   },
   "schema": {
     "fields": [
         {
           "description": "Country Name",
           "mode": "NULLABLE",
           "name": "Name",
           "type": "STRING"
         }
       ],
   },
}

步骤2:运行以下代码以获得预期结果:

注意:将schema.py和下面的代码文件保存在同一个目录中。

代码语言:javascript
运行
复制
#!/usr/bin/env python
#https://developers.google.com/api-client-library/python/
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
from schema import TableObject
# [START Table Creator]
def PatchTable(bigquery):
   tables = bigquery.tables()
   tables.patch(                        
         projectId=TableObject['tableReference']['projectId'],\
         datasetId=TableObject['tableReference']['datasetId'],\
         tableId=TableObject['tableReference']['tableId'], \
         body=TableObject).execute()
   print ("Table Patched")
# [END]
def main():
   #To get credentials
   credentials = GoogleCredentials.get_application_default()
   # Construct the service object for interacting with the BigQuery API.
   bigquery = discovery.build('bigquery', 'v2', credentials=credentials)
   PatchTable(bigquery)
 
if __name__ == '__main__':
   main()
   print ("BigQuery Table Patch")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71776036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档