SAP BDC 액세스 문제 해결

이 페이지에서는 SAP Business Data Cloud (BDC)를 BigQuery와 통합할 때 발생하는 일반적인 문제를 해결하는 방법을 설명합니다. SAP에서 Google Cloud (통합) 워크플로의 경우 Lakehouse 문제 해결 페이지를 참조하세요.

테이블을 쿼리할 때 NOT_FOUND 또는 PERMISSION_DENIED 오류

이 문제는 SAP BDC 측에서 액세스 권한이 취소될 때 발생합니다. 영향을 받는 테이블에 대한 쿼리가 실패하고 Delta Sharing 엔드포인트에서 발생한 '찾을 수 없음' 또는 '액세스 권한이 거부됨' 오류가 반환됩니다.

이 문제를 해결하려면 SAP 관리자와 협력하여 테이블에 대한 액세스 권한을 복원하세요. SAP의 액세스 관리에 대한 자세한 내용은 SAP 문서에서 Working with Data Products in SAP Business Data Cloud Connect 을(를) 참조하세요.

SAP BDC 테이블에 데이터를 쓸 수 없음

이 문제는 BigQuery에서 SAP BDC 테이블의 데이터를 쓰거나 수정하려고 할 때 발생합니다. 이 통합은 SAP BDC 데이터에 대한 읽기 전용 액세스를 제공합니다.

이 문제를 해결하려면 SAP BDC에서 직접 데이터를 수정하세요.

Delta Sharing API 호출에 대한 예기치 않은 가격 책정 요금

이 문제는 Lakehouse 카탈로그가 테이블을 나열하고 테이블 메타데이터를 가져오기 위해 Delta Sharing API를 호출하는 SAP BDC와 너무 자주 동기화되는 경우 발생할 수 있습니다. 이러한 API 호출은 Lakehouse 클래스 A 작업으로 청구됩니다.

이 문제를 해결하려면 카탈로그의 새로고침 간격을 늘려 API 호출 빈도를 줄이세요. 가격 책정에 대한 자세한 내용은 Lakehouse 가격 책정을 참조하세요.

SAP에서 게시된 테이블을 찾거나 쿼리할 수 없음

이 문제는 SAP BDC에 필요한 Apache Iceberg 메타데이터가 Cloud Storage 버킷에서 올바르게 생성되지 않은 경우 발생할 수 있습니다.

이 문제를 해결하려면 테이블을 지원하는 스토리지 경로에 예상되는 메타데이터 파일이 있는지 확인하세요.

  1. 테이블의 metadata 폴더 콘텐츠를 나열합니다.

    gcloud storage ls "gs://BUCKET_NAME/NAMESPACE_NAME/TABLE_NAME/metadata/"
  2. 출력에 다음을 포함한 표준 Apache Iceberg 메타데이터 파일이 포함되어 있는지 확인합니다.

    • version-hint.txt
    • v*.metadata.json
    • 매니페스트 파일 (.avro). 이러한 파일이 누락된 경우 BigQuery에서 Iceberg REST 카탈로그 구성 또는 쓰기 작업을 확인하여 데이터와 메타데이터가 스토리지 버킷에 구체화되는지 확인합니다.

기본 키 또는 null 허용 필드 오류로 인해 테이블 게시 실패

이 문제는 Apache Iceberg 카탈로그 또는 데이터 제품을 SAP BDC에 게시하지만 카탈로그 또는 데이터 제품 내의 테이블에 Iceberg 메타데이터에 정의된 기본 키가 없거나 기본 키 열 중 하나가 null 허용(required: false)으로 정의된 경우 발생합니다.

이 문제가 발생하면 다음 오류 중 하나로 인해 게시가 실패합니다.

  • INVALID_ARGUMENT: Failed to generate Core Schema Notation (CSN) payload: Table 'TABLE_NAME' must have a primary key constraint to be published to SAP.
  • INVALID_ARGUMENT: Field COLUMN_NAME is not required, but is referenced in the identifier-field-ids property.

SAP BDC에서는 게시된 모든 테이블이 Iceberg 메타데이터에서 identifier-field-ids를 사용하여 기본 키 제약조건을 정의해야 합니다. Apache Iceberg 사양에 따라 identifier-field-ids에 지정된 모든 열도 null을 허용하지 않도록 (required: true) 구성해야 합니다.

