[英]How can I unathorized view in Google BigQuery via API or CLI
[英]How can I create a new view in bigquery using the python API?
我有一些代碼可以自動生成一堆不同的SQL查詢,我想將這些查詢插入到bigquery中以生成視圖,但我遇到的一個問題是這些視圖需要每晚動態生成,因為它們的性質不斷變化的數據。 所以我希望能夠使用google bigquery api for python來創建視圖。 我理解如何使用'bq'命令行工具來完成它,但我希望能夠直接在代碼中構建它,而不是使用shell來運行bq。 我玩過提供的代碼
https://cloud.google.com/bigquery/bigquery-api-quickstart
我不明白如何使用這段代碼創建一個視圖,而不是只返回SELECT語句的結果。 我可以在這里看到有關執行表插入的文檔
https://cloud.google.com/bigquery/docs/reference/v2/tables/insert
但這指的是使用REST API生成新表,而不是上面提供的示例。
這是不可能的嗎? 我應該讓步並使用bq嗎?
謝謝
***針對費利佩的評論提出了一些其他問題。
表資源文檔表明存在許多必填字段,其中一些字段即使我不完全理解它們要求的內容也是有意義的,其他字段則沒有。 例如,externalDataConfiguration.schema。 這是指我正在連接的數據庫的模式(我認為是這樣),還是用於存儲數據的模式?
那么externalDataConfiguration.sourceFormat呢? 由於我正在嘗試查看預先存在的數據庫,因此我不確定我是否了解源格式的相關性。 它是我正在制作視圖的數據庫的源格式嗎? 我該如何識別?
和externalDataConfiguration.sourceUris [],我沒有將新數據導入數據庫,所以我不明白這個(或前一個元素)是如何需要的。
架構怎么樣?
tableReference.datasetId,tableReference.projectId和tableReference.tableId是不言自明的。
類型將是view,view.query將是用於生成視圖的實際sql查詢。 所以我明白為什么那些是制作視圖所必需的,但我不理解其他部分。
你能幫我理解這些細節嗎?
謝謝,布拉德
使用https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/insert
假設您添加授權,請提交以下內容
{
"view": {
"query": "select column1, count(1) `project.dataset.someTable` group by 1",
"useLegacySql": false
},
"tableReference": {
"tableId": "viewName",
"projectId": "projectName",
"datasetId": "datasetName"
}
}
或者在Python中使用,假設您有一個服務密鑰設置和環境變量GOOGLE_APPLICATION_CREDENTIALS = / path / to / my / key。 需要注意的是,據我所知,這只能使用遺留sql創建視圖,並且只能使用遺留sql查詢擴展,盡管直接API方法允許使用遺留或標准。
from google.cloud import bigquery
def create_view(dataset_name, view_name, project, viewSQL):
bigquery_client = bigquery.Client(project=project)
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(view_name)
table.view_query = viewSQL
try:
table.create()
return True
except Exception as err:
print(err)
return False
Web UI或bq工具所做的一切都是通過BigQuery API完成的,所以不要放棄:)。
創建視圖類似於創建表,只需確保在調用tables.insert()
時具有包含視圖屬性的表資源。
注意:這改變了0.28.0的庫 - 請參閱以下內容以獲取更多詳細信息: Google BigQuery:通過Python創建視圖google-cloud-bigquery版本0.27.0 vs. 0.28.0
我的示例功能
# create a view via python
def create_view(dataset_name, view_name, sqlQuery, project=None):
try:
bigquery_client = bigquery.Client(project=project)
dataset_ref = bigquery_client.dataset(dataset_name)
table_ref = dataset_ref.table(view_name)
table = Table(table_ref)
table.view_query = sqlQuery
table.view_use_legacy_sql = False
bigquery_client.create_table(table)
return True
except Exception as e:
errorStr = 'ERROR (create_view): ' + str(e)
print(errorStr)
raise
BigQuery的。 版本 - > '1.10.0'
def create_view(client, dataset_name, view_name, view_query):
try:
dataset_ref = client.dataset(dataset_name)
view = dataset_ref.table(view_name)
# view.table_type = 'VIEW'
view.view_query = view_query
view.view_query_legacy_sql = False
client.create_table(view)
pass
except Exception as e:
errorStr = 'ERROR (create_view): ' + str(e)
print(errorStr)
raise
創建一個表而不是一個視圖!!!!
這是創建視圖的正確代碼:
def create_view(client, dataset_name, view_name, view_query):
try:
dataset_ref = client.dataset(dataset_name)
view_ref = dataset_ref.table(view_name)
table = bigquery.Table(view_ref)
table.view_query = view_query
table.view_use_legacy_sql = False
client.create_table(table)
except Exception as e:
errorStr = 'ERROR (create_view): ' + str(e)
print(errorStr)
raise
有必要的
table = bigquery.Table(view_ref)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.