InterSystems IRIS를 사용한 AWS S3 공동 SQL 쿼리

9242 단어
IRIS External Table는 로컬 파일 시스템에 저장된 파일과 클라우드 개체(예: AWS S3)를 SQL 테이블로 사용할 수 있는 다중 시스템 커뮤니티 소스 오픈 프로젝트입니다.

Githubhttps://github.com/intersystems-community/IRIS-ExternalTable 개방형 Exchangehttps://openexchange.intersystems.com/package/IRIS-External-Table에서 찾을 수 있으며 InterSystems Package Manager ZPM에 포함되어 있습니다.
GitHub에서 외부 테이블을 설치하려면 다음을 사용하십시오.
git clone https://github.com/antonum/IRIS-ExternalTable.git
iris session iris
USER>set sc = ##class(%SYSTEM.OBJ).LoadDir("<path-to>/IRIS-ExternalTable/src", "ck",,1)
ZPM 패키지 관리자를 사용하여 설치하려면 다음을 사용합니다.
USER>zpm "install external-table"

로컬 파일 사용


다음과 같이 간단한 파일을 만듭니다.
a1,b1
a2,b2
가장 좋아하는 편집기를 열고 파일을 만들거나 linux/mac에서 명령줄을 사용합니다.
echo $'a1,b1\na2,b2' > /tmp/test.txt
IRIS SQL에서 이 파일을 나타내는 테이블을 만듭니다.
create table test (col1 char(10),col2 char(10))
테이블을 외부 저장소로 변환하려면 다음과 같이 하십시오.
CALL EXT.ConvertToExternal(
    'test',
    '{
        "adapter":"EXT.LocalFile",
        "location":"/tmp/test.txt",
        "delimiter": ","
    }')
마지막으로 질의 테이블:
select * from test
만약 모든 것이 예상대로 진행된다면, 당신은 다음과 같은 출력을 보아야 합니다.
col1    col2
a1  b1
a2  b2
이제 편집기로 돌아가서 파일 내용을 변경하고 SQL 질의를 다시 실행합니다.타다!!!SQL의 로컬 파일에서 새 값을 읽고 있습니다.
col1    col2
a1  b1
a2  b99

S3에서 데이터 읽기


공용 데이터 호수에 저장된 AWS 코로나 데이터에 언제든지 액세스할 수 있습니다.
이 데이터 호수의 데이터 원본을 방문해 봅시다: s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-statesAWS 도구를 설치할 수 있는 경우 다음 단계를 반복합니다.그렇지 않으면 SQL 섹션으로 바로 이동합니다.컴퓨터에 AWS와 관련된 어떤 것도 설치하지 않아도 SQL 부품을 사용할 수 있습니다.
$ aws s3 ls s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/
2020-12-04 17:19:10     510572 us-states.csv

$ aws s3 cp s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv .
download: s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv to ./us-states.csv

$ head us-states.csv 
date,state,fips,cases,deaths
2020-01-21,Washington,53,1,0
2020-01-22,Washington,53,1,0
2020-01-23,Washington,53,1,0
2020-01-24,Illinois,17,1,0
2020-01-24,Washington,53,1,0
2020-01-25,California,06,1,0
2020-01-25,Illinois,17,1,0
2020-01-25,Washington,53,1,0
2020-01-26,Arizona,04,1,0
그래서 우리는 구조가 매우 간단한 서류가 하나 있다.다섯 개의 구분 필드.
이 S3 폴더를 외부 테이블로 공개하려면 먼저 필요한 구조를 가진 일반 테이블을 만들어야 합니다.
-- create external table
create table covid_by_state (
    "date" DATE, 
    "state" VARCHAR(20),
    fips INT,
    cases INT,
    deaths INT
)
일부 필드 이름(예: "Date")은 IRIS SQL에서 예약된 단어이므로 큰 따옴표로 묶어야 합니다.
그런 다음 AWS S3 Bucket 및 CSV 유형에 따라 이 일반 테이블을 외부 테이블로 변환해야 합니다.
 -- convert table to external storage
call EXT.ConvertToExternal(
    'covid_by_state',
    '{
    "adapter":"EXT.AWSS3",
    "location":"s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/",
    "type": "csv",
    "delimiter": ",",
    "skipHeaders": 1
    }' 
)
자세히 보면 EXT.ExternalTable 프로세스 매개 변수는 테이블 이름이고 JSON 문자열은 파일 찾기 위치, 사용할 어댑터, 구분자 등 여러 개의 매개 변수를 포함한다. AWS S3 외에 외부 테이블은 Azure BLOB 저장소, 구글 클라우드 저장소, 로컬 파일 시스템을 지원한다.GitHub Repo에는 모든 서식이 지원하는 구문과 옵션에 대한 참조가 포함되어 있습니다.
마지막으로 질의 테이블:
-- query the table
select top 10 * from covid_by_state order by "date" desc

[SQL]USER>>select top 10 * from covid_by_state order by "date" desc
2.  select top 10 * from covid_by_state order by "date" desc