이 문제를 해결하려면 BigLake Iceberg REST API를 사용하여 기본 키 열을 required: true로 표시하고 identifier-field-ids에서 필드 ID를 지정하는 원자 스키마 업데이트를 실행하세요.

  1. 승인을 위한 액세스 토큰을 가져옵니다.

    TOKEN=$(gcloud auth application-default print-access-token)
  2. Python을 사용하여 Iceberg REST 스키마 업데이트 커밋을 전송합니다.

    import requests
    
    headers = {
        "Authorization": f"Bearer {TOKEN}",
        "x-goog-user-project": "PROJECT_ID",
        "X-Iceberg-Access-Delegation": "vended-credentials",
        "Content-Type": "application/json",
    }
    url = "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME"
    
    # 1. Fetch current metadata
    meta = requests.get(url, headers=headers).json()["metadata"]
    schema = meta["schemas"][0].copy()
    schema["fields"] = [f.copy() for f in schema["fields"]]
    
    # 2. Mark primary key column as required (non-nullable) and set identifier-field-ids
    for f in schema["fields"]:
      if f["name"] == "PRIMARY_KEY_COLUMN_NAME":
        f["required"] = True
    schema["identifier-field-ids"] = [PRIMARY_KEY_FIELD_ID]
    schema["schema-id"] = meta.get("last-schema-id", 0) + 1
    
    # 3. Commit the updated schema
    update_payload = {
        "requirements": [{"type": "assert-table-uuid", "uuid": meta["table-uuid"]}],
        "updates": [
            {
                "action": "add-schema",
                "schema": schema,
                "last-column-id": meta.get("last-column-id", 0),
            },
            {"action": "set-current-schema", "schema-id": -1},
        ],
    }
    response = requests.post(url, headers=headers, json=update_payload)
    response.raise_for_status()

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다. Google Cloud
    • ICEBERG_CATALOG_ID: Iceberg REST 카탈로그 ID입니다.
    • NAMESPACE_NAME: Iceberg 네임스페이스 이름입니다.
    • TABLE_NAME: Iceberg 테이블 이름입니다.
    • PRIMARY_KEY_COLUMN_NAME: 기본 키로 설정할 열의 이름입니다.
    • PRIMARY_KEY_FIELD_ID: 기본 키 열의 정수 필드 ID입니다 (예: 1).

SAP에서 권한 또는 찾을 수 없음 오류로 인해 쿼리가 실패함

이 문제는 카탈로그 또는 데이터 제품이 SAP BDC에 게시된 후 BigQuery에서 액세스 권한이 취소되거나 권한이 수정된 경우 발생할 수 있습니다. 영향을 받는 테이블에 대한 쿼리는 SAP 측에서 실패하며 일반적으로 BigQuery에서 발생한 '찾을 수 없음' 또는 '액세스 권한이 거부됨' 오류가 발생합니다.

이 문제를 해결하려면 워크로드 아이덴티티 제휴 주 구성원이 필요한 역할 (예: BigLake 뷰어)을 유지하고 표준 BigQuery 데이터 세트 또는 테이블 액세스 권한이 부여되었는지 확인하세요. SAP에서 데이터 제품을 설치하고 사용하는 방법에 대한 자세한 내용은 SAP 문서에서 데이터 제품 설치를 참조하세요.

새 테이블 또는 메타데이터 변경사항이 SAP BDC에 표시되지 않음

이 문제는 Apache Iceberg REST 카탈로그 또는 Knowledge Catalog 데이터 제품에 새 테이블을 추가하거나 기존 테이블 메타데이터를 업데이트하지만 SAP 소비자에게 변경사항이 표시되지 않는 경우 발생할 수 있습니다. 기본 데이터는 최신 상태로 유지되지만 메타데이터 업데이트에는 명시적인 작업이 필요할 수 있습니다.

이 문제를 해결하려면 카탈로그 또는 데이터 제품에 새 게시 작업 (gcloud biglake data-product-sharing publish)을 실행하여 SAP BDC에서 새 메타데이터를 검색할 수 있도록 합니다.

SAP에서 BigQuery로 데이터를 다시 쓸 수 없음

이 문제는 게시된 SAP 통합을 사용하여 SAP BDC에서 BigQuery의 데이터를 쓰거나 수정하려고 할 때 발생합니다. 이 통합은 데이터가 실수로 덮어쓰이거나 보안 위반이 발생하지 않도록 SAP BDC에서 BigQuery 데이터에 대한 읽기 전용 액세스를 제공합니다.

이 문제를 해결하려면 BigQuery 또는 standard Google Cloud pipelines를 사용하여 소스 데이터를 직접 조작하고 쓰세요.

테이블을 쿼리할 때 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 오류

이 문제는 환경에 VPC 서비스 제어가 적용되어 있고 프로젝트에 적용된 경계가 storage.googleapis.com 서비스를 제한하는 경우 발생할 수 있습니다. Dremel은 테이블을 쿼리할 때 SAP 프로젝트에서 수신 Cloud Storage 버킷을 읽어야 하므로 SAP 프로젝트가 경계 외부에 있으므로 요청이 금지됩니다.

이 문제를 해결하려면 VPC 서비스 제어 이그레스 규칙을 구성하세요. 구성 에 대한 자세한 내용은 SAP BDC의 VPC 서비스 제어 구성을 참조하세요.