Select API Quickstart Guide
API 빠른 시작 가이드 선택
Traditional retrieval of objects is always as whole entities, i.e GetObject for a 5 GiB object, will always return 5 GiB of data.
기존의 객체 검색은 항상 전체 엔티티로 수행되었습니다. 즉, 5GiB 객체의 경우 GetObject는 항상 5GiB의 데이터를 반환합니다.
S3 Select API allows us to retrieve a subset of data by using simple SQL expressions.
S3 Select API를 사용하면 간단한 SQL 표현식을 사용하여 데이터의 하위집합을 검색할 수 있습니다.
By using Select API to retrieve only the data needed by the application, drastic performance improvements can be achieved.
Select API를 사용하여 애플리케이션에 필요한 데이터만 검색하면 성능이 크게 향상됩니다.
You can use the Select API to query objects with following features:
Select API를 사용하면 다음 기능으로 객체를 쿼리할 수 있습니다.
CSV, JSON and Parquet - Objects must be in CSV, JSON, or Parquet format.
CSV, JSON 및 Parquet - 객체는 CSV, JSON 또는 Parquet 형식이어야 합니다.
UTF-8 is the only encoding type the Select API supports.
UTF-8은 Select API가 지원하는 유일한 인코딩 유형입니다.
GZIP or BZIP2 - CSV and JSON files can be compressed using GZIP or BZIP2. The Select API supports columnar compression for Parquet using GZIP, Snappy, LZ4. Whole object compression is not supported for Parquet objects.
GZIP 또는 BZIP2-CSV 및 JSON 파일은 GZIP 또는 BZIP2를 사용하여 압축할 수 있습니다. Select API는 GZIP, Snappy, LZ4를 사용하여 Parquet에 대한 열 형식 압축을 지원합니다. Parquet 객체에는 전체 객체 압축이 지원되지 않습니다.
Server-side encryption - The Select API supports querying objects that are protected with server-side encryption.
서버 측 암호화 - Select API는 서버 측 암호화로 보호되는 객체 쿼리를 지원합니다.
Type inference and automatic conversion of values is performed based on the context when the value is un-typed (such as when reading CSV data). If present, the CAST function overrides automatic conversion.
값의 유형이 지정되지 않은 경우 (예: CSV 데이터를 읽을 때) 컨텍스트를 기반으로 유형 추론 및 값의 자동 변환이 수행됩니다. 있는 경우 CAST 함수는 자동 변환을 재정의합니다.
1. Prerequisites
1. 전제조건
Install MinIO Server from here.
여기에서 MinIO 서버를 설치하세요.
Familiarity with AWS S3 API.
AWS S3 API에 대한 지식.
Familiarity with Python and installing dependencies.
Python에 대한 지식 및 종속성 설치.
2. Install boto3
2. boto3 설치
Install aws-sdk-python from AWS SDK for Python official docs here.
여기에서 Python용 AWS SDK 공식 문서의 aws-sdk-python을 설치하세요.
3. Example
3. 예시
As an example, let us take a gzip compressed CSV file. Without S3 Select, we would need to download, decompress and process the entire CSV to get the data you needed.
예를 들어, gzip으로 압축된 CSV 파일을 살펴보겠습니다. S3 Select가 없으면 필요한 데이터를 얻으려면 전체 CSV를 다운로드하고 압축을 풀고 처리해야 합니다.
With Select API, can use a simple SQL expression to return only the data from the CSV you’re interested in, instead of retrieving the entire object.
Select API를 사용하면, 간단한 SQL 표현식을 사용하여 전체 객체를 검색하는 대신 관심 있는 CSV의 데이터만 반환할 수 있습니다.
Following Python example shows how to retrieve the first column Location from an object containing data in CSV format.
다음 Python 예제에서는 CSV 형식의 데이터가 포함된 객체에서 첫 번째 열 Location을 검색하는 방법을 보여줍니다.
Please replace endpoint_url,aws_access_key_id, aws_secret_access_key, Bucket and Key with your local setup in this select.py file.
이 select.py 파일에서 endpoint_url, aws_access_key_id, aws_secret_access_key, Bucket 및 Key를 로컬 설정으로 바꾸십시오.
#!/usr/bin/env/env python3
import boto3
s3 = boto3.client('s3',
endpoint_url='http://localhost:9000',
aws_access_key_id='minio',
aws_secret_access_key='minio123',
region_name='us-east-1')
r = s3.select_object_content(
Bucket='mycsvbucket',
Key='sampledata/TotalPopulation.csv.gz',
ExpressionType='SQL',
Expression="select * from s3object s where s.Location like '%United States%'",
InputSerialization={
'CSV': {
"FileHeaderInfo": "USE",
},
'CompressionType': 'GZIP',
},
OutputSerialization={'CSV': {}},
)
for event in r['Payload']:
if 'Records' in event:
records = event['Records']['Payload'].decode('utf-8')
print(records)
if 'Stats' in event:
statsDetails = event['Stats']['Details']
print("Stats details bytesScanned: ")
print(statsDetails['BytesScanned'])
print("Stats details bytesProcessed: ")
print(statsDetails['BytesProcessed'])
4. Run the Program
4. 프로그램 실행
Upload a sample dataset to MinIO using the following commands.
다음 명령을 사용하여 샘플 데이터세트를 MinIO에 업로드합니다.
$ curl "https://esa.un.org/unpd/wpp/DVD/Files/1_Indicators%20(Standard)/CSV_FILES/WPP2017_TotalPopulationBySex.csv" > TotalPopulation.csv
$ mc mb myminio/mycsvbucket
$ gzip TotalPopulation.csv
$ mc cp TotalPopulation.csv.gz myminio/mycsvbucket/sampledata/
Now let us proceed to run our select example to query for Location which matches United States.
이제 미국과 일치하는 위치를 쿼리하기 위해 선택 예제를 실행해 보겠습니다.
python3 select.py
840,United States of America,2,Medium,1950,1950.5,79233.218,79571.179,158804.395
840,United States of America,2,Medium,1951,1951.5,80178.933,80726.116,160905.035
840,United States of America,2,Medium,1952,1952.5,81305.206,82019.632,163324.851
840,United States of America,2,Medium,1953,1953.5,82565.875,83422.307,165988.190
....
....
....
Stats details bytesScanned:
6758866
Stats details bytesProcessed:
25786743
For a more detailed SELECT SQL reference, please see here
더 자세한 SELECT SQL 참조는 여기를 참조하세요
5. Explore Further
5. 더 자세히 살펴보세요
Use mc with MinIO Server
MinIO 서버와 함께 mc 사용
Use mc sql with MinIO Server
MinIO 서버에서 mc sql 사용
Use minio-go SDK with MinIO Server
MinIO 서버와 함께 minio-go SDK 사용
Use aws-cli with MinIO Server
MinIO 서버와 함께 aws-cli 사용
Use s3cmd with MinIO Server
MinIO 서버와 함께 s3cmd 사용
The MinIO documentation website
MinIO 문서 웹사이트
6. Implementation Status
6. 구현 상태
Full AWS S3 SELECT SQL syntax is supported.
전체 AWS S3 SELECT SQL 구문이 지원됩니다.
All operators are supported.
모든 연산자가 지원됩니다.
All aggregation, conditional, type-conversion and string functions are supported.
모든 집계, 조건부, 유형 변환 및 문자열 함수가 지원됩니다.
JSON path expressions such as FROM S3Object[*].path are not yet evaluated.
FROM S3Object[*]. path와 같은 JSON 경로 표현식은 아직 평가되지 않았습니다.
Large numbers (outside of the signed 64-bit range) are not yet supported.
부호 있는 64비트 범위를 벗어난 큰 숫자는 아직 지원되지 않습니다.
The Date functions DATE_ADD, DATE_DIFF, EXTRACT and UTCNOW along with type conversion using CAST to the TIMESTAMP data type are currently supported.
CAST를 사용하여 TIMESTAMP 데이터 유형으로의 유형 변환과 함께 날짜 함수 DATE_ADD, DATE_DIFF, EXTRACT 및 UTCNOW가 현재 지원됩니다.
AWS S3's reserved keywords list is not yet respected.
AWS S3의 예약 키워드 목록은 아직 준수되지 않습니다.
CSV input fields (even quoted) cannot contain newlines even if RecordDelimiter is something else.
RecordDelimiter가 다른 경우에도 CSV 입력 필드 (따옴표 포함)에는 개행을 포함할 수 없습니다.