如何获取SNOWFLAKE环境中已创建数据表的原始DDL语句
Snowflake 检索表原始DDL的查询语句
你可以根据表的当前状态选择对应查询方式:
1. 目标表当前仍存在于环境中
直接调用Snowflake内置的GET_DDL函数即可获取完整建表语句:
单表查询
-- 按实际替换<数据库名>、<模式名>、<表名>参数 SELECT GET_DDL('TABLE', '<数据库名>.<模式名>.<表名1>'); SELECT GET_DDL('TABLE', '<数据库名>.<模式名>.<表名2>');
批量查询指定表
可以直接从INFORMATION_SCHEMA中批量筛选你需要的两张表,一次性返回DDL:
SELECT TABLE_NAME, GET_DDL('TABLE', CONCAT(TABLE_CATALOG, '.', TABLE_SCHEMA, '.', TABLE_NAME)) AS TABLE_DDL FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<你的模式名>' AND TABLE_NAME IN ('<表名1>', '<表名2>');
2. 目标表已被删除/需要查询历史版本的DDL
如果需要查询数月前的历史状态,需要你的Snowflake实例开启了对应时长的时间旅行功能:标准版本默认保留1天,企业版最多可设置90天的保留期,超出保留期的历史数据无法查询。
你可以通过AT语法指定历史时间点查询:
-- 方法1:指定偏移量,示例为查询90天前的表DDL,单位为秒 SELECT GET_DDL('TABLE', '<数据库名>.<模式名>.<表名1>' AT(OFFSET => -60*60*24*90)); -- 方法2:指定具体UTC时间点查询 SELECT GET_DDL('TABLE', '<数据库名>.<模式名>.<表名1>' AT(TIMESTAMP => '2024-01-01 00:00:00'::TIMESTAMP));
如果已经记不清表名,也可以先筛选指定时间范围内创建的表:
SELECT TABLE_NAME, CREATED, LAST_ALTERED FROM INFORMATION_SCHEMA.TABLES AT(TIMESTAMP => '<你要查询的历史时间点>'::TIMESTAMP) WHERE TABLE_TYPE = 'BASE TABLE' AND CREATED BETWEEN '<起始时间>'::TIMESTAMP AND '<结束时间>'::TIMESTAMP;
内容的提问来源于stack exchange,提问作者Justine Mit
相关产品推荐
相关产品推荐

