Using CoCo CLI with other data platforms

Using CoCo CLI with other data platforms (다른 데이터 플랫폼에서 CoCo CLI 사용)

CoCo CLI는 기능을 외부 데이터 플랫폼으로 확장하는 플러그인을 지원해요. 각 플랫폼 플러그인은 자연어 프롬프트로 사용할 수 있는 도메인별 스킬을 추가해요.

출처: Using CoCo CLI with other data platforms

본문

사전 요구사항

  • CoCo CLI가 설치되고 Snowflake에 인증되어 있어요.

AWS Glue

CoCo는 AWS 측 Iceberg 인프라 준비와 AWS Glue Data Catalog와 함께 Snowflake 카탈로그 통합을 만드는 내장 스킬을 모두 포함해요. 이 스킬들을 종단 간 사용할 수 있어요. S3의 원시 데이터에서 Snowflake의 쿼리 가능한 Iceberg 테이블까지, 또는 데이터가 이미 Glue에 등록되어 있으면 독립적으로 사용할 수 있어요.

참고

이것들은 내장 기능이에요. 활성화할 플러그인이 없어요. 스킬은 모든 CoCo 세션에서 사용할 수 있어요.

AWS Glue에서 데이터 준비

이 스킬을 사용해 Iceberg 파이프라인의 AWS 측을 준비해요: 자격 증명 검증, S3 데이터 발견, Glue 데이터베이스와 크롤러 생성, 스키마 검증, Athena로 parquet 또는 CSV 데이터를 Iceberg 형식으로 변환. 이 워크플로가 끝나면 CoCo가 Snowflake 카탈로그 통합 스킬로 직접 넘겨줄 수 있어요.

기능
기능 설명 예시 프롬프트
AWS 인증 AWS CLI 자격 증명 검증, 호출자 정체성 식별, 접근 가능한 S3 버킷 나열 "Check my AWS credentials and show me my S3 buckets"
S3 데이터 발견 S3의 소스 파일 인벤토리, 형식 식별, Athena 호환을 위한 디렉터리 구조 검증 "What data files are in my S3 bucket and are they structured for Athena?"
Glue 데이터베이스 & 크롤러 설정 Glue 데이터베이스와 IAM 크롤러 역할 생성·재사용, Lake Formation 모드 감지, 크롤러 실행 "Set up a Glue database and crawler for my S3 data"
Lake Formation 승인 LF 모드 감지, 크롤러 역할에 데이터베이스와 S3 위치에 대한 최소 필수 권한 부여 "My Glue crawler is failing with a Lake Formation permission error — help me fix it"
스키마 발견·검증 발견된 테이블 나열, 컬럼 유형 비교, Snowflake 내보낸 parquet의 중복 파티션 컬럼 수정 "Validate the schemas for the tables my crawler discovered"
Parquet-to-Iceberg 변환 Athena CTAS 또는 Glue Spark로 parquet, CSV, JSON 테이블을 Iceberg 형식으로 변환 "Convert my parquet tables to Iceberg using Athena"
Iceberg 테이블 등록 올바른 StorageDescriptor와 메타데이터 위치로 Glue Data Catalog에 기존 Iceberg 테이블 등록 "Register my existing Iceberg tables in Glue"
크롤러 정리 스키마 발견 후 크롤러 삭제해 우발적 재크롤과 지속 비용 방지 "Delete the Glue crawler now that schema discovery is done"
AWS 측 사전 요구사항
  • AWS CLI가 설치되고 구성되어 있어요. 없으면 CoCo가 설치 지침을 제공해요.
  • Glue 데이터베이스, 크롤러, IAM 역할을 만들고 Athena 쿼리를 실행할 충분한 권한이 있는 AWS 프로필. 아래 최소 운영자 정책 참고.
  • 데이터를 Iceberg 형식으로 변환한다면 Athena 엔진 버전 3(Trino 기반) 워크그룹. CoCo가 워크그룹 버전을 확인하고 필요하면 업그레이드를 프롬프트해요.

