기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
INSERT INTO
SELECT
원본 테이블에서 실행되는 쿼리 설명을 기반으로 하거나 해당 설명의 일부로 제공된 VALUES
세트를 기반으로 하는 대상 테이블에 새 행을 삽입합니다. 원본 테이블이 CSV 또는 JSON과 같은 한 가지 형식의 기본 데이터를 기반으로 하고
대상 테이블이 Parquet 또는 ORC와 같은 다른 형식을 기반으로 하는 경우, INSERT INTO
쿼리를 사용하여 선택한 데이터를 대상 테이블의 형식으로 변환할 수 있습니다.
고려 사항 및 제한
INSERT
쿼리를 Athena와(과) 함께 사용할 때는 다음 사항을 고려하십시오.
에서 암호화된 기본 데이터가 포함된 테이블에서 INSERT
쿼리를 실행할 때 Amazon S3 쿼리가 작성하는 출력 파일은 기본적으로 암호화되지 않습니다.INSERT
암호화된 데이터가 포함된 테이블에 삽입하는 경우 INSERT
쿼리 결과를 암호화할 것을 권장합니다.
콘솔을 사용한 쿼리 결과 암호화에 대한 자세한 내용은 Amazon S3에 저장된 쿼리 결과 암호화 단원을 참조하십시오. 또는 AWS CLI API를 사용하여 암호화를 활성화하려면 AthenaEncryptionConfiguration
작업의 StartQueryExecution 속성을 사용하여 요구 사항에 따라 암호화 옵션을 지정합니다.Amazon S3
지원되는 형식 및SerDes
다음 형식 및 INSERT
를 사용하여 데이터에서 생성된 테이블에서 SerDes 쿼리를 실행할 수 있습니다.
데이터 형식 | SerDe |
---|---|
Avro |
org.apache.hadoop.hive.serde2.avro.AvroSerDe |
JSON |
org.apache.hive.hcatalog.data.JsonSerDe |
ORC |
org.apache.hadoop.hive.ql.io.orc.OrcSerde |
Parquet |
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe |
텍스트 파일 |
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe CSV, TSV 및 사용자 지정 구분 기호로 구분된 파일이 지원됩니다. |
버킷팅된 테이블이 지원되지 않음
INSERT INTO
은(는) 버킷팅된 테이블에서 지원되지 않습니다. 자세한 내용은 버킷팅과 분할 단원을 참조하십시오.
Partitioning
또는 INSERT
INTO
쿼리와 함께 구문 분석을 사용할 때 이 단원의 점을 고려하십시오.CREATE TABLE AS SELECT
Limits
이 INSERT INTO
문은 대상 테이블에 최대 100개의 파티션 쓰기를 지원합니다. 100개 이상의 파티션이 있는 테이블에서 SELECT
절을 실행하면 SELECT
쿼리가 100개 이하의 파티션으로 제한되지 않는 한 쿼리가 실패합니다.
이 제한을 해결하는 방법에 대한 자세한 내용은 CTAS 및 INSERT INTO를 사용하여 100개 이상의 파티션이 있는 테이블 생성 단원을 참조하십시오.
열 순서
또는 INSERT INTO
문에서는 분할된 열이 CREATE TABLE AS SELECT
문에서 프로젝션된 열 목록의 마지막 열이 될 것으로 예상합니다.SELECT
원본 테이블이 분할되지 않았거나 대상 테이블과 다른 열에서 분할된 경우 INSERT INTO
같은 쿼리는 원본 테이블의 마지막 열의 값을 대상 테이블의 파티션 열 값으로 간주합니다. 분할되지 않은 테이블에서 분할된 테이블을 만들려고 할 때
이 점을 염두에 두십시오.
destination_table
SELECT * FROM
source_table
Resources
파티셔닝과 함께 INSERT INTO
를 사용하는 방법에 대한 자세한 내용은 다음 리소스를 참조하십시오.
-
분할된 데이터를 분할된 테이블에 삽입하는 방법은 CTAS 및 INSERT INTO를 사용하여 100개 이상의 파티션이 있는 테이블 생성 단원을 참조하십시오.
-
분할되지 않은 데이터를 분할된 테이블에 삽입하는 방법은 ETL 및 데이터 분석에 CTAS 및 INSERT INTO 사용 단원을 참조하십시오.
Amazon S3에 작성되는 파일
Athena은(는) Amazon S3의 원본 데이터 위치에 파일을 INSERT
명령의 결과로서 작성합니다. 각 INSERT
작업은 기존 파일에 추가하는 게 아니라 새 파일을 생성합니다. 파일 위치는 테이블의 구조와 SELECT
쿼리가 있는 경우 그에 따라 달라집니다. Athena은(는) 각 INSERT
쿼리에 대한 데이터 매니페스트 파일을 생성합니다. 매니페스트는 쿼리가 작성한 파일을 추적합니다. Amazon S3의 Athena 쿼리 결과에 저장됩니다.
자세한 내용은 쿼리 출력 파일 식별 단원을 참조하십시오.
분리된 파일 찾기
CTAS
또는 INSERT INTO
문이 실패하는 경우 분리된 데이터가 데이터 위치에 남아있을 가능성이 있습니다. Athena는 버킷에서 데이터(부분 데이터 포함)를 삭제하지 않으므로
후속 쿼리에서 이러한 부분 데이터를 읽을 수도 있습니다. 검사 또는 삭제할 분리된 파일을 찾으려면 Athena에서 제공하는 데이터 매니페스트 파일을
사용하여 작성할 파일 목록을 추적할 수 있습니다. 자세한 내용은 쿼리 출력 파일 식별 및 DataManifestLocation 단원을 참조하십시오.
INSERT INTO...SELECT
한 테이블 source_table
에서 실행할 쿼리를 지정합니다. 그러면 두 번째 테이블 destination_table
에 삽입할 행이 결정됩니다. 쿼리가 SELECT
의 열을 지정하는 경우 해당 열은 source_table
의 열과 정확하게 일치해야 합니다.destination_table
SELECT
쿼리에 대한 자세한 내용은 SELECT 단원을 참조하십시오.
Synopsis
INSERT INTO destination_table
SELECT select_query
FROM source_table_or_view
Examples
vancouver_pageviews
테이블의 모든 행을 선택한 다음 canada_pageviews
테이블에 삽입합니다.
INSERT INTO canada_pageviews SELECT * FROM vancouver_pageviews;
2019-07-01
에서 2019-07-31
사이의 값이 포함된 date
열이 있는 vancouver_pageviews
테이블의 행을 선택한 다음 canada_july_pageviews
에 삽입합니다.
INSERT INTO canada_july_pageviews SELECT * FROM vancouver_pageviews WHERE date BETWEEN date '2019-07-01' AND '2019-07-31';
country
열에 usa
의 값이 포함된 행에서 cities_world
테이블의 city
및 state
열의 값을 선택한 다음 cities_usa
테이블의 city
및 state
열에 삽입합니다.
INSERT INTO cities_usa (city,state) SELECT city,state FROM cities_world WHERE country='usa'
INSERT INTO...VALUES
열 및 값을 지정하여 기존 테이블에 행을 삽입합니다. 지정된 열 및 관련 데이터 형식은 대상 테이블의 열 및 데이터 형식과 정확하게 일치해야 합니다.
Athena이(가) 각 INSERT
작업에 대해 파일을 생성하기 때문에 VALUES
을(를) 사용하여 행을 삽입하는 건 권장하지 않습니다. 이로 인해 작은 파일이 많이 생성되어 테이블의 쿼리 성능이 저하될 수 있습니다. INSERT
쿼리가 생성하는 파일을 식별하려면 데이터 매니페스트 파일을 검사합니다. 자세한 내용은 쿼리 결과, 출력 파일 및 쿼리 기록 작업 단원을 참조하십시오.
Synopsis
INSERT INTO destination_table [(col1,col2,...)]
VALUES (col1value,col2value,...)[,
(col1value,col2value,...)][,
...]
Examples
다음 예에서 도시 테이블에는 세 개의 열이 있습니다. id
, city
, state
, state_motto
. 열은 id
형식이고 기타 모든 열은 INT
형식입니다.VARCHAR
cities
테이블에 단일 행 하나를 삽입하고 모든 열 값을 지정합니다.
INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')
cities
테이블에 행 두 개를 삽입합니다.
INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'), (3,'Boise','ID','Esto perpetua')