date    state   fips    cases   deaths
2020-12-06  Alabama 01  269877  3889
2020-12-06  Alaska  02  36847   136
2020-12-06  Arizona 04  364276  6950
2020-12-06  Arkansas    05  170924  2660
2020-12-06  California  06  1371940 19937
2020-12-06  Colorado    08  262460  3437
2020-12-06  Connecticut 09  127715  5146
2020-12-06  Delaware    10  39912   793
2020-12-06  District of Columbia    11  23136   697
2020-12-06  Florida 12  1058066 19176
원격 테이블에서 데이터를 조회하는 데는 'IRIS 원생' 이나 전역 기반 테이블이 아닌 시간이 더 걸리지만, 클라우드에 완전히 저장되고 업데이트되며, 백엔드의 IRIS로 끌려가는 것은 이해할 수 있다.
외부 테이블의 더 많은 기능을 탐색해 봅시다.

% 경로 및 테이블, 여러 파일 기반


우리의 예시에서 버킷의 폴더는 파일 하나만 포함합니다.일반적인 경우, filename은 우리가 검색에 사용하고자 하는 다른 속성의timestamp이나 deviceid를 표시합니다.
% 경로 필드는 모든 외부 테이블에 자동으로 추가되며, 검색된 줄의 파일의 전체 경로를 포함합니다.
select top 5 %PATH,* from covid_by_state

%PATH   date    state   fips    cases   deaths
s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv    2020-01-21  Washington  53  1   0
s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv    2020-01-22  Washington  53  1   0
s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv    2020-01-23  Washington  53  1   0
s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv    2020-01-24  Illinois    17  1   0
s3://covid19-lake/rearc-covid-19-nyt-data-in-usa/csv/us-states/us-states.csv    2020-01-24  Washington  53  1   0
SQL 쿼리에서 이%PATH 필드를 다른 필드로 사용할 수 있습니다.

ETL 데이터를 일반 테이블로


S3에서 IRIS 테이블로 데이터를 로드하는 작업을 수행하는 경우 외부 테이블을 ETL 도구로 사용할 수 있습니다.하기만 하면
INSERT INTO internal_table SELECT * FROM external_table
예를 들어 S3에서 이 지표로 코로나 데이터를 복제하려면 다음과 같이 하십시오.
--create local table
create table covid_by_state_local (
    "date" DATE, 
    "state" VARCHAR(100),
    fips INT,
    cases INT,
    deaths INT
)
--ETL from External to Local table
INSERT INTO covid_by_state_local SELECT TO_DATE("date",'YYYY-MM-DD'),state,fips,cases,deaths FROM covid_by_state

IRIS 연결 – 네이티브 및 외부 테이블.공동 조회


외부 테이블은 SQL 테이블입니다.그것은 하위 선택과 연합에 사용되는 다른 테이블과 연결할 수 있다.동일한 SQL 질의에서 일반 IRIS 테이블과 다른 소스에서 두 개 이상의 외부 테이블을 결합할 수도 있습니다.
워싱턴 워싱턴 - 워싱턴 등 주 코드와 일치하는 일반적인 표를 만들어 보십시오.S3 기반 테이블과 연결합니다.
create table state_codes (name varchar(100), code char(2))
insert into state_codes values ('Washington','WA')
insert into state_codes values ('Illinois','IL')

select top 10 "date", state, code, cases from covid_by_state join state_codes on state=name
[연결]을 [왼쪽 연결]으로 변경하여 상태 코드가 정의되지 않은 행을 포함합니다.보시다시피 결과는 S3 데이터와 원본 IRIS 테이블의 조합입니다.

안전한 데이터 액세스


AWS 코로나 데이터 레이크는 공개됐다.누구든지 신분 검증이나 권한 수여 없이 데이터를 읽을 수 있다.현실 생활에서, 당신은 안전한 방식으로 당신의 데이터를 방문하여, 낯선 사람이 당신의 파일을 훔쳐보지 않도록 하기를 희망한다.AWS ID 및 액세스 관리(IAM)의 모든 세부 사항은 이 문서에서 다루지 않습니다.그러나 최소한 AWS 계정이 키와 비밀번호에 접근해야 계정의 개인 데이터에 접근할 수 있다는 것을 알아야 한다.
AWS는 계정 키/비밀 인증을 사용하여 요청에 서명합니다.https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys
EC2 인스턴스에서 IRIS 외부 테이블을 실행하는 경우 EC2 인스턴스 역할https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html을 사용하여 인증을 처리하는 것이 좋습니다. IRIS 외부 테이블은 해당 역할에 대한 권한을 사용할 수 있습니다.추가 설정이 필요 없습니다.
로컬/비 EC2 인스턴스에서는 환경 변수를 지정하거나 AWS CLI 클라이언트를 설치 및 구성하여 AWS ACCESS KEY ID와 AWS SECRET ACCESS KEY를 지정해야 합니다.
export AWS_ACCESS_KEY_ID=AKIAEXAMPLEKEY
export AWS_SECRET_ACCESS_KEY=111222333abcdefghigklmnopqrst
IRIS 프로세스에서 환경 변수를 볼 수 있는지 확인합니다.다음 명령을 실행하여 확인할 수 있습니다.
USER>write $system.Util.GetEnviron("AWS_ACCESS_KEY_ID")
그것은 키의 값을 출력해야 한다.
또는 여기의 지침https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html에 따라 AWS CLI를 설치하고 실행합니다.
aws configure
그리고 외부 테이블은aws cli 프로필에서 증거를 읽을 수 있습니다.대화식 셸과 IRIS 프로세스가 다른 계정에서 실행될 수 있습니다. IRIS 프로세스와 같은 계정에서 실행되는지 확인하십시오aws configure.

좋은 웹페이지 즐겨찾기