簡體   English   中英

大查詢視圖中的字段說明

[英]Descriptions on Fields in Big Query Views

我知道這個問題之前已經提出並且似乎已經解決了.. https://issuetracker.google.com/issues/35905194

但這可以使用 Python 完成嗎?

當我想更新 Big Query 表上的字段描述時,我有一個腳本可以工作,但是當我在視圖上運行完全相同的腳本時,沒有任何反應嗎?

腳本運行,我沒有收到任何錯誤,但它只是沒有更新 Big Query 中的視圖

我正在使用 Python 2.7.13

這是我的代碼..

from google.cloud import bigquery
from datetime import datetime
import json
import sys

project='xxxx'
ds='xxxxx'
table_n='xxxxx'

startTime=datetime.now()
#Authorisation 
filename='xxxxxx.json'
client =  bigquery.Client.from_service_account_json(filename)

dataset_id = ds
table_id = table_n

table_schema= []
table_schema.append(bigquery.SchemaField('BWMI_ID', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('VP_VIN_PREFIX', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CHASSIS_NUMBER', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CAESAR_KEY', 'INTEGER', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('ID', 'INTEGER', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('VEH_ID', 'INTEGER', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('LOEV_ID', 'INTEGER', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('D42_LAST_UPDATED', 'TIMESTAMP', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('D42_END_DATE', 'TIMESTAMP', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('USER_1_ID', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('DESCRIPTION', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('DATE_ADDED', 'TIMESTAMP', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('DATE_ENDED', 'TIMESTAMP', mode='NULLABLE'))                            
table_schema.append(bigquery.SchemaField('SOURCE', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CANCELLED', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CANCELLED_DATE', 'TIMESTAMP', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CRC32', 'STRING', mode='NULLABLE'))
table_schema.append(bigquery.SchemaField('CREATED_DATE', 'TIMESTAMP', mode='NULLABLE')) 

original_schema=table_schema
table_ref = client.dataset(dataset_id).table(table_id)
table = bigquery.Table(table_ref, schema=original_schema)

new_schema= []
new_schema.append(bigquery.SchemaField('BWMI_ID', 'STRING', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('VP_VIN_PREFIX', 'STRING', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('CHASSIS_NUMBER', 'STRING', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('CAESAR_KEY', 'INTEGER', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('ID', 'INTEGER', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('VEH_ID', 'INTEGER', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('LOEV_ID', 'INTEGER', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('D42_LAST_UPDATED', 'TIMESTAMP', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('D42_END_DATE', 'TIMESTAMP', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('USER_1_ID', 'STRING', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('DESCRIPTION', 'STRING', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('DATE_ADDED', 'TIMESTAMP', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('DATE_ENDED', 'TIMESTAMP', mode='NULLABLE', description = 'Updated by python script'))                            
new_schema.append(bigquery.SchemaField('SOURCE', 'STRING', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('CANCELLED', 'STRING', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('CANCELLED_DATE', 'TIMESTAMP', mode='NULLABLE', description = 'Updated by python script'))
new_schema.append(bigquery.SchemaField('CRC32', 'STRING', mode='NULLABLE'))
new_schema.append(bigquery.SchemaField('CREATED_DATE', 'TIMESTAMP', mode='NULLABLE'))

table.schema = new_schema
table = client.update_table(table, ['schema'])

我試圖復制您的場景,但是,Python 客戶端庫對我來說效果很好

 #NEW VIEW
 view_ref = client.dataset(dataset_id).table(view_name)
 client.delete_table(view_ref)
 view = bigquery.Table(view_ref)
 sql_template = ('SELECT DISTINCT user,team FROM `{}.{}.{}` WHERE score = 19')
 view.view_query = sql_template.format(project,dataset_id,original_table)
 view = client.create_table(view)
 print('Successfully created view at {}'.format(view.full_table_id))
 #UPDATE VIEW
 view_schema= [
     bigquery.SchemaField('user', 'STRING', mode='NULLABLE',description='user name VIEW updated'),
     bigquery.SchemaField('team', 'STRING', mode='NULLABLE',description='team name VIEW updated'),
 ]
 viewU = bigquery.Table(view_ref,schema=view_schema)
 viewU = client.update_table(viewU,['schema'])
 print('UPDATED VIEW SCHEMA: {}').format(viewU.schema) #VERIFY THE SCHEMA

還有bq 命令bq show --format=prettyjson [PROJECT_ID]:[DATASET].[VIEW]

您是否嘗試過在 BQ 用戶界面的“查看詳細信息”屏幕中單擊Refresh按鈕?

好的,我現在找到問題了。 這是新的 beta gui 沒有顯示描述.. Beta Gui....

貝塔桂

經典用戶界面

Classic_UI... 非常令人沮喪,我花了一天時間修改我的代碼,試圖弄清楚為什么它不起作用。

我會向谷歌提出一個錯誤。 無論如何謝謝你的幫助。

要更新視圖架構,請不要使用

view.schema = new_schema
view = client.update_table(view, ['schema'])

但反而

 view = bigquery.Table(view.reference, schema=new_schema)
 view = client.update_table(view, ['schema'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM