

# HubSpot에 연결
<a name="connecting-to-data-hubspot"></a>

HubSpot의 CRM 플랫폼에는 마케팅, 영업, 콘텐츠 관리 및 고객 서비스에 필요한 모든 도구가 통합되어 있습니다.
+ Marketing Hub - 트래픽을 늘리고, 더 많은 방문자를 전환하고, 대규모로 전체 인바운드 마케팅 캠페인을 실행하는 데 도움이 되는 마케팅 소프트웨어입니다.
+ Sales Hub - 잠재 고객에 대한 심층적인 인사이트를 얻고, 보유 중인 작업을 자동화하고, 더 많은 거래를 더 빠르게 성사시키는 데 도움이 되는 영업 CRM 소프트웨어입니다.
+ Service Hub - 고객과 연결하고, 기대치를 초과 달성하며, 비즈니스의 성장 요소로 전환하는 데 도움이 되는 고객 서비스 소프트웨어입니다.
+ Operations Hub - 앱을 동기화하고, 고객 데이터를 정리 및 생성하고, 프로세스를 자동화하는 운영 소프트웨어로 모든 시스템과 팀의 협업을 개선할 수 있습니다.

**Topics**
+ [HubSpot의 AWS Glue 지원](hubspot-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](hubspot-configuring-iam-permissions.md)
+ [HubSpot 구성](hubspot-configuring.md)
+ [HubSpot 연결 구성](hubspot-configuring-connections.md)
+ [HubSpot 엔터티에서 읽기](hubspot-reading-from-entities.md)
+ [HubSpot 엔터티에 쓰기](hubspot-writing-to-entities.md)
+ [HubSpot 연결 옵션](hubspot-connection-options.md)
+ [HubSpot 커넥터의 제한 사항 및 참고 사항](hubspot-connector-limitations.md)

# HubSpot의 AWS Glue 지원
<a name="hubspot-support"></a>

AWS Glue는 다음과 같이 HubSpot을 지원합니다.

**소스로 지원되나요?**  
예 - 동기화 및 비동기. AWS Glue ETL 작업을 사용하여 HubSpot에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 HubSpot에 데이터를 쓸 수 있습니다.

**지원되는 HubSpot API 버전**  
다음 HubSpot API 버전이 지원됩니다.
+ v1
+ v2
+ v3
+ v4

버전별 엔터티 지원은 [동기화 소스에 대해 지원되는 엔터티](hubspot-reading-from-entities.md#sync-table) 및 [비동기 소스에 대해 지원되는 엔터티:](hubspot-reading-from-entities.md#async-table) 섹션을 참조하세요.

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="hubspot-configuring-iam-permissions"></a>

다음 샘플 정책은 연결을 생성하고 사용하는 데 필요한 AWS IAM 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

위 메서드를 사용하지 않으려는 경우 대신 다음 관리형 IAM 정책을 사용합니다.
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 다양한 AWS Glue 프로세스를 대신 실행하는 데 필요한 리소스에 대한 액세스 권한을 부여합니다. 이러한 리소스에는 AWS Glue, Amazon S3, IAM, CloudWatch Logs 및 Amazon EC2가 포함됩니다. 이 정책에 지정된 리소스의 이름 변환을 따르고자 한다면 AWS Glue 절차는 필요한 권한을 소유합니다. 이 정책은 크롤러, 작업 및 개발 엔드포인트를 정의할 때 지정된 역할에 일반적으로 추가됩니다.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) - 정책이 연결된 자격 증명이 AWS Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# HubSpot 구성
<a name="hubspot-configuring"></a>

AWS Glue를 사용하여 HubSpot에서 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="hubspot-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ HubSpot 계정이 있습니다. 자세한 내용은 [HubSpot 계정 생성](#hubspot-configuring-creating-hubspot-account) 섹션을 참조하세요.
+ HubSpot 계정이 API 액세스에 대해 활성화되어 있습니다.
+ 계정에 대해 인증된 직접 호출을 수행하는 경우 AWS Glue에서 데이터에 안전하게 액세스하기 위해 사용하는 클라이언트 자격 증명을 제공하는 앱이 HubSpot 개발자 계정 아래에 있어야 합니다. 자세한 내용은 [HubSpot 개발자 앱 생성](#hubspot-configuring-creating-hubspot-developer-app) 섹션을 참조하세요.

이러한 요구 사항을 충족하면 HubSpot 계정에 AWS Glue를 연결할 준비가 된 것입니다. 일반적인 연결의 경우 HubSpot에서 다른 작업을 수행하지 않아도 됩니다.

## HubSpot 계정 생성
<a name="hubspot-configuring-creating-hubspot-account"></a>

HubSpot 계정을 생성하려면 다음을 수행합니다.

1. [HubSpot CRM SignUp URL](https://app.hubspot.com/login)로 이동합니다.

1. 이메일 주소를 입력하고 **이메일 확인**을 선택합니다(또는 Google, Microsoft 또는 Apple 계정으로 가입하도록 선택할 수 있음).

1. 받은 편지함에서 HubSpot의 확인 코드를 확인합니다.

1. 6자리 확인 코드를 입력하고 **다음**을 클릭합니다.

1. 암호를 입력하고 **다음**을 클릭합니다.

1. 이름과 성을 입력하고 **다음**을 클릭하거나 **Google로 가입** 링크를 사용하여 가입합니다.

1. 업종을 입력하고 **다음**을 클릭합니다.

1. 직무 역할을 입력하고 **다음**을 클릭합니다.

1. 회사 이름을 입력하고 **다음**을 클릭합니다.

1. 회사 규모(회사에서 근무하는 직원 수)를 선택하고 **다음**을 클릭합니다.

1. 회사 웹 사이트를 입력하고 **다음**을 클릭합니다.

1. 데이터를 호스팅할 위치(미국 또는 유럽)를 선택하고 **계정 생성**을 클릭합니다.

1. 계정 생성 목적을 선택하고 **다음**을 클릭합니다.

1. **Google 계정 연결**을 선택하거나 연락처를 직접 추가하여 연락처를 HubSpot 계정에 연결하도록 선택합니다.

1. **Google 계정 연결** 옵션을 선택하여 연락처를 연결하고 HubSpot 계정 사용을 시작한 경우 Google 계정에 로그인합니다.

## HubSpot 개발자 앱 생성
<a name="hubspot-configuring-creating-hubspot-developer-app"></a>

앱 개발자 계정은 앱, 통합 및 개발자 테스트 계정을 생성하고 관리하기 위한 것입니다. 또한 App Marketplace 목록을 생성하고 관리할 수 있습니다. 그러나 앱 개발자 계정 및 관련 테스트 계정은 표준 HubSpot 계정에 연결되지 않습니다. 다른 HubSpot 계정과 데이터 또는 자산을 동기화할 수 없습니다. 클라이언트 ID 및 클라이언트 보안 암호를 가져오려면 개발자 계정을 생성합니다.

1. https://developers.hubspot.com/으로 이동합니다.

1. **개발자 계정 생성**을 선택하고 아래로 스크롤합니다.

1. 앱 개발자 계정, 프라이빗 앱 계정 또는 CMS 개발자 샌드박스 계정을 생성할지 묻는 메시지가 표시됩니다. **앱 개발자 계정 생성**을 선택합니다.

1. 이미 HubSpot으로 계정을 생성했으므로 **이 사용자로 계속**을 선택할 수 있습니다.

1. **가입 시작**을 클릭합니다.

1. 직무 역할을 입력하고 **다음**을 클릭합니다.

1. 개발자 계정의 이름을 지정하고 **다음**을 클릭한 다음, **건너뛰기**를 클릭합니다.

1. **앱 생성**을 선택합니다.

1. 앱이 생성되면 **인증**을 선택합니다.

1. 인증에서 클라이언트 ID 및 클라이언트 암호를 메모합니다.

1. 리전별 **리디렉션 URL**을 https:*//<aws-region>*.console.aws.amazon.com/gluestudio/oauth로 추가합니다. 예를 들어 us-east-1 리전에 https://us-east-1.console.aws.amazon.com/gluestudio/oauth를 추가합니다.

1. 아래로 스크롤하여 범위를 찾습니다. ‘CRM’ 및 ‘Standard’ 제목에서 두 가지 종류의 범위를 선택해야 합니다.

1. 다음 범위를 추가합니다.

   ```
   content
   automation
   oauth
   crm.objects.owners.read
   forms
   tickets
   crm.objects.contacts.write
   e-commerce
   crm.schemas.custom.read
   crm.objects.custom.read
   sales-email-read
   crm.objects.custom.write
   crm.objects.companies.write
   crm.lists.write
   crm.objects.companies.read
   crm.lists.read
   crm.objects.deals.read
   crm.objects.deals.write
   crm.objects.contacts.read
   ```

1. **저장**을 클릭하면 이제 개발 계정을 사용할 준비가 됩니다.

1. 위로 스크롤하여 **클라이언트 ID**를 찾습니다.

1. 동일한 페이지에서 **표시**를 클릭하여 **클라이언트 암호**를 가져옵니다.

## HubSpot 개발자 테스트 계정 생성
<a name="hubspot-configuring-creating-hubspot-developer-test-account"></a>

앱 개발자 계정 내에서 개발자 테스트 계정을 생성하여 실제 HubSpot 데이터에 영향을 주지 않고 앱 및 통합을 테스트할 수 있습니다. 개발자 테스트 계정은 프로덕션 계정을 미러링하지 않고 Marketing, Sales, CMS 및 Operations Hub의 엔터프라이즈 버전 90일 평가판에 액세스하여 대부분의 HubSpot 도구 및 API를 테스트할 수 있습니다.

1. **홈**을 클릭하세요.

1. **테스트 계정 생성**을 클릭합니다.

1. **앱 테스트 계정 생성**을 클릭합니다.

1. 새 창이 나타납니다. 앱 테스트 계정 이름을 입력하고 **생성**을 클릭합니다.

   이제 앱 테스트 계정이 생성됩니다.

**참고**  
개발자 계정은 API 통합과 같은 개발 활동과 관련이 있으며, 앱 테스트 계정은 개발자 계정에서 생성 또는 가져오는 데이터를 보는 데 사용됩니다.

# HubSpot 연결 구성
<a name="hubspot-configuring-connections"></a>

HubSpot에서는 OAuth2에 대한 AUTHORIZATION\$1CODE 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다. 연결을 생성하는 사용자는 HubSpot 클라이언트 애플리케이션에 대한 클라이언트 ID 및 클라이언트 보안 암호와 같은 OAuth 관련 정보를 제공해야 합니다. AWS Glue 콘솔은 사용자를 HubSpot으로 리디렉션합니다. 사용자가 로그인하고 HubSpot 인스턴스에 액세스하도록 요청된 권한을 AWS Glue에 허용해야 합니다.
+ 사용자는 여전히 AWS Glue 콘솔을 통해 연결을 생성할 때에도 HubSpot에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 HubSpot으로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.
+ 이 권한 부여 유형은 새로 고침 토큰과 액세스 토큰을 생성합니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰을 사용하여 사용자 상호 작용 없이 자동으로 새로 고칠 수 있습니다.
+ 권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성에 대한 퍼블릭 HubSpot 설명서는 [Public apps](https://developers.hubspot.com/docs/api/creating-an-app)을 참조하세요.

HubSpot 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1. 고객 관리형 연결된 앱의 경우 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.

   1. 참고: AWS Glue에서 연결의 보안 암호를 생성해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **연결 유형**을 선택할 때 HubSpot을 선택합니다.

   1. HubSpot 환경을 제공합니다.

   1. 다음 작업에 대한 권한이 있고 AWS Glue에서 수임할 수 있는 AWS IAM 역할을 선택합니다.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다.

   1. 네트워크를 사용하려는 경우 네트워크 옵션을 선택합니다.

1. AWS Glue 작업 권한과 연결된 IAM 역할에 `secretName`을 읽을 수 있는 권한을 부여합니다.

1. AWS Glue 작업 구성에서** 추가 네트워크 연결**로 `connectionName`을 제공합니다.

# HubSpot 엔터티에서 읽기
<a name="hubspot-reading-from-entities"></a>

**사전 조건**

읽으려는 HubSpot 객체. 객체 이름(예: 연락처 또는 태스크)이 필요합니다. 다음 표에는 동기화 소스에 대해 지원되는 엔터티가 나와 있습니다.

## 동기화 소스에 대해 지원되는 엔터티
<a name="sync-table"></a>


| 개체 | API 버전 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | --- | 
| Campaigns | v1 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 회사 | v3 | 예 | 예 | 예 | 예 | 예 | 
| Contacts | v3 | 예 | 예 | 예 | 예 | 예 | 
| 연락처 목록 | v1 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 거래 | v3 | 예 | 예 | 예 | 예 | 예 | 
| CRM 파이프라인(거래 파이프라인) | v1 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 이메일 이벤트 | v1 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 호출 | v3 | 예 | 예 | 예 | 예 | 예 | 
| Notes | v3 | 예 | 예 | 예 | 예 | 예 | 
| 이메일 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 회의 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 업무 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 우편 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 사용자 지정 객체 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 양식 | v2 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 소유자 | v3 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| Products | v3 | 예 | 예 | 예 | 예 | 예 | 
| 티켓 | v3 | 예 | 예 | 예 | 예 | 예 | 
| 워크플로 | v3 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Associations | v4 | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| 연결 레이블 | v4 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 

**예시:**

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3"
    }
```

## 비동기 소스에 대해 지원되는 엔터티:
<a name="async-table"></a>


| 개체 | API 버전 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | --- | 
| Companies | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| Contacts | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 거래 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 호출 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| Notes | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| Emails | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 회의 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 업무 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 우편 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 사용자 지정 객체 | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| Products | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 
| Tickets | v3 | 예 | 아니요 | 예 | 예 | 아니요 | 

**예시:**

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3",
        "TRANSFER_MODE": "ASYNC"
    }
```

**HubSpot 엔터티 및 필드 세부 정보**:

**HubSpot API v4**: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

**참고**  
`Associations` 객체의 경우 두 객체 사이의 연결을 가져오려면 AWS Glue 작업을 생성하는 동안 필수 필터를 통해 'from Id'(첫 번째 객체의 ID)를 제공해야 합니다. 이 경우 여러 ID에 대한 연결을 가져오려면 `where` 절에서 여러 ID를 제공해야 합니다. 예: 연락처 ID '1' 및 '151'에 대한 `Associations`를 가져오는 경우 필터를 `where id=1 AND id=151`로 제공해야 합니다.

**HubSpot API v3**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

다음 엔터티에 대해 HubSpot에서는 메타데이터를 동적으로 가져도록 엔드포인트를 제공하므로 운영자 지원이 각 엔터티의 데이터 유형 수준에서 캡처됩니다.

**참고**  
`DML_STATUS`는 동기화 모드에서 런타임 시 모든 레코드에 추가된 가상 필드로, 해당 상태를 결정합니다(CREATED/UPDATED). `CONTAINS/LIKE` 연산자는 비동기 모드에서 지원되지 않습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

**HubSpot API v2**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

**HubSpot API v1**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

## 쿼리 파티셔닝
<a name="hubspot-reading-partitioning-queries"></a>

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND`, `NUM_PARTITIONS`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(**경계 포함**).

  DateTime 필드의 경우 ISO 형식의 값이 허용됩니다.

  유효한 값의 예제:

  ```
  “2024-01-01T10:00:00.115Z" 
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).
+ `NUM_PARTITIONS`: 파티션 수.

다음 표에서는 엔터티 분할 필드 지원 세부 정보를 설명합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/hubspot-reading-from-entities.html)

