Spanner Omni 빠른 시작

이 빠른 시작에서는 단일 서버 컨테이너를 실행하여 Spanner Omni를 시작하고 일부 기능을 살펴보는 방법을 설명합니다.

단일 서버 컨테이너 실행

Spanner Omni 컨테이너를 설정하고 실행하려면 다음 단계를 따르세요.

  1. Spanner Omni 데이터를 저장할 Docker 볼륨을 만듭니다. 볼륨을 사용하면 컨테이너가 실수로 삭제되더라도 데이터 손실을 방지할 수 있습니다.

    docker volume create spanner
    
  2. Spanner Omni 서버를 시작합니다.

    docker run -d --network host --name spanneromni -v "spanner:/spanner" us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta start-single-server
    

    --network host 플래그는 호스트 머신에서 Spanner Omni의 포트를 엽니다. 다음 표에서는 Spanner Omni에서 사용하는 포트를 설명합니다.

    포트 범위 목적
    15000~15025 Spanner Omni 서버
    15026 Spanner Omni 콘솔 서버
  3. 컨테이너가 실행 중인지 확인합니다.

    docker ps
    
  4. 샘플 데이터베이스를 만듭니다.

    Spanner Omni에는 샘플 데이터베이스를 만들고 데이터로 채우는 명령어가 포함되어 있습니다. 다음 명령어는 retail-sample이라는 샘플 데이터베이스를 만듭니다.

    docker exec -it spanneromni /google/spanner/bin/spanner databases create-sample-db retail --database-name=retail-sample
    
  5. 데이터베이스가 생성되었는지 확인합니다.

    docker exec -it spanneromni /google/spanner/bin/spanner databases list
    

    출력은 retail-sample이라는 데이터베이스가 생성되었음을 보여줍니다.

  6. 데이터베이스의 스키마를 확인합니다.

    docker exec -it spanneromni /google/spanner/bin/spanner databases ddl describe retail-sample
    

    출력은 모든 테이블, 관계, 검색 색인, 벡터 색인, 그래프의 DDL을 보여줍니다. 이 멀티 모델 스키마는 탐색에서 결제에 이르는 고객 여정을 추적하는 전자상거래 환경을 나타냅니다. 전체 텍스트 검색 색인, 벡터 삽입, 속성 그래프 레이어와 같은 고급 기능을 사용합니다.

  7. 데이터베이스에 연결하고 SQL 셸을 엽니다.

    docker exec -it spanneromni /google/spanner/bin/spanner sql --database=retail-sample
    

    spanner-cli> 프롬프트가 표시되어 쿼리를 실행할 수 있습니다.

  8. 데이터베이스 테이블을 살펴봅니다.

    SHOW TABLES;
    

데이터 세트를 탐색하기 위해 쿼리 실행

샘플 데이터베이스에는 제품, 사용자, 주문, 결제에 대한 데이터가 포함되어 있습니다. 다음 쿼리를 사용하여 Spanner Omni의 멀티 모델 기능을 살펴봅니다. 다음은 Spanner Omni의 일부 기능을 보여주는 샘플 쿼리입니다.

이름으로 제품 검색

전체 텍스트 검색을 사용하여 제품을 검색합니다. 이 쿼리는 효율적인 일치를 위해 사전 처리된 토큰이 포함된 Name_Tokens 열에서 SEARCH() 함수를 사용합니다.

다음 예시에서는 phone을 검색하여 스마트폰과 전화기를 찾습니다.

SELECT ProductID, Name, Description, PriceUSD
FROM Products
WHERE SEARCH(Name_Tokens, 'phone')
ORDER BY PriceUSD DESC
LIMIT 10;

설명으로 제품 검색

설명에 언급된 특정 특성 또는 기능을 기반으로 제품을 검색합니다.

다음 예시에서는 모든 제품 카테고리에서 waterproof를 검색합니다.

SELECT ProductID, Name, Description, PriceUSD
FROM Products
WHERE SEARCH(Description_Tokens, 'waterproof')
ORDER BY PriceUSD
LIMIT 10;

벡터 유사성 검색을 사용하여 참조 제품과 의미상 유사한 제품을 찾습니다. 이 기능은 추천 엔진을 빌드하는 데 유용합니다. 이 쿼리는 ProductEmbedding 벡터와 함께 COSINE_DISTANCE()를 사용합니다.

PRODUCT_ID를 추천을 받을 제품의 ID로 바꿉니다.

WITH
 ReferenceProduct AS (
   SELECT ProductEmbedding
   FROM Products
   WHERE ProductID = PRODUCT_ID
 )
