검색

3.6. S3 선택 작업 (기술 프리뷰)

download PDF

개발자는 Spark-SQL과 같은 고급 분석 애플리케이션에 S3 select API를 사용하여 대기 시간과 처리량을 향상시킬 수 있습니다. 예를 들어 여러 기가바이트의 데이터가 있는 CSV S3 개체는 다음 쿼리를 사용하여 다른 열에 의해 필터링된 단일 열을 추출할 수 있습니다.

예제

select customerid from s3Object where age>30 and age<65;

현재 S3 오브젝트는 데이터를 필터링 및 추출하기 전에 Ceph OSD에서 Ceph Object Gateway를 통해 데이터를 검색해야 합니다. 개체가 클 때 성능이 향상되고 쿼리가 더 구체적입니다.

3.6.1. 사전 요구 사항

  • 실행 중인 Red Hat Ceph Storage 클러스터.
  • RESTful 클라이언트.
  • 사용자 액세스 권한으로 생성된 S3 사용자.

3.6.2. S3 오브젝트에서 콘텐츠 선택

선택한 오브젝트 콘텐츠 API는 구조화된 쿼리 언어(SQL)를 통해 오브젝트 콘텐츠를 필터링합니다. 요청에서는 지정된 콘텐츠를 검색하려면 data serialization 형식을, 쉼표로 구분된 값(CSV)으로 지정해야 합니다. Amazon Web Services(AWS) CLI(명령줄 인터페이스) Select object content uses the CSV format to parse object data into records and returns only the records specified in the query.

참고

응답에 대한 데이터 직렬화 형식을 지정해야 합니다. 이 작업에 대한 s3:GetObject 권한이 있어야 합니다.

구문

POST /BUCKET/KEY?select&select-type=2 HTTP/1.1\r\n

예제

POST /testbucket/sample1csv?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 형식으로 반환됩니다.Data is returned in XML format by the service:

페이로드
설명
페이로드 매개변수에 대한 루트 수준 태그입니다.
유형
문자열
필수 항목
있음
레코드
설명
records 이벤트입니다.
유형
base64로 인코딩된 바이너리 데이터 오브젝트
필수 항목
없음
통계
설명
통계 이벤트입니다.
유형
long
필수 항목
없음

Ceph Object Gateway에서는 다음 응답을 지원합니다.

예제

{:event-type,records} {:content-type,application/octet-stream} :message-type,event}

구문

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 stdin where int(_1)<10;" output.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 stdin where int(_1)<10;" output.csv

지원되는 기능

현재 AWS s3 select 명령의 일부만 지원됩니다.

기능세부 정보설명예제

산술 연산자

^ * % / + - ( )

 

stdin에서 (int(_1)+int(_9)를 선택합니다.

산술 연산자

% modulo

 

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

산술 연산자

power-of

 

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

Operator 비교

> < >= ⇐ == !=

 

stdin에서 (int(_1)+int(_3))>int(_5)를 선택합니다.

논리 연산자

및 없음

 

그렇지 않은 stdin (int(1)>123 및 int(_5)<200)에서 count(*)을 선택합니다.

논리 연산자

null

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

 

논리 연산자 및 null

null이 아님

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

 

논리 연산자 및 null

알 수 없는 상태

null을 검토하고 NULL을 사용한 논리적 작업의 결과를 관찰합니다. 쿼리가 0 을 반환합니다.

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

NULL이 있는 산술 연산자

알 수 없는 상태

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

stdin에서 (null+1) 및 (3>2)을 선택합니다.

NULL과 비교

알 수 없는 상태

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

stdin에서 (null*1.5) != 3을 선택합니다.

누락된 열

알 수 없는 상태

 

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

프로젝션 열

if 또는 그 후와 동일합니다.

케이스 선택

(1+1==(2+1)*3인 경우, 경우 'case_1' 4*3)=ECDHE' other 'case_2' else 'case_else' end, age*2 from stdin;

논리 연산자

 

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

stdin에서 병합(nullif(5,5), nullif(1,1.0),age+12)를 선택합니다.

논리 연산자

 

두 인수가 모두 동일한 경우 nullif (1,1)=NULL nullif(null,1)=NULL nullif(2,1)=2의 경우 NULL을 반환합니다.

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

논리 연산자

 

{expression} in (.. {expression} ..)

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

논리 연산자

 

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

stdin에서 "x"와 trim(_1)과 substring(_3,char_length(_3)-1,1) 사이에서 부분 문자열(_3,char_length(_3),1)을 == ":";

논리 연산자

 

{expression} like {match-pattern}

stdin에서 '%de_'와 같은 stdin을 선택하고, stdin에서 "%a[r-s]와 같은 _을 선택합니다.

캐스팅 연산자

  

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

캐스팅 연산자

  

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

캐스팅 연산자

  

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

캐스팅 연산자

  

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

AWS가 아닌 Operator

  

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

AWS가 아닌 Operator

  

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

AWS가 아닌 Operator

  

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

집계 함수

일요일

 

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

집계 함수

avg

 

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

집계 함수

 

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

집계 함수

max

 

stdin에서 max(_1)),min(int(_5))을 선택합니다.

집계 함수

count

 

stdin에서 (int(1)+int(_3))>int(_5)를 선택합니다.

타임 스탬프 함수

extract

 

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

타임 스탬프 함수

DateAdd

 

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

타임 스탬프 함수

DateDiff

 

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

타임 스탬프 함수

utcnow

 

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

문자열 기능

substring

 

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

문자열 기능

trim

 

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

문자열 기능

