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-byjoin )가 지원되지 않습니다.

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 명령의 일부만 지원됩니다.

기능세부 정보설명예제

산술 연산자

^ * % / + - ( )

 

s3 개체에서 (int(_1)+int(_9)를 선택합니다.

산술 연산자

% modulo

 

cast(_1을 int)%2 == 0에서 s3object에서 count(*)를 선택합니다.

산술 연산자

^ power-of

 

s3 개체에서 캐스트(2^10을 int)를 선택합니다.

Operator 비교

> < >= ⇐ == !=

 

s3오브젝트(int(_1)+int(_3))>int(_5)에서 _1,_2를 선택합니다.

논리 연산자

AND 또는 NOT

 

없는 (int(1)>123 및 int(_5)<200)에서 s3 개체에서 count(*)를 선택합니다.

논리 연산자

null인 경우

표현식에서 null 표시에 대해 true/false를 반환합니다.

 

논리 연산자 및 NULL

null이 아님

표현식에서 null 표시에 대해 true/false를 반환합니다.

 

논리 연산자 및 NULL

알 수 없음

null-handle을 검토하고 NULL을 사용하여 논리 작업 결과를 관찰합니다. 쿼리는 0 을 반환합니다.

null 및 (3>2)에서 s3 개체에서 count(*)를 선택합니다.

NULL이 있는 연산 연산자

알 수 없음

null-handle을 검토하고 NULL을 사용하여 바이너리 작업 결과를 관찰합니다. 쿼리는 0 을 반환합니다.

s3object where (null+1) 및 (3>2)에서 count(*)를 선택합니다.

NULL과 비교

알 수 없음

null-handle을 검토하고 비교 작업의 결과를 NULL과 관찰합니다. 쿼리는 0 을 반환합니다.

(null*1.5) != 3인 s3 개체에서 count(*)를 선택합니다.

누락된 열

알 수 없음

 

_1이 null인 s3 개체에서 count(*)를 선택합니다.

프로젝션 열

If or then or other

케이스 선택

(1+1=(2+1)*3)이 되면 'case_1' 4*3)= l, 'case_2' else 'case_else' end, age*2 from s3object;

논리 연산자

 

coalesce 는 null이 아닌 첫 번째 인수를 반환합니다.

s3오브젝트에서 병합(nullif(5,5), nullif(1,1.0),age+12)를 선택합니다.

논리 연산자

 

NULLIF는 두 인수가 같은 경우 null을 반환하거나 첫 번째 인수인 nullif (1,1)=NULL nullif(null,1)=NULL nullif(2,1)=2를 반환합니다.

s3object에서 nullif(_1을 int로),cast(_2를 int)를 선택합니다.

논리 연산자

 

의 {expression}(.. {expression} ..)