이 스킬을 실행하는 데 필요한 최소 권한을 다루는 IAM 정책은 다음과 같아요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GlueSetup",
      "Effect": "Allow",
      "Action": [
        "glue:CreateDatabase", "glue:GetDatabase", "glue:GetDatabases",
        "glue:CreateCrawler", "glue:StartCrawler", "glue:GetCrawler",
        "glue:DeleteCrawler",
        "glue:GetTable", "glue:GetTables", "glue:UpdateTable"
      ],
      "Resource": "*"
    },
    {
      "Sid": "IAMRoleCreation",
      "Effect": "Allow",
      "Action": [
        "iam:CreateRole", "iam:AttachRolePolicy", "iam:PutRolePolicy",
        "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::<account-id>:role/<crawler-role-name>"
    },
    {
      "Sid": "S3Access",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets", "s3:GetBucketLocation",
        "s3:ListBucket", "s3:GetObject",
        "s3:PutObject", "s3:DeleteObject", "s3:CreateBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<source-bucket>",
        "arn:aws:s3:::<source-bucket>/*",
        "arn:aws:s3:::<athena-results-bucket>",
        "arn:aws:s3:::<athena-results-bucket>/*"
      ]
    },
    {
      "Sid": "AthenaExecution",
      "Effect": "Allow",
      "Action": [
        "athena:StartQueryExecution", "athena:GetQueryExecution",
        "athena:GetWorkGroup", "athena:ListWorkGroups"
      ],
      "Resource": "*"
    },
    {
      "Sid": "LakeFormation",
      "Effect": "Allow",
      "Action": [
        "lakeformation:GetDataLakeSettings",
        "lakeformation:GrantPermissions",
        "lakeformation:ListResources"
      ],
      "Resource": "*"
    }
  ]
}

이미 크롤러 IAM 역할이 있으면 IAMRoleCreation 블록을 생략해요. 계정에서 Lake Formation이 활성화되지 않았으면 LakeFormation 블록을 생략해요.

시작하기

CoCo 세션을 시작해요. CoCo는 명령을 실행하기 전에 AWS CLI 프로필과 리전을 묻습니다.

데이터가 이미 S3에서 Iceberg 형식이고 Glue에 등록하려면:

Register my Iceberg tables in AWS Glue Data Catalog

데이터가 parquet, CSV, JSON이고 변환이 필요하면:

Set up a Glue database and convert my parquet data to Iceberg using Athena

개별 단계를 실행하려면:

Check my AWS credentials and list my S3 buckets
Create a Glue crawler for s3://my-bucket/data/ and run it
Validate the schemas for the tables my Glue crawler discovered
Convert my Glue external tables to Iceberg using Athena CTAS

AWS 설정이 끝나면 CoCo가 Snowflake 카탈로그 통합으로 계속할지 묻습니다. 예라고 하면 수집된 모든 변수(계정 ID, 리전, Glue 데이터베이스 이름, IAM 역할 ARN, 테이블 이름)를 카탈로그 통합 스킬에 직접 전달해요.

문제 해결

AWS 자격 증명 만료 — 증상: 명령이 ExpiredTokenException 또는 ExpiredToken으로 실패. 해결: aws sso login --profile <profile>을 실행해 세션을 새로고침하거나, aws configure --profile <profile>로 자격 증명을 다시 구성해요.

크롤러의 Lake Formation 권한 오류 — 증상: Glue 크롤러가 Insufficient Lake Formation permission(s): Required Describe on <database>로 실패. 해결: 계정에서 Lake Formation이 활성입니다. 크롤러 IAM 역할에 Glue 데이터베이스에 대한 명시적 LF 승인이 필요해요. My Glue crawler is failing with a Lake Formation permission error 프롬프트를 사용하면 CoCo가 LF가 제한적 모드인지 IAM 호환 모드인지 감지하고 올바른 grant-permissions 명령을 생성해요.

Iceberg 데이터 크롤링 후 테이블이 올바르게 발견되지 않음 — 증상: 크롤러가 실제 Iceberg 테이블 대신 메타데이터 파일(metadata/, *.avro)에 대한 항목을 만들거나, 테이블 이름이 기대와 일치하지 않아요. 해결: 표준 S3 Glue 크롤러는 네이티브로 Iceberg 형식을 인식하지 못해요. Register my existing Iceberg tables in Glue 프롬프트를 사용해 크롤러를 우회하고 올바른 table_type = ICEBERG 파라미터와 메타데이터 위치로 테이블을 직접 등록해요.

