Alibaba Cloud MaxCompute (이전에는 ODPS로 알려짐)는 대규모 데이터 웨어하우징을 위한 범용, 완전 관리형, 멀티 테넌시 데이터 처리 플랫폼입니다. MaxCompute는 다양한 데이터 가져오기 솔루션과 분산 컴퓨팅 모델을 지원하여 사용자가 대규모 데이터셋을 효과적으로 쿼리하고, 생산 비용을 절감하며, 데이터 보안을 보장할 수 있도록 합니다.
MaxComputeLoader를 사용하면 MaxCompute SQL 쿼리를 실행하고 결과를 행당 하나의 document로 로드할 수 있습니다.
pip install -qU  pyodps
Collecting pyodps
  Downloading pyodps-0.11.4.post0-cp39-cp39-macosx_10_9_universal2.whl (2.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 1.7 MB/s eta 0:00:0000:0100:010m
Requirement already satisfied: charset-normalizer>=2 in /Users/newboy/anaconda3/envs/langchain/lib/python3.9/site-packages (from pyodps) (3.1.0)
Requirement already satisfied: urllib3<2.0,>=1.26.0 in /Users/newboy/anaconda3/envs/langchain/lib/python3.9/site-packages (from pyodps) (1.26.15)
Requirement already satisfied: idna>=2.5 in /Users/newboy/anaconda3/envs/langchain/lib/python3.9/site-packages (from pyodps) (3.4)
Requirement already satisfied: certifi>=2017.4.17 in /Users/newboy/anaconda3/envs/langchain/lib/python3.9/site-packages (from pyodps) (2023.5.7)
Installing collected packages: pyodps
Successfully installed pyodps-0.11.4.post0

Basic Usage

loader를 인스턴스화하려면 실행할 SQL 쿼리, MaxCompute endpoint 및 project 이름, 그리고 access ID와 secret access key가 필요합니다. access ID와 secret access key는 access_idsecret_access_key parameter를 통해 직접 전달하거나 환경 변수 MAX_COMPUTE_ACCESS_IDMAX_COMPUTE_SECRET_ACCESS_KEY로 설정할 수 있습니다.
from langchain_community.document_loaders import MaxComputeLoader
base_query = """
SELECT *
FROM (
    SELECT 1 AS id, 'content1' AS content, 'meta_info1' AS meta_info
    UNION ALL
    SELECT 2 AS id, 'content2' AS content, 'meta_info2' AS meta_info
    UNION ALL
    SELECT 3 AS id, 'content3' AS content, 'meta_info3' AS meta_info
) mydata;
"""
endpoint = "<ENDPOINT>"
project = "<PROJECT>"
ACCESS_ID = "<ACCESS ID>"
SECRET_ACCESS_KEY = "<SECRET ACCESS KEY>"
loader = MaxComputeLoader.from_params(
    base_query,
    endpoint,
    project,
    access_id=ACCESS_ID,
    secret_access_key=SECRET_ACCESS_KEY,
)
data = loader.load()
print(data)
[Document(page_content='id: 1\ncontent: content1\nmeta_info: meta_info1', metadata={}), Document(page_content='id: 2\ncontent: content2\nmeta_info: meta_info2', metadata={}), Document(page_content='id: 3\ncontent: content3\nmeta_info: meta_info3', metadata={})]
print(data[0].page_content)
id: 1
content: content1
meta_info: meta_info1
print(data[0].metadata)
{}

Content와 Metadata로 사용할 Column 지정하기

page_content_columnsmetadata_columns parameter를 사용하여 어떤 column 하위 집합을 Document의 내용으로 로드할지, 어떤 것을 metadata로 로드할지 구성할 수 있습니다.
loader = MaxComputeLoader.from_params(
    base_query,
    endpoint,
    project,
    page_content_columns=["content"],  # Specify Document page content
    metadata_columns=["id", "meta_info"],  # Specify Document metadata
    access_id=ACCESS_ID,
    secret_access_key=SECRET_ACCESS_KEY,
)
data = loader.load()
print(data[0].page_content)
content: content1
print(data[0].metadata)
{'id': 1, 'meta_info': 'meta_info1'}

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I