簡體   English   中英

如何在 BigQuery 中獲取最新的架構更改並在 7 天內恢復已刪除的列

[英]How to fetch the latest schema change in BigQuery and restore deleted column within 7 days

現在我通過以下命令獲取 BQ 表的列和數據類型:

SELECT COLUMN_NAME, DATA_TYPE 
   FROM `Dataset`.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 
WHERE table_name="User"

但是,如果我使用命令刪除列: Alter TABLE User drop column blabla :根據官方文檔,在 7 天內(TTL)實際上並未刪除列blabla

如果我使用上述命令,該列仍然存在於模式以及表Dataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS

只是我無法將數據插入此類列並在 GCP 控制台中查看此類列。 這種不一致確實會導致問題。

如果我想編寫 bash 腳本來監控架構更改並基於它進行一些操作。

我需要更多地了解 BigQuery 的表架構。 我最不需要的是: Dataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS可以存儲一個標志列,指示deleted或 TTL:7days

我的問題是:

  1. 如何在 spanner 中獲取反映最近刪除的列的正確模式?
  2. 如果該列實際上沒有被刪除,有什么方法可以輕松恢復它?
  1. 如果您想獲取最近刪除的列,可以嘗試通過 Cloud Logging 進行搜索。 我不確定 Spanner 支持哪些工具,但如果你想使用Bash ,你可以使用gcloud來獲取日志。 雖然很難解析 output 並獲得您想要的信息。

    下面使用的命令獲取了google.cloud.bigquery.v2.JobService.InsertJob的日志,因為ALTER TABLE被視為InsertJob並根據它所說的實際查詢過濾它drop 我使用的正則表達式並不嚴格(為了舉例),我建議將正則表達式更新為更嚴格。

     gcloud logging read 'protoPayload.methodName="google.cloud.bigquery.v2.JobService.InsertJob" AND protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query=~"Alter table.*drop.*"'

    來自上述命令的示例片段(根據查詢刪除了Column PADDING ):

    在此處輸入圖像描述

    如果您有 Bash 以外的選項,我建議您為您的日志記錄創建一個 BQ 接收器,您可以在那里執行查詢並獲取這些信息。 您還可以使用 Python、NodeJS 等客戶端庫在接收器中查詢或直接在 GCP 日志中查詢。

  2. 根據這個SO answer ,您可以使用BQ 的時間旅行功能來查詢已刪除的列。 答案還解釋了 BQ 在 7 天內保留已刪除列的行為以及立即刪除該列的解決方法。 請參閱用於檢索已刪除列的實際查詢以及在先前提供的鏈接上刪除列的解決方法。

暫無
暫無

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

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