Atlas SQL 문을 사용한 쿼리
이 페이지에서는 Atlas SQL 쿼리의 예시를 제공합니다. SQL 구문을 사용하여 collection을 쿼리하는 기본 예제와 FLATTEN
및 UNWIND
를 사용하여 중첩 데이터로 작업하는 고급 예제를 찾을 수 있습니다.
쿼리 예시
고급 구성 샘플 연합 데이터베이스 인스턴스 에 대해 다음 Atlas SQL 쿼리를 실행 하거나 자체 데이터를 읽도록 수정하세요.
참고
이 예제에서는 짧은 형식의 구문을 사용합니다.
SELECT 문
SELECT * FROM sessions;
Atlas SQL이 Sessions
컬렉션의 모든 문서를 반환합니다.
LIMIT 문
SELECT * FROM users LIMIT 2;
Atlas SQL이 Users
컬렉션에서 두 개의 문서를 반환합니다.
WHERE 문
SELECT * FROM users WHERE name = 'Jon Snow';
Atlas SQL은 사용자의 name
이 Jon Snow
인 Users
컬렉션에서 문서를 반환합니다.
with 키워드
WITH
키워드를 사용하면 나중에 사용할 수 있도록 파생 데이터 소스를 더 쉽게 만들 수 있습니다.
WITH RecentSales AS ( SELECT customer_id, SUM(amount) AS total_sales FROM sales WHERE sale_date > '2025-01-01' GROUP BY customer_id ) SELECT customer_id, total_sales FROM RecentSales WHERE total_sales > 1000;
Atlas SQL 2025 1월 1 이후에 총 매출이 1000 보다 큰 customer_id
가 있는 Sales
컬렉션 의 문서를 반환합니다.
FLATTEN 및 UNWIND
이 섹션에서는 문서 구조와 더 쉽게 상호 작용할 수 있는 두 가지 Atlas SQL 기능에 대해 설명합니다. 이는 고유한 Atlas SQL 기능입니다.
FLATTEN
FLATTEN
반구조화된 데이터(JSON의 이름-값 쌍)를 별도의 열로 평탄화합니다. 필드 이름은 해당 필드의 모든 값을 행에 담는 열 이름이 됩니다.
중첩된 문서를 평면화하는 구문은 FROM
절에서 데이터 원본 및 옵션과 함께 사용할 수 있는 FLATTEN
함수입니다.
SELECT * FROM FLATTEN(<data source> WITH DEPTH => <integer>, SEPARATOR => <string> )
변수 | 필요성 | 설명 |
---|---|---|
<data source> | 필수 사항 | 평면화할 데이터 소스입니다. |
| 옵션 | 평활화할 하위 문서의 레벨 수를 나타내는 양의 정수입니다. 기본적으로 모든 수준의 하위 문서를 평면화합니다. |
| 옵션 | 필드 이름을 연결할 때 구분 기호로 사용할 string입니다. 기본값은 |
평면화 예시
예시 시나리오에서 customerInfo
컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 } }
SELECT * FROM customerInfo
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } |
SELECT * FROM FLATTEN(customerInfo)
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| 50 |
| "customer@email.com" |
| 5 |
FLATTEN
을 사용하면 원본 문서의 각 평면화된 필드가 결과 집합의 최상위 필드가 됩니다. 중첩 필드는 상위 필드 이름과 연결되며 기본 구분 기호인 _
로 구분됩니다.
Unwind
UNWIND
입력 데이터 소스에서 배열 필드를 분해하여 해당 배열의 각 항목에 대해 하나의 행을 출력합니다. 언와인드에 대해 자세히 알아보려면 $unwind 애그리게이션 단계 문서를 참조하세요.
배열 필드를 푸는 구문은 FROM
절에서 데이터 소스 및 옵션과 함께 사용할 수 있는 UNWIND
함수입니다.
SELECT * FROM UNWIND(<data source> WITH PATH | PATHS => <array_paths>, INDEX => <identifier>, OUTER => <bool> )
변수 | 필요성 | 설명 |
---|---|---|
<data source> | 필수 사항 | 풀려는 배열 필드의 소스입니다. |
| 필수 사항 | 해제할 데이터 소스 의 필드 경로입니다. 괄호를 사용하여 여러 경로를 지정합니다. |
| 옵션 | 이름을 입력하여 인덱스 열을 할당합니다. 생략하면 Atlas SQL에서 인덱스 필드를 만들지 않습니다. |
| 옵션 | null, 누락 또는 빈 배열 값이 있는 문서의 보존 여부를 나타내는 플래그입니다. |
Unwind 예시: 최상위 필드
예시 시나리오에서 customerInfo
컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 }, visits: [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022 score: 7 } ] }
SELECT * FROM customerInfo
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } |
| [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ] |
SELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx)
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 | 1 | 1 |
| "New York" | "New York" | "New York" |
| { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } | { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } | { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } |
| 0 | 1 | 2 |
| { year: 2020, score: 10 } | { year: 2021, score: 8 } | { year: 2022, score: 7 } |
UNWIND
를 PATH => visits
와 함께 사용하면 각 visits
객체가 테이블 행이 됩니다.
풀기 예제: 중첩 배열과 형제 배열
예시 시나리오에서 customerInfo
컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.
{ "id": 1, "location": "New York", "customer": { "age": 50, "email": "customer@email.com", "satisfaction": 5 }, "visits": [ { "year": 2020, "score": 10 }, { "year": 2021, "score": 8 }, { "year": 2022, "score": 7 } ], "purchases": [ { "transaction": "1A", "transactions": [ { "amount": 100 }, { "amount": 150 } ] }, { "transaction": "2B", "transactions": [ { "amount": 200 } ] } ] }
다음 쿼리 실행 가정해 보겠습니다.
SELECT v.year AS visit_year, v.score AS visit_score, p.transaction AS transaction_id, t.amount AS purchase_amount FROM UNWIND( customerInfo WITH PATHS => ( visits[INDEX => visit_idx], purchases[OUTER => TRUE, INDEX => purchase_idx].transactions[] ), INDEX => idx, OUTER => FALSE )
앞의 쿼리 다음을 수행합니다.
visits
배열 해제하고 인덱스 이름visit_idx
을 할당하여 해제된 배열 내부의 인덱스 위치를 추적 .purchases
배열 해제하고 각purchases
객체 내에서transactions
배열 해제합니다. 또한OUTER => TRUE
를 사용하여transactions
배열 누락되거나 비어 있는 모든 구매를 보존합니다.
Atlas SQL 다음 필드가 있는 문서를 반환합니다.
visit_year | visit_score | transaction_id | purchase_amount |
---|---|---|---|
2020년 | 10 | 1ㅏ | 100 |
2020년 | 10 | 2B | 150 |
2021년 | 8 | 1ㅏ | 100 |
2021년 | 8 | 2B | 150 |
결과에서 각 행에는 단일 visits
항목과 단일 transactions
항목의 데이터가 포함됩니다.
FLATTEN 및 UNwind 결합 예시
다음 예시는 FLATTEN
및 UNWIND
함수를 결합한 것입니다.
예시 시나리오에서 customerInfo
컬렉션에는 다음과 같이 구성된 문서가 포함되어 있습니다.
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 }, visits: [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022 score: 7 } ] }
SELECT * FROM customerInfo
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 |
| "New York" |
| 5 |
| { 연령: 50, 이메일: "customer@email.com", 만족도: 5 } |
| [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022, score: 7 } ] |
Select * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx))
쿼리를 실행하면 Atlas SQL은 다음과 같은 최상위 필드가 있는 문서를 반환합니다.
| 1 | 1 | 1 |
| "New York" | "New York" | "New York" |
| 5 | 5 | 5 |
| 50 | 50 | 50 |
| "customer@email.com" | "customer@email.com" | "customer@email.com" |
| 0 | 1 | 2 |
| 2020년 | 2021년 | 2022 |
| 10 | 8 | 7 |
FLATTEN
함수와 UNWIND
함수를 모두 사용하면 visits
배열 이 풀린 다음 결과 문서 가 평면화됩니다.