(trim(_5),substring(_1,char_length(_1)-3,last_name)의 s3 개체에서 count(*)를 선택합니다.

논리 연산자

 

{expression}과 {expression} 사이의 {expression}

"x"와 trim(_1)와 하위 문자열(_3,char_length(_3)-1,1) 사이에 있는 stdin에서 하위 문자열(_3,char_length(_3),1) == ":";

논리 연산자

 

{match-pattern}과 같은 {expression}

s3object에서 '%de_'와 같은 first_name을 선택하고, s3object에서 count( )를 선택합니다. 여기서 _1은 "%a[r-s]와 같습니다.

operator

  

s3object에서 cast(123 as int)%2를 선택합니다.

operator

  

s3object에서 cast(123.456을 float)%2를 선택합니다.

operator

  

s3object에서 cast('BC0-9'를 문자열로),cast(substr('ab12cd',3,2)를 int)*4로 선택합니다.

operator

  

s3 오브젝트에서 cast(substring('publish on 2007-01-01',12,10)를 타임스탬프로 선택합니다.

AWS가 아닌 Operator

  

s3object에서 int(_1),int( 1.2 + 3.4)를 선택합니다.

AWS가 아닌 Operator

  

s3object에서 float(1.2)를 선택합니다.

AWS가 아닌 Operator

  

s3 개체에서 timestamp('1999:10-12:23:44')를 선택합니다.

집계 기능

Sun

 

s3object에서 sum(int(_1))을 선택합니다.

집계 기능

avg

 

s3object에서 avg(cast(_1 a float) + cast(_2 as int))를 선택합니다.

집계 기능

min

 

s3object에서 avg(cast(_1 a float) + cast(_2 as int))를 선택합니다.

집계 기능

최대

 

s3오브젝트에서 max(_1),min(int(_5))을 선택합니다.

집계 기능

count

 

s3오브젝트(int(1)+int(_3))>int(_5)에서 count(*)를 선택합니다.

타임스탬프 함수

extract

 

extract('year',timestamp(_2)) >ECDHE에서 count(*)를 선택하고 extract('year',timestamp(_1)) <ECDHE;

타임스탬프 함수

DateAdd

 

datediff('year',timestamp(_1),dateadd('day',366,timestamp(_1))) == 1인 s3object에서 count(0)를 선택합니다.

타임스탬프 함수

DateDiff

 

datediff('month',timestamp(_1),timestamp(_2))) == 2인 s3object에서 count(0)를 선택합니다.

타임스탬프 함수

UtcECDHE

 

datediff('hours',utcnow(),dateadd('day',1,utcnow())) == 24인 s3object에서 count(0)를 선택합니다.

문자열 함수

하위 문자열

 

int(substring(_1,1,4))>1950 및 int(substring(_1,1,4))<1960인 s3 개체에서 count(0)를 선택합니다.

문자열 함수

Trim

 

s3object에서 trim(' foobar')를 선택합니다.

문자열 함수

Trim

 

s3object에서 trim( foobar')를 선택합니다.

문자열 함수

Trim

 

s3object에서 trim( foobar ')를 선택합니다.

문자열 함수

Trim

 

s3objects에서 trim(1112211foobar22211122')를 선택합니다.

문자열 함수

낮음 또는 상

 

s3objects에서 trim(1112211foobar22211122')를 선택합니다.

문자열 함수

char_length, character_length

 

Restic_length(_3)=3인 경우 s3object에서 count(*)를 선택합니다.

복잡한 쿼리

  

s3object에서 sum(cast(_1을 int)), max(cast(_3 as int)), 하위 문자열('abcdefghijklm', (2-1)*3+sum(cast(_1을 int))/sum(cast(_1 as int))+1, (count() + count(0)/count(0)를 선택합니다.

별칭 지원

  

a1, int(_2)를 a2 , (a1+a2)로 s3 개체에서 a3>100 및 a3<300으로 선택합니다.

추가 리소스

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 에 대한 비교도 마찬가지입니다.

표 3.4. NULL 사용 사례
A가 null입니다.결과(NULL=UNKNOWN)

A가 아님

NULL

A 또는 False

NULL

a 또는 True

True

A 또는 A

NULL

A 및 False

False

A 및 True

NULL

A 및 A

NULL

추가 리소스

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 구문 분석 규칙의 예입니다.

표 3.5. CSV 구문 분석
기능설명입력 (Tokens)

NULL

연속 필드 구분 기호

,,1,,2, =⇒ {null}{null}{1}{null}{2}{null}

QUOTE

인용 문자는 필드 구분자를 덮어씁니다.

11,22 "a,b,c,d",last ={11\}{22}{"a,b,c,d"}{last}

이스케이프

이스케이프 문자는 메타 문자를 덮어씁니다.

오브젝트 소유자의 IDDisplayName에 대한 컨테이너

행 구분 기호

닫기 인용이 없습니다. 행 구분 기호는 닫는 선입니다.

11,22,a=”str,44,55,66 =⇒ {11}{22}{a=”str,44,55,66}

CSV 헤더 정보

FileHeaderInfo tag

USE 값은 첫 번째 줄의 각 토큰이 열 이름임을 의미합니다. IGNORE 값은 첫 번째 줄을 건너뛰는 것을 의미합니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.