ClickHouse中如何将子查询结果插入临时表?
ClickHouse 替代 SQL Server SELECT INTO 临时表的实现方法
ClickHouse 不支持 SQL Server 中 SELECT * INTO #temp FROM (...) 的语法,以下是两种常用的替代方案,同时说明临时表的引擎相关问题:
方案1:先创建临时表再插入数据
用 TEMPORARY TABLE 关键字创建临时表,无需手动指定 Engine(ClickHouse 会自动使用 Memory 引擎作为临时表的默认引擎):
-- 定义临时表结构,替换为实际字段类型 CREATE TEMPORARY TABLE #temp ( cl1 String, cl2 Int64, cl3 DateTime, ... ); -- 插入子查询结果 INSERT INTO #temp SELECT cl1, cl2, cl3, ... FROM TABLE1 WHERE cl1 = 'A';
方案2:通过 AS SELECT 自动创建临时表
如果不想手动定义字段类型,可以直接基于子查询结果创建临时表,ClickHouse 会自动推断字段的类型和结构:
CREATE TEMPORARY TABLE #temp AS SELECT cl1, cl2, cl3, ... FROM TABLE1 WHERE cl1 = 'A';
关于临时表的 Engine 说明
ClickHouse 的临时表默认使用 Memory 引擎,数据存储在内存中,当会话结束时会自动销毁。如果需要跨会话保留临时数据,那就不能用临时表,得创建普通表并指定 MergeTree 系列引擎(如 MergeTree、ReplacingMergeTree 等),但这种表需要手动删除或清理。
内容的提问来源于stack exchange,提问作者Amirhossein Omidifard
相关产品推荐
相关产品推荐