SELECT p.ProductID, p.Name, p.Description, p.PriceUSD
FROM Products p, ReferenceProduct rp
WHERE p.ProductID != PRODUCT_ID AND p.ProductEmbedding IS NOT NULL
ORDER BY
 COSINE_DISTANCE(
   rp.ProductEmbedding,
   p.ProductEmbedding)
LIMIT 5;

사용자 구매 내역 검색

제품 세부정보 및 이전 가격을 포함하여 특정 사용자의 전체 구매 내역을 검색합니다.

USER_ID를 대상 사용자의 ID로 바꿉니다.

SELECT o.OrderID, o.OrderDate, p.Name, p.Category, oi.Quantity, oi.PriceAtOrderUSD
FROM Orders o
JOIN OrderItems oi
 ON o.OrderID = oi.OrderID
JOIN Products p
 ON oi.ProductID = p.ProductID
WHERE o.UserID = USER_ID
ORDER BY o.OrderDate DESC;

상태별로 주문 찾기

전체 텍스트 검색을 사용하여 상태별로 주문을 찾습니다. 이렇게 하면 '배송됨' 또는 '배송 중'과 같은 용어를 유연하게 일치시킬 수 있습니다.

SELECT OrderID, UserID, OrderDate, TotalAmountUSD
FROM Orders
WHERE SEARCH(OrderStatus_Tokens, 'shipped')
ORDER BY OrderDate DESC
LIMIT 20;

가치가 높은 주문 식별

비즈니스 분석을 위해 특정 기간 내에 가치가 높은 주문을 식별합니다.

SELECT OrderID, UserID, OrderDate, TotalAmountUSD
FROM Orders
WHERE
 OrderDate BETWEEN 'START_DATE' AND 'END_DATE'
 AND TotalAmountUSD > 500
ORDER BY TotalAmountUSD DESC
LIMIT 10;

카테고리별 판매 실적 분석

제품 카테고리별로 집계된 판매 단위 및 총 수익과 같은 판매 측정항목을 계산합니다.

SELECT
 p.Category,
 COUNT(oi.OrderItemID) AS total_sales,
 SUM(oi.Quantity) AS units_sold,
 SUM(oi.PriceAtOrderUSD * oi.Quantity) AS revenue
FROM Products p
JOIN OrderItems oi
 ON p.ProductID = oi.ProductID
JOIN Orders o
 ON oi.OrderID = o.OrderID
WHERE o.OrderDate BETWEEN 'START_DATE' AND 'END_DATE'
GROUP BY p.Category
ORDER BY revenue DESC;

결제 수단별 결제 검색

전체 텍스트 검색을 사용하여 '신용카드'와 같은 특정 수단을 사용하여 수행된 결제를 찾습니다.

SELECT p.PaymentID, p.OrderID, p.PaymentDate, p.AmountUSD, p.Status
FROM Payments p
WHERE SEARCH(p.PaymentMethod_Tokens, 'credit card')
ORDER BY p.PaymentDate DESC
LIMIT 20;

그래프 쿼리를 사용하여 제품을 구매한 사용자 찾기

그래프 쿼리 구문을 사용하여 관계를 순회하고 특정 제품을 구매한 모든 사용자를 찾습니다.

PRODUCT_ID를 대상 제품 ID로 바꿉니다.

GRAPH ECommerceGraph
  MATCH (p:Products { ProductID: PRODUCT_ID })<-[:OrderItems]-(o:Orders)
  MATCH (u:Users)
  WHERE u.UserID = o.UserID
  RETURN DISTINCT u.UserID, u.Email;

Spanner Omni 콘솔 살펴보기

Spanner Omni에는 모니터링 및 관리를 위한 웹 기반 Spanner Omni 콘솔이 포함되어 있습니다. Spanner Omni 콘솔을 시작하려면 다음 명령어를 실행합니다.

docker exec -it spanneromni /app/bin/spanner-console

Spanner Omni 콘솔에 액세스하려면 브라우저에서 http://localhost:15026으로 이동합니다. Spanner Omni 콘솔은 다음 정보를 제공합니다.

  • 개요: 전반적인 CPU 사용률과 데이터베이스 버전을 표시합니다.

  • 데이터베이스: 배포의 모든 데이터베이스를 나열합니다.

  • 백업: 수행된 백업에 대한 정보를 표시합니다.

  • 시스템 통계: CPU, 메모리, 스토리지 사용률과 같은 상태 측정항목뿐만 아니라 지연 시간 및 처리량과 같은 성능 측정항목을 표시합니다.

  • 쿼리 통계: CPU 리소스를 사용하는 상위 쿼리를 표시합니다.

자세한 내용은 Spanner Omni 콘솔 사용을 참조하세요.

다음 단계