Athena CTAS가 HIVE_BAD_DATA로 실패 — 증상: parquet-to-Iceberg 변환이 유형 불일치 오류로 실패. 해결: 소스 테이블에 Athena가 암묵적으로 캐스팅할 수 없는 컬럼 유형이 있어요. CoCo가 영향받은 컬럼에 명시적 CAST() 식으로 CTAS 문장을 다시 생성해요. Switch to Glue Spark for the conversion를 요청해 Athena 대신 add_files 방식을 사용할 수도 있어요.

Athena 백틱 구문 오류 — 증상: CTAS 또는 SELECT 쿼리가 SYNTAX_ERROR: backquoted identifiers are not supported로 실패. 해결: Athena의 Trino 엔진(v3)은 식별자에 백틱이 아니라 큰따옴표를 사용해요. CoCo는 생성된 SQL에서 자동으로 올바른 따옴표를 사용해요.

중복 파티션 컬럼 오류 — 증상: 파티션 테이블의 Athena 쿼리가 크롤링 후 중복 컬럼 오류로 실패. 해결: 이는 Snowflake 내보낸 parquet 파일이 파티션 컬럼을 파일 안과 Hive 디렉터리 경로(column=value/) 둘 다에 포함할 때 발생해요. Fix duplicate partition columns in my Glue table 프롬프트를 사용하면 CoCo가 aws glue update-table을 실행해 StorageDescriptor.Columns에서 중복을 제거해요.

Snowflake 카탈로그 통합

이 스킬을 사용해 AWS Glue Data Catalog에 대한 Snowflake 카탈로그 통합을 만들고, 접근 위임을 구성하고, Iceberg REST Catalog(IRC) 프로토콜을 사용해 Glue에 등록된 Iceberg 테이블을 Snowflake에서 직접 쿼리해요.

기능
기능 설명 예시 프롬프트
카탈로그 통합 설정 공개 연결 또는 AWS PrivateLink로 AWS Glue Data Catalog에 대한 Snowflake 카탈로그 통합 생성 "Set up a catalog integration for my AWS Glue Data Catalog"
접근 위임 S3 데이터 접근용 카탈로그 제공 자격 증명(Lake Formation) 또는 외부 볼륨 자격 증명 구성 "Help me choose between vended credentials and external volume for Glue access"
IAM 신뢰 정책 Snowflake IAM 사용자 ARN과 외부 ID 검색, AWS 신뢰 정책 구성 "What trust policy do I need to add to my IAM role for Snowflake?"
PrivateLink 연결 아웃바운드 PrivateLink 엔드포인트 프로비저닝, 비공개 연결용 카탈로그 통합 생성 "Set up a private Glue catalog integration using PrivateLink"
검증 Glue Data Catalog에서 네임스페이스와 테이블을 나열해 카탈로그 통합 테스트 "Verify my Glue catalog integration and list available tables"
문제 해결 연결 오류, IAM 권한 문제, Lake Formation 접근 실패, PrivateLink 문제 진단·수정 "My Glue catalog integration is returning a 403 error — help me fix it"
Snowflake 사전 요구사항

Snowflake:

  • ACCOUNTADMIN 역할, 또는 계정에 대한 CREATE INTEGRATION과 CREATE EXTERNAL VOLUME에 대한 명시적 부여.
  • PrivateLink 연결을 사용한다면 Business Critical Edition 이상.

AWS:

  • Glue Data Catalog가 구성되고 Iceberg 테이블이 등록된 AWS 계정.
  • Snowflake가 Glue와 S3에 접근하기 위해 가정할 수 있는 IAM 역할.
  • 카탈로그 제공 자격 증명(권장)을 사용한다면 Lake Formation 활성·구성.
시작하기

CoCo 세션을 시작하고 자연어로 스킬을 트리거해요.

Set up a catalog integration for my AWS Glue Data Catalog

CoCo는 한 번에 한 단계씩 설정을 안내하며, SQL을 생성하기 전에 AWS 계정 ID, 리전, IAM 역할 ARN, 접근 위임 모드, 연결 유형을 수집해요.

기존 통합을 검증하려면:

Verify my Glue catalog integration

실패하는 통합을 해결하려면:

My Glue catalog integration returns an error — help me diagnose it
인증

Glue 카탈로그 통합은 AWS SigV4 인증을 사용해요. Snowflake가 내 AWS 계정에서 IAM 역할을 가정해 Glue와 S3와 상호작용해요.

설정 중 CoCo는 내가 제공한 역할 ARN으로 CREATE CATALOG INTEGRATION SQL을 생성한 뒤, Snowflake IAM 사용자 ARN과 외부 ID를 검색해요. 해당 값을 IAM 역할의 신뢰 정책에 추가해 연결을 승인해요.

문제 해결

신뢰 관계 미구성 — 증상: 검증이 Access denied 또는 InvalidClientTokenId 오류를 반환. 해결: DESC CATALOG INTEGRATION <name>을 실행해 Snowflake IAM 사용자 ARN과 외부 ID를 검색한 뒤, AWS 콘솔의 IAM 역할 신뢰 정책에 추가해요.

외부 ID 불일치 — 증상: 신뢰 정책이 존재하는데도 검증이 인증 오류로 실패. 해결: DESC CATALOG INTEGRATION <name>을 다시 실행해 현재 외부 ID를 얻고 신뢰 정책 조건을 정확히 일치하도록 업데이트해요.

Lake Formation 접근 거부 — 증상: 테이블이 보이는데 쿼리가 403 Forbidden 또는 Lake Formation 권한 오류를 반환. 해결: Lake Formation 콘솔에서 Glue 데이터베이스와 테이블에 IAM 역할에 대한 SELECT 권한을 부여해요.

PrivateLink 엔드포인트 사용 불가 — 증상: CATALOG_API_TYPE = AWS_PRIVATE_GLUE가 있는 CREATE CATALOG INTEGRATION이 연결 오류로 실패. 해결: SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT('com.amazonaws.<region>.glue', 'glue.<region>.amazonaws.com')를 실행해 엔드포인트를 프로비저닝하고, 사용 가능해질 때까지 기다린 뒤 재시도해요.

크로스 리전 PrivateLink 미지원 — 증상: Snowflake 계정과 Glue Data Catalog가 다른 리전에 있을 때 PrivateLink 프로비저닝이 실패. 해결: 공개 연결을 사용하거나 Snowflake 계정과 Glue Data Catalog가 같은 AWS 리전에 있도록 해요. AWS는 Glue 서비스에 대한 크로스 리전 PrivateLink를 지원하지 않아요.

Databricks

CoCo는 워크스페이스 관리, Unity Catalog 탐색, ETL 파이프라인 구축, 번들 배포, 성능 진단, 비용 최적화 등을 위한 스킬이 있는 내장 Databricks 플러그인을 제공해요.

기능

기능 설명 예시 프롬프트
CLI 설정 & 인증 Databricks CLI 설치, OAuth 또는 개인 접근 토큰으로 워크스페이스 인증 "Help me install the Databricks CLI and authenticate to my workspace"
Unity Catalog Databricks 워크스페이스의 카탈로그, 스키마, 테이블, 볼륨 탐색 "List all catalogs in my Databricks workspace"
클러스터 & 작업 관리 클러스터 나열, 작업 실행 검사, 실패 보기, 컴퓨팅 리소스 관리 "Show me recent job runs that failed"
PySpark ETL 파이프라인 Delta 테이블을 읽고 쓰는 PySpark 노트북으로 medalion 아키텍처 ETL 파이프라인 구축 "Build a medallion ETL pipeline that reads and writes silver/gold tables"
Databricks의 dbt 스테이징·마트 레이어가 있고 Databricks용으로 구성되어 번들로 배포되는 dbt 프로젝트 생성 "Create a dbt project with staging and marts layers deployed via DAB"
자동화 번들(DAB) 예약된 작업, 파이프라인, 구성이 있는 Databricks Asset Bundles 초기화·배포 "Initialize a Databricks bundle project with a scheduled job that runs daily"
로컬 테스트 모의 dbutils와 SparkSession으로 PySpark 노트북용 pytest 단위 테스트 생성 "Generate pytest unit tests for my PySpark notebook that mock dbutils and SparkSession"
Spark 성능 느린 Spark 작업 진단, 스필·스큐·셔플 병목 식별, 수정 권장 "My Spark job is slow and spilling to disk – help me diagnose and fix it"
비용 최적화 Databricks 컴퓨팅 지출 감사, 낭비 식별, 적정 규모·정책 변경 권장 "Audit my Databricks compute costs and recommend optimizations"
노트북 리팩터링 모노리식 노트북을 얇은 오케스트레이터 노트북이 있는 모듈식 Python 패키지로 리팩터링 "Refactor my large notebook into modular Python packages with thin orchestrator notebooks"
Databricks SQL 구체화 뷰 생성·관리, AI 함수 사용, SQL 웨어하우스 작업 "Help me create a materialized view and use AI functions in Databricks SQL"

