[英]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
我的问题是:
如果您想获取最近删除的列,可以尝试通过 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 日志中查询。
根据这个SO answer ,您可以使用BQ 的时间旅行功能来查询已删除的列。 答案还解释了 BQ 在 7 天内保留已删除列的行为以及立即删除该列的解决方法。 请参阅用于检索已删除列的实际查询以及在先前提供的链接上删除列的解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.