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

如何在Trino中获取表DDL并用于SELECT或插入其他表?

Trino中表DDL的复用与批量获取方案

1. 将SHOW CREATE TABLE结果作为SELECT部分插入其他表

Trino中SHOW CREATE TABLE的结果可通过TABLE()函数转换为关系型数据集,从而嵌入到SELECT语句中完成插入操作。

操作示例:

  1. 先创建存储DDL的目标表(按需定义结构):
CREATE TABLE daptr_catalog.u_schema.table_ddls (
    full_table_name VARCHAR,
    table_ddl VARCHAR
) WITH (
    format = 'ORC'
);
  1. 通过子查询将DDL插入目标表:
INSERT INTO daptr_catalog.u_schema.table_ddls (full_table_name, table_ddl)
SELECT 
    'daptr_catalog.u_schema.test',
    create_table
FROM TABLE(SHOW CREATE TABLE daptr_catalog.u_schema.test);

TABLE(SHOW CREATE TABLE ...)会将命令结果转为包含create_table列的表,可直接作为查询数据源使用。

2. 在SELECT中批量获取多张表的DDL

结合information_schema系统表和TABLE(SHOW CREATE TABLE ...)表函数,可批量查询指定范围内所有表的DDL:

SELECT 
    CONCAT(t.table_catalog, '.', t.table_schema, '.', t.table_name) AS full_table_name,
    ct.create_table AS table_ddl
FROM information_schema.tables t
CROSS JOIN TABLE(SHOW CREATE TABLE CONCAT(t.table_catalog, '.', t.table_schema, '.', t.table_name)) ct
WHERE 
    t.table_catalog = 'daptr_catalog'
    AND t.table_schema = 'u_schema';

该语句会返回u_schema下所有表的完整名称及对应的DDL。

3. 除SHOW命令外的DDL获取方法

可通过查询Trino系统元数据表手动拼接DDL,适合需要自定义DDL格式的场景,但需注意不同连接器的元数据存储差异:

手动拼接DDL示例:

SELECT 
    CONCAT(
        'CREATE TABLE ', full_table_name, '(', column_defs, ') WITH (', table_props, ')'
    ) AS table_ddl
FROM (
    SELECT 
        CONCAT(t.table_catalog, '.', t.table_schema, '.', t.table_name) AS full_table_name,
        -- 拼接字段定义
        (SELECT STRING_AGG(CONCAT(c.column_name, ' ', c.data_type), ', ')
         FROM information_schema.columns c
         WHERE c.table_catalog = t.table_catalog
           AND c.table_schema = t.table_schema
           AND c.table_name = t.table_name) AS column_defs,
        -- 拼接WITH参数
        (SELECT STRING_AGG(CONCAT(p.property_name, ' = ''', p.property_value, ''''), ', ')
         FROM system.metadata.table_properties p
         WHERE p.catalog_name = t.table_catalog
           AND p.schema_name = t.table_schema
           AND p.table_name = t.table_name) AS table_props
    FROM information_schema.tables t
    WHERE 
        t.table_catalog = 'daptr_catalog'
        AND t.table_schema = 'u_schema'
        AND t.table_name = 'test'
) AS ddl_subquery;

这种方式需要自行处理字段顺序、约束、特殊数据类型等细节,准确性依赖对元数据结构的熟悉程度,不如SHOW CREATE TABLE直接可靠。

内容的提问来源于stack exchange,提问作者Martin Fedy Fedorko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:30:11