예시:

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "company",
        "API_VERSION": "v3",
        "PARTITION_FIELD": "hs_object_id"
        "LOWER_BOUND": "50"
        "UPPER_BOUND": "16726619290"
        "NUM_PARTITIONS": "10"
    }
```

# HubSpot 엔터티에 쓰기
<a name="hubspot-writing-to-entities"></a>

## 사전 조건
<a name="hubspot-writing-prerequisites"></a>
+ 데이터를 쓰려는 HubSpot 객체. 객체 이름(예: 연락처 또는 티켓)이 필요합니다.
+ HubSpot 커넥터는 다음 쓰기 작업을 지원합니다.
  + INSERT
  + UPDATE
+ `UPDATE` 쓰기 작업을 사용하는 경우 `ID_FIELD_NAMES` 옵션을 제공하여 레코드의 ID 필드를 지정해야 합니다.

## 동기화 대상에 지원되는 엔터티
<a name="hubspot-supported-entities"></a>


| 개체 | API 버전 | 대상 커넥터로 지원됩니다. | 삽입 가능 | 업데이트 가능 | 
| --- | --- | --- | --- | --- | 
| Companies | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| Contacts | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 거래 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| Products | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 호출 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 회의 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| Notes | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| Emails | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 업무 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 우편 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 사용자 지정 객체 | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| Tickets | v3 | 예 | 예(단일, 대량) | 예(단일, 대량) | 
| 연결 | v4 | 예 | 예(단일, 대량) | 아니요 | 
| 연결 레이블 | v4 | 예 | 예(단일, 대량) | 예(단일, 대량) | 

**예**:

**INSERT 작업**

```
hubspot_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3",
        "WRITE_OPERATION": "INSERT"
    }
)
```

**UPDATE 작업**

```
hubspot_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deal",
        "API_VERSION": "v3",
        "WRITE_OPERATION": "UPDATE",
        "ID_FIELD_NAMES": "hs_object_id"
    }
)
```

# HubSpot 연결 옵션
<a name="hubspot-connection-options"></a>

다음은 HubSpot의 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. HubSpot에서의 객체 이름입니다.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용할 HubSpot Rest API 버전입니다. 예: v1,v2,v3,v4.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.
+ `TRANSFER_MODE`(문자열) - 쿼리를 비동기 모드에서 실행해야 하는지 여부를 나타내는 데 사용됩니다.
+ `WRITE_OPERATION`(문자열) - 기본값: INSERT. 쓰기에 사용됩니다. 값은 INSERT 또는 UPDATE여야 합니다.
+ `ID_FIELD_NAMES`(문자열) - 기본값: null. UPDATE에 필수입니다.

# HubSpot 커넥터의 제한 사항 및 참고 사항
<a name="hubspot-connector-limitations"></a>

다음은 HubSpot 커넥터의 제한 사항입니다.
+ 검색 엔드포인트는 지정된 쿼리에 대해 총 10,000개의 결과로 제한됩니다. 레코드가 10,000개를 초과하는 파티션은 400 오류가 발생합니다.
+ 커넥터에 대한 기타 중요한 제한 사항은 [제한 사항](https://developers.hubspot.com/docs/api/crm/search#limitations)에 설명되어 있습니다.
+ HubSpot은 최대 3개의 필터링 문을 허용합니다.
+ 현재 HubSpot은 표준 HubSpot 객체(예: 연락처, 회사, 거래 또는 티켓)와 사용자 지정 객체 간의 연결을 지원합니다.
  + 무료 계정의 경우: 각 객체 페어링(예: 연락처 및 회사) 간에 최대 10개의 연결 유형만 생성할 수 있습니다.
  + 슈퍼 관리자 계정의 경우: 각 객체 페어링 간에 최대 50개의 연결 유형만 생성할 수 있습니다.
  + 자세한 내용은 [연결 v4](https://developers.hubspot.com/docs/api/crm/) 및 [연결 레이블 생성과 사용](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels)을 참조하세요.
+ 'Quote' 및 'Communications' 객체는 현재 커넥터에서 지원되지 않으므로 연결에 없습니다.
+ 비동기의 경우 SaaS는 값을 오름차순으로만 정렬합니다.
+ `Ticket` 엔터티의 경우 SaaS는 비동기 모드에서 `hs_object_id` 필드를 반환하지 않습니다.