InterSystems IRIS를 사용한 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-states
AWS 도구를 설치할 수 있는 경우 다음 단계를 반복합니다.그렇지 않으면 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
.
Reference
이 문제에 관하여(InterSystems IRIS를 사용한 AWS S3 공동 SQL 쿼리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/intersystems/federated-sql-queries-to-aws-s3-with-intersystems-iris-3hoo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)