You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:24:00