Unpivot
算子说明
转置算子。用于将行转换为列。这个操作可以将一张表中的多列数据转换为两列,其中一列是原始表中的列名,另一列是对应的值。
典型场景
查询使用unpivot转置的表。
示例
--UNPIVOT语法只能在O兼容库中使用 gaussdb=# CREATE DATABASE ora_test WITH DBCOMPATIBILITY = 'ORA'; gaussdb=# \c ora_test gaussdb=# SET enable_fast_query_shipping=off; --数据准备。 ora_test=# DROP TABLE IF EXISTS t1; ora_test=# CREATE TABLE t1 (id int, number int, grade int); CREATE TABLE ora_test=# INSERT INTO t1 VALUES(generate_series(1,100), 1, 2); INSERT 0 100 --执行结果。 ora_test=# EXPLAIN SELECT * FROM t1 UNPIVOT (v1 FOR v2 in (id,number,grade)); oracle QUERY PLAN ------------------------------------------------------------------------------------------ Streaming (type: GATHER) (cost=1.88..16.24 rows=60 width=36) Node/s: All datanodes -> Subquery Scan on __unnamed_unpivot_subquery__ (cost=0.00..13.43 rows=60 width=36) Filter: (__unnamed_unpivot_subquery__.v1 IS NOT NULL) -> Unpivot (cost=0.00..13.13 rows=60 width=36) -> Seq Scan on t1 (cost=0.00..13.13 rows=20 width=12) (6 rows) --删除。 ora_test=# DROP TABLE t1; ora_test=# \c gaussdb gaussdb=# DROP DATABASE ora_test;
上述示例中,Unpivot算子输出信息如下所示。
信息名称 |
含义 |
---|---|
Unpivot |
算子名称。 |
Seq Scan |
Seq Scan算子 |