

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 시스템 테이블 및 뷰 쿼리
<a name="t_querying_redshift_system_tables"></a>

데이터 웨어하우스에는 생성한 테이블 외에도 많은 시스템 테이블 및 뷰가 포함되어 있습니다. 이러한 테이블 및 뷰에는 설치 및 시스템에서 실행 중인 다양한 쿼리 및 프로세스에 대한 정보가 포함되어 있습니다. 이러한 시스템 테이블 및 뷰를 쿼리하여 데이터베이스에 대한 정보를 수집할 수 있습니다. 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서**의 [시스템 테이블 및 뷰 참조](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)를 참조하세요. 각 테이블 또는 뷰에 대한 설명은 테이블이 모든 사용자에게 표시되는지 아니면 슈퍼 사용자에게만 표시되는지를 나타냅니다. 슈퍼 사용자에게만 보이는 테이블을 쿼리하려면 슈퍼 사용자로 로그인합니다.

## 테이블 이름 목록 보기
<a name="t_querying_redshift_system_tables-view-a-list-of-table-names"></a>

스키마의 모든 테이블의 목록을 보려면 PG\$1TABLE\$1DEF 시스템 카탈로그 테이블을 쿼리하면 됩니다. 먼저 `search_path`에 대한 설정을 검토할 수 있습니다.

```
SHOW search_path;
```

결과는 다음과 같습니다.

```
  search_path
---------------
 $user, public
```

다음 예에서는 검색 경로에 `SALES` 스키마를 추가하고 `SALES` 스키마의 모든 테이블을 표시합니다.

```
set search_path to '$user', 'public', 'sales';
                
SHOW search_path;

      search_path       
------------------------
 "$user", public, sales


select * from pg_table_def where schemaname = 'sales';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

다음 예는 현재 데이터베이스의 모든 스키마에서 `DEMO`라는 모든 테이블의 목록을 보여줍니다.

```
set search_path to '$user', 'public', 'sales';
select * from pg_table_def where tablename = 'demo';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 public     | demo      | personid | integer                | az64     | f       |       0 | f
 public     | demo      | city     | character varying(255) | lzo      | f       |       0 | f
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

자세한 내용은 [PG\$1TABLE\$1DEF](https://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html) 섹션을 참조하세요.

Amazon Redshift 쿼리 에디터 v2를 사용하면 먼저 연결할 데이터베이스를 선택하여 지정된 스키마의 모든 테이블을 볼 수도 있습니다.

## 사용자 보기
<a name="t_querying_redshift_system_tables-view-database-users"></a>

PG\$1USER 카탈로그를 쿼리하여 모든 사용자의 목록과 사용자 ID(USESYSID) 및 사용자 권한을 볼 수 있습니다.

```
SELECT * FROM pg_user;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 rdsdb      |        1 | true        | true     | true      | ******** | infinity |
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

사용자 이름 `rdsdb`는 Amazon Redshift가 일상적 관리 및 유지 태스크를 위해 내부적으로 사용합니다. SELECT 문에 `where usesysid > 1`을 추가하면 사용자가 정의한 사용자 이름만 표시되도록 쿼리를 필터링할 수 있습니다.

```
SELECT * FROM pg_user WHERE usesysid > 1;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

## 최근 쿼리 보기
<a name="t_querying_redshift_system_tables-view-recent-queries"></a>

앞의 예에서 `adminuser`의 사용자 ID(user\$1id)는 100입니다. `adminuser`가 실행한 가장 최근의 쿼리 4건을 나열하려면 SYS\$1QUERY\$1HISTORY 뷰를 쿼리하면 됩니다.

이 뷰를 사용하여 최근에 실행된 쿼리의 쿼리 ID(query\$1id) 또는 프로세스 ID(session\$1id)를 찾을 수 있습니다. 이 뷰를 사용하여 쿼리를 완료하는 데 걸린 시간을 확인할 수도 있습니다. SYS\$1QUERY\$1HISTORY에는 특정 쿼리를 찾는 데 도움이 되는 쿼리 문자열(query\$1text)의 처음 4,000자가 포함되어 있습니다. 결과를 제한하려면 SELECT 문과 함께 LIMIT 절을 사용합니다.

```
SELECT query_id, session_id, elapsed_time, query_text 
FROM sys_query_history
WHERE user_id = 100
ORDER BY start_time desc
LIMIT 4;
```

결과는 다음과 같습니다.

```
 query_id |  session_id  |  elapsed_time |   query_text
----------+--------------+---------------+----------------------------------------------------------------
 892      |    21046     |       55868   | SELECT query, pid, elapsed, substring from ...
 620      |    17635     |     1296265   | SELECT query, pid, elapsed, substring from ...
 610      |    17607     |       82555   | SELECT * from DEMO; 
 596      |    16762     |      226372   | INSERT INTO DEMO VALUES (100);
```

## 실행 중인 쿼리의 세션 ID 확인
<a name="determine_pid"></a>

쿼리에 대한 시스템 테이블 정보 검색을 위해 해당 쿼리와 연결된 세션 ID(프로세스 ID)를 지정해야 할 수 있습니다. 또는 아직 실행 중인 쿼리의 세션 ID를 찾아야 할 수도 있습니다. 예를 들어 프로비저닝된 클러스터에서 실행하는 데 너무 오래 걸리는 쿼리를 취소해야 하는 경우 세션 ID가 필요합니다. STV\$1RECENTS 시스템 테이블을 쿼리하여 실행 중인 쿼리의 세션 ID 목록과 함께 해당 쿼리 문자열을 가져올 수 있습니다. 쿼리가 여러 세션을 반환하는 경우 쿼리 텍스트를 보고 필요한 세션 ID를 파악할 수 있습니다.

실행 중인 쿼리의 세션 ID를 확인하려면 다음 SELECT 문을 실행합니다.

```
SELECT session_id, user_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```