3.5. S3 선택 작업 (기술 프리뷰)
S3 선택 작업은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있으며 프로덕션에는 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. 자세한 내용은 Red Hat 기술 프리뷰 기능의 지원 범위를 참조하십시오.
개발자는 S3 select를 실행하여 처리량을 가속화할 수 있습니다. S3에서는 중재자 없이 직접 S3 쿼리를 실행할 수 있습니다.
CSV 및 Parquet 오브젝트로 S3 select 작업을 제공하는 두 개의 S3 select 워크플로우 (CSV 및 Apache Parquet)가 있습니다.
- CSV 파일은 테이블 형식 데이터를 일반 텍스트 형식으로 저장합니다. 파일의 각 행은 데이터 레코드입니다.
- parquet는 데이터 저장 및 검색 효율성을 위해 설계된 오픈 소스 열 지향 데이터 파일 형식입니다. 복잡한 데이터를 대량으로 처리할 수 있는 향상된 성능을 갖춘 데이터 압축 및 인코딩 체계를 제공합니다.
예를 들어, 여러 기가바이트의 데이터가 있는 CSV 또는 Parquet S3 개체를 사용하면 다음 쿼리를 사용하여 다른 열에 의해 필터링되는 단일 열을 추출할 수 있습니다.
예제
select customerid from s3Object where age>30 and age<65;
현재 S3 오브젝트는 데이터를 필터링하고 추출하기 전에 Ceph OSD에서 Ceph Object Gateway를 통해 데이터를 검색해야 합니다. 오브젝트가 크고 쿼리가 더 구체적인 경우 성능이 향상됩니다. Parquet 형식은 CSV보다 더 효율적으로 처리할 수 있습니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- RESTful 클라이언트입니다.
- 사용자 액세스를 사용하여 생성한 S3 사용자.
3.5.1. S3 개체에서 콘텐츠 선택
선택한 오브젝트 콘텐츠 API는 구조화된 쿼리 언어(SQL)를 통해 오브젝트 콘텐츠를 필터링합니다. 인벤토리 오브젝트에 있어야 하는 사항에 대한 설명은 AWS Systems Manager 사용자 가이드 의 인벤토리에서 수집한 메타데이터 섹션을 참조하십시오. 인벤토리 콘텐츠는 해당 인벤토리에 대해 실행해야 하는 쿼리 유형에 영향을 미칩니다. 필수 정보를 제공할 수 있는 SQL 문의 수는 크지만 S3 select는 SQL과 유사한 유틸리티이므로 일부 연산자(예: group-by
및 join
)가 지원되지 않습니다.
CSV의 경우 지정된 콘텐츠를 검색하려면 데이터 직렬화 형식을 오브젝트의 쉼표로 구분된 값으로 지정해야 합니다. parquet에는 바이너리 형식이 있기 때문에 구분 기호가 없습니다. AWS(Amazon Web Services) CLI(명령줄 인터페이스) 선택 오브젝트 콘텐츠는 CSV 또는 Parquet 형식을 사용하여 개체 데이터를 레코드로 구문 분석하고 쿼리에 지정된 레코드만 반환합니다.
응답에 대한 데이터 직렬화 형식을 지정해야 합니다. 이 작업에 대한 s3:GetObject
권한이 있어야 합니다.
-
InputSerialization
요소는 쿼리되는 개체의 데이터 형식을 설명합니다. 오브젝트는 CSV 또는 Parquet 형식으로 되어 있습니다. -
OutputSerialization
요소는 AWS-CLI 사용자 클라이언트의 일부이며 출력 데이터의 포맷 방법을 설명합니다. Ceph는 AWS-CLI용 서버 클라이언트를 구현했으므로 현재 CSV인OutputSerialization
과 동일한 출력을 제공합니다. -
InputSerialization
의 형식은OutputSerialization
의 형식과 일치할 필요가 없습니다. 따라서 예를 들어InputSerialization
및 CSV에서 Parquet를OutputSerialization
에서 지정할 수 있습니다.
구문
POST /BUCKET/KEY?select&select-type=2 HTTP/1.1\r\n
예제
POST /testbucket/sample1csv?select&select-type=2 HTTP/1.1\r\n POST /testbucket/sample1parquet?select&select-type=2 HTTP/1.1\r\n
요청 엔티티
bucket
- 설명
- 오브젝트 콘텐츠를 선택하는 버킷입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
키
- 설명
- 오브젝트 키입니다.
- 길이 제한
- 최소 길이 1입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
SelectObjectContentRequest
- 설명
- 선택한 오브젝트 콘텐츠 요청 매개변수의 루트 수준 태그입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
expression
- 설명
- 오브젝트를 쿼리하는 데 사용되는 표현식입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
ExpressionType
- 설명
- SQL과 같은 제공된 표현식의 유형입니다.
- 유형
- 문자열
- 유효한 값
- SQL
- 필수 항목
- 제공됨
InputSerialization
- 설명
- 쿼리 중인 개체의 데이터 형식에 대해 설명합니다.Describes the format of the data in the object that is being queried.
- 유형
- 문자열
- 필수 항목
- 제공됨
OutputSerialization
- 설명
- 쉼표 구분 기호 및 줄 바꿈으로 반환되는 데이터 형식입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
응답 엔티티
작업이 성공하면 서비스에서 HTTP 200
응답을 반환합니다. 데이터는 서비스에서 XML 형식으로 반환됩니다.
payload
- 설명
- 페이로드 매개변수의 루트 수준 태그입니다.
- 유형
- 문자열
- 필수 항목
- 제공됨
레코드
- 설명
- records 이벤트입니다.
- 유형
- base64로 인코딩된 바이너리 데이터 오브젝트
- 필수 항목
- 없음
통계
- 설명
- 통계 이벤트입니다.
- 유형
- long
- 필수 항목
- 없음
Ceph Object Gateway는 다음 응답을 지원합니다.
예제
{:event-type,records} {:content-type,application/octet-stream} :message-type,event}
구문 (csv의 경우)
aws --endpoint-URL http://localhost:80 s3api select-object-content --bucket BUCKET_NAME --expression-type 'SQL' --input-serialization '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}' --output-serialization '{"CSV": {}}' --key OBJECT_NAME --expression "select count(0) from s3object where int(_1)<10;" output.csv
예(csv의 경우)
aws --endpoint-url http://localhost:80 s3api select-object-content --bucket testbucket --expression-type 'SQL' --input-serialization '{"CSV": {"FieldDelimiter": "," , "QuoteCharacter": "\"" , "RecordDelimiter" : "\n" , "QuoteEscapeCharacter" : "\\" , "FileHeaderInfo": "USE" }, "CompressionType": "NONE"}' --output-serialization '{"CSV": {}}' --key testobject --expression "select count(0) from s3object where int(_1)<10;" output.csv
구문(Parquet의 경우)
aws --endpoint-URL http://localhost:80 s3api select-object-content --bucket BUCKET_NAME --expression-type 'SQL' --input-serialization '{"Parquet": {}, {"CompressionType": "NONE"}' --output-serialization '{"CSV": {}}' --key OBJECT_NAME.parquet --expression "select count(0) from s3object where int(_1)<10;" output.csv
예: (Parquet)
aws --endpoint-url http://localhost:80 s3api select-object-content --bucket testbucket --expression-type 'SQL' --input-serialization '{"Parquet": {}, {"CompressionType": "NONE"}' --output-serialization '{"CSV": {}}' --key testobject.parquet --expression "select count(0) from s3object where int(_1)<10;" output.csv
지원되는 기능
현재 AWS s3 select 명령의 일부만 지원됩니다.
추가 리소스
- 자세한 내용은 Amazon의 S3 Select Object Content API 를 참조하십시오.
3.5.2. S3 지원 선택 기능
S3 select는 다음 기능을 지원합니다. .Timestamp
- timestamp(문자열)
- 설명
- 문자열을 타임스탬프의 기본 유형으로 변환합니다.
- 지원됨
- 현재 변환되어 있습니다. yyyy:mm:dd hh:mi:dd
- extract(date-part,timestamp)
- 설명
- 입력 타임스탬프에서 date-part 추출에 따라 정수를 반환합니다.
- 지원됨
- 날짜 부분: 년, 월, 주,일.
- dateadd(date-part ,integer,timestamp)
- 설명
- 타임 스탬프 및 날짜-부분의 결과에 따라 타임 스탬프를 반환합니다.
- 지원됨
- 날짜: 1년, 월,일.
- datediff(date-part,timestamp,timestamp)
- 설명
- 날짜 파트에 따른 두 타임 스탬프 간의 차이의 계산된 결과인 정수를 반환합니다.
- 지원됨
- 날짜 부분 : 년, 월, 일, 시간.
- utcnow()
- 설명
- 현재 시간의 타임스탬프를 반환합니다.
집계
- count()
- 설명
- 조건이 있는 경우 조건과 일치하는 행 수에 따라 정수를 반환합니다.
- sum(expression)
- 설명
- 조건이 있는 경우 조건과 일치하는 각 행에서 표현식 요약을 반환합니다.
- avg(expression)
- 설명
- 조건이 있는 경우 조건과 일치하는 각 행에서 평균 표현식을 반환합니다.
- 최대(도 표현)
- 설명
- 조건이 있는 경우 조건과 일치하는 모든 표현식에 대한 최대 결과를 반환합니다.
- min(expression)
- 설명
- 조건이 있는 경우 조건과 일치하는 모든 표현식에 대해 최소 결과를 반환합니다.
문자열
- substring(문자열,from,to)
- 설명
- 입력 및 입력을 기반으로 입력 문자열에서 추출한 문자열을 반환합니다.
- Char_length
- 설명
- 문자열에서 문자 수를 반환합니다. Character_length도 동일한 작업을 수행합니다.
- Trim
- 설명
- 대상 문자열에서 선행 또는 후행 문자를 트리밍합니다. 기본값은 빈 문자입니다.
- upper\lower
- 설명
- 문자를 대문자 또는 소문자로 변환합니다.
NULL
값은 누락되거나 알 수 없음이 null인 경우 모든 산술 작업에 값을 생성할 수 없습니다. 이는 산술 비교에도 적용되며, 알 수 없는 NULL
에 대한 비교도 마찬가지입니다.
NULL
A가 null입니다. | 결과(NULL=UNKNOWN) |
---|---|
A가 아님 |
|
A 또는 False |
|
a 또는 True |
|
A 또는 A |
|
A 및 False |
|
A 및 True |
|
A 및 A |
|
추가 리소스
- 자세한 내용은 Amazon의 S3 Select Object Content API 를 참조하십시오.
3.5.3. S3 별칭 프로그래밍 구문
별칭 프로그래밍 구문은 많은 열 또는 복잡한 쿼리를 포함하는 개체를 사용하여 더 잘 프로그래밍할 수 있기 때문에 s3 선택 언어의 필수 부분입니다. 별칭 구문이 포함된 문을 구문 분석하면 별칭을 올바른 프로젝션 열에 대한 참조로 교체하고 쿼리 실행 시 다른 표현식과 같이 참조가 평가됩니다. 별칭은 별칭이 두 번 이상 사용되는 경우 캐시의 결과가 사용되므로 동일한 표현식이 평가되지 않고 동일한 결과가 반환되는 경우 result-cache를 유지 관리합니다. 현재 Red Hat은 열 별칭을 지원합니다.
예제
select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from s3object where a3>100 and a3<300;")
3.5.4. S3 CSV 구문 분석 설명
입력 직렬화가 있는 CSV 정의에서는 이러한 기본값을 사용합니다.
-
row-delimiter에
{\n}'
을 사용합니다. -
따옴표로
{"}
를 사용합니다. -
이스케이프 문자에는
{\}
를 사용합니다.
csv-header-info
는 AWS-CLI에 표시되는 USE
시 구문 분석됩니다. 이는 스키마가 포함된 입력 오브젝트의 첫 번째 행입니다. 현재 출력 직렬화 및 압축 유형은 지원되지 않습니다. S3 선택 엔진에는 S3 개체를 구문 분석하는 CSV 구문 분석기가 있습니다.
- 각 행은 row-delimiter로 끝납니다.
- 필드 구문 분석기는 원하는 열을 구분합니다.
-
연속 필드 구분 기호는
NULL
열을 정의합니다. - quote-character는 field-separator를 덮어씁니다. 즉, 필드 구분자는 따옴표 사이의 임의의 문자입니다.
- 이스케이프 문자는 행 구분 기호를 제외한 모든 특수 문자를 비활성화합니다.
다음은 CSV 구문 분석 규칙의 예입니다.
기능 | 설명 | 입력 (Tokens) |
---|---|---|
| 연속 필드 구분 기호 |
|
| 인용 문자는 필드 구분자를 덮어씁니다. |
|
| 이스케이프 문자는 메타 문자를 덮어씁니다. |
오브젝트 소유자의 |
| 닫기 인용이 없습니다. 행 구분 기호는 닫는 선입니다. |
|
| FileHeaderInfo tag | USE 값은 첫 번째 줄의 각 토큰이 열 이름임을 의미합니다. IGNORE 값은 첫 번째 줄을 건너뛰는 것을 의미합니다. |
추가 리소스
- 자세한 내용은 Amazon의 S3 Select Object Content API 를 참조하십시오.