데이터베이스 생성
새 레벨을 생성합니다.
데이터베이스를 생성하려면 슈퍼 사용자이거나 CREATEDB 권한이 있어야 합니다. 제로 ETL 통합과 연결된 데이터베이스를 생성하려면 수퍼유저이거나 CREATEDB 권한과 CREATEDB 권한이 모두 있어야 합니다.
트랜잭션 블록(BEGIN ... END) 내에서는 CREATE DATABASE를 실행할 수 없습니다. 버전 관리에 대한 자세한 내용은 직렬화 가능 격리 단원을 참조하십시오.
구문
CREATE DATABASE database_name [ { [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE } ] [ ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT } ] } | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid } | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } | { INTEGRATION '<integration_id>' [ DATABASE '<source_database>' ] [SET {REFRESH_INTERVAL <interval>} ] } } | { IAM_ROLE {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } } ]
파라미터
- database_name
-
새 데이터베이스의 이름입니다. 유효한 이름에 대한 자세한 내용은 이름 및 식별자 섹션을 참조하세요.
- WITH
-
선택적 키워드입니다.
- OWNER
-
데이터베이스 소유자를 지정합니다.
- =
-
선택적 문자입니다.
- db_owner
-
데이터베이스 소유자의 사용자 이름입니다.
- CONNECTION LIMIT { limit | UNLIMITED }
-
사용자가 동시에 열어놓을 수 있는 데이터베이스 연결의 최대 개수입니다. 슈퍼 사용자에 대해서는 이 제한이 적용되지 않습니다. 최대 동시 연결 수를 허용하려면 UNLIMITED 키워드를 사용하십시오. 각 사용자에 대한 연결 개수 제한이 적용될 수도 있습니다. 자세한 내용은 사용자 생성 단원을 참조하십시오. 기본값은 UNLIMITED입니다. 현재 연결을 보려면 STV_SESSIONS 시스템 뷰를 쿼리하십시오.
참고
사용자 및 데이터베이스 연결 제한이 모두 적용되는 경우 사용되지 않는 연결 슬롯은 사용자가 연결 시도 시 양쪽 제한 범위 내에서 모두 사용 가능해야 합니다.
- COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE }
-
문자열 검색 또는 비교가 CASE_SENSITIVE인지, CASE_INSENSITIVE인지를 지정하는 절입니다. 기본값은 CASE_SENSITIVE입니다.
- ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT }
-
데이터베이스에 대해 쿼리가 실행될 때 사용되는 격리 수준을 지정하는 절입니다.
SERIALIZABLE 격리 - 동시 트랜잭션에 대한 완전한 직렬화 기능을 제공합니다. 자세한 내용은 직렬화 가능 격리 단원을 참조하십시오.
SNAPSHOT 격리 - 업데이트 및 삭제 충돌로부터 보호하는 격리 수준을 제공합니다. 프로비저닝된 클러스터 또는 서버리스 네임스페이스에서 생성된 데이터베이스의 기본값입니다.
다음과 같이 데이터베이스에서 실행 중인 동시성 모델을 볼 수 있습니다.
STV_DB_ISOLATION_LEVEL 보기를 쿼리합니다. 자세한 내용은 STV_DB_ISOLATION_LEVEL 단원을 참조하십시오.
SELECT * FROM stv_db_isolation_level;
PG_DATABASE_INFO 보기를 쿼리합니다.
SELECT datname, datconfig FROM pg_database_info;
데이터베이스당 격리 수준이
concurrency_model
키 옆에 나타납니다. 값1
은 SNAPSHOT을 나타냅니다. 값2
는 SERIALIZABLE을 나타냅니다.
Amazon Redshift 데이터베이스에서 SERIALIZABLE 및 SNAPSHOT 격리는 모두 직렬화 가능한 격리 수준 유형입니다. 즉, SQL 표준에 따라 더티 읽기, 비반복 읽기, 팬텀 읽기가 방지됩니다. 두 격리 수준 모두 트랜잭션이 시작할 때 존재했던 데이터의 스냅샷에서 트랜잭션이 작동하고 다른 트랜잭션은 해당 스냅샷을 변경할 수 없도록 보장합니다. 그러나 SNAPSHOT 격리는 서로 다른 테이블 행에서 쓰기 스큐 삽입 및 업데이트를 방지하지 않기 때문에 완전한 직렬화 기능을 제공하지 않습니다.
다음 시나리오에서는 SNAPSHOT 격리 수준을 사용한 쓰기 스큐 업데이트를 보여줍니다.
Numbers
테이블에는0
및1
값을 포함하는digits
열이 있습니다. 각 사용자의 UPDATE 문은 다른 사용자와 겹치지 않습니다. 그러나0
및1
값은 스왑됩니다. 실행 중인 SQL은 이 타임라인에 따라 다음과 같은 결과가 나타납니다.Time 사용자 1 작업 사용자 2 작업 1 BEGIN: 2 BEGIN: 3 SELECT * FROM Numbers; digits ------ 0 1
4 SELECT * FROM Numbers; digits ------ 0 1
5 UPDATE Numbers SET digits=0 WHERE digits=1; 6 SELECT * FROM Numbers; digits ------ 0 0
7 COMMIT; 8 Update Numbers SET digits=1 WHERE digits=0; 9 SELECT * FROM Numbers; digits ------ 1 1
10 COMMIT; 11 SELECT * FROM Numbers; digits ------ 1 0
12 SELECT * FROM Numbers; digits ------ 1 0
직렬화 가능 격리를 사용하여 동일한 시나리오를 실행하는 경우 Amazon Redshift 직렬화 가능 위반으로 인해 사용자 2를 종료하고 오류
1023
을 반환합니다. 자세한 내용은 직렬화 가능 격리 오류 수정 방법 단원을 참조하십시오. 이 경우 사용자 1만 성공적으로 커밋할 수 있습니다. 모든 워크로드에 직렬화 가능 격리가 필요한 것은 아니며, 이 경우 스냅샷 격리는 데이터베이스의 대상 격리 수준으로 충분합니다. - FROM ARN '<ARN>'
-
데이터베이스를 생성하는 데 사용할 AWS Glue 데이터베이스 ARN입니다.
- { DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA }
-
참고
이 파라미터는 CREATE DATABASE 명령에 FROM ARN 파라미터도 사용하는 경우에만 적용할 수 있습니다.
AWS Glue Data Catalog의 객체에 액세스하는 데 도움이 되는 스키마를 사용하여 데이터베이스를 생성할지 여부를 지정합니다.
- FROM INTEGRATION '<integration_id>' [ DATABASE '<source_database>' ] [SET {REFRESH_INTERVAL <interval>} ]
-
제로 ETL 통합 식별자를 사용하여 데이터베이스를 생성할지 여부를 지정합니다. SVV_INTEGRATION 시스템 뷰에서
integration_id
를 검색할 수 있습니다. Aurora PostgreSQL 제로 ETL 통합의 경우 SVV_INTEGRATION에서 검색할 수도 있는source_database
이름을 지정해야 합니다. SET REFRESH_INTERVAL 절은 제로 ETL 소스에서 대상 데이터베이스로 데이터를 새로고침하기 위해 대략적인 시간 간격을 초 단위로 설정합니다. 소스 유형이 Aurora MySQL , Aurora PostgreSQL 또는 RDS for MySQL인 제로 ETL 통합의 경우 기본값은 0초입니다.예시는 제로 ETL 통합 결과를 받을 데이터베이스 생성을 확인하세요. 제로 ETL 통합을 사용하여 데이터베이스를 생성하는 방법에 대한 자세한 내용은 Amazon Redshift 관리 가이드의 Amazon Redshift에서 대상 데이터베이스 생성을 참조하세요.
- IAM_ROLE { default | 'SESSION' | 'arn:aws:iam::
<AWS 계정-id>
:role/<role-name>
' } -
참고
이 파라미터는 CREATE DATABASE 명령에 FROM ARN 파라미터도 사용하는 경우에만 적용할 수 있습니다.
CREATE DATABASE 명령을 실행할 때 클러스터와 연결된 IAM 역할을 지정하면 데이터베이스에서 쿼리를 실행할 때 Amazon Redshift가 해당 역할의 보안 인증을 사용합니다.
default
키워드를 지정한다는 것은 기본값으로 설정되어 클러스터와 연결된 IAM 역할을 사용한다는 의미입니다.페더레이션형 ID를 사용하여 Amazon Redshift 클러스터에 연결하고 이 명령을 사용하여 생성된 외부 스키마에서 테이블에 액세스하는 경우에
'SESSION'
을 사용합니다. 페더레이션 ID 사용의 예를 보려면 페더레이션형 ID 구성 방법이 설명된 페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리 섹션을 참조하세요.클러스터가 인증 및 권한 부여에 사용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 사용합니다. 최소 IAM 역할은 액세스되는 Amazon S3 버킷에서 LIST 작업을 수행하고 버킷에 포함된 Amazon S3 객체에 대한 GET 작업을 수행할 수 있는 권한이 있어야 합니다. 데이터 공유를 위해 AWS Glue Data Catalog를 사용하여 데이터베이스를 생성할 때 IAM_ROLE을 사용하는 방법에 대해 자세히 알아보려면 소비자로서 레이크 포메이션 관리형 데이터 공유로 작업을 참조하세요.
다음은 단일 ARN에 대한 IAM_ROLE 파라미터의 구문을 보여줍니다.
IAM_ROLE 'arn:aws:iam::
<aws-account-id>
:role/<role-name>
'역할을 함께 묶어 클러스터가 다른 계정에 속한 다른 IAM 역할을 수임하도록 할 수 있습니다. 최대 10개의 역할을 함께 묶을 수 있습니다. 자세한 내용은 Amazon Redshift Spectrum에서 IAM 역할 연결 단원을 참조하십시오.
이 IAM 역할에 다음과 유사한 IAM 권한 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:
us-west-2
:123456789012
:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }연합 쿼리에 사용할 IAM 역할을 생성하는 단계는 연합 쿼리 사용을 위해 비밀 및 IAM 역할 생성 섹션을 참조하세요.
참고
연결된 역할 목록에 공백을 포함하지 마십시오.
다음은 세 역할을 함께 묶기 위한 구문을 나타낸 것입니다.
IAM_ROLE 'arn:aws:iam::
<aws-account-id>
:role/<role-1-name>
,arn:aws:iam::<aws-account-id>
:role/<role-2-name>
,arn:aws:iam::<aws-account-id>
:role/<role-3-name>
'
datashare와 함께 CREATE DATABASE를 사용하기 위한 구문
다음 구문에서는 동일한 AWS 계정 내에서 데이터를 공유하기 위해 datashare에서 데이터베이스를 생성하는 데 사용되는 CREATE DATABASE 명령을 설명합니다.
CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
다음 구문에서는 AWS 계정 간에 데이터를 공유하기 위해 datashare에서 데이터베이스를 생성하는 데 사용되는 CREATE DATABASE 명령을 설명합니다.
CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF ACCOUNT account_id NAMESPACE namespace_guid
datashare와 함께 CREATE DATABASE를 사용하기 위한 파라미터
- FROM DATASHARE
-
datashare가 있는 위치를 나타내는 키워드입니다.
- datashare_name
-
소비자 데이터베이스가 생성되는 datashare의 이름입니다.
- WITH PERMISSIONS
-
개별 데이터베이스 객체에 액세스하려면 데이터 공유에서 만든 데이터베이스에 객체 수준 권한이 필요하다는 것을 지정합니다. 이 절을 사용하지 않으면 데이터베이스에 대한 USAGE 권한이 부여된 사용자 또는 역할은 데이터베이스의 모든 데이터베이스 객체에 대한 액세스 권한을 자동으로 갖게 됩니다.
- NAMESPACE namespace_guid
-
datashare가 속한 생산자 네임스페이스를 지정하는 값입니다.
- ACCOUNT account_id
-
datashare가 속한 생산자 계정을 지정하는 값입니다.
datashare를 위한 CREATE DATABASE 사용 노트
데이터베이스 수퍼유저는 CREATE DATABASE를 사용하여 AWS 계정 내의 datashare에서 데이터베이스를 생성할 때 NAMESPACE 옵션을 지정합니다. ACCOUNT 옵션은 선택 사항입니다. CREATE DATABASE를 사용하여 AWS 여러 계정의 데이터 공유에서 데이터베이스를 생성하는 경우 프로듀서의 ACCOUNT 및 NAMESPACE 옵션을 모두 지정합니다.
소비자 클러스터에서 하나의 datashare에 대해 하나의 소비자 데이터베이스만 생성할 수 있습니다. 동일한 datashare를 참조하는 여러 소비자 데이터베이스를 만들 수 없습니다.
AWS Glue Data Catalog의 CREATE DATABASE
AWS Glue 데이터베이스 ARN을 사용하여 데이터베이스를 생성하려면 CREATE DATABASE 명령에 ARN을 지정합니다.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
선택적으로 IAM_ROLE 파라미터에 값을 제공할 수도 있습니다. 파라미터 및 허용되는 값에 대한 자세한 내용은 파라미터를 참조하세요.
다음은 IAM 역할을 사용하여 ARN에서 데이터베이스를 만드는 방법을 보여주는 예제입니다.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
DATA CATALOG SCHEMA를 사용하여 데이터베이스를 생성할 수도 있습니다.
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
제로 ETL 통합 결과를 받을 데이터베이스 생성
제로 ETL 통합 ID를 사용하여 데이터베이스를 생성하려면 CREATE DATABASE 명령에 integration_id
를 지정합니다.
CREATE DATABASE
destination_db_name
FROM INTEGRATION 'integration_id
';
예를 들어, 먼저 SVV_INTEGRATION에서 통합 ID를 검색합니다.
SELECT integration_id FROM SVV_INTEGRATION;
그런 다음 검색된 통합 ID 중 하나를 사용하여 제로 ETL 통합을 받는 데이터베이스를 생성합니다.
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
제로 ETL 통합 소스 데이터베이스가 필요한 경우 예를 들어 지정합니다.
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE 'sourcedb';
데이터베이스의 새로고침 간격을 설정할 수도 있습니다. 예를 들어 제로 ETL 통합 소스의 데이터에 대해 새로고침 간격을 7,200초로 설정하려면 다음과 같이 합니다.
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
SVV_INTEGRATION 카탈로그 뷰에서 integration_id, target_database, source, refresh_interval 등의 제로 ETL 통합에 관한 정보를 쿼리합니다.
SELECT * FROM svv_integration;
CREATE DATABASE의 제한 사항
Amazon Redshift는 데이터베이스에 대해 다음과 같은 제한 사항을 적용합니다.
-
클러스터당 사용자 정의 데이터베이스 최대 개수는 60개입니다.
-
데이터베이스 이름은 최대 127바이트입니다.
-
데이터베이스 이름은 예약어가 될 수 없습니다.
데이터베이스 데이터 정렬
데이터 정렬은 데이터베이스 엔진이 SQL의 문자 형식 데이터를 비교하고 정렬하는 방법을 정의하는 일련의 규칙입니다. 대/소문자를 구분하지 않는 데이터 정렬은 가장 일반적으로 사용되는 데이터 정렬입니다. Amazon Redshift는 대/소문자를 구분하지 않는 데이터 정렬을 사용하여 다른 데이터 웨어하우스 시스템에서 쉽게 마이그레이션할 수 있습니다. 대/소문자를 구분하지 않는 데이터 정렬을 기본적으로 지원하는 Amazon Redshift는 배포 키, 정렬 키 또는 범위 제한 스캔과 같은 중요한 조정 또는 최적화 방법을 계속 사용합니다.
COLLATE 절은 데이터베이스의 모든 CHAR 및 VARCHAR 열에 대한 기본 데이터 정렬을 지정합니다. CASE_INSENSITIVE가 지정되면 모든 CHAR 또는 VARCHAR 열은 대/소문자를 구분하지 않는 데이터 정렬을 사용합니다. 데이터 정렬에 대한 자세한 내용은 콜레이션 시퀀스 섹션을 참조하세요.
대/소문자를 구분하지 않는 열에 삽입되거나 수집된 데이터는 원래 대/소문자를 유지합니다. 그러나 정렬 및 그룹화를 포함한 모든 비교 기반 문자열 연산은 대/소문자를 구분하지 않습니다. LIKE 조건자, 유사 및 정규식 함수와 같은 패턴 일치 연산도 대/소문자를 구분하지 않습니다.
다음 SQL 연산은 적용 가능한 데이터 정렬 의미 체계를 지원합니다.
비교 연산자: =, <>, <, <=, >, >=.
LIKE 연산자
ORDER BY 절
GROUP BY 절
MIN 및 MAX 및 LISTAGG와 같은 문자열 비교를 사용하는 집계 함수
PARTITION BY 절 및 ORDER BY 절과 같은 윈도 함수
스칼라 함수 greatest() and least(), STRPOS(), REGEXP_COUNT(), REGEXP_REPLACE(), REGEXP_INSTR(), REGEXP_SUBSTR()
Distinct 절
UNION, INTERSECT 및 EXCEPT
IN LIST
Amazon Redshift Spectrum 및 Aurora PostgreSQL 연합 쿼리를 포함한 외부 쿼리의 경우 VARCHAR 또는 CHAR 열의 데이터 정렬은 현재 데이터베이스 수준 데이터 정렬과 동일합니다.
다음 예에서는 Amazon Redshift Spectrum 테이블을 쿼리합니다.
SELECT ci_varchar FROM spectrum.test_collation WHERE ci_varchar = 'AMAZON'; ci_varchar ---------- amazon Amazon AMAZON AmaZon (4 rows)
데이터베이스 데이터 정렬을 사용하여 테이블을 생성하는 방법에 대한 자세한 내용은 CREATE TABLE 섹션을 참조하세요.
COLLATE 함수에 대한 자세한 내용은 COLLATE 함수 섹션을 참조하세요.
데이터베이스 데이터 정렬 제한 사항
다음은 Amazon Redshift에서 데이터베이스 데이터 정렬 작업 시 제한 사항입니다.
PG 카탈로그 테이블과 Amazon Redshift 시스템 테이블을 포함한 모든 시스템 테이블 또는 뷰는 대/소문자를 구분합니다.
소비자 데이터베이스와 생산자 데이터베이스의 데이터베이스 수준 데이터 정렬이 다른 경우 Amazon Redshift는 데이터베이스 간 쿼리와 클러스터 간 쿼리를 지원하지 않습니다.
Amazon Redshift는 리더 노드 전용 쿼리에서 대/소문자를 구분하지 않는 데이터 정렬을 지원하지 않습니다.
다음 예에서는 지원되지 않는 대/소문자를 구분하지 않는 쿼리와 Amazon Redshift에서 전송하는 오류를 보여줍니다.
SELECT collate(usename, 'case_insensitive') FROM pg_user; ERROR: Case insensitive collation is not supported in leader node only query.
Amazon Redshift는 비교, 함수, 조인 또는 설정 연산과 같이 대/소문자를 구분하는 열과 대/소문자를 구분하지 않는 열 간의 상호 작용을 지원하지 않습니다.
다음 예에서는 대/소문자를 구분하는 열과 대/소문자를 구분하지 않는 열이 상호 작용할 때의 오류를 보여줍니다.
CREATE TABLE test (ci_col varchar(10) COLLATE case_insensitive, cs_col varchar(10) COLLATE case_sensitive, cint int, cbigint bigint);
SELECT ci_col = cs_col FROM test; ERROR: Query with different collations is not supported yet.
SELECT concat(ci_col, cs_col) FROM test; ERROR: Query with different collations is not supported yet.
SELECT ci_col FROM test UNION SELECT cs_col FROM test; ERROR: Query with different collations is not supported yet.
SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col; ERROR: Query with different collations is not supported yet.
Select Coalesce(ci_col, cs_col) from test; ERROR: Query with different collations is not supported yet.
Select case when cint > 0 then ci_col else cs_col end from test; ERROR: Query with different collations is not supported yet.
Amazon Redshift는 SUPER 데이터 형식에 대한 데이터 정렬을 지원하지 않습니다. 대/소문자를 구분하지 않는 데이터베이스에 SUPER 열을 생성하고 SUPER 열과 대/소문자를 구분하지 않는 열 간의 상호 작용은 지원되지 않습니다.
다음 예에서는 대/소문자를 구분하지 않는 데이터베이스에서 데이터 형식으로 SUPER를 사용하여 테이블을 생성합니다.
CREATE TABLE super_table (a super); ERROR: SUPER column is not supported in case insensitive database.
다음 예에서는 SUPER 데이터와 비교하여 대/소문자를 구분하지 않는 문자열로 데이터를 쿼리합니다.
CREATE TABLE test_super_collation (s super, c varchar(10) COLLATE case_insensitive, i int);
SELECT s = c FROM test_super_collation; ERROR: Coercing from case insensitive string to SUPER is not supported.
이러한 쿼리가 작동하도록 하려면 COLLATE 함수를 사용하여 한 열의 데이터 정렬을 다른 열과 일치하도록 변환합니다. 자세한 내용은 COLLATE 함수 단원을 참조하십시오.
예시
데이터베이스 생성
다음 예에서는 TICKIT로 명명된 데이터베이스를 생성하고 사용자 DWUSER에게 소유권을 부여합니다.
create database tickit with owner dwuser;
데이터베이스에 대한 세부 정보를 보려면 PG_DATABASE_INFO 카탈로그 테이블을 쿼리합니다.
select datname, datdba, datconnlimit from pg_database_info where datdba > 1; datname | datdba | datconnlimit -------------+--------+------------- admin | 100 | UNLIMITED reports | 100 | 100 tickit | 100 | 100
다음 예에서는 SNAPSHOT 격리 수준의 sampledb
데이터베이스를 생성합니다.
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
다음 예에서는 datashare salesshare에서 데이터베이스 sales_db를 생성합니다.
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
데이터베이스 데이터 정렬 예
대/소문자를 구분하지 않는 데이터베이스 생성
다음 예에서는 sampledb
데이터베이스를 생성하고, T1
테이블을 생성하고, 데이터를 T1
테이블에 삽입합니다.
create database sampledb collate case_insensitive;
SQL 클라이언트를 사용하여 방금 만든 새 데이터베이스에 연결합니다. Amazon Redshift 쿼리 에디터 v2를 사용하려면 에디터에서 sampledb
를 선택합니다. RSQL을 사용하려면 다음과 같은 명령을 사용합니다.
\connect sampledb;
CREATE TABLE T1 ( col1 Varchar(20) distkey sortkey );
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
그런 다음 쿼리에서 John
을 포함하는 결과를 찾습니다.
SELECT * FROM T1 WHERE col1 = 'John'; col1 ------ john JOHN (2 row)
대/소문자를 구분하지 않는 순서
다음 예에서는 테이블 T1을 사용하여 대/소문자를 구분하지 않는 순서를 보여줍니다. Bob과bob 또는 John과 john의 순서는 대/소문자를 구분하지 않는 열에서 동일하기 때문에 비결정적입니다.
SELECT * FROM T1 ORDER BY 1; col1 ------ bob Bob JOHN john Mary (5 rows)
마찬가지로 다음 예에서는 GROUP BY 절을 사용하여 대/소문자를 구분하지 않는 순서를 보여줍니다. Bob과 bob은 동일하며 같은 그룹에 속합니다. 어느 것이 결과에 나타나는지는 비결정적입니다.
SELECT col1, count(*) FROM T1 GROUP BY 1; col1 | count -----+------ Mary | 1 bob | 2 JOHN | 2 (3 rows)
대/소문자를 구분하지 않는 열에서 윈도 함수로 쿼리
다음 예에서는 대/소문자를 구분하지 않는 열에서 윈도 함수를 쿼리합니다.
SELECT col1, rank() over (ORDER BY col1) FROM T1; col1 | rank -----+------ bob | 1 Bob | 1 john | 3 JOHN | 3 Mary | 5 (5 rows)
DISTINCT 키워드로 쿼리
다음 예에서는 DISTINCT 키워드로 T1
테이블을 쿼리합니다.
SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)
UNION 절로 쿼리
다음 예에서는 테이블 T1
및 T2
의 UNION 결과를 보여줍니다.
CREATE TABLE T2 AS SELECT * FROM T1;
SELECT col1 FROM T1 UNION SELECT col1 FROM T2; col1 ------ john bob Mary (3 rows)