Databricks 사전 요구사항

  • API 접근이 활성화된 Databricks 워크스페이스.
  • 수행할 작업에 대한 워크스페이스 관리자 또는 충분한 권한.
  • Databricks CLI가 없으면 첫 사용 시 자동으로 설치돼요.

Databricks 플러그인 켜기

플러그인을 켜고 새 CoCo 세션을 시작해요.

cortex plugin enable databricks
cortex

켠 뒤 Databricks 스킬은 플러그인을 끄기 전까지 모든 향후 세션에서 사용할 수 있어요.

플러그인을 끄려면:

cortex plugin disable databricks

시작하기

플러그인을 켠 뒤 CoCo 세션을 시작하고 연결을 설정해요.

Help me install the Databricks CLI and authenticate to my workspace

연결되면 환경을 탐색해요.

List all catalogs in my Databricks workspace
List my Databricks clusters
Show me recent job runs that failed

그런 다음 더 고급 워크플로를 시도해요.

Build a medallion ETL pipeline that reads and writes silver/gold tables
Create a dbt project with staging and marts layers deployed via DAB
Initialize a Databricks bundle project with a scheduled job that runs daily
Generate pytest unit tests for my PySpark notebook that mock dbutils and SparkSession
My Spark job is slow and spilling to disk -- help me diagnose and fix it
Audit my Databricks compute costs and recommend optimizations
Refactor my large notebook into modular Python packages with thin orchestrator notebooks
Help me create a materialized view and use AI functions in Databricks SQL

인증

Databricks 플러그인은 Databricks CLI의 인증을 사용해요. OAuth(권장) 또는 개인 접근 토큰으로 인증할 수 있어요.

OAuth(권장) — 다음 명령을 실행하고 브라우저 프롬프트를 따라요.

databricks auth login --host https://your-workspace.cloud.databricks.com

이 명령은 로컬에 저장된 재사용 가능한 OAuth 토큰을 생성해요. CoCo가 자동으로 사용해요.

개인 접근 토큰 — CoCo를 시작하기 전에 다음 환경 변수를 설정해요.

export DATABRICKS_HOST=https://your-workspace.cloud.databricks.com
export DATABRICKS_TOKEN=your-personal-access-token

문제 해결

플러그인을 찾을 수 없음 — 증상: cortex plugin enable databricks이 플러그인이 없다고 보고. 해결: CoCo CLI를 최신 버전으로 업데이트해요. Databricks 플러그인은 버전 1.0.75부터 CoCo와 함께 제공돼요.

인증 실패 — 증상: 작업이 401 또는 403 오류를 반환. 해결: 다음 단계를 시도해요.

  • OAuth 토큰을 새로고침하려면 databricks auth login을 다시 실행.
  • 개인 접근 토큰이 만료되지 않았는지 확인.
  • 내 사용자가 작업에 필요한 워크스페이스 권한이 있는지 확인.

워크스페이스 연결 — 증상: 작업이 타임아웃되거나 연결 실패. 해결: 워크스페이스 URL이 올바르고 내 머신에서 도달 가능한지 확인해요. VPN이나 방화벽 뒤라면 Databricks 워크스페이스로의 나가는 HTTPS 트래픽이 허용되는지 확인해요.

더 알아보기