SHOW 문
SHOW 문 (Statements)
SHOW 문을 사용해 카탈로그, 데이터베이스, 테이블·뷰, 컬럼, 함수, 모듈처럼 해당 부모 안의 객체들을 나열할 수 있어요. SHOW CREATE 문은 주어진 객체를 만들 수 있는 DDL 문을 출력해요.
출처: SHOW Statements
본문
Flink SQL은 현재 다음 SHOW 문을 지원해요:
- SHOW CATALOGS
- SHOW CURRENT CATALOG
- SHOW CREATE CATALOG
- SHOW DATABASES
- SHOW CURRENT DATABASE
- SHOW TABLES
- SHOW CREATE TABLE
- SHOW COLUMNS
- SHOW PARTITIONS
- SHOW PROCEDURES
- SHOW VIEWS
- SHOW CREATE VIEW
- SHOW MATERIALIZED TABLES
- SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
- SHOW FUNCTIONS
- SHOW MODULES
- SHOW JARS
- SHOW JOBS
- SHOW MODELS
Run a SHOW statement
SHOW 문은 TableEnvironment의 executeSql() 메서드로 실행할 수 있어요. executeSql() 메서드는 성공적인 SHOW 작업에 대해 객체를 반환하고, 그렇지 않으면 예외를 던져요.
다음 예시는 TableEnvironment에서 SHOW 문을 실행하는 방법을 보여줘요.
Java
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
// show catalogs
tEnv.executeSql("SHOW CATALOGS").print();
// +-----------------+
// | catalog name |
// +-----------------+
// | default_catalog |
// +-----------------+
// show current catalog
tEnv.executeSql("SHOW CURRENT CATALOG").print();
// +----------------------+
// | current catalog name |
// +----------------------+
// | default_catalog |
// +----------------------+
// create a catalog
tEnv.executeSql("CREATE CATALOG cat2 WITH (...)");
// show create catalog
tEnv.executeSql("SHOW CREATE CATALOG cat2").print();
// +---------------------------------------------------------------------------------------------+
// | result |
// +---------------------------------------------------------------------------------------------+
// | CREATE CATALOG `cat2` WITH (
// 'default-database' = 'db',
// 'type' = 'generic_in_memory'
// )
// |
// +---------------------------------------------------------------------------------------------+
// 1 row in set
// show databases
tEnv.executeSql("SHOW DATABASES").print();
// +------------------+
// | database name |
// +------------------+
// | default_database |
// +------------------+
// show current database
tEnv.executeSql("SHOW CURRENT DATABASE").print();
// +-----------------------+
// | current database name |
// +-----------------------+
// | default_database |
// +-----------------------+
// create a table
tEnv.executeSql("CREATE TABLE my_table (...) WITH (...)");
// show tables
tEnv.executeSql("SHOW TABLES").print();
// +------------+
// | table name |
// +------------+
// | my_table |
// +------------+
// show create table
tEnv.executeSql("SHOW CREATE TABLE my_table").print();
// CREATE TABLE `default_catalog`.`default_db`.`my_table` (
// ...
// ) WITH (
// ...
// )
// show columns
tEnv.executeSql("SHOW COLUMNS FROM my_table LIKE '%f%'").print();
// +--------+-------+------+-----+--------+-----------+
// | name | type | null | key | extras | watermark |
// +--------+-------+------+-----+--------+-----------+
// | field2 | BYTES | true | | | |
// +--------+-------+------+-----+--------+-----------+
// create a view
tEnv.executeSql("CREATE VIEW my_view AS SELECT * FROM my_table");
// show views
tEnv.executeSql("SHOW VIEWS").print();
// +-----------+
// | view name |
// +-----------+
// | my_view |
// +-----------+
// show create view
tEnv.executeSql("SHOW CREATE VIEW my_view").print();
// CREATE VIEW `default_catalog`.`default_db`.`my_view`(`field1`, `field2`, ...) as
// SELECT *
// FROM `default_catalog`.`default_database`.`my_table`
// show functions
tEnv.executeSql("SHOW FUNCTIONS").print();
// +---------------+
// | function name |
// +---------------+
// | mod |
// | sha256 |
// | ... |
// +---------------+
// create a user defined function
tEnv.executeSql("CREATE FUNCTION f1 AS ...");
// show user defined functions
tEnv.executeSql("SHOW USER FUNCTIONS").print();
// +---------------+
// | function name |
// +---------------+
// | f1 |
// | ... |
// +---------------+
// show modules
tEnv.executeSql("SHOW MODULES").print();
// +-------------+
// | module name |
// +-------------+
// | core |
// +-------------+
// show full modules
tEnv.executeSql("SHOW FULL MODULES").print();
// +-------------+-------+
// | module name | used |
// +-------------+-------+
// | core | true |
// | hive | false |
// +-------------+-------+
Scala / Python도 같은 예시를 사용하며, scala는 .print(), python은 execute_sql() 메서드를 사용해요.
Syntax & 예시
SHOW CATALOGS
SHOW CATALOGS
모든 카탈로그를 보여줘요.
SHOW CURRENT CATALOG
SHOW CURRENT CATALOG
현재 카탈로그를 보여줘요.
SHOW CREATE CATALOG
SHOW CREATE CATALOG catalog_name
지정된 카탈로그의 생성 문을 보여줘요.
SHOW DATABASES
SHOW DATABASES
모든 데이터베이스를 보여줘요.
SHOW CURRENT DATABASE
SHOW CURRENT DATABASE
현재 데이터베이스를 보여줘요.
SHOW TABLES
SHOW TABLES [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] LIKE <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 모든 테이블을 보여줘요. 데이터베이스를 지정하지 않으면 현재 데이터베이스의 테이블이 반환돼요. 추가로 정규식 패턴으로 필터링할 수 있어요.
show tables from db1;
-- show tables from catalog1.db1;
-- show tables in db1;
-- show tables in catalog1.db1;
+------------+
| table name |
+------------+
| dim |
| person |
+------------+
2 rows in set
show tables from db1 like '%n';
-- show tables from catalog1.db1 like '%n';
-- show tables in db1 like '%n';
-- show tables in catalog1.db1 like '%n';
+------------+
| table name |
+------------+
| person |
+------------+
1 row in set
show tables from db1 not like '%n';
-- show tables from catalog1.db1 not like '%n';
-- show tables in db1 not like '%n';
-- show tables in catalog1.db1 not like '%n';
+------------+
| table name |
+------------+
| dim |
+------------+
1 row in set
show tables;
+------------+
| table name |
+------------+
| items |
| orders |
+------------+
2 rows in set
주어진 sql 패턴과 유사한 테이블을 보여줘요. LIKE 절의 sql 패턴 문법은 MySQL 방언과 같아요.
SHOW CREATE TABLE
SHOW CREATE TABLE [[catalog_name.]db_name.]table_name
지정된 테이블의 create table 문을 보여줘요. 출력에는 테이블 이름, 컬럼 이름, 데이터 타입, 제약 조건, 주석, 구성이 포함돼요. 기존 테이블의 구조·구성·제약 조건을 이해하거나 다른 데이터베이스에서 테이블을 다시 만들어야 할 때 매우 유용해요.
예를 들어 테이블 orders가 다음과 같이 만들어졌다고 가정:
CREATE TABLE orders (
order_id BIGINT NOT NULL comment 'this is the primary key, named ''order_id''.',
product VARCHAR(32),
amount INT,
ts TIMESTAMP(3) comment 'notice: watermark, named ''ts''.',
ptime AS PROCTIME() comment 'notice: computed column, named ''ptime''.',
WATERMARK FOR ts AS ts - INTERVAL '1' SECOND,
CONSTRAINT `PK_order_id` PRIMARY KEY (order_id) NOT ENFORCED
) WITH (
'connector' = 'datagen'
);
show create table 실행:
show create table orders;
+---------------------------------------------------------------------------------------------+
| result |
+---------------------------------------------------------------------------------------------+
| CREATE TABLE `default_catalog`.`default_database`.`orders` (
`order_id` BIGINT NOT NULL COMMENT 'this is the primary key, named ''order_id''.',
`product` VARCHAR(32),
`amount` INT,
`ts` TIMESTAMP(3) COMMENT 'notice: watermark, named ''ts''.',
`ptime` AS PROCTIME() COMMENT 'notice: computed column, named ''ptime''.',
WATERMARK FOR `ts` AS `ts` - INTERVAL '1' SECOND,
CONSTRAINT `PK_order_id` PRIMARY KEY (`order_id`) NOT ENFORCED
) WITH (
'connector' = 'datagen'
)
|
+---------------------------------------------------------------------------------------------+
1 row in set
주의: 현재 SHOW CREATE TABLE은 Flink SQL DDL로 만든 테이블만 지원해요.
SHOW COLUMNS
SHOW COLUMNS ( FROM | IN ) [[catalog_name.]database.]<table_name> [ [NOT] LIKE <sql_like_pattern>]
주어진 테이블 이름과 선택적 like 절로 테이블의 모든 컬럼을 보여줘요. LIKE 절의 sql 패턴 문법은 MySQL 방언과 같아요.
SHOW COLUMNS EXAMPLES
catalog1 카탈로그의 database1 데이터베이스에 orders 테이블이 다음과 같은 구조라고 가정:
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
| user | BIGINT | false | PRI(user) | | |
| product | VARCHAR(32) | true | | | |
| amount | INT | true | | | |
| ts | TIMESTAMP(3) *ROWTIME* | true | | | `ts` - INTERVAL '1' SECOND |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | false | | AS PROCTIME() | |
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
- 주어진 테이블의 모든 컬럼 보기:
show columns from orders;
-- show columns from database1.orders;
-- show columns from catalog1.database1.orders;
-- show columns in orders;
-- show columns in database1.orders;
-- show columns in catalog1.database1.orders;
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
| user | BIGINT | false | PRI(user) | | |
| product | VARCHAR(32) | true | | | |
| amount | INT | true | | | |
| ts | TIMESTAMP(3) *ROWTIME* | true | | | `ts` - INTERVAL '1' SECOND |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | false | | AS PROCTIME() | |
+---------+-----------------------------+-------+-----------+---------------+----------------------------+
5 rows in set
- 주어진 sql 패턴과 유사한 컬럼 보기:
show columns from orders like '%r';
-- show columns from database1.orders like '%r';
-- show columns from catalog1.database1.orders like '%r';
-- show columns in orders like '%r';
-- show columns in database1.orders like '%r';
-- show columns in catalog1.database1.orders like '%r';
+------+--------+-------+-----------+--------+-----------+
| name | type | null | key | extras | watermark |
+------+--------+-------+-----------+--------+-----------+
| user | BIGINT | false | PRI(user) | | |
+------+--------+-------+-----------+--------+-----------+
1 row in set
- 주어진 sql 패턴과 유사하지 않은 컬럼 보기:
show columns from orders not like '%_r';
-- show columns from database1.orders not like '%_r';
-- show columns from catalog1.database1.orders not like '%_r';
-- show columns in orders not like '%_r';
-- show columns in database1.orders not like '%_r';
-- show columns in catalog1.database1.orders not like '%_r';
+---------+-----------------------------+-------+-----+---------------+----------------------------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+---------------+----------------------------+
| product | VARCHAR(32) | true | | | |
| amount | INT | true | | | |
| ts | TIMESTAMP(3) *ROWTIME* | true | | | `ts` - INTERVAL '1' SECOND |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | false | | AS PROCTIME() | |
+---------+-----------------------------+-------+-----+---------------+----------------------------+
4 rows in set
SHOW PARTITIONS
SHOW PARTITIONS [[catalog_name.]database.]<table_name> [ PARTITION <partition_spec>]
<partition_spec>:
(key1=val1, key2=val2, ...)
주어진 테이블 이름과 선택적 partition 절로 파티션된 테이블의 모든 파티션을 보여줘요. PARTITION은 주어진 테이블에서 제공된 <partition_spec> 아래의 모든 파티션을 보여줘요.
SHOW PARTITIONS EXAMPLES
catalog1 카탈로그의 database1 데이터베이스에 파티션된 테이블 table1이 다음 파티션을 가진다고 가정:
+---------+-----------------------------+
| id | date |
+---------+-----------------------------+
| 1001 | 2020-01-01 |
| 1002 | 2020-01-01 |
| 1002 | 2020-01-02 |
+---------+-----------------------------+
- 주어진 테이블의 모든 파티션 보기:
show partitions table1;
-- show partitions database1.table1;
-- show partitions catalog1.database1.table1;
+---------+-----------------------------+
| id | date |
+---------+-----------------------------+
| 1001 | 2020-01-01 |
| 1002 | 2020-01-01 |
| 1002 | 2020-01-02 |
+---------+-----------------------------+
3 rows in set
- 주어진 partition spec으로 파티션 보기:
show partitions table1 partition (id=1002);
-- show partitions database1.table1 partition (id=1002);
-- show partitions catalog1.database1.table1 partition (id=1002);
+---------+-----------------------------+
| id | date |
+---------+-----------------------------+
| 1002 | 2020-01-01 |
| 1002 | 2020-01-02 |
+---------+-----------------------------+
2 rows in set
SHOW PROCEDURES
SHOW PROCEDURES [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 모든 프로시저를 보여줘요. 데이터베이스를 지정하지 않으면 현재 데이터베이스의 프로시저가 반환돼요. <sql_like_pattern>으로 필터링할 수도 있어요. ILIKE는 LIKE와 동일하지만 대소문자를 구분하지 않아요.
%는 어떤 수의 문자(0개 포함)와 일치하고,\%는%문자 하나와 일치해요._는 정확히 한 문자와 일치하고,\_는_문자 하나와 일치해요.
SHOW VIEWS
SHOW VIEWS [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] LIKE <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 모든 뷰를 보여줘요. 데이터베이스를 지정하지 않으면 현재 데이터베이스의 뷰가 반환돼요. 선택적 매칭 패턴으로 출력을 필터링할 수도 있어요.
SHOW CREATE VIEW
SHOW CREATE VIEW [catalog_name.][db_name.]view_name
지정된 뷰의 create view 문을 보여줘요.
SHOW MATERIALIZED TABLES
SHOW MATERIALIZED TABLES [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] LIKE <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 모든 materialized table을 보여줘요. 데이터베이스를 지정하지 않으면 현재 데이터베이스의 materialized table이 반환돼요.
SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
SHOW CREATE MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
지정된 materialized table의 create 문을 보여줘요.
SHOW CREATE OR ALTER MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
지정된 materialized table의 create or alter 문을 보여줘요.
SHOW FUNCTIONS
SHOW [USER] FUNCTIONS [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 시스템 함수·사용자 정의 함수를 포함한 모든 함수를 보여줘요. USER는 사용자 정의 함수만 보여줘요. LIKE/ILIKE로 이름을 필터링할 수 있어요.
SHOW MODULES
SHOW [FULL] MODULES
해석 순서와 함께 모든 활성화된 모듈 이름을 보여줘요. FULL은 로드된 모든 모듈과 해석 순서와 함께 활성화 상태를 보여줘요.
SHOW JARS
SHOW JARS
ADD JAR 문으로 추가된 세션 클래스로더의 모든 jar를 보여줘요.
주의: 현재 SHOW JARS 문은 SQL CLI 또는 SQL Gateway에서만 작동해요.
SHOW JOBS
SHOW JOBS
Flink 클러스터의 잡을 보여줘요.
주의: 현재 SHOW JOBS 문은 SQL CLI 또는 SQL Gateway에서만 작동해요.
SHOW MODELS
SHOW MODELS [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <sql_like_pattern> ]
선택적으로 지정된 데이터베이스의 모든 모델을 보여줘요.
SHOW CREATE MODEL
SHOW CREATE MODEL [catalog_name.][db_name.]model_name
지정된 모델의 create model 문을 보여줘요. 출력에는 모델 이름, 모델 입출력 스키마, 모델 옵션, 기타 구성이 포함돼요.
예를 들어 모델 my_model이 다음과 같이 만들어졌다고 가정:
CREATE MODEL my_model
INPUT(text STRING)
OUTPUT(response STRING)
WITH (
'provider' = 'openai',
);
show create model 실행:
show create model my_model;
+---------------------------------------------------------------------------------------------+
| result |
+---------------------------------------------------------------------------------------------+
| CREATE MODEL `default_catalog`.`default_database`.`my_model`
INPUT (`text` STRING)
OUTPUT (`response` STRING) WITH (
'provider' = 'openai'
)
|
+---------------------------------------------------------------------------------------------+
1 row in set