trim

 

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

문자열 기능

trim

 

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

문자열 기능

trim

 

stdin에서 trim(1212211foobar22211122')를 선택합니다.

문자열 기능

낮음 또는 상한

 

stdin에서 trim(1212211foobar22211122')를 선택합니다.

문자열 기능

char_length, character_length

 

Restic_length(_3)=3이 있는 stdin에서 count(*)를 선택합니다.

복잡한 쿼리

  

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

별칭 지원

  

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

추가 리소스

3.6.3. S3 지원 일부 기능

S3 select는 다음과 같은 기능을 지원합니다: .Timestamp

timestamp(string)
설명
문자열을 기본 유형의 타임스탬프로 변환합니다.
지원됨
현재 다음과 같이 변환합니다: yyyy:mm:dd hh:mi:dd
extract(date-part,timestamp)
설명
입력 타임스탬프에서 날짜 부분 추출에 따른 정수를 반환합니다.
지원됨
날짜 부분: year,month,week,day.
dateadd(date-part ,integer,timestamp)
설명
입력 타임스탬프 및 date-part 결과를 기반으로 한 타임스탬프를 반환합니다.
지원됨
date-part : year,month,day.
datediff(date-part,timestamp,timestamp)
설명
date-part에 따라 두 타임스탬프 사이의 차이로 계산된 정수를 반환합니다.
지원됨
Date-part : year,month,day,hours.
utcnow()
설명
현재 시간의 타임스탬프를 반환합니다.

집계

count()
설명
조건인 경우 조건과 일치하는 행 수에 따라 정수를 반환합니다.
sum(expression)
설명
조건(있는 경우)과 일치하는 각 행에 대한 요약을 반환합니다.
avg(expression)
설명
조건이 있는 경우 조건과 일치하는 각 행에서 평균 표현식을 반환합니다.
max(expression)
설명
조건이 있는 경우 조건과 일치하는 모든 표현식에 대해 최대 결과를 반환합니다.
min(expression)
설명
조건이 있는 경우 조건과 일치하는 모든 표현식에 대해 최소 결과를 반환합니다.

문자열

substring(string,from,to)
설명
에서 및 입력에 따라 입력 문자열에서 추출을 반환합니다.
Char_length
설명
문자열에서 문자 수를 반환합니다.Returns a number of characters in string. characters_length도 동일한 작업을 수행합니다.
Trim
설명
대상 문자열에서 선행 또는 후행 문자를 트리밍하고 기본값은 공백 문자입니다.
upper\lower
설명
문자를 대문자 또는 소문자로 변환합니다.

NULL

NULL 은 산술 연산에 대한 값을 생성할 수 없는 경우 NULL이 누락되거나 알 수 없는 값입니다.The NULL value is missing or unknown that is NULL can not produce a value on any arithmetic operations. 동일한 산술 비교에 적용되며, NULL 에 대한 모든 비교는 알 수 없는 NULL 입니다.

표 3.4. NULL 사용 사례
A는 null입니다.Result(NULL=UNKNOWN)

A 없음

NULL

a 또는 False

NULL

A 또는 True

True

A 또는 A

NULL

A 및 False

False

A 및 True

NULL

A 및 A

NULL

추가 리소스

3.6.4. S3 별칭 프로그래밍 구성

별칭 프로그래밍 구문은 많은 열 또는 복잡한 쿼리가 포함된 개체를 더 잘 프로그래밍할 수 있으므로 s3 선택 언어의 필수 부분입니다.Alias programming construct is an essential part of the s3 select language because it enables better programming with objects that contain many columns or complex queries. 별칭 구문을 사용하여 문을 구문 분석할 때 별칭을 올바른 프로젝션 열 및 쿼리 실행에 대한 참조로 교체하고 다른 식처럼 참조를 평가합니다. alias는 별칭을 두 번 이상 사용하는 경우 캐시의 결과가 사용되므로 동일한 결과가 계산되지 않고 동일한 결과가 반환됩니다. 현재 Red Hat은 열 별칭을 지원합니다.

예제

select int(_1) as a1, int(_2) as a2 , (a1+a2) as a3 from s3object where a3>100 and a3<300;")

3.6.5. S3 CSV 구문 분석 설명

기본값이 있는 입력 serialization을 사용하여 CSV 정의를 정의할 수 있습니다.

  • row-delimiter에 {\n}' 을 사용합니다.
  • 따옴표로 {"} 를 사용합니다.
  • 이스케이프 문자에는 {\} 를 사용합니다.

csv-header-info 가 구문 분석되고, 이는 스키마를 포함하는 입력 오브젝트의 첫 번째 행입니다. 현재 output serialization 및 compression-type은 지원되지 않습니다. S3 선택 엔진에는 S3-objects를 구문 분석하는 CSV 구문 분석기가 있습니다.

  • 각 행은 row-delimiter로 끝납니다.
  • 필드 분리기는 인접한 열을 구분합니다.The field-separator separates the adjacent columns.
  • 연속 필드 구분자는 NULL 열을 정의합니다.
  • quote-character는 filed 구분자인 field-separator를 덮어씁니다.
  • 이스케이프 문자는 행 구분자를 제외한 특수 문자를 비활성화합니다.

다음은 CSV 구문 분석 규칙의 예입니다.

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

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 = EgressIP {11}{22}{a="str,44,55,66}

CSV 헤더 정보

FileHeaderInfo tag

USE 값은 첫 번째 줄의 각 토큰이 column-name, IGNORE 값은 첫 번째 줄을 건너뛰는 것을 의미합니다.

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.